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/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/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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/Resources/DssModel.dss
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/ResolveAssemblyReference.cache
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/RoboBoardService.Y2007.M08.Proxy.dll
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/RoboBoardService.Y2007.M08.Proxy.pdb
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/RoboBoardService.Y2007.M08.proxy.csproj.GenerateResource.Cache
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/Robotics.RoboBoard.Properties.Resources.resources
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/Robotics.RoboBoard.Resources.DssModel.dss
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/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/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/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/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/ResolveAssemblyReference.cache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/ResolveAssemblyReference.cache
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/RoboBoardService.Y2007.M08.dll
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/RoboBoardService.Y2007.M08.pdb
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/RoboBoardService.csproj.GenerateResource.Cache
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/Robotics.RoboBoard.Properties.Resources.resources
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/Robotics.RoboBoard.RoboBoardForm.resources
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/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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Control.bmp
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Mk.bmp
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.suo
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Sat.bmp
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
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Sat.ico
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;
}