Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 89 → Rev 90

/Microsoft Robotics Studio/FC source/V68d for MSRS/Flight-Ctrl_MEGA644_V0_90b.hex
0,0 → 1,1924
:100000000C9414020C9431020C9431020C943102C1
:100010000C9431020C9431020C9431020C94310294
:100020000C9431020C94180D0C9431020C94310292
:100030000C942A160C9431020C9431020C94310267
:100040000C9431020C9431020C94540C0C94310237
:100050000C944A050C9431020C9414050C94310252
:100060000C94140E0C9431020C945F150C94310214
:100070000C94AF040C9431020C9479040A0A0D001C
:100080004E65757472616C0048656164696E67489D
:100090006F6C64000A0D537465756572756E673A0E
:1000A00020004F4B0A0D000A0D4162676C656963C1
:1000B00068204C756674647275636B73656E736FDC
:1000C000722E2E000A0D42656E75747A652050619D
:1000D00072616D657465727361747A202564000ABB
:1000E0000D414343206E69636874206162676567F0
:1000F0006C696368656E21000A0D496E69742E2073
:10010000454550524F4D3A2047656E65726965729C
:10011000652044656661756C742D506172616D6512
:100120007465722E2E2E000A0D3D3D3D3D3D3D3D38
:100130003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DEF
:100140003D3D3D3D3D3D3D000A0D466C696768748F
:10015000436F6E74726F6C0A0D48617264776172DE
:10016000653A25642E25640A0D536F6674776172B3
:10017000653A5625642E2564256320002E005261C1
:100180006E67653A2533692D253369005374656CB4
:100190006C756E673A2025336900536574706F691A
:1001A0006E74202025336900536572766F2020001D
:1001B000506F7469343A202025336900506F746998
:1001C000333A202025336900506F7469323A202079
:1001D00025336900506F7469313A20202533690056
:1001E00053746172743A2020202020253569004D17
:1001F000657373776572743A2020253569005269FA
:10020000636874756E673A2020253569004B6F6D01
:10021000706173732020202020202000456D7066BF
:100220002E506567656C3A253569005370616E6EB6
:10023000756E673A202025356900486F6368202570
:10024000346920282533692900526F6C6C202534CD
:1002500069202825336929004E69636B202534699C
:1002600020282533692900414343202D2053656E02
:10027000736F720047696572202534692028253321
:10028000692900526F6C6C20253469202825336958
:1002900029004E69636B202534692028253369299C
:1002A00000476965722025346920282533692900B3
:1002B000526F6C6C20253469202825336929004E43
:1002C00069636B2025346920282533692900477923
:1002D000726F202D2053656E736F720050333A2574
:1002E0003469202050343A253469200050313A25B1
:1002F0003469202050323A253469200047733A256A
:100300003469202047693A25346920004E693A252E
:1003100034692020526F3A25346920004B373A2542
:10032000346920204B383A25346920004B353A2572
:10033000346920204B363A25346920004B333A2566
:10034000346920204B343A25346920004B313A255A
:10035000346920204B323A25346920004B6F6D7090
:100360006173733A20202025356900526F6C6C3A16
:10037000202020202020253569004E69636B3A201B
:10038000202020202025356900616B742E204C61CF
:1003900067650048F668656E726567656C756E67BF
:1003A000004B65696E6520004F6666202020202086
:1003B000203A20253569004C756674647275636B4C
:1003C0003A2025356900536F6C6C486F6568653A53
:1003D0002025356900486F6568653A202020202077
:1003E000253569002863292048422C20474C0053BA
:1003F000657474696E673A202564200048573A5640
:1004000025642E25642053573A25642E25642563E0
:10041000002B2B204D696B726F4B6F7074657220CF
:100420002B2B005B25695D0011241FBECFEFD0E1AF
:10043000DEBFCDBF13E0A0E0B1E0E0E8F5E702C029
:1004400005900D92A23AB107D9F718E0A2EAB3E0FD
:1004500001C01D92A13FB107E1F70E9470020C9408
:10046000BF3A0C94000022E030E0D9010E94AB3A80
:10047000802D863028F082E0D901082E0E94B33A00
:1004800099270895FB01282F863008F025E0842F56
:100490009927429FD0011124AC59BF4F019724F0F6
:1004A00001900E94B33AFACFA2E0B0E0022E0E947F
:1004B000B33A0895CF93DF93FB01C42FDD27863035
:1004C00008F085E0489FD0011124AC59BF4F219717
:1004D00024F00E94AB3A0192FACFDF91CF910895B8
:1004E0001F93CF93DF9314B815B8189B02C08BE00D
:1004F00001C08AE08093000181E887B98FEF88B955
:100500008BE184B981E085B98AE28AB9579A87EF8D
:100510008BB984B7877F84BF8091600088618093A6
:1005200060001092600080ED97E09093CB03809381
:10053000CA03109261041092600410924D08109248
:100540004C0810925F0410925E0410925D041092A9
:100550005C04809100018A3011F4289801C0289A27
:100560000E94BF0D0E944B070E9415160E940E0E9E
:100570000E944515789410921F068AE58093200604
:1005800087E0809321062091000182E690E09F930E
:100590008F938AE590E09F938F931F921F92822FF3
:1005A0006AE00E943B3A892F99279F938F93822F6D
:1005B0000E943B3A99279F938F9388E491E09F9301
:1005C0008F931F920E94B20987E291E09F938F93CD
:1005D0001F920E94B209299AA1E0B0E00E94AB3AB2
:1005E000802D2DB73EB7205F3F4F0FB6F8943EBF2A
:1005F0000FBE2DBF843409F43FC088EF90E09F9375
:100600008F931F920E94B2090E94102410E00F9055
:100610000F900F90123049F40E947E2347E464E764
:1006200078E082E00E94420202C0133051F40E943E
:10063000EE2247E464E778E083E00E94420214E09F
:1006400002C0143010F00E947E2347E464E778E093
:10065000812F0E9442021F5F1630E0F283E022E009
:1006600030E0D901082E0E94B33A84E42150304092
:10067000D901082E0E94B33AC4E0D0E0DE010E9406
:10068000AB3A802D853050F08FED90E09F938F93A3
:100690001F920E94B2090F900F900F902297DE01D7
:1006A0000E94AB3A802D863028F082E0DE01082ED1
:1006B0000E94B33A47E464E778E00E945A02DE0100
:1006C0000E94AB3A802D863028F082E0DE01082EB1
:1006D0000E94B33A99279F938F9384EC90E09F9365
:1006E0008F931F920E94B20980917C080F900F9007
:1006F0000F900F900F9080FD03C0C8EED3E020C094
:1007000087EA90E09F938F931F920E94B20988EE30
:1007100093E00E94030DEC010E94B0100F900F9027
:100720000F90CE010E940C0D8823D9F382EA90E04D
:100730009F938F931F920E94B2090F900F900F907A
:100740000E947821809100018A3011F4289801C01C
:10075000289A80ED97E09093CB038093CA0388EEAC
:1007600093E090931A068093190685E5809314060A
:1007700084E990E09F938F931F920E94B209809129
:100780007C080F900F900F9082FF03C088E890E0E4
:1007900002C080E890E09F938F931F920E94B2095D
:1007A0000F900F900F908CE790E09F938F931F9284
:1007B0000E94B2090E94F41088E893E190938703A5
:1007C000809386030F900F900F908091C70388232A
:1007D00009F462C01092C7030E94A1240E94312133
:1007E000209100012A3011F4289801C0289A8091A4
:1007F0000301882321F081508093030110C01092DF
:10080000B2031092B30310927C0410927B041092F6
:100810007E0410927D041092800410927F048091D7
:100820005B04882329F080915B04815080935B04F2
:100830008091860390918703892B01F585E090E0F4
:1008400090938703809386030E94EF1580910503A0
:10085000909106038F5F9F4FF9F480916204882383
:10086000D9F080E197E29093CB038093CA0380E8AC
:1008700090E090930603809305030EC08091860359
:1008800090918703019790938703809386032A3082
:1008900011F4289801C0289A0E947A070E942A0819
:1008A000CE010E940C0D882309F48FCF20910903FB
:1008B00030910A0380918C089927281739079CF4F6
:1008C00080910503909106038F5F9F4F61F480E74D
:1008D00097E19093CB038093CA0380E093E09093D9
:1008E00006038093050384E690E00E94030DEC016B
:1008F0006CCF1F920F920FB60F9211248F939F937C
:10090000EF93FF93809104018823E1F48091C30366
:100910009091C40301969093C4038093C303FC0198
:10092000E75DF94FE081ED3019F08639910539F432
:100930001092C4031092C30381E080930401E093FA
:10094000CE0004C01092C4031092C303FF91EF9134
:100950009F918F910F900FBE0F901F9018951F922F
:100960000F920FB60F9211242F938F939F93EF93B3
:10097000FF938091CE008093B5039091C203963986
:1009800010F01092C1032091B5032D3089F48091AD
:10099000C103823069F41092C10381E08093B603F1
:1009A0009093B703E92FFF27E956F84F208332C011
:1009B0008091C1038130A9F0813018F0823041F577
:1009C0001EC08091B503833229F58091B603882338
:1009D00009F591E09093C1038091B5038093970747
:1009E0000BC082E08093C103E92FFF278091B503FC
:1009F000E956F84F80839F5F9093C2030BC0E92FA5
:100A0000FF278091B503E956F84F8083963998F314
:100A10001092C103FF91EF919F918F912F910F90B1
:100A20000FBE0F901F9018951F920F920FB60F9246
:100A300011248F939F93EF93FF938091010188235B
:100A4000E1F48091BF039091C00301969093C0039D
:100A50008093BF03FC01EB51FB4FE081ED3019F0B7
:100A60008639910539F41092C0031092BF0381E0DA
:100A700080930101E093C60004C01092C00310925D
:100A8000BF03FF91EF919F918F910F900FBE0F9039
:100A90001F9018951F920F920FB60F9211242F934B
:100AA0003F934F938F939F93AF93BF93CF93DF93D6
:100AB000EF93FF938091C6008093A6034091BA0301
:100AC000463910F01092B9038091A6038D3009F0D9
:100AD0005CC08091B903823009F057C01092B9030D
:100AE000A42FBB27FD01E354F94F3081ED01C2541F
:100AF000D94F28818091BD039091BE03831B91093A
:100B0000821B91099F709093BE038093BD039C014B
:100B100096E0369527959A95E1F7235C2093BC03E0
:100B2000982F9F73935C9093BB038081281729F4BF
:100B30008881981711F491E006C08091A9038F5F16
:100B40008093A90390E08091A703882309F063C0F4
:100B5000992309F460C081E08093A7034093AA031E
:100B6000A154B94F8DE08C938091C106823509F074
:100B700052C088E190E02CE00FB6F894A8958093DD
:100B800060000FBE2093600046C08091B9038130A1
:100B9000D1F0813018F08230E1F52FC08091A603AA
:100BA0008332C9F58091A7038823A9F591E090933A
:100BB000B9038091A6038093BF069093BA038091F6
:100BC000A603992715C082E08093B903E42FFF277D
:100BD0008091A603E154F94F80834F5F4093BA039D
:100BE0002091A6038091BD039091BE03820F911DB9
:100BF0009093BE038093BD030EC0E42FFF27809126
:100C0000A603E154F94F8083463938F31092B903B3
:100C1000E7CF1092B903FF91EF91DF91CF91BF9190
:100C2000AF919F918F914F913F912F910F900FBE58
:100C30000F901F901895DC0120E030E040E050E07C
:100C4000E5EEF4E005C08191280F311D4F5F5F4F45
:100C50004A175B07C1F73F70C90136E09695879543
:100C60003A95E1F7835CFD01EB51FB4F80831196D0
:100C70002F73235CFD01EB51FB4F2083AA51BB4F27
:100C80008DE08C93109201018091E5048093C60061
:100C90000895262FE9E2F6E0DC0103C08D918193EF
:100CA00021502223D9F7E62FFF27E75DF94F8DE08A
:100CB000808310920401809129068093CE000895CC
:100CC000262FE5EEF4E0DC0103C08D9181932150E5
:100CD0002223D9F7E62FFF27EB51FB4F8DE08083CE
:100CE000109201011092B6038091E5048093C60032
:100CF0000895EF92FF920F931F93CF93DF937A01A2
:100D0000722F93E29093E5046093E6048093E704E6
:100D100003E010E060E0A8EEB4E046C0F701E60FA3
:100D2000F11D90816F5F715019F4E0E040E00FC059
:100D3000F701E60FF11D40816F5F715011F4E0E0A3
:100D400006C0F701E60FF11DE0816F5F7150892F3A
:100D500086958695835C8C935527892F9927837078
:100D6000907024E0880F991F2A95E1F79A0194E08A
:100D7000369527959A95E1F7822B835CED0189835F
:100D80004F705070440F551F440F551F8E2F829582
:100D9000869586958370842B835C8A83EF73E35CEE
:100DA000EB830C5F1F4F1496772309F0B7CFC80170
:100DB0000E941B06DF91CF911F910F91FF90EF9042
:100DC00008951F93CF93DF93EC0170E0A22FBB2710
:100DD000129748C0E42FFF27E154F94F30814F5F4D
:100DE000E42FFF27E154F94F50814F5FE42FFF2795
:100DF000E154F94F10814F5FE42FFF27E154F94F81
:100E000020814F5F842F9927A817B90774F15D538C
:100E1000FE01E70FF11D3D53330F330F852F8295F0
:100E20008F70382B3083613001F1912F9D537F5F9C
:100E3000FE01E70FF11D71505295507F892F869565
:100E40008695582B508363506F3F79F07E5FFE018B
:100E5000E70FF11D9295990F990F907C2D53922BCE
:100E600090837F5F662309F0B5CFDF91CF911F910B
:100E700008951F93182F8A3019F48DE00E943907C6
:100E80008091C00085FFFCCF1093C60080E090E009
:100E90001F9108950895E1ECF0E098E19083A0ECB3
:100EA000B0E08C9182608C938081806880838081A7
:100EB000806480838AE28093C400E9ECF0E0908350
:100EC000A8ECB0E08C9182608C93808180688083F4
:100ED0008081806480838AE290E09093CD0080934B
:100EE000CC0088EC90E00E94030D90931306809351
:100EF0001206089580910101882309F4AAC0809107
:100F0000B603882351F080910101882331F060916C
:100F1000B70387E997E00E9460068091B8038823B1
:100F200071F080910101882351F021E04BE755E0F9
:100F30006091DC0483E40E9479061092B8038091EA
:100F4000A203882371F080910101882351F02BE0E6
:100F500044E156E06091DC0487E40E947906109237
:100F6000A20380911206909113060E940C0D882313
:100F700021F48091A4038823B1F08091010188239A
:100F800091F022E445E557E06091DC0484E40E949E
:100F900079061092A40384EF91E00E94030D9093D0
:100FA000130680931206609102016F3F89F0462F6D
:100FB000552734E0440F551F3A95E1F74B5F5E4FDC
:100FC000605D20E181E40E9479068FEF8093020149
:100FD0008091A303882359F180910101882339F17D
:100FE0000E94FD101092A3033091AC03932F9F5FDA
:100FF0009093AC03943021F08091AD03882359F095
:1010000026E148E458E060E084E30E9479068FEF2F
:101010008093AC030CC044E1949FA0011124455E71
:101020005C4F24E160E0832F8F5C0E947906809101
:10103000A503882371F080910101882351F02AE0F3
:101040004FE156E06091DC0486E50E94790610923B
:10105000A50308951F93CF93DF93CDB7DEB72297F3
:101060000FB6F894DEBF0FBECDBF8091A7038823D3
:1010700009F415C18FEF809303018091C106883672
:1010800009F445C0893688F4813611F1823638F486
:10109000833409F4DDC0883509F0FFC0D2C083363F
:1010A00019F1873609F0F9C061C0813738F48C3600
:1010B00008F088C08B3609F0F0C04BC0843709F4C3
:1010C00041C0863709F44EC0813709F0E6C052C0EE
:1010D0002091AA0343E062E0CE0101960E94E1065E
:1010E000898180930201D9C02091AA0343E06BE07B
:1010F00084E196E00E94E1068091F2039091160649
:10110000892B8093F20381E08093A403C6C02091D1
:10111000AA0343E062E0CE0101960E94E1068091BD
:10112000F2039981892B8093F2038A818F3F21F406
:1011300081E08093AD0302C01092AD0381E0809303
:10114000A303ABC02091AA0343E064E08EEA93E0DE
:1011500006C02091AA0343E063E082EB93E00E9483
:10116000E1069BC081E08093A50397C081E0809356
:10117000A20393C02091AA0343E062E0CE0101964E
:101180000E94E10689818F3F89F0863010F085E06A
:10119000898347E464E778E089810E945A02898163
:1011A00027E444E758E06091DC0408C01091DC04B7
:1011B0000E94330227E444E758E0612F855B0E94D8
:1011C00079066BC02091AA0343E067E484E798E0C6
:1011D0000E94E1068091C10647E464E778E08B56FF
:1011E0000E9442028091C1068B56A2E0B0E0082E18
:1011F0000E94B33A60919F0877278827992724ECAB
:1012000039E040E050E00E941C3A609388037093FC
:10121000890380938A0390938B036091A0087727BA
:10122000882799270E941C3A60938C0370938D0342
:1012300080938E0390938F030E9433020E94D922E1
:101240002CC06091AA038FEB96E00E94490625C04E
:10125000809172048B3060F02091AA0343E068E033
:101260008DED94E00E94E10610927B0581E013C0B1
:101270001092DE041092DD041092E0041092DF045C
:101280001092E2041092E1041092E4041092E3043C
:1012900081E080937B058093B8031092A703229688
:1012A0000FB6F894DEBF0FBECDBFDF91CF911F9177
:1012B0000895982F80912D08813069F48091F10371
:1012C000E82FFF27E55EFC4F90838F5F8093F1034B
:1012D00021E030E005C0892F0E943907282F3327ED
:1012E000C90108951F93182F04C080E30E94590973
:1012F00011501116D4F31F9108951F93182F04C095
:1013000080E20E94590911501116D4F31F910895DB
:101310000F931F93CF93DF938C01EB0108C0F8016B
:101320000F5F1F4FE4918E2F0E945909219720973C
:10133000B1F7DF91CF911F910F9108950F931F93F4
:10134000CF93DF938C01EB0106C0F80181918F01EF
:101350000E94590921972097C1F7DF91CF911F91E2
:101360000F9108952F923F924F925F926F927F92CA
:101370008F929F92AF92BF92CF92DF92EF92FF92A5
:101380000F931F93CF93DF93CDB7DEB7E3970FB6DD
:10139000F894DEBF0FBECDBF29968FAD29978093FD
:1013A0002D08CE01855B9F4F9D838C832B968EAD40
:1013B0009FAD2B979FA78EA722243324210102C023
:1013C000130124010EA51FA502C00F5F1F4FF801D6
:1013D000F490FF2019F0F5E2FF16B9F7B8018EA5D9
:1013E0009FA5681B790B11F00E948809FF2009F462
:1013F00042C20F5F1F4F1FA70EA71982AC81BD818C
:101400001BAA1AAA9FEF99ABEEA5FFA5CF010196E3
:101410009FA78EA7B49095E7B91621F08B2D806217
:10142000883789F4EBA9E0FF07C02D903D904D90DF
:101430005C901397149607C08D919C9111971C0195
:10144000442455241296F0E2BF1621F489818823A2
:10145000D9F685C083E2B81609F483C09AE2B916BA
:1014600021F0EDE2BE1669F408C0FD011296E0819C
:10147000EAABE7FFC9CFE195EAABFBA9F061FF7DDD
:1014800072C08BE2B81609F46AC09EE2B916B1F5D3
:101490002EA53FA52F5F3F4FEEA5FFA584918A3271
:1014A00021F0B82E20E030E01BC0FD0112964081F3
:1014B000518157FF02C04FEF5FEF49AB3FA72EA707
:1014C000A3CFC90103E0880F991F0A95E1F7220F06
:1014D000331F280F391F2B0D311D20533040B4907E
:1014E00031968B2D80538A3060F3FFA7EEA7A901B8
:1014F00037FF02C04FEF5FEF49AB8DCFF0E3BF1670
:1015000031F48BA984FD80CF80628BAB7DCF8B2D96
:1015100081538930E8F420E030E0C901F3E0880F1E
:10152000991FFA95E1F7220F331F280F391F2B0D52
:10153000311D20533040EEA5FFA5CF0101969FA796
:101540008EA7B4908B2D80538A3038F32AAB63CFAB
:1015500098E6B91651F4EBA9E460EBAB55CFB9822C
:1015600053CFFBA9F860FBAB4FCF8CE6B81621F444
:101570009BA991609BAB48CFBD83AC83E3E6BE16CD
:1015800039F41296BD83AC8312978C918E8318C167
:10159000F4E4BF1639F084E6B81639F099E6B916C6
:1015A00059F503C0EBA9E160EBABFBA9F0FF08C064
:1015B0001496BD83AC835E904E903E902E900AC0F0
:1015C0001296BD83AC839E918E911C01442437FCFE
:1015D0004094542C57FC03C08AE088AB92C05094CE
:1015E000409430942094211C311C411C511C8DE2EC
:1015F00089839AE098AB85C0EFE4BE1629F0FFE638
:10160000BF1639F488E061C09BA991609BABE8E00C
:1016100056C0F0E7BF1671F41296BD83AC839E915D
:101620008E911C01442455248BA980648BAB78E7F0
:10163000B72E5EC0E3E7BE16D9F51296BD83AC8324
:10164000DE90CE90C114D10489F488E28E838EE6B8
:101650008F8385E788878CE689878A8789E28B87ED
:101660001C8666E0C62ED12CCC0EDD1EF9A9F7FD36
:1016700013C04F2F552747FD509560E070E0C6011D
:101680000E94A738009711F419A90DC08C1919A947
:1016900081174CF4182F07C0F60101900020E9F7DC
:1016A00031971E2F1C1919824201310140E094C06C
:1016B00085E5B81631F095E7B91649F4EAE0E8ABEC
:1016C0001FC0FBA9F160FBAB8AE088AB19C098E5AD
:1016D000B91621F0E8E7BE1609F06EC0FBA9F3FDCC
:1016E00002C080E1F2CF211431044104510419F405
:1016F00090E198AB05C0EBA9E064EBABF0E1F8AB8F
:10170000198289A987FD03C09BA99F7D9BAB2114EA
:1017100031044104510461F4E9A9EE2349F466243B
:10172000772443015EE2C52ED12CCC0EDD1E3EC0D7
:101730004EE2C42ED12CCC0EDD1EF8A9EF2EFF24D4
:1017400000271127C201B101A80197010E946E3A3A
:101750006A3020F430E3A32EA60E08C027E5A22E9F
:10176000A60E88E5B81611F49FEDA922F601A29203
:101770006F01C201B101A80197010E946E3A3901BF
:101780004A012E143F044006510618F019012A019F
:10179000D9CFF8A9F83051F48BA983FF07C090E3A3
:1017A000A91621F080E3F60182936F01CE018C1916
:1017B000182F125D49A910C0BB2009F45CC0BE827D
:1017C00019824201310100E096E0C92ED12CCC0EE5
:1017D000DD1E11E021E005C0212F042F011B07FDB4
:1017E00000E08981882319F0812F8F5F07C09BA9B2
:1017F00096FD02C0812F02C0822F8E5FA82EA00E00
:10180000EBA9EE2EFF2480E3482E512C4E205F20C2
:101810004114510421F48AA98A190E947D09898101
:10182000882329F061E070E0CE01019609C0E6FE50
:1018300009C080E38A83BB8262E070E0CE01029639
:101840000E949E09F0E24F16510421F48AA98A19D8
:101850000E947209802F0E947209612F772767FD0D
:101860007095C6010E949E09E4FEAACD8AA98A1934
:101870000E947D09A5CDE3960FB6F894DEBF0FBE9A
:10188000CDBFDF91CF911F910F91FF90EF90DF902F
:10189000CF90BF90AF909F908F907F906F905F9010
:1018A0004F903F902F9008951F920F920FB60F9276
:1018B00011242F933F935F936F937F938F939F9305
:1018C000AF93BF938091CE0381508093CE038F3F1F
:1018D000B9F489E08093CE03809108038F5F817013
:1018E00080930803882319F481E08093C7038091D3
:1018F000C5039091C60301969093C6038093C503D8
:101900008091CA039091CB030297B8F08091CA03EB
:101910009091CB0301979093CB038093CA0380915E
:10192000CA039091CB0320910503309106038223D3
:101930009323892B09F053C006C08FEF9FEF90933C
:10194000060380930503809100018A3039F404C0B6
:101950005A9A05C0479A03C05A9801C04798809187
:101960007C0883FF42C0349B0AC08091C8039091D9
:10197000C90301969093C9038093C80336C0809130
:10198000C8039091C903892B79F08091C803909185
:10199000C903805A9F4040F48091C8039091C903C5
:1019A00090934C0480934B0480914B0490914C0491
:1019B00020914D0430914E04821B930B845E9D4F09
:1019C00068E671E00E945B3A845B9040909350041B
:1019D00080934F041092C9031092C80306C08091EF
:1019E00000018A3009F0B6CFB3CFBF91AF919F917C
:1019F0008F917F916F915F913F912F910F900FBECB
:101A00000F901F9018952091C5033091C6032F5F4A
:101A10003F4F820F931F08952091C5033091C60355
:101A2000821B930B892F9927869580749927089597
:101A30001F920F920FB60F921124EF92FF920F9305
:101A40001F932F933F934F935F936F937F938F9346
:101A50009F93AF93BF93CF93DF93EF93FF938091C7
:101A600007038150809307038F3F09F06DC083E81F
:101A70008093B00080919D03C82FDD27D093CD03C4
:101A8000C093CC038091A908E090960880FF1EC007
:101A900060910F04709110048091110490911204D0
:101AA000FF240027112720E830E040E050E00E94AA
:101AB000903AC801B7010E941C3A20E032E040E0B1
:101AC00050E00E94903AC20FD31F1DC060910F04D6
:101AD000709110048091110490911204FF2400274A
:101AE000112720E830E040E050E00E94903AC80121
:101AF000B7010E941C3A20E032E040E050E00E9432
:101B0000903AC21BD30BD093CD03C093CC0320914A
:101B1000CC033091CD038091970899272817390776
:101B200034F08091980899278217930724F49093B2
:101B3000CD038093CC038091CC038093B30080913C
:101B400099088093070304C083E08093B0005F98F6
:101B5000FF91EF91DF91CF91BF91AF919F918F91C5
:101B60007F916F915F914F913F912F911F910F91B5
:101B7000FF90EF900F900FBE0F901F9018958091DF
:101B8000C5039091C6030B969093D0038093CF0327
:101B900082E085BD83EA84BD17BC88E788BD96E0F6
:101BA00096BD83EC8093B0009093B100E0E7F0E045
:101BB000808182608083EEE6F0E0808181608083B6
:101BC0008AE08093B3001092B20008952091C5037B
:101BD0003091C6032F5F3F4F280F391F4FEE02C0D1
:101BE00040937A008091C5039091C603B901681BA8
:101BF000790B77FFF5CF08952091C5033091C60387
:101C00002F5F3F4F280F391F8091C5039091C60366
:101C1000A901481B590B57FFF7CF089510927C007C
:101C20008FEE80937A0008951F920F920FB60F9255
:101C30001124DF92EF92FF920F931F932F933F9304
:101C40004F935F936F937F938F939F93AF93BF93C4
:101C5000CF93DF93EF93FF9310927A008091ED037F
:101C6000D82ED394D092ED03853009F484C0863009
:101C700090F4823009F440C0833030F48823F1F0CE
:101C8000813009F04FC22FC0833009F43FC0843047
:101C900009F048C258C0883009F4C0C0893038F40F
:101CA000863009F481C0873009F03CC29AC089307F
:101CB00009F4D1C08A3009F035C2B1C180917800F1
:101CC000909179009093EC038093EB0381E08093F3
:101CD000EE038091E5039091E60301969093E6036D
:101CE0008093E50315C280917800909179009093DC
:101CF000EA038093E90390C0809178009091790085
:101D00009093E8038093E70384E086C14091090340
:101D100050910A0380917800909179009A01220FE6
:101D2000331F240F351F63E070E00E94473A260FEF
:101D3000371F369527953695279530930A032093BC
:101D4000090386E069C180910704909108042091FD
:101D5000780030917900821B930B90932F08809329
:101D60002E0880912E0890912F089093D80380938D
:101D7000D70387E051C1809178009091790020913C
:101D8000050430910604821B930B90933A088093CC
:101D900039088091390890913A089093DA0380933A
:101DA000D9031092EE03B4C1809100012091EB039E
:101DB0003091EC038A3049F4809178009091790059
:101DC000820F931F9695879506C080917800909119
:101DD0007900820F931F9093D6038093D50381E0FF
:101DE0001BC1809100012091E9033091EA038A3000
:101DF00049F48091780090917900820F931F969515
:101E0000879506C08091780090917900820F931F8A
:101E10009093D4038093D30382E0FEC080910001AD
:101E20002091E7033091E8038A3049F480917800EB
:101E300090917900820F931F9695879506C08091A7
:101E4000780090917900820F931F9093D203809332
:101E5000D10385E0E1C06091780070917900E09055
:101E60000904F0900A0400910B0410910C048827D7
:101E700077FD8095982F0E945A39A80197010E94FA
:101E8000B4380E943D397093DC036093DB032091EA
:101E9000DB033091DC03E0912E08F0912F08809154
:101EA000390890913A0897FF03C0909581959F4F0C
:101EB00064E070E00E945B3AEB01CF01F7FF03C0E2
:101EC000909581959F4F64E070E00E945B3A260FE9
:101ED000371F2C0F3D1F3093DC032093DB038091D1
:101EE000DB039091DC03029704F160910904709187
:101EF0000A0480910B0490910C0420E030E048E447
:101F000054E40E94643988230CF03CC060910904B9
:101F100070910A0480910B0490910C042AE037ED33
:101F200043EA5CE30E94B53825C08091DB039091C1
:101F3000DC038F5F9F4F34F56091090470910A04B0
:101F400080910B0490910C0420E030E046E154E4D1
:101F50000E9467391816B4F46091090470910A045C
:101F600080910B0490910C042AE037ED43EA5CE386
:101F70000E94B4386093090470930A0480930B04A0
:101F800090930C0481E08093E2038091780090911B
:101F90007900909331088093300820914704309164
:101FA00048044091490450914A048091DB03909188
:101FB000DC03AA2797FDA095BA2F280F391F4A1FC7
:101FC0005B1F209347043093480440934904509387
:101FD0004A04E0904704F0904804009149041091AD
:101FE0004A0460914704709148048091490490919B
:101FF0004A0420E034E040E050E00E94903AE21AC7
:10200000F30A040B150BE0924704F0924804009386
:10201000490410934A0483E08093EE0379C08091D1
:102020003E0890913F082091780030917900820F0E
:10203000931F90933F0880933E08809136088F5FEE
:102040008093360880913608853008F46BC0809103
:102050007800909179009093100380930F03109271
:102060003608809132089091330820913E083091D3
:102070003F08821B930B2091630430916404821B00
:10208000930B9093E4038093E30360913E08709177
:102090003F08E0900B03F0900C0300910D031091AA
:1020A0000E03882777FD8095982FA8019701220FAE
:1020B000331F441F551F2E0D3F1D401F511F620F20
:1020C000731F841F951F24E030E040E050E00E9421
:1020D000903A20930B0330930C0340930D035093DD
:1020E0000E03209132083091330880910B039091B8
:1020F0000C03A0910D03B0910E03281B390B3093F4
:1021000064042093630410923F0810923E080AC0B2
:102110008091EE0380937C00DD2051F08FEE809360
:102120007A0006C01092EE031092ED0310927C002C
:10213000FF91EF91DF91CF91BF91AF919F918F91DF
:102140007F916F915F914F913F912F911F910F91CF
:10215000FF90EF90DF900F900FBE0F901F9018959B
:10216000CF93DF93A3E0B0E00E94AB3A802DC82F5D
:10217000DD27C531D10508F02A97C7BD84E690E078
:102180000E94E60D80910F039091100382559340B9
:10219000D0F4C0E0D0E017C0C7BD82E390E00E9459
:1021A000E60D8CE791E09F938F931F920E94B209F6
:1021B00080910F03909110030F900F900F9084580F
:1021C000934020F02196CA3FD10530F3A3E0B0E060
:1021D0000C2E0E94B33AC0933B088CE291E00E941F
:1021E000E60DDF91CF910895EBE1F3E080E281937A
:1021F00093E0EB36F907D9F70895FF920F931F93F9
:102200008091F203282F3327C90181709070682FC5
:102210008823A9F08091F303882311F0815002C034
:1022200080916B038093F303EBE1F3E080E2819311
:1022300093E0EB36F907D9F78FEF8093AC03A90150
:102240004270507021FF10C08091F3038F5F809324
:10225000F303EBE1F3E080E2819393E0EB36F907DF
:10226000D9F78FEF8093AC03662321F0452B11F053
:102270001092F30381E18093F1038091F303992796
:102280009F938F9383E294E09F938F9311E0F12EBD
:10229000FF920E94B2090091F3030F900F900F90EC
:1022A0000F900F90053009F4FCC1063090F4023015
:1022B00009F4CCC0033030F40023F1F0013009F010
:1022C000D9C361C0033009F416C1043009F0D2C388
:1022D00065C1083009F416C3093038F4063009F432
:1022E00099C2073009F0C6C3EAC2093009F447C3EE
:1022F0000A3009F0BFC381C31092F10381E194E079
:102300009F938F93FF920E94B20984E18093F1031F
:102310002091000182E690E09F938F938AE590E000
:102320009F938F931F921F92822F6AE00E943B3AE5
:10233000892F99279F938F93822F0E943B3A992749
:102340009F938F938CEF93E09F938F93FF920E94C4
:10235000B20988E28093F1030E94330299279F9388
:102360008F938FEE93E09F938F93FF920E94B20919
:102370008CE38093F10384EE93E09F938F93FF921D
:102380000E94B20998C280917C0880FF47C01092D9
:10239000F10380916304909164049F938F9385ED82
:1023A00093E09F938F930F930E94B20984E18093EF
:1023B000F10380916504909166049F938F9386EC5E
:1023C00093E09F938F930F930E94B20988E28093CA
:1023D000F10380910F03909110039F938F9387EBEC
:1023E00093E09F938F930F930E94B2098CE38093A5
:1023F000F10380913B0899279F938F9388EA93E09C
:102400009F938F930F930E94B2098DB79EB7449606
:102410000FB6F8949EBF0FBE8DBF31C384E1809389
:10242000F10381EA93E09F938F930F930E94B20987
:1024300088E28093F10383E993E09F938F930F9356
:102440000E94B2098DB79EB70696E2CF1092F103B3
:1024500089E893E09F938F93FF920E94B20984E1F1
:102460008093F10360910F04709110048091110426
:102470009091120420E034E040E050E00E94903A55
:102480005F934F933F932F938AE793E09F938F93AC
:10249000FF920E94B20988E28093F10360911704D1
:1024A000709118048091190490911A0420E034E08E
:1024B00040E050E00E94903A5F934F933F932F93F8
:1024C0008BE693E09F938F93FF920E94B2098CE377
:1024D0008093F10380914B0490914C049F938F93D0
:1024E0008CE593E09F938F93FF920E94B2098DB782
:1024F0009EB746968DCF1092F10380914C08909133
:102500004D0820914A0830914B089F938F933F9339
:102510002F938CE493E09F938F93FF920E94B209D4
:1025200084E18093F10380915008909151082091AB
:102530004E0830914F089F938F933F932F938CE3D6
:1025400093E09F938F93FF920E94B20988E2809359
:10255000F1038091540890915508209152083091D0
:1025600053089F938F933F932F938CE293E09F9315
:102570008F93FF920E94B2098CE38093F1038091C4
:1025800058089091590820915608309157089F9308
:102590008F933F932F938CE193E07AC01092F103D5
:1025A000E0917508FF27EE0FFF1FE85BF74F2081D2
:1025B0003181E0917408FF27EE0FFF1FE85BF74FB2
:1025C000808191813F932F939F938F938CE093E031
:1025D0009F938F93FF920E94B20984E18093F1034D
:1025E000E0917708FF27EE0FFF1FE85BF74F208190
:1025F0003181E0917608FF27EE0FFF1FE85BF74F70
:10260000808191813F932F939F938F938CEF92E0E2
:102610009F938F93FF920E94B20988E28093F10307
:10262000E0917908FF27EE0FFF1FE85BF74F20814D
:102630003181E0917808FF27EE0FFF1FE85BF74F2D
:10264000808191813F932F939F938F938CEE92E0A3
:102650009F938F93FF920E94B2098CE38093F103C2
:10266000E0917B08FF27EE0FFF1FE85BF74F20810B
:102670003181E0917A08FF27EE0FFF1FE85BF74FEB
:10268000808191813F932F939F938F938CED92E064
:102690009F938F93FF920E94B2098DB79EB74C967D
:1026A000B7CE1092F1038EEC92E09F938F93FF923E
:1026B0000E94B2090F900F900F90809100018A3014
:1026C00009F04AC084E18093F1034091FB035091EB
:1026D000FC038091D1039091D2032091FB033091B0
:1026E000FC035F934F93821B930B9F938F938FEB0E
:1026F00092E09F938F93FF920E94B20988E28093A9
:10270000F1034091FD035091FE038091D30390911A
:10271000D4032091FD033091FE035F934F93821BFE
:10272000930B9F938F9380EB92E09F938F93FF92F5
:102730000E94B2098CE38093F1038091FF03909192
:1027400000042091E3083091E4089F938F933F9316
:102750002F9381EA92E055C084E18093F103809148
:10276000FB039091FC032091D1033091D203E091BF
:10277000FB03F091FC0362E070E00E945B3A7F9300
:102780006F932E1B3F0B3F932F9382E992E09F9311
:102790008F93FF920E94B20988E28093F1038091A7
:1027A000FD039091FE032091D3033091D403E09177
:1027B000FD03F091FE0362E070E00E945B3A7F93BC
:1027C0006F932E1B3F0B3F932F9383E892E09F93D1
:1027D0008F93FF920E94B2098CE38093F103809162
:1027E000FF03909100042091E3083091E40862E037
:1027F00070E00E945B3A7F936F933F932F9384E73F
:1028000092E09F938F93FF920E94B2098DB79EB77B
:102810004596FECD1092F10387E692E09F938F9349
:10282000FF920E94B20984E18093F1038091050434
:10283000909106042091D9033091DA039F938F93EE
:102840003F932F9388E592E09F938F93FF920E948E
:10285000B20988E28093F103809107049091080403
:102860002091D7033091D8039F938F933F932F9359
:1028700089E492E09F938F93FF920E94B2098CE3C8
:102880008093F1036091090470910A0480910B0414
:1028900090910C040091CB081091CC080E943D3916
:1028A0007F936F931F930F938AE392E09F938F938D
:1028B000FF920E94B2098DB79EB74896A9CD84E1D8
:1028C0008093F1038091090390910A039F938F9362
:1028D0008BE292E09F938F93FF920E94B20988E26D
:1028E0008093F10380915B0499279F938F938CE1F0
:1028F00092E09F938F93FF920E94B2098DB79EB78B
:102900000A9686CD1092F1038DE092E09F938F930B
:10291000FF920E94B20984E18093F10380914F04F9
:10292000909150049F938F938EEF91E09F938F939C
:10293000FF920E94B20988E28093F10380914B04D8
:1029400090914C049F938F938FEE91E09F938F9380
:10295000FF920E94B2098CE38093F10380914D04B1
:1029600090914E049F938F9380EE91E09F938F936D
:10297000FF920E94B2098DB79EB7429649CD109240
:10298000F10380915304909154049F938F9384EDAD
:1029900091E09F938F93FF920E94B20984E180930C
:1029A000F10380915504909156049F938F9388EC86
:1029B00091E09F938F93FF920E94B20988E28093E7
:1029C000F10380915704909158049F938F938CEB5F
:1029D00091E09F938F93FF920E94B2098CE38093C2
:1029E000F1038091590490915A049F938F9380EB47
:1029F00091E09F938F93FF9206CD1092F10388EAA6
:102A000091E09F938F93FF920E94B20984E180939B
:102A1000F10380919D0399279F938F938AE991E019
:102A20009F938F93FF920E94B20988E28093F103F3
:102A30008091CC039091CD039F938F938CE891E08C
:102A40009F938F93FF920E94B2098CE38093F103CE
:102A50008091980899279F938F9380919708992741
:102A60009F938F938EE791E09F938F93FF920E94A5
:102A7000B209CBCC015000936B031092F303109278
:102A8000F2031F910F91FF9008951092B9008AE20E
:102A90008093B800089585EA8093BC0080E090E0C0
:102AA000089584E98093BC0008951092B900809342
:102AB000BB0085E88093BC0080E090E008951F9201
:102AC0000F920FB60F9211248F939F93EF93FF9362
:102AD0008091F4038F5F8093F40381508330A9F1D8
:102AE000843028F4813091F0823008F50AC08530B6
:102AF00089F18530B8F18630A9F1873009F061C0DD
:102B000045C08091F503880F8E5A09C08091F50366
:102B10008F5F8093F503815027C08091BE0810928B
:102B2000B9008093BB0085E88093BC004AC084E96B
:102B30008093BC008091F503843018F41092F40364
:102B400002C01092F50385EAEFCF8091F603880F5B
:102B50008D5AE5CF8091BB00E091F603FF27E05C42
:102B6000F74F80838091F603813039F08130A8F2ED
:102B7000823031F0833029F506C08091C308CFCF71
:102B80008091DB08CCCF8091DD08C9CF8091F6031E
:102B90009091BB00E82FFF27E05CF74F94838F5F95
:102BA0008093F603843010F01092F60384E980934A
:102BB000BC008AE090E09093870380938603109294
:102BC000F4038091BC0080688093BC00FF91EF917A
:102BD0009F918F910F900FBE0F901F9018954CEB07
:102BE00050E084E9DA018C931092F4032BEB30E08F
:102BF000F90180811092F50380E88C931092BD005A
:102C00001092BA001082E9EBF0E01082A8EBB0E07D
:102C10001C9210828AE28C9385EADA018C931082EE
:102C2000F901108285E88C93089583EC80938100EC
:102C3000EFE6F0E0808180628083109200041092C1
:102C4000FF031092FE031092FD031092FC031092FA
:102C5000FB0308951F920F920FB60F9211240F934A
:102C60001F932F933F934F935F936F937F938F9314
:102C70009F93AF93BF93CF93DF93EF93FF932091F5
:102C80008600309187008091F9039091FA03281B08
:102C9000390B80918600909187009093FA0380937E
:102CA000F903C9018D549440C091F703D091F80302
:102CB000835F9A4158F4249714F010926C0381E0DA
:102CC00090E09093F8038093F70363C0CA30D10576
:102CD0000CF05FC0C9018B5F9040845B914008F0AD
:102CE00040C0A901425D5140FE01EE0FFF1FE85BAD
:102CF000F74F80819181FA01E81BF90BCF01F7FFB3
:102D000003C0909581959F4F06974CF480915B048A
:102D1000883C28F480915B04865F80935B04FE010D
:102D2000EE0FFF1F8F01085B174FD8012D913C91CB
:102D3000C901880F991F820F931F840F951F64E0AC
:102D400070E00E945B3AD8018D919C9111979B0194
:102D5000281B390BE25AF74F3183208311967C935D
:102D60006E93FE013196F093F803E093F703E5309C
:102D7000F10519F45D9A5C980BC05D98E630F10599
:102D800011F45C9A05C05C98379711F45B9A01C006
:102D90005B98FF91EF91DF91CF91BF91AF919F91A0
:102DA0008F917F916F915F914F913F912F911F91E3
:102DB0000F910F900FBE0F901F9018952F923F927A
:102DC0004F925F926F927F928F929F92AF92BF923B
:102DD000CF92DF92EF92FF920F931F93CF93DF93E7
:102DE000CDB7DEB722970FB6F894DEBF0FBECDBFCA
:102DF0008091FF03909100042091D5033091D60378
:102E0000821B930B9093E4088093E3088091D30393
:102E10009091D4032091FD033091FE03821B930B0C
:102E20009093BD088093BC088091D1039091D20308
:102E30002091FB033091FC03821B930B9093C508F8
:102E40008093C408E090E008F090E1086091D90315
:102E50007091DA030027F7FC0095102F882777FD83
:102E60008095982F2CE030E040E050E00E941C3A22
:102E7000E60EF71E081F191FC801B70122E030E057
:102E800040E050E00E94903A3093E1082093E0083F
:102E9000E090EA08F090EB086091D7037091D803B6
:102EA0000027F7FC0095102F882777FD8095982F35
:102EB0002CE030E040E050E00E941C3AE60EF71EA5
:102EC000081F191FC801B70122E030E040E050E0C0
:102ED0000E94903A3093EB082093EA086091CB0867
:102EE0007091CC082091DB033091DC03882777FDBB
:102EF0008095982F442737FD4095542F620F731FFC
:102F0000841F951F22E030E040E050E00E94903A9C
:102F10003093CC082093CB0820911F0430912004DB
:102F200040912104509122046091D9037091DA03F9
:102F3000CB01880F991F860F971F880F991F880F45
:102F4000991FAA2797FDA095BA2F280F391F4A1F4E
:102F50005B1F20931F04309320044093210450935F
:102F6000220420912304309124044091250450919F
:102F700026046091D7037091D803CB01880F991F65
:102F8000860F971F880F991F880F991FAA2797FDF3
:102F9000A095BA2F280F391F4A1F5B1F20932304C7
:102FA0003093240440932504509326046091270411
:102FB000709128048091290490912A04E0903008AF
:102FC000F0903108A0900904B0900A04C0900B045E
:102FD000D0900C040E945A393B014C010027F7FCA9
:102FE0000095102FC801B7010E945A39A60195011A
:102FF0000E94B4389B01AC01C401B3010E94B538F2
:103000000E943D396093270470932804809329041B
:1030100090932A0420913F04309140044091410450
:10302000509142048091E3089091E408AA2797FD0B
:10303000A095BA2F280F391F4A1F5B1F20933F040A
:103040003093400440934104509342042091430440
:103050003091440440914504509146048091E30826
:103060009091E408AA2797FDA095BA2F280F391F41
:103070004A1F5B1F2093430430934404409345044C
:103080005093460420916B042A83222309F06BC0DD
:1030900080916C04882309F066C080917C0886FFCB
:1030A00062C060912F04709130048091310490913E
:1030B0003204E090E308F090E408A0907904BB2487
:1030C000CC24DD2420E030E140E050E00E94903A42
:1030D0000027F7FC0095102FCA01B901A80197013C
:1030E0000E941C3AA60195010E941C3A20E038E09B
:1030F00040E050E00E94903A2093C4043093C5040D
:103100004093C6045093C70460913704709138040B
:103110008091390490913A04E090E308F090E4083B
:1031200020E030E140E050E00E94903A0027F7FCB8
:103130000095102FCA01B901A80197010E941C3AFD
:10314000A60195010E941C3A20E038E040E050E0E2
:103150000E94903A2093C0043093C1044093C2046B
:103160005093C30410C01092C0041092C104109276
:10317000C2041092C3041092C4041092C5041092A9
:10318000C6041092C7048091BC089091BD0820909D
:10319000C4043090C5044090C6045090C704820D0A
:1031A000931D9093BD088093BC080091BC081091BA
:1031B000BD08A090C004B090C104C090C204D090DB
:1031C000C30480917A04682E772488249924C60148
:1031D000B501A40193010E941C3A20E032E040E0D6
:1031E00050E00E94903A020F131F1093BD08009305
:1031F000BC0820913B0430913C0440913D04509127
:103200003E048091BC089091BD08AA2797FDA09527
:10321000BA2F280F391F4A1F5B1F20933B0430939E
:103220003C0440933D0450933E0420913704309178
:1032300038044091390450913A048091BC0890912F
:10324000BD086091670470916804861B970BAA27DC
:1032500097FDA095BA2F280F391F4A1F5B1F209397
:103260003704309338044093390450933A048091E2
:10327000370490913804A0913904B0913A04E09059
:103280008C03F0908D0300918E0310918F03E8164C
:10329000F9060A071B0704F580E197E2A0E0B0E019
:1032A0008E199F09A00BB10B8093370490933804BB
:1032B000A0933904B0933A04809137049091380474
:1032C000A0913904B0913A0480933B0490933C045C
:1032D000A0933D04B0933E0420913704309138040C
:1032E0004091390450913A0488279927DC018E19BE
:1032F0009F09A00BB10B281739074A075B0704F594
:1033000080EF98EDAFEFBFEFE80EF91E0A1F1B1F0D
:10331000E0923704F09238040093390410933A0491
:103320008091370490913804A0913904B0913A0407
:1033300080933B0490933C04A0933D04B0933E04DF
:103340008091D3039091D4030F9734F488E19CEFDC
:103350009093BD088093BC088091D3039091D403CF
:10336000079734F480E398EF9093BD088093BC08EE
:103370009091000199839A30A9F48091D3039091A0
:10338000D403835F934034F088EE93E09093BD08BC
:103390008093BC088091D3039091D4038A5F9340BB
:1033A000DCF014C08091D3039091D403855E9740E4
:1033B00034F088EE93E09093BD088093BC08809130
:1033C000D3039091D403835F974034F080ED97E06E
:1033D0009093BD088093BC088091C4089091C50863
:1033E0008A199B099093C5088093C4080091C4086A
:1033F0001091C508C201B101A40193010E941C3AB9
:1034000020E032E040E050E00E94903A021B130BB3
:103410001093C5080093C4082091330430913404FC
:1034200040913504509136048091C4089091C508AC
:10343000AA2797FDA095BA2F280F391F4A1F5B1F97
:10344000209333043093340440933504509336046E
:1034500020912F0430913004409131045091320476
:103460008091C4089091C5086091690470916A04C4
:10347000861B970BAA2797FDA095BA2F280F391FF7
:103480004A1F5B1F20932F04309330044093310474
:103490005093320480912F0490913004A091310414
:1034A000B0913204E0908803F090890300918A0380
:1034B00010918B03E816F9060A071B0704F580E153
:1034C00097E2A0E0B0E08E199F09A00BB10B8093AA
:1034D0002F0490933004A0933104B0933204809170
:1034E0002F0490913004A0913104B0913204809364
:1034F000330490933404A0933504B09336042091A0
:103500002F043091300440913104509132048827C7
:103510009927DC018E199F09A00BB10B28173907D9
:103520004A075B0704F580EF98EDAFEFBFEFE80EB9
:10353000F91E0A1F1B1FE0922F04F0923004009323
:1035400031041093320480912F0490913004A091A3
:103550003104B09132048093330490933404A093E7
:103560003504B09336048091D1039091D2030F9724
:1035700034F488E19CEF9093C5088093C40880914F
:10358000D1039091D203079734F480E398EF90939E
:10359000C5088093C40899819A30A9F48091D10319
:1035A0009091D203835F934034F088EE93E0909340
:1035B000C5088093C4088091D1039091D2038A5F9B
:1035C0009340DCF014C08091D1039091D203855ECA
:1035D000974034F088EE93E09093C5088093C40838
:1035E0008091D1039091D203835F974034F080EDB6
:1035F00097E09093C5088093C4088FEE80937A007B
:1036000080913F0490914004A0914104B091420404
:1036100080932B0490932C04A0932D04B0932E043C
:1036200080912F0490913004A0913104B091320424
:1036300080930F0490931004A0931104B09312048C
:103640008091370490913804A0913904B0913A04E4
:103650008093170490931804A0931904B0931A044C
:103660008091330490913404A0913504B0913604D4
:103670008093130490931404A0931504B09316043C
:1036800080913B0490913C04A0913D04B0913E0494
:1036900080931B0490931C04A0931D04B0931E04FC
:1036A00080917C0887FF6BC02A81222309F067C0C4
:1036B00080916C04882309F062C08091C4089091C5
:1036C000C508893C91057CF02091C4083091C5085B
:1036D0008091C4089091C508880F991F880F991F81
:1036E0002052334015C08091C4089091C50888537A
:1036F0009F4FA4F42091C4083091C5088091C4085C
:103700009091C508880F991F880F991F205E3C4F24
:10371000820F931F9093C5088093C4088091BC08C2
:103720009091BD08893C91057CF02091BC083091B6
:10373000BD088091BC089091BD08880F991F880F23
:10374000991F2052334015C08091BC089091BD084C
:1037500088539F4FA4F42091BC083091BD088091FC
:10376000BC089091BD08880F991F880F991F205E93
:103770003C4F820F931F9093BD088093BC0820910B
:1037800053043091540480917808E82FFF27EE0FFE
:10379000FF1FE85BF74F8081918182599F4F281767
:1037A00039071CF42F5F3F4F0CC0808191818259F3
:1037B0009F4F821793074CF42115310531F02150AA
:1037C0003040309354042093530420915504309199
:1037D000560480917908E82FFF27EE0FFF1FE85B62
:1037E000F74F8081918182599F4F281739071CF428
:1037F0002F5F3F4F0CC08081918182599F4F82176C
:1038000093074CF42115310531F0215030403093AD
:103810005604209355042091570430915804809108
:103820007A08E82FFF27EE0FFF1FE85BF74F808134
:10383000918182599F4F281739071CF42F5F3F4F02
:103840000CC08081918182599F4F821793074CF45D
:103850002115310531F02150304030935804209328
:1038600057042091590430915A0480917B08E82F25
:10387000FF27EE0FFF1FE85BF74F80819181825990
:103880009F4F281739071CF42F5F3F4F0CC08081D2
:10389000918182599F4F821793074CF4211531056E
:1038A00031F02150304030935A04209359048091D4
:1038B00053049091540497FF05C010925404109241
:1038C00053040AC08F3F910539F034F08FEF90E038
:1038D000909354048093530480915504909156041E
:1038E00097FF05C010925604109255040AC08F3FEE
:1038F000910539F034F08FEF90E090935604809367
:103900005504809157049091580497FF05C0109278
:103910005804109257040AC08F3F910539F034F0D3
:103920008FEF90E09093580480935704809159044E
:1039300090915A0497FF05C010925A0410925904AE
:103940000AC08F3F910539F034F08FEF90E09093EB
:103950005A048093590422960FB6F894DEBF0FBE26
:10396000CDBFDF91CF911F910F91FF90EF90DF902E
:10397000CF90BF90AF909F908F907F906F905F900F
:103980004F903F902F90089510927A008091D1032C
:103990009091D2039093C5088093C4088091D3037B
:1039A0009091D4039093BD088093BC088091D50377
:1039B0009091D6039093E4088093E3086091D90333
:1039C0007091DA03882777FD8095982F2CE030E0FE
:1039D00040E050E00E941C3A7093E1086093E008D8
:1039E0006091D7037091D803882777FD8095982F31
:1039F0000E941C3A7093EB086093EA088091DB0305
:103A00009091DC039093CC088093CB088FEE809349
:103A10007A00209153043091540480917808E82F63
:103A2000FF27EE0FFF1FE85BF74F808191818259DE
:103A30009F4F281739071CF42F5F3F4F0CC0808120
:103A4000918182599F4F821793074CF421153105BC
:103A500031F021503040309354042093530420918E
:103A600055043091560480917908E82FFF27EE0F16
:103A7000FF1FE85BF74F8081918182599F4F281784
:103A800039071CF42F5F3F4F0CC080819181825910
:103A90009F4F821793074CF42115310531F02150C7
:103AA00030403093560420935504209157043091B0
:103AB000580480917A08E82FFF27EE0FFF1FE85B7C
:103AC000F74F8081918182599F4F281739071CF445
:103AD0002F5F3F4F0CC08081918182599F4F821789
:103AE00093074CF42115310531F0215030403093CB
:103AF0005804209357042091590430915A0480911E
:103B00007B08E82FFF27EE0FFF1FE85BF74F808150
:103B1000918182599F4F281739071CF42F5F3F4F1F
:103B20000CC08081918182599F4F821793074CF47A
:103B30002115310531F02150304030935A04209343
:103B40005904809153049091540497FF05C010923A
:103B50005404109253040AC08F3F910539F034F099
:103B60008FEF90E090935404809353048091550418
:103B70009091560497FF05C0109256041092550478
:103B80000AC08F3F910539F034F08FEF90E09093A9
:103B9000560480935504809157049091580497FFE0
:103BA00005C010925804109257040AC08F3F910527
:103BB00039F034F08FEF90E09093580480935704DD
:103BC0008091590490915A0497FF05C010925A04AD
:103BD000109259040AC08F3F910539F034F08FEFED
:103BE00090E090935A048093590460919F0877273E
:103BF0008827992724EC39E040E050E00E941C3AE5
:103C0000609388037093890380938A0390938B0356
:103C100060938C0370938D0380938E0390938F0336
:103C200008951F9380917F088B3F98F08B3F19F484
:103C3000809153040EC08C3F19F48091550409C043
:103C40008D3F19F48091570404C08E3F21F4809178
:103C500059048093950380919503882319F4109259
:103C6000950304C08F3F11F48093950380917E08E3
:103C70008B3F98F08B3F19F4809153040EC08C3F1A
:103C800019F48091550409C08D3F19F480915704AF
:103C900004C08E3F21F48091590480939403809155
:103CA0009403882319F41092940305C0843618F005
:103CB00084E680939403809180088B3F98F08B3F3B
:103CC00019F4809153040EC08C3F19F4809155046F
:103CD00009C08D3F19F48091570404C08E3F21F430
:103CE000809159048093960380919603882319F458
:103CF0001092960305C0843618F084E680939603EC
:103D0000809182088B3F98F08B3F19F48091530487
:103D10000EC08C3F19F48091550409C08D3F19F4F1
:103D20008091570404C08E3F21F480915904809300
:103D3000970380919703882319F41092970304C086
:103D40008F3F11F480939703809189088B3F98F0FF
:103D50008B3F19F4809153040EC08C3F19F480916D
:103D6000550409C08D3F19F48091570404C08E3F5B
:103D700021F48091590480939803809198038823BB
:103D800019F41092980304C08F3F11F480939803A4
:103D900080918A088B3F98F08B3F19F480915304EF
:103DA0000EC08C3F19F48091550409C08D3F19F461
:103DB0008091570404C08E3F21F480915904809370
:103DC0009903809199038B3010F48AE002C08F3FF1
:103DD00011F48093990380918B088B3F98F08B3F6F
:103DE00019F4809153040EC08C3F19F4809155044E
:103DF00009C08D3F19F48091570404C08E3F21F40F
:103E00008091590480939A0380919A03882319F42E
:103E100010929A0304C08F3F11F480939A0380910B
:103E200090088B3F98F08B3F19F4809153040EC09B
:103E30008C3F19F48091550409C08D3F19F480918D
:103E4000570404C08E3F21F48091590480939C0351
:103E500080919C03882319F410929C0304C08F3F27
:103E600011F480939C03809191088B3F98F08B3FD5
:103E700019F4809153040EC08C3F19F480915504BD
:103E800009C08D3F19F48091570404C08E3F21F47E
:103E9000809159048093710480917104882319F4EE
:103EA0001092710404C08F3F11F4809371048091CB
:103EB00092088B3F98F08B3F19F4809153040EC009
:103EC0008C3F19F48091550409C08D3F19F48091FD
:103ED000570404C08E3F21F48091590480937204EA
:103EE00080917204882319F41092720404C08F3FE9
:103EF00011F480937204809193088B3F98F08B3F6C
:103F000019F4809153040EC08C3F19F4809155042C
:103F100009C08D3F19F48091570404C08E3F21F4ED
:103F2000809159048093730480917304882319F459
:103F30001092730404C08F3F11F480937304809136
:103F400094088B3F98F08B3F19F4809153040EC076
:103F50008C3F19F48091550409C08D3F19F480916C
:103F6000570404C08E3F21F4809159048093740457
:103F700080917404882319F41092740404C08F3F54
:103F800011F4809374048091A4088B3F98F08B3FC8
:103F900019F4809153040EC08C3F19F4809155049C
:103FA00009C08D3F19F48091570404C08E3F21F45D
:103FB000809159048093750480917504882319F4C5
:103FC0001092750404C08F3F11F4809375048091A2
:103FD000A5088B3F98F08B3F19F4809153040EC0D5
:103FE0008C3F19F48091550409C08D3F19F48091DC
:103FF000570404C08E3F21F48091590480937604C5
:1040000080917604882319F41092760404C08F3FBF
:1040100011F4809376048091A6088B3F98F08B3F33
:1040200019F4809153040EC08C3F19F4809155040B
:1040300009C08D3F19F48091570404C08E3F21F4CC
:10404000809159048093770480917704882319F430
:104050001092770404C08F3F11F48093770480910D
:10406000A7088B3F98F08B3F19F4809153040EC042
:104070008C3F19F48091550409C08D3F19F480914B
:10408000570404C08E3F21F4809159048093780432
:1040900080917804882319F41092780404C08F3F2B
:1040A00011F480937804809195088B3F98F08B3FB2
:1040B00019F4809153040EC08C3F19F4809155047B
:1040C00009C08D3F19F48091570404C08E3F21F43C
:1040D0008091590480939D0380919D03882319F456
:1040E00010929D0304C08F3F11F480939D03809133
:1040F0009A088B3F98F08B3F19F4809153040EC0BF
:104100008C3F19F48091550409C08D3F19F48091BA
:10411000570404C08E3F21F48091590480939E037C
:1041200080919E03882319F410929E0304C08F3F50
:1041300011F480939E0380919D088B3F98F08B3FF4
:1041400019F4809153040EC08C3F19F480915504EA
:1041500009C08D3F19F48091570404C08E3F21F4AB
:10416000809159048093790480917904882319F40B
:104170001092790404C08F3F11F4809379048091E8
:104180009E088B3F98F08B3F19F4809153040EC02A
:104190008C3F19F48091550409C08D3F19F480912A
:1041A000570404C08E3F21F48091590480937A040F
:1041B00080917A04882319F410927A0404C08F3F06
:1041C00011F480937A048091A3088B3F98F08B3F81
:1041D00019F4809153040EC08C3F19F4809155045A
:1041E00009C08D3F19F48091570404C08E3F21F41B
:1041F0008091590480939F0380919F03882319F431
:1042000010929F0304C08F3F11F480939F0310917D
:104210009C03612F772767FD7095872F972F0E944A
:104220005A3917FF06C020E030E040E853E40E940E
:10423000B53827E137EB41ED58E30E94D43960935C
:1042400090037093910380939203909393038091D2
:1042500087088093E208809186088093C6081F91A2
:10426000089580916204882301F51092C30810928A
:10427000BE081092DB081092DD088091AE038823FF
:1042800011F08093BE088091AF03882311F08093D2
:10429000C3088091B003882311F08093DD088091DA
:1042A000B103882311F08093DB088091BE08992721
:1042B0009093700780936F078091C308992790931C
:1042C0007207809371078091DD0899279093740796
:1042D000809373078091DB089927909376078093EA
:1042E00075071092F4031092F5030E944B15089580
:1042F000109206041092050410920804109207040C
:1043000080E090E0A0E0B0E08093090490930A047C
:10431000A0930B04B0930C041092FC031092FB03C7
:104320001092FE031092FD03109200041092FF03FE
:104330001092790410927A040E94C41C84E690E0E2
:104340000E94E60D0E94C41C80917C0880FF10C072
:1043500080910F0390911003875B934038F4809114
:104360000F03909110038E5E924010F40E94B010E3
:104370008091D1039091D2039093FC038093FB032F
:104380008091D3039091D4039093FE038093FD0317
:104390008091D5039091D603909300048093FF03FE
:1043A0008091FD039091FE03909302048093010499
:1043B0008091FB039091FC03909304048093030489
:1043C00044E050E0DA010E94AB3A802D853038F1AC
:1043D0008091EA089091EB0897FF03C09095819532
:1043E0009F4F6CE070E00E945B3A7093080460930A
:1043F00007048091E0089091E10897FF03C0909531
:1044000081959F4F6CE070E00E945B3A70930604C8
:1044100060930504609130087091310839C0DA0169
:104420000E94AB3A802D4F5F5F4FDA010E94AB3A9A
:10443000202D9927982F8827820F911D909306048D
:10444000809305044F5F5F4FDA010E94AB3A802DE5
:104450004F5F5F4FDA010E94AB3A202D9927982FCA
:104460008827820F911D90930804809307044F5F63
:104470005F4FDA010E94AB3A602D4F5F5F4FDA0168
:104480000E94AB3A202D7727762F6627620F711D89
:10449000882777FD8095982F0E945A3960930904E8
:1044A00070930A0480930B0490930C0410922F04D1
:1044B000109230041092310410923204109233049E
:1044C000109234041092350410923604109237047E
:1044D000109238041092390410923A0410923B045E
:1044E00010923C0410923D0410923E0410923F043E
:1044F0001092400410924104109242041092C50898
:104500001092C4081092BD081092BC081092E408E2
:104510001092E30880910B0390910C03A0910D037E
:10452000B0910E0390933308809332081092E40305
:104530001092E30310924704109248041092490429
:1045400010924A0480914B0490914C0490934E0435
:1045500080934D040E947D3882E390E09093CB03DA
:104560008093CA0360919F0877278827992724ECB6
:1045700039E040E050E00E941C3A60938803709359
:10458000890380938A0390938B036091A008772717
:10459000882799270E941C3A60938C0370938D039F
:1045A00080938E0390938F031092A1031092A00327
:1045B00008951F93182F0EC080916204882361F420
:1045C00084E690E09093CB038093CA038AEF90E057
:1045D0000E94FC0D115080F71F91089581E0809397
:1045E000740862E06093750853E050937608E4E045
:1045F000E093770875E07093780886E080937908F7
:1046000087E080937A0838E030937B0881EC8093D0
:104610007C088EE180937D0824E620937F084AE0A1
:104620004093800892E390937E0890938208609371
:1046300081085093830810928408309385088FE096
:10464000809386088AEF809387088AE180938808A0
:1046500080E88093890888EC80938A088FEA8093A9
:104660008B088EE580938C0883E280938D0884E12B
:1046700080938E0810928F084093900880E5809375
:104680009108109292081092930810929408109238
:10469000A4081092A5081092A6081092A7082093CB
:1046A000950888E2809396081092A908909397083D
:1046B00086E9809398087093990890939A088AE500
:1046C00080939B0890939C081092A80820939D08C3
:1046D00040939E0820939F082093A0082093A10850
:1046E000E093A2089093A308AEEAB8E0EDE6F3E009
:1046F0008CE001900D928150E1F7089581E0809364
:10470000740892E09093750883E08093760844E003
:104710004093770855E05093780886E080937908B5
:1047200087E080937A0888E080937B0880E4809318
:104730007C088EE180937D088BEF80937F083AE0C0
:104740003093800822E320937E0820938208909380
:1047500081084093830810928408309385088FE085
:10476000809386088AEF809387088AE1809388087F
:1047700080E8809389088FEA80938A0880938B0869
:104780008EE580938C0883E280938D0884E180938A
:104790008E0810928F0880E28093900880E58093C5
:1047A0009108109292081092930810929408109217
:1047B000A4081092A5081092A6081092A70894E6E3
:1047C0009093950888E2809396081092A908209308
:1047D000970886E9809398085093990820939A083F
:1047E0008AE580939B0820939C081092A8089093D8
:1047F0009D0830939E0890939F089093A0089093F3
:10480000A1084093A2088BE48093A308AEEAB8E025
:10481000E7E7F3E08CE001900D928150E1F7089515
:1048200081E08093740882E08093750883E0809330
:10483000760834E03093770865E06093780886E086
:104840008093790887E080937A0898E090937B08BA
:1048500080E480937C088EE180937D088BEF8093C9
:104860007F085AE05093800822E320937E0820932B
:1048700082083093810830938308909384088EE0F7
:10488000809385088FE0809386088AEF809387085D
:104890008AE18093880890E89093890888E780935C
:1048A0008A0846E940938B088EE580938C0883E262
:1048B00080938D0884E180938E0810928F0880E2A7
:1048C0008093900890939108109292081092930808
:1048D000109294081092A4081092A5081092A608AD
:1048E0001092A70894E69093950888E28093960822
:1048F0001092A9082093970840939808609399080C
:1049000020939A088AE580939B0820939C08109234
:10491000A80890939D0850939E0890939F089093A9
:10492000A0082093A1083093A2089093A308AEEAB0
:10493000B8E0EFE7F3E08CE001900D928150E1F7F1
:1049400008952F923F924F925F926F927F928F9233
:104950009F92AF92BF92CF92DF92EF92FF920F930E
:104960001F93CF93DF93CDB7DEB76A970FB6F89456
:10497000DEBF0FBECDBF0E94DE16299AE0917608F9
:10498000FF27EE0FFF1FE85BF74F0190F081E02D4E
:10499000E858FF4F809172048B3030F08091E3042F
:1049A0009091E404E80FF91F8091E2089927449759
:1049B000E817F9070CF4CF019A83898397FF02C0A7
:1049C0001A82198280915B04843608F05DC0809160
:1049D0000301882399F480910503909106038F5F6A
:1049E0009F4F61F488E99AE39093CB038093CA03C5
:1049F00080E09CE090930603809305038091A204DD
:104A00009091A304009731F001979093A3048093B1
:104A1000A20404C01092620410925104809100011B
:104A20008A3011F4289A01C0289880919D049091B1
:104A30009E04815D974028F180918D08482F55276D
:104A40005A83498381E080935104E0917408FF27E1
:104A5000EE0FFF1FE85BF74F11821082E09175089F
:104A6000FF27EE0FFF1FE85BF74F11821082E091E6
:104A70007708FF27EE0FFF1FE85BF74F11821082C8
:104A800050C2109262044DC280915B048D3808F4CC
:104A900048C21092510480918E0822E3829FC00187
:104AA00011249093A3048093A20469817A816932CE
:104AB00071056CF080919D0490919E047FEF8F3F73
:104AC000970781F1019690939E0480939D048091B5
:104AD0009D0490919E04883C910520F089819A81E3
:104AE000889704F51092BC041092BD041092BE0485
:104AF0001092BF041092B8041092B9041092BA0434
:104B00001092BB0410923F04109240041092410492
:104B100010924204109243041092440410924504EF
:104B200010924604A981BA81A93CB1050CF459C17F
:104B300080916204882309F0F4C180917708E82FFE
:104B4000FF27EE0FFF1FE85BF74F808191818C34C8
:104B500091050CF4BCC08091A1048F5F8093A104E7
:104B6000893C08F4DEC12998109262041092A104D5
:104B700010929E0410929D0480917408282F332770
:104B8000F901EE0FFF1FE85BF74F808191818734B9
:104B900091059CF4E0917508FF27EE0FFF1FE85B7D
:104BA000F74F0190F081E02DF7FF03C0F095E195FC
:104BB000FF4FE734F1050CF46CC080917508682F45
:104BC0007727DB01AA0FBB1FA85BB74F8D919C9184
:104BD0001197873491053CF0F901EE0FFF1FE85B58
:104BE000F74F808191818D919C918734910564F07C
:104BF000F901EE0FFF1FE85BF74F80819181873449
:104C0000910514F042E001C041E0FB01EE0FFF1FEF
:104C1000E85BF74F80819181863491055CF4F9015E
:104C2000EE0FFF1FE85BF74F80819181873491057C
:104C30000CF043E0FB01EE0FFF1FE85BF74F8081B4
:104C400091818A5B9F4F5CF4F901EE0FFF1FE85BD7
:104C5000F74F80819181873491050CF044E0660F15
:104C6000771F685B774FFB01808191818A5B9F4F43
:104C70005CF4220F331F285B374FD9018D919C9133
:104C8000863491050CF445E0A2E0B0E0042E0E94C9
:104C9000B33A80917C0880FF10C080910F039091FF
:104CA0001003875B934038F480910F0390911003B9
:104CB0008E5E924010F40E94B0100E94330247E4CE
:104CC00064E778E00E945A020E94782182C08081C5
:104CD0009181855B9F4F0CF081C08091A1048F5F13
:104CE0008093A104893C08F41CC129988FEF04E04B
:104CF00010E0D801082E0E94B33A1092620410927C
:104D0000A10410929E0410929D040E94782180912B
:104D100005049091060460E071E00E945B3AD801BE
:104D2000062E0E94B33A809105049091060460E03B
:104D300071E00E945B3A0F5F1F4FD801082E0E945E
:104D4000B33A809107049091080460E071E00E94FA
:104D50005B3A0F5F1F4FD801062E0E94B33A809135
:104D600007049091080460E071E00E945B3A0F5FD5
:104D70001F4FD801082E0E94B33A60910904709128
:104D80000A0480910B0490910C040E943D39DC01CF
:104D9000CB0160E071E00E945B3A0F5F1F4FD801CA
:104DA000062E0E94B33A6091090470910A04809122
:104DB0000B0490910C040E943D39DC01CB0160E0B2
:104DC00071E00E945B3A0F5F1F4FD801082E0E94CE
:104DD000B33A0E9433020E94D922A3C01092A104C8
:104DE000A0C0E981FA81B3970CF09BC0809177084D
:104DF000482F5527FA01EE0FFF1FE85BF74F808120
:104E00009181855B9F4F0CF06DC08091A0048F5FF6
:104E10008093A004893C08F467C088EC8093A004C8
:104E200081E090E090939E0480939D0481E08093C4
:104E300062041092B4041092B5041092B604109259
:104E4000B70410923F041092400410924104109253
:104E500042041092430410924404109245041092AC
:104E6000460410922F0410923004109231041092D4
:104E700032041092370410923804109239041092C0
:104E80003A0480910F0490911004A0911104B09104
:104E900012048093330490933404A0933504B093A8
:104EA00036048091170490911804A0911904B091D0
:104EB0001A0480933B0490933C04A0933D04B09368
:104EC0003E041092BC041092BD041092BE041092D5
:104ED000BF041092B8041092B9041092BA04109250
:104EE000BB0402C01092A004440F551F485B574FEB
:104EF000DA018D919C918C3491058CF080919F0406
:104F00008F5F80939F04893C60F01092620488EC6C
:104F100080939F0410929E0410929D0402C01092F0
:104F20009F0480916C03815080936C0380916C038B
:104F30008F3F29F080915104882309F460C30E94B7
:104F4000111E80917408882E9924D401AA0FBB1FCA
:104F5000CD01885B974FFC01808191819E8B8D8B69
:104F600080918308C82EDD24A25AB74F0D90BC91C2
:104F7000A02DBC8BAB8B80918408282E332480918C
:104F80007508A82EBB24C501880F991FDC01A85BFA
:104F9000B74F0D90BC91A02DBA8BA98B825A974F19
:104FA000DC01ED90FC90E0917708AE2FBB27AA0FB3
:104FB000BB1FA85BB74F0D90BC91A02DBE87AD87DE
:104FC00010919903612F772767FD7095872F972F91
:104FD0000E945A3917FF06C020E030E040E853E451
:104FE0000E94B53820E030E040E251E40E94B5383C
:104FF00020E030E040E85BE30E94D4392B013C0123
:105000006093E5087093E6088093E7089093E808BA
:1050100010919A03612F772767FD7095872F972F3F
:105020000E945A3917FF06C020E030E040E853E400
:105030000E94B53820E030EE4BE257E40E94F7388A
:105040006093D7087093D8088093D9089093DA08B2
:105050002091B303222311F40C948A378AE090E064
:105060009093CB038093CA03E22FFF27E2FF09C08E
:1050700080917104482F5527440F551F440F551F29
:1050800010C0E3FD03C040E050E00BC0809171040C
:105090009927880F991F880F991F44275527481B68
:1050A000590B20917B0430917C04C90103E0880FE7
:1050B000991F0A95E1F7821B930B840F951F68E0F7
:1050C00070E00E945B3A788F6F8B70937C046093E2
:1050D0007B04E4FF09C080917104482F5527440FD9
:1050E000551F440F551F0FC0E5FD02C00C94A0379B
:1050F000809171049927880F991F880F991F442761
:105100005527481B590B20917D0430917E04C9011D
:10511000A3E0880F991FAA95E1F7821B930B840FD8
:10512000951F68E070E00E945B3A8B0170937E04EB
:1051300060937D048091B203282F332723FF03C09F
:1051400082E390E004C022FF07C08EEC9FEF9093B3
:10515000800480937F0404C01092800410927F0426
:1051600021FF09C08091A0039091A1030196909323
:10517000A1038093A00324FF09C08091A003909114
:10518000A10301979093A1038093A0032D893E89E9
:105190002C9DF0012D9DF00D3C9DF00D11244B89AF
:1051A0005C89429DC001439D900D529D900D11243C
:1051B000E80FF91F8F89988D68E070E00E945B3AD4
:1051C000E60FF71FFA8FE98FF0935D04E0935C041C
:1051D00069897A896C9D90016D9D300D7C9D300DA3
:1051E0001124E29CC001E39C900DF29C900D1124CF
:1051F000280F391FC80168E070E00E945B3A260F53
:10520000371F30935F0420935E0440917F045091D8
:1052100080048D859E85481B590B509361044093F3
:105220006004809172048B30F0F08091DF049091E3
:10523000E004E80FF91FF0935D04E0935C048091B3
:10524000DD049091DE04280F391F30935F04209312
:105250005E048091E1049091E204480F591F50933D
:1052600061044093600480917C0882FF0CC080E060
:1052700090E0A0E0B0E08093D7089093D808A09386
:10528000D908B093DA0820E030E040E050E0C301F4
:10529000B2010E946439882364F480E090E0A0E0C9
:1052A000B0E08093E5089093E608A093E708B093F8
:1052B000E80820E030E040E050E06091D7087091CD
:1052C000D8088091D9089091DA080E94643988231F
:1052D00064F480E090E0A0E0B0E08093D708909381
:1052E000D808A093D908B093DA088091A808682F4D
:1052F00077278B010470107062FDC3C063FDC1C0CD
:1053000080910F0490911004A0911104B0911204A7
:1053100081569A4EA040B040F4F020915C04309148
:105320005D04C601F3E0880F991FFA95E1F7281B89
:10533000390B30935D0420935C0480910F049091AD
:105340001004A0911104B091120481589843A14017
:10535000B040BCF12AC080910F0490911004A0913C
:105360001104B0911204805A9541AF4FBF4F4CF5D4
:1053700020915C0430915D04C601E3E0880F991F21
:10538000EA95E1F7280F391F30935D0420935C0400
:1053900080910F0490911004A0911104B091120417
:1053A00081589843A140B04064F0C60174E0880F72
:1053B000991F7A95E1F7281B390B30935D042093F0
:1053C0005C048091170490911804A0911904B09185
:1053D0001A0481569A4EA040B040F4F020915E0429
:1053E00030915F04C60153E0880F991F5A95E1F789
:1053F000281B390B30935F0420935E0480911704BF
:1054000090911804A0911904B0911A0481589843FE
:10541000A140B040B4F12AC08091170490911804C3
:10542000A0911904B0911A04805A9541AF4FBF4F13
:1054300044F520915E0430915F04C60143E0880F7B
:10544000991F4A95E1F7280F391F30935F04209385
:105450005E048091170490911804A0911904B091F2
:105460001A0481589843A140B0405CF0B4E0CC0CE1
:10547000DD1CBA95E1F72C193D0930935F042093A8
:105480005E04F501EE0FFF1FE85BF74F20813181CD
:1054900080919B08482F55274217530734F4012B5E
:1054A00021F081E080936D0411C0F501EE0FFF1F24
:1054B000E85BF74F2081318180919C08DA01A81BBD
:1054C000B1092A173B0714F410926D04F501EE0F91
:1054D000FF1FE85BF74F80819181AA27BB27A41BA0
:1054E000B50B8A179B0734F463FF04C081E08093F7
:1054F0006E0417C080916E04882399F0AA0CBB1C1F
:10550000E8E4F8E0AE0EBF1EF50120813181809104
:105510009C089927841B950B8217930714F410920B
:105520006E04F401EE0FFF1FE85BF74F808191815D
:105530004817590734F460FF04C081E08093700479
:1055400015C080917004882389F0F401EE0FFF1FCD
:10555000E85BF74F2081318180919C08FA01E81BBC
:10556000F1092E173F0714F410927004F401EE0FA6
:10557000FF1FE85BF74F808191818A179B0734F406
:1055800061FF04C081E080936F0417C080916F04B5
:10559000882399F0880C991C28E438E0820E931E29
:1055A000D4012D913C9180919C089927841B950BE7
:1055B0008217930714F410926F0480916D0488236E
:1055C00021F480916E04882321F081E080936C04A3
:1055D00002C010926C0480917004882321F48091A1
:1055E0006F04882351F081E080936B0410926C0467
:1055F00010926D0410926E040EC010926B04809194
:105600006C04882311F40C94A43784E690E0909302
:10561000CB038093CA0380919A089927E981FA8184
:105620008E179F0714F49A838983209051042220B7
:1056300041F1109261041092600410925D04109286
:105640005C0410925F0410925E048DEC9CECACEC58
:10565000BDE38093E5089093E608A093E708B09334
:10566000E8088AE097EDA3EABBE38093D70890931C
:10567000D808A093D908B093DA0810926C0410925D
:105680006B048091CF089091D008A091D108B0917F
:10569000D20820910F0430911004409111045091D0
:1056A0001204820F931FA41FB51F8093CF089093FD
:1056B000D008A093D108B093D2088091D3089091DC
:1056C000D408A091D508B091D60820911704309144
:1056D00018044091190450911A04820F931FA41FBB
:1056E000B51F8093D3089093D408A093D508B093A6
:1056F000D6088091C7089091C808A091C908B091B8
:10570000CA0820911304309114044091150450915B
:105710001604820F931FA41FB51F8093C708909390
:10572000C808A093C908B093CA088091BF08909197
:10573000C008A091C108B091C20820911B0430910B
:105740001C0440911D0450911E04820F931FA41F3E
:10575000B51F8093BF089093C008A093C108B09371
:10576000C20830906B04332011F00C9404388091FF
:105770006C04882311F00C9404380C94AC37F0EED0
:105780006F16FFEF7F06FFEF8F06FFEF9F0644F4D3
:10579000B0EE6B2EBFEF7B2EBFEF8B2EBFEF9B2E9D
:1057A000213231054105510534F0A0E2AA2EB12C79
:1057B000C12CD12C0DC0205E3F4F4F4F5F4F44F4A2
:1057C000F0EEAF2EFFEFBF2EFFEFCF2EFFEFDF2E5D
:1057D00080912F0490913004A0913104B091320453
:1057E00086199709A809B90980932F04909330046A
:1057F000A0933104B093320480913704909138041F
:10580000A0913904B0913A048A199B09AC09BD09E9
:105810008093370490933804A0933904B0933A04EA
:105820008091E5039091E6038F3F910509F008F41C
:10583000CBC4332009F04CC480916C04882309F058
:1058400047C46091CF087091D0088091D1089091A1
:10585000D20820E031E040E050E00E94903A2093EE
:10586000CF083093D0084093D1085093D20860916C
:10587000D3087091D4088091D5089091D60820E083
:1058800031E040E050E00E94903A2093D3083093FA
:10589000D4084093D5085093D608E0908808FF2498
:1058A0000027112720911F043091200440912104EA
:1058B00050912204C801B7010E941C3A20E031E057
:1058C00040E050E00E94903A20931F04309320045F
:1058D0004093210450932204209123043091240406
:1058E0004091250450912604C801B7010E941C3A3A
:1058F00020E031E040E050E00E94903A2093230401
:105900003093240440932504509326046091270487
:10591000709128048091290490912A0420E031E0BC
:1059200040E050E00E94903A2093270430932804EE
:105930004093290450932A046091CF087091D008B5
:105940008091D1089091D20820911F0430912004B9
:105950004091210450912204E090A108FF240027E7
:105960001127621B730B840B950BA80197010E94F2
:10597000903A209395043093960440939704509363
:105980009804CA01B90120E031E040E050E00E94F3
:10599000903A290130936A04209369046091D308F6
:1059A0007091D4088091D5089091D6082091230455
:1059B000309124044091250450912604621B730BFE
:1059C000840B950BA80197010E94903A79018A01F6
:1059D000CA01B90120E031E040E050E00E94903A75
:1059E000388F2F8B30936804209367046091C70829
:1059F0007091C8088091C9089091CA0820E031E0F0
:105A000040E050E00E94903A2093C7083093C808C5
:105A10004093C9085093CA086091BF087091C008AC
:105A20008091C1089091C20820E031E040E050E050
:105A30000E94903A2093BF083093C0084093C10859
:105A40005093C208A0901304B0901404C0901504A1
:105A5000D090160480910F0490911004A09111042D
:105A6000B0911204A81AB90ACA0ADB0AA092B004BB
:105A7000B092B104C092B204D092B30460901B04FF
:105A800070901C0480901D0490901E048091170457
:105A900090911804A0911904B0911A04681A790A17
:105AA0008A0A9B0A6092AC047092AD048092AE04A4
:105AB0009092AF04A092A804B092A904C092AA0444
:105AC000D092AB046092A4047092A5048092A604C4
:105AD0009092A7048091330490913404A0913504EE
:105AE000B09136048A199B09AC09BD09809333042F
:105AF00090933404A0933504B093360480913B0412
:105B000090913C04A0913D04B0913E048619970900
:105B1000A809B90980933B0490933C04A0933D04E9
:105B2000B0933E0460911F04709120048091210481
:105B3000909122042AE130E040E050E00E94903A47
:105B400030937A072093790760912304709124049D
:105B500080912504909126042AE130E040E050E055
:105B60000E94903A30937C0720937B07B0927E0787
:105B7000A0927D077092800760927F076091CF08A6
:105B80007091D0088091D1089091D2082AE130E03C
:105B900040E050E00E94903A3093820720938107C2
:105BA0006091D3087091D4088091D5089091D6085F
:105BB0002AE130E040E050E00E94903A30938407C0
:105BC00020938307F0929207E09291078F89988D36
:105BD000880F991F2F89388D73E0220F331F7A9514
:105BE000E1F7820F931F909394078093930781E0CE
:105BF00090E09093900480938F048091CF089091CF
:105C0000D008A091D108B091D2082091870430919A
:105C100088044091890450918A04281B390B4A0B4F
:105C20005B0B57FF07C050954095309521953F4F2E
:105C30004F4F5F4F20523E44404050400CF0B9C09F
:105C400081E0A81680E1B80680E0C80680E0D806AA
:105C50000CF44EC080918E04882309F445C0D6010F
:105C6000C5016CE0B595A795979587956A95D1F78D
:105C700001969093900480938F04D601C50153E060
:105C8000B595A795979587955A95D1F780939504E3
:105C900090939604A0939704B093980489589341E5
:105CA000A040B04064F088E893E1A0E0B0E08093C9
:105CB000950490939604A0939704B09398046091F0
:105CC000950470919604809197049091980420E037
:105CD00031E040E050E00E94903A420E531E509254
:105CE0006A044092690462C081E080938E045EC0C1
:105CF00010928E04F0E0AF16F0EFBF06FFEFCF0674
:105D0000FFEFDF060CF052C080918D04882309F468
:105D100049C088279927DC018A199B09AC09BD096C
:105D20004CE0B595A795979587954A95D1F701963B
:105D30009093900480938F04C601B50128E030E071
:105D400040E050E00E94903A2093950430939604EE
:105D5000409397045093980428573C4E4F4F5F4F01
:105D600064F488E79CEEAFEFBFEF809395049093C7
:105D70009604A0939704B093980460919504709151
:105D80009604809197049091980420E031E040E0DF
:105D900050E00E94903A420E531E50926A04409284
:105DA00069040BC081E080938D0407C010928D04BC
:105DB00004C01092900410928F048091A208082FC2
:105DC000112780918F04909190040817190724F4EB
:105DD0001093900400938F0471E0A71674E0B70647
:105DE00070E0C70670E0D7065CF08091FB039091ED
:105DF000FC0320918F0430919004820F931F13C0F5
:105E000080E0A8168CEFB8068FEFC8068FEFD80693
:105E100074F48091FB039091FC0320918F043091E6
:105E20009004821B930B9093FC038093FB0381E00F
:105E300090E09093900480938F04109291041092BC
:105E4000920410929304109294048091D30890913C
:105E5000D408A091D508B091D60820918304309140
:105E600084044091850450918604281B390B4A0B09
:105E70005B0B57FF07C050954095309521953F4FDC
:105E80004F4F5F4F20523E44404050400CF0BDC049
:105E9000A1E06A16A0E17A06A0E08A06A0E09A06D0
:105EA0000CF450C080918C04882309F447C0D401BD
:105EB000C3013CE0B595A795979587953A95D1F79D
:105EC00001969093900480938F04D401C30123E042
:105ED000B595A795979587952A95D1F780939104C5
:105EE00090939204A0939304B0939404895893419F
:105EF000A040B04064F088E893E1A0E0B0E0809377
:105F0000910490939204A0939304B09394046091AD
:105F1000910470919204809193049091940420E0F4
:105F200031E040E050E00E94903A6F89788D620F36
:105F3000731F709368046093670464C081E080936A
:105F40008C0460C010928C0470E0671670EF7706C6
:105F50007FEF87067FEF97060CF054C080918B048B
:105F6000882309F44BC088279927DC0186199709F3
:105F7000A809B909FCE0B595A79597958795FA9575
:105F8000D1F701969093900480938F04C401B301DC
:105F900028E030E040E050E00E94903A20939104E5
:105FA00030939204409393045093940428573C4EAA
:105FB0004F4F5F4F64F488E79CEEAFEFBFEF8093E5
:105FC000910490939204A0939304B09394046091ED
:105FD000910470919204809193049091940420E034
:105FE00031E040E050E00E94903AAF89B88DA20FB6
:105FF000B31FB0936804A09367040BC081E0809343
:106000008B0407C010928B0404C01092900410926D
:106010008F04809191049091920490938E078093C5
:106020008D0780918F04909190040817190724F42C
:106030001093900400938F04B1E06B16B4E07B06DC
:10604000B0E08B06B0E09B065CF08091FD03909180
:10605000FE0320918F0430919004820F931F13C090
:10606000E0E06E16ECEF7E06EFEF8E06EFEF9E0699
:1060700074F48091FD039091FE0320918F04309180
:106080009004821B930B9093FE038093FD038091F9
:10609000FB039091FC039093860780938507809182
:1060A000FD039091FE032091010430910204821BB4
:1060B000930B9C01E3E0220F331FEA95E1F7880F71
:1060C000991F820F931F909388078093870708C0BA
:1060D000109268041092670410926A041092690486
:1060E00020E030E040E050E06091D7087091D8089F
:1060F0008091D9089091DA080E946439882341F48C
:10610000109268041092670410926A041092690455
:106110008091CF089091D008A091D108B091D20879
:106120008093870490938804A0938904B0938A0491
:106130008091D3089091D408A091D508B091D60849
:106140008093830490938404A0938504B093860481
:1061500010921F0410922004109221041092220425
:106160001092230410922404109225041092260405
:1061700010922704109228041092290410922A04E5
:106180001092CF081092D0081092D1081092D20825
:106190001092D3081092D4081092D5081092D60805
:1061A0001092C7081092C8081092C9081092CA0825
:1061B0001092BF081092C0081092C1081092C20835
:1061C0001092E6031092E5038090600490906104C1
:1061D000540197FE04C0AA24BB24A818B908F5E10D
:1061E000AF16B1043CF080917C0884FD03C081E0CF
:1061F00080939904E0908508CC24B7FCC094DC2CF3
:10620000B401882777FD8095982F2E2D33274427BA
:1062100055270E941C3A9B01AC01C601B5010E94A2
:106220001C3A20E032E040E050E00E94903A8901C0
:106230009A01FF24E89CC001E99C900DF89C900D08
:10624000112464E070E00E945B3A600F711F3B0113
:10625000882477FC8094982C6092B4047092B504E2
:106260008092B6049092B70480913F0490914004CC
:10627000A0914104B091420486199709A809B9096F
:1062800080933F0490934004A0934104B093420450
:1062900080913F0490914004A0914104B091420448
:1062A0008155934CA040B04064F080E593ECA0E0B1
:1062B000B0E080933F0490934004A0934104B093D6
:1062C000420480913F0490914004A0914104B09118
:1062D0004204805B9C43AF4FBF4F64F480EB9CE370
:1062E000AFEFBFEF80933F0490934004A09341042D
:1062F000B093420480914B0490914C04892B09F493
:1063000092C080917C0883FF8EC060910F047091D1
:106310001004809111049091120420E032E040E0DA
:1063200050E00E94903A890137FF03C01095019513
:106330001F4F609117047091180480911904909177
:106340001A0420E032E040E050E00E94903AB901A7
:1063500037FF03C0709561957F4F601771070CF48C
:10636000B80169317105A4F480919904882381F002
:106370008091810490918204892B51F480914B0487
:1063800090914C0490934E0480934D041092990484
:10639000209198033327629FC001639F900D729FE5
:1063A000900D112460E470E00E945B3AA901461B45
:1063B000570B141615068CF5809181049091820478
:1063C000009749F500913F04109140042091410449
:1063D0003091420480914F0490915004BC01649F1D
:1063E000C001659F900D749F900D112460E270E0D4
:1063F0000E945B3A882777FD8095982F060F171F1C
:10640000281F391F00933F04109340042093410438
:106410003093420408C0019702C084EF91E090934A
:1064200082048093810480919A04815080939A041D
:106430008F3F09F079C088E180939A0460910F043E
:10644000709110048091110490911204E0908808DA
:10645000FF2400271127A80197010E94903A30934A
:106460005807209357076091170470911804809182
:10647000190490911A04A80197010E94903A309350
:106480005A07209359078091E0089091E108909372
:106490005C0780935B078091EA089091EB089093EA
:1064A0005E0780935D078091E3089091E4089093E4
:1064B000600780935F0780916304909164049093D8
:1064C000620780936107609147047091480480914E
:1064D000490490914A0420E032E040E050E00E94FC
:1064E000903A309364072093630780914B04909116
:1064F0004C049093680780936707809109039091FB
:106500000A0390936A078093690780915B04992737
:1065100090936C0780936B078091CB089091CC0887
:1065200090937807809377073320A9F06091C4088F
:106530007091C508882777FD8095982F0E945A3959
:106540002091E5083091E6084091E7085091E8086D
:106550000E94D43932C060910F0470911004809170
:10656000110490911204E090C408F090C5080E94B4
:106570005A392091D7083091D8084091D9085091C4
:10658000DA080E94D4395B016C010027F7FC009502
:10659000102FC801B7010E945A392091E5083091A7
:1065A000E6084091E7085091E8080E94D4399B0121
:1065B000AC01C601B5010E94B5380E943D39709307
:1065C000C5086093C40880916C048823A9F0609189
:1065D000BC087091BD08882777FD8095982F0E9490
:1065E0005A392091E5083091E6084091E70850912A
:1065F000E8080E94D43932C06091170470911804E1
:106600008091190490911A04E090BC08F090BD08A4
:106610000E945A392091D7083091D8084091D90862
:106620005091DA080E94D4395B016C010027F7FC15
:106630000095102FC801B7010E945A392091E50832
:106640003091E6084091E7085091E8080E94D4395B
:106650009B01AC01C601B5010E94B5380E943D39CD
:106660007093BD086093BC086091E3087091E408E2
:10667000E0902B04F0902C0400912D0410912E0436
:106680008091D7089091D808A091D908B091DA08E4
:1066900089879A87AB87BC87882777FD8095982F55
:1066A0000E945A392091E5083091E6084091E708A8
:1066B0005091E8080E94D4395B016C01C801B70110
:1066C0000E945A3929853A854B855C850E94D439C8
:1066D00020E030E040E05FE30E94D4399B01AC0150
:1066E000C601B5010E94B5380E943D397093E40897
:1066F0006093E3088091BC089091BD089093900747
:1067000080938F0760911704709118048091190489
:1067100090911A040E945A3929853A854B855C85E7
:106720000E94D4390E943D3970938A07609389078B
:10673000A0915E04B0915F04B88BAF87B0939607C9
:10674000A09395078091C4089091C5088150984006
:1067500034F080E098E09093C5088093C40880915D
:10676000C4089091C5088050984F34F480E098EFA9
:106770009093C5088093C4088091BC089091BD088F
:106780008150984034F080E098E09093BD08809369
:10679000BC088091BC089091BD088050984F34F49B
:1067A00080E098EF9093BD088093BC088091E30847
:1067B0009091E4088150984034F080E098E0909304
:1067C000E4088093E3088091E3089091E408805006
:1067D000984F34F480E098EF9093E4088093E308B6
:1067E00080917C08992780FFD7C04091950381FF55
:1067F0000EC0423310F58091630490916404449775
:1068000090936604809365041092520419C02091FD
:10681000A0033091A103240F311D80918108992795
:10682000BC01269FC001279F900D369F900D11241B
:106830004497909366048093650481E080935204AA
:10684000222021F0109266041092650420916304C6
:1068500030916404409165045091660442175307D7
:106860000CF09AC080915204882309F495C0241B2F
:10687000350B809196039927DC012A9FC0012B9F3D
:10688000900D3A9F900D112460E170E00E945B3AF8
:1068900009811A81061B170B2091E3033091E40351
:1068A000809194039927FC012E9FC0012F9F900D8A
:1068B0003E9F900D112468E070E00E945B3A061B39
:1068C000170B60914704709148048091490490919E
:1068D0004A0420E032E040E050E00E94903ACA01D1
:1068E000B901209197033327442755270E941C3A6A
:1068F00020E230E040E050E00E94903AFFEF2E3C72
:106900003F0714F42EEC3FEF80919B0490919C0480
:10691000AC0164E0440F551F6A95E1F7481B590B21
:106920002333310514F022E330E0021B130BCA01BC
:10693000800F911F60E170E00E945B3A70939C04AD
:1069400060939B0480917D089927681779078CF4E0
:1069500029813A81281739072CF090939C04809361
:106960009B0407C049815A8150939C0440939B0427
:106970000DC080919B0490919C0469817A81681775
:10698000790724F470939C0460939B0480919B048A
:1069900090919C049A838983A981BA81B0936607F8
:1069A000A09365070091E3081091E4088091E20844
:1069B000482E552454971CF41C821B8231C08981B7
:1069C0009A8162E070E00E945B3A9B01C201E9811A
:1069D000FA818E1B9F0B62E070E00E945B3AAB0174
:1069E000B80166197709C901621773070CF4CB0166
:1069F00066277727621B730B681779070CF4BC01B5
:106A0000CA01641775070CF4CB0122273327241B16
:106A1000350B3C832B832817390714F49C838B8315
:106A20002091C4083091C50880905C0490905D046A
:106A30008091C8049091C904881A990A28193909C3
:106A40003093CE082093CD0820E030E040E050E0C5
:106A500069857A858B859C850E9464398823F1F14C
:106A6000E0900F04F09010040091110410911204B2
:106A70006091BC047091BD048091BE049091BF04EC
:106A80000E945A395B016C01C801B7010E945A3952
:106A900029853A854B855C850E94D4397B018C0120
:106AA000B401882777FD8095982F0E945A399B0161
:106AB000AC01C801B7010E94B4389B01AC01C6010A
:106AC000B5010E94B5380E943D396093BC047093B3
:106AD000BD048093BE049093BF041CC02091CD08D8
:106AE0003091CE08442737FD4095542F8091BC0447
:106AF0009091BD04A091BE04B091BF04820F931F7A
:106B0000A41FB51F8093BC049093BD04A093BE0442
:106B1000B093BF048091BC049091BD04A091BE04C9
:106B2000B091BF04181619061A061B0624F4029722
:106B3000A109B10903C00296A11DB11D8093BC0437
:106B40009093BD04A093BE04B093BF048091BC0495
:106B50009091BD04A091BE04B091BF0481383EE382
:106B6000930730E0A30730E0B3072CF080E89EE302
:106B7000A0E0B0E009C08058914CAF4FBF4F64F423
:106B800080E891ECAFEFBFEF8093BC049093BD041D
:106B9000A093BE04B093BF046091CD087091CE085D
:106BA0008091900390919103A0919203B0919303EF
:106BB0008D839E83AF83B887882777FD8095982F34
:106BC0000E945A397B018C016091BC047091BD0414
:106BD0008091BE049091BF040E945A399B01AC0180
:106BE0006D817E818F8198850E94D4399B01AC0193
:106BF000C801B7010E94B5380E943D393B014C01E4
:106C00008B0180919F03A82EBB24CC24DD248B8193
:106C10009C8197FF03C0909581959F4F62E070E043
:106C20000E945B3A9B01A981BA812A0F3B1F44272E
:106C300037FD4095542FC601B5010E941C3A20E44F
:106C400030E040E050E00E94903A1901021713072B
:106C50000CF493016624772462187308A30162166A
:106C600073060CF4A90189819A81EB81FC818E0F56
:106C70009F1F840F951F97FF03C020E030E005C0E1
:106C80009201841595050CF49C018091C608682F2B
:106C90007727788F6F8BCB01621773070CF4C901CC
:106CA0008093BE0889819A81841B950BAB81BC813E
:106CB0008A0F9B1F97FF03C020E030E005C09201C0
:106CC000841595050CF49C018F89988D8217930784
:106CD0000CF4C9018093C3088091BC089091BD0851
:106CE0002091CA043091CB048F849888821A930A29
:106CF000881999099093BB088093BA0820E030E086
:106D000040E050E069857A858B859C850E946439D6
:106D10008823F1F1E0901704F09018040091190411
:106D200010911A046091B8047091B9048091BA046A
:106D30009091BB040E945A395B016C01C801B701F4
:106D40000E945A3929853A854B855C850E94D43941
:106D50007B018C01B401882777FD8095982F0E94D4
:106D60005A399B01AC01C801B7010E94B4389B019C
:106D7000AC01C601B5010E94B5380E943D3960934F
:106D8000B8047093B9048093BA049093BB041CC0F8
:106D90002091BA083091BB08442737FD4095542F05
:106DA0008091B8049091B904A091BA04B091BB0449
:106DB000820F931FA41FB51F8093B8049093B9044A
:106DC000A093BA04B093BB048091B8049091B90425
:106DD000A091BA04B091BB04181619061A061B0636
:106DE00024F40297A109B10903C00296A11DB11DA7
:106DF0008093B8049093B904A093BA04B093BB04F1
:106E00008091B8049091B904A091BA04B091BB04E8
:106E10008138EEE39E07E0E0AE07E0E0BE072CF02D
:106E200080E89EE3A0E0B0E009C08058914CAF4FED
:106E3000BF4F64F480E891ECAFEFBFEF8093B804EC
:106E40009093B904A093BA04B093BB046091BA08BC
:106E50007091BB08882777FD8095982F0E945A393A
:106E60007B018C016091B8047091B9048091BA04DF
:106E70009091BB040E945A399B01AC016D817E81C7
:106E80008F8198850E94D4399B01AC01C801B7015C
:106E90000E94B5380E943D399101621573050CF4CA
:106EA0009B01C301621673060CF4C90149815A8122
:106EB000480F591F2B813C81421B530B57FF03C0C6
:106EC00060E070E005C0B201441555050CF4BA014C
:106ED0004F89588D461757070CF4AB014093DD08D6
:106EE00029813A81281B390B4B815C81241B350B8E
:106EF00037FF03C080E090E005C0C20124153505CE
:106F00000CF4C9012F89388D281739070CF0DAC025
:106F10009C01D8C020917B0430917C04C90113E00E
:106F2000880F991F1A95E1F7821B930B68E070E0B8
:106F30000E945B3A788F6F8B70937C0460937B0424
:106F400040E050E00C94832880916B04882311F476
:106F50000C94152B0C940B2B60910F047091100462
:106F60008091110490911204A0908808BB24CC2435
:106F7000DD24E090E008F090E108A60195010E9470
:106F8000903A0027F7FC0095102F2E193F09400B6F
:106F9000510BCA01B90120E130E040E050E00E940D
:106FA000903A39014A016091170470911804809158
:106FB000190490911A04E090EA08F090EB08A601F9
:106FC00095010E94903A0027F7FC0095102F2E198A
:106FD0003F09400B510BCA01B90120E130E040E00C
:106FE00050E00E94903A59016A0161E2661671040C
:106FF0008104910414F40C94BF2BB0E26B2E712C1D
:10700000812C912C0C94D02B10921F0410922004F0
:10701000109221041092220410922304109224044E
:1070200010922504109226041092CF081092D008D6
:107030001092D1081092D2081092D3081092D4085E
:107040001092D5081092D6081092C7081092C8085E
:107050001092C9081092CA081092BF081092C00876
:107060001092C1081092C20880912F0490913004B0
:10707000A0913104B091320480933304909334048E
:10708000A0933504B093360480913704909138046E
:10709000A0913904B0913A0480933B0490933C044E
:1070A000A0933D04B0933E041092E6031092E503D2
:1070B00010926A0410926904109268041092670496
:1070C0000C94102C2093DB086A960FB6F894DEBF60
:1070D0000FBECDBFDF91CF911F910F91FF90EF9029
:1070E000DF90CF90BF90AF909F908F907F906F90E8
:1070F0005F904F903F902F9008958091CC04909195
:10710000CD04A091CE04B091CF048093D404909389
:10711000D504A093D604B093D7048091D004909165
:10712000D104A091D204B091D3048093D804909359
:10713000D904A093DA04B093DB0408951092C90433
:107140001092C8041092CB041092CA040895FC0156
:107150004150504030F001900616D1F73197CF01E1
:1071600008958827992708955058192EEFD001D0F7
:10717000D2C0BA176207730784079507B1F188F484
:107180000EF410940B2EBA2FA02D062E622F202D58
:10719000072E732F302D082E842F402D092E952F6A
:1071A000502DFF275523B9F0591B49F0573E98F051
:1071B000469537952795A795F0405395C9F776F0F2
:1071C000BA0F621F731F841F30F4879577956795F8
:1071D000B795F040939517FA0F2E0895BF1BBB2764
:1071E000BA0B620B730B840BF6CFDEF6DBC0AED0AE
:1071F00001D091C0552359F0992369F09F575F57EB
:10720000951B33F442F4903811F4915805C09BC09B
:1072100091589F3F09F4C6C0BB271124621773071A
:10722000840730F4660F771F881FBB1F915098F3B7
:1072300011D00F920FD00F920DD0A0E8261737076C
:1072400048071B0609F0A048BA2F602D7F918F9147
:1072500000240895A0E80024621773078407B1058D
:1072600028F0621B730B840BB1090A2A660F771F83
:10727000881FBB1FA69581F7089597FB73D09F3792
:1072800038F0FEE9F91B982F872F762F6B2F05C05A
:1072900086C09695879577956795F150D0F73EF41F
:1072A00090958095709561957F4F8F4F9F4F089572
:1072B000E89403C097FB0EF4F3DFB62F672F782F07
:1072C000892F9EE9002427C00ED05EF004C00BD0A9
:1072D00026F001C008D019F020F48FEF089580E067
:1072E000089581E0089597FB092E052600F868941B
:1072F00030D0E89407FC07C062177307840795072E
:1073000021F008F400940794989408959A95BB0F7F
:10731000661F771F881F11249923A1F08823B2F7D5
:107320009F3F59F0BB0F48F421F4002011F460FF97
:1073300004C06F5F7F4F8F4F9F4F881F9795879532
:1073400097F908952CC09FEF80EC0895052E09262B
:1073500007FA440F551F5F3F79F0AA27A51708F0D9
:1073600051E04795880F991F9F3F31F0BB27B91710
:1073700008F091E0879508959F919F911124E3CFA4
:1073800097FB880F991F9F3F31F0BB27B91708F073
:1073900091E0879508959F919F911124D4CF6627FE
:1073A0007727882799270895D1DF01D0B4CF992373
:1073B00039F0552329F09F575F57950F13F49AF131
:1073C000F1CF91589F3FE1F3629FA12D0F92BB2710
:1073D000639FA00DB11DEE27729FA00DB11DEE1F82
:1073E000AF93AA27649FB00DE11D739FB00DE11DFF
:1073F000AA1F6627829FB00DE11DA61F5527749F07
:10740000E00DA11D551F839FE00DA11D561F849FF8
:10741000A00D511D852F7A2F6E2F1F900F9088235E
:107420001AF4939539F48FCF000C111CBB1F661F03
:10743000771F881F01280895629FD001739FF00174
:10744000829FE00DF11D649FE00DF11D929FF00DF4
:10745000839FF00D749FF00D659FF00D9927729F2B
:10746000B00DE11DF91F639FB00DE11DF91FBD01B6
:10747000CF0111240895991B79E004C0991F961734
:1074800008F0961B881F7A95C9F780950895AA1B66
:10749000BB1B51E107C0AA1FBB1FA617B70710F0FF
:1074A000A61BB70B881F991F5A95A9F78095909531
:1074B000BC01CD01089597FB092E07260AD077FD60
:1074C00004D0E5DF06D000201AF4709561957F4F57
:1074D0000895F6F7909581959F4F0895A1E21A2E91
:1074E000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F68
:1074F000A217B307E407F50720F0A21BB30BE40BB8
:10750000F50B661F771F881F991F1A9469F76095FE
:107510007095809590959B01AC01BD01CF010895B8
:1075200097FB092E05260ED057FD04D0D7DF0AD0D1
:10753000001C38F450954095309521953F4F4F4FA2
:107540005F4F0895F6F790958095709561957F4F00
:107550008F4F9F4F0895F999FECFB2BDA1BDF89A04
:10756000119600B40895F999FECFB2BDA1BD00BC3B
:1075700011960FB6F894FA9AF99A0FBE0895FFCFB4
:107580000A01FF6401496E74656772616C4E69633C
:107590006B20202020496E74656772616C526F6C9D
:1075A0006C202020204163634E69636B20202020E3
:1075B0002020202020416363526F6C6C202020200B
:1075C00020202020204779726F4769657220202093
:1075D0002020202020486F6568656E5765727420F2
:1075E00020202020204163635A20202020202020BA
:1075F00020202020204761732020202020202020D0
:1076000020202020204B6F6D7061737356616C7564
:1076100065202020205370616E6E756E67202020DB
:107620002020202020456D7066616E67202020207C
:1076300020202020203131202D2D2D202020202001
:1076400020202020204D6F746F725F566F726E6520
:1076500020202020204D6F746F725F48696E746522
:107660006E202020204D6F746F725F4C696E6B73BB
:1076700020202020204D6F746F725F526563687404
:10768000732020202031365F4163635F5A20202021
:10769000202020202031374D697474656C4163636C
:1076A0004E69636B2031385F4D697474656C41635A
:1076B00063526F6C6C416E616C6F673139202020B2
:1076C0002020202020496E74656772616C457272BB
:1076D000526F6C6C20416E616C6F673231202020DC
:1076E000202020202032325F4D697474656C474938
:1076F0006E67522020416E616C6F6732332020200C
:1077000020202020203234526F6C6C4F66667365E7
:1077100074202020203235496E74526F6C6C2A46DA
:10772000616B742020416E616C6F673236202020BF
:107730002020202020446972656B74417573676C4A
:10774000526F6C6C2032384D65737377657274526A
:107750006F6C6C20203239417573676C65696368A2
:10776000526F6C6C2033305F492D4C616765526FEE
:107770006C6C20202033315F537469636B526F6CE3
:107780006C20202020FFFF0A016400007D0000FF24
:10779000030102030405060708090A48616C6C6FBF
:1077A0002057656C7400000000000000000000001D
:1077B00000000000000000000000000000000000C9
:1077C00000000000000000000000000000000000B9
:1077D00000000000000000000000000000000000A9
:1077E00000000000000000000000000A0142656780
:1077F000696E6E657200004E6F726D616C000053B1
:10780000706F72740000640090D0030090D0030089
:1078100017B7D13830FB103A409696020A64466496
:02782000ECFF7B
:00000001FF
/Microsoft Robotics Studio/FC source/V68d for MSRS/FlightCtrl.aps
0,0 → 1,0
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/Microsoft Robotics Studio/FC source/V68d for MSRS/GPS.c
0,0 → 1,30
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
long GpsAktuell_X = 0;
long GpsAktuell_Y = 0;
long GpsZiel_X = 0;
long GpsZiel_Y = 0;
void GPS_Neutral(void)
{
GpsZiel_X = GpsAktuell_X;
GpsZiel_Y = GpsAktuell_Y;
}
 
void GPS_BerechneZielrichtung(void)
{
GPS_Nick = 0;
GPS_Roll = 0;
}
 
 
 
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/License.txt
0,0 → 1,59
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Copyright (c0 12.2007 Gunter Logemann (serielle steuerung und serial tunnel)
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + die serielle Steuerung durch microsoft Robotics Studio, sowie die notwendigen erweiterungen in FC.c und uart.c unterliegt einer
// + gesonderten lizenz durch Gunter Logemann (gunter@pccon.de)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + die serielle Steuerung von externen boards an der 2. Seriellen schnittstelle, sowie die notwendigen erweiterungen in FC.c und uart.c
// + unterliegt einer gesonderten lizenz durch Gunter Logemann (gunter@pccon.de)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-profit use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be
// + clearly linked and named as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/Microsoft Robotics Studio/FC source/V68d for MSRS/Settings.h
--- FC source/V68d for MSRS/_Settings.h (nonexistent)
+++ FC source/V68d for MSRS/_Settings.h (revision 90)
@@ -0,0 +1,50 @@
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Testmodi
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define MOTOR_OFF 0
+#define MOTOR_TEST 0
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Abstimmung
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define ACC_AMPLIFY 12
+#define FAKTOR_P 1
+#define FAKTOR_I 0.0001
+
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debug-Interface
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein?
+#define MIN_DEBUG_INTERVALL 500 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Sender
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ #define K_NICK 0
+ #define K_ROLL 1
+ #define K_GAS 2
+ #define K_GIER 3
+ #define K_POTI1 4
+ #define K_POTI2 5
+ #define K_POTI3 6
+ #define K_POTI4 7
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Kamera
+// Stick_P:3
+// Stick_D:0
+// Gyro_P: 175
+// Gyro_I: 175
+// Ki_Anteil: 10
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Normal
+// Stick_P:2
+// Stick_D:8
+// Gyro_P: 80
+// Gyro_I: 150
+// Ki_Anteil: 5
+
/Microsoft Robotics Studio/FC source/V68d for MSRS/analog.c
0,0 → 1,147
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
 
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0;
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0;
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0;
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0;
volatile long Luftdruck = 32000;
volatile int StartLuftdruck;
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
volatile int HoeheD = 0;
volatile char messanzahl_Druck;
volatile int tmpLuftdruck;
volatile unsigned int ZaehlMessungen = 0;
 
//#######################################################################################
//
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
//Free Running Mode, Division Factor 128, Interrupt on
}
 
void SucheLuftruckOffset(void)
{
unsigned int off;
off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]);
if(off > 20) off -= 10;
OCR0A = off;
Delay_ms_Mess(100);
if(MessLuftdruck < 850) off = 0;
for(; off < 250;off++)
{
OCR0A = off;
Delay_ms_Mess(50);
printf(".");
if(MessLuftdruck < 900) break;
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off);
DruckOffsetSetting = off;
Delay_ms_Mess(300);
}
 
 
//#######################################################################################
//
SIGNAL(SIG_ADC)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
static unsigned int gier1, roll1, nick1;
ANALOG_OFF;
switch(state++)
{
case 0:
gier1 = ADC;
kanal = 1;
ZaehlMessungen++;
break;
case 1:
roll1 = ADC;
kanal = 2;
break;
case 2:
nick1 = ADC;
kanal = 4;
break;
case 3:
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2;
kanal = 6;
break;
case 4:
Aktuell_ay = NeutralAccY - ADC;
AdWertAccRoll = Aktuell_ay;
kanal = 7;
break;
case 5:
Aktuell_ax = ADC - NeutralAccX;
AdWertAccNick = Aktuell_ax;
kanal = 0;
break;
case 6:
if(PlatinenVersion == 10) AdWertGier = (ADC + gier1) / 2;
else AdWertGier = ADC + gier1;
kanal = 1;
break;
case 7:
if(PlatinenVersion == 10) AdWertRoll = (ADC + roll1) / 2;
else AdWertRoll = ADC + roll1;
kanal = 2;
break;
case 8:
if(PlatinenVersion == 10) AdWertNick = (ADC + nick1) / 2;
else AdWertNick = ADC + nick1;
//AdWertNick = 0;
//AdWertNick += Poti2;
kanal = 5;
break;
case 9:
AdWertAccHoch = (signed int) ADC - NeutralAccZ;
AdWertAccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4;
if(AdWertAccHoch > 1)
{
if(NeutralAccZ < 800) NeutralAccZ+= 0.02;
}
else if(AdWertAccHoch < -1)
{
if(NeutralAccZ > 600) NeutralAccZ-= 0.02;
}
messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
kanal = 3;
break;
case 10:
tmpLuftdruck += ADC;
if(++messanzahl_Druck >= 5)
{
MessLuftdruck = ADC;
messanzahl_Druck = 0;
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
HoehenWert = StartLuftdruck - Luftdruck;
tmpLuftdruck = 0;
}
kanal = 0;
state = 0;
break;
default:
kanal = 0;
state = 0;
break;
}
ADMUX = kanal;
if(state != 0) ANALOG_ON;
}
/Microsoft Robotics Studio/FC source/V68d for MSRS/analog.h
0,0 → 1,24
/*#######################################################################################
 
#######################################################################################*/
 
extern volatile int UBat;
extern volatile int AdWertNick, AdWertRoll, AdWertGier;
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch;
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az;
extern volatile long Luftdruck;
extern volatile char messanzahl_Druck;
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern volatile int HoeheD;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
extern volatile char MessanzahlNick;
 
unsigned int ReadADC(unsigned char adc_input);
void ADC_Init(void);
void SucheLuftruckOffset(void);
 
 
#define ANALOG_OFF ADCSRA=0
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
/Microsoft Robotics Studio/FC source/V68d for MSRS/eeprom.c
0,0 → 1,182
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Konstanten
// + 0-250 -> normale Werte
// + 251 -> Poti1
// + 252 -> Poti2
// + 253 -> Poti3
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void DefaultKonstanten1(void)
{
EE_Parameter.Kanalbelegung[K_NICK] = 1;
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
EE_Parameter.Kanalbelegung[K_GAS] = 3;
EE_Parameter.Kanalbelegung[K_GIER] = 4;
EE_Parameter.Kanalbelegung[K_POTI1] = 5;
EE_Parameter.Kanalbelegung[K_POTI2] = 6;
EE_Parameter.Kanalbelegung[K_POTI3] = 7;
EE_Parameter.Kanalbelegung[K_POTI4] = 8;
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01;
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 251 -> Poti1
EE_Parameter.Hoehe_P = 10; // Wert : 0-32
EE_Parameter.Luftdruck_D = 50; // Wert : 0-250
EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250
EE_Parameter.Hoehe_Verstaerkung = 4; // Wert : 0-50
EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
EE_Parameter.Stick_D = 8; //8 // Wert : 0-64
EE_Parameter.Gier_P = 14; // Wert : 1-20
EE_Parameter.Gas_Min = 15; // Wert : 0-32
EE_Parameter.Gas_Max = 250; // Wert : 33-250
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
EE_Parameter.KompassWirkung = 128; // Wert : 0-250
EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250
EE_Parameter.Gyro_I = 150; // Wert : 0-250
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
EE_Parameter.I_Faktor = 32;
EE_Parameter.UserParam1 = 32 * 4; //zur freien Verwendung
EE_Parameter.UserParam2 = 0; //zur freien Verwendung
EE_Parameter.UserParam3 = 0; //zur freien Verwendung
EE_Parameter.UserParam4 = 0; //zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
EE_Parameter.ServoNickRefresh = 5;
EE_Parameter.LoopGasLimit = 50;
EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag
EE_Parameter.LoopHysterese = 50;
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
EE_Parameter.AchsKopplung1 = 100;
EE_Parameter.AchsGegenKopplung1 = 10;
EE_Parameter.WinkelUmschlagNick = 100;
EE_Parameter.WinkelUmschlagRoll = 100;
EE_Parameter.GyroAccAbgleich = 50; // 1/k
EE_Parameter.Driftkomp = 4;
EE_Parameter.DynamicStability = 100;
memcpy(EE_Parameter.Name, "Sport\0", 12);
}
void DefaultKonstanten2(void)
{
EE_Parameter.Kanalbelegung[K_NICK] = 1;
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
EE_Parameter.Kanalbelegung[K_GAS] = 3;
EE_Parameter.Kanalbelegung[K_GIER] = 4;
EE_Parameter.Kanalbelegung[K_POTI1] = 5;
EE_Parameter.Kanalbelegung[K_POTI2] = 6;
EE_Parameter.Kanalbelegung[K_POTI3] = 7;
EE_Parameter.Kanalbelegung[K_POTI4] = 8;
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 251 -> Poti1
EE_Parameter.Hoehe_P = 10; // Wert : 0-32
EE_Parameter.Luftdruck_D = 50; // Wert : 0-250
EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250
EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
EE_Parameter.Gier_P = 10; // Wert : 1-20
EE_Parameter.Gas_Min = 15; // Wert : 0-32
EE_Parameter.Gas_Max = 250; // Wert : 33-250
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
EE_Parameter.KompassWirkung = 128; // Wert : 0-250
EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250
EE_Parameter.Gyro_I = 175; // Wert : 0-250
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
EE_Parameter.I_Faktor = 32;
EE_Parameter.UserParam1 = 20 * 4; // zur freien Verwendung
EE_Parameter.UserParam2 = 0; // zur freien Verwendung
EE_Parameter.UserParam3 = 0; // zur freien Verwendung
EE_Parameter.UserParam4 = 0; // zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
EE_Parameter.ServoNickRefresh = 5;
EE_Parameter.LoopGasLimit = 50;
EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag
EE_Parameter.LoopHysterese = 50;
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts
EE_Parameter.AchsKopplung1 = 100; // Faktor, mit dem Gier die Achsen Roll und Nick verkoppelt
EE_Parameter.AchsGegenKopplung1 = 10;
EE_Parameter.WinkelUmschlagNick = 100;
EE_Parameter.WinkelUmschlagRoll = 100;
EE_Parameter.GyroAccAbgleich = 100; // 1/k
EE_Parameter.Driftkomp = 4;
EE_Parameter.DynamicStability = 75;
memcpy(EE_Parameter.Name, "Normal\0", 12);
}
 
void DefaultKonstanten3(void)
{
EE_Parameter.Kanalbelegung[K_NICK] = 1;
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
EE_Parameter.Kanalbelegung[K_GAS] = 3;
EE_Parameter.Kanalbelegung[K_GIER] = 4;
EE_Parameter.Kanalbelegung[K_POTI1] = 5;
EE_Parameter.Kanalbelegung[K_POTI2] = 6;
EE_Parameter.Kanalbelegung[K_POTI3] = 7;
EE_Parameter.Kanalbelegung[K_POTI4] = 8;
EE_Parameter.GlobalConfig = CFG_HOEHENREGELUNG | CFG_DREHRATEN_BEGRENZER | CFG_ACHSENKOPPLUNG_AKTIV;///*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 100; // Wert : 0-250 251 -> Poti1
EE_Parameter.Hoehe_P = 10; // Wert : 0-32
EE_Parameter.Luftdruck_D = 50; // Wert : 0-250
EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250
EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
EE_Parameter.Stick_P = 3; //2 // Wert : 1-6
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
EE_Parameter.Gier_P = 8; // Wert : 1-20
EE_Parameter.Gas_Min = 15; // Wert : 0-32
EE_Parameter.Gas_Max = 250; // Wert : 33-250
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
EE_Parameter.KompassWirkung = 128; // Wert : 0-250
EE_Parameter.Gyro_P = 200; //80 // Wert : 0-250
EE_Parameter.Gyro_I = 175; // Wert : 0-250
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
EE_Parameter.I_Faktor = 10;
EE_Parameter.UserParam1 = 20 * 4; // zur freien Verwendung
EE_Parameter.UserParam2 = 0; // zur freien Verwendung
EE_Parameter.UserParam3 = 0; // zur freien Verwendung
EE_Parameter.UserParam4 = 0; // zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
EE_Parameter.ServoNickRefresh = 5;
EE_Parameter.LoopGasLimit = 50;
EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag
EE_Parameter.LoopHysterese = 50;
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts
EE_Parameter.AchsKopplung1 = 100; // Faktor, mit dem Gier die Achsen Roll und Nick verkoppelt
EE_Parameter.AchsGegenKopplung1 = 10;
EE_Parameter.WinkelUmschlagNick = 100;
EE_Parameter.WinkelUmschlagRoll = 100;
EE_Parameter.GyroAccAbgleich = 100; // 1/k
EE_Parameter.Driftkomp = 4;
EE_Parameter.DynamicStability = 50;
memcpy(EE_Parameter.Name, "Beginner\0", 12);
}
/Microsoft Robotics Studio/FC source/V68d for MSRS/fc.c
0,0 → 1,1138
/*#######################################################################################
Flight Control
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Copyright (c) 12.2007 Gunter Logemann (serial control)
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "eeprom.c"
 
unsigned char h,m,s;
volatile unsigned int I2CTimeout = 100;
volatile int MesswertNick,MesswertRoll,MesswertGier;
volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0;
volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
volatile float NeutralAccZ = 0;
unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
volatile long IntegralNick = 0,IntegralNick2 = 0;
volatile long IntegralRoll = 0,IntegralRoll2 = 0;
volatile long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0;
volatile long Integral_Gier = 0;
volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
volatile long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2;
volatile long Mess_Integral_Hoch = 0;
volatile int KompassValue = 0;
volatile int KompassStartwert = 0;
volatile int KompassRichtung = 0;
unsigned char MAX_GAS,MIN_GAS;
unsigned char Notlandung = 0;
unsigned char HoehenReglerAktiv = 0;
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
 
float GyroFaktor;
float IntegralFaktor;
volatile int DiffNick,DiffRoll;
int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
unsigned char MotorWert[5];
volatile unsigned char SenderOkay = 0;
int StickNick = 0,StickRoll = 0,StickGier = 0;
char MotorenEin = 0;
int HoehenWert = 0;
int SollHoehe = 0;
int LageKorrekturRoll = 0,LageKorrekturNick = 0;
float Ki = FAKTOR_I;
unsigned char Looping_Nick = 0,Looping_Roll = 0;
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0;
 
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250
unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
unsigned char Parameter_Gyro_P = 150; // Wert : 10-250
unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
unsigned char Parameter_Gier_P = 2; // Wert : 1-20
unsigned char Parameter_I_Faktor = 10; // Wert : 1-20
unsigned char Parameter_UserParam1 = 0;
unsigned char Parameter_UserParam2 = 0;
unsigned char Parameter_UserParam3 = 0;
unsigned char Parameter_UserParam4 = 0;
unsigned char Parameter_UserParam5 = 0;
unsigned char Parameter_UserParam6 = 0;
unsigned char Parameter_UserParam7 = 0;
unsigned char Parameter_UserParam8 = 0;
unsigned char Parameter_ServoNickControl = 100;
unsigned char Parameter_LoopGasLimit = 70;
unsigned char Parameter_AchsKopplung1 = 0;
unsigned char Parameter_AchsGegenKopplung1 = 0;
unsigned char Parameter_DynamicStability = 100;
struct mk_param_struct EE_Parameter;
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
 
void Piep(unsigned char Anzahl)
{
while(Anzahl--)
{
if(MotorenEin) return; //auf keinen Fall im Flug!
beeptime = 100;
Delay_ms(250);
}
}
 
//############################################################################
// Nullwerte ermitteln
void SetNeutral(void)
//############################################################################
{
NeutralAccX = 0;
NeutralAccY = 0;
NeutralAccZ = 0;
AdNeutralNick = 0;
AdNeutralRoll = 0;
AdNeutralGier = 0;
Parameter_AchsKopplung1 = 0;
Parameter_AchsGegenKopplung1 = 0;
CalibrierMittelwert();
Delay_ms_Mess(100);
CalibrierMittelwert();
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
 
AdNeutralNick= AdWertNick;
AdNeutralRoll= AdWertRoll;
AdNeutralGier= AdWertGier;
StartNeutralRoll = AdNeutralRoll;
StartNeutralNick = AdNeutralNick;
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4)
{
NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
NeutralAccZ = Aktuell_az;
}
else
{
NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]);
NeutralAccY = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1]);
NeutralAccZ = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1]);
}
Mess_IntegralNick = 0;
Mess_IntegralNick2 = 0;
Mess_IntegralRoll = 0;
Mess_IntegralRoll2 = 0;
Mess_Integral_Gier = 0;
MesswertNick = 0;
MesswertRoll = 0;
MesswertGier = 0;
StartLuftdruck = Luftdruck;
HoeheD = 0;
Mess_Integral_Hoch = 0;
KompassStartwert = KompassValue;
GPS_Neutral();
beeptime = 50;
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
ExternHoehenValue = 0;
}
 
//############################################################################
// Bearbeitet die Messwerte
void Mittelwert(void)
//############################################################################
{
static signed long tmpl,tmpl2;
MesswertGier = (signed int) AdNeutralGier - AdWertGier;
MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll;
MesswertNick = (signed int) AdWertNick - AdNeutralNick;
 
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++
Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L;
Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L;
Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L;
IntegralAccNick += ACC_AMPLIFY * AdWertAccNick;
IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll;
IntegralAccZ += Aktuell_az - NeutralAccZ;
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++
Mess_Integral_Gier += MesswertGier;
Mess_Integral_Gier2 += MesswertGier;
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV))
{
tmpl = Mess_IntegralNick / 4096L;
tmpl *= MesswertGier;
tmpl *= Parameter_AchsKopplung1; //125
tmpl /= 2048L;
tmpl2 = Mess_IntegralRoll / 4096L;
tmpl2 *= MesswertGier;
tmpl2 *= Parameter_AchsKopplung1;
tmpl2 /= 2048L;
}
else tmpl = tmpl2 = 0;
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
MesswertRoll += tmpl;
MesswertRoll += (tmpl2*Parameter_AchsGegenKopplung1)/512L; //109
Mess_IntegralRoll2 += MesswertRoll;
Mess_IntegralRoll += MesswertRoll - LageKorrekturRoll;
if(Mess_IntegralRoll > Umschlag180Roll)
{
Mess_IntegralRoll = -(Umschlag180Roll - 10000L);
Mess_IntegralRoll2 = Mess_IntegralRoll;
}
if(Mess_IntegralRoll <-Umschlag180Roll)
{
Mess_IntegralRoll = (Umschlag180Roll - 10000L);
Mess_IntegralRoll2 = Mess_IntegralRoll;
}
if(AdWertRoll < 15) MesswertRoll = -1000;
if(AdWertRoll < 7) MesswertRoll = -2000;
if(PlatinenVersion == 10)
{
if(AdWertRoll > 1010) MesswertRoll = +1000;
if(AdWertRoll > 1017) MesswertRoll = +2000;
}
else
{
if(AdWertRoll > 2020) MesswertRoll = +1000;
if(AdWertRoll > 2034) MesswertRoll = +2000;
}
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
MesswertNick -= tmpl2;
MesswertNick -= (tmpl*Parameter_AchsGegenKopplung1)/512L;
Mess_IntegralNick2 += MesswertNick;
Mess_IntegralNick += MesswertNick - LageKorrekturNick;
if(Mess_IntegralNick > Umschlag180Nick)
{
Mess_IntegralNick = -(Umschlag180Nick - 10000L);
Mess_IntegralNick2 = Mess_IntegralNick;
}
if(Mess_IntegralNick <-Umschlag180Nick)
{
Mess_IntegralNick = (Umschlag180Nick - 10000L);
Mess_IntegralNick2 = Mess_IntegralNick;
}
if(AdWertNick < 15) MesswertNick = -1000;
if(AdWertNick < 7) MesswertNick = -2000;
if(PlatinenVersion == 10)
{
if(AdWertNick > 1010) MesswertNick = +1000;
if(AdWertNick > 1017) MesswertNick = +2000;
}
else
{
if(AdWertNick > 2020) MesswertNick = +1000;
if(AdWertNick > 2034) MesswertNick = +2000;
}
//++++++++++++++++++++++++++++++++++++++++++++++++
// ADC einschalten
ANALOG_ON;
//++++++++++++++++++++++++++++++++++++++++++++++++
 
Integral_Gier = Mess_Integral_Gier;
IntegralNick = Mess_IntegralNick;
IntegralRoll = Mess_IntegralRoll;
IntegralNick2 = Mess_IntegralNick2;
IntegralRoll2 = Mess_IntegralRoll2;
 
if(EE_Parameter.GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll)
{
if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200);
else if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200);
if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200);
else if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200);
}
if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
}
 
//############################################################################
// Messwerte beim Ermitteln der Nullage
void CalibrierMittelwert(void)
//############################################################################
{
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
ANALOG_OFF;
MesswertNick = AdWertNick;
MesswertRoll = AdWertRoll;
MesswertGier = AdWertGier;
Mittelwert_AccNick = ACC_AMPLIFY * (long)AdWertAccNick;
Mittelwert_AccRoll = ACC_AMPLIFY * (long)AdWertAccRoll;
Mittelwert_AccHoch = (long)AdWertAccHoch;
// ADC einschalten
ANALOG_ON;
if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
 
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
}
 
//############################################################################
// Senden der Motorwerte per I2C-Bus
void SendMotorData(void)
//############################################################################
{
if(MOTOR_OFF || !MotorenEin)
{
Motor_Hinten = 0;
Motor_Vorne = 0;
Motor_Rechts = 0;
Motor_Links = 0;
if(MotorTest[0]) Motor_Vorne = MotorTest[0];
if(MotorTest[1]) Motor_Hinten = MotorTest[1];
if(MotorTest[2]) Motor_Links = MotorTest[2];
if(MotorTest[3]) Motor_Rechts = MotorTest[3];
}
 
DebugOut.Analog[12] = Motor_Vorne;
DebugOut.Analog[13] = Motor_Hinten;
DebugOut.Analog[14] = Motor_Links;
DebugOut.Analog[15] = Motor_Rechts;
 
//Start I2C Interrupt Mode
twi_state = 0;
motor = 0;
i2c_start();
}
 
 
 
//############################################################################
// Trägt ggf. das Poti als Parameter ein
void ParameterZuordnung(void)
//############################################################################
{
 
#define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;}
CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255);
CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255);
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255);
CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255);
CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255);
CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255);
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255);
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255);
CHK_POTI(Parameter_UserParam5,EE_Parameter.UserParam5,0,255);
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6,0,255);
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7,0,255);
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8,0,255);
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255);
CHK_POTI(Parameter_AchsKopplung1, EE_Parameter.AchsKopplung1,0,255);
CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255);
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,0,255);
 
Ki = (float) Parameter_I_Faktor * 0.0001;
MAX_GAS = EE_Parameter.Gas_Max;
MIN_GAS = EE_Parameter.Gas_Min;
}
 
 
//############################################################################
//
void MotorRegler(void)
//############################################################################
{
int motorwert,pd_ergebnis,h,tmp_int;
int GierMischanteil,GasMischanteil;
static long SummeNick=0,SummeRoll=0;
static long sollGier = 0,tmp_long,tmp_long2;
static long IntegralFehlerNick = 0;
static long IntegralFehlerRoll = 0;
static unsigned int RcLostTimer;
static unsigned char delay_neutral = 0;
static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
static unsigned int modell_fliegt = 0;
static int hoehenregler = 0;
static char TimerWerteausgabe = 0;
static char NeueKompassRichtungMerken = 0;
static long ausgleichNick, ausgleichRoll;
Mittelwert();
 
GRN_ON;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gaswert ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
if(Parameter_UserParam2 > 10) {
GasMischanteil = GasMischanteil + (int)ControlIn.gas;
}
 
if(GasMischanteil > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20;
if(GasMischanteil < 0) GasMischanteil = 0;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang schlecht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay < 100)
{
if(!PcZugriff)
{
if(BeepMuster == 0xffff)
{
beeptime = 15000;
BeepMuster = 0x0c00;
}
}
if(RcLostTimer) RcLostTimer--;
else
{
MotorenEin = 0;
Notlandung = 0;
}
ROT_ON;
if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken
{
GasMischanteil = EE_Parameter.NotGas;
Notlandung = 1;
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
}
else MotorenEin = 0;
}
else
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang gut
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay > 140)
{
Notlandung = 0;
RcLostTimer = EE_Parameter.NotGasZeit * 50;
if(GasMischanteil > 40)
{
if(modell_fliegt < 0xffff) modell_fliegt++;
}
if((modell_fliegt < 200) || (GasMischanteil < 40))
{
SummeNick = 0;
SummeRoll = 0;
Mess_Integral_Gier = 0;
Mess_Integral_Gier2 = 0;
}
if((GasMischanteil > 200) && MotorenEin == 0)
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// auf Nullwerte kalibrieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
{
if(++delay_neutral > 200) // nicht sofort
{
GRN_OFF;
MotorenEin = 0;
delay_neutral = 0;
modell_fliegt = 0;
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
{
unsigned char setting=1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken
}
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
SetNeutral();
Piep(GetActiveParamSetNumber());
}
}
else
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern
{
if(++delay_neutral > 200) // nicht sofort
{
GRN_OFF;
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],0xff); // Werte löschen
MotorenEin = 0;
delay_neutral = 0;
modell_fliegt = 0;
SetNeutral();
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],NeutralAccX / 256); // ACC-NeutralWerte speichern
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1],NeutralAccX % 256); // ACC-NeutralWerte speichern
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL],NeutralAccY / 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1],NeutralAccY % 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z],(int)NeutralAccZ / 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1],(int)NeutralAccZ % 256);
Piep(GetActiveParamSetNumber());
}
}
else delay_neutral = 0;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gas ist unten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(GasMischanteil < 35)
{
// Starten
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75)
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Einschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(++delay_einschalten > 200)
{
delay_einschalten = 200;
modell_fliegt = 1;
MotorenEin = 1;
sollGier = 0;
Mess_Integral_Gier = 0;
Mess_Integral_Gier2 = 0;
Mess_IntegralNick = 0;
Mess_IntegralRoll = 0;
Mess_IntegralNick2 = IntegralNick;
Mess_IntegralRoll2 = IntegralRoll;
SummeNick = 0;
SummeRoll = 0;
}
}
else delay_einschalten = 0;
//Auf Neutralwerte setzen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Auschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
{
if(++delay_ausschalten > 200) // nicht sofort
{
MotorenEin = 0;
delay_ausschalten = 200;
modell_fliegt = 0;
}
}
else delay_ausschalten = 0;
}
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// neue Werte von der Funke
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!NewPpmData-- || Notlandung)
{
int tmp_int;
ParameterZuordnung();
StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P;
StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P;
StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0;
IntegralFaktor = ((float) Parameter_Gyro_I) / 44000;
 
#define KEY_VALUE (Parameter_UserParam1 * 4) //(Poti3 * 8)
if(DubWiseKeys[1]) beeptime = 10;
if(DubWiseKeys[1] & DUB_KEY_UP) tmp_int = KEY_VALUE; else
if(DubWiseKeys[1] & DUB_KEY_DOWN) tmp_int = -KEY_VALUE; else tmp_int = 0;
ExternStickNick = (ExternStickNick * 7 + tmp_int) / 8;
if(DubWiseKeys[1] & DUB_KEY_LEFT) tmp_int = KEY_VALUE; else
if(DubWiseKeys[1] & DUB_KEY_RIGHT) tmp_int = -KEY_VALUE; else tmp_int = 0;
ExternStickRoll = (ExternStickRoll * 7 + tmp_int) / 8;
 
if(DubWiseKeys[0] & 8) ExternStickGier = 50;else
if(DubWiseKeys[0] & 4) ExternStickGier =-50;else ExternStickGier = 0;
if(DubWiseKeys[0] & 2) ExternHoehenValue++;
if(DubWiseKeys[0] & 16) ExternHoehenValue--;
 
StickNick += ExternStickNick / 8;
StickRoll += ExternStickRoll / 8;
StickGier += ExternStickGier;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// neue Werte von der seriellen Schnittstelle
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(Parameter_UserParam2 > 10) {
StickNick = StickNick + (int)ControlIn.nick;
StickRoll = StickRoll + (int)ControlIn.roll;
StickGier = StickGier + (int)ControlIn.gier;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
if(GyroFaktor < 0) GyroFaktor = 0;
if(IntegralFaktor < 0) IntegralFaktor = 0;
// greift in den Stick ein, um ungewolltes überschlagen zu verhindern
if(!(EE_Parameter.LoopConfig & CFG_LOOP_LINKS) && !(EE_Parameter.LoopConfig & CFG_LOOP_RECHTS))
{
if(IntegralNick > 60000)
{
StickNick -= 8 * EE_Parameter.Stick_P;
if(IntegralNick > 80000) StickNick -= 16 * EE_Parameter.Stick_P;
}
else
if(IntegralNick < -60000)
{
StickNick += 8 * EE_Parameter.Stick_P;
if(IntegralNick > 80000) StickNick -= 16 * EE_Parameter.Stick_P;
}
if(IntegralRoll > 60000)
{
StickRoll -= 8 * EE_Parameter.Stick_P;
if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P;
}
else
if(IntegralRoll < -60000)
{
StickRoll += 8 * EE_Parameter.Stick_P;
if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P;
}
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Looping?
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_LINKS) Looping_Links = 1;
else
{
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0;
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1;
else
{
if(Looping_Rechts) // Hysterese
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0;
}
}
 
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_OBEN) Looping_Oben = 1;
else
{
if(Looping_Oben) // Hysterese
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0;
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_UNTEN) Looping_Unten = 1;
else
{
if(Looping_Unten) // Hysterese
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0;
}
}
 
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0;
if(Looping_Oben || Looping_Unten) {Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0;
} // Ende neue Funken-Werte
 
if(Looping_Roll) beeptime = 100;
if(Looping_Roll || Looping_Nick)
{
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Bei Empfangsausfall im Flug
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(Notlandung)
{
StickGier = 0;
StickNick = 0;
StickRoll = 0;
GyroFaktor = 0.1;
IntegralFaktor = 0.005;
Looping_Roll = 0;
Looping_Nick = 0;
}
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Integrale auf ACC-Signal abgleichen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define ABGLEICH_ANZAHL 256L
 
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren
MittelIntegralRoll += IntegralRoll;
MittelIntegralNick2 += IntegralNick2;
MittelIntegralRoll2 += IntegralRoll2;
 
if(Looping_Nick || Looping_Roll)
{
IntegralAccNick = 0;
IntegralAccRoll = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
Mess_IntegralNick2 = Mess_IntegralNick;
Mess_IntegralRoll2 = Mess_IntegralRoll;
ZaehlMessungen = 0;
LageKorrekturNick = 0;
LageKorrekturRoll = 0;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll)
{
long tmp_long, tmp_long2;
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick);
tmp_long /= 16;
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll);
tmp_long2 /= 16;
#define AUSGLEICH 32 //(Parameter_UserParam1 / 2)
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
Mess_IntegralNick -= tmp_long;
Mess_IntegralRoll -= tmp_long2;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
if(ZaehlMessungen >= ABGLEICH_ANZAHL)
{
static int cnt = 0;
static char last_n_p,last_n_n,last_r_p,last_r_n;
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt;
if(!Looping_Nick && !Looping_Roll)
{
MittelIntegralNick /= ABGLEICH_ANZAHL;
MittelIntegralRoll /= ABGLEICH_ANZAHL;
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL;
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL;
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL;
#define MAX_I 0//(Poti2/10)
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick);
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich;
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL;
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll);
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich;
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL;
 
// Mess_IntegralNick -= ausgleichNick;
// Mess_IntegralRoll -= ausgleichRoll;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gyro-Drift ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick2 /= ABGLEICH_ANZAHL;
MittelIntegralRoll2 /= ABGLEICH_ANZAHL;
// tmp_long = (long)(MittelIntegralNick2 - (long)IntegralAccNick);
// tmp_long2 = (long)(MittelIntegralRoll2 - (long)IntegralAccRoll);
tmp_long = IntegralNick2 - IntegralNick;
tmp_long2 = IntegralRoll2 - IntegralRoll;
//DebugOut.Analog[25] = MittelIntegralRoll2 / 26;
 
IntegralFehlerNick = tmp_long;
IntegralFehlerRoll = tmp_long2;
Mess_IntegralNick2 -= IntegralFehlerNick;
Mess_IntegralRoll2 -= IntegralFehlerRoll;
 
// IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2;
// IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2;
 
 
DebugOut.Analog[17] = IntegralAccNick / 26;
DebugOut.Analog[18] = IntegralAccRoll / 26;
DebugOut.Analog[19] = IntegralFehlerNick;// / 26;
DebugOut.Analog[20] = IntegralFehlerRoll;// / 26;
DebugOut.Analog[21] = MittelIntegralNick / 26;
DebugOut.Analog[22] = MittelIntegralRoll / 26;
//DebugOut.Analog[28] = ausgleichNick;
DebugOut.Analog[29] = ausgleichRoll;
DebugOut.Analog[30] = LageKorrekturRoll * 10;
 
#define FEHLER_LIMIT (ABGLEICH_ANZAHL * 4)
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16)
#define BEWEGUNGS_LIMIT 20000
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerNick) / 4096;
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT)
{
if(IntegralFehlerNick > FEHLER_LIMIT2)
{
if(last_n_p)
{
cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2;
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick > 5000) ausgleichNick = 5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
// Mess_IntegralNick -= ausgleichNick;
}
else last_n_p = 1;
} else last_n_p = 0;
if(IntegralFehlerNick < -FEHLER_LIMIT2)
{
if(last_n_n)
{
cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2;
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick < -5000) ausgleichNick = -5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
// Mess_IntegralNick -= ausgleichNick;
}
else last_n_n = 1;
} else last_n_n = 0;
} else cnt = 0;
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt;
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt;
 
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerNick) / 4096;
 
ausgleichRoll = 0;
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT)
{
if(IntegralFehlerRoll > FEHLER_LIMIT2)
{
if(last_r_p)
{
cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2;
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll > 5000) ausgleichRoll = 5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
// Mess_IntegralRoll -= ausgleichRoll;
}
else last_r_p = 1;
} else last_r_p = 0;
if(IntegralFehlerRoll < -FEHLER_LIMIT2)
{
if(last_r_n)
{
cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2;
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll < -5000) ausgleichRoll = -5000;
// Mess_IntegralRoll -= ausgleichRoll;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_n = 1;
} else last_r_n = 0;
} else
{
cnt = 0;
}
DebugOut.Analog[27] = ausgleichRoll;
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
//if(cnt > 1) beeptime = 50;
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt;
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt;
DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick);
DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll);
}
else
{
LageKorrekturRoll = 0;
LageKorrekturNick = 0;
}
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick_Alt = MittelIntegralNick;
MittelIntegralRoll_Alt = MittelIntegralRoll;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
IntegralAccNick = 0;
IntegralAccRoll = 0;
IntegralAccZ = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
ZaehlMessungen = 0;
}
//DebugOut.Analog[31] = StickRoll / (26*IntegralFaktor);
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(abs(StickGier) > 20) // war 35
{
if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
}
tmp_int = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx²
tmp_int += (EE_Parameter.Gier_P * StickGier) / 4;
sollGier = tmp_int;
Mess_Integral_Gier -= tmp_int;
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Kompass
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
{
int w,v;
static int SignalSchlecht = 0;
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
v = abs(IntegralRoll /512);
if(v > w) w = v; // grösste Neigung ermitteln
if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht)
{
KompassStartwert = KompassValue;
NeueKompassRichtungMerken = 0;
}
w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren
w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln
if(w > 0)
{
if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
if(SignalSchlecht) SignalSchlecht--;
}
else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Debugwerte zuordnen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!TimerWerteausgabe--)
{
TimerWerteausgabe = 24;
DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
DebugOut.Analog[2] = Mittelwert_AccNick;
DebugOut.Analog[3] = Mittelwert_AccRoll;
DebugOut.Analog[4] = MesswertGier;
DebugOut.Analog[5] = HoehenWert;
DebugOut.Analog[6] =(Mess_Integral_Hoch / 512);
DebugOut.Analog[8] = KompassValue;
DebugOut.Analog[9] = UBat;
DebugOut.Analog[10] = SenderOkay;
DebugOut.Analog[16] = Mittelwert_AccHoch;
 
/* DebugOut.Analog[16] = motor_rx[0];
DebugOut.Analog[17] = motor_rx[1];
DebugOut.Analog[18] = motor_rx[2];
DebugOut.Analog[19] = motor_rx[3];
DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3];
DebugOut.Analog[20] /= 14;
DebugOut.Analog[21] = motor_rx[4];
DebugOut.Analog[22] = motor_rx[5];
DebugOut.Analog[23] = motor_rx[6];
DebugOut.Analog[24] = motor_rx[7];
DebugOut.Analog[25] = motor_rx[4] + motor_rx[5] + motor_rx[6] + motor_rx[7];
*/
// DebugOut.Analog[9] = MesswertNick;
// DebugOut.Analog[9] = SollHoehe;
// DebugOut.Analog[10] = Mess_Integral_Gier / 128;
// DebugOut.Analog[11] = KompassStartwert;
// DebugOut.Analog[10] = Parameter_Gyro_I;
// DebugOut.Analog[10] = EE_Parameter.Gyro_I;
// DebugOut.Analog[9] = KompassRichtung;
// DebugOut.Analog[10] = GasMischanteil;
// DebugOut.Analog[3] = HoeheD * 32;
// DebugOut.Analog[4] = hoehenregler;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(Looping_Nick) MesswertNick = MesswertNick * GyroFaktor;
else MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor;
if(Looping_Roll) MesswertRoll = MesswertRoll * GyroFaktor;
else MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor;
// MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor;
MesswertGier = MesswertGier * (GyroFaktor) + Integral_Gier * IntegralFaktor/2;
 
DebugOut.Analog[28] = MesswertRoll;
DebugOut.Analog[25] = IntegralRoll * IntegralFaktor;
DebugOut.Analog[31] = StickRoll;// / (26*IntegralFaktor);
 
// Maximalwerte abfangen
#define MAX_SENSOR 2048
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Höhenregelung
// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//OCR0B = 180 - (Poti1 + 120) / 4;
//DruckOffsetSetting = OCR0B;
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung
{
int tmp_int;
if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
{
if(Parameter_MaxHoehe < 50)
{
SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters
HoehenReglerAktiv = 0;
}
else
HoehenReglerAktiv = 1;
}
else
{
SollHoehe = ((int) ExternHoehenValue + (int) Parameter_MaxHoehe) * (int)EE_Parameter.Hoehe_Verstaerkung - 20;
HoehenReglerAktiv = 1;
}
 
if(Notlandung) SollHoehe = 0;
h = HoehenWert;
if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln
{ h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil
h = GasMischanteil - h; // vom Gas abziehen
h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil
tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32;
if(tmp_int > 50) tmp_int = 50;
else if(tmp_int < -50) tmp_int = -50;
h -= tmp_int;
hoehenregler = (hoehenregler*15 + h) / 16;
if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN
{
if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas;
if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil;
}
if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas
GasMischanteil = hoehenregler;
}
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Mischer und PI-Regler
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DebugOut.Analog[7] = GasMischanteil;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gier-Anteil
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define MUL_G 1.0
GierMischanteil = MesswertGier - sollGier; // Regler für Gier
//GierMischanteil = 0;
 
if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2; // MartinR
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2); // MartinR
if(GierMischanteil > ((MAX_GAS - GasMischanteil)/2)) GierMischanteil = ((MAX_GAS - GasMischanteil) / 2); // MartinR
if(GierMischanteil < -((MAX_GAS - GasMischanteil) / 2)) GierMischanteil = -((MAX_GAS - GasMischanteil) / 2); // MartinR
 
if(GasMischanteil < 20) GierMischanteil = 0;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Nick-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffNick = MesswertNick - (StickNick - GPS_Nick); // Differenz bestimmen
if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - (StickNick - GPS_Nick); // I-Anteil bei Winkelregelung
else SummeNick += DiffNick; // I-Anteil bei HH
// if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1;
if(SummeNick > 0) SummeNick-= 2 ; else SummeNick += 2 ;
if(SummeNick > 16000) SummeNick = 16000;
if(SummeNick < -16000) SummeNick = -16000;
pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick
// Motor Vorn
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int;
if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int;
 
motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer
if ((motorwert < 0)) motorwert = 0;
else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
if (motorwert < MIN_GAS) motorwert = MIN_GAS;
Motor_Vorne = motorwert;
// Motor Heck
motorwert = GasMischanteil - pd_ergebnis + GierMischanteil;
if ((motorwert < 0)) motorwert = 0;
else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
if (motorwert < MIN_GAS) motorwert = MIN_GAS;
Motor_Hinten = motorwert;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Roll-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffRoll = MesswertRoll - (StickRoll - GPS_Roll); // Differenz bestimmen
if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - (StickRoll - GPS_Roll);// I-Anteil bei Winkelregelung
else SummeRoll += DiffRoll; // I-Anteil bei HH
//if(Poti2 < 100){ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1;}
if(SummeRoll > 0) SummeRoll-= 2 ; else SummeRoll += 2 ;
if(SummeRoll > 16000) SummeRoll = 16000;
if(SummeRoll < -16000) SummeRoll = -16000;
pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int;
if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int;
// Motor Links
motorwert = GasMischanteil + pd_ergebnis - GierMischanteil;
if ((motorwert < 0)) motorwert = 0;
else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
if (motorwert < MIN_GAS) motorwert = MIN_GAS;
Motor_Links = motorwert;
// Motor Rechts
motorwert = GasMischanteil - pd_ergebnis - GierMischanteil;
if ((motorwert < 0)) motorwert = 0;
else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
if (motorwert < MIN_GAS) motorwert = MIN_GAS;
Motor_Rechts = motorwert;
// +++++++++++++++++++++++++++++++++++++++++++++++
}
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/fc.h
0,0 → 1,144
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
 
extern volatile unsigned int I2CTimeout;
extern unsigned char Sekunde,Minute;
extern volatile long IntegralNick,IntegralNick2;
extern volatile long IntegralRoll,IntegralRoll2;
extern volatile long Mess_IntegralNick,Mess_IntegralNick2;
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
extern volatile long IntegralAccNick,IntegralAccRoll;
extern volatile long Mess_Integral_Hoch;
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern volatile int KompassValue;
extern volatile int KompassStartwert;
extern volatile int KompassRichtung;
extern int HoehenWert;
extern int SollHoehe;
extern volatile int MesswertNick,MesswertRoll,MesswertGier;
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch;
extern volatile float NeutralAccZ;
extern long Umschlag180Nick, Umschlag180Roll;
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier;
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8;
 
void MotorRegler(void);
void SendMotorData(void);
void CalibrierMittelwert(void);
void Mittelwert(void);
void SetNeutral(void);
void Piep(unsigned char Anzahl);
extern void DefaultKonstanten(void);
void DefaultKonstanten1(void);
void DefaultKonstanten2(void);
 
extern unsigned char h,m,s;
extern volatile unsigned char Timeout ;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
extern volatile long IntegralNick,IntegralNick2;
extern volatile long IntegralRoll,IntegralRoll2;
extern volatile long Integral_Gier;
extern volatile long Mess_IntegralNick,Mess_IntegralNick2;
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
extern volatile long Mess_Integral_Gier;
extern volatile int DiffNick,DiffRoll;
extern int Poti1, Poti2, Poti3, Poti4;
extern volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
extern unsigned char MotorWert[5];
extern volatile unsigned char SenderOkay;
extern int StickNick,StickRoll,StickGier;
extern char MotorenEin;
extern void DefaultKonstanten1(void);
extern void DefaultKonstanten2(void);
 
#define STRUCT_PARAM_LAENGE 71
struct mk_param_struct
{
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char Gier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char UfoAusrichtung; // X oder + Formation
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
unsigned char ServoNickRefresh; //
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
unsigned char AchsGegenKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick Gegenkoppelt (NickRollGegenkopplung)
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
unsigned char Driftkomp;
unsigned char DynamicStability;
unsigned char UserParam5; // Wert : 0-250
unsigned char UserParam6; // Wert : 0-250
unsigned char UserParam7; // Wert : 0-250
unsigned char UserParam8; // Wert : 0-250
 
//------------------------------------------------
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen
unsigned char Reserved[4];
char Name[12];
};
 
 
/*
unsigned char ServoNickMax; // Wert : 0-250
unsigned char ServoNickRefresh; //
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
//------------------------------------------------
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen
unsigned char Reserved[4];
char Name[12];
*/
extern struct mk_param_struct EE_Parameter;
 
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
extern unsigned char Parameter_AchsKopplung1;
extern unsigned char Parameter_AchsGegenKopplung1;
 
 
#endif //_FC_H
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/flight.pnproj
0,0 → 1,0
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="printf_P.c"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="fc.c"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File><File path="eeprom.c"></File></Project>
/Microsoft Robotics Studio/FC source/V68d for MSRS/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/Microsoft Robotics Studio/FC source/V68d for MSRS/gps.h
0,0 → 1,14
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Roll;
 
void GPS_Neutral(void);
void GPS_BerechneZielrichtung(void);
/Microsoft Robotics Studio/FC source/V68d for MSRS/main.c
0,0 → 1,247
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Copyright (c) 12.2007 Gunter Logemann (Roboboard extensions)
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
unsigned char PlatinenVersion = 10;
 
// -- Parametersatz aus EEPROM lesen ---
// number [0..5]
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
}
 
 
// -- Parametersatz ins EEPROM schreiben ---
// number [0..5]
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if(number > 5) number = 5;
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
unsigned char GetActiveParamSetNumber(void)
{
unsigned char set;
set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]);
if(set > 5)
{
set = 2;
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], set); // diesen Parametersatz als aktuell merken
}
return(set);
}
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer;
 
//unsigned int timer2 = 0;
DDRB = 0x00;
PORTB = 0x00;
for(timer = 0; timer < 1000; timer++); // verzögern
if(PINB & 0x01) PlatinenVersion = 11; else PlatinenVersion = 10;
DDRC = 0x81; // SCL
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
PORTB = 0x01; // LED_Rot
DDRD = 0x2A;//0x3E; // Speaker & TXD & J3 J4 J5
DDRD |=0x80; // J7
PORTD = 0xF7; // LED
MCUSR &=~(1<<WDRF);
WDTCSR |= (1<<WDCE)|(1<<WDE);
WDTCSR = 0;
 
beeptime = 2000;
 
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0;
 
ROT_OFF;
Timer_Init();
UART_Init();
rc_sum_init();
ADC_Init();
i2c_init();
// SPI_MasterInit();
sei();
 
VersionInfo.Hauptversion = VERSION_HAUPTVERSION;
VersionInfo.Nebenversion = VERSION_NEBENVERSION;
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL;
printf("\n\rFlightControl\n\rHardware:%d.%d\n\rSoftware:V%d.%d%c ",PlatinenVersion/10,PlatinenVersion%10, VERSION_HAUPTVERSION, VERSION_NEBENVERSION,VERSION_INDEX + 'a');
printf("\n\r==============================");
GRN_ON;
 
#define EE_DATENREVISION 68 // wird angepasst, wenn sich die EEPROM-Daten geändert haben
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != EE_DATENREVISION)
{
printf("\n\rInit. EEPROM: Generiere Default-Parameter...");
DefaultKonstanten1();
for (unsigned char i=0;i<6;i++)
{
if(i==2) DefaultKonstanten2(); // Kamera
if(i==3) DefaultKonstanten3(); // Beginner
if(i>3) DefaultKonstanten2(); // Kamera
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 3); // default-Setting
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], EE_DATENREVISION);
}
 
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4)
{
printf("\n\rACC nicht abgeglichen!");
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
 
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rAbgleich Luftdrucksensor..");
timer = SetDelay(1000);
SucheLuftruckOffset();
while (!CheckDelay(timer));
printf("OK\n\r");
}
SetNeutral();
 
ROT_OFF;
beeptime = 2000;
DebugIn.Analog[1] = 1000;
DebugIn.Digital[0] = 0x55;
 
printf("\n\rSteuerung: ");
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold");
else printf("Neutral");
printf("\n\n\r");
LcdClear();
I2CTimeout = 5000;
while (1)
{
if (UpdateMotor) // ReglerIntervall
{
// SPI_TransmitByte();
UpdateMotor=0;
//PORTD |= 0x08;
MotorRegler();
//PORTD &= ~0x08;
SendMotorData();
ROT_OFF;
if(PcZugriff) PcZugriff--;
else
{
DubWiseKeys[0] = 0;
DubWiseKeys[1] = 0;
ExternStickNick = 0;
ExternStickRoll = 0;
ExternStickGier = 0;
}
if(SenderOkay) SenderOkay--;
if(!I2CTimeout)
{
I2CTimeout = 5;
i2c_reset();
if((BeepMuster == 0xffff) && MotorenEin)
{
beeptime = 10000;
BeepMuster = 0x0080;
}
}
else
{
I2CTimeout--;
ROT_OFF;
}
}
if(SIO_DEBUG)
{
DatenUebertragung();
BearbeiteRxDaten();
}
else BearbeiteRxDaten();
if(CheckDelay(timer))
{
if(UBat < EE_Parameter.UnterspannungsWarnung)
{
if(BeepMuster == 0xffff)
{
beeptime = 6000;
BeepMuster = 0x0300;
}
}
// SPI_StartTransmitPacket();
timer = SetDelay(100);
}
}
return (1);
}
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/main.h
0,0 → 1,108
#ifndef _MAIN_H
#define _MAIN_H
 
//Hier die Quarz Frequenz einstellen
#if defined (__AVR_ATmega32__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
#endif
 
#if defined (__AVR_ATmega644__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
//#define SYSCLK 16000000L //Quarz Frequenz in Hz
#endif
 
#if defined (__AVR_ATmega644P__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
//#define SYSCLK 16000000L //Quarz Frequenz in Hz
#endif
 
// neue Hardware
#define ROT_OFF {if(PlatinenVersion == 10) PORTB &=~0x01; else PORTB |= 0x01;}
#define ROT_ON {if(PlatinenVersion == 10) PORTB |= 0x01; else PORTB &=~0x01;}
#define ROT_FLASH PORTB ^= 0x01
#define GRN_OFF PORTB &=~0x02
#define GRN_ON PORTB |= 0x02
#define GRN_FLASH PORTB ^= 0x02
 
#define F_CPU SYSCLK
//#ifndef F_CPU
//#error ################## F_CPU nicht definiert oder ungültig #############
//#endif
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ACTIVE_SET 2
#define EEPROM_ADR_LAST_OFFSET 3
 
#define EEPROM_ADR_ACC_NICK 4
#define EEPROM_ADR_ACC_ROLL 6
#define EEPROM_ADR_ACC_Z 8
 
#define EEPROM_ADR_PARAM_BEGIN 100
 
#define CFG_HOEHENREGELUNG 0x01
#define CFG_HOEHEN_SCHALTER 0x02
#define CFG_HEADING_HOLD 0x04
#define CFG_KOMPASS_AKTIV 0x08
#define CFG_KOMPASS_FIX 0x10
#define CFG_GPS_AKTIV 0x20
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40
#define CFG_DREHRATEN_BEGRENZER 0x80
 
#define CFG_LOOP_OBEN 0x01
#define CFG_LOOP_UNTEN 0x02
#define CFG_LOOP_LINKS 0x04
#define CFG_LOOP_RECHTS 0x08
 
//#define SYSCLK
//extern unsigned long SYSCLK;
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll;
extern volatile unsigned char SenderOkay;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
extern unsigned char PlatinenVersion;
 
void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length);
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length);
extern unsigned char GetActiveParamSetNumber(void);
extern unsigned char EEPromArray[];
 
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "old_macros.h"
 
#include "_Settings.h"
#include "printf_P.h"
#include "timer0.h"
#include "uart.h"
#include "analog.h"
#include "twimaster.h"
#include "menu.h"
#include "rc.h"
#include "fc.h"
#include "gps.h"
#include "spi.h"
 
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
#define DEBUG_DISPLAY_INTERVALL 123 // in ms
 
 
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU ))
#endif //_MAIN_H
 
 
 
 
 
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/makefile
0,0 → 1,420
#--------------------------------------------------------------------
# MCU name
MCU = atmega644p
F_CPU = 20000000
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 90
VERSION_INDEX = 1
 
VERSION_KOMPATIBEL = 7 # PC-Kompatibilität
#-------------------------------------------------------------------
 
ifeq ($(MCU), atmega32)
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m
 
HEX_NAME = MEGA32
endif
 
ifeq ($(MCU), atmega644)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
HEX_NAME = MEGA644
endif
 
ifeq ($(MCU), atmega644p)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
# -u bei neuen Controllern wieder einspielen
HEX_NAME = MEGA644
endif
 
ifeq ($(F_CPU), 16000000)
QUARZ = 16MHZ
endif
 
ifeq ($(F_CPU), 20000000)
QUARZ = 20MHZ
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
 
ifeq ($(VERSION_INDEX), 0)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)a
endif
ifeq ($(VERSION_INDEX), 1)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)b
endif
ifeq ($(VERSION_INDEX), 2)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)c
endif
ifeq ($(VERSION_INDEX), 3)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)d
endif
ifeq ($(VERSION_INDEX), 4)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)e
endif
ifeq ($(VERSION_INDEX), 5)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)f
endif
ifeq ($(VERSION_INDEX), 6)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)g
endif
ifeq ($(VERSION_INDEX), 7)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)h
endif
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c
SRC += twimaster.c rc.c fc.c GPS.c
#spi.c
 
##########################################################################################################
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL) -DVERSION_INDEX=$(VERSION_INDEX)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = ponyser
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
# $(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/menu.c
0,0 → 1,127
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned int TestInt = 0;
#define ARRAYGROESSE 10
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10};
char DisplayBuff[80] = "Hallo Welt";
unsigned char DispPtr = 0;
unsigned char RemoteTasten = 0;
 
#define KEY1 0x01
#define KEY2 0x02
#define KEY3 0x04
#define KEY4 0x08
#define KEY5 0x10
 
void LcdClear(void)
{
unsigned char i;
for(i=0;i<80;i++) DisplayBuff[i] = ' ';
}
 
void Menu(void)
{
static unsigned char MaxMenue = 10,MenuePunkt=0;
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); RemotePollDisplayLine = -1; }
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); RemotePollDisplayLine = -1;}
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0;
LCD_printfxy(17,0,"[%i]",MenuePunkt);
switch(MenuePunkt)
{
case 0:
LCD_printfxy(0,0,"++ MikroKopter ++");
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%d%c",PlatinenVersion/10,PlatinenVersion%10,VERSION_HAUPTVERSION, VERSION_NEBENVERSION,VERSION_INDEX+'a');
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber());
LCD_printfxy(0,3,"(c) HB, GL");
// if(RemoteTasten & KEY3) TestInt--;
// if(RemoteTasten & KEY4) TestInt++;
break;
case 1:
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
LCD_printfxy(0,0,"Hoehe: %5i",HoehenWert);
LCD_printfxy(0,1,"SollHoehe: %5i",SollHoehe);
LCD_printfxy(0,2,"Luftdruck: %5i",MessLuftdruck);
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting);
}
else
{
LCD_printfxy(0,1,"Keine ");
LCD_printfxy(0,2,"Höhenregelung");
}
break;
case 2:
LCD_printfxy(0,0,"akt. Lage");
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Kompass: %5i",KompassValue);
break;
case 3:
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]);
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]);
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]);
LCD_printfxy(0,3,"K7:%4i K8:%4i ",PPM_in[7],PPM_in[8]);
break;
case 4:
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]);
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]);
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]);
break;
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
if(PlatinenVersion == 10)
{
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertNick - AdNeutralNick, AdNeutralNick);
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertRoll - AdNeutralRoll, AdNeutralRoll);
LCD_printfxy(0,3,"Gier %4i (%3i)",MesswertGier, AdNeutralGier);
}
else
{
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertNick - AdNeutralNick, AdNeutralNick/2);
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertRoll - AdNeutralRoll, AdNeutralRoll/2);
LCD_printfxy(0,3,"Gier %4i (%3i)",MesswertGier, AdNeutralGier/2);
}
break;
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX);
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY);
LCD_printfxy(0,3,"Hoch %4i (%3i)",Mittelwert_AccHoch/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ);
break;
case 7:
LCD_printfxy(0,1,"Spannung: %5i",UBat);
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay);
break;
case 8:
LCD_printfxy(0,0,"Kompass ");
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung);
LCD_printfxy(0,2,"Messwert: %5i",KompassValue);
LCD_printfxy(0,3,"Start: %5i",KompassStartwert);
break;
case 9:
LCD_printfxy(0,0,"Poti1: %3i",Poti1);
LCD_printfxy(0,1,"Poti2: %3i",Poti2);
LCD_printfxy(0,2,"Poti3: %3i",Poti3);
LCD_printfxy(0,3,"Poti4: %3i",Poti4);
break;
case 10:
LCD_printfxy(0,0,"Servo " );
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
LCD_printfxy(0,2,"Stellung: %3i",ServoValue);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
default: MaxMenue = MenuePunkt - 1;
MenuePunkt = 0;
break;
}
RemoteTasten = 0;
}
/Microsoft Robotics Studio/FC source/V68d for MSRS/menu.h
0,0 → 1,6
extern void Menu(void);
extern void LcdClear(void);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
extern unsigned char RemoteTasten;
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/printf_P.c
0,0 → 1,480
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt
 
/*
Copyright (C) 1993 Free Software Foundation
 
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
 
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
the resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
/******************************************************************************
This file is a patched version of printf called _printf_P
It is made to work with avr-gcc for Atmel AVR MCUs.
There are some differences from standard printf:
1. There is no floating point support (with fp the code is about 8K!)
2. Return type is void
3. Format string must be in program memory (by using macro printf this is
done automaticaly)
4. %n is not implemented (just remove the comment around it if you need it)
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the
folowing specifiers are disabled :
space # * . - + p s o O
6. A function void uart_sendchar(char c) is used for output. The UART must
be initialized before using printf.
 
Alexander Popov
sasho@vip.orbitel.bg
******************************************************************************/
 
/*
* Actual printf innards.
*
* This code is large and complicated...
*/
 
#include <string.h>
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
 
#include "main.h"
 
 
//#define LIGHTPRINTF
char PrintZiel;
 
 
char Putchar(char zeichen)
{
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);}
else return(uart_putchar(zeichen));
}
 
 
void PRINT(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(*ptr++);
}
void PRINTP(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(pgm_read_byte(ptr++));
}
 
void PAD_SP(signed char howmany)
{
for(;howmany>0;howmany--) Putchar(' ');
}
 
void PAD_0(signed char howmany)
{
for(;howmany>0;howmany--) Putchar('0');
}
 
#define BUF 40
 
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
#define is_digit(c) ((c)<='9' && (c)>='0')
#define to_char(n) ((n) + '0')
 
/*
* Flags used during conversion.
*/
#define LONGINT 0x01 /* long integer */
#define LONGDBL 0x02 /* long double; unimplemented */
#define SHORTINT 0x04 /* short integer */
#define ALT 0x08 /* alternate form */
#define LADJUST 0x10 /* left adjustment */
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
 
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */
{
va_list ap;
register const char *fmt; /* format string */
register char ch; /* character from fmt */
register int n; /* handy integer (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
const char *fmark; /* for remembering a place in fmt */
register unsigned char flags; /* flags as above */
signed char width; /* width from format (%8d), or 0 */
signed char prec; /* precision from format (%.3d), or -1 */
char sign; /* sign prefix (' ', '+', '-', or \0) */
unsigned long _ulong=0; /* integer arguments %[diouxX] */
#define OCT 8
#define DEC 10
#define HEX 16
unsigned char base; /* base for [diouxX] conversion */
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */
signed char dpad; /* extra 0 padding needed for integers */
signed char fieldsz; /* field size expanded by sign, dpad etc */
/* The initialization of 'size' is to suppress a warning that
'size' might be used unitialized. It seems gcc can't
quite grok this spaghetti code ... */
signed char size = 0; /* size of converted field or string */
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
char ox[2]; /* space for 0x hex-prefix */
 
PrintZiel = ziel; // bestimmt, LCD oder UART
va_start(ap, fmt0);
fmt = fmt0;
 
/*
* Scan the format for conversions (`%' character).
*/
for (;;) {
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++)
/* void */;
if ((n = fmt - fmark) != 0) {
PRINTP(fmark, n);
}
if (ch == '\0')
goto done;
fmt++; /* skip over '%' */
 
flags = 0;
dprec = 0;
width = 0;
prec = -1;
sign = '\0';
 
rflag: ch = PRG_RDB(fmt++);
reswitch:
#ifdef LIGHTPRINTF
if (ch=='o' || ch=='u' || (ch|0x20)=='x') {
#else
if (ch=='u' || (ch|0x20)=='x') {
#endif
if (flags&LONGINT) {
_ulong=va_arg(ap, unsigned long);
} else {
register unsigned int _d;
_d=va_arg(ap, unsigned int);
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d;
}
}
#ifndef LIGHTPRINTF
if(ch==' ') {
/*
* ``If the space and + flags both appear, the space
* flag will be ignored.''
* -- ANSI X3J11
*/
if (!sign)
sign = ' ';
goto rflag;
} else if (ch=='#') {
flags |= ALT;
goto rflag;
} else if (ch=='*'||ch=='-') {
if (ch=='*') {
/*
* ``A negative field width argument is taken as a
* - flag followed by a positive field width.''
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
if ((width = va_arg(ap, int)) >= 0)
goto rflag;
width = -width;
}
flags |= LADJUST;
flags &= ~ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch=='+') {
sign = '+';
goto rflag;
} else if (ch=='.') {
if ((ch = PRG_RDB(fmt++)) == '*') {
n = va_arg(ap, int);
prec = n < 0 ? -1 : n;
goto rflag;
}
n = 0;
while (is_digit(ch)) {
n = n*10 + to_digit(ch);
ch = PRG_RDB(fmt++);
}
prec = n < 0 ? -1 : n;
goto reswitch;
} else
#endif /* LIGHTPRINTF */
if (ch=='0') {
/*
* ``Note that 0 is taken as a flag, not as the
* beginning of a field width.''
* -- ANSI X3J11
*/
if (!(flags & LADJUST))
flags |= ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch>='1' && ch<='9') {
n = 0;
do {
n = 10 * n + to_digit(ch);
ch = PRG_RDB(fmt++);
} while (is_digit(ch));
width = n;
goto reswitch;
} else if (ch=='h') {
flags |= SHORTINT;
goto rflag;
} else if (ch=='l') {
flags |= LONGINT;
goto rflag;
} else if (ch=='c') {
*(cp = buf) = va_arg(ap, int);
size = 1;
sign = '\0';
} else if (ch=='D'||ch=='d'||ch=='i') {
if(ch=='D')
flags |= LONGINT;
if (flags&LONGINT) {
_ulong=va_arg(ap, long);
} else {
register int _d;
_d=va_arg(ap, int);
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
}
if ((long)_ulong < 0) {
_ulong = -_ulong;
sign = '-';
}
base = DEC;
goto number;
} else
/*
if (ch=='n') {
if (flags & LONGINT)
*va_arg(ap, long *) = ret;
else if (flags & SHORTINT)
*va_arg(ap, short *) = ret;
else
*va_arg(ap, int *) = ret;
continue; // no output
} else
*/
#ifndef LIGHTPRINTF
if (ch=='O'||ch=='o') {
if (ch=='O')
flags |= LONGINT;
base = OCT;
goto nosign;
} else if (ch=='p') {
/*
* ``The argument shall be a pointer to void. The
* value of the pointer is converted to a sequence
* of printable characters, in an implementation-
* defined manner.''
* -- ANSI X3J11
*/
/* NOSTRICT */
_ulong = (unsigned int)va_arg(ap, void *);
base = HEX;
flags |= HEXPREFIX;
ch = 'x';
goto nosign;
} else if (ch=='s') { // print a string from RAM
if ((cp = va_arg(ap, char *)) == NULL) {
cp=buf;
cp[0] = '(';
cp[1] = 'n';
cp[2] = 'u';
cp[4] = cp[3] = 'l';
cp[5] = ')';
cp[6] = '\0';
}
if (prec >= 0) {
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
* strlen() will go further.
*/
char *p = (char*)memchr(cp, 0, prec);
 
if (p != NULL) {
size = p - cp;
if (size > prec)
size = prec;
} else
size = prec;
} else
size = strlen(cp);
sign = '\0';
} else
#endif /* LIGHTPRINTF */
if(ch=='U'||ch=='u') {
if (ch=='U')
flags |= LONGINT;
base = DEC;
goto nosign;
} else if (ch=='X'||ch=='x') {
base = HEX;
/* leading 0x/X only if non-zero */
if (flags & ALT && _ulong != 0)
flags |= HEXPREFIX;
 
/* unsigned conversions */
nosign: sign = '\0';
/*
* ``... diouXx conversions ... if a precision is
* specified, the 0 flag will be ignored.''
* -- ANSI X3J11
*/
number: if ((dprec = prec) >= 0)
flags &= ~ZEROPAD;
 
/*
* ``The result of converting a zero value with an
* explicit precision of zero is no characters.''
* -- ANSI X3J11
*/
cp = buf + BUF;
if (_ulong != 0 || prec != 0) {
register unsigned char _d,notlastdigit;
do {
notlastdigit=(_ulong>=base);
_d = _ulong % base;
 
if (_d<10) {
_d+='0';
} else {
_d+='a'-10;
if (ch=='X') _d&=~0x20;
}
*--cp=_d;
_ulong /= base;
} while (notlastdigit);
#ifndef LIGHTPRINTF
// handle octal leading 0
if (base==OCT && flags & ALT && *cp != '0')
*--cp = '0';
#endif
}
 
size = buf + BUF - cp;
} else { //default
/* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
goto done;
/* pretend it was %c with argument ch */
cp = buf;
*cp = ch;
size = 1;
sign = '\0';
}
 
/*
* All reasonable formats wind up here. At this point,
* `cp' points to a string which (if not flags&LADJUST)
* should be padded out to `width' places. If
* flags&ZEROPAD, it should first be prefixed by any
* sign or other prefix; otherwise, it should be blank
* padded before the prefix is emitted. After any
* left-hand padding and prefixing, emit zeroes
* required by a decimal [diouxX] precision, then print
* the string proper, then emit zeroes required by any
* leftover floating precision; finally, if LADJUST,
* pad with blanks.
*/
 
/*
* compute actual size, so we know how much to pad.
*/
fieldsz = size;
 
dpad = dprec - size;
if (dpad < 0)
dpad = 0;
 
if (sign)
fieldsz++;
else if (flags & HEXPREFIX)
fieldsz += 2;
fieldsz += dpad;
 
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
PAD_SP(width - fieldsz);
 
/* prefix */
if (sign) {
PRINT(&sign, 1);
} else if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
PRINT(ox, 2);
}
 
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
PAD_0(width - fieldsz);
 
/* leading zeroes from decimal precision */
PAD_0(dpad);
 
/* the string or number proper */
PRINT(cp, size);
 
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
PAD_SP(width - fieldsz);
}
done:
va_end(ap);
}
/Microsoft Robotics Studio/FC source/V68d for MSRS/printf_P.h
0,0 → 1,19
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
#define OUT_V24 0
#define OUT_LCD 1
 
 
void _printf_P (char, char const *fmt0, ...);
extern char PrintZiel;
 
 
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args)
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args)
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);}
 
#endif
/Microsoft Robotics Studio/FC source/V68d for MSRS/rc.c
0,0 → 1,84
/*#######################################################################################
Decodieren eines RC Summen Signals
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "rc.h"
#include "main.h"
 
volatile int PPM_in[11];
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
volatile unsigned char NewPpmData = 1;
 
//############################################################################
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input
//Capture Funktion benutzt:
void rc_sum_init (void)
//############################################################################
{
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64
 
// PWM
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10);
//TCCR1B |= (1 << WGM12);
//OCR1B = 55;
TIMSK1 |= _BV(ICIE1);
AdNeutralGier = 0;
AdNeutralRoll = 0;
AdNeutralNick = 0;
return;
}
 
//############################################################################
//Diese Routine startet und inizialisiert den Timer für RC
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
 
{
static unsigned int AltICR=0;
signed int signal = 0,tmp;
static int index;
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause?
// if((signal > (int) Parameter_UserParam2 * 10) && (signal < 8000))
if((signal > 1100) && (signal < 8000))
{
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten
index = 1;
}
else
{
if(index < 10)
{
if((signal > 250) && (signal < 687))
{
signal -= 466;
// Stabiles Signal
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;}
tmp = (3 * (PPM_in[index]) + signal) / 4;
// if(tmp > signal+1) tmp--; else
// if(tmp < signal-1) tmp++;
PPM_diff[index] = tmp - PPM_in[index];
PPM_in[index] = tmp;
}
index++;
if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen
}
}
}
 
 
 
 
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/rc.h
0,0 → 1,36
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega32__)
#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644__)
//#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
//#define TIMER_TEILER CK256 // bei 20MHz
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz
#endif
 
#if defined (__AVR_ATmega644P__)
//#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
//#define TIMER_TEILER CK256 // bei 20MHz
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz
#endif
 
#define GAS PPM_in[2]
 
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[11];
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
 
#endif //_RC_H
/Microsoft Robotics Studio/FC source/V68d for MSRS/spi.c
0,0 → 1,86
// ######################## SPI - FlightCtrl ###################
#include "main.h"
 
 
struct str_ToNaviCtrl ToNaviCtrl;
struct str_FromNaviCtrl FromNaviCtrl;
unsigned char SPI_BufferIndex;
volatile unsigned char SPI_Buffer[sizeof(FromNaviCtrl)];
unsigned char *Ptr_buffer = (unsigned char *) &ToNaviCtrl;
 
//------------------------------------------------------
void SPI_MasterInit(void)
{
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK); // Set MOSI and SCK output, all others input
SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT);
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPIE); // Enable SPI, Master, set clock rate fck/64
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT);
}
 
//------------------------------------------------------
void SPI_StartTransmitPacket(void)
{
if ((SLAVE_SELECT_PORT & (1 << SPI_SLAVE_SELECT)) == 0) return; // transfer of prev. packet not completed
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave
UpdateSPI_Buffer(); // update buffer
SPI_BufferIndex = 1;
DebugOut.Analog[16]++;
// -- Debug-Output ---
cli();
DebugOut.Analog[20] = FromNaviCtrl.Comp;
DebugOut.Analog[21] = FromNaviCtrl.GPS_Nick;
DebugOut.Analog[22] = FromNaviCtrl.GPS_Roll;
DebugOut.Analog[23] = FromNaviCtrl.CompassValue;
sei();
//----
SPDR = ToNaviCtrl.Comp; // Start transmission
}
 
//------------------------------------------------------
//SIGNAL(SIG_SPI)
void SPI_TransmitByte(void)
{
if (!(SPSR & (1 << SPIF))) return;
if (SPI_BufferIndex < sizeof(FromNaviCtrl))
{ SPI_Buffer[SPI_BufferIndex]= SPDR; // get data
//if(SPDR!= 0x00) DebugOut.Analog[19]++; ;
}
if (SPI_BufferIndex < sizeof(ToNaviCtrl))
{ SPDR = Ptr_buffer[SPI_BufferIndex];
}
else
{
unsigned char *ptr = (unsigned char *)&FromNaviCtrl;
unsigned char i;
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave
memcpy(ptr, (unsigned char *) SPI_Buffer, sizeof(SPI_Buffer));
}
SPI_BufferIndex++;
}
 
//------------------------------------------------------
void UpdateSPI_Buffer(void)
{
cli();
ToNaviCtrl.Comp = SPI_PROTOCOL_COMP;
ToNaviCtrl.IntegralNick = (int) (IntegralNick >> 4);
ToNaviCtrl.IntegralRoll = (int) (IntegralRoll >> 4);
ToNaviCtrl.StickNick = (char) StickNick;
ToNaviCtrl.StickRoll = (char) StickRoll;
ToNaviCtrl.StickGier = (char) StickGier;
sei();
}
 
 
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/spi.h
0,0 → 1,46
// ######################## SPI - FlightCtrl ###################
#ifndef _SPI_H
#define _SPI_H
 
#define SPI_PROTOCOL_COMP 1
 
//-----------------------------------------
#define DDR_SPI DDRB
#define DD_SS PB4
#define DD_SCK PB7
#define DD_MOSI PB5
#define DD_MISO PB6
 
 
#define SLAVE_SELECT_DDR_PORT DDRC
#define SLAVE_SELECT_PORT PORTC
#define SPI_SLAVE_SELECT PC5
 
struct str_ToNaviCtrl
{
unsigned char Comp;
int IntegralNick;
int IntegralRoll;
char StickNick,StickRoll,StickGier;
};
 
struct str_FromNaviCtrl
{
unsigned char Comp;
int GPS_Nick;
int GPS_Roll;
int CompassValue;
};
 
extern struct str_ToNaviCtrl ToNaviCtrl;
extern struct str_FromNaviCtrl FromNaviCtrl;
 
 
extern void SPI_MasterInit(void);
extern void SPI_StartTransmitPacket(void);
extern void UpdateSPI_Buffer(void);
extern void SPI_TransmitByte(void);
 
 
 
#endif
/Microsoft Robotics Studio/FC source/V68d for MSRS/timer0.c
0,0 → 1,165
#include "main.h"
 
volatile unsigned int CountMilliseconds = 0;
volatile static unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int cntKompass = 0;
volatile unsigned int beeptime = 0;
unsigned int BeepMuster = 0xffff;
int ServoValue = 0;
 
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
SIGNAL (SIG_OVERFLOW0) // 8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
unsigned char pieper_ein = 0;
// TCNT0 -= 250;//TIMER_RELOAD_VALUE;
 
if(!cnt--)
{
cnt = 9;
cnt_1ms++;
cnt_1ms %= 2;
if(!cnt_1ms) UpdateMotor = 1;
CountMilliseconds++;
}
 
if(beeptime > 1)
{
beeptime--;
if(beeptime & BeepMuster)
{
pieper_ein = 1;
}
else pieper_ein = 0;
}
else
{
pieper_ein = 0;
BeepMuster = 0xffff;
}
 
 
if(pieper_ein)
{
if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2
else PORTC |= (1<<7); // Speaker an PORTC.7
}
else
{
if(PlatinenVersion == 10) PORTD &= ~(1<<2);
else PORTC &= ~(1<<7);
}
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
{
if(PINC & 0x10)
{
cntKompass++;
}
else
{
if((cntKompass) && (cntKompass < 4000))
{
KompassValue = cntKompass;
}
// if(cntKompass < 10) cntKompass = 10;
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L;
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
cntKompass = 0;
}
}
}
 
 
void Timer_Init(void)
{
tim_main = SetDelay(10);
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 120;
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
 
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3;
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22);
// TIMSK2 |= _BV(TOIE2);
TIMSK2 |= _BV(OCIE2A);
 
TIMSK0 |= _BV(TOIE0);
OCR2A = 10;
TCNT2 = 0;
}
 
// -----------------------------------------------------------------------
 
unsigned int SetDelay (unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
char CheckDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(((t - CountMilliseconds) & 0x8000) >> 9);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
 
void Delay_ms_Mess(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt)) ANALOG_ON;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Servo ansteuern
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(SIG_OUTPUT_COMPARE2A)
{
static unsigned char timer = 10;
if(!timer--)
{
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3;
ServoValue = Parameter_ServoNickControl;
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin;
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax;
 
OCR2A = ServoValue;// + 75;
timer = EE_Parameter.ServoNickRefresh;
}
else
{
TCCR2A =3;
PORTD&=~0x80;
}
}
/Microsoft Robotics Studio/FC source/V68d for MSRS/timer0.h
0,0 → 1,16
 
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 250
 
void Timer_Init(void);
void Delay_ms(unsigned int);
void Delay_ms_Mess(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char UpdateMotor;
extern volatile unsigned int beeptime;
extern volatile unsigned int cntKompass;
extern int ServoValue;
extern unsigned int BeepMuster;
/Microsoft Robotics Studio/FC source/V68d for MSRS/twimaster.c
0,0 → 1,152
/*############################################################################
############################################################################*/
 
#include "main.h"
 
unsigned char twi_state = 0;
unsigned char motor = 0;
unsigned char motorread = 0;
unsigned char motor_rx[8];
 
//############################################################################
//Initzialisieren der I2C (TWI) Schnittstelle
void i2c_init(void)
//############################################################################
{
TWSR = 0;
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2;
}
 
//############################################################################
//Start I2C
char i2c_start(void)
//############################################################################
{
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
void i2c_stop(void)
//############################################################################
{
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);
}
 
void i2c_reset(void)
//############################################################################
{
i2c_stop();
twi_state = 0;
motor = TWDR;
motor = 0;
TWCR = 0x80;
TWAMR = 0;
TWAR = 0;
TWDR = 0;
TWSR = 0;
TWBR = 0;
i2c_init();
i2c_start();
i2c_write_byte(0);
}
 
//############################################################################
//Start I2C
char i2c_write_byte(char byte)
//############################################################################
{
TWSR = 0x00;
TWDR = byte;
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
SIGNAL (TWI_vect)
//############################################################################
{
switch (twi_state++)
{
case 0:
i2c_write_byte(0x52+(motor*2));
break;
case 1:
switch(motor++)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 2:
i2c_stop();
if (motor<4) twi_state = 0;
else motor = 0;
i2c_start();
break;
//Liest Daten von Motor
case 3:
i2c_write_byte(0x53+(motorread*2));
break;
case 4:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 5: //1 Byte vom Motor lesen
motor_rx[motorread] = TWDR;
 
case 6:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 7: //2 Byte vom Motor lesen
motor_rx[motorread+4] = TWDR;
motorread++;
if (motorread>3) motorread=0;
i2c_stop();
I2CTimeout = 10;
twi_state = 0;
}
TWCR |= 0x80;
}
/Microsoft Robotics Studio/FC source/V68d for MSRS/twimaster.h
0,0 → 1,33
/*############################################################################
############################################################################*/
 
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
 
//############################################################################
 
// I2C Konstanten
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define I2C_START 0x08
#define I2C_REPEATED_START 0x10
#define I2C_TX_SLA_ACK 0x18
#define I2C_TX_DATA_ACK 0x28
#define I2C_RX_SLA_ACK 0x40
#define I2C_RX_DATA_ACK 0x50
 
//############################################################################
 
extern unsigned char twi_state;
extern unsigned char motor;
extern unsigned char motorread;
extern unsigned char motor_rx[8];
 
void i2c_reset(void);
extern void i2c_init (void); // I2C initialisieren
extern char i2c_start (void); // Start I2C
extern void i2c_stop (void); // Stop I2C
extern char i2c_write_byte (char byte); // 1 Byte schreiben
extern void i2c_reset(void);
 
#endif
/Microsoft Robotics Studio/FC source/V68d for MSRS/uart.c
0,0 → 1,553
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Copyright (c) 12.2007 Gunter Logemann (Roboboard extensions, serial control)
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "uart.h"
 
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char NeueKoordinateEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned volatile char CntCrcError = 0;
unsigned volatile char AnzahlEmpfangsBytes = 0;
unsigned volatile char PC_DebugTimeout = 0;
unsigned char RemotePollDisplayLine = 0;
unsigned char NurKanalAnforderung = 0;
unsigned char DebugTextAnforderung = 255;
unsigned char PcZugriff = 100;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned char DubWiseKeys[3] = {0,0,0};
unsigned char MeineSlaveAdresse;
struct str_DebugOut DebugOut;
struct str_Debug DebugIn;
struct str_VersionInfo VersionInfo;
int Debug_Timer;
 
unsigned volatile char SioTmp1 = 0;
unsigned volatile char SendeBuffer1[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer1[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen1 = 0;
unsigned volatile char AnzahlEmpfangsBytes1 = 0;
unsigned volatile char UebertragungAbgeschlossen1 = 1;
 
struct str_ControlIn ControlIn;
struct str_ControlOut ControlOut;
unsigned volatile char ControlReceived = 0;
 
 
const unsigned char ANALOG_TEXT[32][16] =
{
//1234567890123456
"IntegralNick ", //0
"IntegralRoll ",
"AccNick ",
"AccRoll ",
"GyroGier ",
"HoehenWert ", //5
"AccZ ",
"Gas ",
"KompassValue ",
"Spannung ",
"Empfang ", //10
"11 --- ",
"Motor_Vorne ",
"Motor_Hinten ",
"Motor_Links ",
"Motor_Rechts ", //15
"16_Acc_Z ",
"17MittelAccNick ",
"18_MittelAccRoll",
"Analog19 ",
"IntegralErrRoll ", //20
"Analog21 ",
"22_MittelGIngR ",
"Analog23 ",
"24RollOffset ",
"25IntRoll*Fakt ", //25
"Analog26 ",
"DirektAusglRoll ",
"28MesswertRoll ",
"29AusgleichRoll ",
"30_I-LageRoll ", //30
"31_StickRoll "
};
 
 
 
// 2. Seriell Schnittstelle
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung an zweiten UART
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_TX1)
{
static unsigned int ptr1 = 0;
unsigned char tmp_tx1;
if(!UebertragungAbgeschlossen1)
{
ptr1++; // die [0] wurde schon gesendet
tmp_tx1 = SendeBuffer1[ptr1];
if((tmp_tx1 == '\r') || (ptr1 == MAX_SENDE_BUFF))
{
ptr1 = 0;
UebertragungAbgeschlossen1 = 1;
}
UDR1 = tmp_tx1;
}
else ptr1 = 0;
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung von zweitem UART
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX1)
{
static unsigned char buf_ptr1;
static unsigned char UartState1 = 0;
SioTmp1 = UDR1;
if(buf_ptr1 >= MAX_EMPFANGS_BUFF) UartState1 = 0;
if(SioTmp1 == '\r' && UartState1 == 2)
{
UartState1 = 0;
NeuerDatensatzEmpfangen1 = 1;
AnzahlEmpfangsBytes1 = buf_ptr1;
RxdBuffer1[buf_ptr1] = '\r';
}
else
switch(UartState1)
{
case 0:
if(SioTmp1 == '#' && !NeuerDatensatzEmpfangen1)
{
UartState1 = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr1 = 0;
RxdBuffer1[buf_ptr1++] = SioTmp1;
}
break;
case 1: // Adresse auswerten
UartState1++;
RxdBuffer1[buf_ptr1++] = SioTmp1;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer1[buf_ptr1] = SioTmp1;
if(buf_ptr1 < MAX_EMPFANGS_BUFF) buf_ptr1++;
else UartState1 = 0;
break;
default:
UartState1 = 0;
break;
}
}
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_TX0)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = SendeBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR = tmp_tx;
}
else ptr = 0;
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX0)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
 
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(RxdBuffer[2] == 'R') wdt_enable(WDTO_250MS); // Reset-Commando
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) {
UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
}
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
}
tmpCRC %= 4096;
SendeBuffer[i++] = '=' + tmpCRC / 64;
SendeBuffer[i++] = '=' + tmpCRC % 64;
SendeBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0];
}
 
 
 
 
// --------------------------------------------------------------------------
void SendOutRXTunnelData(unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char ptr = 0;
 
while(len)
{
SendeBuffer1[pt++] = snd[ptr++];
len--;
}
SendeBuffer1[pt++] = '\r';
UebertragungAbgeschlossen1 = 0;
UDR1 = SendeBuffer1[0];
}
 
// --------------------------------------------------------------------------
void SendOutTXTunnelData(unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char ptr = 0;
 
while(len)
{
SendeBuffer[pt++] = snd[ptr++];
len--;
}
SendeBuffer[pt++] = '\r';
UebertragungAbgeschlossen = 0;
NeuerDatensatzEmpfangen1 = 0;
UDR = SendeBuffer[0];
}
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
SendeBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
unsigned char a,b,c,d;
unsigned char ptr = 0;
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) ptrOut[ptr++] = x; else break;
if(len--) ptrOut[ptr++] = y; else break;
if(len--) ptrOut[ptr++] = z; else break;
}
 
}
 
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
if(!NeuerDatensatzEmpfangen) return;
 
// unsigned int tmp_int_arr1[1];
// unsigned int tmp_int_arr2[2];
// unsigned int tmp_int_arr3[3];
unsigned char tmp_char_arr2[2];
// unsigned char tmp_char_arr3[3];
// unsigned char tmp_char_arr4[4];
//if(!MotorenEin)
PcZugriff = 255;
switch(RxdBuffer[2])
{
case 'a':// Texte der Analogwerte
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
DebugTextAnforderung = tmp_char_arr2[0];
break;
case 'c':// Debugdaten incl. Externe IOs usw
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes);
/* for(unsigned char i=0; i<4;i++)
{
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]);
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8);
}*/
RemoteTasten |= DebugIn.RemoteTasten;
DebugDataAnforderung = 1;
break;
case 'h':// x-1 Displayzeilen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
RemoteTasten |= tmp_char_arr2[0];
if(tmp_char_arr2[1] == 255) NurKanalAnforderung = 1; else NurKanalAnforderung = 0; // keine Displaydaten
DebugDisplayAnforderung = 1;
break;
case 't':// Motortest
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
break;
case 'k':// Keys von DubWise
Decode64((unsigned char *) &DubWiseKeys[0],sizeof(DubWiseKeys),3,AnzahlEmpfangsBytes);
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
case 'g':// "Get"-Anforderung für Debug-Daten
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
DebugGetAnforderung = 1;
break;
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
if(tmp_char_arr2[0] != 0xff)
{
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5;
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
}
else
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
break;
case 'l':
case 'm':
case 'n':
case 'o':
case 'p': // Parametersatz speichern
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes);
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
Piep(GetActiveParamSetNumber());
break;
case 'X': // Serial Tunnel Message received
SendOutRXTunnelData((unsigned char *)&RxdBuffer[0], AnzahlEmpfangsBytes);
break;
case 'C': // Flight Control Message received
if(Parameter_UserParam2 > 10) {
Decode64((unsigned char *) &ControlIn,sizeof(ControlIn),3,AnzahlEmpfangsBytes);
ControlOut.errorcode = ControlError_ok;
ControlReceived = 1;
}
else
{
ControlIn.roll = 0;
ControlIn.nick = 0;
ControlIn.gier = 0;
ControlIn.gas = 0;
ControlOut.errorcode = ControlError_ignore;
ControlReceived = 1;
}
break;
 
}
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall;
NeuerDatensatzEmpfangen = 0;
}
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
if (c == '\n')
uart_putchar('\r');
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
//Ausgabe des Zeichens
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert;
// else eeprom_write_byte(&EE_Buffer[pos], wert);
// Buffer[pos] = wert;
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
UCSRB |= (1<<RXCIE);
// TX-Interrupt Freigabe
UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1);
//UBRR = 33;
//öffnet einen Kanal für printf (STDOUT)
//fdevopen (uart_putchar, 0);
//sbi(PORTD,4);
// INIT 2ND uart
UCR1=(1 << TXEN1) | (1 << RXEN1);
// UART Double Speed (U2X)
USR1 |= (1<<U2X1);
// RX-Interrupt Freigabe
UCSR1B |= (1<<RXCIE1);
// TX-Interrupt Freigabe
UCSR1B |= (1<<TXCIE1);
 
//Teiler wird gesetzt
UBRR1=(SYSCLK / (BAUD_RATE * 8L) - 1);
//UBRR = 33;
//öffnet einen Kanal für printf (STDOUT)
//fdevopen (uart_putchar, 0);
//sbi(PORTD,4);
Debug_Timer = SetDelay(200);
}
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
if(!UebertragungAbgeschlossen) return;
if(NeuerDatensatzEmpfangen1 && UebertragungAbgeschlossen) {
SendOutTXTunnelData((unsigned char *) &RxdBuffer1[0],(unsigned char)AnzahlEmpfangsBytes1);
}
if(ControlReceived && UebertragungAbgeschlossen)
{
SendOutData('C',MeineSlaveAdresse,(unsigned char *) &ControlOut,sizeof(ControlOut));
ControlReceived = 0;
}
 
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn));
DebugGetAnforderung = 0;
}
 
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen)
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL);
}
if(DebugTextAnforderung != 255) // Texte für die Analogdaten
{
SendOutData('A',DebugTextAnforderung + '0',(unsigned char *) ANALOG_TEXT[DebugTextAnforderung],16);
DebugTextAnforderung = 255;
}
 
if(DebugDisplayAnforderung && UebertragungAbgeschlossen)
{
Menu();
DebugDisplayAnforderung = 0;
if(++RemotePollDisplayLine == 4 || NurKanalAnforderung)
{
SendOutData('4',0,(unsigned char *)&PPM_in,sizeof(PPM_in)); // DisplayZeile übertragen
RemotePollDisplayLine = -1;
}
else SendOutData('0' + RemotePollDisplayLine,0,(unsigned char *)&DisplayBuff[20 * RemotePollDisplayLine],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
GetVersionAnforderung = 0;
}
 
}
 
/Microsoft Robotics Studio/FC source/V68d for MSRS/uart.h
0,0 → 1,143
#ifndef _UART_H
#define _UART_H
 
#define MAX_SENDE_BUFF 150
#define MAX_EMPFANGS_BUFF 150
#define DUB_KEY_UP 4
#define DUB_KEY_DOWN 8
#define DUB_KEY_RIGHT 32
#define DUB_KEY_LEFT 16
#define DUB_KEY_FIRE 64
 
void BearbeiteRxDaten(void);
 
extern unsigned char DebugGetAnforderung;
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned volatile char NeueKoordinateEmpfangen;
extern unsigned char MeineSlaveAdresse;
extern unsigned char PcZugriff;
extern unsigned char RemotePollDisplayLine;
extern int Debug_Timer;
extern void UART_Init (void);
extern int uart_putchar (char c);
extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void DatenUebertragung(void);
extern void DecodeNMEA(void);
extern void BearbeiteRxDaten(void);
extern unsigned char MotorTest[4];
extern unsigned char DubWiseKeys[3];
struct str_DebugOut
{
unsigned char Digital[2];
unsigned int Analog[32]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
struct str_Debug
{
unsigned char Digital[2];
unsigned char RemoteTasten;
unsigned int Analog[4];
};
extern struct str_Debug DebugIn;
 
struct str_VersionInfo
{
unsigned char Hauptversion;
unsigned char Nebenversion;
unsigned char PCKompatibel;
unsigned char Rserved[7];
};
extern struct str_VersionInfo VersionInfo;
 
struct str_ControlIn
{
int roll;
int nick;
int gier;
int gas;
};
extern struct str_ControlIn ControlIn;
 
struct str_ControlOut
{
unsigned char errorcode;
};
extern struct str_ControlOut ControlOut;
 
#define ControlError_ok 0x00;
#define ControlError_ignore 0x01;
 
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
#if defined (__AVR_ATmega644P__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
 
# define USR1 UCSR1A
# define UCR1 UCSR1B
 
 
 
# define INT_VEC_RX0 SIG_USART_RECV
# define INT_VEC_TX0 SIG_USART_TRANS
# define INT_VEC_RX1 SIG_USART1_RECV
# define INT_VEC_TX1 SIG_USART1_TRANS
 
#endif
 
#endif //_UART_H
/Microsoft Robotics Studio/FC source/V68d for MSRS/version.txt
0,0 → 1,112
 
-------
V0.53 27.04.2007 H.Buss
- erste öffentliche Version
 
V0.53b 29.04.2007 H.Buss
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft
 
V0.53c 29.04.2007 H.Buss
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind.
Die angezeigten Werte waren nicht die Werte der Funke
 
V0.54 01.05.2007 H.Buss
- die Paramtersätze können jetzt vor dem Start ausgewählt werden
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt:
2 3 4
1 x 5
- - -
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw.
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt
 
V0.55 14.05.2007 H.Buss
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden
 
V0.56 14.05.2007 H.Buss
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen
V0.57 24.05.2007 H.Buss
- Der Höhenregler kann nun auch mittels Schalter bedient werden
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat
- Kompass-Einfluss dämpfen bei Neigung
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen
- Der Motortest vom Kopter-Tool geht jetzt
- Man kann den Parametersätzen einen Namen geben
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert
V0.58 30.05.2007 H.Buss
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist
 
V0.60 17.08.2007 H.Buss
- "Schwindel-Bug" behoben
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft
- Poti4 zugefügt
- Es werden jetzt 8 Kanäle ausgewertet
- Kamera-Servo (an J7)
- Die Settings müssen überschrieben werden
V0.61 - V0.63 H.Buss 27.09.2007
- Poti 4 und Kanal 8 werden im Menü angezeigt
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt
- Analog.c: Aktuell_ax korrigiert
- auf 32 Debug-Kanäle erweitert
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar
- leichte Anpassungen im Gier - Geschwindigkeit und Drift
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird
- die PPM-Ausgänge liegen wieder an den Pins an
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an
- Sticksignale werden präziser ausgewertet
- Stick-Kanäle werden ans Kopter-Tool übertragen
- Es muss die Version V1.47 des Kopter-Tool verwendet werden
- Die Settings werden auf Default zurückgesetzt
- am Piepen kann man die Fehlerart unterscheiden
1. einzelnes Piepen beim Einschalten und Kalibrieren
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall
3. schnelleres Intervall mindestens 1 Sek -> Akku
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört
V0.64 H.Buss 30.09.2007
- beim Gieren wurden die Achsen nicht hart genug geregelt
V0.65a H.Buss 15.10.2007
- Integral im Mischer wieder integriert
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100
- ACC/Gyro Abgleich auch bei HH
 
V0.66a H.Buss 3.11.2007
- Messwertverarbeitung aus dem Analog-Interrupt entfernt
- Analogmessung hängt jetzt am FC-Timing
- Looping-Stick-Hysterese eingebaut
- Looping-180°-Umschlag einstellbar
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll
- Lageregelung nach ACC-Sensor verbessert
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage
- Gyrodriftkompensation überarbeitet
- Bug in der Gier-Stick-Berechnung behoben
- Gyro-Messung auf 1kHz beschleunigt
V0.67a H.Buss 16.11.2007
- der Hauptregler-I-Anteil wirkt jetzt nur noch auf den Winkel (ausser im HH-Mode)
- Gyro-Acc-Abgleich jetzt wieder in jedem Zyklus
- Feinabstimmung
- Beim HH-Modus gab es noch Bugs
 
V0.67e H.Buss 29.11.2007
- Parameter: Dynamic Stability und Driftfaktor eingeführt
- Die Namen der Analogwerte werden jetzt zum Koptertool übertragen
- Kompatibilität zum Koptertool erhöht
 
V0.67f H.Buss 04.12.2007
- Giersteuerwert im Mischer auf Gas/2 begrenzt
- Die Analogwerte des ACC-Sensors können dauerhaft im EEPROM gespeichert werden
- Das Integral des Hauptreglers wird jetzt linear entladen und nicht mehr proportional
v0.90b G.Logemann 18.12.2007
- serielles steuerung ('C' Kommando) - userParameter2>10 aktiviert die serielle Steuerung
- serielle durchleitung von messages auf die 2. Serielle schnittstelle ('X' commando)
(roboboard Erweiterung)
/Microsoft Robotics Studio/License.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss (Flight Control Source)
// + Copyright (c0 12.2007 Gunter Logemann (serielle steuerung und serial tunnel im Flight Control Source sowie alle
// + MS Robotics Studio und Roboboard bezogenen Komponenten)
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de und gunter@pccon.de)
// + Kontakt bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen oder dei verwendung von SW Componenten fuer eigene komerzielle Projekte jeglicher art
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden. Fuer das Roboboard bzw. allem mit Robtics Service in verbindungstehenden
// + Komonenten muss der Autor Gunter Logemann incl email (gunter@pccon.de) genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Flight control Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig. Fuer dei Software des Roboboards bedarf es einer Genemigung durch Gunter logemann (gunter@pccon.de)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + die serielle Steuerung durch microsoft Robotics Studio, sowie die notwendigen erweiterungen in FC.c und uart.c unterliegt dem
// + copyright von Gunter Logemann (gunter@pccon.de)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Das Roboboard inclusive Hardware und Software unterliegt unterliegt dem
// + copyright von Gunter Logemann (gunter@pccon.de)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + die serielle Steuerung von externen boards (Roboboard) an der 2. Seriellen schnittstelle, sowie die notwendigen erweiterungen in
// + FC.c und uart.c unterliegt unterliegt dem copyright von Gunter Logemann (gunter@pccon.de)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/AssemblyInfo.cs
0,0 → 1,19
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.312
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
using Microsoft.Dss.Core.Attributes;
using System;
using System.Collections.Generic;
using interopservices = System.Runtime.InteropServices;
 
[assembly: ServiceDeclaration(DssServiceDeclaration.ServiceBehavior)]
[assembly: interopservices.ComVisible(false)]
 
 
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Control.bmp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Mk.bmp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Properties/Resources.Designer.cs
0,0 → 1,63
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.312
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
namespace Robotics.RoboBoard.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Robotics.RoboBoard.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Properties/Resources.resx
0,0 → 1,120
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
 
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/AssemblyInfo.cs
0,0 → 1,33
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1433
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
using Microsoft.Dss.Core.Attributes;
using Microsoft.Dss.ServiceModel.Dssp;
using System;
using System.Collections.Generic;
using interopservices = System.Runtime.InteropServices;
#if NET_CF20
 
 
[assembly: ServiceDeclaration(DssServiceDeclaration.Proxy, SourceAssemblyKey="cf.roboboardservice.y2007.m08, version=0.0.0.0, culture=neutral, publickeytoken=7a99" +
"181333b055f6")]
 
#else
 
 
[assembly: ServiceDeclaration(DssServiceDeclaration.Proxy, SourceAssemblyKey="roboboardservice.y2007.m08, version=0.0.0.0, culture=neutral, publickeytoken=7a99" +
"181333b055f6")]
 
#endif
[assembly: System.Security.SecurityTransparentAttribute()]
[assembly: System.Security.AllowPartiallyTrustedCallersAttribute()]
[assembly: interopservices.ComVisible(true)]
 
 
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/Properties/Resources.Designer.cs
0,0 → 1,74
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
namespace Robotics.RoboBoard.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
#if !URT_MINCLR
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
#endif
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Robotics.RoboBoard.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a resource file similar to DssModel.
/// </summary>
internal static string DssModel {
get {
return ResourceManager.GetString("DssModel", resourceCulture);
}
}
}
}
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/Properties/Resources.resx
0,0 → 1,125
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
 
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="DssModel" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\DssModel.dss;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
 
</root>
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/Resources/DssModel.dss
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.csproj
0,0 → 1,140
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<ProductVersion>8.0.50215</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{E105863D-2959-49C5-9D84-E24CDD55444F}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ApplicationIcon>
</ApplicationIcon>
<AssemblyKeyContainerName>
</AssemblyKeyContainerName>
<AssemblyName>RoboBoardService.Y2007.M08.Proxy</AssemblyName>
<RootNamespace>Robotics.RoboBoard</RootNamespace>
<AssemblyOriginatorKeyFile>C:\Microsoft Robotics Studio (1.5)\samples\mrisamples.snk</AssemblyOriginatorKeyFile>
<DefaultClientScript>JScript</DefaultClientScript>
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<SignAssembly>true</SignAssembly>
<OutputType>Library</OutputType>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<StartupObject>
</StartupObject>
<FileUpgradeFlags>
</FileUpgradeFlags>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>C:\Microsoft Robotics Studio (1.5)\bin\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>DEBUG;TRACE;INSTRUMENTED;DSSPROXY</DefineConstants>
<DocumentationFile>RoboBoardService.Y2007.M08.proxy.xml</DocumentationFile>
<DebugSymbols>true</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn>3003</NoWarn>
<Optimize>false</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>1</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>C:\Microsoft Robotics Studio (1.5)\bin\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;INSTRUMENTED;DSSPROXY</DefineConstants>
<DocumentationFile>RoboBoardService.Y2007.M08.proxy.xml</DocumentationFile>
<DebugSymbols>true</DebugSymbols>
<DebugType>pdbonly</DebugType>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn>3003</NoWarn>
<Optimize>false</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>1</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="mscorlib">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="Ccr.Core">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="DssBase">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="System.Windows.Forms">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="DssRuntime.Proxy">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="DssRuntime">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="System">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="System.Drawing">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="Ccr.Adapters.WinForms">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="System.Xml">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
 
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="Robotics.RoboBoard.Proxy.RoboBoardTypes.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<AppDesigner Include="Properties" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\DssModel.dss" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<SubType>Designer</SubType>
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
 
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
<PropertyGroup Condition="'$(DelaySign)'!=''">
<ProxyDelaySign>/delaysign+</ProxyDelaySign>
</PropertyGroup>
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent></PostBuildEvent>
</PropertyGroup>
</Project>
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.csproj.user
0,0 → 1,17
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ReferencePath>c:\microsoft robotics studio (1.5)\bin;c:\windows\microsoft.net\framework\v2.0.50727</ReferencePath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<StartWorkingDirectory>c:\microsoft robotics studio (1.5)</StartWorkingDirectory>
<StartAction>Program</StartAction>
<StartProgram>c:\microsoft robotics studio (1.5)\bin\dsshost.exe</StartProgram>
<StartArguments>-port:50000 -tcpport:50001 -manifest:"../mikrokopter/svc/Projects/Microsoft%20Robotics%20Studio/MSRS%20Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.manifest.xml"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<StartWorkingDirectory>c:\microsoft robotics studio (1.5)</StartWorkingDirectory>
<StartAction>Program</StartAction>
<StartProgram>c:\microsoft robotics studio (1.5)\bin\dsshost.exe</StartProgram>
<StartArguments>-port:50000 -tcpport:50001 -manifest:"../mikrokopter/svc/Projects/Microsoft%20Robotics%20Studio/MSRS%20Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.manifest.xml"</StartArguments>
</PropertyGroup>
</Project>
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.sln
0,0 → 1,19
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoboBoardService.Y2007.M08.proxy", "RoboBoardService.Y2007.M08.proxy.csproj", "{E105863D-2959-49C5-9D84-E24CDD55444F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E105863D-2959-49C5-9D84-E24CDD55444F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E105863D-2959-49C5-9D84-E24CDD55444F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E105863D-2959-49C5-9D84-E24CDD55444F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E105863D-2959-49C5-9D84-E24CDD55444F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.xml
0,0 → 1,760
<?xml version="1.0"?>
<doc>
<assembly>
<name>RoboBoardService.Y2007.M08.Proxy</name>
</assembly>
<members>
<member name="T:Robotics.RoboBoard.Proxy.Contract">
<summary>
RoboBoard Contract
</summary>
</member>
<member name="F:Robotics.RoboBoard.Proxy.Contract.Identifier">
The Unique Contract Identifier for the RoboBoard service
</member>
<member name="M:Robotics.RoboBoard.Proxy.Contract.ServiceModel">
The Dss Service dssModel Contract(s)
</member>
<member name="M:Robotics.RoboBoard.Proxy.Contract.CreateService(Microsoft.Dss.Services.Constructor.ConstructorPort,Microsoft.Dss.ServiceModel.Dssp.PartnerType[])">
<summary>
Creates an instance of the service associated with this contract
</summary>
<param name="contructorServicePort">Contractor Service that will create the instance</param>
<param name="partners">Optional list of service partners for new service instance</param>
<returns>Result PortSet for retrieving service creation response</returns>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Contract.CreateService(Microsoft.Dss.Services.Constructor.ConstructorPort)">
<summary>
Creates an instance of the service associated with this contract
</summary>
<param name="contructorServicePort">Contractor Service that will create the instance</param>
<returns>Result PortSet for retrieving service creation response</returns>
</member>
<member name="T:Robotics.RoboBoard.Proxy.RoboBoardState">
<summary>
Robo Board State
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardState.CopyTo(Microsoft.Dss.Core.IDssSerializable)">
<summary>
Copy To Robo Board State
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardState.Clone">
<summary>
Clone Robo Board State
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardState.Serialize(System.IO.BinaryWriter)">
<summary>
Serialize Serialize
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardState.Deserialize(System.IO.BinaryReader)">
<summary>
Deserialize Deserialize
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.RoboBoardState.ComPort">
<summary>
Com Port
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.SetComPortRequest">
<summary>
Set Com Port Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetComPortRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)">
<summary>
Copy To Set Com Port Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetComPortRequest.Clone">
<summary>
Clone Set Com Port Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetComPortRequest.Serialize(System.IO.BinaryWriter)">
<summary>
Serialize Serialize
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetComPortRequest.Deserialize(System.IO.BinaryReader)">
<summary>
Deserialize Deserialize
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.SetComPortRequest.PortName">
<summary>
Port Name
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.ReceiveCommandRequest">
<summary>
Receive Command Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommandRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)">
<summary>
Copy To Receive Command Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommandRequest.Clone">
<summary>
Clone Receive Command Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommandRequest.Serialize(System.IO.BinaryWriter)">
<summary>
Serialize Serialize
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommandRequest.Deserialize(System.IO.BinaryReader)">
<summary>
Deserialize Deserialize
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.ReceiveCommandRequest.Command">
<summary>
Command
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.SendCommandRequest">
<summary>
Send Command Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SendCommandRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)">
<summary>
Copy To Send Command Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SendCommandRequest.Clone">
<summary>
Clone Send Command Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SendCommandRequest.Serialize(System.IO.BinaryWriter)">
<summary>
Serialize Serialize
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SendCommandRequest.Deserialize(System.IO.BinaryReader)">
<summary>
Deserialize Deserialize
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.SendCommandRequest.Command">
<summary>
Command
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.LevelRequest">
<summary>
Level Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.LevelRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)">
<summary>
Copy To Level Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.LevelRequest.Clone">
<summary>
Clone Level Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.LevelRequest.Serialize(System.IO.BinaryWriter)">
<summary>
Serialize Serialize
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.LevelRequest.Deserialize(System.IO.BinaryReader)">
<summary>
Deserialize Deserialize
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.LevelRequest.Roll">
<summary>
Roll
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.LevelRequest.Nick">
<summary>
Nick
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.ControlRequest">
<summary>
Control Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ControlRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)">
<summary>
Copy To Control Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ControlRequest.Clone">
<summary>
Clone Control Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ControlRequest.Serialize(System.IO.BinaryWriter)">
<summary>
Serialize Serialize
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ControlRequest.Deserialize(System.IO.BinaryReader)">
<summary>
Deserialize Deserialize
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.ControlRequest.Roll">
<summary>
Roll
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.ControlRequest.Nick">
<summary>
Nick
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.SetAltituteRequest">
<summary>
Set Altitute Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetAltituteRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)">
<summary>
Copy To Set Altitute Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetAltituteRequest.Clone">
<summary>
Clone Set Altitute Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetAltituteRequest.Serialize(System.IO.BinaryWriter)">
<summary>
Serialize Serialize
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetAltituteRequest.Deserialize(System.IO.BinaryReader)">
<summary>
Deserialize Deserialize
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.SetAltituteRequest.Altitute">
<summary>
Altitute
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.SetGasRequest">
<summary>
Set Gas Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGasRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)">
<summary>
Copy To Set Gas Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGasRequest.Clone">
<summary>
Clone Set Gas Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGasRequest.Serialize(System.IO.BinaryWriter)">
<summary>
Serialize Serialize
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGasRequest.Deserialize(System.IO.BinaryReader)">
<summary>
Deserialize Deserialize
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.SetGasRequest.Gas">
<summary>
Gas
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.SetGierRequest">
<summary>
Set Gier Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGierRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)">
<summary>
Copy To Set Gier Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGierRequest.Clone">
<summary>
Clone Set Gier Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGierRequest.Serialize(System.IO.BinaryWriter)">
<summary>
Serialize Serialize
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGierRequest.Deserialize(System.IO.BinaryReader)">
<summary>
Deserialize Deserialize
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.SetGierRequest.Gier">
<summary>
Gier
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.IncrementTickRequest">
<summary>
Increment Tick Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.IncrementTickRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)">
<summary>
Copy To Increment Tick Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.IncrementTickRequest.Clone">
<summary>
Clone Increment Tick Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.IncrementTickRequest.Serialize(System.IO.BinaryWriter)">
<summary>
Serialize Serialize
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.IncrementTickRequest.Deserialize(System.IO.BinaryReader)">
<summary>
Deserialize Deserialize
</summary>
</member>
<member name="P:Robotics.RoboBoard.Proxy.IncrementTickRequest.Command">
<summary>
Command
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.RoboBoardOperations">
<summary>
Robo Board Operations
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.DsspDefaultLookup">
<summary>
Required Lookup request body type
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.DsspDefaultLookup(Microsoft.Dss.ServiceModel.Dssp.LookupRequestType)">
<summary>
Post Dssp Default Lookup and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.DsspDefaultDrop">
<summary>
A request to drop the service.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.DsspDefaultDrop(Microsoft.Dss.ServiceModel.Dssp.DropRequestType)">
<summary>
Post Dssp Default Drop and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Get">
<summary>
Required Get body type
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType)">
<summary>
Post Get and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.HttpGet">
<summary>
DsspHttp Get request body
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.HttpGet(Microsoft.Dss.Core.DsspHttp.HttpGetRequestType)">
<summary>
Post Http Get and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Replace">
<summary>
Robo Board State
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Replace(Robotics.RoboBoard.Proxy.RoboBoardState)">
<summary>
Post Replace and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetComPort">
<summary>
Set Com Port Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetComPort(Robotics.RoboBoard.Proxy.SetComPortRequest)">
<summary>
Post Set Com Port and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.ReceiveCommand">
<summary>
Receive Command Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.ReceiveCommand(Robotics.RoboBoard.Proxy.ReceiveCommandRequest)">
<summary>
Post Receive Command and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SendCommand">
<summary>
Send Command Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SendCommand(Robotics.RoboBoard.Proxy.SendCommandRequest)">
<summary>
Post Send Command and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Level">
<summary>
Level Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Level(Robotics.RoboBoard.Proxy.LevelRequest)">
<summary>
Post Level and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Control">
<summary>
Control Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Control(Robotics.RoboBoard.Proxy.ControlRequest)">
<summary>
Post Control and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetAltitute">
<summary>
Set Altitute Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetAltitute(Robotics.RoboBoard.Proxy.SetAltituteRequest)">
<summary>
Post Set Altitute and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetGas">
<summary>
Set Gas Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetGas(Robotics.RoboBoard.Proxy.SetGasRequest)">
<summary>
Post Set Gas and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetGier">
<summary>
Set Gier Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetGier(Robotics.RoboBoard.Proxy.SetGierRequest)">
<summary>
Post Set Gier and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.IncrementTick">
<summary>
Increment Tick Request
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.IncrementTick(Robotics.RoboBoard.Proxy.IncrementTickRequest)">
<summary>
Post Increment Tick and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Subscribe(Microsoft.Ccr.Core.IPort)">
<summary>
Post Subscribe and return the response port.
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Subscribe(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType,Microsoft.Ccr.Core.IPort)">
<summary>
Post Subscribe and return the response port.
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.Get">
<summary>
Get
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Get.#ctor">
<summary>
Get
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Get.#ctor(Microsoft.Dss.ServiceModel.Dssp.GetRequestType)">
<summary>
Get
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Get.#ctor(Microsoft.Dss.ServiceModel.Dssp.GetRequestType,Microsoft.Ccr.Core.PortSet{Robotics.RoboBoard.Proxy.RoboBoardState,W3C.Soap.Fault})">
<summary>
Get
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.Replace">
<summary>
Replace
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Replace.#ctor">
<summary>
Replace
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Replace.#ctor(Robotics.RoboBoard.Proxy.RoboBoardState)">
<summary>
Replace
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Replace.#ctor(Robotics.RoboBoard.Proxy.RoboBoardState,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultReplaceResponseType,W3C.Soap.Fault})">
<summary>
Replace
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.SetComPort">
<summary>
Set Com Port
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetComPort.#ctor">
<summary>
Set Com Port
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetComPort.#ctor(Robotics.RoboBoard.Proxy.SetComPortRequest)">
<summary>
Set Com Port
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetComPort.#ctor(Robotics.RoboBoard.Proxy.SetComPortRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})">
<summary>
Set Com Port
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.ReceiveCommand">
<summary>
Receive Command
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommand.#ctor">
<summary>
Receive Command
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommand.#ctor(Robotics.RoboBoard.Proxy.ReceiveCommandRequest)">
<summary>
Receive Command
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommand.#ctor(Robotics.RoboBoard.Proxy.ReceiveCommandRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})">
<summary>
Receive Command
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.SendCommand">
<summary>
Send Command
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SendCommand.#ctor">
<summary>
Send Command
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SendCommand.#ctor(Robotics.RoboBoard.Proxy.SendCommandRequest)">
<summary>
Send Command
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SendCommand.#ctor(Robotics.RoboBoard.Proxy.SendCommandRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})">
<summary>
Send Command
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.Level">
<summary>
Level
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Level.#ctor">
<summary>
Level
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Level.#ctor(Robotics.RoboBoard.Proxy.LevelRequest)">
<summary>
Level
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Level.#ctor(Robotics.RoboBoard.Proxy.LevelRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})">
<summary>
Level
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.Control">
<summary>
Control
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Control.#ctor">
<summary>
Control
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Control.#ctor(Robotics.RoboBoard.Proxy.ControlRequest)">
<summary>
Control
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Control.#ctor(Robotics.RoboBoard.Proxy.ControlRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})">
<summary>
Control
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.SetAltitute">
<summary>
Set Altitute
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetAltitute.#ctor">
<summary>
Set Altitute
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetAltitute.#ctor(Robotics.RoboBoard.Proxy.SetAltituteRequest)">
<summary>
Set Altitute
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetAltitute.#ctor(Robotics.RoboBoard.Proxy.SetAltituteRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})">
<summary>
Set Altitute
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.SetGas">
<summary>
Set Gas
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGas.#ctor">
<summary>
Set Gas
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGas.#ctor(Robotics.RoboBoard.Proxy.SetGasRequest)">
<summary>
Set Gas
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGas.#ctor(Robotics.RoboBoard.Proxy.SetGasRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})">
<summary>
Set Gas
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.SetGier">
<summary>
Set Gier
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGier.#ctor">
<summary>
Set Gier
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGier.#ctor(Robotics.RoboBoard.Proxy.SetGierRequest)">
<summary>
Set Gier
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.SetGier.#ctor(Robotics.RoboBoard.Proxy.SetGierRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})">
<summary>
Set Gier
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.IncrementTick">
<summary>
Increment Tick
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.IncrementTick.#ctor">
<summary>
Increment Tick
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.IncrementTick.#ctor(Robotics.RoboBoard.Proxy.IncrementTickRequest)">
<summary>
Increment Tick
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.IncrementTick.#ctor(Robotics.RoboBoard.Proxy.IncrementTickRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})">
<summary>
Increment Tick
</summary>
</member>
<member name="T:Robotics.RoboBoard.Proxy.Subscribe">
<summary>
Subscribe
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Subscribe.#ctor">
<summary>
Subscribe
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Subscribe.#ctor(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType)">
<summary>
Subscribe
</summary>
</member>
<member name="M:Robotics.RoboBoard.Proxy.Subscribe.#ctor(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.SubscribeResponseType,W3C.Soap.Fault})">
<summary>
Subscribe
</summary>
</member>
<member name="T:Robotics.RoboBoard.Properties.Resources">
<summary>
A strongly-typed resource class, for looking up localized strings, etc.
</summary>
</member>
<member name="P:Robotics.RoboBoard.Properties.Resources.ResourceManager">
<summary>
Returns the cached ResourceManager instance used by this class.
</summary>
</member>
<member name="P:Robotics.RoboBoard.Properties.Resources.Culture">
<summary>
Overrides the current thread's CurrentUICulture property for all
resource lookups using this strongly typed resource class.
</summary>
</member>
<member name="P:Robotics.RoboBoard.Properties.Resources.DssModel">
<summary>
Looks up a resource file similar to DssModel.
</summary>
</member>
</members>
</doc>
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/Robotics.RoboBoard.Proxy.RoboBoardTypes.cs
0,0 → 1,1638
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1433
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
using Microsoft.Ccr.Core;
using Microsoft.Dss.Core;
using Microsoft.Dss.Core.Attributes;
using Microsoft.Dss.ServiceModel.Dssp;
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using W3C.Soap;
using compression = System.IO.Compression;
using constructor = Microsoft.Dss.Services.Constructor;
using contractmanager = Microsoft.Dss.Services.ContractManager;
using contractmodel = Microsoft.Dss.Services.ContractModel;
using dssphttp = Microsoft.Dss.Core.DsspHttp;
using io = System.IO;
using pxroboboard = Robotics.RoboBoard.Proxy;
using reflection = System.Reflection;
 
 
namespace Robotics.RoboBoard.Proxy
{
/// <summary>
/// RoboBoard Contract
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public sealed class Contract
{
/// The Unique Contract Identifier for the RoboBoard service
public const String Identifier = "http://schemas.tempuri.org/2007/08/roboboardservice.html";
/// The Dss Service dssModel Contract(s)
public static List<contractmodel.ServiceSummary> ServiceModel()
{
contractmanager.ServiceSummaryLoader loader = new contractmanager.ServiceSummaryLoader();
return loader.GetServiceSummaries(typeof(Contract).Assembly);
 
}
/// <summary>
/// Creates an instance of the service associated with this contract
/// </summary>
/// <param name="contructorServicePort">Contractor Service that will create the instance</param>
/// <param name="partners">Optional list of service partners for new service instance</param>
/// <returns>Result PortSet for retrieving service creation response</returns>
public static DsspResponsePort<CreateResponse> CreateService(constructor.ConstructorPort contructorServicePort, params PartnerType[] partners)
{
DsspResponsePort<CreateResponse> result = new DsspResponsePort<CreateResponse>();
ServiceInfoType si = new ServiceInfoType(Contract.Identifier, null);
if (partners != null)
{
si.PartnerList = new List<PartnerType>(partners);
}
Microsoft.Dss.Services.Constructor.Create create =
new Microsoft.Dss.Services.Constructor.Create(si, result);
contructorServicePort.Post(create);
return result;
 
}
/// <summary>
/// Creates an instance of the service associated with this contract
/// </summary>
/// <param name="contructorServicePort">Contractor Service that will create the instance</param>
/// <returns>Result PortSet for retrieving service creation response</returns>
public static DsspResponsePort<CreateResponse> CreateService(constructor.ConstructorPort contructorServicePort)
{
return Contract.CreateService(contructorServicePort, null);
}
}
/// <summary>
/// Robo Board State
/// </summary>
[DataContract()]
[XmlRootAttribute("RoboBoardState", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")]
public class RoboBoardState : ICloneable, IDssSerializable
{
private String _comPort;
/// <summary>
/// Com Port
/// </summary>
[DataMember()]
public String ComPort
{
get
{
return this._comPort;
}
set
{
this._comPort = value;
}
}
/// <summary>
/// Copy To Robo Board State
/// </summary>
public virtual void CopyTo(IDssSerializable target)
{
RoboBoardState typedTarget = target as RoboBoardState;
 
if (typedTarget == null)
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName);
typedTarget.ComPort = this.ComPort;
}
/// <summary>
/// Clone Robo Board State
/// </summary>
public virtual object Clone()
{
RoboBoardState target = new RoboBoardState();
 
target.ComPort = this.ComPort;
return target;
 
}
/// <summary>
/// Serialize Serialize
/// </summary>
public virtual void Serialize(System.IO.BinaryWriter writer)
{
if (ComPort == null) writer.Write((byte)0);
else
{
// null flag
writer.Write((byte)1);
 
writer.Write(ComPort);
}
 
}
/// <summary>
/// Deserialize Deserialize
/// </summary>
public virtual object Deserialize(System.IO.BinaryReader reader)
{
if (reader.ReadByte() == 0) {}
else
{
ComPort = reader.ReadString();
} //nullable
 
return this;
 
}
}
/// <summary>
/// Set Com Port Request
/// </summary>
[DataContract()]
[XmlRootAttribute("SetComPortRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")]
public class SetComPortRequest : ICloneable, IDssSerializable
{
private String _portName;
/// <summary>
/// Port Name
/// </summary>
[DataMember()]
public String PortName
{
get
{
return this._portName;
}
set
{
this._portName = value;
}
}
/// <summary>
/// Copy To Set Com Port Request
/// </summary>
public virtual void CopyTo(IDssSerializable target)
{
SetComPortRequest typedTarget = target as SetComPortRequest;
 
if (typedTarget == null)
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName);
typedTarget.PortName = this.PortName;
}
/// <summary>
/// Clone Set Com Port Request
/// </summary>
public virtual object Clone()
{
SetComPortRequest target = new SetComPortRequest();
 
target.PortName = this.PortName;
return target;
 
}
/// <summary>
/// Serialize Serialize
/// </summary>
public virtual void Serialize(System.IO.BinaryWriter writer)
{
if (PortName == null) writer.Write((byte)0);
else
{
// null flag
writer.Write((byte)1);
 
writer.Write(PortName);
}
 
}
/// <summary>
/// Deserialize Deserialize
/// </summary>
public virtual object Deserialize(System.IO.BinaryReader reader)
{
if (reader.ReadByte() == 0) {}
else
{
PortName = reader.ReadString();
} //nullable
 
return this;
 
}
}
/// <summary>
/// Receive Command Request
/// </summary>
[DataContract()]
[XmlRootAttribute("ReceiveCommandRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")]
public class ReceiveCommandRequest : ICloneable, IDssSerializable
{
private String _command;
/// <summary>
/// Command
/// </summary>
[DataMember()]
public String Command
{
get
{
return this._command;
}
set
{
this._command = value;
}
}
/// <summary>
/// Copy To Receive Command Request
/// </summary>
public virtual void CopyTo(IDssSerializable target)
{
ReceiveCommandRequest typedTarget = target as ReceiveCommandRequest;
 
if (typedTarget == null)
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName);
typedTarget.Command = this.Command;
}
/// <summary>
/// Clone Receive Command Request
/// </summary>
public virtual object Clone()
{
ReceiveCommandRequest target = new ReceiveCommandRequest();
 
target.Command = this.Command;
return target;
 
}
/// <summary>
/// Serialize Serialize
/// </summary>
public virtual void Serialize(System.IO.BinaryWriter writer)
{
if (Command == null) writer.Write((byte)0);
else
{
// null flag
writer.Write((byte)1);
 
writer.Write(Command);
}
 
}
/// <summary>
/// Deserialize Deserialize
/// </summary>
public virtual object Deserialize(System.IO.BinaryReader reader)
{
if (reader.ReadByte() == 0) {}
else
{
Command = reader.ReadString();
} //nullable
 
return this;
 
}
}
/// <summary>
/// Send Command Request
/// </summary>
[DataContract()]
[XmlRootAttribute("SendCommandRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")]
public class SendCommandRequest : ICloneable, IDssSerializable
{
private String _command;
/// <summary>
/// Command
/// </summary>
[DataMember()]
public String Command
{
get
{
return this._command;
}
set
{
this._command = value;
}
}
/// <summary>
/// Copy To Send Command Request
/// </summary>
public virtual void CopyTo(IDssSerializable target)
{
SendCommandRequest typedTarget = target as SendCommandRequest;
 
if (typedTarget == null)
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName);
typedTarget.Command = this.Command;
}
/// <summary>
/// Clone Send Command Request
/// </summary>
public virtual object Clone()
{
SendCommandRequest target = new SendCommandRequest();
 
target.Command = this.Command;
return target;
 
}
/// <summary>
/// Serialize Serialize
/// </summary>
public virtual void Serialize(System.IO.BinaryWriter writer)
{
if (Command == null) writer.Write((byte)0);
else
{
// null flag
writer.Write((byte)1);
 
writer.Write(Command);
}
 
}
/// <summary>
/// Deserialize Deserialize
/// </summary>
public virtual object Deserialize(System.IO.BinaryReader reader)
{
if (reader.ReadByte() == 0) {}
else
{
Command = reader.ReadString();
} //nullable
 
return this;
 
}
}
/// <summary>
/// Level Request
/// </summary>
[DataContract()]
[XmlRootAttribute("LevelRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")]
public class LevelRequest : ICloneable, IDssSerializable
{
private Int32 _roll;
private Int32 _nick;
/// <summary>
/// Roll
/// </summary>
[DataMember()]
public Int32 Roll
{
get
{
return this._roll;
}
set
{
this._roll = value;
}
}
/// <summary>
/// Nick
/// </summary>
[DataMember()]
public Int32 Nick
{
get
{
return this._nick;
}
set
{
this._nick = value;
}
}
/// <summary>
/// Copy To Level Request
/// </summary>
public virtual void CopyTo(IDssSerializable target)
{
LevelRequest typedTarget = target as LevelRequest;
 
if (typedTarget == null)
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName);
typedTarget.Roll = this.Roll;
typedTarget.Nick = this.Nick;
}
/// <summary>
/// Clone Level Request
/// </summary>
public virtual object Clone()
{
LevelRequest target = new LevelRequest();
 
target.Roll = this.Roll;
target.Nick = this.Nick;
return target;
 
}
/// <summary>
/// Serialize Serialize
/// </summary>
public virtual void Serialize(System.IO.BinaryWriter writer)
{
writer.Write(Roll);
 
writer.Write(Nick);
 
}
/// <summary>
/// Deserialize Deserialize
/// </summary>
public virtual object Deserialize(System.IO.BinaryReader reader)
{
Roll = reader.ReadInt32();
 
Nick = reader.ReadInt32();
 
return this;
 
}
}
/// <summary>
/// Control Request
/// </summary>
[DataContract()]
[XmlRootAttribute("ControlRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")]
public class ControlRequest : ICloneable, IDssSerializable
{
private Single _roll;
private Single _nick;
/// <summary>
/// Roll
/// </summary>
[DataMember()]
public Single Roll
{
get
{
return this._roll;
}
set
{
this._roll = value;
}
}
/// <summary>
/// Nick
/// </summary>
[DataMember()]
public Single Nick
{
get
{
return this._nick;
}
set
{
this._nick = value;
}
}
/// <summary>
/// Copy To Control Request
/// </summary>
public virtual void CopyTo(IDssSerializable target)
{
ControlRequest typedTarget = target as ControlRequest;
 
if (typedTarget == null)
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName);
typedTarget.Roll = this.Roll;
typedTarget.Nick = this.Nick;
}
/// <summary>
/// Clone Control Request
/// </summary>
public virtual object Clone()
{
ControlRequest target = new ControlRequest();
 
target.Roll = this.Roll;
target.Nick = this.Nick;
return target;
 
}
/// <summary>
/// Serialize Serialize
/// </summary>
public virtual void Serialize(System.IO.BinaryWriter writer)
{
writer.Write(Roll);
 
writer.Write(Nick);
 
}
/// <summary>
/// Deserialize Deserialize
/// </summary>
public virtual object Deserialize(System.IO.BinaryReader reader)
{
Roll = reader.ReadSingle();
 
Nick = reader.ReadSingle();
 
return this;
 
}
}
/// <summary>
/// Set Altitute Request
/// </summary>
[DataContract()]
[XmlRootAttribute("SetAltituteRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")]
public class SetAltituteRequest : ICloneable, IDssSerializable
{
private Single _altitute;
/// <summary>
/// Altitute
/// </summary>
[DataMember()]
public Single Altitute
{
get
{
return this._altitute;
}
set
{
this._altitute = value;
}
}
/// <summary>
/// Copy To Set Altitute Request
/// </summary>
public virtual void CopyTo(IDssSerializable target)
{
SetAltituteRequest typedTarget = target as SetAltituteRequest;
 
if (typedTarget == null)
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName);
typedTarget.Altitute = this.Altitute;
}
/// <summary>
/// Clone Set Altitute Request
/// </summary>
public virtual object Clone()
{
SetAltituteRequest target = new SetAltituteRequest();
 
target.Altitute = this.Altitute;
return target;
 
}
/// <summary>
/// Serialize Serialize
/// </summary>
public virtual void Serialize(System.IO.BinaryWriter writer)
{
writer.Write(Altitute);
 
}
/// <summary>
/// Deserialize Deserialize
/// </summary>
public virtual object Deserialize(System.IO.BinaryReader reader)
{
Altitute = reader.ReadSingle();
 
return this;
 
}
}
/// <summary>
/// Set Gas Request
/// </summary>
[DataContract()]
[XmlRootAttribute("SetGasRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")]
public class SetGasRequest : ICloneable, IDssSerializable
{
private Single _gas;
/// <summary>
/// Gas
/// </summary>
[DataMember()]
public Single Gas
{
get
{
return this._gas;
}
set
{
this._gas = value;
}
}
/// <summary>
/// Copy To Set Gas Request
/// </summary>
public virtual void CopyTo(IDssSerializable target)
{
SetGasRequest typedTarget = target as SetGasRequest;
 
if (typedTarget == null)
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName);
typedTarget.Gas = this.Gas;
}
/// <summary>
/// Clone Set Gas Request
/// </summary>
public virtual object Clone()
{
SetGasRequest target = new SetGasRequest();
 
target.Gas = this.Gas;
return target;
 
}
/// <summary>
/// Serialize Serialize
/// </summary>
public virtual void Serialize(System.IO.BinaryWriter writer)
{
writer.Write(Gas);
 
}
/// <summary>
/// Deserialize Deserialize
/// </summary>
public virtual object Deserialize(System.IO.BinaryReader reader)
{
Gas = reader.ReadSingle();
 
return this;
 
}
}
/// <summary>
/// Set Gier Request
/// </summary>
[DataContract()]
[XmlRootAttribute("SetGierRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")]
public class SetGierRequest : ICloneable, IDssSerializable
{
private Single _gier;
/// <summary>
/// Gier
/// </summary>
[DataMember()]
public Single Gier
{
get
{
return this._gier;
}
set
{
this._gier = value;
}
}
/// <summary>
/// Copy To Set Gier Request
/// </summary>
public virtual void CopyTo(IDssSerializable target)
{
SetGierRequest typedTarget = target as SetGierRequest;
 
if (typedTarget == null)
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName);
typedTarget.Gier = this.Gier;
}
/// <summary>
/// Clone Set Gier Request
/// </summary>
public virtual object Clone()
{
SetGierRequest target = new SetGierRequest();
 
target.Gier = this.Gier;
return target;
 
}
/// <summary>
/// Serialize Serialize
/// </summary>
public virtual void Serialize(System.IO.BinaryWriter writer)
{
writer.Write(Gier);
 
}
/// <summary>
/// Deserialize Deserialize
/// </summary>
public virtual object Deserialize(System.IO.BinaryReader reader)
{
Gier = reader.ReadSingle();
 
return this;
 
}
}
/// <summary>
/// Increment Tick Request
/// </summary>
[DataContract()]
[XmlRootAttribute("IncrementTickRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")]
public class IncrementTickRequest : ICloneable, IDssSerializable
{
private String _command;
/// <summary>
/// Command
/// </summary>
[DataMember()]
public String Command
{
get
{
return this._command;
}
set
{
this._command = value;
}
}
/// <summary>
/// Copy To Increment Tick Request
/// </summary>
public virtual void CopyTo(IDssSerializable target)
{
IncrementTickRequest typedTarget = target as IncrementTickRequest;
 
if (typedTarget == null)
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName);
typedTarget.Command = this.Command;
}
/// <summary>
/// Clone Increment Tick Request
/// </summary>
public virtual object Clone()
{
IncrementTickRequest target = new IncrementTickRequest();
 
target.Command = this.Command;
return target;
 
}
/// <summary>
/// Serialize Serialize
/// </summary>
public virtual void Serialize(System.IO.BinaryWriter writer)
{
if (Command == null) writer.Write((byte)0);
else
{
// null flag
writer.Write((byte)1);
 
writer.Write(Command);
}
 
}
/// <summary>
/// Deserialize Deserialize
/// </summary>
public virtual object Deserialize(System.IO.BinaryReader reader)
{
if (reader.ReadByte() == 0) {}
else
{
Command = reader.ReadString();
} //nullable
 
return this;
 
}
}
/// <summary>
/// Robo Board Operations
/// </summary>
[ServicePort()]
[XmlTypeAttribute(IncludeInSchema=false)]
public class RoboBoardOperations : PortSet<Microsoft.Dss.ServiceModel.Dssp.DsspDefaultLookup, Microsoft.Dss.ServiceModel.Dssp.DsspDefaultDrop, Get, dssphttp.HttpGet, Replace, SetComPort, ReceiveCommand, SendCommand, Level, Control, SetAltitute, SetGas, SetGier, IncrementTick, Subscribe>
{
/// <summary>
/// Required Lookup request body type
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.LookupResponse,Fault> DsspDefaultLookup()
{
Microsoft.Dss.ServiceModel.Dssp.LookupRequestType body = new Microsoft.Dss.ServiceModel.Dssp.LookupRequestType();
Microsoft.Dss.ServiceModel.Dssp.DsspDefaultLookup op = new Microsoft.Dss.ServiceModel.Dssp.DsspDefaultLookup(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Dssp Default Lookup and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.LookupResponse,Fault> DsspDefaultLookup(Microsoft.Dss.ServiceModel.Dssp.LookupRequestType body)
{
Microsoft.Dss.ServiceModel.Dssp.DsspDefaultLookup op = new Microsoft.Dss.ServiceModel.Dssp.DsspDefaultLookup();
op.Body = body ?? new Microsoft.Dss.ServiceModel.Dssp.LookupRequestType();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// A request to drop the service.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultDropResponseType,Fault> DsspDefaultDrop()
{
Microsoft.Dss.ServiceModel.Dssp.DropRequestType body = new Microsoft.Dss.ServiceModel.Dssp.DropRequestType();
Microsoft.Dss.ServiceModel.Dssp.DsspDefaultDrop op = new Microsoft.Dss.ServiceModel.Dssp.DsspDefaultDrop(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Dssp Default Drop and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultDropResponseType,Fault> DsspDefaultDrop(Microsoft.Dss.ServiceModel.Dssp.DropRequestType body)
{
Microsoft.Dss.ServiceModel.Dssp.DsspDefaultDrop op = new Microsoft.Dss.ServiceModel.Dssp.DsspDefaultDrop();
op.Body = body ?? new Microsoft.Dss.ServiceModel.Dssp.DropRequestType();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Required Get body type
/// </summary>
public virtual PortSet<RoboBoardState,Fault> Get()
{
Microsoft.Dss.ServiceModel.Dssp.GetRequestType body = new Microsoft.Dss.ServiceModel.Dssp.GetRequestType();
Get op = new Get(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Get and return the response port.
/// </summary>
public virtual PortSet<RoboBoardState,Fault> Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType body)
{
Get op = new Get();
op.Body = body ?? new Microsoft.Dss.ServiceModel.Dssp.GetRequestType();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// DsspHttp Get request body
/// </summary>
public virtual PortSet<dssphttp.HttpResponseType,Fault> HttpGet()
{
dssphttp.HttpGetRequestType body = new dssphttp.HttpGetRequestType();
dssphttp.HttpGet op = new dssphttp.HttpGet(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Http Get and return the response port.
/// </summary>
public virtual PortSet<dssphttp.HttpResponseType,Fault> HttpGet(dssphttp.HttpGetRequestType body)
{
dssphttp.HttpGet op = new dssphttp.HttpGet();
op.Body = body ?? new dssphttp.HttpGetRequestType();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Robo Board State
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultReplaceResponseType,Fault> Replace()
{
RoboBoardState body = new RoboBoardState();
Replace op = new Replace(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Replace and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultReplaceResponseType,Fault> Replace(RoboBoardState body)
{
Replace op = new Replace();
op.Body = body ?? new RoboBoardState();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Set Com Port Request
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetComPort()
{
SetComPortRequest body = new SetComPortRequest();
SetComPort op = new SetComPort(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Set Com Port and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetComPort(SetComPortRequest body)
{
SetComPort op = new SetComPort();
op.Body = body ?? new SetComPortRequest();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Receive Command Request
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> ReceiveCommand()
{
ReceiveCommandRequest body = new ReceiveCommandRequest();
ReceiveCommand op = new ReceiveCommand(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Receive Command and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> ReceiveCommand(ReceiveCommandRequest body)
{
ReceiveCommand op = new ReceiveCommand();
op.Body = body ?? new ReceiveCommandRequest();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Send Command Request
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SendCommand()
{
SendCommandRequest body = new SendCommandRequest();
SendCommand op = new SendCommand(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Send Command and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SendCommand(SendCommandRequest body)
{
SendCommand op = new SendCommand();
op.Body = body ?? new SendCommandRequest();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Level Request
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> Level()
{
LevelRequest body = new LevelRequest();
Level op = new Level(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Level and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> Level(LevelRequest body)
{
Level op = new Level();
op.Body = body ?? new LevelRequest();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Control Request
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> Control()
{
ControlRequest body = new ControlRequest();
Control op = new Control(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Control and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> Control(ControlRequest body)
{
Control op = new Control();
op.Body = body ?? new ControlRequest();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Set Altitute Request
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetAltitute()
{
SetAltituteRequest body = new SetAltituteRequest();
SetAltitute op = new SetAltitute(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Set Altitute and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetAltitute(SetAltituteRequest body)
{
SetAltitute op = new SetAltitute();
op.Body = body ?? new SetAltituteRequest();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Set Gas Request
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetGas()
{
SetGasRequest body = new SetGasRequest();
SetGas op = new SetGas(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Set Gas and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetGas(SetGasRequest body)
{
SetGas op = new SetGas();
op.Body = body ?? new SetGasRequest();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Set Gier Request
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetGier()
{
SetGierRequest body = new SetGierRequest();
SetGier op = new SetGier(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Set Gier and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetGier(SetGierRequest body)
{
SetGier op = new SetGier();
op.Body = body ?? new SetGierRequest();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Increment Tick Request
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> IncrementTick()
{
IncrementTickRequest body = new IncrementTickRequest();
IncrementTick op = new IncrementTick(body);
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Increment Tick and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> IncrementTick(IncrementTickRequest body)
{
IncrementTick op = new IncrementTick();
op.Body = body ?? new IncrementTickRequest();
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Subscribe and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.SubscribeResponseType,Fault> Subscribe(IPort notificationPort)
{
Subscribe op = new Subscribe();
op.Body = new Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType();
op.NotificationPort = notificationPort;
this.Post(op);
return op.ResponsePort;
 
}
/// <summary>
/// Post Subscribe and return the response port.
/// </summary>
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.SubscribeResponseType,Fault> Subscribe(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType body, IPort notificationPort)
{
Subscribe op = new Subscribe();
op.Body = body ?? new Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType();
op.NotificationPort = notificationPort;
this.Post(op);
return op.ResponsePort;
 
}
}
/// <summary>
/// Get
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class Get : Microsoft.Dss.ServiceModel.Dssp.Get<Microsoft.Dss.ServiceModel.Dssp.GetRequestType, PortSet<RoboBoardState, Fault>>
{
/// <summary>
/// Get
/// </summary>
public Get()
{
}
/// <summary>
/// Get
/// </summary>
public Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType body) :
base(body)
{
}
/// <summary>
/// Get
/// </summary>
public Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType body, Microsoft.Ccr.Core.PortSet<RoboBoardState,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Replace
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class Replace : Microsoft.Dss.ServiceModel.Dssp.Replace<RoboBoardState, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultReplaceResponseType, Fault>>
{
/// <summary>
/// Replace
/// </summary>
public Replace()
{
}
/// <summary>
/// Replace
/// </summary>
public Replace(RoboBoardState body) :
base(body)
{
}
/// <summary>
/// Replace
/// </summary>
public Replace(RoboBoardState body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultReplaceResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Set Com Port
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class SetComPort : Microsoft.Dss.ServiceModel.Dssp.Update<SetComPortRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>>
{
/// <summary>
/// Set Com Port
/// </summary>
public SetComPort()
{
}
/// <summary>
/// Set Com Port
/// </summary>
public SetComPort(SetComPortRequest body) :
base(body)
{
}
/// <summary>
/// Set Com Port
/// </summary>
public SetComPort(SetComPortRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Receive Command
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class ReceiveCommand : Microsoft.Dss.ServiceModel.Dssp.Update<ReceiveCommandRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>>
{
/// <summary>
/// Receive Command
/// </summary>
public ReceiveCommand()
{
}
/// <summary>
/// Receive Command
/// </summary>
public ReceiveCommand(ReceiveCommandRequest body) :
base(body)
{
}
/// <summary>
/// Receive Command
/// </summary>
public ReceiveCommand(ReceiveCommandRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Send Command
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class SendCommand : Microsoft.Dss.ServiceModel.Dssp.Update<SendCommandRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>>
{
/// <summary>
/// Send Command
/// </summary>
public SendCommand()
{
}
/// <summary>
/// Send Command
/// </summary>
public SendCommand(SendCommandRequest body) :
base(body)
{
}
/// <summary>
/// Send Command
/// </summary>
public SendCommand(SendCommandRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Level
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class Level : Microsoft.Dss.ServiceModel.Dssp.Update<LevelRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>>
{
/// <summary>
/// Level
/// </summary>
public Level()
{
}
/// <summary>
/// Level
/// </summary>
public Level(LevelRequest body) :
base(body)
{
}
/// <summary>
/// Level
/// </summary>
public Level(LevelRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Control
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class Control : Microsoft.Dss.ServiceModel.Dssp.Update<ControlRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>>
{
/// <summary>
/// Control
/// </summary>
public Control()
{
}
/// <summary>
/// Control
/// </summary>
public Control(ControlRequest body) :
base(body)
{
}
/// <summary>
/// Control
/// </summary>
public Control(ControlRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Set Altitute
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class SetAltitute : Microsoft.Dss.ServiceModel.Dssp.Update<SetAltituteRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>>
{
/// <summary>
/// Set Altitute
/// </summary>
public SetAltitute()
{
}
/// <summary>
/// Set Altitute
/// </summary>
public SetAltitute(SetAltituteRequest body) :
base(body)
{
}
/// <summary>
/// Set Altitute
/// </summary>
public SetAltitute(SetAltituteRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Set Gas
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class SetGas : Microsoft.Dss.ServiceModel.Dssp.Update<SetGasRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>>
{
/// <summary>
/// Set Gas
/// </summary>
public SetGas()
{
}
/// <summary>
/// Set Gas
/// </summary>
public SetGas(SetGasRequest body) :
base(body)
{
}
/// <summary>
/// Set Gas
/// </summary>
public SetGas(SetGasRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Set Gier
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class SetGier : Microsoft.Dss.ServiceModel.Dssp.Update<SetGierRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>>
{
/// <summary>
/// Set Gier
/// </summary>
public SetGier()
{
}
/// <summary>
/// Set Gier
/// </summary>
public SetGier(SetGierRequest body) :
base(body)
{
}
/// <summary>
/// Set Gier
/// </summary>
public SetGier(SetGierRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Increment Tick
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class IncrementTick : Microsoft.Dss.ServiceModel.Dssp.Update<IncrementTickRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>>
{
/// <summary>
/// Increment Tick
/// </summary>
public IncrementTick()
{
}
/// <summary>
/// Increment Tick
/// </summary>
public IncrementTick(IncrementTickRequest body) :
base(body)
{
}
/// <summary>
/// Increment Tick
/// </summary>
public IncrementTick(IncrementTickRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
/// <summary>
/// Subscribe
/// </summary>
[XmlTypeAttribute(IncludeInSchema=false)]
public class Subscribe : Microsoft.Dss.ServiceModel.Dssp.Subscribe<Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType, PortSet<Microsoft.Dss.ServiceModel.Dssp.SubscribeResponseType, Fault>>
{
/// <summary>
/// Subscribe
/// </summary>
public Subscribe()
{
}
/// <summary>
/// Subscribe
/// </summary>
public Subscribe(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType body) :
base(body)
{
}
/// <summary>
/// Subscribe
/// </summary>
public Subscribe(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.SubscribeResponseType,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
}
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/ResolveAssemblyReference.cache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/RoboBoardService.Y2007.M08.Proxy.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/RoboBoardService.Y2007.M08.Proxy.pdb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/RoboBoardService.Y2007.M08.proxy.csproj.GenerateResource.Cache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/Robotics.RoboBoard.Properties.Resources.resources
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/Robotics.RoboBoard.Resources.DssModel.dss
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/RoboBoardService.Y2007.M08.proxy.csproj.FileList.txt
0,0 → 1,9
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.Proxy.dll
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.Proxy.pdb
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.proxy.xml
obj\Debug\ResolveAssemblyReference.cache
obj\Debug\Robotics.RoboBoard.Resources.DssModel.dss
obj\Debug\Robotics.RoboBoard.Properties.Resources.resources
obj\Debug\RoboBoardService.Y2007.M08.proxy.csproj.GenerateResource.Cache
obj\Debug\RoboBoardService.Y2007.M08.Proxy.dll
obj\Debug\RoboBoardService.Y2007.M08.Proxy.pdb
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/RoboBoardService.Y2007.M08.proxy.csproj.FileListAbsolute.txt
0,0 → 1,15
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.Proxy.dll
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.Proxy.pdb
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.proxy.xml
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\ResolveAssemblyReference.cache
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\Robotics.RoboBoard.Resources.DssModel.dss
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\Robotics.RoboBoard.Properties.Resources.resources
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.proxy.csproj.GenerateResource.Cache
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.Proxy.dll
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.Proxy.pdb
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\ResolveAssemblyReference.cache
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\Robotics.RoboBoard.Resources.DssModel.dss
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\Robotics.RoboBoard.Properties.Resources.resources
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.proxy.csproj.GenerateResource.Cache
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.Proxy.dll
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.Proxy.pdb
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/roboboardservice.source.transform.cs
0,0 → 1,233
using System;
using Microsoft.Dss.Core.Attributes;
using Microsoft.Dss.Core.Transforms;
 
#if NET_CF20
[assembly: ServiceDeclaration(DssServiceDeclaration.Transform, SourceAssemblyKey = @"cf.roboboardservice.y2007.m08, version=0.0.0.0, culture=neutral, publickeytoken=7a99181333b055f6")]
#else
[assembly: ServiceDeclaration(DssServiceDeclaration.Transform, SourceAssemblyKey = @"roboboardservice.y2007.m08, version=0.0.0.0, culture=neutral, publickeytoken=7a99181333b055f6")]
#endif
#if !URT_MINCLR
[assembly: System.Security.SecurityTransparent]
[assembly: System.Security.AllowPartiallyTrustedCallers]
#endif
 
namespace Dss.Transforms.TransformRoboBoardService
{
 
public class Transforms: TransformBase
{
 
public static object Transform_Robotics_RoboBoard_Proxy_RoboBoardState_TO_Robotics_RoboBoard_RoboBoardState(object transformFrom)
{
Robotics.RoboBoard.RoboBoardState target = new Robotics.RoboBoard.RoboBoardState();
Robotics.RoboBoard.Proxy.RoboBoardState from = transformFrom as Robotics.RoboBoard.Proxy.RoboBoardState;
target.ComPort = from.ComPort;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_RoboBoardState_TO_Robotics_RoboBoard_Proxy_RoboBoardState(object transformFrom)
{
Robotics.RoboBoard.Proxy.RoboBoardState target = new Robotics.RoboBoard.Proxy.RoboBoardState();
Robotics.RoboBoard.RoboBoardState from = transformFrom as Robotics.RoboBoard.RoboBoardState;
target.ComPort = from.ComPort;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_Proxy_SetComPortRequest_TO_Robotics_RoboBoard_SetComPortRequest(object transformFrom)
{
Robotics.RoboBoard.SetComPortRequest target = new Robotics.RoboBoard.SetComPortRequest();
Robotics.RoboBoard.Proxy.SetComPortRequest from = transformFrom as Robotics.RoboBoard.Proxy.SetComPortRequest;
target.PortName = from.PortName;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_SetComPortRequest_TO_Robotics_RoboBoard_Proxy_SetComPortRequest(object transformFrom)
{
Robotics.RoboBoard.Proxy.SetComPortRequest target = new Robotics.RoboBoard.Proxy.SetComPortRequest();
Robotics.RoboBoard.SetComPortRequest from = transformFrom as Robotics.RoboBoard.SetComPortRequest;
target.PortName = from.PortName;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_Proxy_ReceiveCommandRequest_TO_Robotics_RoboBoard_ReceiveCommandRequest(object transformFrom)
{
Robotics.RoboBoard.ReceiveCommandRequest target = new Robotics.RoboBoard.ReceiveCommandRequest();
Robotics.RoboBoard.Proxy.ReceiveCommandRequest from = transformFrom as Robotics.RoboBoard.Proxy.ReceiveCommandRequest;
target.Command = from.Command;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_ReceiveCommandRequest_TO_Robotics_RoboBoard_Proxy_ReceiveCommandRequest(object transformFrom)
{
Robotics.RoboBoard.Proxy.ReceiveCommandRequest target = new Robotics.RoboBoard.Proxy.ReceiveCommandRequest();
Robotics.RoboBoard.ReceiveCommandRequest from = transformFrom as Robotics.RoboBoard.ReceiveCommandRequest;
target.Command = from.Command;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_Proxy_SendCommandRequest_TO_Robotics_RoboBoard_SendCommandRequest(object transformFrom)
{
Robotics.RoboBoard.SendCommandRequest target = new Robotics.RoboBoard.SendCommandRequest();
Robotics.RoboBoard.Proxy.SendCommandRequest from = transformFrom as Robotics.RoboBoard.Proxy.SendCommandRequest;
target.Command = from.Command;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_SendCommandRequest_TO_Robotics_RoboBoard_Proxy_SendCommandRequest(object transformFrom)
{
Robotics.RoboBoard.Proxy.SendCommandRequest target = new Robotics.RoboBoard.Proxy.SendCommandRequest();
Robotics.RoboBoard.SendCommandRequest from = transformFrom as Robotics.RoboBoard.SendCommandRequest;
target.Command = from.Command;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_Proxy_LevelRequest_TO_Robotics_RoboBoard_LevelRequest(object transformFrom)
{
Robotics.RoboBoard.LevelRequest target = new Robotics.RoboBoard.LevelRequest();
Robotics.RoboBoard.Proxy.LevelRequest from = transformFrom as Robotics.RoboBoard.Proxy.LevelRequest;
target.Roll = from.Roll;
target.Nick = from.Nick;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_LevelRequest_TO_Robotics_RoboBoard_Proxy_LevelRequest(object transformFrom)
{
Robotics.RoboBoard.Proxy.LevelRequest target = new Robotics.RoboBoard.Proxy.LevelRequest();
Robotics.RoboBoard.LevelRequest from = transformFrom as Robotics.RoboBoard.LevelRequest;
target.Roll = from.Roll;
target.Nick = from.Nick;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_Proxy_ControlRequest_TO_Robotics_RoboBoard_ControlRequest(object transformFrom)
{
Robotics.RoboBoard.ControlRequest target = new Robotics.RoboBoard.ControlRequest();
Robotics.RoboBoard.Proxy.ControlRequest from = transformFrom as Robotics.RoboBoard.Proxy.ControlRequest;
target.Roll = from.Roll;
target.Nick = from.Nick;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_ControlRequest_TO_Robotics_RoboBoard_Proxy_ControlRequest(object transformFrom)
{
Robotics.RoboBoard.Proxy.ControlRequest target = new Robotics.RoboBoard.Proxy.ControlRequest();
Robotics.RoboBoard.ControlRequest from = transformFrom as Robotics.RoboBoard.ControlRequest;
target.Roll = from.Roll;
target.Nick = from.Nick;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_Proxy_SetAltituteRequest_TO_Robotics_RoboBoard_SetAltituteRequest(object transformFrom)
{
Robotics.RoboBoard.SetAltituteRequest target = new Robotics.RoboBoard.SetAltituteRequest();
Robotics.RoboBoard.Proxy.SetAltituteRequest from = transformFrom as Robotics.RoboBoard.Proxy.SetAltituteRequest;
target.Altitute = from.Altitute;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_SetAltituteRequest_TO_Robotics_RoboBoard_Proxy_SetAltituteRequest(object transformFrom)
{
Robotics.RoboBoard.Proxy.SetAltituteRequest target = new Robotics.RoboBoard.Proxy.SetAltituteRequest();
Robotics.RoboBoard.SetAltituteRequest from = transformFrom as Robotics.RoboBoard.SetAltituteRequest;
target.Altitute = from.Altitute;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_Proxy_SetGasRequest_TO_Robotics_RoboBoard_SetGasRequest(object transformFrom)
{
Robotics.RoboBoard.SetGasRequest target = new Robotics.RoboBoard.SetGasRequest();
Robotics.RoboBoard.Proxy.SetGasRequest from = transformFrom as Robotics.RoboBoard.Proxy.SetGasRequest;
target.Gas = from.Gas;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_SetGasRequest_TO_Robotics_RoboBoard_Proxy_SetGasRequest(object transformFrom)
{
Robotics.RoboBoard.Proxy.SetGasRequest target = new Robotics.RoboBoard.Proxy.SetGasRequest();
Robotics.RoboBoard.SetGasRequest from = transformFrom as Robotics.RoboBoard.SetGasRequest;
target.Gas = from.Gas;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_Proxy_SetGierRequest_TO_Robotics_RoboBoard_SetGierRequest(object transformFrom)
{
Robotics.RoboBoard.SetGierRequest target = new Robotics.RoboBoard.SetGierRequest();
Robotics.RoboBoard.Proxy.SetGierRequest from = transformFrom as Robotics.RoboBoard.Proxy.SetGierRequest;
target.Gier = from.Gier;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_SetGierRequest_TO_Robotics_RoboBoard_Proxy_SetGierRequest(object transformFrom)
{
Robotics.RoboBoard.Proxy.SetGierRequest target = new Robotics.RoboBoard.Proxy.SetGierRequest();
Robotics.RoboBoard.SetGierRequest from = transformFrom as Robotics.RoboBoard.SetGierRequest;
target.Gier = from.Gier;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_Proxy_IncrementTickRequest_TO_Robotics_RoboBoard_IncrementTickRequest(object transformFrom)
{
Robotics.RoboBoard.IncrementTickRequest target = new Robotics.RoboBoard.IncrementTickRequest();
Robotics.RoboBoard.Proxy.IncrementTickRequest from = transformFrom as Robotics.RoboBoard.Proxy.IncrementTickRequest;
target.Command = from.Command;
return target;
}
 
 
public static object Transform_Robotics_RoboBoard_IncrementTickRequest_TO_Robotics_RoboBoard_Proxy_IncrementTickRequest(object transformFrom)
{
Robotics.RoboBoard.Proxy.IncrementTickRequest target = new Robotics.RoboBoard.Proxy.IncrementTickRequest();
Robotics.RoboBoard.IncrementTickRequest from = transformFrom as Robotics.RoboBoard.IncrementTickRequest;
target.Command = from.Command;
return target;
}
 
static Transforms()
{
Register();
}
public static void Register()
{
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.RoboBoardState), Transform_Robotics_RoboBoard_Proxy_RoboBoardState_TO_Robotics_RoboBoard_RoboBoardState);
AddSourceTransform(typeof(Robotics.RoboBoard.RoboBoardState), Transform_Robotics_RoboBoard_RoboBoardState_TO_Robotics_RoboBoard_Proxy_RoboBoardState);
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.SetComPortRequest), Transform_Robotics_RoboBoard_Proxy_SetComPortRequest_TO_Robotics_RoboBoard_SetComPortRequest);
AddSourceTransform(typeof(Robotics.RoboBoard.SetComPortRequest), Transform_Robotics_RoboBoard_SetComPortRequest_TO_Robotics_RoboBoard_Proxy_SetComPortRequest);
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.ReceiveCommandRequest), Transform_Robotics_RoboBoard_Proxy_ReceiveCommandRequest_TO_Robotics_RoboBoard_ReceiveCommandRequest);
AddSourceTransform(typeof(Robotics.RoboBoard.ReceiveCommandRequest), Transform_Robotics_RoboBoard_ReceiveCommandRequest_TO_Robotics_RoboBoard_Proxy_ReceiveCommandRequest);
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.SendCommandRequest), Transform_Robotics_RoboBoard_Proxy_SendCommandRequest_TO_Robotics_RoboBoard_SendCommandRequest);
AddSourceTransform(typeof(Robotics.RoboBoard.SendCommandRequest), Transform_Robotics_RoboBoard_SendCommandRequest_TO_Robotics_RoboBoard_Proxy_SendCommandRequest);
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.LevelRequest), Transform_Robotics_RoboBoard_Proxy_LevelRequest_TO_Robotics_RoboBoard_LevelRequest);
AddSourceTransform(typeof(Robotics.RoboBoard.LevelRequest), Transform_Robotics_RoboBoard_LevelRequest_TO_Robotics_RoboBoard_Proxy_LevelRequest);
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.ControlRequest), Transform_Robotics_RoboBoard_Proxy_ControlRequest_TO_Robotics_RoboBoard_ControlRequest);
AddSourceTransform(typeof(Robotics.RoboBoard.ControlRequest), Transform_Robotics_RoboBoard_ControlRequest_TO_Robotics_RoboBoard_Proxy_ControlRequest);
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.SetAltituteRequest), Transform_Robotics_RoboBoard_Proxy_SetAltituteRequest_TO_Robotics_RoboBoard_SetAltituteRequest);
AddSourceTransform(typeof(Robotics.RoboBoard.SetAltituteRequest), Transform_Robotics_RoboBoard_SetAltituteRequest_TO_Robotics_RoboBoard_Proxy_SetAltituteRequest);
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.SetGasRequest), Transform_Robotics_RoboBoard_Proxy_SetGasRequest_TO_Robotics_RoboBoard_SetGasRequest);
AddSourceTransform(typeof(Robotics.RoboBoard.SetGasRequest), Transform_Robotics_RoboBoard_SetGasRequest_TO_Robotics_RoboBoard_Proxy_SetGasRequest);
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.SetGierRequest), Transform_Robotics_RoboBoard_Proxy_SetGierRequest_TO_Robotics_RoboBoard_SetGierRequest);
AddSourceTransform(typeof(Robotics.RoboBoard.SetGierRequest), Transform_Robotics_RoboBoard_SetGierRequest_TO_Robotics_RoboBoard_Proxy_SetGierRequest);
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.IncrementTickRequest), Transform_Robotics_RoboBoard_Proxy_IncrementTickRequest_TO_Robotics_RoboBoard_IncrementTickRequest);
AddSourceTransform(typeof(Robotics.RoboBoard.IncrementTickRequest), Transform_Robotics_RoboBoard_IncrementTickRequest_TO_Robotics_RoboBoard_Proxy_IncrementTickRequest);
}
}
}
 
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoard.cs
0,0 → 1,520
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.312
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
using Microsoft.Ccr.Core;
using Microsoft.Dss.Core;
using Microsoft.Dss.Core.Attributes;
using Microsoft.Dss.ServiceModel.Dssp;
using Microsoft.Dss.ServiceModel.DsspServiceBase;
using Microsoft.Dss.Core.DsspHttp;
using System;
using System.Collections.Generic;
using System.Security.Permissions;
using System.ComponentModel;
using System.Xml;
using roboboard = Robotics.RoboBoard;
using submgr = Microsoft.Dss.Services.SubscriptionManager;
using Roboboard = Robotics.Serial;
using Microsoft.Ccr.Adapters.WinForms;
using soap = W3C.Soap;
using dssp = Microsoft.Dss.ServiceModel.Dssp;
using xml = System.Xml;
using W3C.Soap;
 
 
namespace Robotics.RoboBoard
{
/// <summary>
/// Implementation class for RoboBoard
/// </summary>
[DisplayName("RoboBoard")]
[Description("The RoboBoard Service")]
[Contract(Contract.Identifier)]
public class RoboBoardService : DsspServiceBase
{
RoboBoardForm _rbForm;
RoboBoardEvents _eventsPort = new RoboBoardEvents();
 
private Roboboard.SerialCom sc = new Robotics.Serial.SerialCom();
/// <summary>
/// _state
/// </summary>
private RoboBoardState _state = new RoboBoardState();
/// <summary>
/// _main Port
/// </summary>
[ServicePort("/roboboard", AllowMultipleInstances=false)]
private RoboBoardOperations _mainPort = new RoboBoardOperations();
 
[Partner("SubMgr", Contract = submgr.Contract.Identifier, CreationPolicy = PartnerCreationPolicy.CreateAlways)]
private submgr.SubscriptionManagerPort _submgrPort = new submgr.SubscriptionManagerPort();
 
//---------------------------------------------------------------------
/// <summary>
/// Default Service Constructor
/// </summary>
public RoboBoardService(DsspServiceCreationPort creationPort) :
base(creationPort)
{
}
/// <summary>
/// Service Start
/// </summary>
protected override void Start()
{
Activate(Arbiter.Interleave(
new TeardownReceiverGroup
(
),
new ExclusiveReceiverGroup
(
Arbiter.ReceiveWithIterator<OnLoad>(true, _eventsPort, OnLoadHandler)
),
new ConcurrentReceiverGroup
(
)
));
base.Start();
LogInfo("Init Service..");
// Add service specific initialization here.
// Open Status and Debug Dialog
WinFormsServicePort.Post(new RunForm(CreateForm));
 
Roboboard.SerialCom.BotEvent +=new Robotics.Serial.SerialCom.BotEventHandler(sc_BotEvent);
}
 
System.Windows.Forms.Form CreateForm()
{
return new RoboBoardForm(_eventsPort);
}
 
 
//---------------------------------------------------------------------
/// <summary>
/// Get Handler
/// </summary>
/// <param name="get"></param>
/// <returns></returns>
[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
public virtual IEnumerator<ITask> GetHandler(Get get)
{
get.ResponsePort.Post(_state);
yield break;
}
 
//---------------------------------------------------------------------
/// <summary>
/// Http Get Handler
/// </summary>
[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
public IEnumerator<ITask> HttpGetHandler(HttpGet httpGet)
{
httpGet.ResponsePort.Post(new HttpResponseType(_state));
yield break;
}
 
//---------------------------------------------------------------------
/// <summary>
/// Replace Handler
/// </summary>
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> ReplaceHandler(Replace replace)
{
_state = replace.Body;
 
// #region CODECLIP 04-1
// base.SendNotification(_submgrPort, replace);
// #endregion
 
replace.ResponsePort.Post(DefaultReplaceResponseType.Instance);
yield break;
}
 
//---------------------------------------------------------------------
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> SetComPortHandler(SetComPort setComPort)
{
LogInfo("Set Port Name ("+setComPort.Body.PortName+")");
if ((setComPort.Body.PortName == sc.ComPort)&&(sc.isOpen==true))
{
LogInfo("no need to change com port");
// port name equals the old port name - no action
}
else
{
// port name is different, close the old port and open the new one
if(sc.isOpen==true) {
LogInfo("closing Port");
sc.ClosePort();
}
sc.ComPort = setComPort.Body.PortName;
if (_rbForm != null)
{
if (sc.InitPort() == 0)
{
LogInfo("Init Port succseeded");
WinFormsServicePort.FormInvoke(delegate()
{_rbForm.UpdateStatus("Port Open (" + sc.ComPort + ")");});
}
else
{
LogInfo("Init Port failed");
WinFormsServicePort.FormInvoke(delegate()
{_rbForm.UpdateStatus("Can't open communication port (" + sc.ComPort + ")");});
}
}
}
yield break;
}
 
//---------------------------------------------------------------------
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> IncrementTickHandler(IncrementTick incrementTick)
{
LogInfo("Tick: ");
LogInfo("Command:" + incrementTick.Body.Command);
base.SendNotification(_submgrPort, incrementTick);
 
incrementTick.ResponsePort.Post(DefaultUpdateResponseType.Instance);
yield break;
}
 
//---------------------------------------------------------------------
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> ReceiveCommandHandler(ReceiveCommand receiveCommand)
{
LogInfo("Receive ");
LogInfo("Command:" + receiveCommand.Body.Command);
 
base.SendNotification(_submgrPort, receiveCommand);
 
receiveCommand.ResponsePort.Post(DefaultUpdateResponseType.Instance);
yield break;
}
 
//---------------------------------------------------------------------
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> SendCommandHandler(SendCommand sendCommand)
{
LogInfo("Send ");
LogInfo("Command:" + sendCommand.Body.Command);
 
MKRequestTunnelMessage(sendCommand.Body.Command);
base.SendNotification(_submgrPort, sendCommand);
sendCommand.ResponsePort.Post(DefaultUpdateResponseType.Instance);
yield break;
}
 
//---------------------------------------------------------------------
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> LevelHandler(Level level)
{
LogInfo("Level ");
LogInfo("Nick:"+level.Body.Nick+"Roll:"+level.Body.Roll);
base.SendNotification(_submgrPort, level);
level.ResponsePort.Post(DefaultUpdateResponseType.Instance);
yield break;
}
 
//---------------------------------------------------------------------
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> SetAltituteHandler(SetAltitute setaltitute)
{
LogInfo("SetAltitute ");
LogInfo("Altitute:" + setaltitute.Body.Altitute);
if (_rbForm != null)
{
_rbForm.Control_alt = (Int16)setaltitute.Body.Altitute;
}
//TODO: send alt control to MK
base.SendNotification(_submgrPort, setaltitute);
setaltitute.ResponsePort.Post(DefaultUpdateResponseType.Instance);
yield break;
}
 
//---------------------------------------------------------------------
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> SetGierHandler(SetGier setgier)
{
LogInfo("SetGier ");
LogInfo("SetGier:" + setgier.Body.Gier);
Int16 igier = (Int16)(((float)128 * setgier.Body.Gier) / (float)1000);
if (_rbForm != null)
{
_rbForm.Control_gier = igier;
}
 
MK_latest_gier = igier;
MKRequestControl(MK_latest_nick, MK_latest_roll, MK_latest_gier, MK_latest_gas);
 
base.SendNotification(_submgrPort, setgier);
setgier.ResponsePort.Post(DefaultUpdateResponseType.Instance);
yield break;
}
 
//---------------------------------------------------------------------
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> SetGasHandler(SetGas setgas)
{
LogInfo("SetGas ");
LogInfo("SetGas:" + setgas.Body.Gas);
Int16 igas = (Int16)(((float)128 * setgas.Body.Gas) / (float)1000);
if (_rbForm != null)
{
_rbForm.Control_gas = igas;
}
 
MK_latest_gas = igas;
MKRequestControl(MK_latest_nick, MK_latest_roll, MK_latest_gier, MK_latest_gas);
 
base.SendNotification(_submgrPort, setgas);
setgas.ResponsePort.Post(DefaultUpdateResponseType.Instance);
yield break;
}
 
//---------------------------------------------------------------------
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> ControlHandler(Control control)
{
LogInfo("Control ");
LogInfo("Nick:" + control.Body.Nick + " Roll:" +control.Body.Roll);
 
Int16 inick = (Int16)(((float)128 * control.Body.Nick) / (float)(-1000));
Int16 iroll = (Int16)(((float)128 * control.Body.Roll) / (float)(-1000));
 
if (_rbForm != null)
{
_rbForm.Control_nick = inick;
_rbForm.Control_roll = iroll;
}
 
MK_latest_nick = inick;
MK_latest_roll = iroll;
MKRequestControl(MK_latest_nick, MK_latest_roll, MK_latest_gier, MK_latest_gas);
 
base.SendNotification(_submgrPort, control);
control.ResponsePort.Post(DefaultUpdateResponseType.Instance);
yield break;
}
 
//---------------------------------------------------------------------
[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
public IEnumerator<ITask> SubscribeHandler(Subscribe subscribe)
{
SubscribeRequestType request = subscribe.Body;
LogInfo("Subscribe request from: " + request.Subscriber);
 
yield return Arbiter.Choice(
SubscribeHelper(_submgrPort, request, subscribe.ResponsePort),
delegate(SuccessResult success)
{
base.SendNotification<Replace>(_submgrPort, request.Subscriber, _state);
},
delegate(Exception e)
{
LogError(null, "Subscribe failed", e);
}
);
 
yield break;
}
 
//---------------------------------------------------------------------
IEnumerator<ITask> OnLoadHandler(OnLoad onLoad)
{
_rbForm = onLoad.RoboBoardForm;
LogInfo("Loaded Form");
sc.ComPort = "COM6";
if (_rbForm != null)
{
if (sc.InitPort() == 0)
{
WinFormsServicePort.FormInvoke(delegate()
{_rbForm.UpdateStatus("Port Open (" + sc.ComPort + ")");});
}
else
{
WinFormsServicePort.FormInvoke(delegate()
{_rbForm.UpdateStatus("Can't open communication port (" + sc.ComPort + ")");});
}
}
//request version
MKRequestVersion();
yield break;
}
 
//---------------------------------------------------------------------
void MKRequestTunnelMessage(string message)
{
message = sc.CreateMessage((char)'X', (char)0, message);
sc.SerialWrite(message);
}
 
//---------------------------------------------------------------------
bool MKRequestSend = false;
Int16 MK_old_roll = 0;
Int16 MK_old_nick = 0;
Int16 MK_old_gier = 0;
Int16 MK_old_gas = 0;
 
Int16 MK_latest_roll = 0;
Int16 MK_latest_nick = 0;
Int16 MK_latest_gier = 0;
Int16 MK_latest_gas = 0;
 
void MKRequestControl(Int16 nick, Int16 roll, Int16 gier, Int16 gas)
{
string message = "";
if ((MK_old_gas == gas) &&
(MK_old_gier == gier) &&
(MK_old_nick == nick) &&
(MK_old_roll == roll))
{
LogInfo("no update");
return;
}
if (MKRequestSend == true) return;
LogInfo("Send");
if (_rbForm != null)
{
WinFormsServicePort.FormInvoke(delegate()
{ _rbForm.MonitorMKSensorUpdate(); });
}
message = sc.MessageAddInt16(roll, message);
MK_old_roll = roll;
message = sc.MessageAddInt16(nick, message);
MK_old_nick = nick;
message = sc.MessageAddInt16(gier, message);
MK_old_gier = gier;
message = sc.MessageAddInt16(gas, message);
MK_old_gas = gas;
message = sc.CreateMessage((char)'C', (char)0, message);
MKRequestSend = true;
sc.SerialWrite(message);
}
 
void MKDecodeControl()
{
LogInfo("Control OK");
MKRequestSend = false;
MKRequestControl(MK_latest_nick, MK_latest_roll, MK_latest_gier, MK_latest_gas);
}
//---------------------------------------------------------------------
void MKRequestVersion()
{
string message = "";
message=sc.CreateMessage((char)'v', (char)0, message);
sc.SerialWrite(message);
}
 
string MKDecodeVersion(string message)
{
string Versionstring = "";
Versionstring += "Version: "+sc.MessageReadByte(message).ToString();
message=message.Substring(1);
sc.MessageReadByte(message);
Versionstring += "." + sc.MessageReadByte(message).ToString();
message = message.Substring(1);
sc.MessageReadByte(message);
Versionstring += " (STEP:" + sc.MessageReadByte(message).ToString()+")";
if (_rbForm != null)
{
WinFormsServicePort.FormInvoke(delegate()
{ _rbForm.UpdateStatus(Versionstring); });
}
return Versionstring;
}
 
//---------------------------------------------------------------------
void MKDecodeDebugData(string message)
{
Int16[] analog = new Int16[32];
byte[] digital = new byte[2];
int i = 0;
for (i = 0; i < 2; i++)
{
digital[i]=sc.MessageReadByte(message);
message = message.Substring(1);
}
for (i = 0; i < 32; i++)
{
analog[i] = sc.MessageReadInt16(message);
 
Int16 analogx = (Int16)analog[i];
if (_rbForm != null)
{
_rbForm.MK_analog[i]= analog[i];
_rbForm.Mk_analog_name[i] = "Analog" + i.ToString();
//WinFormsServicePort.FormInvoke(delegate()
//{ _rbForm.MonitorMKSensor(i,analogx,"Analog"+i.ToString()); });
}
message = message.Substring(2);
}
if (_rbForm != null)
{
WinFormsServicePort.FormInvoke(delegate()
{ _rbForm.MonitorMKSensorUpdate(); });
}
base.SendNotification(_submgrPort, new Level((int)analog[0], (int)analog[1]));
}
 
//---------------------------------------------------------------------
void sc_BotEvent(object sender, EventArgs ev)
{
 
string message = "";
char cmd = (char)0;
char adr = (char)0;
if (sc.IsMessageValid() == true)
{
message = sc.GetLastMessage();
cmd = sc.GetMessageCmd();
adr = sc.GetMessageAdr();
if (cmd.CompareTo((char)'V')==0)
{
MKDecodeVersion(message);
base.SendNotification(_submgrPort, new ReceiveCommand("V"+message));
}
else
if (cmd.CompareTo((char)'D') == 0)
{
MKDecodeDebugData(message);
//base.SendNotification(_submgrPort, new ReceiveCommand("D"+message));
}
else
if (cmd.CompareTo((char)'X') == 0)
{
base.SendNotification(_submgrPort, new ReceiveCommand(message));
}
else
if (cmd.CompareTo((char)'C') == 0)
{
MKDecodeControl();
}
 
sc.InvalidateMessage();
}
 
if (_rbForm != null)
{
WinFormsServicePort.FormInvoke(delegate()
{ _rbForm.MonitorCommand(message); });
}
}
}
}
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardForm.Designer.cs
0,0 → 1,149
namespace Robotics.RoboBoard
{
partial class RoboBoardForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
 
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
 
#region Windows Form Designer generated code
 
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoboBoardForm));
this.MainPanel = new System.Windows.Forms.Panel();
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();
this.statusStrip.SuspendLayout();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// MainPanel
//
this.MainPanel.BackColor = System.Drawing.SystemColors.ControlDark;
this.MainPanel.Cursor = System.Windows.Forms.Cursors.Cross;
this.MainPanel.Location = new System.Drawing.Point(6, 57);
this.MainPanel.Name = "MainPanel";
this.MainPanel.Size = new System.Drawing.Size(373, 346);
this.MainPanel.TabIndex = 0;
this.MainPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.MainPanel_Paint);
//
// statusStrip
//
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel1});
this.statusStrip.Location = new System.Drawing.Point(0, 406);
this.statusStrip.Name = "statusStrip";
this.statusStrip.Size = new System.Drawing.Size(391, 22);
this.statusStrip.TabIndex = 1;
this.statusStrip.Text = "<unknown>";
//
// toolStripStatusLabel1
//
this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
this.toolStripStatusLabel1.Size = new System.Drawing.Size(73, 17);
this.toolStripStatusLabel1.Text = "<unknown>";
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripButton1,
this.toolStripButton2,
this.toolStripButton3});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(391, 54);
this.toolStrip1.TabIndex = 2;
this.toolStrip1.Text = "toolStrip1";
//
// toolStripButton1
//
this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
this.toolStripButton1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.White;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(59, 51);
this.toolStripButton1.Text = "GPS Data";
this.toolStripButton1.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
this.toolStripButton1.ToolTipText = "GPS Data";
this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// toolStripButton2
//
this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
this.toolStripButton2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.White;
this.toolStripButton2.Name = "toolStripButton2";
this.toolStripButton2.Size = new System.Drawing.Size(56, 51);
this.toolStripButton2.Text = "MK Data";
this.toolStripButton2.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
this.toolStripButton2.Click += new System.EventHandler(this.toolStripButton2_Click);
//
// toolStripButton3
//
this.toolStripButton3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton3.Image")));
this.toolStripButton3.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.White;
this.toolStripButton3.Name = "toolStripButton3";
this.toolStripButton3.Size = new System.Drawing.Size(51, 51);
this.toolStripButton3.Text = "Control";
this.toolStripButton3.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
this.toolStripButton3.Click += new System.EventHandler(this.toolStripButton3_Click);
//
// RoboBoardForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.ClientSize = new System.Drawing.Size(391, 428);
this.Controls.Add(this.toolStrip1);
this.Controls.Add(this.statusStrip);
this.Controls.Add(this.MainPanel);
this.DoubleBuffered = true;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Name = "RoboBoardForm";
this.Text = "RoboBoard Monitor";
this.Load += new System.EventHandler(this.RoboBoardForm_Load);
this.statusStrip.ResumeLayout(false);
this.statusStrip.PerformLayout();
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
 
}
 
#endregion
 
private System.Windows.Forms.Panel MainPanel;
private System.Windows.Forms.StatusStrip statusStrip;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
private System.Windows.Forms.ToolStripButton toolStripButton1;
private System.Windows.Forms.ToolStripButton toolStripButton2;
private System.Windows.Forms.ToolStripButton toolStripButton3;
 
}
}
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardForm.cs
0,0 → 1,200
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using winforms = System.Windows.Forms;
using Microsoft.Ccr.Core;
using Microsoft.Dss.ServiceModel.Dssp;
 
 
namespace Robotics.RoboBoard
{
partial class RoboBoardForm : Form
{
RoboBoardEvents _eventsPort;
 
enum PanelState { Idle, GPS, MKSensor, ExtenderBoard, RawData, Control };
public Int16[] MK_analog = new Int16[32];
public string[] Mk_analog_name = new string[32];
public Int16 Control_alt;
public Int16 Control_roll;
public Int16 Control_nick;
public Int16 Control_gier;
public Int16 Control_gas;
 
 
int panelstate = (int)PanelState.Idle;
public RoboBoardForm(RoboBoardEvents EventsPort)
 
{
_eventsPort = EventsPort;
InitializeComponent();
// UpdateStatus("<unknown>");
}
 
public void UpdateStatus(string Status) {
toolStripStatusLabel1.Text = Status;
}
 
/// <summary>
/// posts the instace of the form to the main process
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void RoboBoardForm_Load(object sender, EventArgs e)
{
_eventsPort.Post(new OnLoad(this));
}
 
/// <summary>
/// Invalidate the Panel area and trigger a repaint
/// </summary>
/// <param name="Command"></param>
public void MonitorCommand(string Command)
{
MainPanel.Invalidate();
}
 
/// <summary>
/// update data value
/// </summary>
/// <param name="index"></param>
/// <param name="value"></param>
/// <param name="name"></param>
public void MonitorMKSensor(int index, Int16 value, string name)
{
if (index > 31) return;
MK_analog[index] = value;
if (name == "") return;
Mk_analog_name[index] = name;
}
 
public void MonitorMKSensorUpdate()
{
MainPanel.Invalidate();
}
 
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainPanel_Paint(object sender, PaintEventArgs e)
{
int i;
Graphics dc = e.Graphics;
 
Font stdFont = new Font("Arial", 10);
SolidBrush stdBrush = new SolidBrush(Color.Green);
Font sensorFont = new Font("Arial", 8);
SolidBrush sensorBrush = new SolidBrush(Color.Black);
 
switch (panelstate)
{
case (int)PanelState.Control:
dc.DrawString("Control Data Monitor", stdFont, stdBrush, 2, 2);
dc.DrawString("Nick", sensorFont, sensorBrush, 10, 14);
dc.DrawString(Control_nick.ToString(), sensorFont, sensorBrush, 200, 14);
dc.DrawString("Roll", sensorFont, sensorBrush, 10, 24);
dc.DrawString(Control_roll.ToString(), sensorFont, sensorBrush, 200, 24);
dc.DrawString("Gier", sensorFont, sensorBrush, 10, 34);
dc.DrawString(Control_gier.ToString(), sensorFont, sensorBrush, 200, 34);
dc.DrawString("Gas", sensorFont, sensorBrush, 10, 44);
dc.DrawString(Control_gas.ToString(), sensorFont, sensorBrush, 200, 44);
dc.DrawString("Altitute", sensorFont, sensorBrush, 10, 54);
dc.DrawString(Control_alt.ToString(), sensorFont, sensorBrush, 200, 54);
break;
case (int)PanelState.RawData:
dc.DrawString("Raw Data", stdFont, stdBrush, 2, 2);
break;
case (int)PanelState.ExtenderBoard:
dc.DrawString("Extender Board Data", stdFont, stdBrush, 2, 2);
break;
case (int)PanelState.GPS:
dc.DrawString("GPS Data", stdFont, stdBrush, 10, 10);
break;
case (int)PanelState.MKSensor:
dc.DrawString("Mikrokopter Sensors", stdFont, stdBrush, 2, 2);
for (i = 0; i < 32; i++)
{
if (Mk_analog_name[i] == null)
{
dc.DrawString("<unknown>", sensorFont, sensorBrush, 10, (float)(14 + (i * 10)));
}
else
{
dc.DrawString(Mk_analog_name[i], sensorFont, sensorBrush, 10, (float)(14 + (i * 10)));
}
dc.DrawString(MK_analog[i].ToString(), sensorFont, sensorBrush, 200, (float)(14 + (i * 10)));
}
break;
case (int)PanelState.Idle:
dc.DrawString("Select Mode (no mode selected)", stdFont, stdBrush, 2, 2);
break;
default:
dc.DrawString("Select Mode", stdFont, stdBrush, 2, 2);
break;
}
}
 
private void toolStripButton1_Click(object sender, EventArgs e)
{
panelstate = (int)PanelState.GPS;
MainPanel.Invalidate();
}
 
private void toolStripButton2_Click(object sender, EventArgs e)
{
panelstate = (int)PanelState.MKSensor;
MainPanel.Invalidate();
}
 
private void toolStripButton3_Click(object sender, EventArgs e)
{
panelstate = (int)PanelState.Control;
MainPanel.Invalidate();
}
 
}
class RoboBoardEvents:PortSet <OnLoad,OnClosed>
{
}
 
class RoboBoardEvent
{
private RoboBoardForm _rbForm;
 
public RoboBoardForm RoboBoardForm
{
get { return _rbForm; }
set { _rbForm = value; }
}
 
public RoboBoardEvent(RoboBoardForm rbForm)
{
_rbForm = rbForm;
}
}
 
class OnLoad : RoboBoardEvent
{
public OnLoad(RoboBoardForm form)
: base(form)
{
}
}
 
class OnClosed : RoboBoardEvent
{
public OnClosed(RoboBoardForm form)
: base(form)
{
}
}
 
}
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardForm.resx
0,0 → 1,158
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
 
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>121, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAANVJREFUWEftV8sS
gCAI9NP9cxotChDr0kLN2EwHO8S6D9BS9ENmHbqkQtQApIDYCzcACSB04XQQDGAx8QlP/EAOaGSf0sE9
IwiEjmcvXmtNALF3yl6c36N7gpk4CtvikSDaYFI7lyxEyDFQP5EBJoUynVdcsAAZ44PpJO3GC1gARm8v
EXgADMJJAexQ4+Z/AAA+TygQMpbniSpgiqo2rPwgp2cEE6IFc/afBtir5pwNonAQ3q4uED841Lwqi/1Z
qByznSw5mBl79YON7TtTpdw9R2OKLxv19gHuq/t6ngAAAABJRU5ErkJggg==
</value>
</data>
<data name="toolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQhJREFUWEftV1sS
gyAM1JtzNG5mjTYOhTyW2GI/YIbR8tgsIYnbdWnbJoytwhgy1IVFi4+ec746j72fiFFa043VGC5J0HsB
6pEIYX2cujbOv0EvdGO5jCsC0r2yV0JYEGPQCyEscVMdjHcIeFgm65TSMc9PJw5CWOq9KcZDMeBhqcx5
Y5GKbhpqWWRhiV4QNlinNzMBwUKqF6/RvFAWrHBVbUAKa1ZFlOYsLO8q1flt2TND7Oc3YEDTCQwwTiYq
AintJ6exYe1fCNDJr9MP9MDPg/CxNHy0ELlCYkoyUJi6npTkXUhGKTUnhDUl2ZRk13+5WsshMkoIxrC8
Qyoh+sG9hfVNGeVivQAs6H/3eOzbigAAAABJRU5ErkJggg==
</value>
</data>
<data name="toolStripButton3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAKtJREFUWEftleEO
gCAIhH1035ykDcfIVjuFtqTmrB/5HceZpeTl5ABRITucUNdlGRwGsyAN1w6ECLLwEKhARnBxwF3IHbyB
Y7IgAuy8rwDV89gWDMIWI+Am5QyX4b4RRoAU8C8HdDXoMxxEqrXCY3YnwGAWzXCZkfKXwFEB38JV36DA
SWbQ07BX336k590XfHhf0XfOymugFaj6PXUIQbabtiGhz2/SgU0dOADesJv04V7zigAAAABJRU5ErkJg
gg==
</value>
</data>
</root>
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.csproj
0,0 → 1,145
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{3600E088-E3C2-4193-8515-43DAB2B62E53}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ApplicationIcon>
</ApplicationIcon>
<AssemblyKeyContainerName>
</AssemblyKeyContainerName>
<AssemblyName>RoboBoardService.Y2007.M08</AssemblyName>
<RootNamespace>Robotics.RoboBoard</RootNamespace>
<AssemblyOriginatorKeyFile>C:\Microsoft Robotics Studio (1.5)\samples\mrisamples.snk</AssemblyOriginatorKeyFile>
<DefaultClientScript>JScript</DefaultClientScript>
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<SignAssembly>true</SignAssembly>
<OutputType>Library</OutputType>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<StartupObject>
</StartupObject>
<FileUpgradeFlags>
</FileUpgradeFlags>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>C:\Microsoft Robotics Studio (1.5)\bin\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>DEBUG;TRACE;INSTRUMENTED</DefineConstants>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>true</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn>3003</NoWarn>
<Optimize>false</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>1</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>C:\Microsoft Robotics Studio (1.5)\bin\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;INSTRUMENTED</DefineConstants>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>true</DebugSymbols>
<DebugType>pdbonly</DebugType>
<DefineConstants>TRACE</DefineConstants>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn>3003</NoWarn>
<Optimize>false</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>1</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Ccr.Adapters.WinForms, Version=1.5.507.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="DssRuntime">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="mscorlib">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="Ccr.Core">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="DssBase">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="System">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86" />
<Reference Include="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" />
<Reference Include="System.Xml">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="SerialCom.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="RoboBoard.cs" />
<Compile Include="RoboBoardForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="RoboBoardForm.Designer.cs">
<DependentUpon>RoboBoardForm.cs</DependentUpon>
</Compile>
<Compile Include="RoboBoardTypes.cs" />
<AppDesigner Include="Properties" />
</ItemGroup>
<ItemGroup>
<Content Include="Control.bmp" />
<Content Include="Mk.bmp" />
<Content Include="RoboBoardService.manifest.xml" />
<Content Include="Sat.bmp" />
<Content Include="Sat.ico" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<SubType>Designer</SubType>
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="RoboBoardForm.resx">
<SubType>Designer</SubType>
<DependentUpon>RoboBoardForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
<PropertyGroup Condition="'$(DelaySign)'!=''">
<ProxyDelaySign>/delaysign+</ProxyDelaySign>
</PropertyGroup>
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>"C:\Microsoft Robotics Studio (1.5)\bin\dssproxy.exe" /dll:"$(TargetPath)" /proxyprojectpath:"$(ProjectDir)Proxy " /keyfile:"$(AssemblyOriginatorKeyFile)" $(ProxyDelaySign) $(CompactFrameworkProxyGen) /binpath:". " /referencepath:"C:\Microsoft Robotics Studio (1.5)\bin\ " /referencepath:"C:\Microsoft Robotics Studio (1.5)\bin\ "</PostBuildEvent>
</PropertyGroup>
</Project>
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.csproj.user
0,0 → 1,17
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ReferencePath>c:\microsoft robotics studio (1.5)\bin;c:\windows\microsoft.net\framework\v2.0.50727</ReferencePath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<StartWorkingDirectory>C:\Microsoft Robotics Studio (1.5)</StartWorkingDirectory>
<StartAction>Program</StartAction>
<StartProgram>C:\Microsoft Robotics Studio (1.5)\bin\dsshost.exe</StartProgram>
<StartArguments>-port:50000 -tcpport:50001 -manifest:"C:\mikrokopter\RoboBoardService\RoboBoardService\RoboBoardService.manifest.xml"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<StartWorkingDirectory>C:\Microsoft Robotics Studio (1.5)</StartWorkingDirectory>
<StartAction>Program</StartAction>
<StartProgram>C:\Microsoft Robotics Studio (1.5)\bin\dsshost.exe</StartProgram>
<StartArguments>-port:50000 -tcpport:50001 -manifest:"C:\Users\gunterl\Documents\Visual Studio 2005\Projects\RoboBoardService\RoboBoardService\RoboBoardService.manifest.xml"</StartArguments>
</PropertyGroup>
</Project>
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.manifest.xml
0,0 → 1,11
<?xml version="1.0" ?>
<Manifest
xmlns="http://schemas.microsoft.com/xw/2004/10/manifest.html"
xmlns:dssp="http://schemas.microsoft.com/xw/2004/10/dssp.html"
>
<CreateServiceList>
<ServiceRecordType>
<dssp:Contract>http://schemas.tempuri.org/2007/08/roboboardservice.html</dssp:Contract>
</ServiceRecordType>
</CreateServiceList>
</Manifest>
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.sln
0,0 → 1,20

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoboBoardService", "RoboBoardService.csproj", "{3600E088-E3C2-4193-8515-43DAB2B62E53}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3600E088-E3C2-4193-8515-43DAB2B62E53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3600E088-E3C2-4193-8515-43DAB2B62E53}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3600E088-E3C2-4193-8515-43DAB2B62E53}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3600E088-E3C2-4193-8515-43DAB2B62E53}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.suo
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardTypes.cs
0,0 → 1,472
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.312
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
using Microsoft.Ccr.Core;
using Microsoft.Dss.Core.Attributes;
using Microsoft.Dss.ServiceModel.Dssp;
using Microsoft.Dss.Core.DsspHttp;
using System;
using System.Collections.Generic;
using W3C.Soap;
using roboboard = Robotics.RoboBoard;
 
 
namespace Robotics.RoboBoard
{
/// <summary>
/// RoboBoard Contract class
/// </summary>
public sealed class Contract
{
/// <summary>
/// The Dss Service contract
/// </summary>
public const String Identifier = "http://schemas.tempuri.org/2007/08/roboboardservice.html";
}
/// <summary>
/// The RoboBoard State
/// </summary>
[DataContract()]
public class RoboBoardState
{
private string _ComPort = "COM1";
 
[DataMember]
public string ComPort
{
get { return _ComPort; }
set { _ComPort = value; }
}
 
private string _Command;
 
}
/// <summary>
/// RoboBoard Main Operations Port
/// </summary>
[ServicePort()]
public class RoboBoardOperations : PortSet<
DsspDefaultLookup,
DsspDefaultDrop,
Get,
HttpGet,
Replace,
SetComPort,
ReceiveCommand,
SendCommand,
Level,
Control,
SetAltitute,
SetGas,
SetGier,
IncrementTick,
Subscribe>
{
}
 
//-------------------------------------------------------------------------
/// <summary>
/// RoboBoard Get Operation
/// </summary>
public class Get : Get<GetRequestType, PortSet<RoboBoardState, Fault>>
{
/// <summary>
/// RoboBoard Get Operation
/// </summary>
public Get()
{
}
/// <summary>
/// RoboBoard Get Operation
/// </summary>
public Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType body) :
base(body)
{
}
/// <summary>
/// RoboBoard Get Operation
/// </summary>
public Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType body, Microsoft.Ccr.Core.PortSet<RoboBoardState,W3C.Soap.Fault> responsePort) :
base(body, responsePort)
{
}
}
 
//-------------------------------------------------------------------------
public class Replace : Replace<RoboBoardState, PortSet<DefaultReplaceResponseType, Fault>>
{
}
 
//-------------------------------------------------------------------------
// Set Com Port Handler
public class SetComPort : Update<SetComPortRequest,
PortSet<DefaultUpdateResponseType, Fault>>
{
public SetComPort()
{
}
 
public SetComPort(string Portname)
: base(new SetComPortRequest(Portname))
{
}
 
 
}
 
[DataContract]
public class SetComPortRequest
{
 
public SetComPortRequest()
{
}
 
public SetComPortRequest(string Portname)
{
PortName = Portname;
}
 
private string _PortName;
 
[DataMember]
public string PortName
{
get { return _PortName; }
set { _PortName = value; }
}
}
 
//-------------------------------------------------------------------------
// Receive Command Handler
// tbd
public class ReceiveCommand : Update<ReceiveCommandRequest,
PortSet<DefaultUpdateResponseType, Fault>>
{
public ReceiveCommand()
{
}
 
public ReceiveCommand(string Command)
: base(new ReceiveCommandRequest(Command))
{
}
}
 
[DataContract]
public class ReceiveCommandRequest
{
public ReceiveCommandRequest()
{
}
 
public ReceiveCommandRequest(string command)
{
Command = command;
}
 
private string _Command;
 
[DataMember]
public string Command
{
get { return _Command; }
set { _Command = value; }
}
}
 
//-------------------------------------------------------------------------
// Send Command Request Handler
// tbd
public class SendCommand : Update<SendCommandRequest,
PortSet<DefaultUpdateResponseType, Fault>>
{
public SendCommand()
{
}
 
public SendCommand(string Command)
: base(new SendCommandRequest(Command))
{
}
}
 
[DataContract]
public class SendCommandRequest
{
public SendCommandRequest()
{
}
 
public SendCommandRequest(string command)
{
Command = command;
}
 
private string _Command;
 
[DataMember]
public string Command
{
get { return _Command; }
set { _Command = value; }
}
}
//-------------------------------------------------------------------------
// Level Handler
public class Level : Update<LevelRequest,
PortSet<DefaultUpdateResponseType, Fault>>
{
public Level()
{
}
 
public Level(int Nick, int Roll)
: base(new LevelRequest(Nick,Roll))
{
}
}
 
[DataContract]
public class LevelRequest
{
public LevelRequest()
{
}
 
public LevelRequest(int nick, int roll)
{
Nick = nick;
Roll = roll;
}
 
private int _Roll;
private int _Nick;
 
[DataMember]
public int Roll
{
get { return _Roll; }
set { _Roll = value; }
}
 
[DataMember]
public int Nick
{
get { return _Nick; }
set { _Nick = value; }
}
}
 
//-------------------------------------------------------------------------
// Altitute Handler
public class SetAltitute : Update<SetAltituteRequest,
PortSet<DefaultUpdateResponseType, Fault>>
{
public SetAltitute()
{
}
 
public SetAltitute(float Altitute)
: base(new SetAltituteRequest(Altitute))
{
}
}
 
[DataContract]
public class SetAltituteRequest
{
public SetAltituteRequest()
{
}
 
public SetAltituteRequest(float altitute)
{
Altitute = altitute;
}
 
private float _Altitute;
 
[DataMember]
public float Altitute
{
get { return _Altitute; }
set { _Altitute = value; }
}
}
 
//-------------------------------------------------------------------------
// Gier Handler
public class SetGier : Update<SetGierRequest,
PortSet<DefaultUpdateResponseType, Fault>>
{
public SetGier()
{
}
 
public SetGier(float Gier)
: base(new SetGierRequest(Gier))
{
}
}
 
[DataContract]
public class SetGierRequest
{
public SetGierRequest()
{
}
 
public SetGierRequest(float gier)
{
Gier = gier;
}
 
private float _Gier;
 
[DataMember]
public float Gier
{
get { return _Gier; }
set { _Gier = value; }
}
}
 
//-------------------------------------------------------------------------
// Gas Handler
public class SetGas : Update<SetGasRequest,
PortSet<DefaultUpdateResponseType, Fault>>
{
public SetGas()
{
}
 
public SetGas(float Gas)
: base(new SetGasRequest(Gas))
{
}
}
 
[DataContract]
public class SetGasRequest
{
public SetGasRequest()
{
}
 
public SetGasRequest(float gas)
{
Gas = gas;
}
 
private float _Gas;
 
[DataMember]
public float Gas
{
get { return _Gas; }
set { _Gas = value; }
}
}
 
//-------------------------------------------------------------------------
// Control Handler
public class Control : Update<ControlRequest,
PortSet<DefaultUpdateResponseType, Fault>>
{
public Control()
{
}
 
public Control(float Nick, float Roll)
: base(new ControlRequest(Nick,Roll))
{
}
}
 
[DataContract]
public class ControlRequest
{
public ControlRequest()
{
}
 
public ControlRequest(float nick, float roll)
{
Nick = nick;
Roll = roll;
}
 
private float _Roll;
private float _Nick;
 
[DataMember]
public float Roll
{
get { return _Roll; }
set { _Roll = value; }
}
 
[DataMember]
public float Nick
{
get { return _Nick; }
set { _Nick = value; }
}
 
}
//-------------------------------------------------------------------------
// Increment Tick Request Handler
public class IncrementTick : Update<IncrementTickRequest,
PortSet<DefaultUpdateResponseType, Fault>>
{
public IncrementTick()
{
}
 
public IncrementTick(string Command)
: base(new IncrementTickRequest(Command))
{
}
}
 
[DataContract]
public class IncrementTickRequest
{
public IncrementTickRequest()
{
}
 
public IncrementTickRequest(string command)
{
Command = command;
}
private string _Command;
 
[DataMember]
public string Command
{
get { return _Command; }
set { _Command = value; }
}
}
 
//-------------------------------------------------------------------------
#region CODECLIP 01-1
public class Subscribe : Subscribe<SubscribeRequestType, PortSet<SubscribeResponseType, Fault>>
{
}
#endregion
}
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Sat.bmp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Sat.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/SerialCom.cs
0,0 → 1,403
using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
using System.Threading;
 
namespace Robotics.Serial
{
class SerialCom
{
public delegate void BotEventHandler(object sender, EventArgs ev);
public static event BotEventHandler BotEvent;
public string ComPort = "COM1";
public static SerialPort serialPort1;// = new SerialPort();
public bool isOpen = false;
 
// ---------------------------------------------------------------------------
/// <summary>
/// Decode Message from the Roboboard
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
// ---------------------------------------------------------------------------
public static string DecodeMessage(string command)
{
string message = command.Substring(0, command.Length - 2);
string target = "";
target += (char)command[command.Length - 2];
target += (char)command[command.Length - 1];
//-----------------------------------------------------------
// check CRC
Int16 tmpcrc = 0;
for (int i = 0; i < message.Length; i++)
{
tmpcrc += (Int16)message[i];
}
tmpcrc %= 4096;
 
string crc = "";
crc += (char)((byte)'=' + (tmpcrc / 64));
crc += (char)((byte)'=' + (tmpcrc % 64));
 
if (crc != target) return "";
//-----------------------------------------------------------
// decode message
target = "";
message = command.Substring(3, command.Length - 5);
 
int index = 0;
uint a, b, c, d;
uint x, y, z;
int len = message.Length;
message = message + "=====";
 
while (index <= len)
{
a = (uint)message[index++] - '=';
b = (uint)message[index++] - '=';
c = (uint)message[index++] - '=';
d = (uint)message[index++] - '=';
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
target += (char)x;
target += (char)y;
target += (char)z;
}
return target;
}
 
// ---------------------------------------------------------------------------
/// <summary>
/// Encode Message to send to the Board
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
// ---------------------------------------------------------------------------
public static string EncodeMessage(string message)
{
string target = "";
byte a, b, c;
int len = message.Length;
int ptr = 0;
 
while (len > 0)
{
if (len > 0) { a = (byte)message[ptr++]; len--; } else a = 0;
if (len > 0) { b = (byte)message[ptr++]; len--; } else b = 0;
if (len > 0) { c = (byte)message[ptr++]; len--; } else c = 0;
target += (char)((a >> 2) + (byte)'=');
target += (char)((((a & 0x03) << 4) | ((b & 0xf0) >> 4)) + (byte)'=');
target += (char)((((b & 0x0f) << 2) | ((c & 0xc0) >> 6)) + (byte)'=');
target += (char)((c & 0x3f) + (byte)'=');
}
return target;
}
 
// ---------------------------------------------------------------------------
/// <summary>
/// Creates a complete message including the command and the address byte
/// header. It calls thr EncodeMessage function to encode the message body.
/// command and adress byte will not be encoded. An additional 2 Byte CRC will
/// be added at the end of the message
/// </summary>
/// <param name="cmd"></param>
/// <param name="adr"></param>
/// <param name="message"></param>
/// <returns></returns>
// ---------------------------------------------------------------------------
public string CreateMessage(char cmd, char adr, string message)
{
string target = "";
target += '#';
target += adr;
target += cmd;
target += EncodeMessage(message);
 
//-----------------------------------------------------------
//add CRC
Int16 tmpcrc = 0;
for (int i = 0; i < target.Length; i++)
{
tmpcrc += (Int16)target[i];
}
tmpcrc %= 4096;
target += (char)((byte)'=' + (tmpcrc / 64));
target += (char)((byte)'=' + (tmpcrc % 64));
//-----------------------------------------------------------
target += (char)'\r';
return target;
}
 
// ---------------------------------------------------------------------------
/// <summary>
/// Initialize the COM Port. ComPort must be set before calling this function
/// </summary>
/// <returns></returns>
// ---------------------------------------------------------------------------
public int InitPort()
{
serialPort1 = new SerialPort();
serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
try
{
serialPort1.PortName = ComPort;
serialPort1.BaudRate = 57600;
serialPort1.DataBits = 8;
serialPort1.Open();
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
isOpen = true;
}
catch
{
isOpen = false;
return 1;
}
return 0;
}
 
// ---------------------------------------------------------------------------
/// <summary>
/// Writes a string to the Com Port
/// </summary>
/// <param name="data"></param>
// ---------------------------------------------------------------------------
public void SerialWrite(string data)
{
serialPort1.Write(data);
}
 
// ---------------------------------------------------------------------------
/// <summary>
/// Writes a string to the comport and adds a CR/LF at the end
/// </summary>
/// <param name="data"></param>
// ---------------------------------------------------------------------------
public void SerialWriteLine(string data)
{
serialPort1.WriteLine(data);
}
 
// ---------------------------------------------------------------------------
/// <summary>
/// colse the COm port if open
/// </summary>
// ---------------------------------------------------------------------------
public void ClosePort()
{
if (isOpen)
{
serialPort1.Close();
}
}
 
// ---------------------------------------------------------------------------
/// <summary>
/// Message functions
/// </summary>
// ---------------------------------------------------------------------------
public string GetLastMessage()
{
if (messagevalid == true)
{
return botmessage;
}
else return "";
}
 
public bool IsMessageValid()
{
return messagevalid;
}
 
public bool IsMessageError()
{
return messageerror;
}
 
public bool IsMessageOverrun()
{
return messageoverrun;
}
 
public void InvalidateMessage()
{
messagevalid = false;
messageerror = false;
messageoverrun = false;
}
 
public char GetMessageCmd()
{
return message_cmd;
}
 
public char GetMessageAdr()
{
return message_adr;
}
public string MessageAddByte(byte value, string command)
{
command = command + (char)value;
return command;
}
 
public string MessageAddInt16(Int16 value, string command)
{
byte s = 0;
s = (byte)value;
command = command + (char)s;
Int16 value1 = (Int16)(value >> 8);
s = (byte)value1;
command = command + (char)s;
return command;
}
 
public string MessageAddInt32(Int32 value, string command)
{
byte s = 0;
s = (byte)value;
command = command + (char)s;
Int32 value1 = (Int32)(value >> 8);
s = (byte)value1;
command = command + (char)s;
value1 = (Int32)(value >> 8);
s = (byte)value1;
command = command + (char)s;
value1 = (Int32)(value >> 8);
s = (byte)value1;
command = command + (char)s;
return command;
}
 
public byte MessageReadByte(string command)
{
byte bvalue = (byte)command[0];
return bvalue;
}
 
public Int16 MessageReadInt16(string command)
{
int index = 0;
Int16 tmp2;
Int16 result;
 
Int16 tmp;
tmp2 = (Int16)command[index++];
result = (Int16)command[index++];
result = (Int16)(result << 8);
result += (Int16)tmp2;
return result;
}
 
public Int32 MessageReadInt32(string command)
{
int index = 0;
Int32 tmp0;
Int32 tmp1;
Int32 tmp2;
Int32 result;
 
Int16 tmp;
tmp0 = (Int32)command[index++];
tmp1 = (Int32)command[index++];
tmp2 = (Int32)command[index++];
result = (Int32)command[index++];
result = (Int32)(result << 8);
result += (Int32)tmp2;
result = (Int32)(result << 8);
result += (Int32)tmp1;
result = (Int32)(result << 8);
result += (Int32)tmp0;
return result;
}
 
 
// ---------------------------------------------------------------------------
/// <summary>
/// serial data receive message handler.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
// ---------------------------------------------------------------------------
private static string command;
private static bool messagevalid = false;
private static bool messageerror = false;
private static bool messageoverrun = false;
private static char message_cmd = (char)0;
private static char message_adr = (char)0;
private static int receiver_status = 0;
private static string botmessage;
 
private static void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int data;
EventArgs ev = new EventArgs();
while (serialPort1.BytesToRead > 0)
{
data = serialPort1.ReadChar();
//Console.Write((char)data);
switch (receiver_status)
{
case 0:
if (data.CompareTo('#') == 0)
{
command = "#";
receiver_status++;
}
break;
case 1:
message_adr = (char)data;
command = command + (char)data;
receiver_status++;
break;
case 2:
message_cmd = (char)data;
command = command + (char)data;
receiver_status++;
break;
case 3:
if ((data.CompareTo(13) != 0) && (data.CompareTo(10) != 0))
{
command = command + (char)data;
if (command.Length > 350)
{
command = "";
serialPort1.DiscardInBuffer();
}
}
else
{
if (messagevalid == true)
{
messageoverrun = true;
}
else
{
botmessage = DecodeMessage(command);
if (botmessage == "")
{
messageerror = true;
}
else
{
messagevalid = true;
}
}
BotEvent(sender, ev);
receiver_status = 0;
command = "";
}
break;
}
}
}
}
}
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/ResolveAssemblyReference.cache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/RoboBoardService.Y2007.M08.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/RoboBoardService.Y2007.M08.pdb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/RoboBoardService.csproj.GenerateResource.Cache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/Robotics.RoboBoard.Properties.Resources.resources
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/Robotics.RoboBoard.RoboBoardForm.resources
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/RoboBoardService.csproj.FileList.txt
0,0 → 1,8
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.dll
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.pdb
obj\Debug\ResolveAssemblyReference.cache
obj\Debug\Robotics.RoboBoard.Properties.Resources.resources
obj\Debug\Robotics.RoboBoard.RoboBoardForm.resources
obj\Debug\RoboBoardService.csproj.GenerateResource.Cache
obj\Debug\RoboBoardService.Y2007.M08.dll
obj\Debug\RoboBoardService.Y2007.M08.pdb
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/RoboBoardService.csproj.FileListAbsolute.txt
0,0 → 1,14
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.dll
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.pdb
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\ResolveAssemblyReference.cache
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\Robotics.RoboBoard.Properties.Resources.resources
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\Robotics.RoboBoard.RoboBoardForm.resources
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\RoboBoardService.csproj.GenerateResource.Cache
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\RoboBoardService.Y2007.M08.dll
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\RoboBoardService.Y2007.M08.pdb
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\ResolveAssemblyReference.cache
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\Robotics.RoboBoard.Properties.Resources.resources
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\Robotics.RoboBoard.RoboBoardForm.resources
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\RoboBoardService.csproj.GenerateResource.Cache
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\RoboBoardService.Y2007.M08.dll
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\RoboBoardService.Y2007.M08.pdb
/Microsoft Robotics Studio/PCB/mikrokopter_extension1.T3000
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/Roboboard/Main.c
0,0 → 1,285
/*****************************************************************************
Project : Roboboard
Date : 1/14/2007
Author : Gunter Logemann (C) ALL RIGHTS RESERVED
 
Comments: This project is optimized to work with the Mikrocopter (www.mikrokopter.de)
 
Redistributions of this source code (with or without modifications) or parts
of this sourcode must retain the above copyright notice, this list of
conditions and the following disclaimer.
* Neither the name of the copyright holders nor the names of contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
* The use of this source code permittet for non-commercial use (directly
or indirectly) only.
* Commercial use Is only permitted with our written permission by
Gunter Logemann (gunter@pccon.de)
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
 
Chip type : ATmega8
Program type : Application
Clock frequency : CPUSPEED
*****************************************************************************/
 
#include <avr/interrupt.h>
#include <avr/sleep.h>
//#include <avr/signal.h>
#include <avr/io.h>
//#include <avr/stdio.h>
#include "StdDefines.h"
#include "Main.h"
 
//#define CPUSPEED_20
//#define CPUSPEED_16
#define CPUSPEED_11059
 
// Macros
#define WatchdogReset() asm("wdr")
#define Wait() while(!(SPSR & (1<<SPIF)))
 
 
// Define CPU speed dependant constants:
 
 
 
#define MAX_RX_BUF 100
#define MAX_TX_BUF 100
unsigned volatile char SioTmp = 0;
unsigned volatile char RxdBuffer[MAX_RX_BUF];
unsigned volatile char TxdBuffer[MAX_TX_BUF];
 
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned volatile char CntCrcError = 0;
unsigned volatile char AnzahlEmpfangsBytes = 0;
 
struct str_VersionInfo VersionInfo;
struct str_AnalogData AnalogData;
struct str_Exception Exception;
 
// --------------------------------------------------------------------------
int uart_putchar (char c)
{
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
SIGNAL(SIG_UART_TRANS)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = TxdBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_TX_BUF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR = tmp_tx;
}
else ptr = 0;
}
 
// --------------------------------------------------------------------------
SIGNAL(SIG_UART_RECV)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
 
if(buf_ptr >= MAX_RX_BUF)
UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1]))
{
CrcOkay = 1;
}
else
{
CrcOkay = 0;
CntCrcError++;
}
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_RX_BUF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += TxdBuffer[i];
}
tmpCRC %= 4096;
TxdBuffer[i++] = '=' + tmpCRC / 64;
TxdBuffer[i++] = '=' + tmpCRC % 64;
TxdBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = TxdBuffer[0];
}
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
TxdBuffer[pt++] = '#'; // Startzeichen
TxdBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
TxdBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
TxdBuffer[pt++] = '=' + (a >> 2);
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
TxdBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
//-----------------------------------------------------------------------------
//main
//main execution loop
//-----------------------------------------------------------------------------
int main(void)
{
// int message structures;
VersionInfo.identifier = XIDENTIFIER_VERSION;
VersionInfo.majorversion = MAJORVERSION;
VersionInfo.minorversion = MINORVERSION;
AnalogData.identifier = XIDENTIFIER_ANALOG;
Exception.identifier = XIDENTIFIER_EXCEPTION;
 
// PORT D - unused right now
PORTD = 0x10;
DDRD = 0x00;
 
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART RX/TX interrupt enable
// USART Mode: Asynchronous
// USART Baud rate: 57600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
#ifdef CPUSPEED_20 //20.000MHz
UBRRH=0x00;
UBRRL=0x15;
#endif
 
#ifdef CPUSPEED_16 //16.000MHz
UBRRH=0x00;
UBRRL=0x10;
#endif
#ifdef CPUSPEED_11059 //11.059MHz
UBRRH=0x00;
UBRRL=0x0B;
#endif
 
 
// Enable interrupts
sei();
 
NeuerDatensatzEmpfangen = 0;
 
// main loop
while (1)
{
if(NeuerDatensatzEmpfangen==1) {
switch(RxdBuffer[3])
{
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// version request
case XIDENTIFIER_VERSION:
SendOutData('X',0x00,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
break;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case XIDENTIFIER_ANALOG:
break;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
default:
Exception.errorcode = ERRORCODE_NOTIMPLEMENTED;
SendOutData('X',0x00,(unsigned char *) &Exception,sizeof(VersionInfo));
}
NeuerDatensatzEmpfangen=0;
}
}
return(1);
} /* main */
 
 
/Microsoft Robotics Studio/Roboboard/Main.h
0,0 → 1,71
/*****************************************************************************
Project : Roboboard
Date : 1/14/2007
Author : Gunter Logemann (C) ALL RIGHTS RESERVED
 
Comments: This project is optimized to work with the Mikrocopter (www.mikrokopter.de)
 
Redistributions of this source code (with or without modifications) or parts
of this sourcode must retain the above copyright notice, this list of
conditions and the following disclaimer.
* Neither the name of the copyright holders nor the names of contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
* The use of this source code permittet for non-commercial use (directly
or indirectly) only.
* Commercial use Is only permitted with our written permission by
Gunter Logemann (gunter@pccon.de)
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
 
Chip type : ATmega8
Program type : Application
Clock frequency : CPUSPEED
*****************************************************************************/
 
 
#define XIDENTIFIER_EXCEPTION 0x00
#define XIDENTIFIER_VERSION 0x01
#define XIDENTIFIER_ANALOG 0x02
 
//---------------------------------------------------------------------------
struct str_VersionInfo
{
unsigned char identifier;
unsigned char majorversion;
unsigned char minorversion;
};
extern struct str_VersionInfo VersionInfo;
 
#define MAJORVERSION 0x00
#define MINORVERSION 0x01
 
//---------------------------------------------------------------------------
struct str_AnalogData
{
unsigned char identifier;
int analog[8];
};
extern struct str_AnalogData AnalogData;
 
//---------------------------------------------------------------------------
struct str_Exception
{
unsigned char identifier;
unsigned char errorcode;
};
extern struct str_Exception Exception;
 
#define ERRORCODE_NOTIMPLEMENTED 0x00
#define ERRORCODE_WRONGPARAMETER 0x01
 
/Microsoft Robotics Studio/Roboboard/Makefile
0,0 → 1,90
PRG = main
OBJ = main.o \
MCU_TARGET = atmega8
OPTIMIZE = -O1
 
DEFS =
LIBS =
 
# You should not have to change anything below here.
 
CC = avr-gcc
 
# Override is only needed by avr-lib build system.
 
override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
override LDFLAGS = -Wl,-Map,$(PRG).map
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
 
all: $(PRG).elf lst text eeprom
 
$(PRG).elf: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
 
clean:
rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak
rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
 
lst: $(PRG).lst
 
%.lst: %.elf
$(OBJDUMP) -h -S $< > $@
 
# Rules for building the .text rom images
 
text: hex bin srec
 
hex: $(PRG).hex
bin: $(PRG).bin
srec: $(PRG).srec
 
%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
 
%.srec: %.elf
$(OBJCOPY) -j .text -j .data -O srec $< $@
 
%.bin: %.elf
$(OBJCOPY) -j .text -j .data -O binary $< $@
 
# Rules for building the .eeprom rom images
 
eeprom: ehex ebin esrec
 
ehex: $(PRG)_eeprom.hex
ebin: $(PRG)_eeprom.bin
esrec: $(PRG)_eeprom.srec
 
%_eeprom.hex: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@
 
%_eeprom.srec: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@
 
%_eeprom.bin: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@
 
# Every thing below here is used by avr-libc's build system and can be ignored
# by the casual user.
 
FIG2DEV = fig2dev
EXTRA_CLEAN_FILES = *.bin *.srec
 
dox: eps png pdf
 
eps: $(PRG).eps
png: $(PRG).png
pdf: $(PRG).pdf
 
%.eps: %.fig
$(FIG2DEV) -L eps $< $@
 
%.pdf: %.fig
$(FIG2DEV) -L pdf $< $@
 
%.png: %.fig
$(FIG2DEV) -L png $< $@
 
/Microsoft Robotics Studio/Roboboard/RoboBoard.pnproj
0,0 → 1,0
<Project name="MKvideooverlay"><File path="Main.c"></File><File path="Main.h"></File><File path="main.hex"></File><File path="main_eeprom.hex"></File><File path="Makefile"></File><File path="overlay.sch"></File><File path="StdDefines.h"></File><File path="main.lst"></File></Project>
/Microsoft Robotics Studio/Roboboard/RoboBoard.pnps
0,0 → 1,0
<pd><ViewState><e p="MKvideooverlay" x="true"></e></ViewState></pd>
/Microsoft Robotics Studio/Roboboard/StdDefines.h
0,0 → 1,51
/*******************************************************************************
File: StdDefines.h
 
Standard definitions file.
 
Created: 1.00 04/14/03 GND Gary Dion
 
Version: 1.00
 
Revisions: 1.00 04/14/03 GND Initial Release.
*******************************************************************************/
 
/* General use definitions */
# define TRUE (1)
# define FALSE (0)
 
# define ON (1)
# define OFF (0)
 
# define HI (1)
# define LO (0)
 
/* General status constants. */
# define PASS (1)
# define OK (PASS)
# define FAIL (0)
# define ERROR (FAIL)
 
/* Define PUBLIC as extern. */
#define PUBLIC extern
 
/* Define PRIVATE as static. */
#define PRIVATE static
 
/* Scalar type definitions */
typedef char INT8;
typedef unsigned char UINT8;
typedef unsigned char UCHAR;
typedef unsigned char BOOL;
 
typedef int INT16;
typedef unsigned int UINT16;
typedef unsigned int UINT;
 
typedef short SHORT;
typedef unsigned short USHORT;
 
typedef long INT32;
typedef unsigned long UINT32;
typedef unsigned long ULONG;
typedef long STATUS;
/Microsoft Robotics Studio/Roboboard/main.bin
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/Roboboard/main.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/Roboboard/main.hex
0,0 → 1,74
:1000000012C02CC02BC02AC029C028C027C026C0BF
:1000100025C024C023C05CC021C025C01FC01EC095
:100020001DC01CC01BC011241FBECFE5D4E0DEBF25
:10003000CDBF10E0A0E6B0E0EEE7F4E002C005902E
:100040000D92A236B107D9F711E0A2E6B0E001C0E7
:100050001D92AC34B107E1F7D4D110C2D1CF8CB925
:1000600080E090E008951F920F920FB60F92112436
:100070008F939F93EF93FF93809160008823D9F42F
:1000800080916C0090916D00019690936D0080932B
:100090006C00FC01E952FF4FE081ED3019F084362D
:1000A000910539F410926D0010926C0081E08093FC
:1000B0006000ECB904C010926D0010926C00FF91CA
:1000C000EF919F918F910F900FBE0F901F901895F9
:1000D0001F920F920FB60F9211242F933F934F93BD
:1000E0005F936F937F938F939F93AF93BF93EF93A0
:1000F000FF938CB18093620050916700543610F0EA
:1001000010926600809162008D3009F056C0809197
:100110006600823009F051C010926600652F772783
:10012000FB01329723E730E0E20FF31F4081CB0160
:100130000197DC01A20FB31F2C9180916A0090916E
:100140006B00841B9109821B91099F7090936B0037
:1001500080936A009C010024220F331F001C220F91
:10016000331F001C232F302D235C209369008F73D5
:10017000382F335C309368008081281729F48C91E4
:10018000381711F491E006C0809164008F5F80936E
:10019000640090E080916300882309F06CC099238B
:1001A00009F469C081E08093630050936500FB010E
:1001B000ED58FF4F8DE080835EC0809166008130F6
:1001C00001F1813020F0823009F053C035C08091B8
:1001D0006200833239F480916300882319F481E04E
:1001E00080936600809162008093730081E0809329
:1001F000670080916200992790936B0080936A005A
:100200003AC082E08093660080916200E3E7F0E00C
:10021000E50FF11D8083852F8F5F8093670020910C
:10022000620080916A0090916B00820F911D909303
:100230006B0080936A001FC080916200E3E7F0E0EA
:10024000E50FF11D8083543628F4852F8F5F80934E
:10025000670002C0109266002091620080916A00DF
:1002600090916B00820F911D90936B0080936A00B8
:1002700002C010926600FF91EF91BF91AF919F91E4
:100280008F917F916F915F914F913F912F910F903F
:100290000FBE0F901F901895DC01892B29F420E0E8
:1002A00030E0A0E0B0E011C020E030E040E050E0FD
:1002B00067ED70E0FA01E60FF71F8081280F311D0E
:1002C0004F5F5F4FA417B507A9F73F70C90100241E
:1002D000880F991F001C880F991F001C892F902DD3
:1002E000835C47ED50E0FD01E40FF51F808311961C
:1002F0002F73235CFD01E40FF51F20831196A40FDB
:10030000B51F8DE08C93109260008091D7008CB95E
:100310000895FF920F931F93CF93DF938A01722F5B
:1003200093E29093D7006093D8008093D900222362
:1003300019F4A3E0B0E05DC0A3E0B0E060E0C7ED79
:10034000D0E0F801E60FF11D90816F5F715019F454
:10035000FF2440E00FC0F801E60FF11D40816F5F00
:10036000715011F4FF2406C0F801E60FF11DF08072
:100370006F5F7150892F86958695835CFD01EC0F28
:10038000FD1F8083FD0131965527892F99278370A2
:10039000907082959295907F9827807F98279A01F8
:1003A000329522952F7023273F702327822B835C61
:1003B000EC0FFD1F8083FD0132964F705070440F8B
:1003C000551F440F551F8F2D8295869586958370F6
:1003D000842B835CEC0FFD1F8083FD0133968F2DF2
:1003E0008F73835CEC0FFD1F80831496772309F0D5
:1003F000A8CFCD0151DFDF91CF911F910F91FF90D9
:1004000008950F931F93CF93DF9381E080936E0045
:1004100010926F008093700082E080933B011092F5
:10042000710080E182BB11BA1BB888ED8AB986E8F9
:1004300080BD10BC8BE089B97894109263000EE601
:1004400010E0C1E7D0E0809163008130E1F7809156
:100450007600813019F0823039F40DC023E0A80114
:1004600060E088E556DF07C01092720023E0AE011D
:0E04700060E088E54EDF10926300E5CFFFCF1D
:02047E0001007B
:00000001FF
/Microsoft Robotics Studio/Roboboard/main.lst
0,0 → 1,777
 
main.elf: file format elf32-avr
 
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000047e 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000002 00800060 0000047e 00000512 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 000000ea 00800062 00800062 00000514 2**0
ALLOC
3 .stab 00000378 00000000 00000000 00000514 2**2
CONTENTS, READONLY, DEBUGGING
4 .stabstr 00000071 00000000 00000000 0000088c 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_aranges 00000020 00000000 00000000 000008fd 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 0000011d 00000000 00000000 0000091d 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 000003bf 00000000 00000000 00000a3a 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 0000011c 00000000 00000000 00000df9 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 00000367 00000000 00000000 00000f15 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_frame 00000070 00000000 00000000 0000127c 2**2
CONTENTS, READONLY, DEBUGGING
11 .debug_str 000001dc 00000000 00000000 000012ec 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_loc 00000220 00000000 00000000 000014c8 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
 
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end>
2: 2c c0 rjmp .+88 ; 0x5c <__bad_interrupt>
4: 2b c0 rjmp .+86 ; 0x5c <__bad_interrupt>
6: 2a c0 rjmp .+84 ; 0x5c <__bad_interrupt>
8: 29 c0 rjmp .+82 ; 0x5c <__bad_interrupt>
a: 28 c0 rjmp .+80 ; 0x5c <__bad_interrupt>
c: 27 c0 rjmp .+78 ; 0x5c <__bad_interrupt>
e: 26 c0 rjmp .+76 ; 0x5c <__bad_interrupt>
10: 25 c0 rjmp .+74 ; 0x5c <__bad_interrupt>
12: 24 c0 rjmp .+72 ; 0x5c <__bad_interrupt>
14: 23 c0 rjmp .+70 ; 0x5c <__bad_interrupt>
16: 5c c0 rjmp .+184 ; 0xd0 <__vector_11>
18: 21 c0 rjmp .+66 ; 0x5c <__bad_interrupt>
1a: 25 c0 rjmp .+74 ; 0x66 <__vector_13>
1c: 1f c0 rjmp .+62 ; 0x5c <__bad_interrupt>
1e: 1e c0 rjmp .+60 ; 0x5c <__bad_interrupt>
20: 1d c0 rjmp .+58 ; 0x5c <__bad_interrupt>
22: 1c c0 rjmp .+56 ; 0x5c <__bad_interrupt>
24: 1b c0 rjmp .+54 ; 0x5c <__bad_interrupt>
 
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
 
00000032 <__do_copy_data>:
32: 10 e0 ldi r17, 0x00 ; 0
34: a0 e6 ldi r26, 0x60 ; 96
36: b0 e0 ldi r27, 0x00 ; 0
38: ee e7 ldi r30, 0x7E ; 126
3a: f4 e0 ldi r31, 0x04 ; 4
3c: 02 c0 rjmp .+4 ; 0x42 <.do_copy_data_start>
 
0000003e <.do_copy_data_loop>:
3e: 05 90 lpm r0, Z+
40: 0d 92 st X+, r0
 
00000042 <.do_copy_data_start>:
42: a2 36 cpi r26, 0x62 ; 98
44: b1 07 cpc r27, r17
46: d9 f7 brne .-10 ; 0x3e <__SP_H__>
 
00000048 <__do_clear_bss>:
48: 11 e0 ldi r17, 0x01 ; 1
4a: a2 e6 ldi r26, 0x62 ; 98
4c: b0 e0 ldi r27, 0x00 ; 0
4e: 01 c0 rjmp .+2 ; 0x52 <.do_clear_bss_start>
 
00000050 <.do_clear_bss_loop>:
50: 1d 92 st X+, r1
 
00000052 <.do_clear_bss_start>:
52: ac 34 cpi r26, 0x4C ; 76
54: b1 07 cpc r27, r17
56: e1 f7 brne .-8 ; 0x50 <.do_clear_bss_loop>
58: d4 d1 rcall .+936 ; 0x402 <main>
5a: 10 c2 rjmp .+1056 ; 0x47c <_exit>
 
0000005c <__bad_interrupt>:
5c: d1 cf rjmp .-94 ; 0x0 <__heap_end>
 
0000005e <uart_putchar>:
struct str_Exception Exception;
 
// --------------------------------------------------------------------------
int uart_putchar (char c)
{
5e: 8c b9 out 0x0c, r24 ; 12
UDR = c;
return (0);
}
60: 80 e0 ldi r24, 0x00 ; 0
62: 90 e0 ldi r25, 0x00 ; 0
64: 08 95 ret
 
00000066 <__vector_13>:
 
// --------------------------------------------------------------------------
SIGNAL(SIG_UART_TRANS)
{
66: 1f 92 push r1
68: 0f 92 push r0
6a: 0f b6 in r0, 0x3f ; 63
6c: 0f 92 push r0
6e: 11 24 eor r1, r1
70: 8f 93 push r24
72: 9f 93 push r25
74: ef 93 push r30
76: ff 93 push r31
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
78: 80 91 60 00 lds r24, 0x0060
7c: 88 23 and r24, r24
7e: d9 f4 brne .+54 ; 0xb6 <__vector_13+0x50>
{
ptr++; // die [0] wurde schon gesendet
80: 80 91 6c 00 lds r24, 0x006C
84: 90 91 6d 00 lds r25, 0x006D
88: 01 96 adiw r24, 0x01 ; 1
8a: 90 93 6d 00 sts 0x006D, r25
8e: 80 93 6c 00 sts 0x006C, r24
tmp_tx = TxdBuffer[ptr];
92: fc 01 movw r30, r24
94: e9 52 subi r30, 0x29 ; 41
96: ff 4f sbci r31, 0xFF ; 255
98: e0 81 ld r30, Z
if((tmp_tx == '\r') || (ptr == MAX_TX_BUF))
9a: ed 30 cpi r30, 0x0D ; 13
9c: 19 f0 breq .+6 ; 0xa4 <__vector_13+0x3e>
9e: 84 36 cpi r24, 0x64 ; 100
a0: 91 05 cpc r25, r1
a2: 39 f4 brne .+14 ; 0xb2 <__vector_13+0x4c>
{
ptr = 0;
a4: 10 92 6d 00 sts 0x006D, r1
a8: 10 92 6c 00 sts 0x006C, r1
UebertragungAbgeschlossen = 1;
ac: 81 e0 ldi r24, 0x01 ; 1
ae: 80 93 60 00 sts 0x0060, r24
}
UDR = tmp_tx;
b2: ec b9 out 0x0c, r30 ; 12
b4: 04 c0 rjmp .+8 ; 0xbe <__vector_13+0x58>
}
else ptr = 0;
b6: 10 92 6d 00 sts 0x006D, r1
ba: 10 92 6c 00 sts 0x006C, r1
be: ff 91 pop r31
c0: ef 91 pop r30
c2: 9f 91 pop r25
c4: 8f 91 pop r24
c6: 0f 90 pop r0
c8: 0f be out 0x3f, r0 ; 63
ca: 0f 90 pop r0
cc: 1f 90 pop r1
ce: 18 95 reti
 
000000d0 <__vector_11>:
}
 
// --------------------------------------------------------------------------
SIGNAL(SIG_UART_RECV)
{
d0: 1f 92 push r1
d2: 0f 92 push r0
d4: 0f b6 in r0, 0x3f ; 63
d6: 0f 92 push r0
d8: 11 24 eor r1, r1
da: 2f 93 push r18
dc: 3f 93 push r19
de: 4f 93 push r20
e0: 5f 93 push r21
e2: 6f 93 push r22
e4: 7f 93 push r23
e6: 8f 93 push r24
e8: 9f 93 push r25
ea: af 93 push r26
ec: bf 93 push r27
ee: ef 93 push r30
f0: ff 93 push r31
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
f2: 8c b1 in r24, 0x0c ; 12
f4: 80 93 62 00 sts 0x0062, r24
 
if(buf_ptr >= MAX_RX_BUF)
f8: 50 91 67 00 lds r21, 0x0067
fc: 54 36 cpi r21, 0x64 ; 100
fe: 10 f0 brcs .+4 ; 0x104 <__vector_11+0x34>
UartState = 0;
100: 10 92 66 00 sts 0x0066, r1
if(SioTmp == '\r' && UartState == 2)
104: 80 91 62 00 lds r24, 0x0062
108: 8d 30 cpi r24, 0x0D ; 13
10a: 09 f0 breq .+2 ; 0x10e <__vector_11+0x3e>
10c: 56 c0 rjmp .+172 ; 0x1ba <__vector_11+0xea>
10e: 80 91 66 00 lds r24, 0x0066
112: 82 30 cpi r24, 0x02 ; 2
114: 09 f0 breq .+2 ; 0x118 <__vector_11+0x48>
116: 51 c0 rjmp .+162 ; 0x1ba <__vector_11+0xea>
{
UartState = 0;
118: 10 92 66 00 sts 0x0066, r1
crc -= RxdBuffer[buf_ptr-2];
11c: 65 2f mov r22, r21
11e: 77 27 eor r23, r23
120: fb 01 movw r30, r22
122: 32 97 sbiw r30, 0x02 ; 2
124: 23 e7 ldi r18, 0x73 ; 115
126: 30 e0 ldi r19, 0x00 ; 0
128: e2 0f add r30, r18
12a: f3 1f adc r31, r19
12c: 40 81 ld r20, Z
crc -= RxdBuffer[buf_ptr-1];
12e: cb 01 movw r24, r22
130: 01 97 sbiw r24, 0x01 ; 1
132: dc 01 movw r26, r24
134: a2 0f add r26, r18
136: b3 1f adc r27, r19
138: 2c 91 ld r18, X
crc %= 4096;
13a: 80 91 6a 00 lds r24, 0x006A
13e: 90 91 6b 00 lds r25, 0x006B
142: 84 1b sub r24, r20
144: 91 09 sbc r25, r1
146: 82 1b sub r24, r18
148: 91 09 sbc r25, r1
14a: 9f 70 andi r25, 0x0F ; 15
14c: 90 93 6b 00 sts 0x006B, r25
150: 80 93 6a 00 sts 0x006A, r24
crc1 = '=' + crc / 64;
154: 9c 01 movw r18, r24
156: 00 24 eor r0, r0
158: 22 0f add r18, r18
15a: 33 1f adc r19, r19
15c: 00 1c adc r0, r0
15e: 22 0f add r18, r18
160: 33 1f adc r19, r19
162: 00 1c adc r0, r0
164: 23 2f mov r18, r19
166: 30 2d mov r19, r0
168: 23 5c subi r18, 0xC3 ; 195
16a: 20 93 69 00 sts 0x0069, r18
crc2 = '=' + crc % 64;
16e: 8f 73 andi r24, 0x3F ; 63
170: 38 2f mov r19, r24
172: 33 5c subi r19, 0xC3 ; 195
174: 30 93 68 00 sts 0x0068, r19
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1]))
178: 80 81 ld r24, Z
17a: 28 17 cp r18, r24
17c: 29 f4 brne .+10 ; 0x188 <__vector_11+0xb8>
17e: 8c 91 ld r24, X
180: 38 17 cp r19, r24
182: 11 f4 brne .+4 ; 0x188 <__vector_11+0xb8>
184: 91 e0 ldi r25, 0x01 ; 1
186: 06 c0 rjmp .+12 ; 0x194 <__vector_11+0xc4>
{
CrcOkay = 1;
}
else
{
CrcOkay = 0;
CntCrcError++;
188: 80 91 64 00 lds r24, 0x0064
18c: 8f 5f subi r24, 0xFF ; 255
18e: 80 93 64 00 sts 0x0064, r24
192: 90 e0 ldi r25, 0x00 ; 0
}
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
194: 80 91 63 00 lds r24, 0x0063
198: 88 23 and r24, r24
19a: 09 f0 breq .+2 ; 0x19e <__vector_11+0xce>
19c: 6c c0 rjmp .+216 ; 0x276 <__vector_11+0x1a6>
19e: 99 23 and r25, r25
1a0: 09 f4 brne .+2 ; 0x1a4 <__vector_11+0xd4>
1a2: 69 c0 rjmp .+210 ; 0x276 <__vector_11+0x1a6>
{
NeuerDatensatzEmpfangen = 1;
1a4: 81 e0 ldi r24, 0x01 ; 1
1a6: 80 93 63 00 sts 0x0063, r24
AnzahlEmpfangsBytes = buf_ptr;
1aa: 50 93 65 00 sts 0x0065, r21
RxdBuffer[buf_ptr] = '\r';
1ae: fb 01 movw r30, r22
1b0: ed 58 subi r30, 0x8D ; 141
1b2: ff 4f sbci r31, 0xFF ; 255
1b4: 8d e0 ldi r24, 0x0D ; 13
1b6: 80 83 st Z, r24
1b8: 5e c0 rjmp .+188 ; 0x276 <__vector_11+0x1a6>
}
}
else
switch(UartState)
1ba: 80 91 66 00 lds r24, 0x0066
1be: 81 30 cpi r24, 0x01 ; 1
1c0: 01 f1 breq .+64 ; 0x202 <__vector_11+0x132>
1c2: 81 30 cpi r24, 0x01 ; 1
1c4: 20 f0 brcs .+8 ; 0x1ce <__vector_11+0xfe>
1c6: 82 30 cpi r24, 0x02 ; 2
1c8: 09 f0 breq .+2 ; 0x1cc <__vector_11+0xfc>
1ca: 53 c0 rjmp .+166 ; 0x272 <__vector_11+0x1a2>
1cc: 35 c0 rjmp .+106 ; 0x238 <__vector_11+0x168>
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
1ce: 80 91 62 00 lds r24, 0x0062
1d2: 83 32 cpi r24, 0x23 ; 35
1d4: 39 f4 brne .+14 ; 0x1e4 <__vector_11+0x114>
1d6: 80 91 63 00 lds r24, 0x0063
1da: 88 23 and r24, r24
1dc: 19 f4 brne .+6 ; 0x1e4 <__vector_11+0x114>
1de: 81 e0 ldi r24, 0x01 ; 1
1e0: 80 93 66 00 sts 0x0066, r24
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
1e4: 80 91 62 00 lds r24, 0x0062
1e8: 80 93 73 00 sts 0x0073, r24
1ec: 81 e0 ldi r24, 0x01 ; 1
1ee: 80 93 67 00 sts 0x0067, r24
crc = SioTmp;
1f2: 80 91 62 00 lds r24, 0x0062
1f6: 99 27 eor r25, r25
1f8: 90 93 6b 00 sts 0x006B, r25
1fc: 80 93 6a 00 sts 0x006A, r24
200: 3a c0 rjmp .+116 ; 0x276 <__vector_11+0x1a6>
break;
case 1: // Adresse auswerten
UartState++;
202: 82 e0 ldi r24, 0x02 ; 2
204: 80 93 66 00 sts 0x0066, r24
RxdBuffer[buf_ptr++] = SioTmp;
208: 80 91 62 00 lds r24, 0x0062
20c: e3 e7 ldi r30, 0x73 ; 115
20e: f0 e0 ldi r31, 0x00 ; 0
210: e5 0f add r30, r21
212: f1 1d adc r31, r1
214: 80 83 st Z, r24
216: 85 2f mov r24, r21
218: 8f 5f subi r24, 0xFF ; 255
21a: 80 93 67 00 sts 0x0067, r24
crc += SioTmp;
21e: 20 91 62 00 lds r18, 0x0062
222: 80 91 6a 00 lds r24, 0x006A
226: 90 91 6b 00 lds r25, 0x006B
22a: 82 0f add r24, r18
22c: 91 1d adc r25, r1
22e: 90 93 6b 00 sts 0x006B, r25
232: 80 93 6a 00 sts 0x006A, r24
236: 1f c0 rjmp .+62 ; 0x276 <__vector_11+0x1a6>
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
238: 80 91 62 00 lds r24, 0x0062
23c: e3 e7 ldi r30, 0x73 ; 115
23e: f0 e0 ldi r31, 0x00 ; 0
240: e5 0f add r30, r21
242: f1 1d adc r31, r1
244: 80 83 st Z, r24
if(buf_ptr < MAX_RX_BUF) buf_ptr++;
246: 54 36 cpi r21, 0x64 ; 100
248: 28 f4 brcc .+10 ; 0x254 <__vector_11+0x184>
24a: 85 2f mov r24, r21
24c: 8f 5f subi r24, 0xFF ; 255
24e: 80 93 67 00 sts 0x0067, r24
252: 02 c0 rjmp .+4 ; 0x258 <__vector_11+0x188>
else UartState = 0;
254: 10 92 66 00 sts 0x0066, r1
crc += SioTmp;
258: 20 91 62 00 lds r18, 0x0062
25c: 80 91 6a 00 lds r24, 0x006A
260: 90 91 6b 00 lds r25, 0x006B
264: 82 0f add r24, r18
266: 91 1d adc r25, r1
268: 90 93 6b 00 sts 0x006B, r25
26c: 80 93 6a 00 sts 0x006A, r24
270: 02 c0 rjmp .+4 ; 0x276 <__vector_11+0x1a6>
break;
default:
UartState = 0;
272: 10 92 66 00 sts 0x0066, r1
276: ff 91 pop r31
278: ef 91 pop r30
27a: bf 91 pop r27
27c: af 91 pop r26
27e: 9f 91 pop r25
280: 8f 91 pop r24
282: 7f 91 pop r23
284: 6f 91 pop r22
286: 5f 91 pop r21
288: 4f 91 pop r20
28a: 3f 91 pop r19
28c: 2f 91 pop r18
28e: 0f 90 pop r0
290: 0f be out 0x3f, r0 ; 63
292: 0f 90 pop r0
294: 1f 90 pop r1
296: 18 95 reti
 
00000298 <AddCRC>:
break;
}
}
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
298: dc 01 movw r26, r24
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
29a: 89 2b or r24, r25
29c: 29 f4 brne .+10 ; 0x2a8 <AddCRC+0x10>
29e: 20 e0 ldi r18, 0x00 ; 0
2a0: 30 e0 ldi r19, 0x00 ; 0
2a2: a0 e0 ldi r26, 0x00 ; 0
2a4: b0 e0 ldi r27, 0x00 ; 0
2a6: 11 c0 rjmp .+34 ; 0x2ca <AddCRC+0x32>
2a8: 20 e0 ldi r18, 0x00 ; 0
2aa: 30 e0 ldi r19, 0x00 ; 0
2ac: 40 e0 ldi r20, 0x00 ; 0
2ae: 50 e0 ldi r21, 0x00 ; 0
2b0: 67 ed ldi r22, 0xD7 ; 215
2b2: 70 e0 ldi r23, 0x00 ; 0
{
tmpCRC += TxdBuffer[i];
2b4: fa 01 movw r30, r20
2b6: e6 0f add r30, r22
2b8: f7 1f adc r31, r23
2ba: 80 81 ld r24, Z
2bc: 28 0f add r18, r24
2be: 31 1d adc r19, r1
2c0: 4f 5f subi r20, 0xFF ; 255
2c2: 5f 4f sbci r21, 0xFF ; 255
2c4: a4 17 cp r26, r20
2c6: b5 07 cpc r27, r21
2c8: a9 f7 brne .-22 ; 0x2b4 <AddCRC+0x1c>
}
tmpCRC %= 4096;
2ca: 3f 70 andi r19, 0x0F ; 15
TxdBuffer[i++] = '=' + tmpCRC / 64;
2cc: c9 01 movw r24, r18
2ce: 00 24 eor r0, r0
2d0: 88 0f add r24, r24
2d2: 99 1f adc r25, r25
2d4: 00 1c adc r0, r0
2d6: 88 0f add r24, r24
2d8: 99 1f adc r25, r25
2da: 00 1c adc r0, r0
2dc: 89 2f mov r24, r25
2de: 90 2d mov r25, r0
2e0: 83 5c subi r24, 0xC3 ; 195
2e2: 47 ed ldi r20, 0xD7 ; 215
2e4: 50 e0 ldi r21, 0x00 ; 0
2e6: fd 01 movw r30, r26
2e8: e4 0f add r30, r20
2ea: f5 1f adc r31, r21
2ec: 80 83 st Z, r24
2ee: 11 96 adiw r26, 0x01 ; 1
TxdBuffer[i++] = '=' + tmpCRC % 64;
2f0: 2f 73 andi r18, 0x3F ; 63
2f2: 23 5c subi r18, 0xC3 ; 195
2f4: fd 01 movw r30, r26
2f6: e4 0f add r30, r20
2f8: f5 1f adc r31, r21
2fa: 20 83 st Z, r18
2fc: 11 96 adiw r26, 0x01 ; 1
TxdBuffer[i++] = '\r';
2fe: a4 0f add r26, r20
300: b5 1f adc r27, r21
302: 8d e0 ldi r24, 0x0D ; 13
304: 8c 93 st X, r24
UebertragungAbgeschlossen = 0;
306: 10 92 60 00 sts 0x0060, r1
UDR = TxdBuffer[0];
30a: 80 91 d7 00 lds r24, 0x00D7
30e: 8c b9 out 0x0c, r24 ; 12
310: 08 95 ret
 
00000312 <SendOutData>:
}
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
312: ff 92 push r15
314: 0f 93 push r16
316: 1f 93 push r17
318: cf 93 push r28
31a: df 93 push r29
31c: 8a 01 movw r16, r20
31e: 72 2f mov r23, r18
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
TxdBuffer[pt++] = '#'; // Startzeichen
320: 93 e2 ldi r25, 0x23 ; 35
322: 90 93 d7 00 sts 0x00D7, r25
TxdBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
326: 60 93 d8 00 sts 0x00D8, r22
TxdBuffer[pt++] = cmd; // Commando
32a: 80 93 d9 00 sts 0x00D9, r24
 
while(len)
32e: 22 23 and r18, r18
330: 19 f4 brne .+6 ; 0x338 <SendOutData+0x26>
332: a3 e0 ldi r26, 0x03 ; 3
334: b0 e0 ldi r27, 0x00 ; 0
336: 5d c0 rjmp .+186 ; 0x3f2 <SendOutData+0xe0>
338: a3 e0 ldi r26, 0x03 ; 3
33a: b0 e0 ldi r27, 0x00 ; 0
33c: 60 e0 ldi r22, 0x00 ; 0
33e: c7 ed ldi r28, 0xD7 ; 215
340: d0 e0 ldi r29, 0x00 ; 0
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
342: f8 01 movw r30, r16
344: e6 0f add r30, r22
346: f1 1d adc r31, r1
348: 90 81 ld r25, Z
34a: 6f 5f subi r22, 0xFF ; 255
34c: 71 50 subi r23, 0x01 ; 1
if(len) { b = snd[ptr++]; len--;} else b = 0;
34e: 19 f4 brne .+6 ; 0x356 <SendOutData+0x44>
350: ff 24 eor r15, r15
352: 40 e0 ldi r20, 0x00 ; 0
354: 0f c0 rjmp .+30 ; 0x374 <SendOutData+0x62>
356: f8 01 movw r30, r16
358: e6 0f add r30, r22
35a: f1 1d adc r31, r1
35c: 40 81 ld r20, Z
35e: 6f 5f subi r22, 0xFF ; 255
360: 71 50 subi r23, 0x01 ; 1
if(len) { c = snd[ptr++]; len--;} else c = 0;
362: 11 f4 brne .+4 ; 0x368 <SendOutData+0x56>
364: ff 24 eor r15, r15
366: 06 c0 rjmp .+12 ; 0x374 <SendOutData+0x62>
368: f8 01 movw r30, r16
36a: e6 0f add r30, r22
36c: f1 1d adc r31, r1
36e: f0 80 ld r15, Z
370: 6f 5f subi r22, 0xFF ; 255
372: 71 50 subi r23, 0x01 ; 1
TxdBuffer[pt++] = '=' + (a >> 2);
374: 89 2f mov r24, r25
376: 86 95 lsr r24
378: 86 95 lsr r24
37a: 83 5c subi r24, 0xC3 ; 195
37c: fd 01 movw r30, r26
37e: ec 0f add r30, r28
380: fd 1f adc r31, r29
382: 80 83 st Z, r24
384: fd 01 movw r30, r26
386: 31 96 adiw r30, 0x01 ; 1
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
388: 55 27 eor r21, r21
38a: 89 2f mov r24, r25
38c: 99 27 eor r25, r25
38e: 83 70 andi r24, 0x03 ; 3
390: 90 70 andi r25, 0x00 ; 0
392: 82 95 swap r24
394: 92 95 swap r25
396: 90 7f andi r25, 0xF0 ; 240
398: 98 27 eor r25, r24
39a: 80 7f andi r24, 0xF0 ; 240
39c: 98 27 eor r25, r24
39e: 9a 01 movw r18, r20
3a0: 32 95 swap r19
3a2: 22 95 swap r18
3a4: 2f 70 andi r18, 0x0F ; 15
3a6: 23 27 eor r18, r19
3a8: 3f 70 andi r19, 0x0F ; 15
3aa: 23 27 eor r18, r19
3ac: 82 2b or r24, r18
3ae: 83 5c subi r24, 0xC3 ; 195
3b0: ec 0f add r30, r28
3b2: fd 1f adc r31, r29
3b4: 80 83 st Z, r24
3b6: fd 01 movw r30, r26
3b8: 32 96 adiw r30, 0x02 ; 2
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
3ba: 4f 70 andi r20, 0x0F ; 15
3bc: 50 70 andi r21, 0x00 ; 0
3be: 44 0f add r20, r20
3c0: 55 1f adc r21, r21
3c2: 44 0f add r20, r20
3c4: 55 1f adc r21, r21
3c6: 8f 2d mov r24, r15
3c8: 82 95 swap r24
3ca: 86 95 lsr r24
3cc: 86 95 lsr r24
3ce: 83 70 andi r24, 0x03 ; 3
3d0: 84 2b or r24, r20
3d2: 83 5c subi r24, 0xC3 ; 195
3d4: ec 0f add r30, r28
3d6: fd 1f adc r31, r29
3d8: 80 83 st Z, r24
3da: fd 01 movw r30, r26
3dc: 33 96 adiw r30, 0x03 ; 3
TxdBuffer[pt++] = '=' + ( c & 0x3f);
3de: 8f 2d mov r24, r15
3e0: 8f 73 andi r24, 0x3F ; 63
3e2: 83 5c subi r24, 0xC3 ; 195
3e4: ec 0f add r30, r28
3e6: fd 1f adc r31, r29
3e8: 80 83 st Z, r24
3ea: 14 96 adiw r26, 0x04 ; 4
3ec: 77 23 and r23, r23
3ee: 09 f0 breq .+2 ; 0x3f2 <SendOutData+0xe0>
3f0: a8 cf rjmp .-176 ; 0x342 <SendOutData+0x30>
}
AddCRC(pt);
3f2: cd 01 movw r24, r26
3f4: 51 df rcall .-350 ; 0x298 <AddCRC>
3f6: df 91 pop r29
3f8: cf 91 pop r28
3fa: 1f 91 pop r17
3fc: 0f 91 pop r16
3fe: ff 90 pop r15
400: 08 95 ret
 
00000402 <main>:
}
 
 
//-----------------------------------------------------------------------------
//main
//main execution loop
//-----------------------------------------------------------------------------
int main(void)
{
402: 0f 93 push r16
404: 1f 93 push r17
406: cf 93 push r28
408: df 93 push r29
// int message structures;
VersionInfo.identifier = XIDENTIFIER_VERSION;
40a: 81 e0 ldi r24, 0x01 ; 1
40c: 80 93 6e 00 sts 0x006E, r24
VersionInfo.majorversion = MAJORVERSION;
410: 10 92 6f 00 sts 0x006F, r1
VersionInfo.minorversion = MINORVERSION;
414: 80 93 70 00 sts 0x0070, r24
AnalogData.identifier = XIDENTIFIER_ANALOG;
418: 82 e0 ldi r24, 0x02 ; 2
41a: 80 93 3b 01 sts 0x013B, r24
Exception.identifier = XIDENTIFIER_EXCEPTION;
41e: 10 92 71 00 sts 0x0071, r1
 
// PORT D - unused right now
PORTD = 0x10;
422: 80 e1 ldi r24, 0x10 ; 16
424: 82 bb out 0x12, r24 ; 18
DDRD = 0x00;
426: 11 ba out 0x11, r1 ; 17
 
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART RX/TX interrupt enable
// USART Mode: Asynchronous
// USART Baud rate: 57600
UCSRA=0x00;
428: 1b b8 out 0x0b, r1 ; 11
UCSRB=0xD8;
42a: 88 ed ldi r24, 0xD8 ; 216
42c: 8a b9 out 0x0a, r24 ; 10
UCSRC=0x86;
42e: 86 e8 ldi r24, 0x86 ; 134
430: 80 bd out 0x20, r24 ; 32
#ifdef CPUSPEED_20 //20.000MHz
UBRRH=0x00;
UBRRL=0x15;
#endif
 
#ifdef CPUSPEED_16 //16.000MHz
UBRRH=0x00;
UBRRL=0x10;
#endif
#ifdef CPUSPEED_11059 //11.059MHz
UBRRH=0x00;
432: 10 bc out 0x20, r1 ; 32
UBRRL=0x0B;
434: 8b e0 ldi r24, 0x0B ; 11
436: 89 b9 out 0x09, r24 ; 9
#endif
 
 
// Enable interrupts
sei();
438: 78 94 sei
 
NeuerDatensatzEmpfangen = 0;
43a: 10 92 63 00 sts 0x0063, r1
43e: 0e e6 ldi r16, 0x6E ; 110
440: 10 e0 ldi r17, 0x00 ; 0
442: c1 e7 ldi r28, 0x71 ; 113
444: d0 e0 ldi r29, 0x00 ; 0
 
// main loop
while (1)
{
if(NeuerDatensatzEmpfangen==1) {
446: 80 91 63 00 lds r24, 0x0063
44a: 81 30 cpi r24, 0x01 ; 1
44c: e1 f7 brne .-8 ; 0x446 <main+0x44>
switch(RxdBuffer[3])
44e: 80 91 76 00 lds r24, 0x0076
452: 81 30 cpi r24, 0x01 ; 1
454: 19 f0 breq .+6 ; 0x45c <main+0x5a>
456: 82 30 cpi r24, 0x02 ; 2
458: 39 f4 brne .+14 ; 0x468 <__stack+0x9>
45a: 0d c0 rjmp .+26 ; 0x476 <__stack+0x17>
{
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// version request
case XIDENTIFIER_VERSION:
SendOutData('X',0x00,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
45c: 23 e0 ldi r18, 0x03 ; 3
45e: a8 01 movw r20, r16
460: 60 e0 ldi r22, 0x00 ; 0
462: 88 e5 ldi r24, 0x58 ; 88
464: 56 df rcall .-340 ; 0x312 <SendOutData>
466: 07 c0 rjmp .+14 ; 0x476 <__stack+0x17>
break;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case XIDENTIFIER_ANALOG:
break;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
default:
Exception.errorcode = ERRORCODE_NOTIMPLEMENTED;
468: 10 92 72 00 sts 0x0072, r1
SendOutData('X',0x00,(unsigned char *) &Exception,sizeof(VersionInfo));
46c: 23 e0 ldi r18, 0x03 ; 3
46e: ae 01 movw r20, r28
470: 60 e0 ldi r22, 0x00 ; 0
472: 88 e5 ldi r24, 0x58 ; 88
474: 4e df rcall .-356 ; 0x312 <SendOutData>
}
NeuerDatensatzEmpfangen=0;
476: 10 92 63 00 sts 0x0063, r1
47a: e5 cf rjmp .-54 ; 0x446 <main+0x44>
 
0000047c <_exit>:
47c: ff cf rjmp .-2 ; 0x47c <_exit>
/Microsoft Robotics Studio/Roboboard/main.map
0,0 → 1,372
Archive member included because of file (symbol)
 
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o (exit)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
main.o (__do_copy_data)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
main.o (__do_clear_bss)
 
Allocating common symbols
Common symbol size file
 
VersionInfo 0x3 main.o
Exception 0x2 main.o
RxdBuffer 0x64 main.o
TxdBuffer 0x64 main.o
AnalogData 0x11 main.o
 
Discarded input sections
 
.stabstr 0x00000000 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
 
Memory Configuration
 
Name Origin Length Attributes
text 0x00000000 0x00002000 xr
data 0x00800060 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
*default* 0x00000000 0xffffffff
 
Linker script and memory map
 
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
LOAD main.o
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4\libc.a
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a
 
.hash
*(.hash)
 
.dynsym
*(.dynsym)
 
.dynstr
*(.dynstr)
 
.gnu.version
*(.gnu.version)
 
.gnu.version_d
*(.gnu.version_d)
 
.gnu.version_r
*(.gnu.version_r)
 
.rel.init
*(.rel.init)
 
.rela.init
*(.rela.init)
 
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
 
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
 
.rel.fini
*(.rel.fini)
 
.rela.fini
*(.rela.fini)
 
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
 
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
 
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
 
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
 
.rel.ctors
*(.rel.ctors)
 
.rela.ctors
*(.rela.ctors)
 
.rel.dtors
*(.rel.dtors)
 
.rela.dtors
*(.rela.dtors)
 
.rel.got
*(.rel.got)
 
.rela.got
*(.rela.got)
 
.rel.bss
*(.rel.bss)
 
.rela.bss
*(.rela.bss)
 
.rel.plt
*(.rel.plt)
 
.rela.plt
*(.rela.plt)
 
.text 0x00000000 0x47e
*(.vectors)
.vectors 0x00000000 0x26 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
0x00000000 __vectors
0x00000000 __vector_default
*(.vectors)
*(.progmem.gcc*)
*(.progmem*)
0x00000026 . = ALIGN (0x2)
0x00000026 __trampolines_start = .
*(.trampolines)
.trampolines 0x00000026 0x0 linker stubs
*(.trampolines*)
0x00000026 __trampolines_end = .
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
0x00000026 __ctors_start = .
*(.ctors)
0x00000026 __ctors_end = .
0x00000026 __dtors_start = .
*(.dtors)
0x00000026 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
.init0 0x00000026 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
0x00000026 __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
.init2 0x00000026 0xc c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
*(.init2)
*(.init3)
*(.init3)
*(.init4)
.init4 0x00000032 0x16 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
0x00000032 __do_copy_data
.init4 0x00000048 0x10 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
0x00000048 __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
*(.init6)
*(.init6)
*(.init7)
*(.init7)
*(.init8)
*(.init8)
*(.init9)
.init9 0x00000058 0x4 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
*(.init9)
*(.text)
.text 0x0000005c 0x2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
0x0000005c __vector_1
0x0000005c __vector_12
0x0000005c __bad_interrupt
0x0000005c __vector_6
0x0000005c __vector_3
0x0000005c __vector_17
0x0000005c __vector_7
0x0000005c __vector_5
0x0000005c __vector_4
0x0000005c __vector_9
0x0000005c __vector_2
0x0000005c __vector_15
0x0000005c __vector_8
0x0000005c __vector_14
0x0000005c __vector_10
0x0000005c __vector_16
0x0000005c __vector_18
.text 0x0000005e 0x41e main.o
0x000000d0 __vector_11
0x00000066 __vector_13
0x00000298 AddCRC
0x00000402 main
0x00000312 SendOutData
0x0000005e uart_putchar
.text 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
.text 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
.text 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
0x0000047c . = ALIGN (0x2)
*(.text.*)
.text.libgcc 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
.text.libgcc 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
.text.libgcc 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
0x0000047c . = ALIGN (0x2)
*(.fini9)
.fini9 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
0x0000047c exit
0x0000047c _exit
*(.fini9)
*(.fini8)
*(.fini8)
*(.fini7)
*(.fini7)
*(.fini6)
*(.fini6)
*(.fini5)
*(.fini5)
*(.fini4)
*(.fini4)
*(.fini3)
*(.fini3)
*(.fini2)
*(.fini2)
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x0000047c 0x2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
*(.fini0)
0x0000047e _etext = .
 
.data 0x00800060 0x2 load address 0x0000047e
0x00800060 PROVIDE (__data_start, .)
*(.data)
.data 0x00800060 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
.data 0x00800060 0x1 main.o
0x00800060 UebertragungAbgeschlossen
.data 0x00800061 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
.data 0x00800061 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
.data 0x00800061 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
*(.data*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.d*)
0x00800062 . = ALIGN (0x2)
*fill* 0x00800061 0x1 00
0x00800062 _edata = .
0x00800062 PROVIDE (__data_end, .)
 
.bss 0x00800062 0xea
0x00800062 PROVIDE (__bss_start, .)
*(.bss)
.bss 0x00800062 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
.bss 0x00800062 0xc main.o
0x00800062 SioTmp
0x00800063 NeuerDatensatzEmpfangen
0x00800064 CntCrcError
0x00800065 AnzahlEmpfangsBytes
.bss 0x0080006e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
.bss 0x0080006e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
.bss 0x0080006e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
*(.bss*)
*(COMMON)
COMMON 0x0080006e 0xde main.o
0x0080006e VersionInfo
0x00800071 Exception
0x00800073 RxdBuffer
0x008000d7 TxdBuffer
0x0080013b AnalogData
0x0080014c PROVIDE (__bss_end, .)
0x0000047e __data_load_start = LOADADDR (.data)
0x00000480 __data_load_end = (__data_load_start + SIZEOF (.data))
 
.noinit 0x0080014c 0x0
0x0080014c PROVIDE (__noinit_start, .)
*(.noinit*)
0x0080014c PROVIDE (__noinit_end, .)
0x0080014c _end = .
0x0080014c PROVIDE (__heap_start, .)
 
.eeprom 0x00810000 0x0
*(.eeprom*)
0x00810000 __eeprom_end = .
 
.stab 0x00000000 0x378
*(.stab)
.stab 0x00000000 0x378 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
 
.stabstr 0x00000000 0x71
*(.stabstr)
.stabstr 0x00000000 0x71 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
 
.stab.excl
*(.stab.excl)
 
.stab.exclstr
*(.stab.exclstr)
 
.stab.index
*(.stab.index)
 
.stab.indexstr
*(.stab.indexstr)
 
.comment
*(.comment)
 
.debug
*(.debug)
 
.line
*(.line)
 
.debug_srcinfo
*(.debug_srcinfo)
 
.debug_sfnames
*(.debug_sfnames)
 
.debug_aranges 0x00000000 0x20
*(.debug_aranges)
.debug_aranges
0x00000000 0x20 main.o
 
.debug_pubnames
0x00000000 0x11d
*(.debug_pubnames)
.debug_pubnames
0x00000000 0x11d main.o
 
.debug_info 0x00000000 0x3bf
*(.debug_info)
.debug_info 0x00000000 0x3bf main.o
*(.gnu.linkonce.wi.*)
 
.debug_abbrev 0x00000000 0x11c
*(.debug_abbrev)
.debug_abbrev 0x00000000 0x11c main.o
 
.debug_line 0x00000000 0x367
*(.debug_line)
.debug_line 0x00000000 0x367 main.o
 
.debug_frame 0x00000000 0x70
*(.debug_frame)
.debug_frame 0x00000000 0x70 main.o
 
.debug_str 0x00000000 0x1dc
*(.debug_str)
.debug_str 0x00000000 0x1dc main.o
0x236 (size before relaxing)
 
.debug_loc 0x00000000 0x220
*(.debug_loc)
.debug_loc 0x00000000 0x220 main.o
 
.debug_macinfo
*(.debug_macinfo)
OUTPUT(main.elf elf32-avr)
LOAD linker stubs
/Microsoft Robotics Studio/Roboboard/main.srec
0,0 → 1,75
S00C00006D61696E2E7372656373
S113000012C02CC02BC02AC029C028C027C026C0BB
S113001025C024C023C05CC021C025C01FC01EC091
S11300201DC01CC01BC011241FBECFE5D4E0DEBF21
S1130030CDBF10E0A0E6B0E0EEE7F4E002C005902A
S11300400D92A236B107D9F711E0A2E6B0E001C0E3
S11300501D92AC34B107E1F7D4D110C2D1CF8CB921
S113006080E090E008951F920F920FB60F92112432
S11300708F939F93EF93FF93809160008823D9F42B
S113008080916C0090916D00019690936D00809327
S11300906C00FC01E952FF4FE081ED3019F0843629
S11300A0910539F410926D0010926C0081E08093F8
S11300B06000ECB904C010926D0010926C00FF91C6
S11300C0EF919F918F910F900FBE0F901F901895F5
S11300D01F920F920FB60F9211242F933F934F93B9
S11300E05F936F937F938F939F93AF93BF93EF939C
S11300F0FF938CB18093620050916700543610F0E6
S113010010926600809162008D3009F056C0809193
S11301106600823009F051C010926600652F77277F
S1130120FB01329723E730E0E20FF31F4081CB015C
S11301300197DC01A20FB31F2C9180916A0090916A
S11301406B00841B9109821B91099F7090936B0033
S113015080936A009C010024220F331F001C220F8D
S1130160331F001C232F302D235C209369008F73D1
S1130170382F335C309368008081281729F48C91E0
S1130180381711F491E006C0809164008F5F80936A
S1130190640090E080916300882309F06CC0992387
S11301A009F469C081E08093630050936500FB010A
S11301B0ED58FF4F8DE080835EC0809166008130F2
S11301C001F1813020F0823009F053C035C08091B4
S11301D06200833239F480916300882319F481E04A
S11301E080936600809162008093730081E0809325
S11301F0670080916200992790936B0080936A0056
S11302003AC082E08093660080916200E3E7F0E008
S1130210E50FF11D8083852F8F5F80936700209108
S1130220620080916A0090916B00820F911D9093FF
S11302306B0080936A001FC080916200E3E7F0E0E6
S1130240E50FF11D8083543628F4852F8F5F80934A
S1130250670002C0109266002091620080916A00DB
S113026090916B00820F911D90936B0080936A00B4
S113027002C010926600FF91EF91BF91AF919F91E0
S11302808F917F916F915F914F913F912F910F903B
S11302900FBE0F901F901895DC01892B29F420E0E4
S11302A030E0A0E0B0E011C020E030E040E050E0F9
S11302B067ED70E0FA01E60FF71F8081280F311D0A
S11302C04F5F5F4FA417B507A9F73F70C90100241A
S11302D0880F991F001C880F991F001C892F902DCF
S11302E0835C47ED50E0FD01E40FF51F8083119618
S11302F02F73235CFD01E40FF51F20831196A40FD7
S1130300B51F8DE08C93109260008091D7008CB95A
S11303100895FF920F931F93CF93DF938A01722F57
S113032093E29093D7006093D8008093D90022235E
S113033019F4A3E0B0E05DC0A3E0B0E060E0C7ED75
S1130340D0E0F801E60FF11D90816F5F715019F450
S1130350FF2440E00FC0F801E60FF11D40816F5FFC
S1130360715011F4FF2406C0F801E60FF11DF0806E
S11303706F5F7150892F86958695835CFD01EC0F24
S1130380FD1F8083FD0131965527892F992783709E
S1130390907082959295907F9827807F98279A01F4
S11303A0329522952F7023273F702327822B835C5D
S11303B0EC0FFD1F8083FD0132964F705070440F87
S11303C0551F440F551F8F2D8295869586958370F2
S11303D0842B835CEC0FFD1F8083FD0133968F2DEE
S11303E08F73835CEC0FFD1F80831496772309F0D1
S11303F0A8CFCD0151DFDF91CF911F910F91FF90D5
S113040008950F931F93CF93DF9381E080936E0041
S113041010926F008093700082E080933B011092F1
S1130420710080E182BB11BA1BB888ED8AB986E8F5
S113043080BD10BC8BE089B97894109263000EE6FD
S113044010E0C1E7D0E0809163008130E1F7809152
S11304507600813019F0823039F40DC023E0A80110
S113046060E088E556DF07C01092720023E0AE0119
S111047060E088E54EDF10926300E5CFFFCF19
S105047E010077
S9030000FC