/Microsoft Robotics Studio/FC source/V68d for MSRS/Flight-Ctrl_MEGA644_V0_90b.hex |
---|
0,0 → 1,1924 |
:100000000C9414020C9431020C9431020C943102C1 |
:100010000C9431020C9431020C9431020C94310294 |
:100020000C9431020C94180D0C9431020C94310292 |
:100030000C942A160C9431020C9431020C94310267 |
:100040000C9431020C9431020C94540C0C94310237 |
:100050000C944A050C9431020C9414050C94310252 |
:100060000C94140E0C9431020C945F150C94310214 |
:100070000C94AF040C9431020C9479040A0A0D001C |
:100080004E65757472616C0048656164696E67489D |
:100090006F6C64000A0D537465756572756E673A0E |
:1000A00020004F4B0A0D000A0D4162676C656963C1 |
:1000B00068204C756674647275636B73656E736FDC |
:1000C000722E2E000A0D42656E75747A652050619D |
:1000D00072616D657465727361747A202564000ABB |
:1000E0000D414343206E69636874206162676567F0 |
:1000F0006C696368656E21000A0D496E69742E2073 |
:10010000454550524F4D3A2047656E65726965729C |
:10011000652044656661756C742D506172616D6512 |
:100120007465722E2E2E000A0D3D3D3D3D3D3D3D38 |
:100130003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DEF |
:100140003D3D3D3D3D3D3D000A0D466C696768748F |
:10015000436F6E74726F6C0A0D48617264776172DE |
:10016000653A25642E25640A0D536F6674776172B3 |
:10017000653A5625642E2564256320002E005261C1 |
:100180006E67653A2533692D253369005374656CB4 |
:100190006C756E673A2025336900536574706F691A |
:1001A0006E74202025336900536572766F2020001D |
:1001B000506F7469343A202025336900506F746998 |
:1001C000333A202025336900506F7469323A202079 |
:1001D00025336900506F7469313A20202533690056 |
:1001E00053746172743A2020202020253569004D17 |
:1001F000657373776572743A2020253569005269FA |
:10020000636874756E673A2020253569004B6F6D01 |
:10021000706173732020202020202000456D7066BF |
:100220002E506567656C3A253569005370616E6EB6 |
:10023000756E673A202025356900486F6368202570 |
:10024000346920282533692900526F6C6C202534CD |
:1002500069202825336929004E69636B202534699C |
:1002600020282533692900414343202D2053656E02 |
:10027000736F720047696572202534692028253321 |
:10028000692900526F6C6C20253469202825336958 |
:1002900029004E69636B202534692028253369299C |
:1002A00000476965722025346920282533692900B3 |
:1002B000526F6C6C20253469202825336929004E43 |
:1002C00069636B2025346920282533692900477923 |
:1002D000726F202D2053656E736F720050333A2574 |
:1002E0003469202050343A253469200050313A25B1 |
:1002F0003469202050323A253469200047733A256A |
:100300003469202047693A25346920004E693A252E |
:1003100034692020526F3A25346920004B373A2542 |
:10032000346920204B383A25346920004B353A2572 |
:10033000346920204B363A25346920004B333A2566 |
:10034000346920204B343A25346920004B313A255A |
:10035000346920204B323A25346920004B6F6D7090 |
:100360006173733A20202025356900526F6C6C3A16 |
:10037000202020202020253569004E69636B3A201B |
:10038000202020202025356900616B742E204C61CF |
:1003900067650048F668656E726567656C756E67BF |
:1003A000004B65696E6520004F6666202020202086 |
:1003B000203A20253569004C756674647275636B4C |
:1003C0003A2025356900536F6C6C486F6568653A53 |
:1003D0002025356900486F6568653A202020202077 |
:1003E000253569002863292048422C20474C0053BA |
:1003F000657474696E673A202564200048573A5640 |
:1004000025642E25642053573A25642E25642563E0 |
:10041000002B2B204D696B726F4B6F7074657220CF |
:100420002B2B005B25695D0011241FBECFEFD0E1AF |
:10043000DEBFCDBF13E0A0E0B1E0E0E8F5E702C029 |
:1004400005900D92A23AB107D9F718E0A2EAB3E0FD |
:1004500001C01D92A13FB107E1F70E9470020C9408 |
:10046000BF3A0C94000022E030E0D9010E94AB3A80 |
:10047000802D863028F082E0D901082E0E94B33A00 |
:1004800099270895FB01282F863008F025E0842F56 |
:100490009927429FD0011124AC59BF4F019724F0F6 |
:1004A00001900E94B33AFACFA2E0B0E0022E0E947F |
:1004B000B33A0895CF93DF93FB01C42FDD27863035 |
:1004C00008F085E0489FD0011124AC59BF4F219717 |
:1004D00024F00E94AB3A0192FACFDF91CF910895B8 |
:1004E0001F93CF93DF9314B815B8189B02C08BE00D |
:1004F00001C08AE08093000181E887B98FEF88B955 |
:100500008BE184B981E085B98AE28AB9579A87EF8D |
:100510008BB984B7877F84BF8091600088618093A6 |
:1005200060001092600080ED97E09093CB03809381 |
:10053000CA03109261041092600410924D08109248 |
:100540004C0810925F0410925E0410925D041092A9 |
:100550005C04809100018A3011F4289801C0289A27 |
:100560000E94BF0D0E944B070E9415160E940E0E9E |
:100570000E944515789410921F068AE58093200604 |
:1005800087E0809321062091000182E690E09F930E |
:100590008F938AE590E09F938F931F921F92822FF3 |
:1005A0006AE00E943B3A892F99279F938F93822F6D |
:1005B0000E943B3A99279F938F9388E491E09F9301 |
:1005C0008F931F920E94B20987E291E09F938F93CD |
:1005D0001F920E94B209299AA1E0B0E00E94AB3AB2 |
:1005E000802D2DB73EB7205F3F4F0FB6F8943EBF2A |
:1005F0000FBE2DBF843409F43FC088EF90E09F9375 |
:100600008F931F920E94B2090E94102410E00F9055 |
:100610000F900F90123049F40E947E2347E464E764 |
:1006200078E082E00E94420202C0133051F40E943E |
:10063000EE2247E464E778E083E00E94420214E09F |
:1006400002C0143010F00E947E2347E464E778E093 |
:10065000812F0E9442021F5F1630E0F283E022E009 |
:1006600030E0D901082E0E94B33A84E42150304092 |
:10067000D901082E0E94B33AC4E0D0E0DE010E9406 |
:10068000AB3A802D853050F08FED90E09F938F93A3 |
:100690001F920E94B2090F900F900F902297DE01D7 |
:1006A0000E94AB3A802D863028F082E0DE01082ED1 |
:1006B0000E94B33A47E464E778E00E945A02DE0100 |
:1006C0000E94AB3A802D863028F082E0DE01082EB1 |
:1006D0000E94B33A99279F938F9384EC90E09F9365 |
:1006E0008F931F920E94B20980917C080F900F9007 |
:1006F0000F900F900F9080FD03C0C8EED3E020C094 |
:1007000087EA90E09F938F931F920E94B20988EE30 |
:1007100093E00E94030DEC010E94B0100F900F9027 |
:100720000F90CE010E940C0D8823D9F382EA90E04D |
:100730009F938F931F920E94B2090F900F900F907A |
:100740000E947821809100018A3011F4289801C01C |
:10075000289A80ED97E09093CB038093CA0388EEAC |
:1007600093E090931A068093190685E5809314060A |
:1007700084E990E09F938F931F920E94B209809129 |
:100780007C080F900F900F9082FF03C088E890E0E4 |
:1007900002C080E890E09F938F931F920E94B2095D |
:1007A0000F900F900F908CE790E09F938F931F9284 |
:1007B0000E94B2090E94F41088E893E190938703A5 |
:1007C000809386030F900F900F908091C70388232A |
:1007D00009F462C01092C7030E94A1240E94312133 |
:1007E000209100012A3011F4289801C0289A8091A4 |
:1007F0000301882321F081508093030110C01092DF |
:10080000B2031092B30310927C0410927B041092F6 |
:100810007E0410927D041092800410927F048091D7 |
:100820005B04882329F080915B04815080935B04F2 |
:100830008091860390918703892B01F585E090E0F4 |
:1008400090938703809386030E94EF1580910503A0 |
:10085000909106038F5F9F4FF9F480916204882383 |
:10086000D9F080E197E29093CB038093CA0380E8AC |
:1008700090E090930603809305030EC08091860359 |
:1008800090918703019790938703809386032A3082 |
:1008900011F4289801C0289A0E947A070E942A0819 |
:1008A000CE010E940C0D882309F48FCF20910903FB |
:1008B00030910A0380918C089927281739079CF4F6 |
:1008C00080910503909106038F5F9F4F61F480E74D |
:1008D00097E19093CB038093CA0380E093E09093D9 |
:1008E00006038093050384E690E00E94030DEC016B |
:1008F0006CCF1F920F920FB60F9211248F939F937C |
:10090000EF93FF93809104018823E1F48091C30366 |
:100910009091C40301969093C4038093C303FC0198 |
:10092000E75DF94FE081ED3019F08639910539F432 |
:100930001092C4031092C30381E080930401E093FA |
:10094000CE0004C01092C4031092C303FF91EF9134 |
:100950009F918F910F900FBE0F901F9018951F922F |
:100960000F920FB60F9211242F938F939F93EF93B3 |
:10097000FF938091CE008093B5039091C203963986 |
:1009800010F01092C1032091B5032D3089F48091AD |
:10099000C103823069F41092C10381E08093B603F1 |
:1009A0009093B703E92FFF27E956F84F208332C011 |
:1009B0008091C1038130A9F0813018F0823041F577 |
:1009C0001EC08091B503833229F58091B603882338 |
:1009D00009F591E09093C1038091B5038093970747 |
:1009E0000BC082E08093C103E92FFF278091B503FC |
:1009F000E956F84F80839F5F9093C2030BC0E92FA5 |
:100A0000FF278091B503E956F84F8083963998F314 |
:100A10001092C103FF91EF919F918F912F910F90B1 |
:100A20000FBE0F901F9018951F920F920FB60F9246 |
:100A300011248F939F93EF93FF938091010188235B |
:100A4000E1F48091BF039091C00301969093C0039D |
:100A50008093BF03FC01EB51FB4FE081ED3019F0B7 |
:100A60008639910539F41092C0031092BF0381E0DA |
:100A700080930101E093C60004C01092C00310925D |
:100A8000BF03FF91EF919F918F910F900FBE0F9039 |
:100A90001F9018951F920F920FB60F9211242F934B |
:100AA0003F934F938F939F93AF93BF93CF93DF93D6 |
:100AB000EF93FF938091C6008093A6034091BA0301 |
:100AC000463910F01092B9038091A6038D3009F0D9 |
:100AD0005CC08091B903823009F057C01092B9030D |
:100AE000A42FBB27FD01E354F94F3081ED01C2541F |
:100AF000D94F28818091BD039091BE03831B91093A |
:100B0000821B91099F709093BE038093BD039C014B |
:100B100096E0369527959A95E1F7235C2093BC03E0 |
:100B2000982F9F73935C9093BB038081281729F4BF |
:100B30008881981711F491E006C08091A9038F5F16 |
:100B40008093A90390E08091A703882309F063C0F4 |
:100B5000992309F460C081E08093A7034093AA031E |
:100B6000A154B94F8DE08C938091C106823509F074 |
:100B700052C088E190E02CE00FB6F894A8958093DD |
:100B800060000FBE2093600046C08091B9038130A1 |
:100B9000D1F0813018F08230E1F52FC08091A603AA |
:100BA0008332C9F58091A7038823A9F591E090933A |
:100BB000B9038091A6038093BF069093BA038091F6 |
:100BC000A603992715C082E08093B903E42FFF277D |
:100BD0008091A603E154F94F80834F5F4093BA039D |
:100BE0002091A6038091BD039091BE03820F911DB9 |
:100BF0009093BE038093BD030EC0E42FFF27809126 |
:100C0000A603E154F94F8083463938F31092B903B3 |
:100C1000E7CF1092B903FF91EF91DF91CF91BF9190 |
:100C2000AF919F918F914F913F912F910F900FBE58 |
:100C30000F901F901895DC0120E030E040E050E07C |
:100C4000E5EEF4E005C08191280F311D4F5F5F4F45 |
:100C50004A175B07C1F73F70C90136E09695879543 |
:100C60003A95E1F7835CFD01EB51FB4F80831196D0 |
:100C70002F73235CFD01EB51FB4F2083AA51BB4F27 |
:100C80008DE08C93109201018091E5048093C60061 |
:100C90000895262FE9E2F6E0DC0103C08D918193EF |
:100CA00021502223D9F7E62FFF27E75DF94F8DE08A |
:100CB000808310920401809129068093CE000895CC |
:100CC000262FE5EEF4E0DC0103C08D9181932150E5 |
:100CD0002223D9F7E62FFF27EB51FB4F8DE08083CE |
:100CE000109201011092B6038091E5048093C60032 |
:100CF0000895EF92FF920F931F93CF93DF937A01A2 |
:100D0000722F93E29093E5046093E6048093E704E6 |
:100D100003E010E060E0A8EEB4E046C0F701E60FA3 |
:100D2000F11D90816F5F715019F4E0E040E00FC059 |
:100D3000F701E60FF11D40816F5F715011F4E0E0A3 |
:100D400006C0F701E60FF11DE0816F5F7150892F3A |
:100D500086958695835C8C935527892F9927837078 |
:100D6000907024E0880F991F2A95E1F79A0194E08A |
:100D7000369527959A95E1F7822B835CED0189835F |
:100D80004F705070440F551F440F551F8E2F829582 |
:100D9000869586958370842B835C8A83EF73E35CEE |
:100DA000EB830C5F1F4F1496772309F0B7CFC80170 |
:100DB0000E941B06DF91CF911F910F91FF90EF9042 |
:100DC00008951F93CF93DF93EC0170E0A22FBB2710 |
:100DD000129748C0E42FFF27E154F94F30814F5F4D |
:100DE000E42FFF27E154F94F50814F5FE42FFF2795 |
:100DF000E154F94F10814F5FE42FFF27E154F94F81 |
:100E000020814F5F842F9927A817B90774F15D538C |
:100E1000FE01E70FF11D3D53330F330F852F8295F0 |
:100E20008F70382B3083613001F1912F9D537F5F9C |
:100E3000FE01E70FF11D71505295507F892F869565 |
:100E40008695582B508363506F3F79F07E5FFE018B |
:100E5000E70FF11D9295990F990F907C2D53922BCE |
:100E600090837F5F662309F0B5CFDF91CF911F910B |
:100E700008951F93182F8A3019F48DE00E943907C6 |
:100E80008091C00085FFFCCF1093C60080E090E009 |
:100E90001F9108950895E1ECF0E098E19083A0ECB3 |
:100EA000B0E08C9182608C938081806880838081A7 |
:100EB000806480838AE28093C400E9ECF0E0908350 |
:100EC000A8ECB0E08C9182608C93808180688083F4 |
:100ED0008081806480838AE290E09093CD0080934B |
:100EE000CC0088EC90E00E94030D90931306809351 |
:100EF0001206089580910101882309F4AAC0809107 |
:100F0000B603882351F080910101882331F060916C |
:100F1000B70387E997E00E9460068091B8038823B1 |
:100F200071F080910101882351F021E04BE755E0F9 |
:100F30006091DC0483E40E9479061092B8038091EA |
:100F4000A203882371F080910101882351F02BE0E6 |
:100F500044E156E06091DC0487E40E947906109237 |
:100F6000A20380911206909113060E940C0D882313 |
:100F700021F48091A4038823B1F08091010188239A |
:100F800091F022E445E557E06091DC0484E40E949E |
:100F900079061092A40384EF91E00E94030D9093D0 |
:100FA000130680931206609102016F3F89F0462F6D |
:100FB000552734E0440F551F3A95E1F74B5F5E4FDC |
:100FC000605D20E181E40E9479068FEF8093020149 |
:100FD0008091A303882359F180910101882339F17D |
:100FE0000E94FD101092A3033091AC03932F9F5FDA |
:100FF0009093AC03943021F08091AD03882359F095 |
:1010000026E148E458E060E084E30E9479068FEF2F |
:101010008093AC030CC044E1949FA0011124455E71 |
:101020005C4F24E160E0832F8F5C0E947906809101 |
:10103000A503882371F080910101882351F02AE0F3 |
:101040004FE156E06091DC0486E50E94790610923B |
:10105000A50308951F93CF93DF93CDB7DEB72297F3 |
:101060000FB6F894DEBF0FBECDBF8091A7038823D3 |
:1010700009F415C18FEF809303018091C106883672 |
:1010800009F445C0893688F4813611F1823638F486 |
:10109000833409F4DDC0883509F0FFC0D2C083363F |
:1010A00019F1873609F0F9C061C0813738F48C3600 |
:1010B00008F088C08B3609F0F0C04BC0843709F4C3 |
:1010C00041C0863709F44EC0813709F0E6C052C0EE |
:1010D0002091AA0343E062E0CE0101960E94E1065E |
:1010E000898180930201D9C02091AA0343E06BE07B |
:1010F00084E196E00E94E1068091F2039091160649 |
:10110000892B8093F20381E08093A403C6C02091D1 |
:10111000AA0343E062E0CE0101960E94E1068091BD |
:10112000F2039981892B8093F2038A818F3F21F406 |
:1011300081E08093AD0302C01092AD0381E0809303 |
:10114000A303ABC02091AA0343E064E08EEA93E0DE |
:1011500006C02091AA0343E063E082EB93E00E9483 |
:10116000E1069BC081E08093A50397C081E0809356 |
:10117000A20393C02091AA0343E062E0CE0101964E |
:101180000E94E10689818F3F89F0863010F085E06A |
:10119000898347E464E778E089810E945A02898163 |
:1011A00027E444E758E06091DC0408C01091DC04B7 |
:1011B0000E94330227E444E758E0612F855B0E94D8 |
:1011C00079066BC02091AA0343E067E484E798E0C6 |
:1011D0000E94E1068091C10647E464E778E08B56FF |
:1011E0000E9442028091C1068B56A2E0B0E0082E18 |
:1011F0000E94B33A60919F0877278827992724ECAB |
:1012000039E040E050E00E941C3A609388037093FC |
:10121000890380938A0390938B036091A0087727BA |
:10122000882799270E941C3A60938C0370938D0342 |
:1012300080938E0390938F030E9433020E94D922E1 |
:101240002CC06091AA038FEB96E00E94490625C04E |
:10125000809172048B3060F02091AA0343E068E033 |
:101260008DED94E00E94E10610927B0581E013C0B1 |
:101270001092DE041092DD041092E0041092DF045C |
:101280001092E2041092E1041092E4041092E3043C |
:1012900081E080937B058093B8031092A703229688 |
:1012A0000FB6F894DEBF0FBECDBFDF91CF911F9177 |
:1012B0000895982F80912D08813069F48091F10371 |
:1012C000E82FFF27E55EFC4F90838F5F8093F1034B |
:1012D00021E030E005C0892F0E943907282F3327ED |
:1012E000C90108951F93182F04C080E30E94590973 |
:1012F00011501116D4F31F9108951F93182F04C095 |
:1013000080E20E94590911501116D4F31F910895DB |
:101310000F931F93CF93DF938C01EB0108C0F8016B |
:101320000F5F1F4FE4918E2F0E945909219720973C |
:10133000B1F7DF91CF911F910F9108950F931F93F4 |
:10134000CF93DF938C01EB0106C0F80181918F01EF |
:101350000E94590921972097C1F7DF91CF911F91E2 |
:101360000F9108952F923F924F925F926F927F92CA |
:101370008F929F92AF92BF92CF92DF92EF92FF92A5 |
:101380000F931F93CF93DF93CDB7DEB7E3970FB6DD |
:10139000F894DEBF0FBECDBF29968FAD29978093FD |
:1013A0002D08CE01855B9F4F9D838C832B968EAD40 |
:1013B0009FAD2B979FA78EA722243324210102C023 |
:1013C000130124010EA51FA502C00F5F1F4FF801D6 |
:1013D000F490FF2019F0F5E2FF16B9F7B8018EA5D9 |
:1013E0009FA5681B790B11F00E948809FF2009F462 |
:1013F00042C20F5F1F4F1FA70EA71982AC81BD818C |
:101400001BAA1AAA9FEF99ABEEA5FFA5CF010196E3 |
:101410009FA78EA7B49095E7B91621F08B2D806217 |
:10142000883789F4EBA9E0FF07C02D903D904D90DF |
:101430005C901397149607C08D919C9111971C0195 |
:10144000442455241296F0E2BF1621F489818823A2 |
:10145000D9F685C083E2B81609F483C09AE2B916BA |
:1014600021F0EDE2BE1669F408C0FD011296E0819C |
:10147000EAABE7FFC9CFE195EAABFBA9F061FF7DDD |
:1014800072C08BE2B81609F46AC09EE2B916B1F5D3 |
:101490002EA53FA52F5F3F4FEEA5FFA584918A3271 |
:1014A00021F0B82E20E030E01BC0FD0112964081F3 |
:1014B000518157FF02C04FEF5FEF49AB3FA72EA707 |
:1014C000A3CFC90103E0880F991F0A95E1F7220F06 |
:1014D000331F280F391F2B0D311D20533040B4907E |
:1014E00031968B2D80538A3060F3FFA7EEA7A901B8 |
:1014F00037FF02C04FEF5FEF49AB8DCFF0E3BF1670 |
:1015000031F48BA984FD80CF80628BAB7DCF8B2D96 |
:1015100081538930E8F420E030E0C901F3E0880F1E |
:10152000991FFA95E1F7220F331F280F391F2B0D52 |
:10153000311D20533040EEA5FFA5CF0101969FA796 |
:101540008EA7B4908B2D80538A3038F32AAB63CFAB |
:1015500098E6B91651F4EBA9E460EBAB55CFB9822C |
:1015600053CFFBA9F860FBAB4FCF8CE6B81621F444 |
:101570009BA991609BAB48CFBD83AC83E3E6BE16CD |
:1015800039F41296BD83AC8312978C918E8318C167 |
:10159000F4E4BF1639F084E6B81639F099E6B916C6 |
:1015A00059F503C0EBA9E160EBABFBA9F0FF08C064 |
:1015B0001496BD83AC835E904E903E902E900AC0F0 |
:1015C0001296BD83AC839E918E911C01442437FCFE |
:1015D0004094542C57FC03C08AE088AB92C05094CE |
:1015E000409430942094211C311C411C511C8DE2EC |
:1015F00089839AE098AB85C0EFE4BE1629F0FFE638 |
:10160000BF1639F488E061C09BA991609BABE8E00C |
:1016100056C0F0E7BF1671F41296BD83AC839E915D |
:101620008E911C01442455248BA980648BAB78E7F0 |
:10163000B72E5EC0E3E7BE16D9F51296BD83AC8324 |
:10164000DE90CE90C114D10489F488E28E838EE6B8 |
:101650008F8385E788878CE689878A8789E28B87ED |
:101660001C8666E0C62ED12CCC0EDD1EF9A9F7FD36 |
:1016700013C04F2F552747FD509560E070E0C6011D |
:101680000E94A738009711F419A90DC08C1919A947 |
:1016900081174CF4182F07C0F60101900020E9F7DC |
:1016A00031971E2F1C1919824201310140E094C06C |
:1016B00085E5B81631F095E7B91649F4EAE0E8ABEC |
:1016C0001FC0FBA9F160FBAB8AE088AB19C098E5AD |
:1016D000B91621F0E8E7BE1609F06EC0FBA9F3FDCC |
:1016E00002C080E1F2CF211431044104510419F405 |
:1016F00090E198AB05C0EBA9E064EBABF0E1F8AB8F |
:10170000198289A987FD03C09BA99F7D9BAB2114EA |
:1017100031044104510461F4E9A9EE2349F466243B |
:10172000772443015EE2C52ED12CCC0EDD1E3EC0D7 |
:101730004EE2C42ED12CCC0EDD1EF8A9EF2EFF24D4 |
:1017400000271127C201B101A80197010E946E3A3A |
:101750006A3020F430E3A32EA60E08C027E5A22E9F |
:10176000A60E88E5B81611F49FEDA922F601A29203 |
:101770006F01C201B101A80197010E946E3A3901BF |
:101780004A012E143F044006510618F019012A019F |
:10179000D9CFF8A9F83051F48BA983FF07C090E3A3 |
:1017A000A91621F080E3F60182936F01CE018C1916 |
:1017B000182F125D49A910C0BB2009F45CC0BE827D |
:1017C00019824201310100E096E0C92ED12CCC0EE5 |
:1017D000DD1E11E021E005C0212F042F011B07FDB4 |
:1017E00000E08981882319F0812F8F5F07C09BA9B2 |
:1017F00096FD02C0812F02C0822F8E5FA82EA00E00 |
:10180000EBA9EE2EFF2480E3482E512C4E205F20C2 |
:101810004114510421F48AA98A190E947D09898101 |
:10182000882329F061E070E0CE01019609C0E6FE50 |
:1018300009C080E38A83BB8262E070E0CE01029639 |
:101840000E949E09F0E24F16510421F48AA98A19D8 |
:101850000E947209802F0E947209612F772767FD0D |
:101860007095C6010E949E09E4FEAACD8AA98A1934 |
:101870000E947D09A5CDE3960FB6F894DEBF0FBE9A |
:10188000CDBFDF91CF911F910F91FF90EF90DF902F |
:10189000CF90BF90AF909F908F907F906F905F9010 |
:1018A0004F903F902F9008951F920F920FB60F9276 |
:1018B00011242F933F935F936F937F938F939F9305 |
:1018C000AF93BF938091CE0381508093CE038F3F1F |
:1018D000B9F489E08093CE03809108038F5F817013 |
:1018E00080930803882319F481E08093C7038091D3 |
:1018F000C5039091C60301969093C6038093C503D8 |
:101900008091CA039091CB030297B8F08091CA03EB |
:101910009091CB0301979093CB038093CA0380915E |
:10192000CA039091CB0320910503309106038223D3 |
:101930009323892B09F053C006C08FEF9FEF90933C |
:10194000060380930503809100018A3039F404C0B6 |
:101950005A9A05C0479A03C05A9801C04798809187 |
:101960007C0883FF42C0349B0AC08091C8039091D9 |
:10197000C90301969093C9038093C80336C0809130 |
:10198000C8039091C903892B79F08091C803909185 |
:10199000C903805A9F4040F48091C8039091C903C5 |
:1019A00090934C0480934B0480914B0490914C0491 |
:1019B00020914D0430914E04821B930B845E9D4F09 |
:1019C00068E671E00E945B3A845B9040909350041B |
:1019D00080934F041092C9031092C80306C08091EF |
:1019E00000018A3009F0B6CFB3CFBF91AF919F917C |
:1019F0008F917F916F915F913F912F910F900FBECB |
:101A00000F901F9018952091C5033091C6032F5F4A |
:101A10003F4F820F931F08952091C5033091C60355 |
:101A2000821B930B892F9927869580749927089597 |
:101A30001F920F920FB60F921124EF92FF920F9305 |
:101A40001F932F933F934F935F936F937F938F9346 |
:101A50009F93AF93BF93CF93DF93EF93FF938091C7 |
:101A600007038150809307038F3F09F06DC083E81F |
:101A70008093B00080919D03C82FDD27D093CD03C4 |
:101A8000C093CC038091A908E090960880FF1EC007 |
:101A900060910F04709110048091110490911204D0 |
:101AA000FF240027112720E830E040E050E00E94AA |
:101AB000903AC801B7010E941C3A20E032E040E0B1 |
:101AC00050E00E94903AC20FD31F1DC060910F04D6 |
:101AD000709110048091110490911204FF2400274A |
:101AE000112720E830E040E050E00E94903AC80121 |
:101AF000B7010E941C3A20E032E040E050E00E9432 |
:101B0000903AC21BD30BD093CD03C093CC0320914A |
:101B1000CC033091CD038091970899272817390776 |
:101B200034F08091980899278217930724F49093B2 |
:101B3000CD038093CC038091CC038093B30080913C |
:101B400099088093070304C083E08093B0005F98F6 |
:101B5000FF91EF91DF91CF91BF91AF919F918F91C5 |
:101B60007F916F915F914F913F912F911F910F91B5 |
:101B7000FF90EF900F900FBE0F901F9018958091DF |
:101B8000C5039091C6030B969093D0038093CF0327 |
:101B900082E085BD83EA84BD17BC88E788BD96E0F6 |
:101BA00096BD83EC8093B0009093B100E0E7F0E045 |
:101BB000808182608083EEE6F0E0808181608083B6 |
:101BC0008AE08093B3001092B20008952091C5037B |
:101BD0003091C6032F5F3F4F280F391F4FEE02C0D1 |
:101BE00040937A008091C5039091C603B901681BA8 |
:101BF000790B77FFF5CF08952091C5033091C60387 |
:101C00002F5F3F4F280F391F8091C5039091C60366 |
:101C1000A901481B590B57FFF7CF089510927C007C |
:101C20008FEE80937A0008951F920F920FB60F9255 |
:101C30001124DF92EF92FF920F931F932F933F9304 |
:101C40004F935F936F937F938F939F93AF93BF93C4 |
:101C5000CF93DF93EF93FF9310927A008091ED037F |
:101C6000D82ED394D092ED03853009F484C0863009 |
:101C700090F4823009F440C0833030F48823F1F0CE |
:101C8000813009F04FC22FC0833009F43FC0843047 |
:101C900009F048C258C0883009F4C0C0893038F40F |
:101CA000863009F481C0873009F03CC29AC089307F |
:101CB00009F4D1C08A3009F035C2B1C180917800F1 |
:101CC000909179009093EC038093EB0381E08093F3 |
:101CD000EE038091E5039091E60301969093E6036D |
:101CE0008093E50315C280917800909179009093DC |
:101CF000EA038093E90390C0809178009091790085 |
:101D00009093E8038093E70384E086C14091090340 |
:101D100050910A0380917800909179009A01220FE6 |
:101D2000331F240F351F63E070E00E94473A260FEF |
:101D3000371F369527953695279530930A032093BC |
:101D4000090386E069C180910704909108042091FD |
:101D5000780030917900821B930B90932F08809329 |
:101D60002E0880912E0890912F089093D80380938D |
:101D7000D70387E051C1809178009091790020913C |
:101D8000050430910604821B930B90933A088093CC |
:101D900039088091390890913A089093DA0380933A |
:101DA000D9031092EE03B4C1809100012091EB039E |
:101DB0003091EC038A3049F4809178009091790059 |
:101DC000820F931F9695879506C080917800909119 |
:101DD0007900820F931F9093D6038093D50381E0FF |
:101DE0001BC1809100012091E9033091EA038A3000 |
:101DF00049F48091780090917900820F931F969515 |
:101E0000879506C08091780090917900820F931F8A |
:101E10009093D4038093D30382E0FEC080910001AD |
:101E20002091E7033091E8038A3049F480917800EB |
:101E300090917900820F931F9695879506C08091A7 |
:101E4000780090917900820F931F9093D203809332 |
:101E5000D10385E0E1C06091780070917900E09055 |
:101E60000904F0900A0400910B0410910C048827D7 |
:101E700077FD8095982F0E945A39A80197010E94FA |
:101E8000B4380E943D397093DC036093DB032091EA |
:101E9000DB033091DC03E0912E08F0912F08809154 |
:101EA000390890913A0897FF03C0909581959F4F0C |
:101EB00064E070E00E945B3AEB01CF01F7FF03C0E2 |
:101EC000909581959F4F64E070E00E945B3A260FE9 |
:101ED000371F2C0F3D1F3093DC032093DB038091D1 |
:101EE000DB039091DC03029704F160910904709187 |
:101EF0000A0480910B0490910C0420E030E048E447 |
:101F000054E40E94643988230CF03CC060910904B9 |
:101F100070910A0480910B0490910C042AE037ED33 |
:101F200043EA5CE30E94B53825C08091DB039091C1 |
:101F3000DC038F5F9F4F34F56091090470910A04B0 |
:101F400080910B0490910C0420E030E046E154E4D1 |
:101F50000E9467391816B4F46091090470910A045C |
:101F600080910B0490910C042AE037ED43EA5CE386 |
:101F70000E94B4386093090470930A0480930B04A0 |
:101F800090930C0481E08093E2038091780090911B |
:101F90007900909331088093300820914704309164 |
:101FA00048044091490450914A048091DB03909188 |
:101FB000DC03AA2797FDA095BA2F280F391F4A1FC7 |
:101FC0005B1F209347043093480440934904509387 |
:101FD0004A04E0904704F0904804009149041091AD |
:101FE0004A0460914704709148048091490490919B |
:101FF0004A0420E034E040E050E00E94903AE21AC7 |
:10200000F30A040B150BE0924704F0924804009386 |
:10201000490410934A0483E08093EE0379C08091D1 |
:102020003E0890913F082091780030917900820F0E |
:10203000931F90933F0880933E08809136088F5FEE |
:102040008093360880913608853008F46BC0809103 |
:102050007800909179009093100380930F03109271 |
:102060003608809132089091330820913E083091D3 |
:102070003F08821B930B2091630430916404821B00 |
:10208000930B9093E4038093E30360913E08709177 |
:102090003F08E0900B03F0900C0300910D031091AA |
:1020A0000E03882777FD8095982FA8019701220FAE |
:1020B000331F441F551F2E0D3F1D401F511F620F20 |
:1020C000731F841F951F24E030E040E050E00E9421 |
:1020D000903A20930B0330930C0340930D035093DD |
:1020E0000E03209132083091330880910B039091B8 |
:1020F0000C03A0910D03B0910E03281B390B3093F4 |
:1021000064042093630410923F0810923E080AC0B2 |
:102110008091EE0380937C00DD2051F08FEE809360 |
:102120007A0006C01092EE031092ED0310927C002C |
:10213000FF91EF91DF91CF91BF91AF919F918F91DF |
:102140007F916F915F914F913F912F911F910F91CF |
:10215000FF90EF90DF900F900FBE0F901F9018959B |
:10216000CF93DF93A3E0B0E00E94AB3A802DC82F5D |
:10217000DD27C531D10508F02A97C7BD84E690E078 |
:102180000E94E60D80910F039091100382559340B9 |
:10219000D0F4C0E0D0E017C0C7BD82E390E00E9459 |
:1021A000E60D8CE791E09F938F931F920E94B209F6 |
:1021B00080910F03909110030F900F900F9084580F |
:1021C000934020F02196CA3FD10530F3A3E0B0E060 |
:1021D0000C2E0E94B33AC0933B088CE291E00E941F |
:1021E000E60DDF91CF910895EBE1F3E080E281937A |
:1021F00093E0EB36F907D9F70895FF920F931F93F9 |
:102200008091F203282F3327C90181709070682FC5 |
:102210008823A9F08091F303882311F0815002C034 |
:1022200080916B038093F303EBE1F3E080E2819311 |
:1022300093E0EB36F907D9F78FEF8093AC03A90150 |
:102240004270507021FF10C08091F3038F5F809324 |
:10225000F303EBE1F3E080E2819393E0EB36F907DF |
:10226000D9F78FEF8093AC03662321F0452B11F053 |
:102270001092F30381E18093F1038091F303992796 |
:102280009F938F9383E294E09F938F9311E0F12EBD |
:10229000FF920E94B2090091F3030F900F900F90EC |
:1022A0000F900F90053009F4FCC1063090F4023015 |
:1022B00009F4CCC0033030F40023F1F0013009F010 |
:1022C000D9C361C0033009F416C1043009F0D2C388 |
:1022D00065C1083009F416C3093038F4063009F432 |
:1022E00099C2073009F0C6C3EAC2093009F447C3EE |
:1022F0000A3009F0BFC381C31092F10381E194E079 |
:102300009F938F93FF920E94B20984E18093F1031F |
:102310002091000182E690E09F938F938AE590E000 |
:102320009F938F931F921F92822F6AE00E943B3AE5 |
:10233000892F99279F938F93822F0E943B3A992749 |
:102340009F938F938CEF93E09F938F93FF920E94C4 |
:10235000B20988E28093F1030E94330299279F9388 |
:102360008F938FEE93E09F938F93FF920E94B20919 |
:102370008CE38093F10384EE93E09F938F93FF921D |
:102380000E94B20998C280917C0880FF47C01092D9 |
:10239000F10380916304909164049F938F9385ED82 |
:1023A00093E09F938F930F930E94B20984E18093EF |
:1023B000F10380916504909166049F938F9386EC5E |
:1023C00093E09F938F930F930E94B20988E28093CA |
:1023D000F10380910F03909110039F938F9387EBEC |
:1023E00093E09F938F930F930E94B2098CE38093A5 |
:1023F000F10380913B0899279F938F9388EA93E09C |
:102400009F938F930F930E94B2098DB79EB7449606 |
:102410000FB6F8949EBF0FBE8DBF31C384E1809389 |
:10242000F10381EA93E09F938F930F930E94B20987 |
:1024300088E28093F10383E993E09F938F930F9356 |
:102440000E94B2098DB79EB70696E2CF1092F103B3 |
:1024500089E893E09F938F93FF920E94B20984E1F1 |
:102460008093F10360910F04709110048091110426 |
:102470009091120420E034E040E050E00E94903A55 |
:102480005F934F933F932F938AE793E09F938F93AC |
:10249000FF920E94B20988E28093F10360911704D1 |
:1024A000709118048091190490911A0420E034E08E |
:1024B00040E050E00E94903A5F934F933F932F93F8 |
:1024C0008BE693E09F938F93FF920E94B2098CE377 |
:1024D0008093F10380914B0490914C049F938F93D0 |
:1024E0008CE593E09F938F93FF920E94B2098DB782 |
:1024F0009EB746968DCF1092F10380914C08909133 |
:102500004D0820914A0830914B089F938F933F9339 |
:102510002F938CE493E09F938F93FF920E94B209D4 |
:1025200084E18093F10380915008909151082091AB |
:102530004E0830914F089F938F933F932F938CE3D6 |
:1025400093E09F938F93FF920E94B20988E2809359 |
:10255000F1038091540890915508209152083091D0 |
:1025600053089F938F933F932F938CE293E09F9315 |
:102570008F93FF920E94B2098CE38093F1038091C4 |
:1025800058089091590820915608309157089F9308 |
:102590008F933F932F938CE193E07AC01092F103D5 |
:1025A000E0917508FF27EE0FFF1FE85BF74F2081D2 |
:1025B0003181E0917408FF27EE0FFF1FE85BF74FB2 |
:1025C000808191813F932F939F938F938CE093E031 |
:1025D0009F938F93FF920E94B20984E18093F1034D |
:1025E000E0917708FF27EE0FFF1FE85BF74F208190 |
:1025F0003181E0917608FF27EE0FFF1FE85BF74F70 |
:10260000808191813F932F939F938F938CEF92E0E2 |
:102610009F938F93FF920E94B20988E28093F10307 |
:10262000E0917908FF27EE0FFF1FE85BF74F20814D |
:102630003181E0917808FF27EE0FFF1FE85BF74F2D |
:10264000808191813F932F939F938F938CEE92E0A3 |
:102650009F938F93FF920E94B2098CE38093F103C2 |
:10266000E0917B08FF27EE0FFF1FE85BF74F20810B |
:102670003181E0917A08FF27EE0FFF1FE85BF74FEB |
:10268000808191813F932F939F938F938CED92E064 |
:102690009F938F93FF920E94B2098DB79EB74C967D |
:1026A000B7CE1092F1038EEC92E09F938F93FF923E |
:1026B0000E94B2090F900F900F90809100018A3014 |
:1026C00009F04AC084E18093F1034091FB035091EB |
:1026D000FC038091D1039091D2032091FB033091B0 |
:1026E000FC035F934F93821B930B9F938F938FEB0E |
:1026F00092E09F938F93FF920E94B20988E28093A9 |
:10270000F1034091FD035091FE038091D30390911A |
:10271000D4032091FD033091FE035F934F93821BFE |
:10272000930B9F938F9380EB92E09F938F93FF92F5 |
:102730000E94B2098CE38093F1038091FF03909192 |
:1027400000042091E3083091E4089F938F933F9316 |
:102750002F9381EA92E055C084E18093F103809148 |
:10276000FB039091FC032091D1033091D203E091BF |
:10277000FB03F091FC0362E070E00E945B3A7F9300 |
:102780006F932E1B3F0B3F932F9382E992E09F9311 |
:102790008F93FF920E94B20988E28093F1038091A7 |
:1027A000FD039091FE032091D3033091D403E09177 |
:1027B000FD03F091FE0362E070E00E945B3A7F93BC |
:1027C0006F932E1B3F0B3F932F9383E892E09F93D1 |
:1027D0008F93FF920E94B2098CE38093F103809162 |
:1027E000FF03909100042091E3083091E40862E037 |
:1027F00070E00E945B3A7F936F933F932F9384E73F |
:1028000092E09F938F93FF920E94B2098DB79EB77B |
:102810004596FECD1092F10387E692E09F938F9349 |
:10282000FF920E94B20984E18093F1038091050434 |
:10283000909106042091D9033091DA039F938F93EE |
:102840003F932F9388E592E09F938F93FF920E948E |
:10285000B20988E28093F103809107049091080403 |
:102860002091D7033091D8039F938F933F932F9359 |
:1028700089E492E09F938F93FF920E94B2098CE3C8 |
:102880008093F1036091090470910A0480910B0414 |
:1028900090910C040091CB081091CC080E943D3916 |
:1028A0007F936F931F930F938AE392E09F938F938D |
:1028B000FF920E94B2098DB79EB74896A9CD84E1D8 |
:1028C0008093F1038091090390910A039F938F9362 |
:1028D0008BE292E09F938F93FF920E94B20988E26D |
:1028E0008093F10380915B0499279F938F938CE1F0 |
:1028F00092E09F938F93FF920E94B2098DB79EB78B |
:102900000A9686CD1092F1038DE092E09F938F930B |
:10291000FF920E94B20984E18093F10380914F04F9 |
:10292000909150049F938F938EEF91E09F938F939C |
:10293000FF920E94B20988E28093F10380914B04D8 |
:1029400090914C049F938F938FEE91E09F938F9380 |
:10295000FF920E94B2098CE38093F10380914D04B1 |
:1029600090914E049F938F9380EE91E09F938F936D |
:10297000FF920E94B2098DB79EB7429649CD109240 |
:10298000F10380915304909154049F938F9384EDAD |
:1029900091E09F938F93FF920E94B20984E180930C |
:1029A000F10380915504909156049F938F9388EC86 |
:1029B00091E09F938F93FF920E94B20988E28093E7 |
:1029C000F10380915704909158049F938F938CEB5F |
:1029D00091E09F938F93FF920E94B2098CE38093C2 |
:1029E000F1038091590490915A049F938F9380EB47 |
:1029F00091E09F938F93FF9206CD1092F10388EAA6 |
:102A000091E09F938F93FF920E94B20984E180939B |
:102A1000F10380919D0399279F938F938AE991E019 |
:102A20009F938F93FF920E94B20988E28093F103F3 |
:102A30008091CC039091CD039F938F938CE891E08C |
:102A40009F938F93FF920E94B2098CE38093F103CE |
:102A50008091980899279F938F9380919708992741 |
:102A60009F938F938EE791E09F938F93FF920E94A5 |
:102A7000B209CBCC015000936B031092F303109278 |
:102A8000F2031F910F91FF9008951092B9008AE20E |
:102A90008093B800089585EA8093BC0080E090E0C0 |
:102AA000089584E98093BC0008951092B900809342 |
:102AB000BB0085E88093BC0080E090E008951F9201 |
:102AC0000F920FB60F9211248F939F93EF93FF9362 |
:102AD0008091F4038F5F8093F40381508330A9F1D8 |
:102AE000843028F4813091F0823008F50AC08530B6 |
:102AF00089F18530B8F18630A9F1873009F061C0DD |
:102B000045C08091F503880F8E5A09C08091F50366 |
:102B10008F5F8093F503815027C08091BE0810928B |
:102B2000B9008093BB0085E88093BC004AC084E96B |
:102B30008093BC008091F503843018F41092F40364 |
:102B400002C01092F50385EAEFCF8091F603880F5B |
:102B50008D5AE5CF8091BB00E091F603FF27E05C42 |
:102B6000F74F80838091F603813039F08130A8F2ED |
:102B7000823031F0833029F506C08091C308CFCF71 |
:102B80008091DB08CCCF8091DD08C9CF8091F6031E |
:102B90009091BB00E82FFF27E05CF74F94838F5F95 |
:102BA0008093F603843010F01092F60384E980934A |
:102BB000BC008AE090E09093870380938603109294 |
:102BC000F4038091BC0080688093BC00FF91EF917A |
:102BD0009F918F910F900FBE0F901F9018954CEB07 |
:102BE00050E084E9DA018C931092F4032BEB30E08F |
:102BF000F90180811092F50380E88C931092BD005A |
:102C00001092BA001082E9EBF0E01082A8EBB0E07D |
:102C10001C9210828AE28C9385EADA018C931082EE |
:102C2000F901108285E88C93089583EC80938100EC |
:102C3000EFE6F0E0808180628083109200041092C1 |
:102C4000FF031092FE031092FD031092FC031092FA |
:102C5000FB0308951F920F920FB60F9211240F934A |
:102C60001F932F933F934F935F936F937F938F9314 |
:102C70009F93AF93BF93CF93DF93EF93FF932091F5 |
:102C80008600309187008091F9039091FA03281B08 |
:102C9000390B80918600909187009093FA0380937E |
:102CA000F903C9018D549440C091F703D091F80302 |
:102CB000835F9A4158F4249714F010926C0381E0DA |
:102CC00090E09093F8038093F70363C0CA30D10576 |
:102CD0000CF05FC0C9018B5F9040845B914008F0AD |
:102CE00040C0A901425D5140FE01EE0FFF1FE85BAD |
:102CF000F74F80819181FA01E81BF90BCF01F7FFB3 |
:102D000003C0909581959F4F06974CF480915B048A |
:102D1000883C28F480915B04865F80935B04FE010D |
:102D2000EE0FFF1F8F01085B174FD8012D913C91CB |
:102D3000C901880F991F820F931F840F951F64E0AC |
:102D400070E00E945B3AD8018D919C9111979B0194 |
:102D5000281B390BE25AF74F3183208311967C935D |
:102D60006E93FE013196F093F803E093F703E5309C |
:102D7000F10519F45D9A5C980BC05D98E630F10599 |
:102D800011F45C9A05C05C98379711F45B9A01C006 |
:102D90005B98FF91EF91DF91CF91BF91AF919F91A0 |
:102DA0008F917F916F915F914F913F912F911F91E3 |
:102DB0000F910F900FBE0F901F9018952F923F927A |
:102DC0004F925F926F927F928F929F92AF92BF923B |
:102DD000CF92DF92EF92FF920F931F93CF93DF93E7 |
:102DE000CDB7DEB722970FB6F894DEBF0FBECDBFCA |
:102DF0008091FF03909100042091D5033091D60378 |
:102E0000821B930B9093E4088093E3088091D30393 |
:102E10009091D4032091FD033091FE03821B930B0C |
:102E20009093BD088093BC088091D1039091D20308 |
:102E30002091FB033091FC03821B930B9093C508F8 |
:102E40008093C408E090E008F090E1086091D90315 |
:102E50007091DA030027F7FC0095102F882777FD83 |
:102E60008095982F2CE030E040E050E00E941C3A22 |
:102E7000E60EF71E081F191FC801B70122E030E057 |
:102E800040E050E00E94903A3093E1082093E0083F |
:102E9000E090EA08F090EB086091D7037091D803B6 |
:102EA0000027F7FC0095102F882777FD8095982F35 |
:102EB0002CE030E040E050E00E941C3AE60EF71EA5 |
:102EC000081F191FC801B70122E030E040E050E0C0 |
:102ED0000E94903A3093EB082093EA086091CB0867 |
:102EE0007091CC082091DB033091DC03882777FDBB |
:102EF0008095982F442737FD4095542F620F731FFC |
:102F0000841F951F22E030E040E050E00E94903A9C |
:102F10003093CC082093CB0820911F0430912004DB |
:102F200040912104509122046091D9037091DA03F9 |
:102F3000CB01880F991F860F971F880F991F880F45 |
:102F4000991FAA2797FDA095BA2F280F391F4A1F4E |
:102F50005B1F20931F04309320044093210450935F |
:102F6000220420912304309124044091250450919F |
:102F700026046091D7037091D803CB01880F991F65 |
:102F8000860F971F880F991F880F991FAA2797FDF3 |
:102F9000A095BA2F280F391F4A1F5B1F20932304C7 |
:102FA0003093240440932504509326046091270411 |
:102FB000709128048091290490912A04E0903008AF |
:102FC000F0903108A0900904B0900A04C0900B045E |
:102FD000D0900C040E945A393B014C010027F7FCA9 |
:102FE0000095102FC801B7010E945A39A60195011A |
:102FF0000E94B4389B01AC01C401B3010E94B538F2 |
:103000000E943D396093270470932804809329041B |
:1030100090932A0420913F04309140044091410450 |
:10302000509142048091E3089091E408AA2797FD0B |
:10303000A095BA2F280F391F4A1F5B1F20933F040A |
:103040003093400440934104509342042091430440 |
:103050003091440440914504509146048091E30826 |
:103060009091E408AA2797FDA095BA2F280F391F41 |
:103070004A1F5B1F2093430430934404409345044C |
:103080005093460420916B042A83222309F06BC0DD |
:1030900080916C04882309F066C080917C0886FFCB |
:1030A00062C060912F04709130048091310490913E |
:1030B0003204E090E308F090E408A0907904BB2487 |
:1030C000CC24DD2420E030E140E050E00E94903A42 |
:1030D0000027F7FC0095102FCA01B901A80197013C |
:1030E0000E941C3AA60195010E941C3A20E038E09B |
:1030F00040E050E00E94903A2093C4043093C5040D |
:103100004093C6045093C70460913704709138040B |
:103110008091390490913A04E090E308F090E4083B |
:1031200020E030E140E050E00E94903A0027F7FCB8 |
:103130000095102FCA01B901A80197010E941C3AFD |
:10314000A60195010E941C3A20E038E040E050E0E2 |
:103150000E94903A2093C0043093C1044093C2046B |
:103160005093C30410C01092C0041092C104109276 |
:10317000C2041092C3041092C4041092C5041092A9 |
:10318000C6041092C7048091BC089091BD0820909D |
:10319000C4043090C5044090C6045090C704820D0A |
:1031A000931D9093BD088093BC080091BC081091BA |
:1031B000BD08A090C004B090C104C090C204D090DB |
:1031C000C30480917A04682E772488249924C60148 |
:1031D000B501A40193010E941C3A20E032E040E0D6 |
:1031E00050E00E94903A020F131F1093BD08009305 |
:1031F000BC0820913B0430913C0440913D04509127 |
:103200003E048091BC089091BD08AA2797FDA09527 |
:10321000BA2F280F391F4A1F5B1F20933B0430939E |
:103220003C0440933D0450933E0420913704309178 |
:1032300038044091390450913A048091BC0890912F |
:10324000BD086091670470916804861B970BAA27DC |
:1032500097FDA095BA2F280F391F4A1F5B1F209397 |
:103260003704309338044093390450933A048091E2 |
:10327000370490913804A0913904B0913A04E09059 |
:103280008C03F0908D0300918E0310918F03E8164C |
:10329000F9060A071B0704F580E197E2A0E0B0E019 |
:1032A0008E199F09A00BB10B8093370490933804BB |
:1032B000A0933904B0933A04809137049091380474 |
:1032C000A0913904B0913A0480933B0490933C045C |
:1032D000A0933D04B0933E0420913704309138040C |
:1032E0004091390450913A0488279927DC018E19BE |
:1032F0009F09A00BB10B281739074A075B0704F594 |
:1033000080EF98EDAFEFBFEFE80EF91E0A1F1B1F0D |
:10331000E0923704F09238040093390410933A0491 |
:103320008091370490913804A0913904B0913A0407 |
:1033300080933B0490933C04A0933D04B0933E04DF |
:103340008091D3039091D4030F9734F488E19CEFDC |
:103350009093BD088093BC088091D3039091D403CF |
:10336000079734F480E398EF9093BD088093BC08EE |
:103370009091000199839A30A9F48091D3039091A0 |
:10338000D403835F934034F088EE93E09093BD08BC |
:103390008093BC088091D3039091D4038A5F9340BB |
:1033A000DCF014C08091D3039091D403855E9740E4 |
:1033B00034F088EE93E09093BD088093BC08809130 |
:1033C000D3039091D403835F974034F080ED97E06E |
:1033D0009093BD088093BC088091C4089091C50863 |
:1033E0008A199B099093C5088093C4080091C4086A |
:1033F0001091C508C201B101A40193010E941C3AB9 |
:1034000020E032E040E050E00E94903A021B130BB3 |
:103410001093C5080093C4082091330430913404FC |
:1034200040913504509136048091C4089091C508AC |
:10343000AA2797FDA095BA2F280F391F4A1F5B1F97 |
:10344000209333043093340440933504509336046E |
:1034500020912F0430913004409131045091320476 |
:103460008091C4089091C5086091690470916A04C4 |
:10347000861B970BAA2797FDA095BA2F280F391FF7 |
:103480004A1F5B1F20932F04309330044093310474 |
:103490005093320480912F0490913004A091310414 |
:1034A000B0913204E0908803F090890300918A0380 |
:1034B00010918B03E816F9060A071B0704F580E153 |
:1034C00097E2A0E0B0E08E199F09A00BB10B8093AA |
:1034D0002F0490933004A0933104B0933204809170 |
:1034E0002F0490913004A0913104B0913204809364 |
:1034F000330490933404A0933504B09336042091A0 |
:103500002F043091300440913104509132048827C7 |
:103510009927DC018E199F09A00BB10B28173907D9 |
:103520004A075B0704F580EF98EDAFEFBFEFE80EB9 |
:10353000F91E0A1F1B1FE0922F04F0923004009323 |
:1035400031041093320480912F0490913004A091A3 |
:103550003104B09132048093330490933404A093E7 |
:103560003504B09336048091D1039091D2030F9724 |
:1035700034F488E19CEF9093C5088093C40880914F |
:10358000D1039091D203079734F480E398EF90939E |
:10359000C5088093C40899819A30A9F48091D10319 |
:1035A0009091D203835F934034F088EE93E0909340 |
:1035B000C5088093C4088091D1039091D2038A5F9B |
:1035C0009340DCF014C08091D1039091D203855ECA |
:1035D000974034F088EE93E09093C5088093C40838 |
:1035E0008091D1039091D203835F974034F080EDB6 |
:1035F00097E09093C5088093C4088FEE80937A007B |
:1036000080913F0490914004A0914104B091420404 |
:1036100080932B0490932C04A0932D04B0932E043C |
:1036200080912F0490913004A0913104B091320424 |
:1036300080930F0490931004A0931104B09312048C |
:103640008091370490913804A0913904B0913A04E4 |
:103650008093170490931804A0931904B0931A044C |
:103660008091330490913404A0913504B0913604D4 |
:103670008093130490931404A0931504B09316043C |
:1036800080913B0490913C04A0913D04B0913E0494 |
:1036900080931B0490931C04A0931D04B0931E04FC |
:1036A00080917C0887FF6BC02A81222309F067C0C4 |
:1036B00080916C04882309F062C08091C4089091C5 |
:1036C000C508893C91057CF02091C4083091C5085B |
:1036D0008091C4089091C508880F991F880F991F81 |
:1036E0002052334015C08091C4089091C50888537A |
:1036F0009F4FA4F42091C4083091C5088091C4085C |
:103700009091C508880F991F880F991F205E3C4F24 |
:10371000820F931F9093C5088093C4088091BC08C2 |
:103720009091BD08893C91057CF02091BC083091B6 |
:10373000BD088091BC089091BD08880F991F880F23 |
:10374000991F2052334015C08091BC089091BD084C |
:1037500088539F4FA4F42091BC083091BD088091FC |
:10376000BC089091BD08880F991F880F991F205E93 |
:103770003C4F820F931F9093BD088093BC0820910B |
:1037800053043091540480917808E82FFF27EE0FFE |
:10379000FF1FE85BF74F8081918182599F4F281767 |
:1037A00039071CF42F5F3F4F0CC0808191818259F3 |
:1037B0009F4F821793074CF42115310531F02150AA |
:1037C0003040309354042093530420915504309199 |
:1037D000560480917908E82FFF27EE0FFF1FE85B62 |
:1037E000F74F8081918182599F4F281739071CF428 |
:1037F0002F5F3F4F0CC08081918182599F4F82176C |
:1038000093074CF42115310531F0215030403093AD |
:103810005604209355042091570430915804809108 |
:103820007A08E82FFF27EE0FFF1FE85BF74F808134 |
:10383000918182599F4F281739071CF42F5F3F4F02 |
:103840000CC08081918182599F4F821793074CF45D |
:103850002115310531F02150304030935804209328 |
:1038600057042091590430915A0480917B08E82F25 |
:10387000FF27EE0FFF1FE85BF74F80819181825990 |
:103880009F4F281739071CF42F5F3F4F0CC08081D2 |
:10389000918182599F4F821793074CF4211531056E |
:1038A00031F02150304030935A04209359048091D4 |
:1038B00053049091540497FF05C010925404109241 |
:1038C00053040AC08F3F910539F034F08FEF90E038 |
:1038D000909354048093530480915504909156041E |
:1038E00097FF05C010925604109255040AC08F3FEE |
:1038F000910539F034F08FEF90E090935604809367 |
:103900005504809157049091580497FF05C0109278 |
:103910005804109257040AC08F3F910539F034F0D3 |
:103920008FEF90E09093580480935704809159044E |
:1039300090915A0497FF05C010925A0410925904AE |
:103940000AC08F3F910539F034F08FEF90E09093EB |
:103950005A048093590422960FB6F894DEBF0FBE26 |
:10396000CDBFDF91CF911F910F91FF90EF90DF902E |
:10397000CF90BF90AF909F908F907F906F905F900F |
:103980004F903F902F90089510927A008091D1032C |
:103990009091D2039093C5088093C4088091D3037B |
:1039A0009091D4039093BD088093BC088091D50377 |
:1039B0009091D6039093E4088093E3086091D90333 |
:1039C0007091DA03882777FD8095982F2CE030E0FE |
:1039D00040E050E00E941C3A7093E1086093E008D8 |
:1039E0006091D7037091D803882777FD8095982F31 |
:1039F0000E941C3A7093EB086093EA088091DB0305 |
:103A00009091DC039093CC088093CB088FEE809349 |
:103A10007A00209153043091540480917808E82F63 |
:103A2000FF27EE0FFF1FE85BF74F808191818259DE |
:103A30009F4F281739071CF42F5F3F4F0CC0808120 |
:103A4000918182599F4F821793074CF421153105BC |
:103A500031F021503040309354042093530420918E |
:103A600055043091560480917908E82FFF27EE0F16 |
:103A7000FF1FE85BF74F8081918182599F4F281784 |
:103A800039071CF42F5F3F4F0CC080819181825910 |
:103A90009F4F821793074CF42115310531F02150C7 |
:103AA00030403093560420935504209157043091B0 |
:103AB000580480917A08E82FFF27EE0FFF1FE85B7C |
:103AC000F74F8081918182599F4F281739071CF445 |
:103AD0002F5F3F4F0CC08081918182599F4F821789 |
:103AE00093074CF42115310531F0215030403093CB |
:103AF0005804209357042091590430915A0480911E |
:103B00007B08E82FFF27EE0FFF1FE85BF74F808150 |
:103B1000918182599F4F281739071CF42F5F3F4F1F |
:103B20000CC08081918182599F4F821793074CF47A |
:103B30002115310531F02150304030935A04209343 |
:103B40005904809153049091540497FF05C010923A |
:103B50005404109253040AC08F3F910539F034F099 |
:103B60008FEF90E090935404809353048091550418 |
:103B70009091560497FF05C0109256041092550478 |
:103B80000AC08F3F910539F034F08FEF90E09093A9 |
:103B9000560480935504809157049091580497FFE0 |
:103BA00005C010925804109257040AC08F3F910527 |
:103BB00039F034F08FEF90E09093580480935704DD |
:103BC0008091590490915A0497FF05C010925A04AD |
:103BD000109259040AC08F3F910539F034F08FEFED |
:103BE00090E090935A048093590460919F0877273E |
:103BF0008827992724EC39E040E050E00E941C3AE5 |
:103C0000609388037093890380938A0390938B0356 |
:103C100060938C0370938D0380938E0390938F0336 |
:103C200008951F9380917F088B3F98F08B3F19F484 |
:103C3000809153040EC08C3F19F48091550409C043 |
:103C40008D3F19F48091570404C08E3F21F4809178 |
:103C500059048093950380919503882319F4109259 |
:103C6000950304C08F3F11F48093950380917E08E3 |
:103C70008B3F98F08B3F19F4809153040EC08C3F1A |
:103C800019F48091550409C08D3F19F480915704AF |
:103C900004C08E3F21F48091590480939403809155 |
:103CA0009403882319F41092940305C0843618F005 |
:103CB00084E680939403809180088B3F98F08B3F3B |
:103CC00019F4809153040EC08C3F19F4809155046F |
:103CD00009C08D3F19F48091570404C08E3F21F430 |
:103CE000809159048093960380919603882319F458 |
:103CF0001092960305C0843618F084E680939603EC |
:103D0000809182088B3F98F08B3F19F48091530487 |
:103D10000EC08C3F19F48091550409C08D3F19F4F1 |
:103D20008091570404C08E3F21F480915904809300 |
:103D3000970380919703882319F41092970304C086 |
:103D40008F3F11F480939703809189088B3F98F0FF |
:103D50008B3F19F4809153040EC08C3F19F480916D |
:103D6000550409C08D3F19F48091570404C08E3F5B |
:103D700021F48091590480939803809198038823BB |
:103D800019F41092980304C08F3F11F480939803A4 |
:103D900080918A088B3F98F08B3F19F480915304EF |
:103DA0000EC08C3F19F48091550409C08D3F19F461 |
:103DB0008091570404C08E3F21F480915904809370 |
:103DC0009903809199038B3010F48AE002C08F3FF1 |
:103DD00011F48093990380918B088B3F98F08B3F6F |
:103DE00019F4809153040EC08C3F19F4809155044E |
:103DF00009C08D3F19F48091570404C08E3F21F40F |
:103E00008091590480939A0380919A03882319F42E |
:103E100010929A0304C08F3F11F480939A0380910B |
:103E200090088B3F98F08B3F19F4809153040EC09B |
:103E30008C3F19F48091550409C08D3F19F480918D |
:103E4000570404C08E3F21F48091590480939C0351 |
:103E500080919C03882319F410929C0304C08F3F27 |
:103E600011F480939C03809191088B3F98F08B3FD5 |
:103E700019F4809153040EC08C3F19F480915504BD |
:103E800009C08D3F19F48091570404C08E3F21F47E |
:103E9000809159048093710480917104882319F4EE |
:103EA0001092710404C08F3F11F4809371048091CB |
:103EB00092088B3F98F08B3F19F4809153040EC009 |
:103EC0008C3F19F48091550409C08D3F19F48091FD |
:103ED000570404C08E3F21F48091590480937204EA |
:103EE00080917204882319F41092720404C08F3FE9 |
:103EF00011F480937204809193088B3F98F08B3F6C |
:103F000019F4809153040EC08C3F19F4809155042C |
:103F100009C08D3F19F48091570404C08E3F21F4ED |
:103F2000809159048093730480917304882319F459 |
:103F30001092730404C08F3F11F480937304809136 |
:103F400094088B3F98F08B3F19F4809153040EC076 |
:103F50008C3F19F48091550409C08D3F19F480916C |
:103F6000570404C08E3F21F4809159048093740457 |
:103F700080917404882319F41092740404C08F3F54 |
:103F800011F4809374048091A4088B3F98F08B3FC8 |
:103F900019F4809153040EC08C3F19F4809155049C |
:103FA00009C08D3F19F48091570404C08E3F21F45D |
:103FB000809159048093750480917504882319F4C5 |
:103FC0001092750404C08F3F11F4809375048091A2 |
:103FD000A5088B3F98F08B3F19F4809153040EC0D5 |
:103FE0008C3F19F48091550409C08D3F19F48091DC |
:103FF000570404C08E3F21F48091590480937604C5 |
:1040000080917604882319F41092760404C08F3FBF |
:1040100011F4809376048091A6088B3F98F08B3F33 |
:1040200019F4809153040EC08C3F19F4809155040B |
:1040300009C08D3F19F48091570404C08E3F21F4CC |
:10404000809159048093770480917704882319F430 |
:104050001092770404C08F3F11F48093770480910D |
:10406000A7088B3F98F08B3F19F4809153040EC042 |
:104070008C3F19F48091550409C08D3F19F480914B |
:10408000570404C08E3F21F4809159048093780432 |
:1040900080917804882319F41092780404C08F3F2B |
:1040A00011F480937804809195088B3F98F08B3FB2 |
:1040B00019F4809153040EC08C3F19F4809155047B |
:1040C00009C08D3F19F48091570404C08E3F21F43C |
:1040D0008091590480939D0380919D03882319F456 |
:1040E00010929D0304C08F3F11F480939D03809133 |
:1040F0009A088B3F98F08B3F19F4809153040EC0BF |
:104100008C3F19F48091550409C08D3F19F48091BA |
:10411000570404C08E3F21F48091590480939E037C |
:1041200080919E03882319F410929E0304C08F3F50 |
:1041300011F480939E0380919D088B3F98F08B3FF4 |
:1041400019F4809153040EC08C3F19F480915504EA |
:1041500009C08D3F19F48091570404C08E3F21F4AB |
:10416000809159048093790480917904882319F40B |
:104170001092790404C08F3F11F4809379048091E8 |
:104180009E088B3F98F08B3F19F4809153040EC02A |
:104190008C3F19F48091550409C08D3F19F480912A |
:1041A000570404C08E3F21F48091590480937A040F |
:1041B00080917A04882319F410927A0404C08F3F06 |
:1041C00011F480937A048091A3088B3F98F08B3F81 |
:1041D00019F4809153040EC08C3F19F4809155045A |
:1041E00009C08D3F19F48091570404C08E3F21F41B |
:1041F0008091590480939F0380919F03882319F431 |
:1042000010929F0304C08F3F11F480939F0310917D |
:104210009C03612F772767FD7095872F972F0E944A |
:104220005A3917FF06C020E030E040E853E40E940E |
:10423000B53827E137EB41ED58E30E94D43960935C |
:1042400090037093910380939203909393038091D2 |
:1042500087088093E208809186088093C6081F91A2 |
:10426000089580916204882301F51092C30810928A |
:10427000BE081092DB081092DD088091AE038823FF |
:1042800011F08093BE088091AF03882311F08093D2 |
:10429000C3088091B003882311F08093DD088091DA |
:1042A000B103882311F08093DB088091BE08992721 |
:1042B0009093700780936F078091C308992790931C |
:1042C0007207809371078091DD0899279093740796 |
:1042D000809373078091DB089927909376078093EA |
:1042E00075071092F4031092F5030E944B15089580 |
:1042F000109206041092050410920804109207040C |
:1043000080E090E0A0E0B0E08093090490930A047C |
:10431000A0930B04B0930C041092FC031092FB03C7 |
:104320001092FE031092FD03109200041092FF03FE |
:104330001092790410927A040E94C41C84E690E0E2 |
:104340000E94E60D0E94C41C80917C0880FF10C072 |
:1043500080910F0390911003875B934038F4809114 |
:104360000F03909110038E5E924010F40E94B010E3 |
:104370008091D1039091D2039093FC038093FB032F |
:104380008091D3039091D4039093FE038093FD0317 |
:104390008091D5039091D603909300048093FF03FE |
:1043A0008091FD039091FE03909302048093010499 |
:1043B0008091FB039091FC03909304048093030489 |
:1043C00044E050E0DA010E94AB3A802D853038F1AC |
:1043D0008091EA089091EB0897FF03C09095819532 |
:1043E0009F4F6CE070E00E945B3A7093080460930A |
:1043F00007048091E0089091E10897FF03C0909531 |
:1044000081959F4F6CE070E00E945B3A70930604C8 |
:1044100060930504609130087091310839C0DA0169 |
:104420000E94AB3A802D4F5F5F4FDA010E94AB3A9A |
:10443000202D9927982F8827820F911D909306048D |
:10444000809305044F5F5F4FDA010E94AB3A802DE5 |
:104450004F5F5F4FDA010E94AB3A202D9927982FCA |
:104460008827820F911D90930804809307044F5F63 |
:104470005F4FDA010E94AB3A602D4F5F5F4FDA0168 |
:104480000E94AB3A202D7727762F6627620F711D89 |
:10449000882777FD8095982F0E945A3960930904E8 |
:1044A00070930A0480930B0490930C0410922F04D1 |
:1044B000109230041092310410923204109233049E |
:1044C000109234041092350410923604109237047E |
:1044D000109238041092390410923A0410923B045E |
:1044E00010923C0410923D0410923E0410923F043E |
:1044F0001092400410924104109242041092C50898 |
:104500001092C4081092BD081092BC081092E408E2 |
:104510001092E30880910B0390910C03A0910D037E |
:10452000B0910E0390933308809332081092E40305 |
:104530001092E30310924704109248041092490429 |
:1045400010924A0480914B0490914C0490934E0435 |
:1045500080934D040E947D3882E390E09093CB03DA |
:104560008093CA0360919F0877278827992724ECB6 |
:1045700039E040E050E00E941C3A60938803709359 |
:10458000890380938A0390938B036091A008772717 |
:10459000882799270E941C3A60938C0370938D039F |
:1045A00080938E0390938F031092A1031092A00327 |
:1045B00008951F93182F0EC080916204882361F420 |
:1045C00084E690E09093CB038093CA038AEF90E057 |
:1045D0000E94FC0D115080F71F91089581E0809397 |
:1045E000740862E06093750853E050937608E4E045 |
:1045F000E093770875E07093780886E080937908F7 |
:1046000087E080937A0838E030937B0881EC8093D0 |
:104610007C088EE180937D0824E620937F084AE0A1 |
:104620004093800892E390937E0890938208609371 |
:1046300081085093830810928408309385088FE096 |
:10464000809386088AEF809387088AE180938808A0 |
:1046500080E88093890888EC80938A088FEA8093A9 |
:104660008B088EE580938C0883E280938D0884E12B |
:1046700080938E0810928F084093900880E5809375 |
:104680009108109292081092930810929408109238 |
:10469000A4081092A5081092A6081092A7082093CB |
:1046A000950888E2809396081092A908909397083D |
:1046B00086E9809398087093990890939A088AE500 |
:1046C00080939B0890939C081092A80820939D08C3 |
:1046D00040939E0820939F082093A0082093A10850 |
:1046E000E093A2089093A308AEEAB8E0EDE6F3E009 |
:1046F0008CE001900D928150E1F7089581E0809364 |
:10470000740892E09093750883E08093760844E003 |
:104710004093770855E05093780886E080937908B5 |
:1047200087E080937A0888E080937B0880E4809318 |
:104730007C088EE180937D088BEF80937F083AE0C0 |
:104740003093800822E320937E0820938208909380 |
:1047500081084093830810928408309385088FE085 |
:10476000809386088AEF809387088AE1809388087F |
:1047700080E8809389088FEA80938A0880938B0869 |
:104780008EE580938C0883E280938D0884E180938A |
:104790008E0810928F0880E28093900880E58093C5 |
:1047A0009108109292081092930810929408109217 |
:1047B000A4081092A5081092A6081092A70894E6E3 |
:1047C0009093950888E2809396081092A908209308 |
:1047D000970886E9809398085093990820939A083F |
:1047E0008AE580939B0820939C081092A8089093D8 |
:1047F0009D0830939E0890939F089093A0089093F3 |
:10480000A1084093A2088BE48093A308AEEAB8E025 |
:10481000E7E7F3E08CE001900D928150E1F7089515 |
:1048200081E08093740882E08093750883E0809330 |
:10483000760834E03093770865E06093780886E086 |
:104840008093790887E080937A0898E090937B08BA |
:1048500080E480937C088EE180937D088BEF8093C9 |
:104860007F085AE05093800822E320937E0820932B |
:1048700082083093810830938308909384088EE0F7 |
:10488000809385088FE0809386088AEF809387085D |
:104890008AE18093880890E89093890888E780935C |
:1048A0008A0846E940938B088EE580938C0883E262 |
:1048B00080938D0884E180938E0810928F0880E2A7 |
:1048C0008093900890939108109292081092930808 |
:1048D000109294081092A4081092A5081092A608AD |
:1048E0001092A70894E69093950888E28093960822 |
:1048F0001092A9082093970840939808609399080C |
:1049000020939A088AE580939B0820939C08109234 |
:10491000A80890939D0850939E0890939F089093A9 |
:10492000A0082093A1083093A2089093A308AEEAB0 |
:10493000B8E0EFE7F3E08CE001900D928150E1F7F1 |
:1049400008952F923F924F925F926F927F928F9233 |
:104950009F92AF92BF92CF92DF92EF92FF920F930E |
:104960001F93CF93DF93CDB7DEB76A970FB6F89456 |
:10497000DEBF0FBECDBF0E94DE16299AE0917608F9 |
:10498000FF27EE0FFF1FE85BF74F0190F081E02D4E |
:10499000E858FF4F809172048B3030F08091E3042F |
:1049A0009091E404E80FF91F8091E2089927449759 |
:1049B000E817F9070CF4CF019A83898397FF02C0A7 |
:1049C0001A82198280915B04843608F05DC0809160 |
:1049D0000301882399F480910503909106038F5F6A |
:1049E0009F4F61F488E99AE39093CB038093CA03C5 |
:1049F00080E09CE090930603809305038091A204DD |
:104A00009091A304009731F001979093A3048093B1 |
:104A1000A20404C01092620410925104809100011B |
:104A20008A3011F4289A01C0289880919D049091B1 |
:104A30009E04815D974028F180918D08482F55276D |
:104A40005A83498381E080935104E0917408FF27E1 |
:104A5000EE0FFF1FE85BF74F11821082E09175089F |
:104A6000FF27EE0FFF1FE85BF74F11821082E091E6 |
:104A70007708FF27EE0FFF1FE85BF74F11821082C8 |
:104A800050C2109262044DC280915B048D3808F4CC |
:104A900048C21092510480918E0822E3829FC00187 |
:104AA00011249093A3048093A20469817A816932CE |
:104AB00071056CF080919D0490919E047FEF8F3F73 |
:104AC000970781F1019690939E0480939D048091B5 |
:104AD0009D0490919E04883C910520F089819A81E3 |
:104AE000889704F51092BC041092BD041092BE0485 |
:104AF0001092BF041092B8041092B9041092BA0434 |
:104B00001092BB0410923F04109240041092410492 |
:104B100010924204109243041092440410924504EF |
:104B200010924604A981BA81A93CB1050CF459C17F |
:104B300080916204882309F0F4C180917708E82FFE |
:104B4000FF27EE0FFF1FE85BF74F808191818C34C8 |
:104B500091050CF4BCC08091A1048F5F8093A104E7 |
:104B6000893C08F4DEC12998109262041092A104D5 |
:104B700010929E0410929D0480917408282F332770 |
:104B8000F901EE0FFF1FE85BF74F808191818734B9 |
:104B900091059CF4E0917508FF27EE0FFF1FE85B7D |
:104BA000F74F0190F081E02DF7FF03C0F095E195FC |
:104BB000FF4FE734F1050CF46CC080917508682F45 |
:104BC0007727DB01AA0FBB1FA85BB74F8D919C9184 |
:104BD0001197873491053CF0F901EE0FFF1FE85B58 |
:104BE000F74F808191818D919C918734910564F07C |
:104BF000F901EE0FFF1FE85BF74F80819181873449 |
:104C0000910514F042E001C041E0FB01EE0FFF1FEF |
:104C1000E85BF74F80819181863491055CF4F9015E |
:104C2000EE0FFF1FE85BF74F80819181873491057C |
:104C30000CF043E0FB01EE0FFF1FE85BF74F8081B4 |
:104C400091818A5B9F4F5CF4F901EE0FFF1FE85BD7 |
:104C5000F74F80819181873491050CF044E0660F15 |
:104C6000771F685B774FFB01808191818A5B9F4F43 |
:104C70005CF4220F331F285B374FD9018D919C9133 |
:104C8000863491050CF445E0A2E0B0E0042E0E94C9 |
:104C9000B33A80917C0880FF10C080910F039091FF |
:104CA0001003875B934038F480910F0390911003B9 |
:104CB0008E5E924010F40E94B0100E94330247E4CE |
:104CC00064E778E00E945A020E94782182C08081C5 |
:104CD0009181855B9F4F0CF081C08091A1048F5F13 |
:104CE0008093A104893C08F41CC129988FEF04E04B |
:104CF00010E0D801082E0E94B33A1092620410927C |
:104D0000A10410929E0410929D040E94782180912B |
:104D100005049091060460E071E00E945B3AD801BE |
:104D2000062E0E94B33A809105049091060460E03B |
:104D300071E00E945B3A0F5F1F4FD801082E0E945E |
:104D4000B33A809107049091080460E071E00E94FA |
:104D50005B3A0F5F1F4FD801062E0E94B33A809135 |
:104D600007049091080460E071E00E945B3A0F5FD5 |
:104D70001F4FD801082E0E94B33A60910904709128 |
:104D80000A0480910B0490910C040E943D39DC01CF |
:104D9000CB0160E071E00E945B3A0F5F1F4FD801CA |
:104DA000062E0E94B33A6091090470910A04809122 |
:104DB0000B0490910C040E943D39DC01CB0160E0B2 |
:104DC00071E00E945B3A0F5F1F4FD801082E0E94CE |
:104DD000B33A0E9433020E94D922A3C01092A104C8 |
:104DE000A0C0E981FA81B3970CF09BC0809177084D |
:104DF000482F5527FA01EE0FFF1FE85BF74F808120 |
:104E00009181855B9F4F0CF06DC08091A0048F5FF6 |
:104E10008093A004893C08F467C088EC8093A004C8 |
:104E200081E090E090939E0480939D0481E08093C4 |
:104E300062041092B4041092B5041092B604109259 |
:104E4000B70410923F041092400410924104109253 |
:104E500042041092430410924404109245041092AC |
:104E6000460410922F0410923004109231041092D4 |
:104E700032041092370410923804109239041092C0 |
:104E80003A0480910F0490911004A0911104B09104 |
:104E900012048093330490933404A0933504B093A8 |
:104EA00036048091170490911804A0911904B091D0 |
:104EB0001A0480933B0490933C04A0933D04B09368 |
:104EC0003E041092BC041092BD041092BE041092D5 |
:104ED000BF041092B8041092B9041092BA04109250 |
:104EE000BB0402C01092A004440F551F485B574FEB |
:104EF000DA018D919C918C3491058CF080919F0406 |
:104F00008F5F80939F04893C60F01092620488EC6C |
:104F100080939F0410929E0410929D0402C01092F0 |
:104F20009F0480916C03815080936C0380916C038B |
:104F30008F3F29F080915104882309F460C30E94B7 |
:104F4000111E80917408882E9924D401AA0FBB1FCA |
:104F5000CD01885B974FFC01808191819E8B8D8B69 |
:104F600080918308C82EDD24A25AB74F0D90BC91C2 |
:104F7000A02DBC8BAB8B80918408282E332480918C |
:104F80007508A82EBB24C501880F991FDC01A85BFA |
:104F9000B74F0D90BC91A02DBA8BA98B825A974F19 |
:104FA000DC01ED90FC90E0917708AE2FBB27AA0FB3 |
:104FB000BB1FA85BB74F0D90BC91A02DBE87AD87DE |
:104FC00010919903612F772767FD7095872F972F91 |
:104FD0000E945A3917FF06C020E030E040E853E451 |
:104FE0000E94B53820E030E040E251E40E94B5383C |
:104FF00020E030E040E85BE30E94D4392B013C0123 |
:105000006093E5087093E6088093E7089093E808BA |
:1050100010919A03612F772767FD7095872F972F3F |
:105020000E945A3917FF06C020E030E040E853E400 |
:105030000E94B53820E030EE4BE257E40E94F7388A |
:105040006093D7087093D8088093D9089093DA08B2 |
:105050002091B303222311F40C948A378AE090E064 |
:105060009093CB038093CA03E22FFF27E2FF09C08E |
:1050700080917104482F5527440F551F440F551F29 |
:1050800010C0E3FD03C040E050E00BC0809171040C |
:105090009927880F991F880F991F44275527481B68 |
:1050A000590B20917B0430917C04C90103E0880FE7 |
:1050B000991F0A95E1F7821B930B840F951F68E0F7 |
:1050C00070E00E945B3A788F6F8B70937C046093E2 |
:1050D0007B04E4FF09C080917104482F5527440FD9 |
:1050E000551F440F551F0FC0E5FD02C00C94A0379B |
:1050F000809171049927880F991F880F991F442761 |
:105100005527481B590B20917D0430917E04C9011D |
:10511000A3E0880F991FAA95E1F7821B930B840FD8 |
:10512000951F68E070E00E945B3A8B0170937E04EB |
:1051300060937D048091B203282F332723FF03C09F |
:1051400082E390E004C022FF07C08EEC9FEF9093B3 |
:10515000800480937F0404C01092800410927F0426 |
:1051600021FF09C08091A0039091A1030196909323 |
:10517000A1038093A00324FF09C08091A003909114 |
:10518000A10301979093A1038093A0032D893E89E9 |
:105190002C9DF0012D9DF00D3C9DF00D11244B89AF |
:1051A0005C89429DC001439D900D529D900D11243C |
:1051B000E80FF91F8F89988D68E070E00E945B3AD4 |
:1051C000E60FF71FFA8FE98FF0935D04E0935C041C |
:1051D00069897A896C9D90016D9D300D7C9D300DA3 |
:1051E0001124E29CC001E39C900DF29C900D1124CF |
:1051F000280F391FC80168E070E00E945B3A260F53 |
:10520000371F30935F0420935E0440917F045091D8 |
:1052100080048D859E85481B590B509361044093F3 |
:105220006004809172048B30F0F08091DF049091E3 |
:10523000E004E80FF91FF0935D04E0935C048091B3 |
:10524000DD049091DE04280F391F30935F04209312 |
:105250005E048091E1049091E204480F591F50933D |
:1052600061044093600480917C0882FF0CC080E060 |
:1052700090E0A0E0B0E08093D7089093D808A09386 |
:10528000D908B093DA0820E030E040E050E0C301F4 |
:10529000B2010E946439882364F480E090E0A0E0C9 |
:1052A000B0E08093E5089093E608A093E708B093F8 |
:1052B000E80820E030E040E050E06091D7087091CD |
:1052C000D8088091D9089091DA080E94643988231F |
:1052D00064F480E090E0A0E0B0E08093D708909381 |
:1052E000D808A093D908B093DA088091A808682F4D |
:1052F00077278B010470107062FDC3C063FDC1C0CD |
:1053000080910F0490911004A0911104B0911204A7 |
:1053100081569A4EA040B040F4F020915C04309148 |
:105320005D04C601F3E0880F991FFA95E1F7281B89 |
:10533000390B30935D0420935C0480910F049091AD |
:105340001004A0911104B091120481589843A14017 |
:10535000B040BCF12AC080910F0490911004A0913C |
:105360001104B0911204805A9541AF4FBF4F4CF5D4 |
:1053700020915C0430915D04C601E3E0880F991F21 |
:10538000EA95E1F7280F391F30935D0420935C0400 |
:1053900080910F0490911004A0911104B091120417 |
:1053A00081589843A140B04064F0C60174E0880F72 |
:1053B000991F7A95E1F7281B390B30935D042093F0 |
:1053C0005C048091170490911804A0911904B09185 |
:1053D0001A0481569A4EA040B040F4F020915E0429 |
:1053E00030915F04C60153E0880F991F5A95E1F789 |
:1053F000281B390B30935F0420935E0480911704BF |
:1054000090911804A0911904B0911A0481589843FE |
:10541000A140B040B4F12AC08091170490911804C3 |
:10542000A0911904B0911A04805A9541AF4FBF4F13 |
:1054300044F520915E0430915F04C60143E0880F7B |
:10544000991F4A95E1F7280F391F30935F04209385 |
:105450005E048091170490911804A0911904B091F2 |
:105460001A0481589843A140B0405CF0B4E0CC0CE1 |
:10547000DD1CBA95E1F72C193D0930935F042093A8 |
:105480005E04F501EE0FFF1FE85BF74F20813181CD |
:1054900080919B08482F55274217530734F4012B5E |
:1054A00021F081E080936D0411C0F501EE0FFF1F24 |
:1054B000E85BF74F2081318180919C08DA01A81BBD |
:1054C000B1092A173B0714F410926D04F501EE0F91 |
:1054D000FF1FE85BF74F80819181AA27BB27A41BA0 |
:1054E000B50B8A179B0734F463FF04C081E08093F7 |
:1054F0006E0417C080916E04882399F0AA0CBB1C1F |
:10550000E8E4F8E0AE0EBF1EF50120813181809104 |
:105510009C089927841B950B8217930714F410920B |
:105520006E04F401EE0FFF1FE85BF74F808191815D |
:105530004817590734F460FF04C081E08093700479 |
:1055400015C080917004882389F0F401EE0FFF1FCD |
:10555000E85BF74F2081318180919C08FA01E81BBC |
:10556000F1092E173F0714F410927004F401EE0FA6 |
:10557000FF1FE85BF74F808191818A179B0734F406 |
:1055800061FF04C081E080936F0417C080916F04B5 |
:10559000882399F0880C991C28E438E0820E931E29 |
:1055A000D4012D913C9180919C089927841B950BE7 |
:1055B0008217930714F410926F0480916D0488236E |
:1055C00021F480916E04882321F081E080936C04A3 |
:1055D00002C010926C0480917004882321F48091A1 |
:1055E0006F04882351F081E080936B0410926C0467 |
:1055F00010926D0410926E040EC010926B04809194 |
:105600006C04882311F40C94A43784E690E0909302 |
:10561000CB038093CA0380919A089927E981FA8184 |
:105620008E179F0714F49A838983209051042220B7 |
:1056300041F1109261041092600410925D04109286 |
:105640005C0410925F0410925E048DEC9CECACEC58 |
:10565000BDE38093E5089093E608A093E708B09334 |
:10566000E8088AE097EDA3EABBE38093D70890931C |
:10567000D808A093D908B093DA0810926C0410925D |
:105680006B048091CF089091D008A091D108B0917F |
:10569000D20820910F0430911004409111045091D0 |
:1056A0001204820F931FA41FB51F8093CF089093FD |
:1056B000D008A093D108B093D2088091D3089091DC |
:1056C000D408A091D508B091D60820911704309144 |
:1056D00018044091190450911A04820F931FA41FBB |
:1056E000B51F8093D3089093D408A093D508B093A6 |
:1056F000D6088091C7089091C808A091C908B091B8 |
:10570000CA0820911304309114044091150450915B |
:105710001604820F931FA41FB51F8093C708909390 |
:10572000C808A093C908B093CA088091BF08909197 |
:10573000C008A091C108B091C20820911B0430910B |
:105740001C0440911D0450911E04820F931FA41F3E |
:10575000B51F8093BF089093C008A093C108B09371 |
:10576000C20830906B04332011F00C9404388091FF |
:105770006C04882311F00C9404380C94AC37F0EED0 |
:105780006F16FFEF7F06FFEF8F06FFEF9F0644F4D3 |
:10579000B0EE6B2EBFEF7B2EBFEF8B2EBFEF9B2E9D |
:1057A000213231054105510534F0A0E2AA2EB12C79 |
:1057B000C12CD12C0DC0205E3F4F4F4F5F4F44F4A2 |
:1057C000F0EEAF2EFFEFBF2EFFEFCF2EFFEFDF2E5D |
:1057D00080912F0490913004A0913104B091320453 |
:1057E00086199709A809B90980932F04909330046A |
:1057F000A0933104B093320480913704909138041F |
:10580000A0913904B0913A048A199B09AC09BD09E9 |
:105810008093370490933804A0933904B0933A04EA |
:105820008091E5039091E6038F3F910509F008F41C |
:10583000CBC4332009F04CC480916C04882309F058 |
:1058400047C46091CF087091D0088091D1089091A1 |
:10585000D20820E031E040E050E00E94903A2093EE |
:10586000CF083093D0084093D1085093D20860916C |
:10587000D3087091D4088091D5089091D60820E083 |
:1058800031E040E050E00E94903A2093D3083093FA |
:10589000D4084093D5085093D608E0908808FF2498 |
:1058A0000027112720911F043091200440912104EA |
:1058B00050912204C801B7010E941C3A20E031E057 |
:1058C00040E050E00E94903A20931F04309320045F |
:1058D0004093210450932204209123043091240406 |
:1058E0004091250450912604C801B7010E941C3A3A |
:1058F00020E031E040E050E00E94903A2093230401 |
:105900003093240440932504509326046091270487 |
:10591000709128048091290490912A0420E031E0BC |
:1059200040E050E00E94903A2093270430932804EE |
:105930004093290450932A046091CF087091D008B5 |
:105940008091D1089091D20820911F0430912004B9 |
:105950004091210450912204E090A108FF240027E7 |
:105960001127621B730B840B950BA80197010E94F2 |
:10597000903A209395043093960440939704509363 |
:105980009804CA01B90120E031E040E050E00E94F3 |
:10599000903A290130936A04209369046091D308F6 |
:1059A0007091D4088091D5089091D6082091230455 |
:1059B000309124044091250450912604621B730BFE |
:1059C000840B950BA80197010E94903A79018A01F6 |
:1059D000CA01B90120E031E040E050E00E94903A75 |
:1059E000388F2F8B30936804209367046091C70829 |
:1059F0007091C8088091C9089091CA0820E031E0F0 |
:105A000040E050E00E94903A2093C7083093C808C5 |
:105A10004093C9085093CA086091BF087091C008AC |
:105A20008091C1089091C20820E031E040E050E050 |
:105A30000E94903A2093BF083093C0084093C10859 |
:105A40005093C208A0901304B0901404C0901504A1 |
:105A5000D090160480910F0490911004A09111042D |
:105A6000B0911204A81AB90ACA0ADB0AA092B004BB |
:105A7000B092B104C092B204D092B30460901B04FF |
:105A800070901C0480901D0490901E048091170457 |
:105A900090911804A0911904B0911A04681A790A17 |
:105AA0008A0A9B0A6092AC047092AD048092AE04A4 |
:105AB0009092AF04A092A804B092A904C092AA0444 |
:105AC000D092AB046092A4047092A5048092A604C4 |
:105AD0009092A7048091330490913404A0913504EE |
:105AE000B09136048A199B09AC09BD09809333042F |
:105AF00090933404A0933504B093360480913B0412 |
:105B000090913C04A0913D04B0913E048619970900 |
:105B1000A809B90980933B0490933C04A0933D04E9 |
:105B2000B0933E0460911F04709120048091210481 |
:105B3000909122042AE130E040E050E00E94903A47 |
:105B400030937A072093790760912304709124049D |
:105B500080912504909126042AE130E040E050E055 |
:105B60000E94903A30937C0720937B07B0927E0787 |
:105B7000A0927D077092800760927F076091CF08A6 |
:105B80007091D0088091D1089091D2082AE130E03C |
:105B900040E050E00E94903A3093820720938107C2 |
:105BA0006091D3087091D4088091D5089091D6085F |
:105BB0002AE130E040E050E00E94903A30938407C0 |
:105BC00020938307F0929207E09291078F89988D36 |
:105BD000880F991F2F89388D73E0220F331F7A9514 |
:105BE000E1F7820F931F909394078093930781E0CE |
:105BF00090E09093900480938F048091CF089091CF |
:105C0000D008A091D108B091D2082091870430919A |
:105C100088044091890450918A04281B390B4A0B4F |
:105C20005B0B57FF07C050954095309521953F4F2E |
:105C30004F4F5F4F20523E44404050400CF0B9C09F |
:105C400081E0A81680E1B80680E0C80680E0D806AA |
:105C50000CF44EC080918E04882309F445C0D6010F |
:105C6000C5016CE0B595A795979587956A95D1F78D |
:105C700001969093900480938F04D601C50153E060 |
:105C8000B595A795979587955A95D1F780939504E3 |
:105C900090939604A0939704B093980489589341E5 |
:105CA000A040B04064F088E893E1A0E0B0E08093C9 |
:105CB000950490939604A0939704B09398046091F0 |
:105CC000950470919604809197049091980420E037 |
:105CD00031E040E050E00E94903A420E531E509254 |
:105CE0006A044092690462C081E080938E045EC0C1 |
:105CF00010928E04F0E0AF16F0EFBF06FFEFCF0674 |
:105D0000FFEFDF060CF052C080918D04882309F468 |
:105D100049C088279927DC018A199B09AC09BD096C |
:105D20004CE0B595A795979587954A95D1F701963B |
:105D30009093900480938F04C601B50128E030E071 |
:105D400040E050E00E94903A2093950430939604EE |
:105D5000409397045093980428573C4E4F4F5F4F01 |
:105D600064F488E79CEEAFEFBFEF809395049093C7 |
:105D70009604A0939704B093980460919504709151 |
:105D80009604809197049091980420E031E040E0DF |
:105D900050E00E94903A420E531E50926A04409284 |
:105DA00069040BC081E080938D0407C010928D04BC |
:105DB00004C01092900410928F048091A208082FC2 |
:105DC000112780918F04909190040817190724F4EB |
:105DD0001093900400938F0471E0A71674E0B70647 |
:105DE00070E0C70670E0D7065CF08091FB039091ED |
:105DF000FC0320918F0430919004820F931F13C0F5 |
:105E000080E0A8168CEFB8068FEFC8068FEFD80693 |
:105E100074F48091FB039091FC0320918F043091E6 |
:105E20009004821B930B9093FC038093FB0381E00F |
:105E300090E09093900480938F04109291041092BC |
:105E4000920410929304109294048091D30890913C |
:105E5000D408A091D508B091D60820918304309140 |
:105E600084044091850450918604281B390B4A0B09 |
:105E70005B0B57FF07C050954095309521953F4FDC |
:105E80004F4F5F4F20523E44404050400CF0BDC049 |
:105E9000A1E06A16A0E17A06A0E08A06A0E09A06D0 |
:105EA0000CF450C080918C04882309F447C0D401BD |
:105EB000C3013CE0B595A795979587953A95D1F79D |
:105EC00001969093900480938F04D401C30123E042 |
:105ED000B595A795979587952A95D1F780939104C5 |
:105EE00090939204A0939304B0939404895893419F |
:105EF000A040B04064F088E893E1A0E0B0E0809377 |
:105F0000910490939204A0939304B09394046091AD |
:105F1000910470919204809193049091940420E0F4 |
:105F200031E040E050E00E94903A6F89788D620F36 |
:105F3000731F709368046093670464C081E080936A |
:105F40008C0460C010928C0470E0671670EF7706C6 |
:105F50007FEF87067FEF97060CF054C080918B048B |
:105F6000882309F44BC088279927DC0186199709F3 |
:105F7000A809B909FCE0B595A79597958795FA9575 |
:105F8000D1F701969093900480938F04C401B301DC |
:105F900028E030E040E050E00E94903A20939104E5 |
:105FA00030939204409393045093940428573C4EAA |
:105FB0004F4F5F4F64F488E79CEEAFEFBFEF8093E5 |
:105FC000910490939204A0939304B09394046091ED |
:105FD000910470919204809193049091940420E034 |
:105FE00031E040E050E00E94903AAF89B88DA20FB6 |
:105FF000B31FB0936804A09367040BC081E0809343 |
:106000008B0407C010928B0404C01092900410926D |
:106010008F04809191049091920490938E078093C5 |
:106020008D0780918F04909190040817190724F42C |
:106030001093900400938F04B1E06B16B4E07B06DC |
:10604000B0E08B06B0E09B065CF08091FD03909180 |
:10605000FE0320918F0430919004820F931F13C090 |
:10606000E0E06E16ECEF7E06EFEF8E06EFEF9E0699 |
:1060700074F48091FD039091FE0320918F04309180 |
:106080009004821B930B9093FE038093FD038091F9 |
:10609000FB039091FC039093860780938507809182 |
:1060A000FD039091FE032091010430910204821BB4 |
:1060B000930B9C01E3E0220F331FEA95E1F7880F71 |
:1060C000991F820F931F909388078093870708C0BA |
:1060D000109268041092670410926A041092690486 |
:1060E00020E030E040E050E06091D7087091D8089F |
:1060F0008091D9089091DA080E946439882341F48C |
:10610000109268041092670410926A041092690455 |
:106110008091CF089091D008A091D108B091D20879 |
:106120008093870490938804A0938904B0938A0491 |
:106130008091D3089091D408A091D508B091D60849 |
:106140008093830490938404A0938504B093860481 |
:1061500010921F0410922004109221041092220425 |
:106160001092230410922404109225041092260405 |
:1061700010922704109228041092290410922A04E5 |
:106180001092CF081092D0081092D1081092D20825 |
:106190001092D3081092D4081092D5081092D60805 |
:1061A0001092C7081092C8081092C9081092CA0825 |
:1061B0001092BF081092C0081092C1081092C20835 |
:1061C0001092E6031092E5038090600490906104C1 |
:1061D000540197FE04C0AA24BB24A818B908F5E10D |
:1061E000AF16B1043CF080917C0884FD03C081E0CF |
:1061F00080939904E0908508CC24B7FCC094DC2CF3 |
:10620000B401882777FD8095982F2E2D33274427BA |
:1062100055270E941C3A9B01AC01C601B5010E94A2 |
:106220001C3A20E032E040E050E00E94903A8901C0 |
:106230009A01FF24E89CC001E99C900DF89C900D08 |
:10624000112464E070E00E945B3A600F711F3B0113 |
:10625000882477FC8094982C6092B4047092B504E2 |
:106260008092B6049092B70480913F0490914004CC |
:10627000A0914104B091420486199709A809B9096F |
:1062800080933F0490934004A0934104B093420450 |
:1062900080913F0490914004A0914104B091420448 |
:1062A0008155934CA040B04064F080E593ECA0E0B1 |
:1062B000B0E080933F0490934004A0934104B093D6 |
:1062C000420480913F0490914004A0914104B09118 |
:1062D0004204805B9C43AF4FBF4F64F480EB9CE370 |
:1062E000AFEFBFEF80933F0490934004A09341042D |
:1062F000B093420480914B0490914C04892B09F493 |
:1063000092C080917C0883FF8EC060910F047091D1 |
:106310001004809111049091120420E032E040E0DA |
:1063200050E00E94903A890137FF03C01095019513 |
:106330001F4F609117047091180480911904909177 |
:106340001A0420E032E040E050E00E94903AB901A7 |
:1063500037FF03C0709561957F4F601771070CF48C |
:10636000B80169317105A4F480919904882381F002 |
:106370008091810490918204892B51F480914B0487 |
:1063800090914C0490934E0480934D041092990484 |
:10639000209198033327629FC001639F900D729FE5 |
:1063A000900D112460E470E00E945B3AA901461B45 |
:1063B000570B141615068CF5809181049091820478 |
:1063C000009749F500913F04109140042091410449 |
:1063D0003091420480914F0490915004BC01649F1D |
:1063E000C001659F900D749F900D112460E270E0D4 |
:1063F0000E945B3A882777FD8095982F060F171F1C |
:10640000281F391F00933F04109340042093410438 |
:106410003093420408C0019702C084EF91E090934A |
:1064200082048093810480919A04815080939A041D |
:106430008F3F09F079C088E180939A0460910F043E |
:10644000709110048091110490911204E0908808DA |
:10645000FF2400271127A80197010E94903A30934A |
:106460005807209357076091170470911804809182 |
:10647000190490911A04A80197010E94903A309350 |
:106480005A07209359078091E0089091E108909372 |
:106490005C0780935B078091EA089091EB089093EA |
:1064A0005E0780935D078091E3089091E4089093E4 |
:1064B000600780935F0780916304909164049093D8 |
:1064C000620780936107609147047091480480914E |
:1064D000490490914A0420E032E040E050E00E94FC |
:1064E000903A309364072093630780914B04909116 |
:1064F0004C049093680780936707809109039091FB |
:106500000A0390936A078093690780915B04992737 |
:1065100090936C0780936B078091CB089091CC0887 |
:1065200090937807809377073320A9F06091C4088F |
:106530007091C508882777FD8095982F0E945A3959 |
:106540002091E5083091E6084091E7085091E8086D |
:106550000E94D43932C060910F0470911004809170 |
:10656000110490911204E090C408F090C5080E94B4 |
:106570005A392091D7083091D8084091D9085091C4 |
:10658000DA080E94D4395B016C010027F7FC009502 |
:10659000102FC801B7010E945A392091E5083091A7 |
:1065A000E6084091E7085091E8080E94D4399B0121 |
:1065B000AC01C601B5010E94B5380E943D39709307 |
:1065C000C5086093C40880916C048823A9F0609189 |
:1065D000BC087091BD08882777FD8095982F0E9490 |
:1065E0005A392091E5083091E6084091E70850912A |
:1065F000E8080E94D43932C06091170470911804E1 |
:106600008091190490911A04E090BC08F090BD08A4 |
:106610000E945A392091D7083091D8084091D90862 |
:106620005091DA080E94D4395B016C010027F7FC15 |
:106630000095102FC801B7010E945A392091E50832 |
:106640003091E6084091E7085091E8080E94D4395B |
:106650009B01AC01C601B5010E94B5380E943D39CD |
:106660007093BD086093BC086091E3087091E408E2 |
:10667000E0902B04F0902C0400912D0410912E0436 |
:106680008091D7089091D808A091D908B091DA08E4 |
:1066900089879A87AB87BC87882777FD8095982F55 |
:1066A0000E945A392091E5083091E6084091E708A8 |
:1066B0005091E8080E94D4395B016C01C801B70110 |
:1066C0000E945A3929853A854B855C850E94D439C8 |
:1066D00020E030E040E05FE30E94D4399B01AC0150 |
:1066E000C601B5010E94B5380E943D397093E40897 |
:1066F0006093E3088091BC089091BD089093900747 |
:1067000080938F0760911704709118048091190489 |
:1067100090911A040E945A3929853A854B855C85E7 |
:106720000E94D4390E943D3970938A07609389078B |
:10673000A0915E04B0915F04B88BAF87B0939607C9 |
:10674000A09395078091C4089091C5088150984006 |
:1067500034F080E098E09093C5088093C40880915D |
:10676000C4089091C5088050984F34F480E098EFA9 |
:106770009093C5088093C4088091BC089091BD088F |
:106780008150984034F080E098E09093BD08809369 |
:10679000BC088091BC089091BD088050984F34F49B |
:1067A00080E098EF9093BD088093BC088091E30847 |
:1067B0009091E4088150984034F080E098E0909304 |
:1067C000E4088093E3088091E3089091E408805006 |
:1067D000984F34F480E098EF9093E4088093E308B6 |
:1067E00080917C08992780FFD7C04091950381FF55 |
:1067F0000EC0423310F58091630490916404449775 |
:1068000090936604809365041092520419C02091FD |
:10681000A0033091A103240F311D80918108992795 |
:10682000BC01269FC001279F900D369F900D11241B |
:106830004497909366048093650481E080935204AA |
:10684000222021F0109266041092650420916304C6 |
:1068500030916404409165045091660442175307D7 |
:106860000CF09AC080915204882309F495C0241B2F |
:10687000350B809196039927DC012A9FC0012B9F3D |
:10688000900D3A9F900D112460E170E00E945B3AF8 |
:1068900009811A81061B170B2091E3033091E40351 |
:1068A000809194039927FC012E9FC0012F9F900D8A |
:1068B0003E9F900D112468E070E00E945B3A061B39 |
:1068C000170B60914704709148048091490490919E |
:1068D0004A0420E032E040E050E00E94903ACA01D1 |
:1068E000B901209197033327442755270E941C3A6A |
:1068F00020E230E040E050E00E94903AFFEF2E3C72 |
:106900003F0714F42EEC3FEF80919B0490919C0480 |
:10691000AC0164E0440F551F6A95E1F7481B590B21 |
:106920002333310514F022E330E0021B130BCA01BC |
:10693000800F911F60E170E00E945B3A70939C04AD |
:1069400060939B0480917D089927681779078CF4E0 |
:1069500029813A81281739072CF090939C04809361 |
:106960009B0407C049815A8150939C0440939B0427 |
:106970000DC080919B0490919C0469817A81681775 |
:10698000790724F470939C0460939B0480919B048A |
:1069900090919C049A838983A981BA81B0936607F8 |
:1069A000A09365070091E3081091E4088091E20844 |
:1069B000482E552454971CF41C821B8231C08981B7 |
:1069C0009A8162E070E00E945B3A9B01C201E9811A |
:1069D000FA818E1B9F0B62E070E00E945B3AAB0174 |
:1069E000B80166197709C901621773070CF4CB0166 |
:1069F00066277727621B730B681779070CF4BC01B5 |
:106A0000CA01641775070CF4CB0122273327241B16 |
:106A1000350B3C832B832817390714F49C838B8315 |
:106A20002091C4083091C50880905C0490905D046A |
:106A30008091C8049091C904881A990A28193909C3 |
:106A40003093CE082093CD0820E030E040E050E0C5 |
:106A500069857A858B859C850E9464398823F1F14C |
:106A6000E0900F04F09010040091110410911204B2 |
:106A70006091BC047091BD048091BE049091BF04EC |
:106A80000E945A395B016C01C801B7010E945A3952 |
:106A900029853A854B855C850E94D4397B018C0120 |
:106AA000B401882777FD8095982F0E945A399B0161 |
:106AB000AC01C801B7010E94B4389B01AC01C6010A |
:106AC000B5010E94B5380E943D396093BC047093B3 |
:106AD000BD048093BE049093BF041CC02091CD08D8 |
:106AE0003091CE08442737FD4095542F8091BC0447 |
:106AF0009091BD04A091BE04B091BF04820F931F7A |
:106B0000A41FB51F8093BC049093BD04A093BE0442 |
:106B1000B093BF048091BC049091BD04A091BE04C9 |
:106B2000B091BF04181619061A061B0624F4029722 |
:106B3000A109B10903C00296A11DB11D8093BC0437 |
:106B40009093BD04A093BE04B093BF048091BC0495 |
:106B50009091BD04A091BE04B091BF0481383EE382 |
:106B6000930730E0A30730E0B3072CF080E89EE302 |
:106B7000A0E0B0E009C08058914CAF4FBF4F64F423 |
:106B800080E891ECAFEFBFEF8093BC049093BD041D |
:106B9000A093BE04B093BF046091CD087091CE085D |
:106BA0008091900390919103A0919203B0919303EF |
:106BB0008D839E83AF83B887882777FD8095982F34 |
:106BC0000E945A397B018C016091BC047091BD0414 |
:106BD0008091BE049091BF040E945A399B01AC0180 |
:106BE0006D817E818F8198850E94D4399B01AC0193 |
:106BF000C801B7010E94B5380E943D393B014C01E4 |
:106C00008B0180919F03A82EBB24CC24DD248B8193 |
:106C10009C8197FF03C0909581959F4F62E070E043 |
:106C20000E945B3A9B01A981BA812A0F3B1F44272E |
:106C300037FD4095542FC601B5010E941C3A20E44F |
:106C400030E040E050E00E94903A1901021713072B |
:106C50000CF493016624772462187308A30162166A |
:106C600073060CF4A90189819A81EB81FC818E0F56 |
:106C70009F1F840F951F97FF03C020E030E005C0E1 |
:106C80009201841595050CF49C018091C608682F2B |
:106C90007727788F6F8BCB01621773070CF4C901CC |
:106CA0008093BE0889819A81841B950BAB81BC813E |
:106CB0008A0F9B1F97FF03C020E030E005C09201C0 |
:106CC000841595050CF49C018F89988D8217930784 |
:106CD0000CF4C9018093C3088091BC089091BD0851 |
:106CE0002091CA043091CB048F849888821A930A29 |
:106CF000881999099093BB088093BA0820E030E086 |
:106D000040E050E069857A858B859C850E946439D6 |
:106D10008823F1F1E0901704F09018040091190411 |
:106D200010911A046091B8047091B9048091BA046A |
:106D30009091BB040E945A395B016C01C801B701F4 |
:106D40000E945A3929853A854B855C850E94D43941 |
:106D50007B018C01B401882777FD8095982F0E94D4 |
:106D60005A399B01AC01C801B7010E94B4389B019C |
:106D7000AC01C601B5010E94B5380E943D3960934F |
:106D8000B8047093B9048093BA049093BB041CC0F8 |
:106D90002091BA083091BB08442737FD4095542F05 |
:106DA0008091B8049091B904A091BA04B091BB0449 |
:106DB000820F931FA41FB51F8093B8049093B9044A |
:106DC000A093BA04B093BB048091B8049091B90425 |
:106DD000A091BA04B091BB04181619061A061B0636 |
:106DE00024F40297A109B10903C00296A11DB11DA7 |
:106DF0008093B8049093B904A093BA04B093BB04F1 |
:106E00008091B8049091B904A091BA04B091BB04E8 |
:106E10008138EEE39E07E0E0AE07E0E0BE072CF02D |
:106E200080E89EE3A0E0B0E009C08058914CAF4FED |
:106E3000BF4F64F480E891ECAFEFBFEF8093B804EC |
:106E40009093B904A093BA04B093BB046091BA08BC |
:106E50007091BB08882777FD8095982F0E945A393A |
:106E60007B018C016091B8047091B9048091BA04DF |
:106E70009091BB040E945A399B01AC016D817E81C7 |
:106E80008F8198850E94D4399B01AC01C801B7015C |
:106E90000E94B5380E943D399101621573050CF4CA |
:106EA0009B01C301621673060CF4C90149815A8122 |
:106EB000480F591F2B813C81421B530B57FF03C0C6 |
:106EC00060E070E005C0B201441555050CF4BA014C |
:106ED0004F89588D461757070CF4AB014093DD08D6 |
:106EE00029813A81281B390B4B815C81241B350B8E |
:106EF00037FF03C080E090E005C0C20124153505CE |
:106F00000CF4C9012F89388D281739070CF0DAC025 |
:106F10009C01D8C020917B0430917C04C90113E00E |
:106F2000880F991F1A95E1F7821B930B68E070E0B8 |
:106F30000E945B3A788F6F8B70937C0460937B0424 |
:106F400040E050E00C94832880916B04882311F476 |
:106F50000C94152B0C940B2B60910F047091100462 |
:106F60008091110490911204A0908808BB24CC2435 |
:106F7000DD24E090E008F090E108A60195010E9470 |
:106F8000903A0027F7FC0095102F2E193F09400B6F |
:106F9000510BCA01B90120E130E040E050E00E940D |
:106FA000903A39014A016091170470911804809158 |
:106FB000190490911A04E090EA08F090EB08A601F9 |
:106FC00095010E94903A0027F7FC0095102F2E198A |
:106FD0003F09400B510BCA01B90120E130E040E00C |
:106FE00050E00E94903A59016A0161E2661671040C |
:106FF0008104910414F40C94BF2BB0E26B2E712C1D |
:10700000812C912C0C94D02B10921F0410922004F0 |
:10701000109221041092220410922304109224044E |
:1070200010922504109226041092CF081092D008D6 |
:107030001092D1081092D2081092D3081092D4085E |
:107040001092D5081092D6081092C7081092C8085E |
:107050001092C9081092CA081092BF081092C00876 |
:107060001092C1081092C20880912F0490913004B0 |
:10707000A0913104B091320480933304909334048E |
:10708000A0933504B093360480913704909138046E |
:10709000A0913904B0913A0480933B0490933C044E |
:1070A000A0933D04B0933E041092E6031092E503D2 |
:1070B00010926A0410926904109268041092670496 |
:1070C0000C94102C2093DB086A960FB6F894DEBF60 |
:1070D0000FBECDBFDF91CF911F910F91FF90EF9029 |
:1070E000DF90CF90BF90AF909F908F907F906F90E8 |
:1070F0005F904F903F902F9008958091CC04909195 |
:10710000CD04A091CE04B091CF048093D404909389 |
:10711000D504A093D604B093D7048091D004909165 |
:10712000D104A091D204B091D3048093D804909359 |
:10713000D904A093DA04B093DB0408951092C90433 |
:107140001092C8041092CB041092CA040895FC0156 |
:107150004150504030F001900616D1F73197CF01E1 |
:1071600008958827992708955058192EEFD001D0F7 |
:10717000D2C0BA176207730784079507B1F188F484 |
:107180000EF410940B2EBA2FA02D062E622F202D58 |
:10719000072E732F302D082E842F402D092E952F6A |
:1071A000502DFF275523B9F0591B49F0573E98F051 |
:1071B000469537952795A795F0405395C9F776F0F2 |
:1071C000BA0F621F731F841F30F4879577956795F8 |
:1071D000B795F040939517FA0F2E0895BF1BBB2764 |
:1071E000BA0B620B730B840BF6CFDEF6DBC0AED0AE |
:1071F00001D091C0552359F0992369F09F575F57EB |
:10720000951B33F442F4903811F4915805C09BC09B |
:1072100091589F3F09F4C6C0BB271124621773071A |
:10722000840730F4660F771F881FBB1F915098F3B7 |
:1072300011D00F920FD00F920DD0A0E8261737076C |
:1072400048071B0609F0A048BA2F602D7F918F9147 |
:1072500000240895A0E80024621773078407B1058D |
:1072600028F0621B730B840BB1090A2A660F771F83 |
:10727000881FBB1FA69581F7089597FB73D09F3792 |
:1072800038F0FEE9F91B982F872F762F6B2F05C05A |
:1072900086C09695879577956795F150D0F73EF41F |
:1072A00090958095709561957F4F8F4F9F4F089572 |
:1072B000E89403C097FB0EF4F3DFB62F672F782F07 |
:1072C000892F9EE9002427C00ED05EF004C00BD0A9 |
:1072D00026F001C008D019F020F48FEF089580E067 |
:1072E000089581E0089597FB092E052600F868941B |
:1072F00030D0E89407FC07C062177307840795072E |
:1073000021F008F400940794989408959A95BB0F7F |
:10731000661F771F881F11249923A1F08823B2F7D5 |
:107320009F3F59F0BB0F48F421F4002011F460FF97 |
:1073300004C06F5F7F4F8F4F9F4F881F9795879532 |
:1073400097F908952CC09FEF80EC0895052E09262B |
:1073500007FA440F551F5F3F79F0AA27A51708F0D9 |
:1073600051E04795880F991F9F3F31F0BB27B91710 |
:1073700008F091E0879508959F919F911124E3CFA4 |
:1073800097FB880F991F9F3F31F0BB27B91708F073 |
:1073900091E0879508959F919F911124D4CF6627FE |
:1073A0007727882799270895D1DF01D0B4CF992373 |
:1073B00039F0552329F09F575F57950F13F49AF131 |
:1073C000F1CF91589F3FE1F3629FA12D0F92BB2710 |
:1073D000639FA00DB11DEE27729FA00DB11DEE1F82 |
:1073E000AF93AA27649FB00DE11D739FB00DE11DFF |
:1073F000AA1F6627829FB00DE11DA61F5527749F07 |
:10740000E00DA11D551F839FE00DA11D561F849FF8 |
:10741000A00D511D852F7A2F6E2F1F900F9088235E |
:107420001AF4939539F48FCF000C111CBB1F661F03 |
:10743000771F881F01280895629FD001739FF00174 |
:10744000829FE00DF11D649FE00DF11D929FF00DF4 |
:10745000839FF00D749FF00D659FF00D9927729F2B |
:10746000B00DE11DF91F639FB00DE11DF91FBD01B6 |
:10747000CF0111240895991B79E004C0991F961734 |
:1074800008F0961B881F7A95C9F780950895AA1B66 |
:10749000BB1B51E107C0AA1FBB1FA617B70710F0FF |
:1074A000A61BB70B881F991F5A95A9F78095909531 |
:1074B000BC01CD01089597FB092E07260AD077FD60 |
:1074C00004D0E5DF06D000201AF4709561957F4F57 |
:1074D0000895F6F7909581959F4F0895A1E21A2E91 |
:1074E000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F68 |
:1074F000A217B307E407F50720F0A21BB30BE40BB8 |
:10750000F50B661F771F881F991F1A9469F76095FE |
:107510007095809590959B01AC01BD01CF010895B8 |
:1075200097FB092E05260ED057FD04D0D7DF0AD0D1 |
:10753000001C38F450954095309521953F4F4F4FA2 |
:107540005F4F0895F6F790958095709561957F4F00 |
:107550008F4F9F4F0895F999FECFB2BDA1BDF89A04 |
:10756000119600B40895F999FECFB2BDA1BD00BC3B |
:1075700011960FB6F894FA9AF99A0FBE0895FFCFB4 |
:107580000A01FF6401496E74656772616C4E69633C |
:107590006B20202020496E74656772616C526F6C9D |
:1075A0006C202020204163634E69636B20202020E3 |
:1075B0002020202020416363526F6C6C202020200B |
:1075C00020202020204779726F4769657220202093 |
:1075D0002020202020486F6568656E5765727420F2 |
:1075E00020202020204163635A20202020202020BA |
:1075F00020202020204761732020202020202020D0 |
:1076000020202020204B6F6D7061737356616C7564 |
:1076100065202020205370616E6E756E67202020DB |
:107620002020202020456D7066616E67202020207C |
:1076300020202020203131202D2D2D202020202001 |
:1076400020202020204D6F746F725F566F726E6520 |
:1076500020202020204D6F746F725F48696E746522 |
:107660006E202020204D6F746F725F4C696E6B73BB |
:1076700020202020204D6F746F725F526563687404 |
:10768000732020202031365F4163635F5A20202021 |
:10769000202020202031374D697474656C4163636C |
:1076A0004E69636B2031385F4D697474656C41635A |
:1076B00063526F6C6C416E616C6F673139202020B2 |
:1076C0002020202020496E74656772616C457272BB |
:1076D000526F6C6C20416E616C6F673231202020DC |
:1076E000202020202032325F4D697474656C474938 |
:1076F0006E67522020416E616C6F6732332020200C |
:1077000020202020203234526F6C6C4F66667365E7 |
:1077100074202020203235496E74526F6C6C2A46DA |
:10772000616B742020416E616C6F673236202020BF |
:107730002020202020446972656B74417573676C4A |
:10774000526F6C6C2032384D65737377657274526A |
:107750006F6C6C20203239417573676C65696368A2 |
:10776000526F6C6C2033305F492D4C616765526FEE |
:107770006C6C20202033315F537469636B526F6CE3 |
:107780006C20202020FFFF0A016400007D0000FF24 |
:10779000030102030405060708090A48616C6C6FBF |
:1077A0002057656C7400000000000000000000001D |
:1077B00000000000000000000000000000000000C9 |
:1077C00000000000000000000000000000000000B9 |
:1077D00000000000000000000000000000000000A9 |
:1077E00000000000000000000000000A0142656780 |
:1077F000696E6E657200004E6F726D616C000053B1 |
:10780000706F72740000640090D0030090D0030089 |
:1078100017B7D13830FB103A409696020A64466496 |
:02782000ECFF7B |
:00000001FF |
/Microsoft Robotics Studio/FC source/V68d for MSRS/FlightCtrl.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/Microsoft Robotics Studio/FC source/V68d for MSRS/GPS.c |
---|
0,0 → 1,30 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
signed int GPS_Nick = 0; |
signed int GPS_Roll = 0; |
long GpsAktuell_X = 0; |
long GpsAktuell_Y = 0; |
long GpsZiel_X = 0; |
long GpsZiel_Y = 0; |
void GPS_Neutral(void) |
{ |
GpsZiel_X = GpsAktuell_X; |
GpsZiel_Y = GpsAktuell_Y; |
} |
void GPS_BerechneZielrichtung(void) |
{ |
GPS_Nick = 0; |
GPS_Roll = 0; |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/License.txt |
---|
0,0 → 1,59 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Copyright (c0 12.2007 Gunter Logemann (serielle steuerung und serial tunnel) |
// + Nur für den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt und genannt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + die serielle Steuerung durch microsoft Robotics Studio, sowie die notwendigen erweiterungen in FC.c und uart.c unterliegt einer |
// + gesonderten lizenz durch Gunter Logemann (gunter@pccon.de) |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + die serielle Steuerung von externen boards an der 2. Seriellen schnittstelle, sowie die notwendigen erweiterungen in FC.c und uart.c |
// + unterliegt einer gesonderten lizenz durch Gunter Logemann (gunter@pccon.de) |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
// + for non-profit use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be |
// + clearly linked and named as origin |
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/Microsoft Robotics Studio/FC source/V68d for MSRS/Settings.h |
---|
--- FC source/V68d for MSRS/_Settings.h (nonexistent) |
+++ FC source/V68d for MSRS/_Settings.h (revision 90) |
@@ -0,0 +1,50 @@ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Testmodi |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define MOTOR_OFF 0 |
+#define MOTOR_TEST 0 |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Abstimmung |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define ACC_AMPLIFY 12 |
+#define FAKTOR_P 1 |
+#define FAKTOR_I 0.0001 |
+ |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Debug-Interface |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein? |
+#define MIN_DEBUG_INTERVALL 500 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Sender |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ #define K_NICK 0 |
+ #define K_ROLL 1 |
+ #define K_GAS 2 |
+ #define K_GIER 3 |
+ #define K_POTI1 4 |
+ #define K_POTI2 5 |
+ #define K_POTI3 6 |
+ #define K_POTI4 7 |
+// +++++++++++++++++++++++++++++++ |
+// + Getestete Settings: |
+// +++++++++++++++++++++++++++++++ |
+// Setting: Kamera |
+// Stick_P:3 |
+// Stick_D:0 |
+// Gyro_P: 175 |
+// Gyro_I: 175 |
+// Ki_Anteil: 10 |
+// +++++++++++++++++++++++++++++++ |
+// + Getestete Settings: |
+// +++++++++++++++++++++++++++++++ |
+// Setting: Normal |
+// Stick_P:2 |
+// Stick_D:8 |
+// Gyro_P: 80 |
+// Gyro_I: 150 |
+// Ki_Anteil: 5 |
+ |
/Microsoft Robotics Studio/FC source/V68d for MSRS/analog.c |
---|
0,0 → 1,147 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100; |
volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0; |
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0; |
volatile long Luftdruck = 32000; |
volatile int StartLuftdruck; |
volatile unsigned int MessLuftdruck = 1023; |
unsigned char DruckOffsetSetting; |
volatile int HoeheD = 0; |
volatile char messanzahl_Druck; |
volatile int tmpLuftdruck; |
volatile unsigned int ZaehlMessungen = 0; |
//####################################################################################### |
// |
void ADC_Init(void) |
//####################################################################################### |
{ |
ADMUX = 0;//Referenz ist extern |
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE); |
//Free Running Mode, Division Factor 128, Interrupt on |
} |
void SucheLuftruckOffset(void) |
{ |
unsigned int off; |
off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]); |
if(off > 20) off -= 10; |
OCR0A = off; |
Delay_ms_Mess(100); |
if(MessLuftdruck < 850) off = 0; |
for(; off < 250;off++) |
{ |
OCR0A = off; |
Delay_ms_Mess(50); |
printf("."); |
if(MessLuftdruck < 900) break; |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off); |
DruckOffsetSetting = off; |
Delay_ms_Mess(300); |
} |
//####################################################################################### |
// |
SIGNAL(SIG_ADC) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
static unsigned int gier1, roll1, nick1; |
ANALOG_OFF; |
switch(state++) |
{ |
case 0: |
gier1 = ADC; |
kanal = 1; |
ZaehlMessungen++; |
break; |
case 1: |
roll1 = ADC; |
kanal = 2; |
break; |
case 2: |
nick1 = ADC; |
kanal = 4; |
break; |
case 3: |
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2; |
kanal = 6; |
break; |
case 4: |
Aktuell_ay = NeutralAccY - ADC; |
AdWertAccRoll = Aktuell_ay; |
kanal = 7; |
break; |
case 5: |
Aktuell_ax = ADC - NeutralAccX; |
AdWertAccNick = Aktuell_ax; |
kanal = 0; |
break; |
case 6: |
if(PlatinenVersion == 10) AdWertGier = (ADC + gier1) / 2; |
else AdWertGier = ADC + gier1; |
kanal = 1; |
break; |
case 7: |
if(PlatinenVersion == 10) AdWertRoll = (ADC + roll1) / 2; |
else AdWertRoll = ADC + roll1; |
kanal = 2; |
break; |
case 8: |
if(PlatinenVersion == 10) AdWertNick = (ADC + nick1) / 2; |
else AdWertNick = ADC + nick1; |
//AdWertNick = 0; |
//AdWertNick += Poti2; |
kanal = 5; |
break; |
case 9: |
AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
AdWertAccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4; |
if(AdWertAccHoch > 1) |
{ |
if(NeutralAccZ < 800) NeutralAccZ+= 0.02; |
} |
else if(AdWertAccHoch < -1) |
{ |
if(NeutralAccZ > 600) NeutralAccZ-= 0.02; |
} |
messanzahl_AccHoch = 1; |
Aktuell_az = ADC; |
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
kanal = 3; |
break; |
case 10: |
tmpLuftdruck += ADC; |
if(++messanzahl_Druck >= 5) |
{ |
MessLuftdruck = ADC; |
messanzahl_Druck = 0; |
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert |
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
HoehenWert = StartLuftdruck - Luftdruck; |
tmpLuftdruck = 0; |
} |
kanal = 0; |
state = 0; |
break; |
default: |
kanal = 0; |
state = 0; |
break; |
} |
ADMUX = kanal; |
if(state != 0) ANALOG_ON; |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/analog.h |
---|
0,0 → 1,24 |
/*####################################################################################### |
#######################################################################################*/ |
extern volatile int UBat; |
extern volatile int AdWertNick, AdWertRoll, AdWertGier; |
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch; |
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az; |
extern volatile long Luftdruck; |
extern volatile char messanzahl_Druck; |
extern volatile unsigned int ZaehlMessungen; |
extern unsigned char DruckOffsetSetting; |
extern volatile int HoeheD; |
extern volatile unsigned int MessLuftdruck; |
extern volatile int StartLuftdruck; |
extern volatile char MessanzahlNick; |
unsigned int ReadADC(unsigned char adc_input); |
void ADC_Init(void); |
void SucheLuftruckOffset(void); |
#define ANALOG_OFF ADCSRA=0 |
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE) |
/Microsoft Robotics Studio/FC source/V68d for MSRS/eeprom.c |
---|
0,0 → 1,182 |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Konstanten |
// + 0-250 -> normale Werte |
// + 251 -> Poti1 |
// + 252 -> Poti2 |
// + 253 -> Poti3 |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
void DefaultKonstanten1(void) |
{ |
EE_Parameter.Kanalbelegung[K_NICK] = 1; |
EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
EE_Parameter.Kanalbelegung[K_GAS] = 3; |
EE_Parameter.Kanalbelegung[K_GIER] = 4; |
EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01; |
EE_Parameter.Hoehe_MinGas = 30; |
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 251 -> Poti1 |
EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_Verstaerkung = 4; // Wert : 0-50 |
EE_Parameter.Stick_P = 4; //2 // Wert : 1-6 |
EE_Parameter.Stick_D = 8; //8 // Wert : 0-64 |
EE_Parameter.Gier_P = 14; // Wert : 1-20 |
EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
EE_Parameter.KompassWirkung = 128; // Wert : 0-250 |
EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 150; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250 |
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust |
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation |
EE_Parameter.I_Faktor = 32; |
EE_Parameter.UserParam1 = 32 * 4; //zur freien Verwendung |
EE_Parameter.UserParam2 = 0; //zur freien Verwendung |
EE_Parameter.UserParam3 = 0; //zur freien Verwendung |
EE_Parameter.UserParam4 = 0; //zur freien Verwendung |
EE_Parameter.UserParam5 = 0; // zur freien Verwendung |
EE_Parameter.UserParam6 = 0; // zur freien Verwendung |
EE_Parameter.UserParam7 = 0; // zur freien Verwendung |
EE_Parameter.UserParam8 = 0; // zur freien Verwendung |
EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos |
EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo |
EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo |
EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag |
EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag |
EE_Parameter.ServoNickRefresh = 5; |
EE_Parameter.LoopGasLimit = 50; |
EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag |
EE_Parameter.LoopHysterese = 50; |
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
EE_Parameter.AchsKopplung1 = 100; |
EE_Parameter.AchsGegenKopplung1 = 10; |
EE_Parameter.WinkelUmschlagNick = 100; |
EE_Parameter.WinkelUmschlagRoll = 100; |
EE_Parameter.GyroAccAbgleich = 50; // 1/k |
EE_Parameter.Driftkomp = 4; |
EE_Parameter.DynamicStability = 100; |
memcpy(EE_Parameter.Name, "Sport\0", 12); |
} |
void DefaultKonstanten2(void) |
{ |
EE_Parameter.Kanalbelegung[K_NICK] = 1; |
EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
EE_Parameter.Kanalbelegung[K_GAS] = 3; |
EE_Parameter.Kanalbelegung[K_GIER] = 4; |
EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01; |
EE_Parameter.Hoehe_MinGas = 30; |
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 251 -> Poti1 |
EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50 |
EE_Parameter.Stick_P = 4; //2 // Wert : 1-6 |
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64 |
EE_Parameter.Gier_P = 10; // Wert : 1-20 |
EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
EE_Parameter.KompassWirkung = 128; // Wert : 0-250 |
EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 175; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250 |
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust |
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation |
EE_Parameter.I_Faktor = 32; |
EE_Parameter.UserParam1 = 20 * 4; // zur freien Verwendung |
EE_Parameter.UserParam2 = 0; // zur freien Verwendung |
EE_Parameter.UserParam3 = 0; // zur freien Verwendung |
EE_Parameter.UserParam4 = 0; // zur freien Verwendung |
EE_Parameter.UserParam5 = 0; // zur freien Verwendung |
EE_Parameter.UserParam6 = 0; // zur freien Verwendung |
EE_Parameter.UserParam7 = 0; // zur freien Verwendung |
EE_Parameter.UserParam8 = 0; // zur freien Verwendung |
EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos |
EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo |
EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo |
EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag |
EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag |
EE_Parameter.ServoNickRefresh = 5; |
EE_Parameter.LoopGasLimit = 50; |
EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag |
EE_Parameter.LoopHysterese = 50; |
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
EE_Parameter.AchsKopplung1 = 100; // Faktor, mit dem Gier die Achsen Roll und Nick verkoppelt |
EE_Parameter.AchsGegenKopplung1 = 10; |
EE_Parameter.WinkelUmschlagNick = 100; |
EE_Parameter.WinkelUmschlagRoll = 100; |
EE_Parameter.GyroAccAbgleich = 100; // 1/k |
EE_Parameter.Driftkomp = 4; |
EE_Parameter.DynamicStability = 75; |
memcpy(EE_Parameter.Name, "Normal\0", 12); |
} |
void DefaultKonstanten3(void) |
{ |
EE_Parameter.Kanalbelegung[K_NICK] = 1; |
EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
EE_Parameter.Kanalbelegung[K_GAS] = 3; |
EE_Parameter.Kanalbelegung[K_GIER] = 4; |
EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
EE_Parameter.GlobalConfig = CFG_HOEHENREGELUNG | CFG_DREHRATEN_BEGRENZER | CFG_ACHSENKOPPLUNG_AKTIV;///*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01; |
EE_Parameter.Hoehe_MinGas = 30; |
EE_Parameter.MaxHoehe = 100; // Wert : 0-250 251 -> Poti1 |
EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50 |
EE_Parameter.Stick_P = 3; //2 // Wert : 1-6 |
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64 |
EE_Parameter.Gier_P = 8; // Wert : 1-20 |
EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
EE_Parameter.KompassWirkung = 128; // Wert : 0-250 |
EE_Parameter.Gyro_P = 200; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 175; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250 |
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust |
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation |
EE_Parameter.I_Faktor = 10; |
EE_Parameter.UserParam1 = 20 * 4; // zur freien Verwendung |
EE_Parameter.UserParam2 = 0; // zur freien Verwendung |
EE_Parameter.UserParam3 = 0; // zur freien Verwendung |
EE_Parameter.UserParam4 = 0; // zur freien Verwendung |
EE_Parameter.UserParam5 = 0; // zur freien Verwendung |
EE_Parameter.UserParam6 = 0; // zur freien Verwendung |
EE_Parameter.UserParam7 = 0; // zur freien Verwendung |
EE_Parameter.UserParam8 = 0; // zur freien Verwendung |
EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos |
EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo |
EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo |
EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag |
EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag |
EE_Parameter.ServoNickRefresh = 5; |
EE_Parameter.LoopGasLimit = 50; |
EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag |
EE_Parameter.LoopHysterese = 50; |
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
EE_Parameter.AchsKopplung1 = 100; // Faktor, mit dem Gier die Achsen Roll und Nick verkoppelt |
EE_Parameter.AchsGegenKopplung1 = 10; |
EE_Parameter.WinkelUmschlagNick = 100; |
EE_Parameter.WinkelUmschlagRoll = 100; |
EE_Parameter.GyroAccAbgleich = 100; // 1/k |
EE_Parameter.Driftkomp = 4; |
EE_Parameter.DynamicStability = 50; |
memcpy(EE_Parameter.Name, "Beginner\0", 12); |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/fc.c |
---|
0,0 → 1,1138 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Copyright (c) 12.2007 Gunter Logemann (serial control) |
// + Nur für den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
// + for non-commercial use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
// + clearly linked as origin |
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "eeprom.c" |
unsigned char h,m,s; |
volatile unsigned int I2CTimeout = 100; |
volatile int MesswertNick,MesswertRoll,MesswertGier; |
volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
volatile float NeutralAccZ = 0; |
unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0; |
volatile long IntegralNick = 0,IntegralNick2 = 0; |
volatile long IntegralRoll = 0,IntegralRoll2 = 0; |
volatile long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
volatile long Integral_Gier = 0; |
volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
volatile long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
volatile long Mess_Integral_Hoch = 0; |
volatile int KompassValue = 0; |
volatile int KompassStartwert = 0; |
volatile int KompassRichtung = 0; |
unsigned char MAX_GAS,MIN_GAS; |
unsigned char Notlandung = 0; |
unsigned char HoehenReglerAktiv = 0; |
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
float GyroFaktor; |
float IntegralFaktor; |
volatile int DiffNick,DiffRoll; |
int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0; |
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
unsigned char MotorWert[5]; |
volatile unsigned char SenderOkay = 0; |
int StickNick = 0,StickRoll = 0,StickGier = 0; |
char MotorenEin = 0; |
int HoehenWert = 0; |
int SollHoehe = 0; |
int LageKorrekturRoll = 0,LageKorrekturNick = 0; |
float Ki = FAKTOR_I; |
unsigned char Looping_Nick = 0,Looping_Roll = 0; |
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250 |
unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32 |
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250 |
unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250 |
unsigned char Parameter_Gyro_P = 150; // Wert : 10-250 |
unsigned char Parameter_Gyro_I = 150; // Wert : 0-250 |
unsigned char Parameter_Gier_P = 2; // Wert : 1-20 |
unsigned char Parameter_I_Faktor = 10; // Wert : 1-20 |
unsigned char Parameter_UserParam1 = 0; |
unsigned char Parameter_UserParam2 = 0; |
unsigned char Parameter_UserParam3 = 0; |
unsigned char Parameter_UserParam4 = 0; |
unsigned char Parameter_UserParam5 = 0; |
unsigned char Parameter_UserParam6 = 0; |
unsigned char Parameter_UserParam7 = 0; |
unsigned char Parameter_UserParam8 = 0; |
unsigned char Parameter_ServoNickControl = 100; |
unsigned char Parameter_LoopGasLimit = 70; |
unsigned char Parameter_AchsKopplung1 = 0; |
unsigned char Parameter_AchsGegenKopplung1 = 0; |
unsigned char Parameter_DynamicStability = 100; |
struct mk_param_struct EE_Parameter; |
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
void Piep(unsigned char Anzahl) |
{ |
while(Anzahl--) |
{ |
if(MotorenEin) return; //auf keinen Fall im Flug! |
beeptime = 100; |
Delay_ms(250); |
} |
} |
//############################################################################ |
// Nullwerte ermitteln |
void SetNeutral(void) |
//############################################################################ |
{ |
NeutralAccX = 0; |
NeutralAccY = 0; |
NeutralAccZ = 0; |
AdNeutralNick = 0; |
AdNeutralRoll = 0; |
AdNeutralGier = 0; |
Parameter_AchsKopplung1 = 0; |
Parameter_AchsGegenKopplung1 = 0; |
CalibrierMittelwert(); |
Delay_ms_Mess(100); |
CalibrierMittelwert(); |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
{ |
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
} |
AdNeutralNick= AdWertNick; |
AdNeutralRoll= AdWertRoll; |
AdNeutralGier= AdWertGier; |
StartNeutralRoll = AdNeutralRoll; |
StartNeutralNick = AdNeutralNick; |
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4) |
{ |
NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
NeutralAccZ = Aktuell_az; |
} |
else |
{ |
NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]); |
NeutralAccY = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1]); |
NeutralAccZ = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1]); |
} |
Mess_IntegralNick = 0; |
Mess_IntegralNick2 = 0; |
Mess_IntegralRoll = 0; |
Mess_IntegralRoll2 = 0; |
Mess_Integral_Gier = 0; |
MesswertNick = 0; |
MesswertRoll = 0; |
MesswertGier = 0; |
StartLuftdruck = Luftdruck; |
HoeheD = 0; |
Mess_Integral_Hoch = 0; |
KompassStartwert = KompassValue; |
GPS_Neutral(); |
beeptime = 50; |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
ExternHoehenValue = 0; |
} |
//############################################################################ |
// Bearbeitet die Messwerte |
void Mittelwert(void) |
//############################################################################ |
{ |
static signed long tmpl,tmpl2; |
MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll; |
MesswertNick = (signed int) AdWertNick - AdNeutralNick; |
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
IntegralAccZ += Aktuell_az - NeutralAccZ; |
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_Integral_Gier += MesswertGier; |
Mess_Integral_Gier2 += MesswertGier; |
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
{ |
tmpl = Mess_IntegralNick / 4096L; |
tmpl *= MesswertGier; |
tmpl *= Parameter_AchsKopplung1; //125 |
tmpl /= 2048L; |
tmpl2 = Mess_IntegralRoll / 4096L; |
tmpl2 *= MesswertGier; |
tmpl2 *= Parameter_AchsKopplung1; |
tmpl2 /= 2048L; |
} |
else tmpl = tmpl2 = 0; |
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
MesswertRoll += tmpl; |
MesswertRoll += (tmpl2*Parameter_AchsGegenKopplung1)/512L; //109 |
Mess_IntegralRoll2 += MesswertRoll; |
Mess_IntegralRoll += MesswertRoll - LageKorrekturRoll; |
if(Mess_IntegralRoll > Umschlag180Roll) |
{ |
Mess_IntegralRoll = -(Umschlag180Roll - 10000L); |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
} |
if(Mess_IntegralRoll <-Umschlag180Roll) |
{ |
Mess_IntegralRoll = (Umschlag180Roll - 10000L); |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
} |
if(AdWertRoll < 15) MesswertRoll = -1000; |
if(AdWertRoll < 7) MesswertRoll = -2000; |
if(PlatinenVersion == 10) |
{ |
if(AdWertRoll > 1010) MesswertRoll = +1000; |
if(AdWertRoll > 1017) MesswertRoll = +2000; |
} |
else |
{ |
if(AdWertRoll > 2020) MesswertRoll = +1000; |
if(AdWertRoll > 2034) MesswertRoll = +2000; |
} |
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
MesswertNick -= tmpl2; |
MesswertNick -= (tmpl*Parameter_AchsGegenKopplung1)/512L; |
Mess_IntegralNick2 += MesswertNick; |
Mess_IntegralNick += MesswertNick - LageKorrekturNick; |
if(Mess_IntegralNick > Umschlag180Nick) |
{ |
Mess_IntegralNick = -(Umschlag180Nick - 10000L); |
Mess_IntegralNick2 = Mess_IntegralNick; |
} |
if(Mess_IntegralNick <-Umschlag180Nick) |
{ |
Mess_IntegralNick = (Umschlag180Nick - 10000L); |
Mess_IntegralNick2 = Mess_IntegralNick; |
} |
if(AdWertNick < 15) MesswertNick = -1000; |
if(AdWertNick < 7) MesswertNick = -2000; |
if(PlatinenVersion == 10) |
{ |
if(AdWertNick > 1010) MesswertNick = +1000; |
if(AdWertNick > 1017) MesswertNick = +2000; |
} |
else |
{ |
if(AdWertNick > 2020) MesswertNick = +1000; |
if(AdWertNick > 2034) MesswertNick = +2000; |
} |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
// ADC einschalten |
ANALOG_ON; |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
Integral_Gier = Mess_Integral_Gier; |
IntegralNick = Mess_IntegralNick; |
IntegralRoll = Mess_IntegralRoll; |
IntegralNick2 = Mess_IntegralNick2; |
IntegralRoll2 = Mess_IntegralRoll2; |
if(EE_Parameter.GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll) |
{ |
if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200); |
else if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200); |
if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200); |
else if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200); |
} |
if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--; |
if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--; |
if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--; |
if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--; |
if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255; |
if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255; |
if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255; |
if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255; |
} |
//############################################################################ |
// Messwerte beim Ermitteln der Nullage |
void CalibrierMittelwert(void) |
//############################################################################ |
{ |
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
ANALOG_OFF; |
MesswertNick = AdWertNick; |
MesswertRoll = AdWertRoll; |
MesswertGier = AdWertGier; |
Mittelwert_AccNick = ACC_AMPLIFY * (long)AdWertAccNick; |
Mittelwert_AccRoll = ACC_AMPLIFY * (long)AdWertAccRoll; |
Mittelwert_AccHoch = (long)AdWertAccHoch; |
// ADC einschalten |
ANALOG_ON; |
if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--; |
if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--; |
if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--; |
if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--; |
if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255; |
if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255; |
if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255; |
if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255; |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
} |
//############################################################################ |
// Senden der Motorwerte per I2C-Bus |
void SendMotorData(void) |
//############################################################################ |
{ |
if(MOTOR_OFF || !MotorenEin) |
{ |
Motor_Hinten = 0; |
Motor_Vorne = 0; |
Motor_Rechts = 0; |
Motor_Links = 0; |
if(MotorTest[0]) Motor_Vorne = MotorTest[0]; |
if(MotorTest[1]) Motor_Hinten = MotorTest[1]; |
if(MotorTest[2]) Motor_Links = MotorTest[2]; |
if(MotorTest[3]) Motor_Rechts = MotorTest[3]; |
} |
DebugOut.Analog[12] = Motor_Vorne; |
DebugOut.Analog[13] = Motor_Hinten; |
DebugOut.Analog[14] = Motor_Links; |
DebugOut.Analog[15] = Motor_Rechts; |
//Start I2C Interrupt Mode |
twi_state = 0; |
motor = 0; |
i2c_start(); |
} |
//############################################################################ |
// Trägt ggf. das Poti als Parameter ein |
void ParameterZuordnung(void) |
//############################################################################ |
{ |
#define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;} |
CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255); |
CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255); |
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255); |
CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255); |
CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255); |
CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255); |
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255); |
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255); |
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255); |
CHK_POTI(Parameter_UserParam5,EE_Parameter.UserParam5,0,255); |
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6,0,255); |
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7,0,255); |
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8,0,255); |
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255); |
CHK_POTI(Parameter_AchsKopplung1, EE_Parameter.AchsKopplung1,0,255); |
CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,0,255); |
Ki = (float) Parameter_I_Faktor * 0.0001; |
MAX_GAS = EE_Parameter.Gas_Max; |
MIN_GAS = EE_Parameter.Gas_Min; |
} |
//############################################################################ |
// |
void MotorRegler(void) |
//############################################################################ |
{ |
int motorwert,pd_ergebnis,h,tmp_int; |
int GierMischanteil,GasMischanteil; |
static long SummeNick=0,SummeRoll=0; |
static long sollGier = 0,tmp_long,tmp_long2; |
static long IntegralFehlerNick = 0; |
static long IntegralFehlerRoll = 0; |
static unsigned int RcLostTimer; |
static unsigned char delay_neutral = 0; |
static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
static unsigned int modell_fliegt = 0; |
static int hoehenregler = 0; |
static char TimerWerteausgabe = 0; |
static char NeueKompassRichtungMerken = 0; |
static long ausgleichNick, ausgleichRoll; |
Mittelwert(); |
GRN_ON; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gaswert ermitteln |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
if(Parameter_UserParam2 > 10) { |
GasMischanteil = GasMischanteil + (int)ControlIn.gas; |
} |
if(GasMischanteil > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20; |
if(GasMischanteil < 0) GasMischanteil = 0; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Emfang schlecht |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(SenderOkay < 100) |
{ |
if(!PcZugriff) |
{ |
if(BeepMuster == 0xffff) |
{ |
beeptime = 15000; |
BeepMuster = 0x0c00; |
} |
} |
if(RcLostTimer) RcLostTimer--; |
else |
{ |
MotorenEin = 0; |
Notlandung = 0; |
} |
ROT_ON; |
if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken |
{ |
GasMischanteil = EE_Parameter.NotGas; |
Notlandung = 1; |
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0; |
} |
else MotorenEin = 0; |
} |
else |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Emfang gut |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(SenderOkay > 140) |
{ |
Notlandung = 0; |
RcLostTimer = EE_Parameter.NotGasZeit * 50; |
if(GasMischanteil > 40) |
{ |
if(modell_fliegt < 0xffff) modell_fliegt++; |
} |
if((modell_fliegt < 200) || (GasMischanteil < 40)) |
{ |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
Mess_Integral_Gier2 = 0; |
} |
if((GasMischanteil > 200) && MotorenEin == 0) |
{ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// auf Nullwerte kalibrieren |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
GRN_OFF; |
MotorenEin = 0; |
delay_neutral = 0; |
modell_fliegt = 0; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
{ |
unsigned char setting=1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5; |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken |
} |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
{ |
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
} |
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
SetNeutral(); |
Piep(GetActiveParamSetNumber()); |
} |
} |
else |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
GRN_OFF; |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],0xff); // Werte löschen |
MotorenEin = 0; |
delay_neutral = 0; |
modell_fliegt = 0; |
SetNeutral(); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],NeutralAccX / 256); // ACC-NeutralWerte speichern |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1],NeutralAccX % 256); // ACC-NeutralWerte speichern |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL],NeutralAccY / 256); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1],NeutralAccY % 256); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z],(int)NeutralAccZ / 256); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1],(int)NeutralAccZ % 256); |
Piep(GetActiveParamSetNumber()); |
} |
} |
else delay_neutral = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gas ist unten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(GasMischanteil < 35) |
{ |
// Starten |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) |
{ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Einschalten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(++delay_einschalten > 200) |
{ |
delay_einschalten = 200; |
modell_fliegt = 1; |
MotorenEin = 1; |
sollGier = 0; |
Mess_Integral_Gier = 0; |
Mess_Integral_Gier2 = 0; |
Mess_IntegralNick = 0; |
Mess_IntegralRoll = 0; |
Mess_IntegralNick2 = IntegralNick; |
Mess_IntegralRoll2 = IntegralRoll; |
SummeNick = 0; |
SummeRoll = 0; |
} |
} |
else delay_einschalten = 0; |
//Auf Neutralwerte setzen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Auschalten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) |
{ |
if(++delay_ausschalten > 200) // nicht sofort |
{ |
MotorenEin = 0; |
delay_ausschalten = 200; |
modell_fliegt = 0; |
} |
} |
else delay_ausschalten = 0; |
} |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// neue Werte von der Funke |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!NewPpmData-- || Notlandung) |
{ |
int tmp_int; |
ParameterZuordnung(); |
StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P; |
StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P; |
StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0; |
IntegralFaktor = ((float) Parameter_Gyro_I) / 44000; |
#define KEY_VALUE (Parameter_UserParam1 * 4) //(Poti3 * 8) |
if(DubWiseKeys[1]) beeptime = 10; |
if(DubWiseKeys[1] & DUB_KEY_UP) tmp_int = KEY_VALUE; else |
if(DubWiseKeys[1] & DUB_KEY_DOWN) tmp_int = -KEY_VALUE; else tmp_int = 0; |
ExternStickNick = (ExternStickNick * 7 + tmp_int) / 8; |
if(DubWiseKeys[1] & DUB_KEY_LEFT) tmp_int = KEY_VALUE; else |
if(DubWiseKeys[1] & DUB_KEY_RIGHT) tmp_int = -KEY_VALUE; else tmp_int = 0; |
ExternStickRoll = (ExternStickRoll * 7 + tmp_int) / 8; |
if(DubWiseKeys[0] & 8) ExternStickGier = 50;else |
if(DubWiseKeys[0] & 4) ExternStickGier =-50;else ExternStickGier = 0; |
if(DubWiseKeys[0] & 2) ExternHoehenValue++; |
if(DubWiseKeys[0] & 16) ExternHoehenValue--; |
StickNick += ExternStickNick / 8; |
StickRoll += ExternStickRoll / 8; |
StickGier += ExternStickGier; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// neue Werte von der seriellen Schnittstelle |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(Parameter_UserParam2 > 10) { |
StickNick = StickNick + (int)ControlIn.nick; |
StickRoll = StickRoll + (int)ControlIn.roll; |
StickGier = StickGier + (int)ControlIn.gier; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
if(GyroFaktor < 0) GyroFaktor = 0; |
if(IntegralFaktor < 0) IntegralFaktor = 0; |
// greift in den Stick ein, um ungewolltes überschlagen zu verhindern |
if(!(EE_Parameter.LoopConfig & CFG_LOOP_LINKS) && !(EE_Parameter.LoopConfig & CFG_LOOP_RECHTS)) |
{ |
if(IntegralNick > 60000) |
{ |
StickNick -= 8 * EE_Parameter.Stick_P; |
if(IntegralNick > 80000) StickNick -= 16 * EE_Parameter.Stick_P; |
} |
else |
if(IntegralNick < -60000) |
{ |
StickNick += 8 * EE_Parameter.Stick_P; |
if(IntegralNick > 80000) StickNick -= 16 * EE_Parameter.Stick_P; |
} |
if(IntegralRoll > 60000) |
{ |
StickRoll -= 8 * EE_Parameter.Stick_P; |
if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P; |
} |
else |
if(IntegralRoll < -60000) |
{ |
StickRoll += 8 * EE_Parameter.Stick_P; |
if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P; |
} |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Looping? |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_LINKS) Looping_Links = 1; |
else |
{ |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1; |
else |
{ |
if(Looping_Rechts) // Hysterese |
{ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_OBEN) Looping_Oben = 1; |
else |
{ |
if(Looping_Oben) // Hysterese |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_UNTEN) Looping_Unten = 1; |
else |
{ |
if(Looping_Unten) // Hysterese |
{ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0; |
} |
} |
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0; |
if(Looping_Oben || Looping_Unten) {Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0; |
} // Ende neue Funken-Werte |
if(Looping_Roll) beeptime = 100; |
if(Looping_Roll || Looping_Nick) |
{ |
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Bei Empfangsausfall im Flug |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(Notlandung) |
{ |
StickGier = 0; |
StickNick = 0; |
StickRoll = 0; |
GyroFaktor = 0.1; |
IntegralFaktor = 0.005; |
Looping_Roll = 0; |
Looping_Nick = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Integrale auf ACC-Signal abgleichen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define ABGLEICH_ANZAHL 256L |
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
MittelIntegralRoll += IntegralRoll; |
MittelIntegralNick2 += IntegralNick2; |
MittelIntegralRoll2 += IntegralRoll2; |
if(Looping_Nick || Looping_Roll) |
{ |
IntegralAccNick = 0; |
IntegralAccRoll = 0; |
MittelIntegralNick = 0; |
MittelIntegralRoll = 0; |
MittelIntegralNick2 = 0; |
MittelIntegralRoll2 = 0; |
Mess_IntegralNick2 = Mess_IntegralNick; |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
ZaehlMessungen = 0; |
LageKorrekturNick = 0; |
LageKorrekturRoll = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!Looping_Nick && !Looping_Roll) |
{ |
long tmp_long, tmp_long2; |
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick); |
tmp_long /= 16; |
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll); |
tmp_long2 /= 16; |
#define AUSGLEICH 32 //(Parameter_UserParam1 / 2) |
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH; |
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH; |
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH; |
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH; |
Mess_IntegralNick -= tmp_long; |
Mess_IntegralRoll -= tmp_long2; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
{ |
static int cnt = 0; |
static char last_n_p,last_n_n,last_r_p,last_r_n; |
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
if(!Looping_Nick && !Looping_Roll) |
{ |
MittelIntegralNick /= ABGLEICH_ANZAHL; |
MittelIntegralRoll /= ABGLEICH_ANZAHL; |
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL; |
#define MAX_I 0//(Poti2/10) |
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick); |
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich; |
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL; |
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll); |
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich; |
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL; |
// Mess_IntegralNick -= ausgleichNick; |
// Mess_IntegralRoll -= ausgleichRoll; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gyro-Drift ermitteln |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
MittelIntegralNick2 /= ABGLEICH_ANZAHL; |
MittelIntegralRoll2 /= ABGLEICH_ANZAHL; |
// tmp_long = (long)(MittelIntegralNick2 - (long)IntegralAccNick); |
// tmp_long2 = (long)(MittelIntegralRoll2 - (long)IntegralAccRoll); |
tmp_long = IntegralNick2 - IntegralNick; |
tmp_long2 = IntegralRoll2 - IntegralRoll; |
//DebugOut.Analog[25] = MittelIntegralRoll2 / 26; |
IntegralFehlerNick = tmp_long; |
IntegralFehlerRoll = tmp_long2; |
Mess_IntegralNick2 -= IntegralFehlerNick; |
Mess_IntegralRoll2 -= IntegralFehlerRoll; |
// IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2; |
// IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2; |
DebugOut.Analog[17] = IntegralAccNick / 26; |
DebugOut.Analog[18] = IntegralAccRoll / 26; |
DebugOut.Analog[19] = IntegralFehlerNick;// / 26; |
DebugOut.Analog[20] = IntegralFehlerRoll;// / 26; |
DebugOut.Analog[21] = MittelIntegralNick / 26; |
DebugOut.Analog[22] = MittelIntegralRoll / 26; |
//DebugOut.Analog[28] = ausgleichNick; |
DebugOut.Analog[29] = ausgleichRoll; |
DebugOut.Analog[30] = LageKorrekturRoll * 10; |
#define FEHLER_LIMIT (ABGLEICH_ANZAHL * 4) |
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16) |
#define BEWEGUNGS_LIMIT 20000 |
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++ |
cnt = 1;// + labs(IntegralFehlerNick) / 4096; |
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT) |
{ |
if(IntegralFehlerNick > FEHLER_LIMIT2) |
{ |
if(last_n_p) |
{ |
cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2; |
ausgleichNick = IntegralFehlerNick / 8; |
if(ausgleichNick > 5000) ausgleichNick = 5000; |
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
// Mess_IntegralNick -= ausgleichNick; |
} |
else last_n_p = 1; |
} else last_n_p = 0; |
if(IntegralFehlerNick < -FEHLER_LIMIT2) |
{ |
if(last_n_n) |
{ |
cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2; |
ausgleichNick = IntegralFehlerNick / 8; |
if(ausgleichNick < -5000) ausgleichNick = -5000; |
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
// Mess_IntegralNick -= ausgleichNick; |
} |
else last_n_n = 1; |
} else last_n_n = 0; |
} else cnt = 0; |
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++ |
cnt = 1;// + labs(IntegralFehlerNick) / 4096; |
ausgleichRoll = 0; |
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT) |
{ |
if(IntegralFehlerRoll > FEHLER_LIMIT2) |
{ |
if(last_r_p) |
{ |
cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2; |
ausgleichRoll = IntegralFehlerRoll / 8; |
if(ausgleichRoll > 5000) ausgleichRoll = 5000; |
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
// Mess_IntegralRoll -= ausgleichRoll; |
} |
else last_r_p = 1; |
} else last_r_p = 0; |
if(IntegralFehlerRoll < -FEHLER_LIMIT2) |
{ |
if(last_r_n) |
{ |
cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2; |
ausgleichRoll = IntegralFehlerRoll / 8; |
if(ausgleichRoll < -5000) ausgleichRoll = -5000; |
// Mess_IntegralRoll -= ausgleichRoll; |
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
} |
else last_r_n = 1; |
} else last_r_n = 0; |
} else |
{ |
cnt = 0; |
} |
DebugOut.Analog[27] = ausgleichRoll; |
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
//if(cnt > 1) beeptime = 50; |
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick); |
DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll); |
} |
else |
{ |
LageKorrekturRoll = 0; |
LageKorrekturNick = 0; |
} |
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
MittelIntegralNick_Alt = MittelIntegralNick; |
MittelIntegralRoll_Alt = MittelIntegralRoll; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralAccNick = 0; |
IntegralAccRoll = 0; |
IntegralAccZ = 0; |
MittelIntegralNick = 0; |
MittelIntegralRoll = 0; |
MittelIntegralNick2 = 0; |
MittelIntegralRoll2 = 0; |
ZaehlMessungen = 0; |
} |
//DebugOut.Analog[31] = StickRoll / (26*IntegralFaktor); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gieren |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(abs(StickGier) > 20) // war 35 |
{ |
if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1; |
} |
tmp_int = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
tmp_int += (EE_Parameter.Gier_P * StickGier) / 4; |
sollGier = tmp_int; |
Mess_Integral_Gier -= tmp_int; |
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen |
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Kompass |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)) |
{ |
int w,v; |
static int SignalSchlecht = 0; |
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
v = abs(IntegralRoll /512); |
if(v > w) w = v; // grösste Neigung ermitteln |
if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht) |
{ |
KompassStartwert = KompassValue; |
NeueKompassRichtungMerken = 0; |
} |
w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
if(w > 0) |
{ |
if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten |
if(SignalSchlecht) SignalSchlecht--; |
} |
else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Debugwerte zuordnen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!TimerWerteausgabe--) |
{ |
TimerWerteausgabe = 24; |
DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor; |
DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor; |
DebugOut.Analog[2] = Mittelwert_AccNick; |
DebugOut.Analog[3] = Mittelwert_AccRoll; |
DebugOut.Analog[4] = MesswertGier; |
DebugOut.Analog[5] = HoehenWert; |
DebugOut.Analog[6] =(Mess_Integral_Hoch / 512); |
DebugOut.Analog[8] = KompassValue; |
DebugOut.Analog[9] = UBat; |
DebugOut.Analog[10] = SenderOkay; |
DebugOut.Analog[16] = Mittelwert_AccHoch; |
/* DebugOut.Analog[16] = motor_rx[0]; |
DebugOut.Analog[17] = motor_rx[1]; |
DebugOut.Analog[18] = motor_rx[2]; |
DebugOut.Analog[19] = motor_rx[3]; |
DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3]; |
DebugOut.Analog[20] /= 14; |
DebugOut.Analog[21] = motor_rx[4]; |
DebugOut.Analog[22] = motor_rx[5]; |
DebugOut.Analog[23] = motor_rx[6]; |
DebugOut.Analog[24] = motor_rx[7]; |
DebugOut.Analog[25] = motor_rx[4] + motor_rx[5] + motor_rx[6] + motor_rx[7]; |
*/ |
// DebugOut.Analog[9] = MesswertNick; |
// DebugOut.Analog[9] = SollHoehe; |
// DebugOut.Analog[10] = Mess_Integral_Gier / 128; |
// DebugOut.Analog[11] = KompassStartwert; |
// DebugOut.Analog[10] = Parameter_Gyro_I; |
// DebugOut.Analog[10] = EE_Parameter.Gyro_I; |
// DebugOut.Analog[9] = KompassRichtung; |
// DebugOut.Analog[10] = GasMischanteil; |
// DebugOut.Analog[3] = HoeheD * 32; |
// DebugOut.Analog[4] = hoehenregler; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(Looping_Nick) MesswertNick = MesswertNick * GyroFaktor; |
else MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor; |
if(Looping_Roll) MesswertRoll = MesswertRoll * GyroFaktor; |
else MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor; |
// MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor; |
MesswertGier = MesswertGier * (GyroFaktor) + Integral_Gier * IntegralFaktor/2; |
DebugOut.Analog[28] = MesswertRoll; |
DebugOut.Analog[25] = IntegralRoll * IntegralFaktor; |
DebugOut.Analog[31] = StickRoll;// / (26*IntegralFaktor); |
// Maximalwerte abfangen |
#define MAX_SENSOR 2048 |
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR; |
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR; |
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR; |
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR; |
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR; |
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Höhenregelung |
// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//OCR0B = 180 - (Poti1 + 120) / 4; |
//DruckOffsetSetting = OCR0B; |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung |
{ |
int tmp_int; |
if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
{ |
if(Parameter_MaxHoehe < 50) |
{ |
SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters |
HoehenReglerAktiv = 0; |
} |
else |
HoehenReglerAktiv = 1; |
} |
else |
{ |
SollHoehe = ((int) ExternHoehenValue + (int) Parameter_MaxHoehe) * (int)EE_Parameter.Hoehe_Verstaerkung - 20; |
HoehenReglerAktiv = 1; |
} |
if(Notlandung) SollHoehe = 0; |
h = HoehenWert; |
if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln |
{ h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil |
h = GasMischanteil - h; // vom Gas abziehen |
h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil |
tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32; |
if(tmp_int > 50) tmp_int = 50; |
else if(tmp_int < -50) tmp_int = -50; |
h -= tmp_int; |
hoehenregler = (hoehenregler*15 + h) / 16; |
if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN |
{ |
if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas; |
if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil; |
} |
if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas |
GasMischanteil = hoehenregler; |
} |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Mischer und PI-Regler |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DebugOut.Analog[7] = GasMischanteil; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gier-Anteil |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define MUL_G 1.0 |
GierMischanteil = MesswertGier - sollGier; // Regler für Gier |
//GierMischanteil = 0; |
if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2; // MartinR |
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2); // MartinR |
if(GierMischanteil > ((MAX_GAS - GasMischanteil)/2)) GierMischanteil = ((MAX_GAS - GasMischanteil) / 2); // MartinR |
if(GierMischanteil < -((MAX_GAS - GasMischanteil) / 2)) GierMischanteil = -((MAX_GAS - GasMischanteil) / 2); // MartinR |
if(GasMischanteil < 20) GierMischanteil = 0; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Nick-Achse |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffNick = MesswertNick - (StickNick - GPS_Nick); // Differenz bestimmen |
if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - (StickNick - GPS_Nick); // I-Anteil bei Winkelregelung |
else SummeNick += DiffNick; // I-Anteil bei HH |
// if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1; |
if(SummeNick > 0) SummeNick-= 2 ; else SummeNick += 2 ; |
if(SummeNick > 16000) SummeNick = 16000; |
if(SummeNick < -16000) SummeNick = -16000; |
pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick |
// Motor Vorn |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer |
if ((motorwert < 0)) motorwert = 0; |
else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
Motor_Vorne = motorwert; |
// Motor Heck |
motorwert = GasMischanteil - pd_ergebnis + GierMischanteil; |
if ((motorwert < 0)) motorwert = 0; |
else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
Motor_Hinten = motorwert; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Roll-Achse |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffRoll = MesswertRoll - (StickRoll - GPS_Roll); // Differenz bestimmen |
if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - (StickRoll - GPS_Roll);// I-Anteil bei Winkelregelung |
else SummeRoll += DiffRoll; // I-Anteil bei HH |
//if(Poti2 < 100){ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1;} |
if(SummeRoll > 0) SummeRoll-= 2 ; else SummeRoll += 2 ; |
if(SummeRoll > 16000) SummeRoll = 16000; |
if(SummeRoll < -16000) SummeRoll = -16000; |
pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
// Motor Links |
motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
if ((motorwert < 0)) motorwert = 0; |
else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
Motor_Links = motorwert; |
// Motor Rechts |
motorwert = GasMischanteil - pd_ergebnis - GierMischanteil; |
if ((motorwert < 0)) motorwert = 0; |
else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
Motor_Rechts = motorwert; |
// +++++++++++++++++++++++++++++++++++++++++++++++ |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/fc.h |
---|
0,0 → 1,144 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
#ifndef _FC_H |
#define _FC_H |
extern volatile unsigned int I2CTimeout; |
extern unsigned char Sekunde,Minute; |
extern volatile long IntegralNick,IntegralNick2; |
extern volatile long IntegralRoll,IntegralRoll2; |
extern volatile long Mess_IntegralNick,Mess_IntegralNick2; |
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern volatile long IntegralAccNick,IntegralAccRoll; |
extern volatile long Mess_Integral_Hoch; |
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2; |
extern volatile int KompassValue; |
extern volatile int KompassStartwert; |
extern volatile int KompassRichtung; |
extern int HoehenWert; |
extern int SollHoehe; |
extern volatile int MesswertNick,MesswertRoll,MesswertGier; |
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll; |
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch; |
extern volatile float NeutralAccZ; |
extern long Umschlag180Nick, Umschlag180Roll; |
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier; |
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8; |
void MotorRegler(void); |
void SendMotorData(void); |
void CalibrierMittelwert(void); |
void Mittelwert(void); |
void SetNeutral(void); |
void Piep(unsigned char Anzahl); |
extern void DefaultKonstanten(void); |
void DefaultKonstanten1(void); |
void DefaultKonstanten2(void); |
extern unsigned char h,m,s; |
extern volatile unsigned char Timeout ; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern volatile long IntegralNick,IntegralNick2; |
extern volatile long IntegralRoll,IntegralRoll2; |
extern volatile long Integral_Gier; |
extern volatile long Mess_IntegralNick,Mess_IntegralNick2; |
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern volatile long Mess_Integral_Gier; |
extern volatile int DiffNick,DiffRoll; |
extern int Poti1, Poti2, Poti3, Poti4; |
extern volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
extern unsigned char MotorWert[5]; |
extern volatile unsigned char SenderOkay; |
extern int StickNick,StickRoll,StickGier; |
extern char MotorenEin; |
extern void DefaultKonstanten1(void); |
extern void DefaultKonstanten2(void); |
#define STRUCT_PARAM_LAENGE 71 |
struct mk_param_struct |
{ |
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3 |
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv |
unsigned char Hoehe_MinGas; // Wert : 0-100 |
unsigned char Luftdruck_D; // Wert : 0-250 |
unsigned char MaxHoehe; // Wert : 0-32 |
unsigned char Hoehe_P; // Wert : 0-32 |
unsigned char Hoehe_Verstaerkung; // Wert : 0-50 |
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250 |
unsigned char Stick_P; // Wert : 1-6 |
unsigned char Stick_D; // Wert : 0-64 |
unsigned char Gier_P; // Wert : 1-20 |
unsigned char Gas_Min; // Wert : 0-32 |
unsigned char Gas_Max; // Wert : 33-250 |
unsigned char GyroAccFaktor; // Wert : 1-64 |
unsigned char KompassWirkung; // Wert : 0-32 |
unsigned char Gyro_P; // Wert : 10-250 |
unsigned char Gyro_I; // Wert : 0-250 |
unsigned char UnterspannungsWarnung; // Wert : 0-250 |
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust |
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen |
unsigned char UfoAusrichtung; // X oder + Formation |
unsigned char I_Faktor; // Wert : 0-250 |
unsigned char UserParam1; // Wert : 0-250 |
unsigned char UserParam2; // Wert : 0-250 |
unsigned char UserParam3; // Wert : 0-250 |
unsigned char UserParam4; // Wert : 0-250 |
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo |
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag |
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag |
unsigned char ServoNickRefresh; // |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag |
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung) |
unsigned char AchsGegenKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick Gegenkoppelt (NickRollGegenkopplung) |
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt |
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt |
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung) |
unsigned char Driftkomp; |
unsigned char DynamicStability; |
unsigned char UserParam5; // Wert : 0-250 |
unsigned char UserParam6; // Wert : 0-250 |
unsigned char UserParam7; // Wert : 0-250 |
unsigned char UserParam8; // Wert : 0-250 |
//------------------------------------------------ |
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen |
unsigned char Reserved[4]; |
char Name[12]; |
}; |
/* |
unsigned char ServoNickMax; // Wert : 0-250 |
unsigned char ServoNickRefresh; // |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
//------------------------------------------------ |
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen |
unsigned char Reserved[4]; |
char Name[12]; |
*/ |
extern struct mk_param_struct EE_Parameter; |
extern unsigned char Parameter_Luftdruck_D; |
extern unsigned char Parameter_MaxHoehe; |
extern unsigned char Parameter_Hoehe_P; |
extern unsigned char Parameter_Hoehe_ACC_Wirkung; |
extern unsigned char Parameter_KompassWirkung; |
extern unsigned char Parameter_Gyro_P; |
extern unsigned char Parameter_Gyro_I; |
extern unsigned char Parameter_Gier_P; |
extern unsigned char Parameter_ServoNickControl; |
extern unsigned char Parameter_AchsKopplung1; |
extern unsigned char Parameter_AchsGegenKopplung1; |
#endif //_FC_H |
/Microsoft Robotics Studio/FC source/V68d for MSRS/flight.pnproj |
---|
0,0 → 1,0 |
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="printf_P.c"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="fc.c"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File><File path="eeprom.c"></File></Project> |
/Microsoft Robotics Studio/FC source/V68d for MSRS/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/Microsoft Robotics Studio/FC source/V68d for MSRS/gps.h |
---|
0,0 → 1,14 |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
void GPS_Neutral(void); |
void GPS_BerechneZielrichtung(void); |
/Microsoft Robotics Studio/FC source/V68d for MSRS/main.c |
---|
0,0 → 1,247 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Copyright (c) 12.2007 Gunter Logemann (Roboboard extensions) |
// + Nur für den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt und genannt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
// + for non-commercial use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
// + clearly linked as origin |
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned char EEPromArray[E2END+1] EEMEM; |
unsigned char PlatinenVersion = 10; |
// -- Parametersatz aus EEPROM lesen --- |
// number [0..5] |
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) |
{ |
if (number > 5) number = 5; |
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length); |
} |
// -- Parametersatz ins EEPROM schreiben --- |
// number [0..5] |
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) |
{ |
if(number > 5) number = 5; |
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken |
} |
unsigned char GetActiveParamSetNumber(void) |
{ |
unsigned char set; |
set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]); |
if(set > 5) |
{ |
set = 2; |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], set); // diesen Parametersatz als aktuell merken |
} |
return(set); |
} |
//############################################################################ |
//Hauptprogramm |
int main (void) |
//############################################################################ |
{ |
unsigned int timer; |
//unsigned int timer2 = 0; |
DDRB = 0x00; |
PORTB = 0x00; |
for(timer = 0; timer < 1000; timer++); // verzögern |
if(PINB & 0x01) PlatinenVersion = 11; else PlatinenVersion = 10; |
DDRC = 0x81; // SCL |
PORTC = 0xff; // Pullup SDA |
DDRB = 0x1B; // LEDs und Druckoffset |
PORTB = 0x01; // LED_Rot |
DDRD = 0x2A;//0x3E; // Speaker & TXD & J3 J4 J5 |
DDRD |=0x80; // J7 |
PORTD = 0xF7; // LED |
MCUSR &=~(1<<WDRF); |
WDTCSR |= (1<<WDCE)|(1<<WDE); |
WDTCSR = 0; |
beeptime = 2000; |
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0; |
ROT_OFF; |
Timer_Init(); |
UART_Init(); |
rc_sum_init(); |
ADC_Init(); |
i2c_init(); |
// SPI_MasterInit(); |
sei(); |
VersionInfo.Hauptversion = VERSION_HAUPTVERSION; |
VersionInfo.Nebenversion = VERSION_NEBENVERSION; |
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL; |
printf("\n\rFlightControl\n\rHardware:%d.%d\n\rSoftware:V%d.%d%c ",PlatinenVersion/10,PlatinenVersion%10, VERSION_HAUPTVERSION, VERSION_NEBENVERSION,VERSION_INDEX + 'a'); |
printf("\n\r=============================="); |
GRN_ON; |
#define EE_DATENREVISION 68 // wird angepasst, wenn sich die EEPROM-Daten geändert haben |
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != EE_DATENREVISION) |
{ |
printf("\n\rInit. EEPROM: Generiere Default-Parameter..."); |
DefaultKonstanten1(); |
for (unsigned char i=0;i<6;i++) |
{ |
if(i==2) DefaultKonstanten2(); // Kamera |
if(i==3) DefaultKonstanten3(); // Beginner |
if(i>3) DefaultKonstanten2(); // Kamera |
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 3); // default-Setting |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], EE_DATENREVISION); |
} |
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4) |
{ |
printf("\n\rACC nicht abgeglichen!"); |
} |
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber()); |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
printf("\n\rAbgleich Luftdrucksensor.."); |
timer = SetDelay(1000); |
SucheLuftruckOffset(); |
while (!CheckDelay(timer)); |
printf("OK\n\r"); |
} |
SetNeutral(); |
ROT_OFF; |
beeptime = 2000; |
DebugIn.Analog[1] = 1000; |
DebugIn.Digital[0] = 0x55; |
printf("\n\rSteuerung: "); |
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold"); |
else printf("Neutral"); |
printf("\n\n\r"); |
LcdClear(); |
I2CTimeout = 5000; |
while (1) |
{ |
if (UpdateMotor) // ReglerIntervall |
{ |
// SPI_TransmitByte(); |
UpdateMotor=0; |
//PORTD |= 0x08; |
MotorRegler(); |
//PORTD &= ~0x08; |
SendMotorData(); |
ROT_OFF; |
if(PcZugriff) PcZugriff--; |
else |
{ |
DubWiseKeys[0] = 0; |
DubWiseKeys[1] = 0; |
ExternStickNick = 0; |
ExternStickRoll = 0; |
ExternStickGier = 0; |
} |
if(SenderOkay) SenderOkay--; |
if(!I2CTimeout) |
{ |
I2CTimeout = 5; |
i2c_reset(); |
if((BeepMuster == 0xffff) && MotorenEin) |
{ |
beeptime = 10000; |
BeepMuster = 0x0080; |
} |
} |
else |
{ |
I2CTimeout--; |
ROT_OFF; |
} |
} |
if(SIO_DEBUG) |
{ |
DatenUebertragung(); |
BearbeiteRxDaten(); |
} |
else BearbeiteRxDaten(); |
if(CheckDelay(timer)) |
{ |
if(UBat < EE_Parameter.UnterspannungsWarnung) |
{ |
if(BeepMuster == 0xffff) |
{ |
beeptime = 6000; |
BeepMuster = 0x0300; |
} |
} |
// SPI_StartTransmitPacket(); |
timer = SetDelay(100); |
} |
} |
return (1); |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/main.h |
---|
0,0 → 1,108 |
#ifndef _MAIN_H |
#define _MAIN_H |
//Hier die Quarz Frequenz einstellen |
#if defined (__AVR_ATmega32__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
#endif |
#if defined (__AVR_ATmega644__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
//#define SYSCLK 16000000L //Quarz Frequenz in Hz |
#endif |
#if defined (__AVR_ATmega644P__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
//#define SYSCLK 16000000L //Quarz Frequenz in Hz |
#endif |
// neue Hardware |
#define ROT_OFF {if(PlatinenVersion == 10) PORTB &=~0x01; else PORTB |= 0x01;} |
#define ROT_ON {if(PlatinenVersion == 10) PORTB |= 0x01; else PORTB &=~0x01;} |
#define ROT_FLASH PORTB ^= 0x01 |
#define GRN_OFF PORTB &=~0x02 |
#define GRN_ON PORTB |= 0x02 |
#define GRN_FLASH PORTB ^= 0x02 |
#define F_CPU SYSCLK |
//#ifndef F_CPU |
//#error ################## F_CPU nicht definiert oder ungültig ############# |
//#endif |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define EEPROM_ADR_VALID 1 |
#define EEPROM_ADR_ACTIVE_SET 2 |
#define EEPROM_ADR_LAST_OFFSET 3 |
#define EEPROM_ADR_ACC_NICK 4 |
#define EEPROM_ADR_ACC_ROLL 6 |
#define EEPROM_ADR_ACC_Z 8 |
#define EEPROM_ADR_PARAM_BEGIN 100 |
#define CFG_HOEHENREGELUNG 0x01 |
#define CFG_HOEHEN_SCHALTER 0x02 |
#define CFG_HEADING_HOLD 0x04 |
#define CFG_KOMPASS_AKTIV 0x08 |
#define CFG_KOMPASS_FIX 0x10 |
#define CFG_GPS_AKTIV 0x20 |
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40 |
#define CFG_DREHRATEN_BEGRENZER 0x80 |
#define CFG_LOOP_OBEN 0x01 |
#define CFG_LOOP_UNTEN 0x02 |
#define CFG_LOOP_LINKS 0x04 |
#define CFG_LOOP_RECHTS 0x08 |
//#define SYSCLK |
//extern unsigned long SYSCLK; |
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll; |
extern volatile unsigned char SenderOkay; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern unsigned char PlatinenVersion; |
void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length); |
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length); |
extern unsigned char GetActiveParamSetNumber(void); |
extern unsigned char EEPromArray[]; |
#include <stdlib.h> |
#include <string.h> |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <avr/interrupt.h> |
#include <avr/eeprom.h> |
#include <avr/boot.h> |
#include <avr/wdt.h> |
#include "old_macros.h" |
#include "_Settings.h" |
#include "printf_P.h" |
#include "timer0.h" |
#include "uart.h" |
#include "analog.h" |
#include "twimaster.h" |
#include "menu.h" |
#include "rc.h" |
#include "fc.h" |
#include "gps.h" |
#include "spi.h" |
#ifndef EEMEM |
#define EEMEM __attribute__ ((section (".eeprom"))) |
#endif |
#define DEBUG_DISPLAY_INTERVALL 123 // in ms |
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU )) |
#endif //_MAIN_H |
/Microsoft Robotics Studio/FC source/V68d for MSRS/makefile |
---|
0,0 → 1,420 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega644p |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
HAUPT_VERSION = 0 |
NEBEN_VERSION = 90 |
VERSION_INDEX = 1 |
VERSION_KOMPATIBEL = 7 # PC-Kompatibilität |
#------------------------------------------------------------------- |
ifeq ($(MCU), atmega32) |
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m |
HEX_NAME = MEGA32 |
endif |
ifeq ($(MCU), atmega644) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
HEX_NAME = MEGA644 |
endif |
ifeq ($(MCU), atmega644p) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
# -u bei neuen Controllern wieder einspielen |
HEX_NAME = MEGA644 |
endif |
ifeq ($(F_CPU), 16000000) |
QUARZ = 16MHZ |
endif |
ifeq ($(F_CPU), 20000000) |
QUARZ = 20MHZ |
endif |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
# Target file name (without extension). |
ifeq ($(VERSION_INDEX), 0) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)a |
endif |
ifeq ($(VERSION_INDEX), 1) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)b |
endif |
ifeq ($(VERSION_INDEX), 2) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)c |
endif |
ifeq ($(VERSION_INDEX), 3) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)d |
endif |
ifeq ($(VERSION_INDEX), 4) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)e |
endif |
ifeq ($(VERSION_INDEX), 5) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)f |
endif |
ifeq ($(VERSION_INDEX), 6) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)g |
endif |
ifeq ($(VERSION_INDEX), 7) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)h |
endif |
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c |
SRC += twimaster.c rc.c fc.c GPS.c |
#spi.c |
########################################################################################################## |
# List Assembler source files here. |
# Make them always end in a capital .S. Files ending in a lowercase .s |
# will not be considered source files but generated files (assembler |
# output from the compiler), and will be deleted upon "make clean"! |
# Even though the DOS/Win* filesystem matches both .s and .S the same, |
# it will preserve the spelling of the filenames, and gcc itself does |
# care about how the name is spelled on its command-line. |
ASRC = |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
EXTRAINCDIRS = |
# Optional compiler flags. |
# -g: generate debugging information (for GDB, or for COFF conversion) |
# -O*: optimization level |
# -f...: tuning, see gcc manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create assembler listing |
CFLAGS = -O$(OPT) \ |
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \ |
-Wall -Wstrict-prototypes \ |
-Wa,-adhlns=$(<:.c=.lst) \ |
$(patsubst %,-I%,$(EXTRAINCDIRS)) |
# Set a "language standard" compiler flag. |
# Unremark just one line below to set the language standard to use. |
# gnu99 = C99 + GNU extensions. See GCC manual for more information. |
#CFLAGS += -std=c89 |
#CFLAGS += -std=gnu89 |
#CFLAGS += -std=c99 |
CFLAGS += -std=gnu99 |
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL) -DVERSION_INDEX=$(VERSION_INDEX) |
# Optional assembler flags. |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs |
# Optional linker flags. |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
# Additional libraries |
# Minimalistic printf version |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires -lm below) |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt |
# -lm = math library |
LDFLAGS += -lm |
##LDFLAGS += -T./linkerfile/avr5.x |
# Programming support using avrdude. Settings and variables. |
# Programming hardware: alf avr910 avrisp bascom bsd |
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
#AVRDUDE_PROGRAMMER = stk200 |
AVRDUDE_PROGRAMMER = dt006 |
#AVRDUDE_PROGRAMMER = ponyser |
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden |
#AVRDUDE_PORT = com1 # programmer connected to serial device |
AVRDUDE_PORT = lpt1 # programmer connected to parallel port |
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS) |
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE += -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
AVRDUDE_FLAGS += -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_FLAGS += -v -v |
# --------------------------------------------------------------------------- |
# Define directories, if needed. |
DIRAVR = c:/winavr |
DIRAVRBIN = $(DIRAVR)/bin |
DIRAVRUTILS = $(DIRAVR)/utils/bin |
DIRINC = . |
DIRLIB = $(DIRAVR)/avr/lib |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
# Programming support using avrdude. |
AVRDUDE = avrdude |
REMOVE = rm -f |
COPY = cp |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
ELFSIZE = $(SIZE) -A $(TARGET).elf |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
# Define all object files. |
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) |
# Define all listing files. |
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS) |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \ |
$(TARGET).lss $(TARGET).sym sizeafter finished end |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
finished: |
@echo $(MSG_ERRORS_NONE) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
sizebefore: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Convert ELF to COFF for use in debugging / simulating in |
# AVR Studio or VMLAB. |
COFFCONVERT=$(OBJCOPY) --debugging \ |
--change-section-address .data-0x800000 \ |
--change-section-address .bss-0x800000 \ |
--change-section-address .noinit-0x800000 \ |
--change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Program the device. |
program: $(TARGET).hex $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
avr-nm -n $< > $@ |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list finished end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
# $(REMOVE) $(TARGET).hex |
$(REMOVE) $(TARGET).eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) $(TARGET).elf |
$(REMOVE) $(TARGET).map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) $(TARGET).sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
# Automatically generate C source code dependencies. |
# (Code originally taken from the GNU make user manual and modified |
# (See README.txt Credits).) |
# |
# Note that this will work with sh (bash) and sed that is shipped with WinAVR |
# (see the SHELL variable defined above). |
# This may not work with other shells or other seds. |
# |
%.d: %.c |
set -e; $(CC) -MM $(ALL_CFLAGS) $< \ |
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ |
[ -s $@ ] || rm -f $@ |
# Remove the '-' if you want to see the dependency files generated. |
-include $(SRC:.c=.d) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ |
clean clean_list program |
/Microsoft Robotics Studio/FC source/V68d for MSRS/menu.c |
---|
0,0 → 1,127 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned int TestInt = 0; |
#define ARRAYGROESSE 10 |
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10}; |
char DisplayBuff[80] = "Hallo Welt"; |
unsigned char DispPtr = 0; |
unsigned char RemoteTasten = 0; |
#define KEY1 0x01 |
#define KEY2 0x02 |
#define KEY3 0x04 |
#define KEY4 0x08 |
#define KEY5 0x10 |
void LcdClear(void) |
{ |
unsigned char i; |
for(i=0;i<80;i++) DisplayBuff[i] = ' '; |
} |
void Menu(void) |
{ |
static unsigned char MaxMenue = 10,MenuePunkt=0; |
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); RemotePollDisplayLine = -1; } |
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); RemotePollDisplayLine = -1;} |
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0; |
LCD_printfxy(17,0,"[%i]",MenuePunkt); |
switch(MenuePunkt) |
{ |
case 0: |
LCD_printfxy(0,0,"++ MikroKopter ++"); |
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%d%c",PlatinenVersion/10,PlatinenVersion%10,VERSION_HAUPTVERSION, VERSION_NEBENVERSION,VERSION_INDEX+'a'); |
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber()); |
LCD_printfxy(0,3,"(c) HB, GL"); |
// if(RemoteTasten & KEY3) TestInt--; |
// if(RemoteTasten & KEY4) TestInt++; |
break; |
case 1: |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
LCD_printfxy(0,0,"Hoehe: %5i",HoehenWert); |
LCD_printfxy(0,1,"SollHoehe: %5i",SollHoehe); |
LCD_printfxy(0,2,"Luftdruck: %5i",MessLuftdruck); |
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting); |
} |
else |
{ |
LCD_printfxy(0,1,"Keine "); |
LCD_printfxy(0,2,"Höhenregelung"); |
} |
break; |
case 2: |
LCD_printfxy(0,0,"akt. Lage"); |
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024); |
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024); |
LCD_printfxy(0,3,"Kompass: %5i",KompassValue); |
break; |
case 3: |
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]); |
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]); |
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]); |
LCD_printfxy(0,3,"K7:%4i K8:%4i ",PPM_in[7],PPM_in[8]); |
break; |
case 4: |
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]); |
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]); |
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]); |
break; |
case 5: |
LCD_printfxy(0,0,"Gyro - Sensor"); |
if(PlatinenVersion == 10) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertNick - AdNeutralNick, AdNeutralNick); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertRoll - AdNeutralRoll, AdNeutralRoll); |
LCD_printfxy(0,3,"Gier %4i (%3i)",MesswertGier, AdNeutralGier); |
} |
else |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertNick - AdNeutralNick, AdNeutralNick/2); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertRoll - AdNeutralRoll, AdNeutralRoll/2); |
LCD_printfxy(0,3,"Gier %4i (%3i)",MesswertGier, AdNeutralGier/2); |
} |
break; |
case 6: |
LCD_printfxy(0,0,"ACC - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY); |
LCD_printfxy(0,3,"Hoch %4i (%3i)",Mittelwert_AccHoch/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ); |
break; |
case 7: |
LCD_printfxy(0,1,"Spannung: %5i",UBat); |
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay); |
break; |
case 8: |
LCD_printfxy(0,0,"Kompass "); |
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung); |
LCD_printfxy(0,2,"Messwert: %5i",KompassValue); |
LCD_printfxy(0,3,"Start: %5i",KompassStartwert); |
break; |
case 9: |
LCD_printfxy(0,0,"Poti1: %3i",Poti1); |
LCD_printfxy(0,1,"Poti2: %3i",Poti2); |
LCD_printfxy(0,2,"Poti3: %3i",Poti3); |
LCD_printfxy(0,3,"Poti4: %3i",Poti4); |
break; |
case 10: |
LCD_printfxy(0,0,"Servo " ); |
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl); |
LCD_printfxy(0,2,"Stellung: %3i",ServoValue); |
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax); |
break; |
default: MaxMenue = MenuePunkt - 1; |
MenuePunkt = 0; |
break; |
} |
RemoteTasten = 0; |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/menu.h |
---|
0,0 → 1,6 |
extern void Menu(void); |
extern void LcdClear(void); |
extern char DisplayBuff[80]; |
extern unsigned char DispPtr; |
extern unsigned char RemoteTasten; |
/Microsoft Robotics Studio/FC source/V68d for MSRS/old_macros.h |
---|
0,0 → 1,47 |
/* |
For backwards compatibility only. |
Ingo Busker ingo@mikrocontroller.com |
*/ |
#ifndef cbi |
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) |
#endif |
#ifndef sbi |
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) |
#endif |
#ifndef inb |
#define inb(sfr) _SFR_BYTE(sfr) |
#endif |
#ifndef outb |
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val)) |
#endif |
#ifndef inw |
#define inw(sfr) _SFR_WORD(sfr) |
#endif |
#ifndef outw |
#define outw(sfr, val) (_SFR_WORD(sfr) = (val)) |
#endif |
#ifndef outp |
#define outp(val, sfr) outb(sfr, val) |
#endif |
#ifndef inp |
#define inp(sfr) inb(sfr) |
#endif |
#ifndef BV |
#define BV(bit) _BV(bit) |
#endif |
#ifndef PRG_RDB |
#define PRG_RDB pgm_read_byte |
#endif |
/Microsoft Robotics Studio/FC source/V68d for MSRS/printf_P.c |
---|
0,0 → 1,480 |
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt |
/* |
Copyright (C) 1993 Free Software Foundation |
This file is part of the GNU IO Library. This library is free |
software; you can redistribute it and/or modify it under the |
terms of the GNU General Public License as published by the |
Free Software Foundation; either version 2, or (at your option) |
any later version. |
This library is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this library; see the file COPYING. If not, write to the Free |
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
As a special exception, if you link this library with files |
compiled with a GNU compiler to produce an executable, this does not cause |
the resulting executable to be covered by the GNU General Public License. |
This exception does not however invalidate any other reasons why |
the executable file might be covered by the GNU General Public License. */ |
/* |
* Copyright (c) 1990 Regents of the University of California. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. [rescinded 22 July 1999] |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
*/ |
/****************************************************************************** |
This file is a patched version of printf called _printf_P |
It is made to work with avr-gcc for Atmel AVR MCUs. |
There are some differences from standard printf: |
1. There is no floating point support (with fp the code is about 8K!) |
2. Return type is void |
3. Format string must be in program memory (by using macro printf this is |
done automaticaly) |
4. %n is not implemented (just remove the comment around it if you need it) |
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the |
folowing specifiers are disabled : |
space # * . - + p s o O |
6. A function void uart_sendchar(char c) is used for output. The UART must |
be initialized before using printf. |
Alexander Popov |
sasho@vip.orbitel.bg |
******************************************************************************/ |
/* |
* Actual printf innards. |
* |
* This code is large and complicated... |
*/ |
#include <string.h> |
#ifdef __STDC__ |
#include <stdarg.h> |
#else |
#include <varargs.h> |
#endif |
#include "main.h" |
//#define LIGHTPRINTF |
char PrintZiel; |
char Putchar(char zeichen) |
{ |
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);} |
else return(uart_putchar(zeichen)); |
} |
void PRINT(const char * ptr, unsigned int len) |
{ |
for(;len;len--) Putchar(*ptr++); |
} |
void PRINTP(const char * ptr, unsigned int len) |
{ |
for(;len;len--) Putchar(pgm_read_byte(ptr++)); |
} |
void PAD_SP(signed char howmany) |
{ |
for(;howmany>0;howmany--) Putchar(' '); |
} |
void PAD_0(signed char howmany) |
{ |
for(;howmany>0;howmany--) Putchar('0'); |
} |
#define BUF 40 |
/* |
* Macros for converting digits to letters and vice versa |
*/ |
#define to_digit(c) ((c) - '0') |
#define is_digit(c) ((c)<='9' && (c)>='0') |
#define to_char(n) ((n) + '0') |
/* |
* Flags used during conversion. |
*/ |
#define LONGINT 0x01 /* long integer */ |
#define LONGDBL 0x02 /* long double; unimplemented */ |
#define SHORTINT 0x04 /* short integer */ |
#define ALT 0x08 /* alternate form */ |
#define LADJUST 0x10 /* left adjustment */ |
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */ |
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */ |
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */ |
{ |
va_list ap; |
register const char *fmt; /* format string */ |
register char ch; /* character from fmt */ |
register int n; /* handy integer (short term usage) */ |
register char *cp; /* handy char pointer (short term usage) */ |
const char *fmark; /* for remembering a place in fmt */ |
register unsigned char flags; /* flags as above */ |
signed char width; /* width from format (%8d), or 0 */ |
signed char prec; /* precision from format (%.3d), or -1 */ |
char sign; /* sign prefix (' ', '+', '-', or \0) */ |
unsigned long _ulong=0; /* integer arguments %[diouxX] */ |
#define OCT 8 |
#define DEC 10 |
#define HEX 16 |
unsigned char base; /* base for [diouxX] conversion */ |
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */ |
signed char dpad; /* extra 0 padding needed for integers */ |
signed char fieldsz; /* field size expanded by sign, dpad etc */ |
/* The initialization of 'size' is to suppress a warning that |
'size' might be used unitialized. It seems gcc can't |
quite grok this spaghetti code ... */ |
signed char size = 0; /* size of converted field or string */ |
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */ |
char ox[2]; /* space for 0x hex-prefix */ |
PrintZiel = ziel; // bestimmt, LCD oder UART |
va_start(ap, fmt0); |
fmt = fmt0; |
/* |
* Scan the format for conversions (`%' character). |
*/ |
for (;;) { |
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++) |
/* void */; |
if ((n = fmt - fmark) != 0) { |
PRINTP(fmark, n); |
} |
if (ch == '\0') |
goto done; |
fmt++; /* skip over '%' */ |
flags = 0; |
dprec = 0; |
width = 0; |
prec = -1; |
sign = '\0'; |
rflag: ch = PRG_RDB(fmt++); |
reswitch: |
#ifdef LIGHTPRINTF |
if (ch=='o' || ch=='u' || (ch|0x20)=='x') { |
#else |
if (ch=='u' || (ch|0x20)=='x') { |
#endif |
if (flags&LONGINT) { |
_ulong=va_arg(ap, unsigned long); |
} else { |
register unsigned int _d; |
_d=va_arg(ap, unsigned int); |
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d; |
} |
} |
#ifndef LIGHTPRINTF |
if(ch==' ') { |
/* |
* ``If the space and + flags both appear, the space |
* flag will be ignored.'' |
* -- ANSI X3J11 |
*/ |
if (!sign) |
sign = ' '; |
goto rflag; |
} else if (ch=='#') { |
flags |= ALT; |
goto rflag; |
} else if (ch=='*'||ch=='-') { |
if (ch=='*') { |
/* |
* ``A negative field width argument is taken as a |
* - flag followed by a positive field width.'' |
* -- ANSI X3J11 |
* They don't exclude field widths read from args. |
*/ |
if ((width = va_arg(ap, int)) >= 0) |
goto rflag; |
width = -width; |
} |
flags |= LADJUST; |
flags &= ~ZEROPAD; /* '-' disables '0' */ |
goto rflag; |
} else if (ch=='+') { |
sign = '+'; |
goto rflag; |
} else if (ch=='.') { |
if ((ch = PRG_RDB(fmt++)) == '*') { |
n = va_arg(ap, int); |
prec = n < 0 ? -1 : n; |
goto rflag; |
} |
n = 0; |
while (is_digit(ch)) { |
n = n*10 + to_digit(ch); |
ch = PRG_RDB(fmt++); |
} |
prec = n < 0 ? -1 : n; |
goto reswitch; |
} else |
#endif /* LIGHTPRINTF */ |
if (ch=='0') { |
/* |
* ``Note that 0 is taken as a flag, not as the |
* beginning of a field width.'' |
* -- ANSI X3J11 |
*/ |
if (!(flags & LADJUST)) |
flags |= ZEROPAD; /* '-' disables '0' */ |
goto rflag; |
} else if (ch>='1' && ch<='9') { |
n = 0; |
do { |
n = 10 * n + to_digit(ch); |
ch = PRG_RDB(fmt++); |
} while (is_digit(ch)); |
width = n; |
goto reswitch; |
} else if (ch=='h') { |
flags |= SHORTINT; |
goto rflag; |
} else if (ch=='l') { |
flags |= LONGINT; |
goto rflag; |
} else if (ch=='c') { |
*(cp = buf) = va_arg(ap, int); |
size = 1; |
sign = '\0'; |
} else if (ch=='D'||ch=='d'||ch=='i') { |
if(ch=='D') |
flags |= LONGINT; |
if (flags&LONGINT) { |
_ulong=va_arg(ap, long); |
} else { |
register int _d; |
_d=va_arg(ap, int); |
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d; |
} |
if ((long)_ulong < 0) { |
_ulong = -_ulong; |
sign = '-'; |
} |
base = DEC; |
goto number; |
} else |
/* |
if (ch=='n') { |
if (flags & LONGINT) |
*va_arg(ap, long *) = ret; |
else if (flags & SHORTINT) |
*va_arg(ap, short *) = ret; |
else |
*va_arg(ap, int *) = ret; |
continue; // no output |
} else |
*/ |
#ifndef LIGHTPRINTF |
if (ch=='O'||ch=='o') { |
if (ch=='O') |
flags |= LONGINT; |
base = OCT; |
goto nosign; |
} else if (ch=='p') { |
/* |
* ``The argument shall be a pointer to void. The |
* value of the pointer is converted to a sequence |
* of printable characters, in an implementation- |
* defined manner.'' |
* -- ANSI X3J11 |
*/ |
/* NOSTRICT */ |
_ulong = (unsigned int)va_arg(ap, void *); |
base = HEX; |
flags |= HEXPREFIX; |
ch = 'x'; |
goto nosign; |
} else if (ch=='s') { // print a string from RAM |
if ((cp = va_arg(ap, char *)) == NULL) { |
cp=buf; |
cp[0] = '('; |
cp[1] = 'n'; |
cp[2] = 'u'; |
cp[4] = cp[3] = 'l'; |
cp[5] = ')'; |
cp[6] = '\0'; |
} |
if (prec >= 0) { |
/* |
* can't use strlen; can only look for the |
* NUL in the first `prec' characters, and |
* strlen() will go further. |
*/ |
char *p = (char*)memchr(cp, 0, prec); |
if (p != NULL) { |
size = p - cp; |
if (size > prec) |
size = prec; |
} else |
size = prec; |
} else |
size = strlen(cp); |
sign = '\0'; |
} else |
#endif /* LIGHTPRINTF */ |
if(ch=='U'||ch=='u') { |
if (ch=='U') |
flags |= LONGINT; |
base = DEC; |
goto nosign; |
} else if (ch=='X'||ch=='x') { |
base = HEX; |
/* leading 0x/X only if non-zero */ |
if (flags & ALT && _ulong != 0) |
flags |= HEXPREFIX; |
/* unsigned conversions */ |
nosign: sign = '\0'; |
/* |
* ``... diouXx conversions ... if a precision is |
* specified, the 0 flag will be ignored.'' |
* -- ANSI X3J11 |
*/ |
number: if ((dprec = prec) >= 0) |
flags &= ~ZEROPAD; |
/* |
* ``The result of converting a zero value with an |
* explicit precision of zero is no characters.'' |
* -- ANSI X3J11 |
*/ |
cp = buf + BUF; |
if (_ulong != 0 || prec != 0) { |
register unsigned char _d,notlastdigit; |
do { |
notlastdigit=(_ulong>=base); |
_d = _ulong % base; |
if (_d<10) { |
_d+='0'; |
} else { |
_d+='a'-10; |
if (ch=='X') _d&=~0x20; |
} |
*--cp=_d; |
_ulong /= base; |
} while (notlastdigit); |
#ifndef LIGHTPRINTF |
// handle octal leading 0 |
if (base==OCT && flags & ALT && *cp != '0') |
*--cp = '0'; |
#endif |
} |
size = buf + BUF - cp; |
} else { //default |
/* "%?" prints ?, unless ? is NUL */ |
if (ch == '\0') |
goto done; |
/* pretend it was %c with argument ch */ |
cp = buf; |
*cp = ch; |
size = 1; |
sign = '\0'; |
} |
/* |
* All reasonable formats wind up here. At this point, |
* `cp' points to a string which (if not flags&LADJUST) |
* should be padded out to `width' places. If |
* flags&ZEROPAD, it should first be prefixed by any |
* sign or other prefix; otherwise, it should be blank |
* padded before the prefix is emitted. After any |
* left-hand padding and prefixing, emit zeroes |
* required by a decimal [diouxX] precision, then print |
* the string proper, then emit zeroes required by any |
* leftover floating precision; finally, if LADJUST, |
* pad with blanks. |
*/ |
/* |
* compute actual size, so we know how much to pad. |
*/ |
fieldsz = size; |
dpad = dprec - size; |
if (dpad < 0) |
dpad = 0; |
if (sign) |
fieldsz++; |
else if (flags & HEXPREFIX) |
fieldsz += 2; |
fieldsz += dpad; |
/* right-adjusting blank padding */ |
if ((flags & (LADJUST|ZEROPAD)) == 0) |
PAD_SP(width - fieldsz); |
/* prefix */ |
if (sign) { |
PRINT(&sign, 1); |
} else if (flags & HEXPREFIX) { |
ox[0] = '0'; |
ox[1] = ch; |
PRINT(ox, 2); |
} |
/* right-adjusting zero padding */ |
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD) |
PAD_0(width - fieldsz); |
/* leading zeroes from decimal precision */ |
PAD_0(dpad); |
/* the string or number proper */ |
PRINT(cp, size); |
/* left-adjusting padding (always blank) */ |
if (flags & LADJUST) |
PAD_SP(width - fieldsz); |
} |
done: |
va_end(ap); |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/printf_P.h |
---|
0,0 → 1,19 |
#ifndef _PRINTF_P_H_ |
#define _PRINTF_P_H_ |
#include <avr/pgmspace.h> |
#define OUT_V24 0 |
#define OUT_LCD 1 |
void _printf_P (char, char const *fmt0, ...); |
extern char PrintZiel; |
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args) |
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args) |
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);} |
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);} |
#endif |
/Microsoft Robotics Studio/FC source/V68d for MSRS/rc.c |
---|
0,0 → 1,84 |
/*####################################################################################### |
Decodieren eines RC Summen Signals |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "rc.h" |
#include "main.h" |
volatile int PPM_in[11]; |
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal |
volatile unsigned char NewPpmData = 1; |
//############################################################################ |
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input |
//Capture Funktion benutzt: |
void rc_sum_init (void) |
//############################################################################ |
{ |
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64 |
// PWM |
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10); |
//TCCR1B |= (1 << WGM12); |
//OCR1B = 55; |
TIMSK1 |= _BV(ICIE1); |
AdNeutralGier = 0; |
AdNeutralRoll = 0; |
AdNeutralNick = 0; |
return; |
} |
//############################################################################ |
//Diese Routine startet und inizialisiert den Timer für RC |
SIGNAL(SIG_INPUT_CAPTURE1) |
//############################################################################ |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? |
// if((signal > (int) Parameter_UserParam2 * 10) && (signal < 8000)) |
if((signal > 1100) && (signal < 8000)) |
{ |
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten |
index = 1; |
} |
else |
{ |
if(index < 10) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= 466; |
// Stabiles Signal |
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
// if(tmp > signal+1) tmp--; else |
// if(tmp < signal-1) tmp++; |
PPM_diff[index] = tmp - PPM_in[index]; |
PPM_in[index] = tmp; |
} |
index++; |
if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen |
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen |
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen |
} |
} |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/rc.h |
---|
0,0 → 1,36 |
/*####################################################################################### |
Derkodieren eines RC Summen Signals |
#######################################################################################*/ |
#ifndef _RC_H |
#define _RC_H |
#if defined (__AVR_ATmega32__) |
#define TIMER_TEILER CK64 |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#if defined (__AVR_ATmega644__) |
//#define TIMER_TEILER CK64 |
#define TIMER_RELOAD_VALUE 250 |
//#define TIMER_TEILER CK256 // bei 20MHz |
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz |
#endif |
#if defined (__AVR_ATmega644P__) |
//#define TIMER_TEILER CK64 |
#define TIMER_RELOAD_VALUE 250 |
//#define TIMER_TEILER CK256 // bei 20MHz |
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz |
#endif |
#define GAS PPM_in[2] |
extern void rc_sum_init (void); |
extern volatile int PPM_in[11]; |
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal |
extern volatile unsigned char NewPpmData; |
#endif //_RC_H |
/Microsoft Robotics Studio/FC source/V68d for MSRS/spi.c |
---|
0,0 → 1,86 |
// ######################## SPI - FlightCtrl ################### |
#include "main.h" |
struct str_ToNaviCtrl ToNaviCtrl; |
struct str_FromNaviCtrl FromNaviCtrl; |
unsigned char SPI_BufferIndex; |
volatile unsigned char SPI_Buffer[sizeof(FromNaviCtrl)]; |
unsigned char *Ptr_buffer = (unsigned char *) &ToNaviCtrl; |
//------------------------------------------------------ |
void SPI_MasterInit(void) |
{ |
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK); // Set MOSI and SCK output, all others input |
SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT); |
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPIE); // Enable SPI, Master, set clock rate fck/64 |
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); |
} |
//------------------------------------------------------ |
void SPI_StartTransmitPacket(void) |
{ |
if ((SLAVE_SELECT_PORT & (1 << SPI_SLAVE_SELECT)) == 0) return; // transfer of prev. packet not completed |
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave |
UpdateSPI_Buffer(); // update buffer |
SPI_BufferIndex = 1; |
DebugOut.Analog[16]++; |
// -- Debug-Output --- |
cli(); |
DebugOut.Analog[20] = FromNaviCtrl.Comp; |
DebugOut.Analog[21] = FromNaviCtrl.GPS_Nick; |
DebugOut.Analog[22] = FromNaviCtrl.GPS_Roll; |
DebugOut.Analog[23] = FromNaviCtrl.CompassValue; |
sei(); |
//---- |
SPDR = ToNaviCtrl.Comp; // Start transmission |
} |
//------------------------------------------------------ |
//SIGNAL(SIG_SPI) |
void SPI_TransmitByte(void) |
{ |
if (!(SPSR & (1 << SPIF))) return; |
if (SPI_BufferIndex < sizeof(FromNaviCtrl)) |
{ SPI_Buffer[SPI_BufferIndex]= SPDR; // get data |
//if(SPDR!= 0x00) DebugOut.Analog[19]++; ; |
} |
if (SPI_BufferIndex < sizeof(ToNaviCtrl)) |
{ SPDR = Ptr_buffer[SPI_BufferIndex]; |
} |
else |
{ |
unsigned char *ptr = (unsigned char *)&FromNaviCtrl; |
unsigned char i; |
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave |
memcpy(ptr, (unsigned char *) SPI_Buffer, sizeof(SPI_Buffer)); |
} |
SPI_BufferIndex++; |
} |
//------------------------------------------------------ |
void UpdateSPI_Buffer(void) |
{ |
cli(); |
ToNaviCtrl.Comp = SPI_PROTOCOL_COMP; |
ToNaviCtrl.IntegralNick = (int) (IntegralNick >> 4); |
ToNaviCtrl.IntegralRoll = (int) (IntegralRoll >> 4); |
ToNaviCtrl.StickNick = (char) StickNick; |
ToNaviCtrl.StickRoll = (char) StickRoll; |
ToNaviCtrl.StickGier = (char) StickGier; |
sei(); |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/spi.h |
---|
0,0 → 1,46 |
// ######################## SPI - FlightCtrl ################### |
#ifndef _SPI_H |
#define _SPI_H |
#define SPI_PROTOCOL_COMP 1 |
//----------------------------------------- |
#define DDR_SPI DDRB |
#define DD_SS PB4 |
#define DD_SCK PB7 |
#define DD_MOSI PB5 |
#define DD_MISO PB6 |
#define SLAVE_SELECT_DDR_PORT DDRC |
#define SLAVE_SELECT_PORT PORTC |
#define SPI_SLAVE_SELECT PC5 |
struct str_ToNaviCtrl |
{ |
unsigned char Comp; |
int IntegralNick; |
int IntegralRoll; |
char StickNick,StickRoll,StickGier; |
}; |
struct str_FromNaviCtrl |
{ |
unsigned char Comp; |
int GPS_Nick; |
int GPS_Roll; |
int CompassValue; |
}; |
extern struct str_ToNaviCtrl ToNaviCtrl; |
extern struct str_FromNaviCtrl FromNaviCtrl; |
extern void SPI_MasterInit(void); |
extern void SPI_StartTransmitPacket(void); |
extern void UpdateSPI_Buffer(void); |
extern void SPI_TransmitByte(void); |
#endif |
/Microsoft Robotics Studio/FC source/V68d for MSRS/timer0.c |
---|
0,0 → 1,165 |
#include "main.h" |
volatile unsigned int CountMilliseconds = 0; |
volatile static unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int cntKompass = 0; |
volatile unsigned int beeptime = 0; |
unsigned int BeepMuster = 0xffff; |
int ServoValue = 0; |
enum { |
STOP = 0, |
CK = 1, |
CK8 = 2, |
CK64 = 3, |
CK256 = 4, |
CK1024 = 5, |
T0_FALLING_EDGE = 6, |
T0_RISING_EDGE = 7 |
}; |
SIGNAL (SIG_OVERFLOW0) // 8kHz |
{ |
static unsigned char cnt_1ms = 1,cnt = 0; |
unsigned char pieper_ein = 0; |
// TCNT0 -= 250;//TIMER_RELOAD_VALUE; |
if(!cnt--) |
{ |
cnt = 9; |
cnt_1ms++; |
cnt_1ms %= 2; |
if(!cnt_1ms) UpdateMotor = 1; |
CountMilliseconds++; |
} |
if(beeptime > 1) |
{ |
beeptime--; |
if(beeptime & BeepMuster) |
{ |
pieper_ein = 1; |
} |
else pieper_ein = 0; |
} |
else |
{ |
pieper_ein = 0; |
BeepMuster = 0xffff; |
} |
if(pieper_ein) |
{ |
if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2 |
else PORTC |= (1<<7); // Speaker an PORTC.7 |
} |
else |
{ |
if(PlatinenVersion == 10) PORTD &= ~(1<<2); |
else PORTC &= ~(1<<7); |
} |
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
if(PINC & 0x10) |
{ |
cntKompass++; |
} |
else |
{ |
if((cntKompass) && (cntKompass < 4000)) |
{ |
KompassValue = cntKompass; |
} |
// if(cntKompass < 10) cntKompass = 10; |
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L; |
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
cntKompass = 0; |
} |
} |
} |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
OCR0A = 0; |
OCR0B = 120; |
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload |
//OCR1 = 0x00; |
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3; |
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22); |
// TIMSK2 |= _BV(TOIE2); |
TIMSK2 |= _BV(OCIE2A); |
TIMSK0 |= _BV(TOIE0); |
OCR2A = 10; |
TCNT2 = 0; |
} |
// ----------------------------------------------------------------------- |
unsigned int SetDelay (unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(CountMilliseconds + t + 1); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
char CheckDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(((t - CountMilliseconds) & 0x8000) >> 9); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
void Delay_ms(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)); |
} |
void Delay_ms_Mess(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)) ANALOG_ON; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Servo ansteuern |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(SIG_OUTPUT_COMPARE2A) |
{ |
static unsigned char timer = 10; |
if(!timer--) |
{ |
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3; |
ServoValue = Parameter_ServoNickControl; |
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin; |
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax; |
OCR2A = ServoValue;// + 75; |
timer = EE_Parameter.ServoNickRefresh; |
} |
else |
{ |
TCCR2A =3; |
PORTD&=~0x80; |
} |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/timer0.h |
---|
0,0 → 1,16 |
#define TIMER_TEILER CK8 |
#define TIMER_RELOAD_VALUE 250 |
void Timer_Init(void); |
void Delay_ms(unsigned int); |
void Delay_ms_Mess(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
extern volatile unsigned int CountMilliseconds; |
extern volatile unsigned char UpdateMotor; |
extern volatile unsigned int beeptime; |
extern volatile unsigned int cntKompass; |
extern int ServoValue; |
extern unsigned int BeepMuster; |
/Microsoft Robotics Studio/FC source/V68d for MSRS/twimaster.c |
---|
0,0 → 1,152 |
/*############################################################################ |
############################################################################*/ |
#include "main.h" |
unsigned char twi_state = 0; |
unsigned char motor = 0; |
unsigned char motorread = 0; |
unsigned char motor_rx[8]; |
//############################################################################ |
//Initzialisieren der I2C (TWI) Schnittstelle |
void i2c_init(void) |
//############################################################################ |
{ |
TWSR = 0; |
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2; |
} |
//############################################################################ |
//Start I2C |
char i2c_start(void) |
//############################################################################ |
{ |
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE); |
return(0); |
} |
//############################################################################ |
//Start I2C |
void i2c_stop(void) |
//############################################################################ |
{ |
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT); |
} |
void i2c_reset(void) |
//############################################################################ |
{ |
i2c_stop(); |
twi_state = 0; |
motor = TWDR; |
motor = 0; |
TWCR = 0x80; |
TWAMR = 0; |
TWAR = 0; |
TWDR = 0; |
TWSR = 0; |
TWBR = 0; |
i2c_init(); |
i2c_start(); |
i2c_write_byte(0); |
} |
//############################################################################ |
//Start I2C |
char i2c_write_byte(char byte) |
//############################################################################ |
{ |
TWSR = 0x00; |
TWDR = byte; |
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE); |
return(0); |
} |
//############################################################################ |
//Start I2C |
SIGNAL (TWI_vect) |
//############################################################################ |
{ |
switch (twi_state++) |
{ |
case 0: |
i2c_write_byte(0x52+(motor*2)); |
break; |
case 1: |
switch(motor++) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 2: |
i2c_stop(); |
if (motor<4) twi_state = 0; |
else motor = 0; |
i2c_start(); |
break; |
//Liest Daten von Motor |
case 3: |
i2c_write_byte(0x53+(motorread*2)); |
break; |
case 4: |
switch(motorread) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 5: //1 Byte vom Motor lesen |
motor_rx[motorread] = TWDR; |
case 6: |
switch(motorread) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 7: //2 Byte vom Motor lesen |
motor_rx[motorread+4] = TWDR; |
motorread++; |
if (motorread>3) motorread=0; |
i2c_stop(); |
I2CTimeout = 10; |
twi_state = 0; |
} |
TWCR |= 0x80; |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/twimaster.h |
---|
0,0 → 1,33 |
/*############################################################################ |
############################################################################*/ |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
//############################################################################ |
// I2C Konstanten |
#define SCL_CLOCK 200000L |
#define I2C_TIMEOUT 30000 |
#define I2C_START 0x08 |
#define I2C_REPEATED_START 0x10 |
#define I2C_TX_SLA_ACK 0x18 |
#define I2C_TX_DATA_ACK 0x28 |
#define I2C_RX_SLA_ACK 0x40 |
#define I2C_RX_DATA_ACK 0x50 |
//############################################################################ |
extern unsigned char twi_state; |
extern unsigned char motor; |
extern unsigned char motorread; |
extern unsigned char motor_rx[8]; |
void i2c_reset(void); |
extern void i2c_init (void); // I2C initialisieren |
extern char i2c_start (void); // Start I2C |
extern void i2c_stop (void); // Stop I2C |
extern char i2c_write_byte (char byte); // 1 Byte schreiben |
extern void i2c_reset(void); |
#endif |
/Microsoft Robotics Studio/FC source/V68d for MSRS/uart.c |
---|
0,0 → 1,553 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Copyright (c) 12.2007 Gunter Logemann (Roboboard extensions, serial control) |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "uart.h" |
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0; |
unsigned volatile char SioTmp = 0; |
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF]; |
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF]; |
unsigned volatile char NeuerDatensatzEmpfangen = 0; |
unsigned volatile char NeueKoordinateEmpfangen = 0; |
unsigned volatile char UebertragungAbgeschlossen = 1; |
unsigned volatile char CntCrcError = 0; |
unsigned volatile char AnzahlEmpfangsBytes = 0; |
unsigned volatile char PC_DebugTimeout = 0; |
unsigned char RemotePollDisplayLine = 0; |
unsigned char NurKanalAnforderung = 0; |
unsigned char DebugTextAnforderung = 255; |
unsigned char PcZugriff = 100; |
unsigned char MotorTest[4] = {0,0,0,0}; |
unsigned char DubWiseKeys[3] = {0,0,0}; |
unsigned char MeineSlaveAdresse; |
struct str_DebugOut DebugOut; |
struct str_Debug DebugIn; |
struct str_VersionInfo VersionInfo; |
int Debug_Timer; |
unsigned volatile char SioTmp1 = 0; |
unsigned volatile char SendeBuffer1[MAX_SENDE_BUFF]; |
unsigned volatile char RxdBuffer1[MAX_EMPFANGS_BUFF]; |
unsigned volatile char NeuerDatensatzEmpfangen1 = 0; |
unsigned volatile char AnzahlEmpfangsBytes1 = 0; |
unsigned volatile char UebertragungAbgeschlossen1 = 1; |
struct str_ControlIn ControlIn; |
struct str_ControlOut ControlOut; |
unsigned volatile char ControlReceived = 0; |
const unsigned char ANALOG_TEXT[32][16] = |
{ |
//1234567890123456 |
"IntegralNick ", //0 |
"IntegralRoll ", |
"AccNick ", |
"AccRoll ", |
"GyroGier ", |
"HoehenWert ", //5 |
"AccZ ", |
"Gas ", |
"KompassValue ", |
"Spannung ", |
"Empfang ", //10 |
"11 --- ", |
"Motor_Vorne ", |
"Motor_Hinten ", |
"Motor_Links ", |
"Motor_Rechts ", //15 |
"16_Acc_Z ", |
"17MittelAccNick ", |
"18_MittelAccRoll", |
"Analog19 ", |
"IntegralErrRoll ", //20 |
"Analog21 ", |
"22_MittelGIngR ", |
"Analog23 ", |
"24RollOffset ", |
"25IntRoll*Fakt ", //25 |
"Analog26 ", |
"DirektAusglRoll ", |
"28MesswertRoll ", |
"29AusgleichRoll ", |
"30_I-LageRoll ", //30 |
"31_StickRoll " |
}; |
// 2. Seriell Schnittstelle |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Sende-Part der Datenübertragung an zweiten UART |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(INT_VEC_TX1) |
{ |
static unsigned int ptr1 = 0; |
unsigned char tmp_tx1; |
if(!UebertragungAbgeschlossen1) |
{ |
ptr1++; // die [0] wurde schon gesendet |
tmp_tx1 = SendeBuffer1[ptr1]; |
if((tmp_tx1 == '\r') || (ptr1 == MAX_SENDE_BUFF)) |
{ |
ptr1 = 0; |
UebertragungAbgeschlossen1 = 1; |
} |
UDR1 = tmp_tx1; |
} |
else ptr1 = 0; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Empfangs-Part der Datenübertragung von zweitem UART |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(INT_VEC_RX1) |
{ |
static unsigned char buf_ptr1; |
static unsigned char UartState1 = 0; |
SioTmp1 = UDR1; |
if(buf_ptr1 >= MAX_EMPFANGS_BUFF) UartState1 = 0; |
if(SioTmp1 == '\r' && UartState1 == 2) |
{ |
UartState1 = 0; |
NeuerDatensatzEmpfangen1 = 1; |
AnzahlEmpfangsBytes1 = buf_ptr1; |
RxdBuffer1[buf_ptr1] = '\r'; |
} |
else |
switch(UartState1) |
{ |
case 0: |
if(SioTmp1 == '#' && !NeuerDatensatzEmpfangen1) |
{ |
UartState1 = 1; // Startzeichen und Daten schon verarbeitet |
buf_ptr1 = 0; |
RxdBuffer1[buf_ptr1++] = SioTmp1; |
} |
break; |
case 1: // Adresse auswerten |
UartState1++; |
RxdBuffer1[buf_ptr1++] = SioTmp1; |
break; |
case 2: // Eingangsdaten sammeln |
RxdBuffer1[buf_ptr1] = SioTmp1; |
if(buf_ptr1 < MAX_EMPFANGS_BUFF) buf_ptr1++; |
else UartState1 = 0; |
break; |
default: |
UartState1 = 0; |
break; |
} |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Sende-Part der Datenübertragung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(INT_VEC_TX0) |
{ |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
{ |
ptr++; // die [0] wurde schon gesendet |
tmp_tx = SendeBuffer[ptr]; |
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF)) |
{ |
ptr = 0; |
UebertragungAbgeschlossen = 1; |
} |
UDR = tmp_tx; |
} |
else ptr = 0; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(INT_VEC_RX0) |
{ |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
SioTmp = UDR; |
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0; |
if(SioTmp == '\r' && UartState == 2) |
{ |
UartState = 0; |
crc -= RxdBuffer[buf_ptr-2]; |
crc -= RxdBuffer[buf_ptr-1]; |
crc %= 4096; |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
CrcOkay = 0; |
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;}; |
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet |
{ |
NeuerDatensatzEmpfangen = 1; |
AnzahlEmpfangsBytes = buf_ptr; |
RxdBuffer[buf_ptr] = '\r'; |
if(RxdBuffer[2] == 'R') wdt_enable(WDTO_250MS); // Reset-Commando |
} |
} |
else |
switch(UartState) |
{ |
case 0: |
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) { |
UartState = 1; // Startzeichen und Daten schon verarbeitet |
buf_ptr = 0; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc = SioTmp; |
} |
break; |
case 1: // Adresse auswerten |
UartState++; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc += SioTmp; |
break; |
case 2: // Eingangsdaten sammeln |
RxdBuffer[buf_ptr] = SioTmp; |
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++; |
else UartState = 0; |
crc += SioTmp; |
break; |
default: |
UartState = 0; |
break; |
} |
} |
// -------------------------------------------------------------------------- |
void AddCRC(unsigned int wieviele) |
{ |
unsigned int tmpCRC = 0,i; |
for(i = 0; i < wieviele;i++) |
{ |
tmpCRC += SendeBuffer[i]; |
} |
tmpCRC %= 4096; |
SendeBuffer[i++] = '=' + tmpCRC / 64; |
SendeBuffer[i++] = '=' + tmpCRC % 64; |
SendeBuffer[i++] = '\r'; |
UebertragungAbgeschlossen = 0; |
UDR = SendeBuffer[0]; |
} |
// -------------------------------------------------------------------------- |
void SendOutRXTunnelData(unsigned char *snd, unsigned char len) |
{ |
unsigned int pt = 0; |
unsigned char ptr = 0; |
while(len) |
{ |
SendeBuffer1[pt++] = snd[ptr++]; |
len--; |
} |
SendeBuffer1[pt++] = '\r'; |
UebertragungAbgeschlossen1 = 0; |
UDR1 = SendeBuffer1[0]; |
} |
// -------------------------------------------------------------------------- |
void SendOutTXTunnelData(unsigned char *snd, unsigned char len) |
{ |
unsigned int pt = 0; |
unsigned char ptr = 0; |
while(len) |
{ |
SendeBuffer[pt++] = snd[ptr++]; |
len--; |
} |
SendeBuffer[pt++] = '\r'; |
UebertragungAbgeschlossen = 0; |
NeuerDatensatzEmpfangen1 = 0; |
UDR = SendeBuffer[0]; |
} |
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len) |
{ |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
SendeBuffer[pt++] = '#'; // Startzeichen |
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...) |
SendeBuffer[pt++] = cmd; // Commando |
while(len) |
{ |
if(len) { a = snd[ptr++]; len--;} else a = 0; |
if(len) { b = snd[ptr++]; len--;} else b = 0; |
if(len) { c = snd[ptr++]; len--;} else c = 0; |
SendeBuffer[pt++] = '=' + (a >> 2); |
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
SendeBuffer[pt++] = '=' + ( c & 0x3f); |
} |
AddCRC(pt); |
} |
// -------------------------------------------------------------------------- |
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer |
{ |
unsigned char a,b,c,d; |
unsigned char ptr = 0; |
unsigned char x,y,z; |
while(len) |
{ |
a = RxdBuffer[ptrIn++] - '='; |
b = RxdBuffer[ptrIn++] - '='; |
c = RxdBuffer[ptrIn++] - '='; |
d = RxdBuffer[ptrIn++] - '='; |
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if(len--) ptrOut[ptr++] = x; else break; |
if(len--) ptrOut[ptr++] = y; else break; |
if(len--) ptrOut[ptr++] = z; else break; |
} |
} |
// -------------------------------------------------------------------------- |
void BearbeiteRxDaten(void) |
{ |
if(!NeuerDatensatzEmpfangen) return; |
// unsigned int tmp_int_arr1[1]; |
// unsigned int tmp_int_arr2[2]; |
// unsigned int tmp_int_arr3[3]; |
unsigned char tmp_char_arr2[2]; |
// unsigned char tmp_char_arr3[3]; |
// unsigned char tmp_char_arr4[4]; |
//if(!MotorenEin) |
PcZugriff = 255; |
switch(RxdBuffer[2]) |
{ |
case 'a':// Texte der Analogwerte |
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes); |
DebugTextAnforderung = tmp_char_arr2[0]; |
break; |
case 'c':// Debugdaten incl. Externe IOs usw |
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes); |
/* for(unsigned char i=0; i<4;i++) |
{ |
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]); |
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8); |
}*/ |
RemoteTasten |= DebugIn.RemoteTasten; |
DebugDataAnforderung = 1; |
break; |
case 'h':// x-1 Displayzeilen |
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes); |
RemoteTasten |= tmp_char_arr2[0]; |
if(tmp_char_arr2[1] == 255) NurKanalAnforderung = 1; else NurKanalAnforderung = 0; // keine Displaydaten |
DebugDisplayAnforderung = 1; |
break; |
case 't':// Motortest |
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes); |
break; |
case 'k':// Keys von DubWise |
Decode64((unsigned char *) &DubWiseKeys[0],sizeof(DubWiseKeys),3,AnzahlEmpfangsBytes); |
break; |
case 'v': // Version-Anforderung und Ausbaustufe |
GetVersionAnforderung = 1; |
break; |
case 'g':// "Get"-Anforderung für Debug-Daten |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
DebugGetAnforderung = 1; |
break; |
case 'q':// "Get"-Anforderung für Settings |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes); |
if(tmp_char_arr2[0] != 0xff) |
{ |
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5; |
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE); |
} |
else |
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE); |
break; |
case 'l': |
case 'm': |
case 'n': |
case 'o': |
case 'p': // Parametersatz speichern |
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes); |
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
Piep(GetActiveParamSetNumber()); |
break; |
case 'X': // Serial Tunnel Message received |
SendOutRXTunnelData((unsigned char *)&RxdBuffer[0], AnzahlEmpfangsBytes); |
break; |
case 'C': // Flight Control Message received |
if(Parameter_UserParam2 > 10) { |
Decode64((unsigned char *) &ControlIn,sizeof(ControlIn),3,AnzahlEmpfangsBytes); |
ControlOut.errorcode = ControlError_ok; |
ControlReceived = 1; |
} |
else |
{ |
ControlIn.roll = 0; |
ControlIn.nick = 0; |
ControlIn.gier = 0; |
ControlIn.gas = 0; |
ControlOut.errorcode = ControlError_ignore; |
ControlReceived = 1; |
} |
break; |
} |
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall; |
NeuerDatensatzEmpfangen = 0; |
} |
//############################################################################ |
//Routine für die Serielle Ausgabe |
int uart_putchar (char c) |
//############################################################################ |
{ |
if (c == '\n') |
uart_putchar('\r'); |
//Warten solange bis Zeichen gesendet wurde |
loop_until_bit_is_set(USR, UDRE); |
//Ausgabe des Zeichens |
UDR = c; |
return (0); |
} |
// -------------------------------------------------------------------------- |
void WriteProgramData(unsigned int pos, unsigned char wert) |
{ |
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert; |
// else eeprom_write_byte(&EE_Buffer[pos], wert); |
// Buffer[pos] = wert; |
} |
//############################################################################ |
//INstallation der Seriellen Schnittstelle |
void UART_Init (void) |
//############################################################################ |
{ |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
UCR=(1 << TXEN) | (1 << RXEN); |
// UART Double Speed (U2X) |
USR |= (1<<U2X); |
// RX-Interrupt Freigabe |
UCSRB |= (1<<RXCIE); |
// TX-Interrupt Freigabe |
UCSRB |= (1<<TXCIE); |
//Teiler wird gesetzt |
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1); |
//UBRR = 33; |
//öffnet einen Kanal für printf (STDOUT) |
//fdevopen (uart_putchar, 0); |
//sbi(PORTD,4); |
// INIT 2ND uart |
UCR1=(1 << TXEN1) | (1 << RXEN1); |
// UART Double Speed (U2X) |
USR1 |= (1<<U2X1); |
// RX-Interrupt Freigabe |
UCSR1B |= (1<<RXCIE1); |
// TX-Interrupt Freigabe |
UCSR1B |= (1<<TXCIE1); |
//Teiler wird gesetzt |
UBRR1=(SYSCLK / (BAUD_RATE * 8L) - 1); |
//UBRR = 33; |
//öffnet einen Kanal für printf (STDOUT) |
//fdevopen (uart_putchar, 0); |
//sbi(PORTD,4); |
Debug_Timer = SetDelay(200); |
} |
//--------------------------------------------------------------------------------------------- |
void DatenUebertragung(void) |
{ |
if(!UebertragungAbgeschlossen) return; |
if(NeuerDatensatzEmpfangen1 && UebertragungAbgeschlossen) { |
SendOutTXTunnelData((unsigned char *) &RxdBuffer1[0],(unsigned char)AnzahlEmpfangsBytes1); |
} |
if(ControlReceived && UebertragungAbgeschlossen) |
{ |
SendOutData('C',MeineSlaveAdresse,(unsigned char *) &ControlOut,sizeof(ControlOut)); |
ControlReceived = 0; |
} |
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
{ |
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn)); |
DebugGetAnforderung = 0; |
} |
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen) |
{ |
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut)); |
DebugDataAnforderung = 0; |
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL); |
} |
if(DebugTextAnforderung != 255) // Texte für die Analogdaten |
{ |
SendOutData('A',DebugTextAnforderung + '0',(unsigned char *) ANALOG_TEXT[DebugTextAnforderung],16); |
DebugTextAnforderung = 255; |
} |
if(DebugDisplayAnforderung && UebertragungAbgeschlossen) |
{ |
Menu(); |
DebugDisplayAnforderung = 0; |
if(++RemotePollDisplayLine == 4 || NurKanalAnforderung) |
{ |
SendOutData('4',0,(unsigned char *)&PPM_in,sizeof(PPM_in)); // DisplayZeile übertragen |
RemotePollDisplayLine = -1; |
} |
else SendOutData('0' + RemotePollDisplayLine,0,(unsigned char *)&DisplayBuff[20 * RemotePollDisplayLine],20); // DisplayZeile übertragen |
} |
if(GetVersionAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo)); |
GetVersionAnforderung = 0; |
} |
} |
/Microsoft Robotics Studio/FC source/V68d for MSRS/uart.h |
---|
0,0 → 1,143 |
#ifndef _UART_H |
#define _UART_H |
#define MAX_SENDE_BUFF 150 |
#define MAX_EMPFANGS_BUFF 150 |
#define DUB_KEY_UP 4 |
#define DUB_KEY_DOWN 8 |
#define DUB_KEY_RIGHT 32 |
#define DUB_KEY_LEFT 16 |
#define DUB_KEY_FIRE 64 |
void BearbeiteRxDaten(void); |
extern unsigned char DebugGetAnforderung; |
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF]; |
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
extern unsigned volatile char UebertragungAbgeschlossen; |
extern unsigned volatile char PC_DebugTimeout; |
extern unsigned volatile char NeueKoordinateEmpfangen; |
extern unsigned char MeineSlaveAdresse; |
extern unsigned char PcZugriff; |
extern unsigned char RemotePollDisplayLine; |
extern int Debug_Timer; |
extern void UART_Init (void); |
extern int uart_putchar (char c); |
extern void boot_program_page (uint32_t page, uint8_t *buf); |
extern void DatenUebertragung(void); |
extern void DecodeNMEA(void); |
extern void BearbeiteRxDaten(void); |
extern unsigned char MotorTest[4]; |
extern unsigned char DubWiseKeys[3]; |
struct str_DebugOut |
{ |
unsigned char Digital[2]; |
unsigned int Analog[32]; // Debugwerte |
}; |
extern struct str_DebugOut DebugOut; |
struct str_Debug |
{ |
unsigned char Digital[2]; |
unsigned char RemoteTasten; |
unsigned int Analog[4]; |
}; |
extern struct str_Debug DebugIn; |
struct str_VersionInfo |
{ |
unsigned char Hauptversion; |
unsigned char Nebenversion; |
unsigned char PCKompatibel; |
unsigned char Rserved[7]; |
}; |
extern struct str_VersionInfo VersionInfo; |
struct str_ControlIn |
{ |
int roll; |
int nick; |
int gier; |
int gas; |
}; |
extern struct str_ControlIn ControlIn; |
struct str_ControlOut |
{ |
unsigned char errorcode; |
}; |
extern struct str_ControlOut ControlOut; |
#define ControlError_ok 0x00; |
#define ControlError_ignore 0x01; |
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud |
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle |
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle |
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird |
#if defined (__AVR_ATmega128__) |
# define USR UCSR0A |
# define UCR UCSR0B |
# define UDR UDR0 |
# define UBRR UBRR0L |
# define EICR EICRB |
#endif |
#if defined (__AVR_ATmega32__) |
# define USR UCSRA |
# define UCR UCSRB |
# define UBRR UBRRL |
# define EICR EICRB |
# define INT_VEC_RX SIG_UART_RECV |
# define INT_VEC_TX SIG_UART_TRANS |
#endif |
#if defined (__AVR_ATmega644__) |
# define USR UCSR0A |
# define UCR UCSR0B |
# define UDR UDR0 |
# define UBRR UBRR0L |
# define EICR EICR0B |
# define TXEN TXEN0 |
# define RXEN RXEN0 |
# define RXCIE RXCIE0 |
# define TXCIE TXCIE0 |
# define U2X U2X0 |
# define UCSRB UCSR0B |
# define UDRE UDRE0 |
# define INT_VEC_RX SIG_USART_RECV |
# define INT_VEC_TX SIG_USART_TRANS |
#endif |
#if defined (__AVR_ATmega644P__) |
# define USR UCSR0A |
# define UCR UCSR0B |
# define UDR UDR0 |
# define UBRR UBRR0L |
# define EICR EICR0B |
# define TXEN TXEN0 |
# define RXEN RXEN0 |
# define RXCIE RXCIE0 |
# define TXCIE TXCIE0 |
# define U2X U2X0 |
# define UCSRB UCSR0B |
# define UDRE UDRE0 |
# define USR1 UCSR1A |
# define UCR1 UCSR1B |
# define INT_VEC_RX0 SIG_USART_RECV |
# define INT_VEC_TX0 SIG_USART_TRANS |
# define INT_VEC_RX1 SIG_USART1_RECV |
# define INT_VEC_TX1 SIG_USART1_TRANS |
#endif |
#endif //_UART_H |
/Microsoft Robotics Studio/FC source/V68d for MSRS/version.txt |
---|
0,0 → 1,112 |
------- |
V0.53 27.04.2007 H.Buss |
- erste öffentliche Version |
V0.53b 29.04.2007 H.Buss |
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft |
V0.53c 29.04.2007 H.Buss |
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind. |
Die angezeigten Werte waren nicht die Werte der Funke |
V0.54 01.05.2007 H.Buss |
- die Paramtersätze können jetzt vor dem Start ausgewählt werden |
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt: |
2 3 4 |
1 x 5 |
- - - |
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw. |
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt |
V0.55 14.05.2007 H.Buss |
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden |
V0.56 14.05.2007 H.Buss |
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren |
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen |
V0.57 24.05.2007 H.Buss |
- Der Höhenregler kann nun auch mittels Schalter bedient werden |
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat |
- Kompass-Einfluss dämpfen bei Neigung |
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen |
- Der Motortest vom Kopter-Tool geht jetzt |
- Man kann den Parametersätzen einen Namen geben |
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert |
V0.58 30.05.2007 H.Buss |
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist |
V0.60 17.08.2007 H.Buss |
- "Schwindel-Bug" behoben |
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft |
- Poti4 zugefügt |
- Es werden jetzt 8 Kanäle ausgewertet |
- Kamera-Servo (an J7) |
- Die Settings müssen überschrieben werden |
V0.61 - V0.63 H.Buss 27.09.2007 |
- Poti 4 und Kanal 8 werden im Menü angezeigt |
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt |
- Analog.c: Aktuell_ax korrigiert |
- auf 32 Debug-Kanäle erweitert |
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar |
- leichte Anpassungen im Gier - Geschwindigkeit und Drift |
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein |
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird |
- die PPM-Ausgänge liegen wieder an den Pins an |
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders |
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen |
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an |
- Sticksignale werden präziser ausgewertet |
- Stick-Kanäle werden ans Kopter-Tool übertragen |
- Es muss die Version V1.47 des Kopter-Tool verwendet werden |
- Die Settings werden auf Default zurückgesetzt |
- am Piepen kann man die Fehlerart unterscheiden |
1. einzelnes Piepen beim Einschalten und Kalibrieren |
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall |
3. schnelleres Intervall mindestens 1 Sek -> Akku |
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört |
V0.64 H.Buss 30.09.2007 |
- beim Gieren wurden die Achsen nicht hart genug geregelt |
V0.65a H.Buss 15.10.2007 |
- Integral im Mischer wieder integriert |
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100 |
- ACC/Gyro Abgleich auch bei HH |
V0.66a H.Buss 3.11.2007 |
- Messwertverarbeitung aus dem Analog-Interrupt entfernt |
- Analogmessung hängt jetzt am FC-Timing |
- Looping-Stick-Hysterese eingebaut |
- Looping-180°-Umschlag einstellbar |
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll |
- Lageregelung nach ACC-Sensor verbessert |
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage |
- Gyrodriftkompensation überarbeitet |
- Bug in der Gier-Stick-Berechnung behoben |
- Gyro-Messung auf 1kHz beschleunigt |
V0.67a H.Buss 16.11.2007 |
- der Hauptregler-I-Anteil wirkt jetzt nur noch auf den Winkel (ausser im HH-Mode) |
- Gyro-Acc-Abgleich jetzt wieder in jedem Zyklus |
- Feinabstimmung |
- Beim HH-Modus gab es noch Bugs |
V0.67e H.Buss 29.11.2007 |
- Parameter: Dynamic Stability und Driftfaktor eingeführt |
- Die Namen der Analogwerte werden jetzt zum Koptertool übertragen |
- Kompatibilität zum Koptertool erhöht |
V0.67f H.Buss 04.12.2007 |
- Giersteuerwert im Mischer auf Gas/2 begrenzt |
- Die Analogwerte des ACC-Sensors können dauerhaft im EEPROM gespeichert werden |
- Das Integral des Hauptreglers wird jetzt linear entladen und nicht mehr proportional |
v0.90b G.Logemann 18.12.2007 |
- serielles steuerung ('C' Kommando) - userParameter2>10 aktiviert die serielle Steuerung |
- serielle durchleitung von messages auf die 2. Serielle schnittstelle ('X' commando) |
(roboboard Erweiterung) |
/Microsoft Robotics Studio/License.txt |
---|
0,0 → 1,52 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss (Flight Control Source) |
// + Copyright (c0 12.2007 Gunter Logemann (serielle steuerung und serial tunnel im Flight Control Source sowie alle |
// + MS Robotics Studio und Roboboard bezogenen Komponenten) |
// + Nur für den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de und gunter@pccon.de) |
// + Kontakt bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen oder dei verwendung von SW Componenten fuer eigene komerzielle Projekte jeglicher art |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt und genannt werden. Fuer das Roboboard bzw. allem mit Robtics Service in verbindungstehenden |
// + Komonenten muss der Autor Gunter Logemann incl email (gunter@pccon.de) genannt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Flight control Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig. Fuer dei Software des Roboboards bedarf es einer Genemigung durch Gunter logemann (gunter@pccon.de) |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + die serielle Steuerung durch microsoft Robotics Studio, sowie die notwendigen erweiterungen in FC.c und uart.c unterliegt dem |
// + copyright von Gunter Logemann (gunter@pccon.de) |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Das Roboboard inclusive Hardware und Software unterliegt unterliegt dem |
// + copyright von Gunter Logemann (gunter@pccon.de) |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + die serielle Steuerung von externen boards (Roboboard) an der 2. Seriellen schnittstelle, sowie die notwendigen erweiterungen in |
// + FC.c und uart.c unterliegt unterliegt dem copyright von Gunter Logemann (gunter@pccon.de) |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/AssemblyInfo.cs |
---|
0,0 → 1,19 |
//------------------------------------------------------------------------------ |
// <auto-generated> |
// This code was generated by a tool. |
// Runtime Version:2.0.50727.312 |
// |
// Changes to this file may cause incorrect behavior and will be lost if |
// the code is regenerated. |
// </auto-generated> |
//------------------------------------------------------------------------------ |
using Microsoft.Dss.Core.Attributes; |
using System; |
using System.Collections.Generic; |
using interopservices = System.Runtime.InteropServices; |
[assembly: ServiceDeclaration(DssServiceDeclaration.ServiceBehavior)] |
[assembly: interopservices.ComVisible(false)] |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Control.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Mk.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Properties/Resources.Designer.cs |
---|
0,0 → 1,63 |
//------------------------------------------------------------------------------ |
// <auto-generated> |
// This code was generated by a tool. |
// Runtime Version:2.0.50727.312 |
// |
// Changes to this file may cause incorrect behavior and will be lost if |
// the code is regenerated. |
// </auto-generated> |
//------------------------------------------------------------------------------ |
namespace Robotics.RoboBoard.Properties { |
using System; |
/// <summary> |
/// A strongly-typed resource class, for looking up localized strings, etc. |
/// </summary> |
// This class was auto-generated by the StronglyTypedResourceBuilder |
// class via a tool like ResGen or Visual Studio. |
// To add or remove a member, edit your .ResX file then rerun ResGen |
// with the /str option, or rebuild your VS project. |
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] |
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] |
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |
internal class Resources { |
private static global::System.Resources.ResourceManager resourceMan; |
private static global::System.Globalization.CultureInfo resourceCulture; |
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] |
internal Resources() { |
} |
/// <summary> |
/// Returns the cached ResourceManager instance used by this class. |
/// </summary> |
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |
internal static global::System.Resources.ResourceManager ResourceManager { |
get { |
if (object.ReferenceEquals(resourceMan, null)) { |
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Robotics.RoboBoard.Properties.Resources", typeof(Resources).Assembly); |
resourceMan = temp; |
} |
return resourceMan; |
} |
} |
/// <summary> |
/// Overrides the current thread's CurrentUICulture property for all |
/// resource lookups using this strongly typed resource class. |
/// </summary> |
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |
internal static global::System.Globalization.CultureInfo Culture { |
get { |
return resourceCulture; |
} |
set { |
resourceCulture = value; |
} |
} |
} |
} |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Properties/Resources.resx |
---|
0,0 → 1,120 |
<?xml version="1.0" encoding="utf-8"?> |
<root> |
<!-- |
Microsoft ResX Schema |
Version 2.0 |
The primary goals of this format is to allow a simple XML format |
that is mostly human readable. The generation and parsing of the |
various data types are done through the TypeConverter classes |
associated with the data types. |
Example: |
... ado.net/XML headers & schema ... |
<resheader name="resmimetype">text/microsoft-resx</resheader> |
<resheader name="version">2.0</resheader> |
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> |
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> |
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> |
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> |
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> |
<value>[base64 mime encoded serialized .NET Framework object]</value> |
</data> |
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> |
<comment>This is a comment</comment> |
</data> |
There are any number of "resheader" rows that contain simple |
name/value pairs. |
Each data row contains a name, and value. The row also contains a |
type or mimetype. Type corresponds to a .NET class that support |
text/value conversion through the TypeConverter architecture. |
Classes that don't support this are serialized and stored with the |
mimetype set. |
The mimetype is used for serialized objects, and tells the |
ResXResourceReader how to depersist the object. This is currently not |
extensible. For a given mimetype the value must be set accordingly: |
Note - application/x-microsoft.net.object.binary.base64 is the format |
that the ResXResourceWriter will generate, however the reader can |
read any of the formats listed below. |
mimetype: application/x-microsoft.net.object.binary.base64 |
value : The object must be serialized with |
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter |
: and then encoded with base64 encoding. |
mimetype: application/x-microsoft.net.object.soap.base64 |
value : The object must be serialized with |
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter |
: and then encoded with base64 encoding. |
mimetype: application/x-microsoft.net.object.bytearray.base64 |
value : The object must be serialized into a byte array |
: using a System.ComponentModel.TypeConverter |
: and then encoded with base64 encoding. |
--> |
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> |
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> |
<xsd:element name="root" msdata:IsDataSet="true"> |
<xsd:complexType> |
<xsd:choice maxOccurs="unbounded"> |
<xsd:element name="metadata"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="value" type="xsd:string" minOccurs="0" /> |
</xsd:sequence> |
<xsd:attribute name="name" use="required" type="xsd:string" /> |
<xsd:attribute name="type" type="xsd:string" /> |
<xsd:attribute name="mimetype" type="xsd:string" /> |
<xsd:attribute ref="xml:space" /> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="assembly"> |
<xsd:complexType> |
<xsd:attribute name="alias" type="xsd:string" /> |
<xsd:attribute name="name" type="xsd:string" /> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="data"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> |
</xsd:sequence> |
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> |
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> |
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> |
<xsd:attribute ref="xml:space" /> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="resheader"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
</xsd:sequence> |
<xsd:attribute name="name" type="xsd:string" use="required" /> |
</xsd:complexType> |
</xsd:element> |
</xsd:choice> |
</xsd:complexType> |
</xsd:element> |
</xsd:schema> |
<resheader name="resmimetype"> |
<value>text/microsoft-resx</value> |
</resheader> |
<resheader name="version"> |
<value>2.0</value> |
</resheader> |
<resheader name="reader"> |
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
</resheader> |
<resheader name="writer"> |
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
</resheader> |
</root> |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/AssemblyInfo.cs |
---|
0,0 → 1,33 |
//------------------------------------------------------------------------------ |
// <auto-generated> |
// This code was generated by a tool. |
// Runtime Version:2.0.50727.1433 |
// |
// Changes to this file may cause incorrect behavior and will be lost if |
// the code is regenerated. |
// </auto-generated> |
//------------------------------------------------------------------------------ |
using Microsoft.Dss.Core.Attributes; |
using Microsoft.Dss.ServiceModel.Dssp; |
using System; |
using System.Collections.Generic; |
using interopservices = System.Runtime.InteropServices; |
#if NET_CF20 |
[assembly: ServiceDeclaration(DssServiceDeclaration.Proxy, SourceAssemblyKey="cf.roboboardservice.y2007.m08, version=0.0.0.0, culture=neutral, publickeytoken=7a99" + |
"181333b055f6")] |
#else |
[assembly: ServiceDeclaration(DssServiceDeclaration.Proxy, SourceAssemblyKey="roboboardservice.y2007.m08, version=0.0.0.0, culture=neutral, publickeytoken=7a99" + |
"181333b055f6")] |
#endif |
[assembly: System.Security.SecurityTransparentAttribute()] |
[assembly: System.Security.AllowPartiallyTrustedCallersAttribute()] |
[assembly: interopservices.ComVisible(true)] |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/Properties/Resources.Designer.cs |
---|
0,0 → 1,74 |
//------------------------------------------------------------------------------ |
// <auto-generated> |
// This code was generated by a tool. |
// Runtime Version:2.0.50727.42 |
// |
// Changes to this file may cause incorrect behavior and will be lost if |
// the code is regenerated. |
// </auto-generated> |
//------------------------------------------------------------------------------ |
namespace Robotics.RoboBoard.Properties { |
using System; |
/// <summary> |
/// A strongly-typed resource class, for looking up localized strings, etc. |
/// </summary> |
// This class was auto-generated by the StronglyTypedResourceBuilder |
// class via a tool like ResGen or Visual Studio. |
// To add or remove a member, edit your .ResX file then rerun ResGen |
// with the /str option, or rebuild your VS project. |
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] |
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] |
#if !URT_MINCLR |
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |
#endif |
internal class Resources { |
private static global::System.Resources.ResourceManager resourceMan; |
private static global::System.Globalization.CultureInfo resourceCulture; |
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] |
internal Resources() { |
} |
/// <summary> |
/// Returns the cached ResourceManager instance used by this class. |
/// </summary> |
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |
internal static global::System.Resources.ResourceManager ResourceManager { |
get { |
if (object.ReferenceEquals(resourceMan, null)) { |
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Robotics.RoboBoard.Properties.Resources", typeof(Resources).Assembly); |
resourceMan = temp; |
} |
return resourceMan; |
} |
} |
/// <summary> |
/// Overrides the current thread's CurrentUICulture property for all |
/// resource lookups using this strongly typed resource class. |
/// </summary> |
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |
internal static global::System.Globalization.CultureInfo Culture { |
get { |
return resourceCulture; |
} |
set { |
resourceCulture = value; |
} |
} |
/// <summary> |
/// Looks up a resource file similar to DssModel. |
/// </summary> |
internal static string DssModel { |
get { |
return ResourceManager.GetString("DssModel", resourceCulture); |
} |
} |
} |
} |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/Properties/Resources.resx |
---|
0,0 → 1,125 |
<?xml version="1.0" encoding="utf-8"?> |
<root> |
<!-- |
Microsoft ResX Schema |
Version 2.0 |
The primary goals of this format is to allow a simple XML format |
that is mostly human readable. The generation and parsing of the |
various data types are done through the TypeConverter classes |
associated with the data types. |
Example: |
... ado.net/XML headers & schema ... |
<resheader name="resmimetype">text/microsoft-resx</resheader> |
<resheader name="version">2.0</resheader> |
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> |
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> |
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> |
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> |
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> |
<value>[base64 mime encoded serialized .NET Framework object]</value> |
</data> |
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> |
<comment>This is a comment</comment> |
</data> |
There are any number of "resheader" rows that contain simple |
name/value pairs. |
Each data row contains a name, and value. The row also contains a |
type or mimetype. Type corresponds to a .NET class that support |
text/value conversion through the TypeConverter architecture. |
Classes that don't support this are serialized and stored with the |
mimetype set. |
The mimetype is used for serialized objects, and tells the |
ResXResourceReader how to depersist the object. This is currently not |
extensible. For a given mimetype the value must be set accordingly: |
Note - application/x-microsoft.net.object.binary.base64 is the format |
that the ResXResourceWriter will generate, however the reader can |
read any of the formats listed below. |
mimetype: application/x-microsoft.net.object.binary.base64 |
value : The object must be serialized with |
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter |
: and then encoded with base64 encoding. |
mimetype: application/x-microsoft.net.object.soap.base64 |
value : The object must be serialized with |
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter |
: and then encoded with base64 encoding. |
mimetype: application/x-microsoft.net.object.bytearray.base64 |
value : The object must be serialized into a byte array |
: using a System.ComponentModel.TypeConverter |
: and then encoded with base64 encoding. |
--> |
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> |
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> |
<xsd:element name="root" msdata:IsDataSet="true"> |
<xsd:complexType> |
<xsd:choice maxOccurs="unbounded"> |
<xsd:element name="metadata"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="value" type="xsd:string" minOccurs="0" /> |
</xsd:sequence> |
<xsd:attribute name="name" use="required" type="xsd:string" /> |
<xsd:attribute name="type" type="xsd:string" /> |
<xsd:attribute name="mimetype" type="xsd:string" /> |
<xsd:attribute ref="xml:space" /> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="assembly"> |
<xsd:complexType> |
<xsd:attribute name="alias" type="xsd:string" /> |
<xsd:attribute name="name" type="xsd:string" /> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="data"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> |
</xsd:sequence> |
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> |
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> |
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> |
<xsd:attribute ref="xml:space" /> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="resheader"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
</xsd:sequence> |
<xsd:attribute name="name" type="xsd:string" use="required" /> |
</xsd:complexType> |
</xsd:element> |
</xsd:choice> |
</xsd:complexType> |
</xsd:element> |
</xsd:schema> |
<resheader name="resmimetype"> |
<value>text/microsoft-resx</value> |
</resheader> |
<resheader name="version"> |
<value>2.0</value> |
</resheader> |
<resheader name="reader"> |
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
</resheader> |
<resheader name="writer"> |
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
</resheader> |
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> |
<data name="DssModel" type="System.Resources.ResXFileRef, System.Windows.Forms"> |
<value>..\Resources\DssModel.dss;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value> |
</data> |
</root> |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/Resources/DssModel.dss |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.csproj |
---|
0,0 → 1,140 |
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ProjectType>Local</ProjectType> |
<ProductVersion>8.0.50215</ProductVersion> |
<SchemaVersion>2.0</SchemaVersion> |
<ProjectGuid>{E105863D-2959-49C5-9D84-E24CDD55444F}</ProjectGuid> |
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
<ApplicationIcon> |
</ApplicationIcon> |
<AssemblyKeyContainerName> |
</AssemblyKeyContainerName> |
<AssemblyName>RoboBoardService.Y2007.M08.Proxy</AssemblyName> |
<RootNamespace>Robotics.RoboBoard</RootNamespace> |
<AssemblyOriginatorKeyFile>C:\Microsoft Robotics Studio (1.5)\samples\mrisamples.snk</AssemblyOriginatorKeyFile> |
<DefaultClientScript>JScript</DefaultClientScript> |
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> |
<DefaultTargetSchema>IE50</DefaultTargetSchema> |
<DelaySign>false</DelaySign> |
<SignAssembly>true</SignAssembly> |
<OutputType>Library</OutputType> |
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent> |
<StartupObject> |
</StartupObject> |
<FileUpgradeFlags> |
</FileUpgradeFlags> |
</PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
<OutputPath>C:\Microsoft Robotics Studio (1.5)\bin\</OutputPath> |
<AllowUnsafeBlocks>false</AllowUnsafeBlocks> |
<BaseAddress>285212672</BaseAddress> |
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow> |
<ConfigurationOverrideFile> |
</ConfigurationOverrideFile> |
<DefineConstants>DEBUG;TRACE;INSTRUMENTED;DSSPROXY</DefineConstants> |
<DocumentationFile>RoboBoardService.Y2007.M08.proxy.xml</DocumentationFile> |
<DebugSymbols>true</DebugSymbols> |
<FileAlignment>4096</FileAlignment> |
<NoStdLib>false</NoStdLib> |
<NoWarn>3003</NoWarn> |
<Optimize>false</Optimize> |
<RegisterForComInterop>false</RegisterForComInterop> |
<RemoveIntegerChecks>false</RemoveIntegerChecks> |
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> |
<WarningLevel>1</WarningLevel> |
</PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
<OutputPath>C:\Microsoft Robotics Studio (1.5)\bin\</OutputPath> |
<AllowUnsafeBlocks>false</AllowUnsafeBlocks> |
<BaseAddress>285212672</BaseAddress> |
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow> |
<ConfigurationOverrideFile> |
</ConfigurationOverrideFile> |
<DefineConstants>TRACE;INSTRUMENTED;DSSPROXY</DefineConstants> |
<DocumentationFile>RoboBoardService.Y2007.M08.proxy.xml</DocumentationFile> |
<DebugSymbols>true</DebugSymbols> |
<DebugType>pdbonly</DebugType> |
<FileAlignment>4096</FileAlignment> |
<NoStdLib>false</NoStdLib> |
<NoWarn>3003</NoWarn> |
<Optimize>false</Optimize> |
<RegisterForComInterop>false</RegisterForComInterop> |
<RemoveIntegerChecks>false</RemoveIntegerChecks> |
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> |
<WarningLevel>1</WarningLevel> |
</PropertyGroup> |
<ItemGroup> |
<Reference Include="mscorlib"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="Ccr.Core"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="DssBase"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="System.Windows.Forms"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="DssRuntime.Proxy"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="DssRuntime"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="System"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="System.Drawing"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="Ccr.Adapters.WinForms"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="System.Xml"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
</ItemGroup> |
<ItemGroup> |
<Compile Include="AssemblyInfo.cs" /> |
<Compile Include="Robotics.RoboBoard.Proxy.RoboBoardTypes.cs" /> |
<Compile Include="Properties\Resources.Designer.cs"> |
<AutoGen>True</AutoGen> |
<DesignTime>True</DesignTime> |
<DependentUpon>Resources.resx</DependentUpon> |
</Compile> |
<AppDesigner Include="Properties" /> |
</ItemGroup> |
<ItemGroup> |
<EmbeddedResource Include="Resources\DssModel.dss" /> |
</ItemGroup> |
<ItemGroup> |
<EmbeddedResource Include="Properties\Resources.resx"> |
<SubType>Designer</SubType> |
<Generator>ResXFileCodeGenerator</Generator> |
<LastGenOutput>Resources.Designer.cs</LastGenOutput> |
</EmbeddedResource> |
</ItemGroup> |
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> |
<PropertyGroup Condition="'$(DelaySign)'!=''"> |
<ProxyDelaySign>/delaysign+</ProxyDelaySign> |
</PropertyGroup> |
<PropertyGroup> |
<PreBuildEvent> |
</PreBuildEvent> |
<PostBuildEvent></PostBuildEvent> |
</PropertyGroup> |
</Project> |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.csproj.user |
---|
0,0 → 1,17 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ReferencePath>c:\microsoft robotics studio (1.5)\bin;c:\windows\microsoft.net\framework\v2.0.50727</ReferencePath> |
</PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
<StartWorkingDirectory>c:\microsoft robotics studio (1.5)</StartWorkingDirectory> |
<StartAction>Program</StartAction> |
<StartProgram>c:\microsoft robotics studio (1.5)\bin\dsshost.exe</StartProgram> |
<StartArguments>-port:50000 -tcpport:50001 -manifest:"../mikrokopter/svc/Projects/Microsoft%20Robotics%20Studio/MSRS%20Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.manifest.xml"</StartArguments> |
</PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
<StartWorkingDirectory>c:\microsoft robotics studio (1.5)</StartWorkingDirectory> |
<StartAction>Program</StartAction> |
<StartProgram>c:\microsoft robotics studio (1.5)\bin\dsshost.exe</StartProgram> |
<StartArguments>-port:50000 -tcpport:50001 -manifest:"../mikrokopter/svc/Projects/Microsoft%20Robotics%20Studio/MSRS%20Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.manifest.xml"</StartArguments> |
</PropertyGroup> |
</Project> |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.sln |
---|
0,0 → 1,19 |
Microsoft Visual Studio Solution File, Format Version 9.00 |
# Visual Studio 2005 |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoboBoardService.Y2007.M08.proxy", "RoboBoardService.Y2007.M08.proxy.csproj", "{E105863D-2959-49C5-9D84-E24CDD55444F}" |
EndProject |
Global |
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
Debug|Any CPU = Debug|Any CPU |
Release|Any CPU = Release|Any CPU |
EndGlobalSection |
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
{E105863D-2959-49C5-9D84-E24CDD55444F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
{E105863D-2959-49C5-9D84-E24CDD55444F}.Debug|Any CPU.Build.0 = Debug|Any CPU |
{E105863D-2959-49C5-9D84-E24CDD55444F}.Release|Any CPU.ActiveCfg = Release|Any CPU |
{E105863D-2959-49C5-9D84-E24CDD55444F}.Release|Any CPU.Build.0 = Release|Any CPU |
EndGlobalSection |
GlobalSection(SolutionProperties) = preSolution |
HideSolutionNode = FALSE |
EndGlobalSection |
EndGlobal |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/RoboBoardService.Y2007.M08.proxy.xml |
---|
0,0 → 1,760 |
<?xml version="1.0"?> |
<doc> |
<assembly> |
<name>RoboBoardService.Y2007.M08.Proxy</name> |
</assembly> |
<members> |
<member name="T:Robotics.RoboBoard.Proxy.Contract"> |
<summary> |
RoboBoard Contract |
</summary> |
</member> |
<member name="F:Robotics.RoboBoard.Proxy.Contract.Identifier"> |
The Unique Contract Identifier for the RoboBoard service |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Contract.ServiceModel"> |
The Dss Service dssModel Contract(s) |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Contract.CreateService(Microsoft.Dss.Services.Constructor.ConstructorPort,Microsoft.Dss.ServiceModel.Dssp.PartnerType[])"> |
<summary> |
Creates an instance of the service associated with this contract |
</summary> |
<param name="contructorServicePort">Contractor Service that will create the instance</param> |
<param name="partners">Optional list of service partners for new service instance</param> |
<returns>Result PortSet for retrieving service creation response</returns> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Contract.CreateService(Microsoft.Dss.Services.Constructor.ConstructorPort)"> |
<summary> |
Creates an instance of the service associated with this contract |
</summary> |
<param name="contructorServicePort">Contractor Service that will create the instance</param> |
<returns>Result PortSet for retrieving service creation response</returns> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.RoboBoardState"> |
<summary> |
Robo Board State |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardState.CopyTo(Microsoft.Dss.Core.IDssSerializable)"> |
<summary> |
Copy To Robo Board State |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardState.Clone"> |
<summary> |
Clone Robo Board State |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardState.Serialize(System.IO.BinaryWriter)"> |
<summary> |
Serialize Serialize |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardState.Deserialize(System.IO.BinaryReader)"> |
<summary> |
Deserialize Deserialize |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.RoboBoardState.ComPort"> |
<summary> |
Com Port |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.SetComPortRequest"> |
<summary> |
Set Com Port Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetComPortRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)"> |
<summary> |
Copy To Set Com Port Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetComPortRequest.Clone"> |
<summary> |
Clone Set Com Port Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetComPortRequest.Serialize(System.IO.BinaryWriter)"> |
<summary> |
Serialize Serialize |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetComPortRequest.Deserialize(System.IO.BinaryReader)"> |
<summary> |
Deserialize Deserialize |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.SetComPortRequest.PortName"> |
<summary> |
Port Name |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.ReceiveCommandRequest"> |
<summary> |
Receive Command Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommandRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)"> |
<summary> |
Copy To Receive Command Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommandRequest.Clone"> |
<summary> |
Clone Receive Command Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommandRequest.Serialize(System.IO.BinaryWriter)"> |
<summary> |
Serialize Serialize |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommandRequest.Deserialize(System.IO.BinaryReader)"> |
<summary> |
Deserialize Deserialize |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.ReceiveCommandRequest.Command"> |
<summary> |
Command |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.SendCommandRequest"> |
<summary> |
Send Command Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SendCommandRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)"> |
<summary> |
Copy To Send Command Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SendCommandRequest.Clone"> |
<summary> |
Clone Send Command Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SendCommandRequest.Serialize(System.IO.BinaryWriter)"> |
<summary> |
Serialize Serialize |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SendCommandRequest.Deserialize(System.IO.BinaryReader)"> |
<summary> |
Deserialize Deserialize |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.SendCommandRequest.Command"> |
<summary> |
Command |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.LevelRequest"> |
<summary> |
Level Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.LevelRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)"> |
<summary> |
Copy To Level Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.LevelRequest.Clone"> |
<summary> |
Clone Level Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.LevelRequest.Serialize(System.IO.BinaryWriter)"> |
<summary> |
Serialize Serialize |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.LevelRequest.Deserialize(System.IO.BinaryReader)"> |
<summary> |
Deserialize Deserialize |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.LevelRequest.Roll"> |
<summary> |
Roll |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.LevelRequest.Nick"> |
<summary> |
Nick |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.ControlRequest"> |
<summary> |
Control Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ControlRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)"> |
<summary> |
Copy To Control Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ControlRequest.Clone"> |
<summary> |
Clone Control Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ControlRequest.Serialize(System.IO.BinaryWriter)"> |
<summary> |
Serialize Serialize |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ControlRequest.Deserialize(System.IO.BinaryReader)"> |
<summary> |
Deserialize Deserialize |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.ControlRequest.Roll"> |
<summary> |
Roll |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.ControlRequest.Nick"> |
<summary> |
Nick |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.SetAltituteRequest"> |
<summary> |
Set Altitute Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetAltituteRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)"> |
<summary> |
Copy To Set Altitute Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetAltituteRequest.Clone"> |
<summary> |
Clone Set Altitute Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetAltituteRequest.Serialize(System.IO.BinaryWriter)"> |
<summary> |
Serialize Serialize |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetAltituteRequest.Deserialize(System.IO.BinaryReader)"> |
<summary> |
Deserialize Deserialize |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.SetAltituteRequest.Altitute"> |
<summary> |
Altitute |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.SetGasRequest"> |
<summary> |
Set Gas Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGasRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)"> |
<summary> |
Copy To Set Gas Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGasRequest.Clone"> |
<summary> |
Clone Set Gas Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGasRequest.Serialize(System.IO.BinaryWriter)"> |
<summary> |
Serialize Serialize |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGasRequest.Deserialize(System.IO.BinaryReader)"> |
<summary> |
Deserialize Deserialize |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.SetGasRequest.Gas"> |
<summary> |
Gas |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.SetGierRequest"> |
<summary> |
Set Gier Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGierRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)"> |
<summary> |
Copy To Set Gier Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGierRequest.Clone"> |
<summary> |
Clone Set Gier Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGierRequest.Serialize(System.IO.BinaryWriter)"> |
<summary> |
Serialize Serialize |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGierRequest.Deserialize(System.IO.BinaryReader)"> |
<summary> |
Deserialize Deserialize |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.SetGierRequest.Gier"> |
<summary> |
Gier |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.IncrementTickRequest"> |
<summary> |
Increment Tick Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.IncrementTickRequest.CopyTo(Microsoft.Dss.Core.IDssSerializable)"> |
<summary> |
Copy To Increment Tick Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.IncrementTickRequest.Clone"> |
<summary> |
Clone Increment Tick Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.IncrementTickRequest.Serialize(System.IO.BinaryWriter)"> |
<summary> |
Serialize Serialize |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.IncrementTickRequest.Deserialize(System.IO.BinaryReader)"> |
<summary> |
Deserialize Deserialize |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Proxy.IncrementTickRequest.Command"> |
<summary> |
Command |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.RoboBoardOperations"> |
<summary> |
Robo Board Operations |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.DsspDefaultLookup"> |
<summary> |
Required Lookup request body type |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.DsspDefaultLookup(Microsoft.Dss.ServiceModel.Dssp.LookupRequestType)"> |
<summary> |
Post Dssp Default Lookup and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.DsspDefaultDrop"> |
<summary> |
A request to drop the service. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.DsspDefaultDrop(Microsoft.Dss.ServiceModel.Dssp.DropRequestType)"> |
<summary> |
Post Dssp Default Drop and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Get"> |
<summary> |
Required Get body type |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType)"> |
<summary> |
Post Get and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.HttpGet"> |
<summary> |
DsspHttp Get request body |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.HttpGet(Microsoft.Dss.Core.DsspHttp.HttpGetRequestType)"> |
<summary> |
Post Http Get and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Replace"> |
<summary> |
Robo Board State |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Replace(Robotics.RoboBoard.Proxy.RoboBoardState)"> |
<summary> |
Post Replace and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetComPort"> |
<summary> |
Set Com Port Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetComPort(Robotics.RoboBoard.Proxy.SetComPortRequest)"> |
<summary> |
Post Set Com Port and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.ReceiveCommand"> |
<summary> |
Receive Command Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.ReceiveCommand(Robotics.RoboBoard.Proxy.ReceiveCommandRequest)"> |
<summary> |
Post Receive Command and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SendCommand"> |
<summary> |
Send Command Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SendCommand(Robotics.RoboBoard.Proxy.SendCommandRequest)"> |
<summary> |
Post Send Command and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Level"> |
<summary> |
Level Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Level(Robotics.RoboBoard.Proxy.LevelRequest)"> |
<summary> |
Post Level and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Control"> |
<summary> |
Control Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Control(Robotics.RoboBoard.Proxy.ControlRequest)"> |
<summary> |
Post Control and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetAltitute"> |
<summary> |
Set Altitute Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetAltitute(Robotics.RoboBoard.Proxy.SetAltituteRequest)"> |
<summary> |
Post Set Altitute and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetGas"> |
<summary> |
Set Gas Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetGas(Robotics.RoboBoard.Proxy.SetGasRequest)"> |
<summary> |
Post Set Gas and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetGier"> |
<summary> |
Set Gier Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.SetGier(Robotics.RoboBoard.Proxy.SetGierRequest)"> |
<summary> |
Post Set Gier and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.IncrementTick"> |
<summary> |
Increment Tick Request |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.IncrementTick(Robotics.RoboBoard.Proxy.IncrementTickRequest)"> |
<summary> |
Post Increment Tick and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Subscribe(Microsoft.Ccr.Core.IPort)"> |
<summary> |
Post Subscribe and return the response port. |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.RoboBoardOperations.Subscribe(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType,Microsoft.Ccr.Core.IPort)"> |
<summary> |
Post Subscribe and return the response port. |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.Get"> |
<summary> |
Get |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Get.#ctor"> |
<summary> |
Get |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Get.#ctor(Microsoft.Dss.ServiceModel.Dssp.GetRequestType)"> |
<summary> |
Get |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Get.#ctor(Microsoft.Dss.ServiceModel.Dssp.GetRequestType,Microsoft.Ccr.Core.PortSet{Robotics.RoboBoard.Proxy.RoboBoardState,W3C.Soap.Fault})"> |
<summary> |
Get |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.Replace"> |
<summary> |
Replace |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Replace.#ctor"> |
<summary> |
Replace |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Replace.#ctor(Robotics.RoboBoard.Proxy.RoboBoardState)"> |
<summary> |
Replace |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Replace.#ctor(Robotics.RoboBoard.Proxy.RoboBoardState,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultReplaceResponseType,W3C.Soap.Fault})"> |
<summary> |
Replace |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.SetComPort"> |
<summary> |
Set Com Port |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetComPort.#ctor"> |
<summary> |
Set Com Port |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetComPort.#ctor(Robotics.RoboBoard.Proxy.SetComPortRequest)"> |
<summary> |
Set Com Port |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetComPort.#ctor(Robotics.RoboBoard.Proxy.SetComPortRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})"> |
<summary> |
Set Com Port |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.ReceiveCommand"> |
<summary> |
Receive Command |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommand.#ctor"> |
<summary> |
Receive Command |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommand.#ctor(Robotics.RoboBoard.Proxy.ReceiveCommandRequest)"> |
<summary> |
Receive Command |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.ReceiveCommand.#ctor(Robotics.RoboBoard.Proxy.ReceiveCommandRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})"> |
<summary> |
Receive Command |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.SendCommand"> |
<summary> |
Send Command |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SendCommand.#ctor"> |
<summary> |
Send Command |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SendCommand.#ctor(Robotics.RoboBoard.Proxy.SendCommandRequest)"> |
<summary> |
Send Command |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SendCommand.#ctor(Robotics.RoboBoard.Proxy.SendCommandRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})"> |
<summary> |
Send Command |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.Level"> |
<summary> |
Level |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Level.#ctor"> |
<summary> |
Level |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Level.#ctor(Robotics.RoboBoard.Proxy.LevelRequest)"> |
<summary> |
Level |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Level.#ctor(Robotics.RoboBoard.Proxy.LevelRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})"> |
<summary> |
Level |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.Control"> |
<summary> |
Control |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Control.#ctor"> |
<summary> |
Control |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Control.#ctor(Robotics.RoboBoard.Proxy.ControlRequest)"> |
<summary> |
Control |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Control.#ctor(Robotics.RoboBoard.Proxy.ControlRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})"> |
<summary> |
Control |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.SetAltitute"> |
<summary> |
Set Altitute |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetAltitute.#ctor"> |
<summary> |
Set Altitute |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetAltitute.#ctor(Robotics.RoboBoard.Proxy.SetAltituteRequest)"> |
<summary> |
Set Altitute |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetAltitute.#ctor(Robotics.RoboBoard.Proxy.SetAltituteRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})"> |
<summary> |
Set Altitute |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.SetGas"> |
<summary> |
Set Gas |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGas.#ctor"> |
<summary> |
Set Gas |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGas.#ctor(Robotics.RoboBoard.Proxy.SetGasRequest)"> |
<summary> |
Set Gas |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGas.#ctor(Robotics.RoboBoard.Proxy.SetGasRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})"> |
<summary> |
Set Gas |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.SetGier"> |
<summary> |
Set Gier |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGier.#ctor"> |
<summary> |
Set Gier |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGier.#ctor(Robotics.RoboBoard.Proxy.SetGierRequest)"> |
<summary> |
Set Gier |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.SetGier.#ctor(Robotics.RoboBoard.Proxy.SetGierRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})"> |
<summary> |
Set Gier |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.IncrementTick"> |
<summary> |
Increment Tick |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.IncrementTick.#ctor"> |
<summary> |
Increment Tick |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.IncrementTick.#ctor(Robotics.RoboBoard.Proxy.IncrementTickRequest)"> |
<summary> |
Increment Tick |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.IncrementTick.#ctor(Robotics.RoboBoard.Proxy.IncrementTickRequest,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault})"> |
<summary> |
Increment Tick |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Proxy.Subscribe"> |
<summary> |
Subscribe |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Subscribe.#ctor"> |
<summary> |
Subscribe |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Subscribe.#ctor(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType)"> |
<summary> |
Subscribe |
</summary> |
</member> |
<member name="M:Robotics.RoboBoard.Proxy.Subscribe.#ctor(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType,Microsoft.Ccr.Core.PortSet{Microsoft.Dss.ServiceModel.Dssp.SubscribeResponseType,W3C.Soap.Fault})"> |
<summary> |
Subscribe |
</summary> |
</member> |
<member name="T:Robotics.RoboBoard.Properties.Resources"> |
<summary> |
A strongly-typed resource class, for looking up localized strings, etc. |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Properties.Resources.ResourceManager"> |
<summary> |
Returns the cached ResourceManager instance used by this class. |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Properties.Resources.Culture"> |
<summary> |
Overrides the current thread's CurrentUICulture property for all |
resource lookups using this strongly typed resource class. |
</summary> |
</member> |
<member name="P:Robotics.RoboBoard.Properties.Resources.DssModel"> |
<summary> |
Looks up a resource file similar to DssModel. |
</summary> |
</member> |
</members> |
</doc> |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/Robotics.RoboBoard.Proxy.RoboBoardTypes.cs |
---|
0,0 → 1,1638 |
//------------------------------------------------------------------------------ |
// <auto-generated> |
// This code was generated by a tool. |
// Runtime Version:2.0.50727.1433 |
// |
// Changes to this file may cause incorrect behavior and will be lost if |
// the code is regenerated. |
// </auto-generated> |
//------------------------------------------------------------------------------ |
using Microsoft.Ccr.Core; |
using Microsoft.Dss.Core; |
using Microsoft.Dss.Core.Attributes; |
using Microsoft.Dss.ServiceModel.Dssp; |
using System; |
using System.Collections.Generic; |
using System.Xml.Serialization; |
using W3C.Soap; |
using compression = System.IO.Compression; |
using constructor = Microsoft.Dss.Services.Constructor; |
using contractmanager = Microsoft.Dss.Services.ContractManager; |
using contractmodel = Microsoft.Dss.Services.ContractModel; |
using dssphttp = Microsoft.Dss.Core.DsspHttp; |
using io = System.IO; |
using pxroboboard = Robotics.RoboBoard.Proxy; |
using reflection = System.Reflection; |
namespace Robotics.RoboBoard.Proxy |
{ |
/// <summary> |
/// RoboBoard Contract |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public sealed class Contract |
{ |
/// The Unique Contract Identifier for the RoboBoard service |
public const String Identifier = "http://schemas.tempuri.org/2007/08/roboboardservice.html"; |
/// The Dss Service dssModel Contract(s) |
public static List<contractmodel.ServiceSummary> ServiceModel() |
{ |
contractmanager.ServiceSummaryLoader loader = new contractmanager.ServiceSummaryLoader(); |
return loader.GetServiceSummaries(typeof(Contract).Assembly); |
} |
/// <summary> |
/// Creates an instance of the service associated with this contract |
/// </summary> |
/// <param name="contructorServicePort">Contractor Service that will create the instance</param> |
/// <param name="partners">Optional list of service partners for new service instance</param> |
/// <returns>Result PortSet for retrieving service creation response</returns> |
public static DsspResponsePort<CreateResponse> CreateService(constructor.ConstructorPort contructorServicePort, params PartnerType[] partners) |
{ |
DsspResponsePort<CreateResponse> result = new DsspResponsePort<CreateResponse>(); |
ServiceInfoType si = new ServiceInfoType(Contract.Identifier, null); |
if (partners != null) |
{ |
si.PartnerList = new List<PartnerType>(partners); |
} |
Microsoft.Dss.Services.Constructor.Create create = |
new Microsoft.Dss.Services.Constructor.Create(si, result); |
contructorServicePort.Post(create); |
return result; |
} |
/// <summary> |
/// Creates an instance of the service associated with this contract |
/// </summary> |
/// <param name="contructorServicePort">Contractor Service that will create the instance</param> |
/// <returns>Result PortSet for retrieving service creation response</returns> |
public static DsspResponsePort<CreateResponse> CreateService(constructor.ConstructorPort contructorServicePort) |
{ |
return Contract.CreateService(contructorServicePort, null); |
} |
} |
/// <summary> |
/// Robo Board State |
/// </summary> |
[DataContract()] |
[XmlRootAttribute("RoboBoardState", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")] |
public class RoboBoardState : ICloneable, IDssSerializable |
{ |
private String _comPort; |
/// <summary> |
/// Com Port |
/// </summary> |
[DataMember()] |
public String ComPort |
{ |
get |
{ |
return this._comPort; |
} |
set |
{ |
this._comPort = value; |
} |
} |
/// <summary> |
/// Copy To Robo Board State |
/// </summary> |
public virtual void CopyTo(IDssSerializable target) |
{ |
RoboBoardState typedTarget = target as RoboBoardState; |
if (typedTarget == null) |
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName); |
typedTarget.ComPort = this.ComPort; |
} |
/// <summary> |
/// Clone Robo Board State |
/// </summary> |
public virtual object Clone() |
{ |
RoboBoardState target = new RoboBoardState(); |
target.ComPort = this.ComPort; |
return target; |
} |
/// <summary> |
/// Serialize Serialize |
/// </summary> |
public virtual void Serialize(System.IO.BinaryWriter writer) |
{ |
if (ComPort == null) writer.Write((byte)0); |
else |
{ |
// null flag |
writer.Write((byte)1); |
writer.Write(ComPort); |
} |
} |
/// <summary> |
/// Deserialize Deserialize |
/// </summary> |
public virtual object Deserialize(System.IO.BinaryReader reader) |
{ |
if (reader.ReadByte() == 0) {} |
else |
{ |
ComPort = reader.ReadString(); |
} //nullable |
return this; |
} |
} |
/// <summary> |
/// Set Com Port Request |
/// </summary> |
[DataContract()] |
[XmlRootAttribute("SetComPortRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")] |
public class SetComPortRequest : ICloneable, IDssSerializable |
{ |
private String _portName; |
/// <summary> |
/// Port Name |
/// </summary> |
[DataMember()] |
public String PortName |
{ |
get |
{ |
return this._portName; |
} |
set |
{ |
this._portName = value; |
} |
} |
/// <summary> |
/// Copy To Set Com Port Request |
/// </summary> |
public virtual void CopyTo(IDssSerializable target) |
{ |
SetComPortRequest typedTarget = target as SetComPortRequest; |
if (typedTarget == null) |
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName); |
typedTarget.PortName = this.PortName; |
} |
/// <summary> |
/// Clone Set Com Port Request |
/// </summary> |
public virtual object Clone() |
{ |
SetComPortRequest target = new SetComPortRequest(); |
target.PortName = this.PortName; |
return target; |
} |
/// <summary> |
/// Serialize Serialize |
/// </summary> |
public virtual void Serialize(System.IO.BinaryWriter writer) |
{ |
if (PortName == null) writer.Write((byte)0); |
else |
{ |
// null flag |
writer.Write((byte)1); |
writer.Write(PortName); |
} |
} |
/// <summary> |
/// Deserialize Deserialize |
/// </summary> |
public virtual object Deserialize(System.IO.BinaryReader reader) |
{ |
if (reader.ReadByte() == 0) {} |
else |
{ |
PortName = reader.ReadString(); |
} //nullable |
return this; |
} |
} |
/// <summary> |
/// Receive Command Request |
/// </summary> |
[DataContract()] |
[XmlRootAttribute("ReceiveCommandRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")] |
public class ReceiveCommandRequest : ICloneable, IDssSerializable |
{ |
private String _command; |
/// <summary> |
/// Command |
/// </summary> |
[DataMember()] |
public String Command |
{ |
get |
{ |
return this._command; |
} |
set |
{ |
this._command = value; |
} |
} |
/// <summary> |
/// Copy To Receive Command Request |
/// </summary> |
public virtual void CopyTo(IDssSerializable target) |
{ |
ReceiveCommandRequest typedTarget = target as ReceiveCommandRequest; |
if (typedTarget == null) |
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName); |
typedTarget.Command = this.Command; |
} |
/// <summary> |
/// Clone Receive Command Request |
/// </summary> |
public virtual object Clone() |
{ |
ReceiveCommandRequest target = new ReceiveCommandRequest(); |
target.Command = this.Command; |
return target; |
} |
/// <summary> |
/// Serialize Serialize |
/// </summary> |
public virtual void Serialize(System.IO.BinaryWriter writer) |
{ |
if (Command == null) writer.Write((byte)0); |
else |
{ |
// null flag |
writer.Write((byte)1); |
writer.Write(Command); |
} |
} |
/// <summary> |
/// Deserialize Deserialize |
/// </summary> |
public virtual object Deserialize(System.IO.BinaryReader reader) |
{ |
if (reader.ReadByte() == 0) {} |
else |
{ |
Command = reader.ReadString(); |
} //nullable |
return this; |
} |
} |
/// <summary> |
/// Send Command Request |
/// </summary> |
[DataContract()] |
[XmlRootAttribute("SendCommandRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")] |
public class SendCommandRequest : ICloneable, IDssSerializable |
{ |
private String _command; |
/// <summary> |
/// Command |
/// </summary> |
[DataMember()] |
public String Command |
{ |
get |
{ |
return this._command; |
} |
set |
{ |
this._command = value; |
} |
} |
/// <summary> |
/// Copy To Send Command Request |
/// </summary> |
public virtual void CopyTo(IDssSerializable target) |
{ |
SendCommandRequest typedTarget = target as SendCommandRequest; |
if (typedTarget == null) |
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName); |
typedTarget.Command = this.Command; |
} |
/// <summary> |
/// Clone Send Command Request |
/// </summary> |
public virtual object Clone() |
{ |
SendCommandRequest target = new SendCommandRequest(); |
target.Command = this.Command; |
return target; |
} |
/// <summary> |
/// Serialize Serialize |
/// </summary> |
public virtual void Serialize(System.IO.BinaryWriter writer) |
{ |
if (Command == null) writer.Write((byte)0); |
else |
{ |
// null flag |
writer.Write((byte)1); |
writer.Write(Command); |
} |
} |
/// <summary> |
/// Deserialize Deserialize |
/// </summary> |
public virtual object Deserialize(System.IO.BinaryReader reader) |
{ |
if (reader.ReadByte() == 0) {} |
else |
{ |
Command = reader.ReadString(); |
} //nullable |
return this; |
} |
} |
/// <summary> |
/// Level Request |
/// </summary> |
[DataContract()] |
[XmlRootAttribute("LevelRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")] |
public class LevelRequest : ICloneable, IDssSerializable |
{ |
private Int32 _roll; |
private Int32 _nick; |
/// <summary> |
/// Roll |
/// </summary> |
[DataMember()] |
public Int32 Roll |
{ |
get |
{ |
return this._roll; |
} |
set |
{ |
this._roll = value; |
} |
} |
/// <summary> |
/// Nick |
/// </summary> |
[DataMember()] |
public Int32 Nick |
{ |
get |
{ |
return this._nick; |
} |
set |
{ |
this._nick = value; |
} |
} |
/// <summary> |
/// Copy To Level Request |
/// </summary> |
public virtual void CopyTo(IDssSerializable target) |
{ |
LevelRequest typedTarget = target as LevelRequest; |
if (typedTarget == null) |
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName); |
typedTarget.Roll = this.Roll; |
typedTarget.Nick = this.Nick; |
} |
/// <summary> |
/// Clone Level Request |
/// </summary> |
public virtual object Clone() |
{ |
LevelRequest target = new LevelRequest(); |
target.Roll = this.Roll; |
target.Nick = this.Nick; |
return target; |
} |
/// <summary> |
/// Serialize Serialize |
/// </summary> |
public virtual void Serialize(System.IO.BinaryWriter writer) |
{ |
writer.Write(Roll); |
writer.Write(Nick); |
} |
/// <summary> |
/// Deserialize Deserialize |
/// </summary> |
public virtual object Deserialize(System.IO.BinaryReader reader) |
{ |
Roll = reader.ReadInt32(); |
Nick = reader.ReadInt32(); |
return this; |
} |
} |
/// <summary> |
/// Control Request |
/// </summary> |
[DataContract()] |
[XmlRootAttribute("ControlRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")] |
public class ControlRequest : ICloneable, IDssSerializable |
{ |
private Single _roll; |
private Single _nick; |
/// <summary> |
/// Roll |
/// </summary> |
[DataMember()] |
public Single Roll |
{ |
get |
{ |
return this._roll; |
} |
set |
{ |
this._roll = value; |
} |
} |
/// <summary> |
/// Nick |
/// </summary> |
[DataMember()] |
public Single Nick |
{ |
get |
{ |
return this._nick; |
} |
set |
{ |
this._nick = value; |
} |
} |
/// <summary> |
/// Copy To Control Request |
/// </summary> |
public virtual void CopyTo(IDssSerializable target) |
{ |
ControlRequest typedTarget = target as ControlRequest; |
if (typedTarget == null) |
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName); |
typedTarget.Roll = this.Roll; |
typedTarget.Nick = this.Nick; |
} |
/// <summary> |
/// Clone Control Request |
/// </summary> |
public virtual object Clone() |
{ |
ControlRequest target = new ControlRequest(); |
target.Roll = this.Roll; |
target.Nick = this.Nick; |
return target; |
} |
/// <summary> |
/// Serialize Serialize |
/// </summary> |
public virtual void Serialize(System.IO.BinaryWriter writer) |
{ |
writer.Write(Roll); |
writer.Write(Nick); |
} |
/// <summary> |
/// Deserialize Deserialize |
/// </summary> |
public virtual object Deserialize(System.IO.BinaryReader reader) |
{ |
Roll = reader.ReadSingle(); |
Nick = reader.ReadSingle(); |
return this; |
} |
} |
/// <summary> |
/// Set Altitute Request |
/// </summary> |
[DataContract()] |
[XmlRootAttribute("SetAltituteRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")] |
public class SetAltituteRequest : ICloneable, IDssSerializable |
{ |
private Single _altitute; |
/// <summary> |
/// Altitute |
/// </summary> |
[DataMember()] |
public Single Altitute |
{ |
get |
{ |
return this._altitute; |
} |
set |
{ |
this._altitute = value; |
} |
} |
/// <summary> |
/// Copy To Set Altitute Request |
/// </summary> |
public virtual void CopyTo(IDssSerializable target) |
{ |
SetAltituteRequest typedTarget = target as SetAltituteRequest; |
if (typedTarget == null) |
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName); |
typedTarget.Altitute = this.Altitute; |
} |
/// <summary> |
/// Clone Set Altitute Request |
/// </summary> |
public virtual object Clone() |
{ |
SetAltituteRequest target = new SetAltituteRequest(); |
target.Altitute = this.Altitute; |
return target; |
} |
/// <summary> |
/// Serialize Serialize |
/// </summary> |
public virtual void Serialize(System.IO.BinaryWriter writer) |
{ |
writer.Write(Altitute); |
} |
/// <summary> |
/// Deserialize Deserialize |
/// </summary> |
public virtual object Deserialize(System.IO.BinaryReader reader) |
{ |
Altitute = reader.ReadSingle(); |
return this; |
} |
} |
/// <summary> |
/// Set Gas Request |
/// </summary> |
[DataContract()] |
[XmlRootAttribute("SetGasRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")] |
public class SetGasRequest : ICloneable, IDssSerializable |
{ |
private Single _gas; |
/// <summary> |
/// Gas |
/// </summary> |
[DataMember()] |
public Single Gas |
{ |
get |
{ |
return this._gas; |
} |
set |
{ |
this._gas = value; |
} |
} |
/// <summary> |
/// Copy To Set Gas Request |
/// </summary> |
public virtual void CopyTo(IDssSerializable target) |
{ |
SetGasRequest typedTarget = target as SetGasRequest; |
if (typedTarget == null) |
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName); |
typedTarget.Gas = this.Gas; |
} |
/// <summary> |
/// Clone Set Gas Request |
/// </summary> |
public virtual object Clone() |
{ |
SetGasRequest target = new SetGasRequest(); |
target.Gas = this.Gas; |
return target; |
} |
/// <summary> |
/// Serialize Serialize |
/// </summary> |
public virtual void Serialize(System.IO.BinaryWriter writer) |
{ |
writer.Write(Gas); |
} |
/// <summary> |
/// Deserialize Deserialize |
/// </summary> |
public virtual object Deserialize(System.IO.BinaryReader reader) |
{ |
Gas = reader.ReadSingle(); |
return this; |
} |
} |
/// <summary> |
/// Set Gier Request |
/// </summary> |
[DataContract()] |
[XmlRootAttribute("SetGierRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")] |
public class SetGierRequest : ICloneable, IDssSerializable |
{ |
private Single _gier; |
/// <summary> |
/// Gier |
/// </summary> |
[DataMember()] |
public Single Gier |
{ |
get |
{ |
return this._gier; |
} |
set |
{ |
this._gier = value; |
} |
} |
/// <summary> |
/// Copy To Set Gier Request |
/// </summary> |
public virtual void CopyTo(IDssSerializable target) |
{ |
SetGierRequest typedTarget = target as SetGierRequest; |
if (typedTarget == null) |
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName); |
typedTarget.Gier = this.Gier; |
} |
/// <summary> |
/// Clone Set Gier Request |
/// </summary> |
public virtual object Clone() |
{ |
SetGierRequest target = new SetGierRequest(); |
target.Gier = this.Gier; |
return target; |
} |
/// <summary> |
/// Serialize Serialize |
/// </summary> |
public virtual void Serialize(System.IO.BinaryWriter writer) |
{ |
writer.Write(Gier); |
} |
/// <summary> |
/// Deserialize Deserialize |
/// </summary> |
public virtual object Deserialize(System.IO.BinaryReader reader) |
{ |
Gier = reader.ReadSingle(); |
return this; |
} |
} |
/// <summary> |
/// Increment Tick Request |
/// </summary> |
[DataContract()] |
[XmlRootAttribute("IncrementTickRequest", Namespace="http://schemas.tempuri.org/2007/08/roboboardservice.html")] |
public class IncrementTickRequest : ICloneable, IDssSerializable |
{ |
private String _command; |
/// <summary> |
/// Command |
/// </summary> |
[DataMember()] |
public String Command |
{ |
get |
{ |
return this._command; |
} |
set |
{ |
this._command = value; |
} |
} |
/// <summary> |
/// Copy To Increment Tick Request |
/// </summary> |
public virtual void CopyTo(IDssSerializable target) |
{ |
IncrementTickRequest typedTarget = target as IncrementTickRequest; |
if (typedTarget == null) |
throw new ArgumentException("CopyTo({0}) requires type {0}", this.GetType().FullName); |
typedTarget.Command = this.Command; |
} |
/// <summary> |
/// Clone Increment Tick Request |
/// </summary> |
public virtual object Clone() |
{ |
IncrementTickRequest target = new IncrementTickRequest(); |
target.Command = this.Command; |
return target; |
} |
/// <summary> |
/// Serialize Serialize |
/// </summary> |
public virtual void Serialize(System.IO.BinaryWriter writer) |
{ |
if (Command == null) writer.Write((byte)0); |
else |
{ |
// null flag |
writer.Write((byte)1); |
writer.Write(Command); |
} |
} |
/// <summary> |
/// Deserialize Deserialize |
/// </summary> |
public virtual object Deserialize(System.IO.BinaryReader reader) |
{ |
if (reader.ReadByte() == 0) {} |
else |
{ |
Command = reader.ReadString(); |
} //nullable |
return this; |
} |
} |
/// <summary> |
/// Robo Board Operations |
/// </summary> |
[ServicePort()] |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class RoboBoardOperations : PortSet<Microsoft.Dss.ServiceModel.Dssp.DsspDefaultLookup, Microsoft.Dss.ServiceModel.Dssp.DsspDefaultDrop, Get, dssphttp.HttpGet, Replace, SetComPort, ReceiveCommand, SendCommand, Level, Control, SetAltitute, SetGas, SetGier, IncrementTick, Subscribe> |
{ |
/// <summary> |
/// Required Lookup request body type |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.LookupResponse,Fault> DsspDefaultLookup() |
{ |
Microsoft.Dss.ServiceModel.Dssp.LookupRequestType body = new Microsoft.Dss.ServiceModel.Dssp.LookupRequestType(); |
Microsoft.Dss.ServiceModel.Dssp.DsspDefaultLookup op = new Microsoft.Dss.ServiceModel.Dssp.DsspDefaultLookup(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Dssp Default Lookup and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.LookupResponse,Fault> DsspDefaultLookup(Microsoft.Dss.ServiceModel.Dssp.LookupRequestType body) |
{ |
Microsoft.Dss.ServiceModel.Dssp.DsspDefaultLookup op = new Microsoft.Dss.ServiceModel.Dssp.DsspDefaultLookup(); |
op.Body = body ?? new Microsoft.Dss.ServiceModel.Dssp.LookupRequestType(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// A request to drop the service. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultDropResponseType,Fault> DsspDefaultDrop() |
{ |
Microsoft.Dss.ServiceModel.Dssp.DropRequestType body = new Microsoft.Dss.ServiceModel.Dssp.DropRequestType(); |
Microsoft.Dss.ServiceModel.Dssp.DsspDefaultDrop op = new Microsoft.Dss.ServiceModel.Dssp.DsspDefaultDrop(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Dssp Default Drop and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultDropResponseType,Fault> DsspDefaultDrop(Microsoft.Dss.ServiceModel.Dssp.DropRequestType body) |
{ |
Microsoft.Dss.ServiceModel.Dssp.DsspDefaultDrop op = new Microsoft.Dss.ServiceModel.Dssp.DsspDefaultDrop(); |
op.Body = body ?? new Microsoft.Dss.ServiceModel.Dssp.DropRequestType(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Required Get body type |
/// </summary> |
public virtual PortSet<RoboBoardState,Fault> Get() |
{ |
Microsoft.Dss.ServiceModel.Dssp.GetRequestType body = new Microsoft.Dss.ServiceModel.Dssp.GetRequestType(); |
Get op = new Get(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Get and return the response port. |
/// </summary> |
public virtual PortSet<RoboBoardState,Fault> Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType body) |
{ |
Get op = new Get(); |
op.Body = body ?? new Microsoft.Dss.ServiceModel.Dssp.GetRequestType(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// DsspHttp Get request body |
/// </summary> |
public virtual PortSet<dssphttp.HttpResponseType,Fault> HttpGet() |
{ |
dssphttp.HttpGetRequestType body = new dssphttp.HttpGetRequestType(); |
dssphttp.HttpGet op = new dssphttp.HttpGet(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Http Get and return the response port. |
/// </summary> |
public virtual PortSet<dssphttp.HttpResponseType,Fault> HttpGet(dssphttp.HttpGetRequestType body) |
{ |
dssphttp.HttpGet op = new dssphttp.HttpGet(); |
op.Body = body ?? new dssphttp.HttpGetRequestType(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Robo Board State |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultReplaceResponseType,Fault> Replace() |
{ |
RoboBoardState body = new RoboBoardState(); |
Replace op = new Replace(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Replace and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultReplaceResponseType,Fault> Replace(RoboBoardState body) |
{ |
Replace op = new Replace(); |
op.Body = body ?? new RoboBoardState(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Set Com Port Request |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetComPort() |
{ |
SetComPortRequest body = new SetComPortRequest(); |
SetComPort op = new SetComPort(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Set Com Port and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetComPort(SetComPortRequest body) |
{ |
SetComPort op = new SetComPort(); |
op.Body = body ?? new SetComPortRequest(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Receive Command Request |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> ReceiveCommand() |
{ |
ReceiveCommandRequest body = new ReceiveCommandRequest(); |
ReceiveCommand op = new ReceiveCommand(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Receive Command and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> ReceiveCommand(ReceiveCommandRequest body) |
{ |
ReceiveCommand op = new ReceiveCommand(); |
op.Body = body ?? new ReceiveCommandRequest(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Send Command Request |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SendCommand() |
{ |
SendCommandRequest body = new SendCommandRequest(); |
SendCommand op = new SendCommand(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Send Command and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SendCommand(SendCommandRequest body) |
{ |
SendCommand op = new SendCommand(); |
op.Body = body ?? new SendCommandRequest(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Level Request |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> Level() |
{ |
LevelRequest body = new LevelRequest(); |
Level op = new Level(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Level and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> Level(LevelRequest body) |
{ |
Level op = new Level(); |
op.Body = body ?? new LevelRequest(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Control Request |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> Control() |
{ |
ControlRequest body = new ControlRequest(); |
Control op = new Control(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Control and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> Control(ControlRequest body) |
{ |
Control op = new Control(); |
op.Body = body ?? new ControlRequest(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Set Altitute Request |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetAltitute() |
{ |
SetAltituteRequest body = new SetAltituteRequest(); |
SetAltitute op = new SetAltitute(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Set Altitute and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetAltitute(SetAltituteRequest body) |
{ |
SetAltitute op = new SetAltitute(); |
op.Body = body ?? new SetAltituteRequest(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Set Gas Request |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetGas() |
{ |
SetGasRequest body = new SetGasRequest(); |
SetGas op = new SetGas(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Set Gas and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetGas(SetGasRequest body) |
{ |
SetGas op = new SetGas(); |
op.Body = body ?? new SetGasRequest(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Set Gier Request |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetGier() |
{ |
SetGierRequest body = new SetGierRequest(); |
SetGier op = new SetGier(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Set Gier and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> SetGier(SetGierRequest body) |
{ |
SetGier op = new SetGier(); |
op.Body = body ?? new SetGierRequest(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Increment Tick Request |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> IncrementTick() |
{ |
IncrementTickRequest body = new IncrementTickRequest(); |
IncrementTick op = new IncrementTick(body); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Increment Tick and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,Fault> IncrementTick(IncrementTickRequest body) |
{ |
IncrementTick op = new IncrementTick(); |
op.Body = body ?? new IncrementTickRequest(); |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Subscribe and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.SubscribeResponseType,Fault> Subscribe(IPort notificationPort) |
{ |
Subscribe op = new Subscribe(); |
op.Body = new Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType(); |
op.NotificationPort = notificationPort; |
this.Post(op); |
return op.ResponsePort; |
} |
/// <summary> |
/// Post Subscribe and return the response port. |
/// </summary> |
public virtual PortSet<Microsoft.Dss.ServiceModel.Dssp.SubscribeResponseType,Fault> Subscribe(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType body, IPort notificationPort) |
{ |
Subscribe op = new Subscribe(); |
op.Body = body ?? new Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType(); |
op.NotificationPort = notificationPort; |
this.Post(op); |
return op.ResponsePort; |
} |
} |
/// <summary> |
/// Get |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class Get : Microsoft.Dss.ServiceModel.Dssp.Get<Microsoft.Dss.ServiceModel.Dssp.GetRequestType, PortSet<RoboBoardState, Fault>> |
{ |
/// <summary> |
/// Get |
/// </summary> |
public Get() |
{ |
} |
/// <summary> |
/// Get |
/// </summary> |
public Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType body) : |
base(body) |
{ |
} |
/// <summary> |
/// Get |
/// </summary> |
public Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType body, Microsoft.Ccr.Core.PortSet<RoboBoardState,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Replace |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class Replace : Microsoft.Dss.ServiceModel.Dssp.Replace<RoboBoardState, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultReplaceResponseType, Fault>> |
{ |
/// <summary> |
/// Replace |
/// </summary> |
public Replace() |
{ |
} |
/// <summary> |
/// Replace |
/// </summary> |
public Replace(RoboBoardState body) : |
base(body) |
{ |
} |
/// <summary> |
/// Replace |
/// </summary> |
public Replace(RoboBoardState body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultReplaceResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Set Com Port |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class SetComPort : Microsoft.Dss.ServiceModel.Dssp.Update<SetComPortRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>> |
{ |
/// <summary> |
/// Set Com Port |
/// </summary> |
public SetComPort() |
{ |
} |
/// <summary> |
/// Set Com Port |
/// </summary> |
public SetComPort(SetComPortRequest body) : |
base(body) |
{ |
} |
/// <summary> |
/// Set Com Port |
/// </summary> |
public SetComPort(SetComPortRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Receive Command |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class ReceiveCommand : Microsoft.Dss.ServiceModel.Dssp.Update<ReceiveCommandRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>> |
{ |
/// <summary> |
/// Receive Command |
/// </summary> |
public ReceiveCommand() |
{ |
} |
/// <summary> |
/// Receive Command |
/// </summary> |
public ReceiveCommand(ReceiveCommandRequest body) : |
base(body) |
{ |
} |
/// <summary> |
/// Receive Command |
/// </summary> |
public ReceiveCommand(ReceiveCommandRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Send Command |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class SendCommand : Microsoft.Dss.ServiceModel.Dssp.Update<SendCommandRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>> |
{ |
/// <summary> |
/// Send Command |
/// </summary> |
public SendCommand() |
{ |
} |
/// <summary> |
/// Send Command |
/// </summary> |
public SendCommand(SendCommandRequest body) : |
base(body) |
{ |
} |
/// <summary> |
/// Send Command |
/// </summary> |
public SendCommand(SendCommandRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Level |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class Level : Microsoft.Dss.ServiceModel.Dssp.Update<LevelRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>> |
{ |
/// <summary> |
/// Level |
/// </summary> |
public Level() |
{ |
} |
/// <summary> |
/// Level |
/// </summary> |
public Level(LevelRequest body) : |
base(body) |
{ |
} |
/// <summary> |
/// Level |
/// </summary> |
public Level(LevelRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Control |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class Control : Microsoft.Dss.ServiceModel.Dssp.Update<ControlRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>> |
{ |
/// <summary> |
/// Control |
/// </summary> |
public Control() |
{ |
} |
/// <summary> |
/// Control |
/// </summary> |
public Control(ControlRequest body) : |
base(body) |
{ |
} |
/// <summary> |
/// Control |
/// </summary> |
public Control(ControlRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Set Altitute |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class SetAltitute : Microsoft.Dss.ServiceModel.Dssp.Update<SetAltituteRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>> |
{ |
/// <summary> |
/// Set Altitute |
/// </summary> |
public SetAltitute() |
{ |
} |
/// <summary> |
/// Set Altitute |
/// </summary> |
public SetAltitute(SetAltituteRequest body) : |
base(body) |
{ |
} |
/// <summary> |
/// Set Altitute |
/// </summary> |
public SetAltitute(SetAltituteRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Set Gas |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class SetGas : Microsoft.Dss.ServiceModel.Dssp.Update<SetGasRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>> |
{ |
/// <summary> |
/// Set Gas |
/// </summary> |
public SetGas() |
{ |
} |
/// <summary> |
/// Set Gas |
/// </summary> |
public SetGas(SetGasRequest body) : |
base(body) |
{ |
} |
/// <summary> |
/// Set Gas |
/// </summary> |
public SetGas(SetGasRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Set Gier |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class SetGier : Microsoft.Dss.ServiceModel.Dssp.Update<SetGierRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>> |
{ |
/// <summary> |
/// Set Gier |
/// </summary> |
public SetGier() |
{ |
} |
/// <summary> |
/// Set Gier |
/// </summary> |
public SetGier(SetGierRequest body) : |
base(body) |
{ |
} |
/// <summary> |
/// Set Gier |
/// </summary> |
public SetGier(SetGierRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Increment Tick |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class IncrementTick : Microsoft.Dss.ServiceModel.Dssp.Update<IncrementTickRequest, PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType, Fault>> |
{ |
/// <summary> |
/// Increment Tick |
/// </summary> |
public IncrementTick() |
{ |
} |
/// <summary> |
/// Increment Tick |
/// </summary> |
public IncrementTick(IncrementTickRequest body) : |
base(body) |
{ |
} |
/// <summary> |
/// Increment Tick |
/// </summary> |
public IncrementTick(IncrementTickRequest body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.DefaultUpdateResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
/// <summary> |
/// Subscribe |
/// </summary> |
[XmlTypeAttribute(IncludeInSchema=false)] |
public class Subscribe : Microsoft.Dss.ServiceModel.Dssp.Subscribe<Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType, PortSet<Microsoft.Dss.ServiceModel.Dssp.SubscribeResponseType, Fault>> |
{ |
/// <summary> |
/// Subscribe |
/// </summary> |
public Subscribe() |
{ |
} |
/// <summary> |
/// Subscribe |
/// </summary> |
public Subscribe(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType body) : |
base(body) |
{ |
} |
/// <summary> |
/// Subscribe |
/// </summary> |
public Subscribe(Microsoft.Dss.ServiceModel.Dssp.SubscribeRequestType body, Microsoft.Ccr.Core.PortSet<Microsoft.Dss.ServiceModel.Dssp.SubscribeResponseType,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
} |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/ResolveAssemblyReference.cache |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/RoboBoardService.Y2007.M08.Proxy.dll |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/RoboBoardService.Y2007.M08.Proxy.pdb |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/RoboBoardService.Y2007.M08.proxy.csproj.GenerateResource.Cache |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/Robotics.RoboBoard.Properties.Resources.resources |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/Debug/Robotics.RoboBoard.Resources.DssModel.dss |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/RoboBoardService.Y2007.M08.proxy.csproj.FileList.txt |
---|
0,0 → 1,9 |
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.Proxy.dll |
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.Proxy.pdb |
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.proxy.xml |
obj\Debug\ResolveAssemblyReference.cache |
obj\Debug\Robotics.RoboBoard.Resources.DssModel.dss |
obj\Debug\Robotics.RoboBoard.Properties.Resources.resources |
obj\Debug\RoboBoardService.Y2007.M08.proxy.csproj.GenerateResource.Cache |
obj\Debug\RoboBoardService.Y2007.M08.Proxy.dll |
obj\Debug\RoboBoardService.Y2007.M08.Proxy.pdb |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/obj/RoboBoardService.Y2007.M08.proxy.csproj.FileListAbsolute.txt |
---|
0,0 → 1,15 |
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.Proxy.dll |
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.Proxy.pdb |
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.proxy.xml |
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\ResolveAssemblyReference.cache |
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\Robotics.RoboBoard.Resources.DssModel.dss |
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\Robotics.RoboBoard.Properties.Resources.resources |
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.proxy.csproj.GenerateResource.Cache |
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.Proxy.dll |
C:\mikrokopter\RoboBoardService\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.Proxy.pdb |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\ResolveAssemblyReference.cache |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\Robotics.RoboBoard.Resources.DssModel.dss |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\Robotics.RoboBoard.Properties.Resources.resources |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.proxy.csproj.GenerateResource.Cache |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.Proxy.dll |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\Proxy\obj\Debug\RoboBoardService.Y2007.M08.Proxy.pdb |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Proxy/roboboardservice.source.transform.cs |
---|
0,0 → 1,233 |
using System; |
using Microsoft.Dss.Core.Attributes; |
using Microsoft.Dss.Core.Transforms; |
#if NET_CF20 |
[assembly: ServiceDeclaration(DssServiceDeclaration.Transform, SourceAssemblyKey = @"cf.roboboardservice.y2007.m08, version=0.0.0.0, culture=neutral, publickeytoken=7a99181333b055f6")] |
#else |
[assembly: ServiceDeclaration(DssServiceDeclaration.Transform, SourceAssemblyKey = @"roboboardservice.y2007.m08, version=0.0.0.0, culture=neutral, publickeytoken=7a99181333b055f6")] |
#endif |
#if !URT_MINCLR |
[assembly: System.Security.SecurityTransparent] |
[assembly: System.Security.AllowPartiallyTrustedCallers] |
#endif |
namespace Dss.Transforms.TransformRoboBoardService |
{ |
public class Transforms: TransformBase |
{ |
public static object Transform_Robotics_RoboBoard_Proxy_RoboBoardState_TO_Robotics_RoboBoard_RoboBoardState(object transformFrom) |
{ |
Robotics.RoboBoard.RoboBoardState target = new Robotics.RoboBoard.RoboBoardState(); |
Robotics.RoboBoard.Proxy.RoboBoardState from = transformFrom as Robotics.RoboBoard.Proxy.RoboBoardState; |
target.ComPort = from.ComPort; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_RoboBoardState_TO_Robotics_RoboBoard_Proxy_RoboBoardState(object transformFrom) |
{ |
Robotics.RoboBoard.Proxy.RoboBoardState target = new Robotics.RoboBoard.Proxy.RoboBoardState(); |
Robotics.RoboBoard.RoboBoardState from = transformFrom as Robotics.RoboBoard.RoboBoardState; |
target.ComPort = from.ComPort; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_Proxy_SetComPortRequest_TO_Robotics_RoboBoard_SetComPortRequest(object transformFrom) |
{ |
Robotics.RoboBoard.SetComPortRequest target = new Robotics.RoboBoard.SetComPortRequest(); |
Robotics.RoboBoard.Proxy.SetComPortRequest from = transformFrom as Robotics.RoboBoard.Proxy.SetComPortRequest; |
target.PortName = from.PortName; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_SetComPortRequest_TO_Robotics_RoboBoard_Proxy_SetComPortRequest(object transformFrom) |
{ |
Robotics.RoboBoard.Proxy.SetComPortRequest target = new Robotics.RoboBoard.Proxy.SetComPortRequest(); |
Robotics.RoboBoard.SetComPortRequest from = transformFrom as Robotics.RoboBoard.SetComPortRequest; |
target.PortName = from.PortName; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_Proxy_ReceiveCommandRequest_TO_Robotics_RoboBoard_ReceiveCommandRequest(object transformFrom) |
{ |
Robotics.RoboBoard.ReceiveCommandRequest target = new Robotics.RoboBoard.ReceiveCommandRequest(); |
Robotics.RoboBoard.Proxy.ReceiveCommandRequest from = transformFrom as Robotics.RoboBoard.Proxy.ReceiveCommandRequest; |
target.Command = from.Command; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_ReceiveCommandRequest_TO_Robotics_RoboBoard_Proxy_ReceiveCommandRequest(object transformFrom) |
{ |
Robotics.RoboBoard.Proxy.ReceiveCommandRequest target = new Robotics.RoboBoard.Proxy.ReceiveCommandRequest(); |
Robotics.RoboBoard.ReceiveCommandRequest from = transformFrom as Robotics.RoboBoard.ReceiveCommandRequest; |
target.Command = from.Command; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_Proxy_SendCommandRequest_TO_Robotics_RoboBoard_SendCommandRequest(object transformFrom) |
{ |
Robotics.RoboBoard.SendCommandRequest target = new Robotics.RoboBoard.SendCommandRequest(); |
Robotics.RoboBoard.Proxy.SendCommandRequest from = transformFrom as Robotics.RoboBoard.Proxy.SendCommandRequest; |
target.Command = from.Command; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_SendCommandRequest_TO_Robotics_RoboBoard_Proxy_SendCommandRequest(object transformFrom) |
{ |
Robotics.RoboBoard.Proxy.SendCommandRequest target = new Robotics.RoboBoard.Proxy.SendCommandRequest(); |
Robotics.RoboBoard.SendCommandRequest from = transformFrom as Robotics.RoboBoard.SendCommandRequest; |
target.Command = from.Command; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_Proxy_LevelRequest_TO_Robotics_RoboBoard_LevelRequest(object transformFrom) |
{ |
Robotics.RoboBoard.LevelRequest target = new Robotics.RoboBoard.LevelRequest(); |
Robotics.RoboBoard.Proxy.LevelRequest from = transformFrom as Robotics.RoboBoard.Proxy.LevelRequest; |
target.Roll = from.Roll; |
target.Nick = from.Nick; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_LevelRequest_TO_Robotics_RoboBoard_Proxy_LevelRequest(object transformFrom) |
{ |
Robotics.RoboBoard.Proxy.LevelRequest target = new Robotics.RoboBoard.Proxy.LevelRequest(); |
Robotics.RoboBoard.LevelRequest from = transformFrom as Robotics.RoboBoard.LevelRequest; |
target.Roll = from.Roll; |
target.Nick = from.Nick; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_Proxy_ControlRequest_TO_Robotics_RoboBoard_ControlRequest(object transformFrom) |
{ |
Robotics.RoboBoard.ControlRequest target = new Robotics.RoboBoard.ControlRequest(); |
Robotics.RoboBoard.Proxy.ControlRequest from = transformFrom as Robotics.RoboBoard.Proxy.ControlRequest; |
target.Roll = from.Roll; |
target.Nick = from.Nick; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_ControlRequest_TO_Robotics_RoboBoard_Proxy_ControlRequest(object transformFrom) |
{ |
Robotics.RoboBoard.Proxy.ControlRequest target = new Robotics.RoboBoard.Proxy.ControlRequest(); |
Robotics.RoboBoard.ControlRequest from = transformFrom as Robotics.RoboBoard.ControlRequest; |
target.Roll = from.Roll; |
target.Nick = from.Nick; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_Proxy_SetAltituteRequest_TO_Robotics_RoboBoard_SetAltituteRequest(object transformFrom) |
{ |
Robotics.RoboBoard.SetAltituteRequest target = new Robotics.RoboBoard.SetAltituteRequest(); |
Robotics.RoboBoard.Proxy.SetAltituteRequest from = transformFrom as Robotics.RoboBoard.Proxy.SetAltituteRequest; |
target.Altitute = from.Altitute; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_SetAltituteRequest_TO_Robotics_RoboBoard_Proxy_SetAltituteRequest(object transformFrom) |
{ |
Robotics.RoboBoard.Proxy.SetAltituteRequest target = new Robotics.RoboBoard.Proxy.SetAltituteRequest(); |
Robotics.RoboBoard.SetAltituteRequest from = transformFrom as Robotics.RoboBoard.SetAltituteRequest; |
target.Altitute = from.Altitute; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_Proxy_SetGasRequest_TO_Robotics_RoboBoard_SetGasRequest(object transformFrom) |
{ |
Robotics.RoboBoard.SetGasRequest target = new Robotics.RoboBoard.SetGasRequest(); |
Robotics.RoboBoard.Proxy.SetGasRequest from = transformFrom as Robotics.RoboBoard.Proxy.SetGasRequest; |
target.Gas = from.Gas; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_SetGasRequest_TO_Robotics_RoboBoard_Proxy_SetGasRequest(object transformFrom) |
{ |
Robotics.RoboBoard.Proxy.SetGasRequest target = new Robotics.RoboBoard.Proxy.SetGasRequest(); |
Robotics.RoboBoard.SetGasRequest from = transformFrom as Robotics.RoboBoard.SetGasRequest; |
target.Gas = from.Gas; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_Proxy_SetGierRequest_TO_Robotics_RoboBoard_SetGierRequest(object transformFrom) |
{ |
Robotics.RoboBoard.SetGierRequest target = new Robotics.RoboBoard.SetGierRequest(); |
Robotics.RoboBoard.Proxy.SetGierRequest from = transformFrom as Robotics.RoboBoard.Proxy.SetGierRequest; |
target.Gier = from.Gier; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_SetGierRequest_TO_Robotics_RoboBoard_Proxy_SetGierRequest(object transformFrom) |
{ |
Robotics.RoboBoard.Proxy.SetGierRequest target = new Robotics.RoboBoard.Proxy.SetGierRequest(); |
Robotics.RoboBoard.SetGierRequest from = transformFrom as Robotics.RoboBoard.SetGierRequest; |
target.Gier = from.Gier; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_Proxy_IncrementTickRequest_TO_Robotics_RoboBoard_IncrementTickRequest(object transformFrom) |
{ |
Robotics.RoboBoard.IncrementTickRequest target = new Robotics.RoboBoard.IncrementTickRequest(); |
Robotics.RoboBoard.Proxy.IncrementTickRequest from = transformFrom as Robotics.RoboBoard.Proxy.IncrementTickRequest; |
target.Command = from.Command; |
return target; |
} |
public static object Transform_Robotics_RoboBoard_IncrementTickRequest_TO_Robotics_RoboBoard_Proxy_IncrementTickRequest(object transformFrom) |
{ |
Robotics.RoboBoard.Proxy.IncrementTickRequest target = new Robotics.RoboBoard.Proxy.IncrementTickRequest(); |
Robotics.RoboBoard.IncrementTickRequest from = transformFrom as Robotics.RoboBoard.IncrementTickRequest; |
target.Command = from.Command; |
return target; |
} |
static Transforms() |
{ |
Register(); |
} |
public static void Register() |
{ |
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.RoboBoardState), Transform_Robotics_RoboBoard_Proxy_RoboBoardState_TO_Robotics_RoboBoard_RoboBoardState); |
AddSourceTransform(typeof(Robotics.RoboBoard.RoboBoardState), Transform_Robotics_RoboBoard_RoboBoardState_TO_Robotics_RoboBoard_Proxy_RoboBoardState); |
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.SetComPortRequest), Transform_Robotics_RoboBoard_Proxy_SetComPortRequest_TO_Robotics_RoboBoard_SetComPortRequest); |
AddSourceTransform(typeof(Robotics.RoboBoard.SetComPortRequest), Transform_Robotics_RoboBoard_SetComPortRequest_TO_Robotics_RoboBoard_Proxy_SetComPortRequest); |
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.ReceiveCommandRequest), Transform_Robotics_RoboBoard_Proxy_ReceiveCommandRequest_TO_Robotics_RoboBoard_ReceiveCommandRequest); |
AddSourceTransform(typeof(Robotics.RoboBoard.ReceiveCommandRequest), Transform_Robotics_RoboBoard_ReceiveCommandRequest_TO_Robotics_RoboBoard_Proxy_ReceiveCommandRequest); |
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.SendCommandRequest), Transform_Robotics_RoboBoard_Proxy_SendCommandRequest_TO_Robotics_RoboBoard_SendCommandRequest); |
AddSourceTransform(typeof(Robotics.RoboBoard.SendCommandRequest), Transform_Robotics_RoboBoard_SendCommandRequest_TO_Robotics_RoboBoard_Proxy_SendCommandRequest); |
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.LevelRequest), Transform_Robotics_RoboBoard_Proxy_LevelRequest_TO_Robotics_RoboBoard_LevelRequest); |
AddSourceTransform(typeof(Robotics.RoboBoard.LevelRequest), Transform_Robotics_RoboBoard_LevelRequest_TO_Robotics_RoboBoard_Proxy_LevelRequest); |
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.ControlRequest), Transform_Robotics_RoboBoard_Proxy_ControlRequest_TO_Robotics_RoboBoard_ControlRequest); |
AddSourceTransform(typeof(Robotics.RoboBoard.ControlRequest), Transform_Robotics_RoboBoard_ControlRequest_TO_Robotics_RoboBoard_Proxy_ControlRequest); |
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.SetAltituteRequest), Transform_Robotics_RoboBoard_Proxy_SetAltituteRequest_TO_Robotics_RoboBoard_SetAltituteRequest); |
AddSourceTransform(typeof(Robotics.RoboBoard.SetAltituteRequest), Transform_Robotics_RoboBoard_SetAltituteRequest_TO_Robotics_RoboBoard_Proxy_SetAltituteRequest); |
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.SetGasRequest), Transform_Robotics_RoboBoard_Proxy_SetGasRequest_TO_Robotics_RoboBoard_SetGasRequest); |
AddSourceTransform(typeof(Robotics.RoboBoard.SetGasRequest), Transform_Robotics_RoboBoard_SetGasRequest_TO_Robotics_RoboBoard_Proxy_SetGasRequest); |
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.SetGierRequest), Transform_Robotics_RoboBoard_Proxy_SetGierRequest_TO_Robotics_RoboBoard_SetGierRequest); |
AddSourceTransform(typeof(Robotics.RoboBoard.SetGierRequest), Transform_Robotics_RoboBoard_SetGierRequest_TO_Robotics_RoboBoard_Proxy_SetGierRequest); |
AddProxyTransform(typeof(Robotics.RoboBoard.Proxy.IncrementTickRequest), Transform_Robotics_RoboBoard_Proxy_IncrementTickRequest_TO_Robotics_RoboBoard_IncrementTickRequest); |
AddSourceTransform(typeof(Robotics.RoboBoard.IncrementTickRequest), Transform_Robotics_RoboBoard_IncrementTickRequest_TO_Robotics_RoboBoard_Proxy_IncrementTickRequest); |
} |
} |
} |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoard.cs |
---|
0,0 → 1,520 |
//------------------------------------------------------------------------------ |
// <auto-generated> |
// This code was generated by a tool. |
// Runtime Version:2.0.50727.312 |
// |
// Changes to this file may cause incorrect behavior and will be lost if |
// the code is regenerated. |
// </auto-generated> |
//------------------------------------------------------------------------------ |
using Microsoft.Ccr.Core; |
using Microsoft.Dss.Core; |
using Microsoft.Dss.Core.Attributes; |
using Microsoft.Dss.ServiceModel.Dssp; |
using Microsoft.Dss.ServiceModel.DsspServiceBase; |
using Microsoft.Dss.Core.DsspHttp; |
using System; |
using System.Collections.Generic; |
using System.Security.Permissions; |
using System.ComponentModel; |
using System.Xml; |
using roboboard = Robotics.RoboBoard; |
using submgr = Microsoft.Dss.Services.SubscriptionManager; |
using Roboboard = Robotics.Serial; |
using Microsoft.Ccr.Adapters.WinForms; |
using soap = W3C.Soap; |
using dssp = Microsoft.Dss.ServiceModel.Dssp; |
using xml = System.Xml; |
using W3C.Soap; |
namespace Robotics.RoboBoard |
{ |
/// <summary> |
/// Implementation class for RoboBoard |
/// </summary> |
[DisplayName("RoboBoard")] |
[Description("The RoboBoard Service")] |
[Contract(Contract.Identifier)] |
public class RoboBoardService : DsspServiceBase |
{ |
RoboBoardForm _rbForm; |
RoboBoardEvents _eventsPort = new RoboBoardEvents(); |
private Roboboard.SerialCom sc = new Robotics.Serial.SerialCom(); |
/// <summary> |
/// _state |
/// </summary> |
private RoboBoardState _state = new RoboBoardState(); |
/// <summary> |
/// _main Port |
/// </summary> |
[ServicePort("/roboboard", AllowMultipleInstances=false)] |
private RoboBoardOperations _mainPort = new RoboBoardOperations(); |
[Partner("SubMgr", Contract = submgr.Contract.Identifier, CreationPolicy = PartnerCreationPolicy.CreateAlways)] |
private submgr.SubscriptionManagerPort _submgrPort = new submgr.SubscriptionManagerPort(); |
//--------------------------------------------------------------------- |
/// <summary> |
/// Default Service Constructor |
/// </summary> |
public RoboBoardService(DsspServiceCreationPort creationPort) : |
base(creationPort) |
{ |
} |
/// <summary> |
/// Service Start |
/// </summary> |
protected override void Start() |
{ |
Activate(Arbiter.Interleave( |
new TeardownReceiverGroup |
( |
), |
new ExclusiveReceiverGroup |
( |
Arbiter.ReceiveWithIterator<OnLoad>(true, _eventsPort, OnLoadHandler) |
), |
new ConcurrentReceiverGroup |
( |
) |
)); |
base.Start(); |
LogInfo("Init Service.."); |
// Add service specific initialization here. |
// Open Status and Debug Dialog |
WinFormsServicePort.Post(new RunForm(CreateForm)); |
Roboboard.SerialCom.BotEvent +=new Robotics.Serial.SerialCom.BotEventHandler(sc_BotEvent); |
} |
System.Windows.Forms.Form CreateForm() |
{ |
return new RoboBoardForm(_eventsPort); |
} |
//--------------------------------------------------------------------- |
/// <summary> |
/// Get Handler |
/// </summary> |
/// <param name="get"></param> |
/// <returns></returns> |
[ServiceHandler(ServiceHandlerBehavior.Concurrent)] |
public virtual IEnumerator<ITask> GetHandler(Get get) |
{ |
get.ResponsePort.Post(_state); |
yield break; |
} |
//--------------------------------------------------------------------- |
/// <summary> |
/// Http Get Handler |
/// </summary> |
[ServiceHandler(ServiceHandlerBehavior.Concurrent)] |
public IEnumerator<ITask> HttpGetHandler(HttpGet httpGet) |
{ |
httpGet.ResponsePort.Post(new HttpResponseType(_state)); |
yield break; |
} |
//--------------------------------------------------------------------- |
/// <summary> |
/// Replace Handler |
/// </summary> |
[ServiceHandler(ServiceHandlerBehavior.Exclusive)] |
public IEnumerator<ITask> ReplaceHandler(Replace replace) |
{ |
_state = replace.Body; |
// #region CODECLIP 04-1 |
// base.SendNotification(_submgrPort, replace); |
// #endregion |
replace.ResponsePort.Post(DefaultReplaceResponseType.Instance); |
yield break; |
} |
//--------------------------------------------------------------------- |
[ServiceHandler(ServiceHandlerBehavior.Exclusive)] |
public IEnumerator<ITask> SetComPortHandler(SetComPort setComPort) |
{ |
LogInfo("Set Port Name ("+setComPort.Body.PortName+")"); |
if ((setComPort.Body.PortName == sc.ComPort)&&(sc.isOpen==true)) |
{ |
LogInfo("no need to change com port"); |
// port name equals the old port name - no action |
} |
else |
{ |
// port name is different, close the old port and open the new one |
if(sc.isOpen==true) { |
LogInfo("closing Port"); |
sc.ClosePort(); |
} |
sc.ComPort = setComPort.Body.PortName; |
if (_rbForm != null) |
{ |
if (sc.InitPort() == 0) |
{ |
LogInfo("Init Port succseeded"); |
WinFormsServicePort.FormInvoke(delegate() |
{_rbForm.UpdateStatus("Port Open (" + sc.ComPort + ")");}); |
} |
else |
{ |
LogInfo("Init Port failed"); |
WinFormsServicePort.FormInvoke(delegate() |
{_rbForm.UpdateStatus("Can't open communication port (" + sc.ComPort + ")");}); |
} |
} |
} |
yield break; |
} |
//--------------------------------------------------------------------- |
[ServiceHandler(ServiceHandlerBehavior.Exclusive)] |
public IEnumerator<ITask> IncrementTickHandler(IncrementTick incrementTick) |
{ |
LogInfo("Tick: "); |
LogInfo("Command:" + incrementTick.Body.Command); |
base.SendNotification(_submgrPort, incrementTick); |
incrementTick.ResponsePort.Post(DefaultUpdateResponseType.Instance); |
yield break; |
} |
//--------------------------------------------------------------------- |
[ServiceHandler(ServiceHandlerBehavior.Exclusive)] |
public IEnumerator<ITask> ReceiveCommandHandler(ReceiveCommand receiveCommand) |
{ |
LogInfo("Receive "); |
LogInfo("Command:" + receiveCommand.Body.Command); |
base.SendNotification(_submgrPort, receiveCommand); |
receiveCommand.ResponsePort.Post(DefaultUpdateResponseType.Instance); |
yield break; |
} |
//--------------------------------------------------------------------- |
[ServiceHandler(ServiceHandlerBehavior.Exclusive)] |
public IEnumerator<ITask> SendCommandHandler(SendCommand sendCommand) |
{ |
LogInfo("Send "); |
LogInfo("Command:" + sendCommand.Body.Command); |
MKRequestTunnelMessage(sendCommand.Body.Command); |
base.SendNotification(_submgrPort, sendCommand); |
sendCommand.ResponsePort.Post(DefaultUpdateResponseType.Instance); |
yield break; |
} |
//--------------------------------------------------------------------- |
[ServiceHandler(ServiceHandlerBehavior.Exclusive)] |
public IEnumerator<ITask> LevelHandler(Level level) |
{ |
LogInfo("Level "); |
LogInfo("Nick:"+level.Body.Nick+"Roll:"+level.Body.Roll); |
base.SendNotification(_submgrPort, level); |
level.ResponsePort.Post(DefaultUpdateResponseType.Instance); |
yield break; |
} |
//--------------------------------------------------------------------- |
[ServiceHandler(ServiceHandlerBehavior.Exclusive)] |
public IEnumerator<ITask> SetAltituteHandler(SetAltitute setaltitute) |
{ |
LogInfo("SetAltitute "); |
LogInfo("Altitute:" + setaltitute.Body.Altitute); |
if (_rbForm != null) |
{ |
_rbForm.Control_alt = (Int16)setaltitute.Body.Altitute; |
} |
//TODO: send alt control to MK |
base.SendNotification(_submgrPort, setaltitute); |
setaltitute.ResponsePort.Post(DefaultUpdateResponseType.Instance); |
yield break; |
} |
//--------------------------------------------------------------------- |
[ServiceHandler(ServiceHandlerBehavior.Exclusive)] |
public IEnumerator<ITask> SetGierHandler(SetGier setgier) |
{ |
LogInfo("SetGier "); |
LogInfo("SetGier:" + setgier.Body.Gier); |
Int16 igier = (Int16)(((float)128 * setgier.Body.Gier) / (float)1000); |
if (_rbForm != null) |
{ |
_rbForm.Control_gier = igier; |
} |
MK_latest_gier = igier; |
MKRequestControl(MK_latest_nick, MK_latest_roll, MK_latest_gier, MK_latest_gas); |
base.SendNotification(_submgrPort, setgier); |
setgier.ResponsePort.Post(DefaultUpdateResponseType.Instance); |
yield break; |
} |
//--------------------------------------------------------------------- |
[ServiceHandler(ServiceHandlerBehavior.Exclusive)] |
public IEnumerator<ITask> SetGasHandler(SetGas setgas) |
{ |
LogInfo("SetGas "); |
LogInfo("SetGas:" + setgas.Body.Gas); |
Int16 igas = (Int16)(((float)128 * setgas.Body.Gas) / (float)1000); |
if (_rbForm != null) |
{ |
_rbForm.Control_gas = igas; |
} |
MK_latest_gas = igas; |
MKRequestControl(MK_latest_nick, MK_latest_roll, MK_latest_gier, MK_latest_gas); |
base.SendNotification(_submgrPort, setgas); |
setgas.ResponsePort.Post(DefaultUpdateResponseType.Instance); |
yield break; |
} |
//--------------------------------------------------------------------- |
[ServiceHandler(ServiceHandlerBehavior.Exclusive)] |
public IEnumerator<ITask> ControlHandler(Control control) |
{ |
LogInfo("Control "); |
LogInfo("Nick:" + control.Body.Nick + " Roll:" +control.Body.Roll); |
Int16 inick = (Int16)(((float)128 * control.Body.Nick) / (float)(-1000)); |
Int16 iroll = (Int16)(((float)128 * control.Body.Roll) / (float)(-1000)); |
if (_rbForm != null) |
{ |
_rbForm.Control_nick = inick; |
_rbForm.Control_roll = iroll; |
} |
MK_latest_nick = inick; |
MK_latest_roll = iroll; |
MKRequestControl(MK_latest_nick, MK_latest_roll, MK_latest_gier, MK_latest_gas); |
base.SendNotification(_submgrPort, control); |
control.ResponsePort.Post(DefaultUpdateResponseType.Instance); |
yield break; |
} |
//--------------------------------------------------------------------- |
[ServiceHandler(ServiceHandlerBehavior.Concurrent)] |
public IEnumerator<ITask> SubscribeHandler(Subscribe subscribe) |
{ |
SubscribeRequestType request = subscribe.Body; |
LogInfo("Subscribe request from: " + request.Subscriber); |
yield return Arbiter.Choice( |
SubscribeHelper(_submgrPort, request, subscribe.ResponsePort), |
delegate(SuccessResult success) |
{ |
base.SendNotification<Replace>(_submgrPort, request.Subscriber, _state); |
}, |
delegate(Exception e) |
{ |
LogError(null, "Subscribe failed", e); |
} |
); |
yield break; |
} |
//--------------------------------------------------------------------- |
IEnumerator<ITask> OnLoadHandler(OnLoad onLoad) |
{ |
_rbForm = onLoad.RoboBoardForm; |
LogInfo("Loaded Form"); |
sc.ComPort = "COM6"; |
if (_rbForm != null) |
{ |
if (sc.InitPort() == 0) |
{ |
WinFormsServicePort.FormInvoke(delegate() |
{_rbForm.UpdateStatus("Port Open (" + sc.ComPort + ")");}); |
} |
else |
{ |
WinFormsServicePort.FormInvoke(delegate() |
{_rbForm.UpdateStatus("Can't open communication port (" + sc.ComPort + ")");}); |
} |
} |
//request version |
MKRequestVersion(); |
yield break; |
} |
//--------------------------------------------------------------------- |
void MKRequestTunnelMessage(string message) |
{ |
message = sc.CreateMessage((char)'X', (char)0, message); |
sc.SerialWrite(message); |
} |
//--------------------------------------------------------------------- |
bool MKRequestSend = false; |
Int16 MK_old_roll = 0; |
Int16 MK_old_nick = 0; |
Int16 MK_old_gier = 0; |
Int16 MK_old_gas = 0; |
Int16 MK_latest_roll = 0; |
Int16 MK_latest_nick = 0; |
Int16 MK_latest_gier = 0; |
Int16 MK_latest_gas = 0; |
void MKRequestControl(Int16 nick, Int16 roll, Int16 gier, Int16 gas) |
{ |
string message = ""; |
if ((MK_old_gas == gas) && |
(MK_old_gier == gier) && |
(MK_old_nick == nick) && |
(MK_old_roll == roll)) |
{ |
LogInfo("no update"); |
return; |
} |
if (MKRequestSend == true) return; |
LogInfo("Send"); |
if (_rbForm != null) |
{ |
WinFormsServicePort.FormInvoke(delegate() |
{ _rbForm.MonitorMKSensorUpdate(); }); |
} |
message = sc.MessageAddInt16(roll, message); |
MK_old_roll = roll; |
message = sc.MessageAddInt16(nick, message); |
MK_old_nick = nick; |
message = sc.MessageAddInt16(gier, message); |
MK_old_gier = gier; |
message = sc.MessageAddInt16(gas, message); |
MK_old_gas = gas; |
message = sc.CreateMessage((char)'C', (char)0, message); |
MKRequestSend = true; |
sc.SerialWrite(message); |
} |
void MKDecodeControl() |
{ |
LogInfo("Control OK"); |
MKRequestSend = false; |
MKRequestControl(MK_latest_nick, MK_latest_roll, MK_latest_gier, MK_latest_gas); |
} |
//--------------------------------------------------------------------- |
void MKRequestVersion() |
{ |
string message = ""; |
message=sc.CreateMessage((char)'v', (char)0, message); |
sc.SerialWrite(message); |
} |
string MKDecodeVersion(string message) |
{ |
string Versionstring = ""; |
Versionstring += "Version: "+sc.MessageReadByte(message).ToString(); |
message=message.Substring(1); |
sc.MessageReadByte(message); |
Versionstring += "." + sc.MessageReadByte(message).ToString(); |
message = message.Substring(1); |
sc.MessageReadByte(message); |
Versionstring += " (STEP:" + sc.MessageReadByte(message).ToString()+")"; |
if (_rbForm != null) |
{ |
WinFormsServicePort.FormInvoke(delegate() |
{ _rbForm.UpdateStatus(Versionstring); }); |
} |
return Versionstring; |
} |
//--------------------------------------------------------------------- |
void MKDecodeDebugData(string message) |
{ |
Int16[] analog = new Int16[32]; |
byte[] digital = new byte[2]; |
int i = 0; |
for (i = 0; i < 2; i++) |
{ |
digital[i]=sc.MessageReadByte(message); |
message = message.Substring(1); |
} |
for (i = 0; i < 32; i++) |
{ |
analog[i] = sc.MessageReadInt16(message); |
Int16 analogx = (Int16)analog[i]; |
if (_rbForm != null) |
{ |
_rbForm.MK_analog[i]= analog[i]; |
_rbForm.Mk_analog_name[i] = "Analog" + i.ToString(); |
//WinFormsServicePort.FormInvoke(delegate() |
//{ _rbForm.MonitorMKSensor(i,analogx,"Analog"+i.ToString()); }); |
} |
message = message.Substring(2); |
} |
if (_rbForm != null) |
{ |
WinFormsServicePort.FormInvoke(delegate() |
{ _rbForm.MonitorMKSensorUpdate(); }); |
} |
base.SendNotification(_submgrPort, new Level((int)analog[0], (int)analog[1])); |
} |
//--------------------------------------------------------------------- |
void sc_BotEvent(object sender, EventArgs ev) |
{ |
string message = ""; |
char cmd = (char)0; |
char adr = (char)0; |
if (sc.IsMessageValid() == true) |
{ |
message = sc.GetLastMessage(); |
cmd = sc.GetMessageCmd(); |
adr = sc.GetMessageAdr(); |
if (cmd.CompareTo((char)'V')==0) |
{ |
MKDecodeVersion(message); |
base.SendNotification(_submgrPort, new ReceiveCommand("V"+message)); |
} |
else |
if (cmd.CompareTo((char)'D') == 0) |
{ |
MKDecodeDebugData(message); |
//base.SendNotification(_submgrPort, new ReceiveCommand("D"+message)); |
} |
else |
if (cmd.CompareTo((char)'X') == 0) |
{ |
base.SendNotification(_submgrPort, new ReceiveCommand(message)); |
} |
else |
if (cmd.CompareTo((char)'C') == 0) |
{ |
MKDecodeControl(); |
} |
sc.InvalidateMessage(); |
} |
if (_rbForm != null) |
{ |
WinFormsServicePort.FormInvoke(delegate() |
{ _rbForm.MonitorCommand(message); }); |
} |
} |
} |
} |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardForm.Designer.cs |
---|
0,0 → 1,149 |
namespace Robotics.RoboBoard |
{ |
partial class RoboBoardForm |
{ |
/// <summary> |
/// Required designer variable. |
/// </summary> |
private System.ComponentModel.IContainer components = null; |
/// <summary> |
/// Clean up any resources being used. |
/// </summary> |
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> |
protected override void Dispose(bool disposing) |
{ |
if (disposing && (components != null)) |
{ |
components.Dispose(); |
} |
base.Dispose(disposing); |
} |
#region Windows Form Designer generated code |
/// <summary> |
/// Required method for Designer support - do not modify |
/// the contents of this method with the code editor. |
/// </summary> |
private void InitializeComponent() |
{ |
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoboBoardForm)); |
this.MainPanel = new System.Windows.Forms.Panel(); |
this.statusStrip = new System.Windows.Forms.StatusStrip(); |
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); |
this.toolStrip1 = new System.Windows.Forms.ToolStrip(); |
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); |
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); |
this.toolStripButton3 = new System.Windows.Forms.ToolStripButton(); |
this.statusStrip.SuspendLayout(); |
this.toolStrip1.SuspendLayout(); |
this.SuspendLayout(); |
// |
// MainPanel |
// |
this.MainPanel.BackColor = System.Drawing.SystemColors.ControlDark; |
this.MainPanel.Cursor = System.Windows.Forms.Cursors.Cross; |
this.MainPanel.Location = new System.Drawing.Point(6, 57); |
this.MainPanel.Name = "MainPanel"; |
this.MainPanel.Size = new System.Drawing.Size(373, 346); |
this.MainPanel.TabIndex = 0; |
this.MainPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.MainPanel_Paint); |
// |
// statusStrip |
// |
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { |
this.toolStripStatusLabel1}); |
this.statusStrip.Location = new System.Drawing.Point(0, 406); |
this.statusStrip.Name = "statusStrip"; |
this.statusStrip.Size = new System.Drawing.Size(391, 22); |
this.statusStrip.TabIndex = 1; |
this.statusStrip.Text = "<unknown>"; |
// |
// toolStripStatusLabel1 |
// |
this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; |
this.toolStripStatusLabel1.Size = new System.Drawing.Size(73, 17); |
this.toolStripStatusLabel1.Text = "<unknown>"; |
// |
// toolStrip1 |
// |
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { |
this.toolStripButton1, |
this.toolStripButton2, |
this.toolStripButton3}); |
this.toolStrip1.Location = new System.Drawing.Point(0, 0); |
this.toolStrip1.Name = "toolStrip1"; |
this.toolStrip1.Size = new System.Drawing.Size(391, 54); |
this.toolStrip1.TabIndex = 2; |
this.toolStrip1.Text = "toolStrip1"; |
// |
// toolStripButton1 |
// |
this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image"))); |
this.toolStripButton1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; |
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.White; |
this.toolStripButton1.Name = "toolStripButton1"; |
this.toolStripButton1.Size = new System.Drawing.Size(59, 51); |
this.toolStripButton1.Text = "GPS Data"; |
this.toolStripButton1.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; |
this.toolStripButton1.ToolTipText = "GPS Data"; |
this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click); |
// |
// toolStripButton2 |
// |
this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image"))); |
this.toolStripButton2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; |
this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.White; |
this.toolStripButton2.Name = "toolStripButton2"; |
this.toolStripButton2.Size = new System.Drawing.Size(56, 51); |
this.toolStripButton2.Text = "MK Data"; |
this.toolStripButton2.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; |
this.toolStripButton2.Click += new System.EventHandler(this.toolStripButton2_Click); |
// |
// toolStripButton3 |
// |
this.toolStripButton3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton3.Image"))); |
this.toolStripButton3.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; |
this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.White; |
this.toolStripButton3.Name = "toolStripButton3"; |
this.toolStripButton3.Size = new System.Drawing.Size(51, 51); |
this.toolStripButton3.Text = "Control"; |
this.toolStripButton3.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; |
this.toolStripButton3.Click += new System.EventHandler(this.toolStripButton3_Click); |
// |
// RoboBoardForm |
// |
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); |
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; |
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; |
this.ClientSize = new System.Drawing.Size(391, 428); |
this.Controls.Add(this.toolStrip1); |
this.Controls.Add(this.statusStrip); |
this.Controls.Add(this.MainPanel); |
this.DoubleBuffered = true; |
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; |
this.Name = "RoboBoardForm"; |
this.Text = "RoboBoard Monitor"; |
this.Load += new System.EventHandler(this.RoboBoardForm_Load); |
this.statusStrip.ResumeLayout(false); |
this.statusStrip.PerformLayout(); |
this.toolStrip1.ResumeLayout(false); |
this.toolStrip1.PerformLayout(); |
this.ResumeLayout(false); |
this.PerformLayout(); |
} |
#endregion |
private System.Windows.Forms.Panel MainPanel; |
private System.Windows.Forms.StatusStrip statusStrip; |
private System.Windows.Forms.ToolStrip toolStrip1; |
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; |
private System.Windows.Forms.ToolStripButton toolStripButton1; |
private System.Windows.Forms.ToolStripButton toolStripButton2; |
private System.Windows.Forms.ToolStripButton toolStripButton3; |
} |
} |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardForm.cs |
---|
0,0 → 1,200 |
using System; |
using System.Collections.Generic; |
using System.ComponentModel; |
using System.Data; |
using System.Drawing; |
using System.Text; |
using System.Windows.Forms; |
using winforms = System.Windows.Forms; |
using Microsoft.Ccr.Core; |
using Microsoft.Dss.ServiceModel.Dssp; |
namespace Robotics.RoboBoard |
{ |
partial class RoboBoardForm : Form |
{ |
RoboBoardEvents _eventsPort; |
enum PanelState { Idle, GPS, MKSensor, ExtenderBoard, RawData, Control }; |
public Int16[] MK_analog = new Int16[32]; |
public string[] Mk_analog_name = new string[32]; |
public Int16 Control_alt; |
public Int16 Control_roll; |
public Int16 Control_nick; |
public Int16 Control_gier; |
public Int16 Control_gas; |
int panelstate = (int)PanelState.Idle; |
public RoboBoardForm(RoboBoardEvents EventsPort) |
{ |
_eventsPort = EventsPort; |
InitializeComponent(); |
// UpdateStatus("<unknown>"); |
} |
public void UpdateStatus(string Status) { |
toolStripStatusLabel1.Text = Status; |
} |
/// <summary> |
/// posts the instace of the form to the main process |
/// </summary> |
/// <param name="sender"></param> |
/// <param name="e"></param> |
private void RoboBoardForm_Load(object sender, EventArgs e) |
{ |
_eventsPort.Post(new OnLoad(this)); |
} |
/// <summary> |
/// Invalidate the Panel area and trigger a repaint |
/// </summary> |
/// <param name="Command"></param> |
public void MonitorCommand(string Command) |
{ |
MainPanel.Invalidate(); |
} |
/// <summary> |
/// update data value |
/// </summary> |
/// <param name="index"></param> |
/// <param name="value"></param> |
/// <param name="name"></param> |
public void MonitorMKSensor(int index, Int16 value, string name) |
{ |
if (index > 31) return; |
MK_analog[index] = value; |
if (name == "") return; |
Mk_analog_name[index] = name; |
} |
public void MonitorMKSensorUpdate() |
{ |
MainPanel.Invalidate(); |
} |
/// <summary> |
/// |
/// </summary> |
/// <param name="sender"></param> |
/// <param name="e"></param> |
private void MainPanel_Paint(object sender, PaintEventArgs e) |
{ |
int i; |
Graphics dc = e.Graphics; |
Font stdFont = new Font("Arial", 10); |
SolidBrush stdBrush = new SolidBrush(Color.Green); |
Font sensorFont = new Font("Arial", 8); |
SolidBrush sensorBrush = new SolidBrush(Color.Black); |
switch (panelstate) |
{ |
case (int)PanelState.Control: |
dc.DrawString("Control Data Monitor", stdFont, stdBrush, 2, 2); |
dc.DrawString("Nick", sensorFont, sensorBrush, 10, 14); |
dc.DrawString(Control_nick.ToString(), sensorFont, sensorBrush, 200, 14); |
dc.DrawString("Roll", sensorFont, sensorBrush, 10, 24); |
dc.DrawString(Control_roll.ToString(), sensorFont, sensorBrush, 200, 24); |
dc.DrawString("Gier", sensorFont, sensorBrush, 10, 34); |
dc.DrawString(Control_gier.ToString(), sensorFont, sensorBrush, 200, 34); |
dc.DrawString("Gas", sensorFont, sensorBrush, 10, 44); |
dc.DrawString(Control_gas.ToString(), sensorFont, sensorBrush, 200, 44); |
dc.DrawString("Altitute", sensorFont, sensorBrush, 10, 54); |
dc.DrawString(Control_alt.ToString(), sensorFont, sensorBrush, 200, 54); |
break; |
case (int)PanelState.RawData: |
dc.DrawString("Raw Data", stdFont, stdBrush, 2, 2); |
break; |
case (int)PanelState.ExtenderBoard: |
dc.DrawString("Extender Board Data", stdFont, stdBrush, 2, 2); |
break; |
case (int)PanelState.GPS: |
dc.DrawString("GPS Data", stdFont, stdBrush, 10, 10); |
break; |
case (int)PanelState.MKSensor: |
dc.DrawString("Mikrokopter Sensors", stdFont, stdBrush, 2, 2); |
for (i = 0; i < 32; i++) |
{ |
if (Mk_analog_name[i] == null) |
{ |
dc.DrawString("<unknown>", sensorFont, sensorBrush, 10, (float)(14 + (i * 10))); |
} |
else |
{ |
dc.DrawString(Mk_analog_name[i], sensorFont, sensorBrush, 10, (float)(14 + (i * 10))); |
} |
dc.DrawString(MK_analog[i].ToString(), sensorFont, sensorBrush, 200, (float)(14 + (i * 10))); |
} |
break; |
case (int)PanelState.Idle: |
dc.DrawString("Select Mode (no mode selected)", stdFont, stdBrush, 2, 2); |
break; |
default: |
dc.DrawString("Select Mode", stdFont, stdBrush, 2, 2); |
break; |
} |
} |
private void toolStripButton1_Click(object sender, EventArgs e) |
{ |
panelstate = (int)PanelState.GPS; |
MainPanel.Invalidate(); |
} |
private void toolStripButton2_Click(object sender, EventArgs e) |
{ |
panelstate = (int)PanelState.MKSensor; |
MainPanel.Invalidate(); |
} |
private void toolStripButton3_Click(object sender, EventArgs e) |
{ |
panelstate = (int)PanelState.Control; |
MainPanel.Invalidate(); |
} |
} |
class RoboBoardEvents:PortSet <OnLoad,OnClosed> |
{ |
} |
class RoboBoardEvent |
{ |
private RoboBoardForm _rbForm; |
public RoboBoardForm RoboBoardForm |
{ |
get { return _rbForm; } |
set { _rbForm = value; } |
} |
public RoboBoardEvent(RoboBoardForm rbForm) |
{ |
_rbForm = rbForm; |
} |
} |
class OnLoad : RoboBoardEvent |
{ |
public OnLoad(RoboBoardForm form) |
: base(form) |
{ |
} |
} |
class OnClosed : RoboBoardEvent |
{ |
public OnClosed(RoboBoardForm form) |
: base(form) |
{ |
} |
} |
} |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardForm.resx |
---|
0,0 → 1,158 |
<?xml version="1.0" encoding="utf-8"?> |
<root> |
<!-- |
Microsoft ResX Schema |
Version 2.0 |
The primary goals of this format is to allow a simple XML format |
that is mostly human readable. The generation and parsing of the |
various data types are done through the TypeConverter classes |
associated with the data types. |
Example: |
... ado.net/XML headers & schema ... |
<resheader name="resmimetype">text/microsoft-resx</resheader> |
<resheader name="version">2.0</resheader> |
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> |
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> |
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> |
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> |
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> |
<value>[base64 mime encoded serialized .NET Framework object]</value> |
</data> |
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> |
<comment>This is a comment</comment> |
</data> |
There are any number of "resheader" rows that contain simple |
name/value pairs. |
Each data row contains a name, and value. The row also contains a |
type or mimetype. Type corresponds to a .NET class that support |
text/value conversion through the TypeConverter architecture. |
Classes that don't support this are serialized and stored with the |
mimetype set. |
The mimetype is used for serialized objects, and tells the |
ResXResourceReader how to depersist the object. This is currently not |
extensible. For a given mimetype the value must be set accordingly: |
Note - application/x-microsoft.net.object.binary.base64 is the format |
that the ResXResourceWriter will generate, however the reader can |
read any of the formats listed below. |
mimetype: application/x-microsoft.net.object.binary.base64 |
value : The object must be serialized with |
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter |
: and then encoded with base64 encoding. |
mimetype: application/x-microsoft.net.object.soap.base64 |
value : The object must be serialized with |
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter |
: and then encoded with base64 encoding. |
mimetype: application/x-microsoft.net.object.bytearray.base64 |
value : The object must be serialized into a byte array |
: using a System.ComponentModel.TypeConverter |
: and then encoded with base64 encoding. |
--> |
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> |
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> |
<xsd:element name="root" msdata:IsDataSet="true"> |
<xsd:complexType> |
<xsd:choice maxOccurs="unbounded"> |
<xsd:element name="metadata"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="value" type="xsd:string" minOccurs="0" /> |
</xsd:sequence> |
<xsd:attribute name="name" use="required" type="xsd:string" /> |
<xsd:attribute name="type" type="xsd:string" /> |
<xsd:attribute name="mimetype" type="xsd:string" /> |
<xsd:attribute ref="xml:space" /> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="assembly"> |
<xsd:complexType> |
<xsd:attribute name="alias" type="xsd:string" /> |
<xsd:attribute name="name" type="xsd:string" /> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="data"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> |
</xsd:sequence> |
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> |
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> |
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> |
<xsd:attribute ref="xml:space" /> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="resheader"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
</xsd:sequence> |
<xsd:attribute name="name" type="xsd:string" use="required" /> |
</xsd:complexType> |
</xsd:element> |
</xsd:choice> |
</xsd:complexType> |
</xsd:element> |
</xsd:schema> |
<resheader name="resmimetype"> |
<value>text/microsoft-resx</value> |
</resheader> |
<resheader name="version"> |
<value>2.0</value> |
</resheader> |
<resheader name="reader"> |
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
</resheader> |
<resheader name="writer"> |
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
</resheader> |
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> |
<value>17, 17</value> |
</metadata> |
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> |
<value>121, 17</value> |
</metadata> |
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> |
<data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
<value> |
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 |
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAANVJREFUWEftV8sS |
gCAI9NP9cxotChDr0kLN2EwHO8S6D9BS9ENmHbqkQtQApIDYCzcACSB04XQQDGAx8QlP/EAOaGSf0sE9 |
IwiEjmcvXmtNALF3yl6c36N7gpk4CtvikSDaYFI7lyxEyDFQP5EBJoUynVdcsAAZ44PpJO3GC1gARm8v |
EXgADMJJAexQ4+Z/AAA+TygQMpbniSpgiqo2rPwgp2cEE6IFc/afBtir5pwNonAQ3q4uED841Lwqi/1Z |
qByznSw5mBl79YON7TtTpdw9R2OKLxv19gHuq/t6ngAAAABJRU5ErkJggg== |
</value> |
</data> |
<data name="toolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
<value> |
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 |
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQhJREFUWEftV1sS |
gyAM1JtzNG5mjTYOhTyW2GI/YIbR8tgsIYnbdWnbJoytwhgy1IVFi4+ec746j72fiFFa043VGC5J0HsB |
6pEIYX2cujbOv0EvdGO5jCsC0r2yV0JYEGPQCyEscVMdjHcIeFgm65TSMc9PJw5CWOq9KcZDMeBhqcx5 |
Y5GKbhpqWWRhiV4QNlinNzMBwUKqF6/RvFAWrHBVbUAKa1ZFlOYsLO8q1flt2TND7Oc3YEDTCQwwTiYq |
AintJ6exYe1fCNDJr9MP9MDPg/CxNHy0ELlCYkoyUJi6npTkXUhGKTUnhDUl2ZRk13+5WsshMkoIxrC8 |
Qyoh+sG9hfVNGeVivQAs6H/3eOzbigAAAABJRU5ErkJggg== |
</value> |
</data> |
<data name="toolStripButton3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
<value> |
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 |
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAKtJREFUWEftleEO |
gCAIhH1035ykDcfIVjuFtqTmrB/5HceZpeTl5ABRITucUNdlGRwGsyAN1w6ECLLwEKhARnBxwF3IHbyB |
Y7IgAuy8rwDV89gWDMIWI+Am5QyX4b4RRoAU8C8HdDXoMxxEqrXCY3YnwGAWzXCZkfKXwFEB38JV36DA |
SWbQ07BX336k590XfHhf0XfOymugFaj6PXUIQbabtiGhz2/SgU0dOADesJv04V7zigAAAABJRU5ErkJg |
gg== |
</value> |
</data> |
</root> |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.csproj |
---|
0,0 → 1,145 |
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ProjectType>Local</ProjectType> |
<ProductVersion>8.0.50727</ProductVersion> |
<SchemaVersion>2.0</SchemaVersion> |
<ProjectGuid>{3600E088-E3C2-4193-8515-43DAB2B62E53}</ProjectGuid> |
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
<ApplicationIcon> |
</ApplicationIcon> |
<AssemblyKeyContainerName> |
</AssemblyKeyContainerName> |
<AssemblyName>RoboBoardService.Y2007.M08</AssemblyName> |
<RootNamespace>Robotics.RoboBoard</RootNamespace> |
<AssemblyOriginatorKeyFile>C:\Microsoft Robotics Studio (1.5)\samples\mrisamples.snk</AssemblyOriginatorKeyFile> |
<DefaultClientScript>JScript</DefaultClientScript> |
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> |
<DefaultTargetSchema>IE50</DefaultTargetSchema> |
<DelaySign>false</DelaySign> |
<SignAssembly>true</SignAssembly> |
<OutputType>Library</OutputType> |
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent> |
<StartupObject> |
</StartupObject> |
<FileUpgradeFlags> |
</FileUpgradeFlags> |
</PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
<OutputPath>C:\Microsoft Robotics Studio (1.5)\bin\</OutputPath> |
<AllowUnsafeBlocks>false</AllowUnsafeBlocks> |
<BaseAddress>285212672</BaseAddress> |
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow> |
<ConfigurationOverrideFile> |
</ConfigurationOverrideFile> |
<DefineConstants>DEBUG;TRACE;INSTRUMENTED</DefineConstants> |
<DocumentationFile> |
</DocumentationFile> |
<DebugSymbols>true</DebugSymbols> |
<FileAlignment>4096</FileAlignment> |
<NoStdLib>false</NoStdLib> |
<NoWarn>3003</NoWarn> |
<Optimize>false</Optimize> |
<RegisterForComInterop>false</RegisterForComInterop> |
<RemoveIntegerChecks>false</RemoveIntegerChecks> |
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> |
<WarningLevel>1</WarningLevel> |
</PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
<OutputPath>C:\Microsoft Robotics Studio (1.5)\bin\</OutputPath> |
<AllowUnsafeBlocks>false</AllowUnsafeBlocks> |
<BaseAddress>285212672</BaseAddress> |
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow> |
<ConfigurationOverrideFile> |
</ConfigurationOverrideFile> |
<DefineConstants>TRACE;INSTRUMENTED</DefineConstants> |
<DocumentationFile> |
</DocumentationFile> |
<DebugSymbols>true</DebugSymbols> |
<DebugType>pdbonly</DebugType> |
<DefineConstants>TRACE</DefineConstants> |
<FileAlignment>4096</FileAlignment> |
<NoStdLib>false</NoStdLib> |
<NoWarn>3003</NoWarn> |
<Optimize>false</Optimize> |
<RegisterForComInterop>false</RegisterForComInterop> |
<RemoveIntegerChecks>false</RemoveIntegerChecks> |
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> |
<WarningLevel>1</WarningLevel> |
</PropertyGroup> |
<ItemGroup> |
<Reference Include="Ccr.Adapters.WinForms, Version=1.5.507.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> |
<Reference Include="DssRuntime"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="mscorlib"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="Ccr.Core"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="DssBase"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="System"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
<Reference Include="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86" /> |
<Reference Include="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> |
<Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" /> |
<Reference Include="System.Xml"> |
<SpecificVersion>False</SpecificVersion> |
<Private>False</Private> |
</Reference> |
</ItemGroup> |
<ItemGroup> |
<Compile Include="AssemblyInfo.cs" /> |
<Compile Include="SerialCom.cs" /> |
<Compile Include="Properties\Resources.Designer.cs"> |
<AutoGen>True</AutoGen> |
<DesignTime>True</DesignTime> |
<DependentUpon>Resources.resx</DependentUpon> |
</Compile> |
<Compile Include="RoboBoard.cs" /> |
<Compile Include="RoboBoardForm.cs"> |
<SubType>Form</SubType> |
</Compile> |
<Compile Include="RoboBoardForm.Designer.cs"> |
<DependentUpon>RoboBoardForm.cs</DependentUpon> |
</Compile> |
<Compile Include="RoboBoardTypes.cs" /> |
<AppDesigner Include="Properties" /> |
</ItemGroup> |
<ItemGroup> |
<Content Include="Control.bmp" /> |
<Content Include="Mk.bmp" /> |
<Content Include="RoboBoardService.manifest.xml" /> |
<Content Include="Sat.bmp" /> |
<Content Include="Sat.ico" /> |
</ItemGroup> |
<ItemGroup> |
<EmbeddedResource Include="Properties\Resources.resx"> |
<SubType>Designer</SubType> |
<Generator>ResXFileCodeGenerator</Generator> |
<LastGenOutput>Resources.Designer.cs</LastGenOutput> |
</EmbeddedResource> |
<EmbeddedResource Include="RoboBoardForm.resx"> |
<SubType>Designer</SubType> |
<DependentUpon>RoboBoardForm.cs</DependentUpon> |
</EmbeddedResource> |
</ItemGroup> |
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> |
<PropertyGroup Condition="'$(DelaySign)'!=''"> |
<ProxyDelaySign>/delaysign+</ProxyDelaySign> |
</PropertyGroup> |
<PropertyGroup> |
<PreBuildEvent> |
</PreBuildEvent> |
<PostBuildEvent>"C:\Microsoft Robotics Studio (1.5)\bin\dssproxy.exe" /dll:"$(TargetPath)" /proxyprojectpath:"$(ProjectDir)Proxy " /keyfile:"$(AssemblyOriginatorKeyFile)" $(ProxyDelaySign) $(CompactFrameworkProxyGen) /binpath:". " /referencepath:"C:\Microsoft Robotics Studio (1.5)\bin\ " /referencepath:"C:\Microsoft Robotics Studio (1.5)\bin\ "</PostBuildEvent> |
</PropertyGroup> |
</Project> |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.csproj.user |
---|
0,0 → 1,17 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ReferencePath>c:\microsoft robotics studio (1.5)\bin;c:\windows\microsoft.net\framework\v2.0.50727</ReferencePath> |
</PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
<StartWorkingDirectory>C:\Microsoft Robotics Studio (1.5)</StartWorkingDirectory> |
<StartAction>Program</StartAction> |
<StartProgram>C:\Microsoft Robotics Studio (1.5)\bin\dsshost.exe</StartProgram> |
<StartArguments>-port:50000 -tcpport:50001 -manifest:"C:\mikrokopter\RoboBoardService\RoboBoardService\RoboBoardService.manifest.xml"</StartArguments> |
</PropertyGroup> |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
<StartWorkingDirectory>C:\Microsoft Robotics Studio (1.5)</StartWorkingDirectory> |
<StartAction>Program</StartAction> |
<StartProgram>C:\Microsoft Robotics Studio (1.5)\bin\dsshost.exe</StartProgram> |
<StartArguments>-port:50000 -tcpport:50001 -manifest:"C:\Users\gunterl\Documents\Visual Studio 2005\Projects\RoboBoardService\RoboBoardService\RoboBoardService.manifest.xml"</StartArguments> |
</PropertyGroup> |
</Project> |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.manifest.xml |
---|
0,0 → 1,11 |
<?xml version="1.0" ?> |
<Manifest |
xmlns="http://schemas.microsoft.com/xw/2004/10/manifest.html" |
xmlns:dssp="http://schemas.microsoft.com/xw/2004/10/dssp.html" |
> |
<CreateServiceList> |
<ServiceRecordType> |
<dssp:Contract>http://schemas.tempuri.org/2007/08/roboboardservice.html</dssp:Contract> |
</ServiceRecordType> |
</CreateServiceList> |
</Manifest> |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.sln |
---|
0,0 → 1,20 |
 |
Microsoft Visual Studio Solution File, Format Version 9.00 |
# Visual Studio 2005 |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoboBoardService", "RoboBoardService.csproj", "{3600E088-E3C2-4193-8515-43DAB2B62E53}" |
EndProject |
Global |
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
Debug|Any CPU = Debug|Any CPU |
Release|Any CPU = Release|Any CPU |
EndGlobalSection |
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
{3600E088-E3C2-4193-8515-43DAB2B62E53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
{3600E088-E3C2-4193-8515-43DAB2B62E53}.Debug|Any CPU.Build.0 = Debug|Any CPU |
{3600E088-E3C2-4193-8515-43DAB2B62E53}.Release|Any CPU.ActiveCfg = Release|Any CPU |
{3600E088-E3C2-4193-8515-43DAB2B62E53}.Release|Any CPU.Build.0 = Release|Any CPU |
EndGlobalSection |
GlobalSection(SolutionProperties) = preSolution |
HideSolutionNode = FALSE |
EndGlobalSection |
EndGlobal |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardService.suo |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/RoboBoardTypes.cs |
---|
0,0 → 1,472 |
//------------------------------------------------------------------------------ |
// <auto-generated> |
// This code was generated by a tool. |
// Runtime Version:2.0.50727.312 |
// |
// Changes to this file may cause incorrect behavior and will be lost if |
// the code is regenerated. |
// </auto-generated> |
//------------------------------------------------------------------------------ |
using Microsoft.Ccr.Core; |
using Microsoft.Dss.Core.Attributes; |
using Microsoft.Dss.ServiceModel.Dssp; |
using Microsoft.Dss.Core.DsspHttp; |
using System; |
using System.Collections.Generic; |
using W3C.Soap; |
using roboboard = Robotics.RoboBoard; |
namespace Robotics.RoboBoard |
{ |
/// <summary> |
/// RoboBoard Contract class |
/// </summary> |
public sealed class Contract |
{ |
/// <summary> |
/// The Dss Service contract |
/// </summary> |
public const String Identifier = "http://schemas.tempuri.org/2007/08/roboboardservice.html"; |
} |
/// <summary> |
/// The RoboBoard State |
/// </summary> |
[DataContract()] |
public class RoboBoardState |
{ |
private string _ComPort = "COM1"; |
[DataMember] |
public string ComPort |
{ |
get { return _ComPort; } |
set { _ComPort = value; } |
} |
private string _Command; |
} |
/// <summary> |
/// RoboBoard Main Operations Port |
/// </summary> |
[ServicePort()] |
public class RoboBoardOperations : PortSet< |
DsspDefaultLookup, |
DsspDefaultDrop, |
Get, |
HttpGet, |
Replace, |
SetComPort, |
ReceiveCommand, |
SendCommand, |
Level, |
Control, |
SetAltitute, |
SetGas, |
SetGier, |
IncrementTick, |
Subscribe> |
{ |
} |
//------------------------------------------------------------------------- |
/// <summary> |
/// RoboBoard Get Operation |
/// </summary> |
public class Get : Get<GetRequestType, PortSet<RoboBoardState, Fault>> |
{ |
/// <summary> |
/// RoboBoard Get Operation |
/// </summary> |
public Get() |
{ |
} |
/// <summary> |
/// RoboBoard Get Operation |
/// </summary> |
public Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType body) : |
base(body) |
{ |
} |
/// <summary> |
/// RoboBoard Get Operation |
/// </summary> |
public Get(Microsoft.Dss.ServiceModel.Dssp.GetRequestType body, Microsoft.Ccr.Core.PortSet<RoboBoardState,W3C.Soap.Fault> responsePort) : |
base(body, responsePort) |
{ |
} |
} |
//------------------------------------------------------------------------- |
public class Replace : Replace<RoboBoardState, PortSet<DefaultReplaceResponseType, Fault>> |
{ |
} |
//------------------------------------------------------------------------- |
// Set Com Port Handler |
public class SetComPort : Update<SetComPortRequest, |
PortSet<DefaultUpdateResponseType, Fault>> |
{ |
public SetComPort() |
{ |
} |
public SetComPort(string Portname) |
: base(new SetComPortRequest(Portname)) |
{ |
} |
} |
[DataContract] |
public class SetComPortRequest |
{ |
public SetComPortRequest() |
{ |
} |
public SetComPortRequest(string Portname) |
{ |
PortName = Portname; |
} |
private string _PortName; |
[DataMember] |
public string PortName |
{ |
get { return _PortName; } |
set { _PortName = value; } |
} |
} |
//------------------------------------------------------------------------- |
// Receive Command Handler |
// tbd |
public class ReceiveCommand : Update<ReceiveCommandRequest, |
PortSet<DefaultUpdateResponseType, Fault>> |
{ |
public ReceiveCommand() |
{ |
} |
public ReceiveCommand(string Command) |
: base(new ReceiveCommandRequest(Command)) |
{ |
} |
} |
[DataContract] |
public class ReceiveCommandRequest |
{ |
public ReceiveCommandRequest() |
{ |
} |
public ReceiveCommandRequest(string command) |
{ |
Command = command; |
} |
private string _Command; |
[DataMember] |
public string Command |
{ |
get { return _Command; } |
set { _Command = value; } |
} |
} |
//------------------------------------------------------------------------- |
// Send Command Request Handler |
// tbd |
public class SendCommand : Update<SendCommandRequest, |
PortSet<DefaultUpdateResponseType, Fault>> |
{ |
public SendCommand() |
{ |
} |
public SendCommand(string Command) |
: base(new SendCommandRequest(Command)) |
{ |
} |
} |
[DataContract] |
public class SendCommandRequest |
{ |
public SendCommandRequest() |
{ |
} |
public SendCommandRequest(string command) |
{ |
Command = command; |
} |
private string _Command; |
[DataMember] |
public string Command |
{ |
get { return _Command; } |
set { _Command = value; } |
} |
} |
//------------------------------------------------------------------------- |
// Level Handler |
public class Level : Update<LevelRequest, |
PortSet<DefaultUpdateResponseType, Fault>> |
{ |
public Level() |
{ |
} |
public Level(int Nick, int Roll) |
: base(new LevelRequest(Nick,Roll)) |
{ |
} |
} |
[DataContract] |
public class LevelRequest |
{ |
public LevelRequest() |
{ |
} |
public LevelRequest(int nick, int roll) |
{ |
Nick = nick; |
Roll = roll; |
} |
private int _Roll; |
private int _Nick; |
[DataMember] |
public int Roll |
{ |
get { return _Roll; } |
set { _Roll = value; } |
} |
[DataMember] |
public int Nick |
{ |
get { return _Nick; } |
set { _Nick = value; } |
} |
} |
//------------------------------------------------------------------------- |
// Altitute Handler |
public class SetAltitute : Update<SetAltituteRequest, |
PortSet<DefaultUpdateResponseType, Fault>> |
{ |
public SetAltitute() |
{ |
} |
public SetAltitute(float Altitute) |
: base(new SetAltituteRequest(Altitute)) |
{ |
} |
} |
[DataContract] |
public class SetAltituteRequest |
{ |
public SetAltituteRequest() |
{ |
} |
public SetAltituteRequest(float altitute) |
{ |
Altitute = altitute; |
} |
private float _Altitute; |
[DataMember] |
public float Altitute |
{ |
get { return _Altitute; } |
set { _Altitute = value; } |
} |
} |
//------------------------------------------------------------------------- |
// Gier Handler |
public class SetGier : Update<SetGierRequest, |
PortSet<DefaultUpdateResponseType, Fault>> |
{ |
public SetGier() |
{ |
} |
public SetGier(float Gier) |
: base(new SetGierRequest(Gier)) |
{ |
} |
} |
[DataContract] |
public class SetGierRequest |
{ |
public SetGierRequest() |
{ |
} |
public SetGierRequest(float gier) |
{ |
Gier = gier; |
} |
private float _Gier; |
[DataMember] |
public float Gier |
{ |
get { return _Gier; } |
set { _Gier = value; } |
} |
} |
//------------------------------------------------------------------------- |
// Gas Handler |
public class SetGas : Update<SetGasRequest, |
PortSet<DefaultUpdateResponseType, Fault>> |
{ |
public SetGas() |
{ |
} |
public SetGas(float Gas) |
: base(new SetGasRequest(Gas)) |
{ |
} |
} |
[DataContract] |
public class SetGasRequest |
{ |
public SetGasRequest() |
{ |
} |
public SetGasRequest(float gas) |
{ |
Gas = gas; |
} |
private float _Gas; |
[DataMember] |
public float Gas |
{ |
get { return _Gas; } |
set { _Gas = value; } |
} |
} |
//------------------------------------------------------------------------- |
// Control Handler |
public class Control : Update<ControlRequest, |
PortSet<DefaultUpdateResponseType, Fault>> |
{ |
public Control() |
{ |
} |
public Control(float Nick, float Roll) |
: base(new ControlRequest(Nick,Roll)) |
{ |
} |
} |
[DataContract] |
public class ControlRequest |
{ |
public ControlRequest() |
{ |
} |
public ControlRequest(float nick, float roll) |
{ |
Nick = nick; |
Roll = roll; |
} |
private float _Roll; |
private float _Nick; |
[DataMember] |
public float Roll |
{ |
get { return _Roll; } |
set { _Roll = value; } |
} |
[DataMember] |
public float Nick |
{ |
get { return _Nick; } |
set { _Nick = value; } |
} |
} |
//------------------------------------------------------------------------- |
// Increment Tick Request Handler |
public class IncrementTick : Update<IncrementTickRequest, |
PortSet<DefaultUpdateResponseType, Fault>> |
{ |
public IncrementTick() |
{ |
} |
public IncrementTick(string Command) |
: base(new IncrementTickRequest(Command)) |
{ |
} |
} |
[DataContract] |
public class IncrementTickRequest |
{ |
public IncrementTickRequest() |
{ |
} |
public IncrementTickRequest(string command) |
{ |
Command = command; |
} |
private string _Command; |
[DataMember] |
public string Command |
{ |
get { return _Command; } |
set { _Command = value; } |
} |
} |
//------------------------------------------------------------------------- |
#region CODECLIP 01-1 |
public class Subscribe : Subscribe<SubscribeRequestType, PortSet<SubscribeResponseType, Fault>> |
{ |
} |
#endregion |
} |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Sat.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/Sat.ico |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/SerialCom.cs |
---|
0,0 → 1,403 |
using System; |
using System.Collections.Generic; |
using System.Text; |
using System.IO.Ports; |
using System.Threading; |
namespace Robotics.Serial |
{ |
class SerialCom |
{ |
public delegate void BotEventHandler(object sender, EventArgs ev); |
public static event BotEventHandler BotEvent; |
public string ComPort = "COM1"; |
public static SerialPort serialPort1;// = new SerialPort(); |
public bool isOpen = false; |
// --------------------------------------------------------------------------- |
/// <summary> |
/// Decode Message from the Roboboard |
/// </summary> |
/// <param name="message"></param> |
/// <returns></returns> |
// --------------------------------------------------------------------------- |
public static string DecodeMessage(string command) |
{ |
string message = command.Substring(0, command.Length - 2); |
string target = ""; |
target += (char)command[command.Length - 2]; |
target += (char)command[command.Length - 1]; |
//----------------------------------------------------------- |
// check CRC |
Int16 tmpcrc = 0; |
for (int i = 0; i < message.Length; i++) |
{ |
tmpcrc += (Int16)message[i]; |
} |
tmpcrc %= 4096; |
string crc = ""; |
crc += (char)((byte)'=' + (tmpcrc / 64)); |
crc += (char)((byte)'=' + (tmpcrc % 64)); |
if (crc != target) return ""; |
//----------------------------------------------------------- |
// decode message |
target = ""; |
message = command.Substring(3, command.Length - 5); |
int index = 0; |
uint a, b, c, d; |
uint x, y, z; |
int len = message.Length; |
message = message + "====="; |
while (index <= len) |
{ |
a = (uint)message[index++] - '='; |
b = (uint)message[index++] - '='; |
c = (uint)message[index++] - '='; |
d = (uint)message[index++] - '='; |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
target += (char)x; |
target += (char)y; |
target += (char)z; |
} |
return target; |
} |
// --------------------------------------------------------------------------- |
/// <summary> |
/// Encode Message to send to the Board |
/// </summary> |
/// <param name="message"></param> |
/// <returns></returns> |
// --------------------------------------------------------------------------- |
public static string EncodeMessage(string message) |
{ |
string target = ""; |
byte a, b, c; |
int len = message.Length; |
int ptr = 0; |
while (len > 0) |
{ |
if (len > 0) { a = (byte)message[ptr++]; len--; } else a = 0; |
if (len > 0) { b = (byte)message[ptr++]; len--; } else b = 0; |
if (len > 0) { c = (byte)message[ptr++]; len--; } else c = 0; |
target += (char)((a >> 2) + (byte)'='); |
target += (char)((((a & 0x03) << 4) | ((b & 0xf0) >> 4)) + (byte)'='); |
target += (char)((((b & 0x0f) << 2) | ((c & 0xc0) >> 6)) + (byte)'='); |
target += (char)((c & 0x3f) + (byte)'='); |
} |
return target; |
} |
// --------------------------------------------------------------------------- |
/// <summary> |
/// Creates a complete message including the command and the address byte |
/// header. It calls thr EncodeMessage function to encode the message body. |
/// command and adress byte will not be encoded. An additional 2 Byte CRC will |
/// be added at the end of the message |
/// </summary> |
/// <param name="cmd"></param> |
/// <param name="adr"></param> |
/// <param name="message"></param> |
/// <returns></returns> |
// --------------------------------------------------------------------------- |
public string CreateMessage(char cmd, char adr, string message) |
{ |
string target = ""; |
target += '#'; |
target += adr; |
target += cmd; |
target += EncodeMessage(message); |
//----------------------------------------------------------- |
//add CRC |
Int16 tmpcrc = 0; |
for (int i = 0; i < target.Length; i++) |
{ |
tmpcrc += (Int16)target[i]; |
} |
tmpcrc %= 4096; |
target += (char)((byte)'=' + (tmpcrc / 64)); |
target += (char)((byte)'=' + (tmpcrc % 64)); |
//----------------------------------------------------------- |
target += (char)'\r'; |
return target; |
} |
// --------------------------------------------------------------------------- |
/// <summary> |
/// Initialize the COM Port. ComPort must be set before calling this function |
/// </summary> |
/// <returns></returns> |
// --------------------------------------------------------------------------- |
public int InitPort() |
{ |
serialPort1 = new SerialPort(); |
serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived); |
try |
{ |
serialPort1.PortName = ComPort; |
serialPort1.BaudRate = 57600; |
serialPort1.DataBits = 8; |
serialPort1.Open(); |
serialPort1.DiscardInBuffer(); |
serialPort1.DiscardOutBuffer(); |
isOpen = true; |
} |
catch |
{ |
isOpen = false; |
return 1; |
} |
return 0; |
} |
// --------------------------------------------------------------------------- |
/// <summary> |
/// Writes a string to the Com Port |
/// </summary> |
/// <param name="data"></param> |
// --------------------------------------------------------------------------- |
public void SerialWrite(string data) |
{ |
serialPort1.Write(data); |
} |
// --------------------------------------------------------------------------- |
/// <summary> |
/// Writes a string to the comport and adds a CR/LF at the end |
/// </summary> |
/// <param name="data"></param> |
// --------------------------------------------------------------------------- |
public void SerialWriteLine(string data) |
{ |
serialPort1.WriteLine(data); |
} |
// --------------------------------------------------------------------------- |
/// <summary> |
/// colse the COm port if open |
/// </summary> |
// --------------------------------------------------------------------------- |
public void ClosePort() |
{ |
if (isOpen) |
{ |
serialPort1.Close(); |
} |
} |
// --------------------------------------------------------------------------- |
/// <summary> |
/// Message functions |
/// </summary> |
// --------------------------------------------------------------------------- |
public string GetLastMessage() |
{ |
if (messagevalid == true) |
{ |
return botmessage; |
} |
else return ""; |
} |
public bool IsMessageValid() |
{ |
return messagevalid; |
} |
public bool IsMessageError() |
{ |
return messageerror; |
} |
public bool IsMessageOverrun() |
{ |
return messageoverrun; |
} |
public void InvalidateMessage() |
{ |
messagevalid = false; |
messageerror = false; |
messageoverrun = false; |
} |
public char GetMessageCmd() |
{ |
return message_cmd; |
} |
public char GetMessageAdr() |
{ |
return message_adr; |
} |
public string MessageAddByte(byte value, string command) |
{ |
command = command + (char)value; |
return command; |
} |
public string MessageAddInt16(Int16 value, string command) |
{ |
byte s = 0; |
s = (byte)value; |
command = command + (char)s; |
Int16 value1 = (Int16)(value >> 8); |
s = (byte)value1; |
command = command + (char)s; |
return command; |
} |
public string MessageAddInt32(Int32 value, string command) |
{ |
byte s = 0; |
s = (byte)value; |
command = command + (char)s; |
Int32 value1 = (Int32)(value >> 8); |
s = (byte)value1; |
command = command + (char)s; |
value1 = (Int32)(value >> 8); |
s = (byte)value1; |
command = command + (char)s; |
value1 = (Int32)(value >> 8); |
s = (byte)value1; |
command = command + (char)s; |
return command; |
} |
public byte MessageReadByte(string command) |
{ |
byte bvalue = (byte)command[0]; |
return bvalue; |
} |
public Int16 MessageReadInt16(string command) |
{ |
int index = 0; |
Int16 tmp2; |
Int16 result; |
Int16 tmp; |
tmp2 = (Int16)command[index++]; |
result = (Int16)command[index++]; |
result = (Int16)(result << 8); |
result += (Int16)tmp2; |
return result; |
} |
public Int32 MessageReadInt32(string command) |
{ |
int index = 0; |
Int32 tmp0; |
Int32 tmp1; |
Int32 tmp2; |
Int32 result; |
Int16 tmp; |
tmp0 = (Int32)command[index++]; |
tmp1 = (Int32)command[index++]; |
tmp2 = (Int32)command[index++]; |
result = (Int32)command[index++]; |
result = (Int32)(result << 8); |
result += (Int32)tmp2; |
result = (Int32)(result << 8); |
result += (Int32)tmp1; |
result = (Int32)(result << 8); |
result += (Int32)tmp0; |
return result; |
} |
// --------------------------------------------------------------------------- |
/// <summary> |
/// serial data receive message handler. |
/// </summary> |
/// <param name="sender"></param> |
/// <param name="e"></param> |
// --------------------------------------------------------------------------- |
private static string command; |
private static bool messagevalid = false; |
private static bool messageerror = false; |
private static bool messageoverrun = false; |
private static char message_cmd = (char)0; |
private static char message_adr = (char)0; |
private static int receiver_status = 0; |
private static string botmessage; |
private static void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) |
{ |
int data; |
EventArgs ev = new EventArgs(); |
while (serialPort1.BytesToRead > 0) |
{ |
data = serialPort1.ReadChar(); |
//Console.Write((char)data); |
switch (receiver_status) |
{ |
case 0: |
if (data.CompareTo('#') == 0) |
{ |
command = "#"; |
receiver_status++; |
} |
break; |
case 1: |
message_adr = (char)data; |
command = command + (char)data; |
receiver_status++; |
break; |
case 2: |
message_cmd = (char)data; |
command = command + (char)data; |
receiver_status++; |
break; |
case 3: |
if ((data.CompareTo(13) != 0) && (data.CompareTo(10) != 0)) |
{ |
command = command + (char)data; |
if (command.Length > 350) |
{ |
command = ""; |
serialPort1.DiscardInBuffer(); |
} |
} |
else |
{ |
if (messagevalid == true) |
{ |
messageoverrun = true; |
} |
else |
{ |
botmessage = DecodeMessage(command); |
if (botmessage == "") |
{ |
messageerror = true; |
} |
else |
{ |
messagevalid = true; |
} |
} |
BotEvent(sender, ev); |
receiver_status = 0; |
command = ""; |
} |
break; |
} |
} |
} |
} |
} |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/ResolveAssemblyReference.cache |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/RoboBoardService.Y2007.M08.dll |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/RoboBoardService.Y2007.M08.pdb |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/RoboBoardService.csproj.GenerateResource.Cache |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/Robotics.RoboBoard.Properties.Resources.resources |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/Robotics.RoboBoard.RoboBoardForm.resources |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/RoboBoardService.csproj.FileList.txt |
---|
0,0 → 1,8 |
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.dll |
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.pdb |
obj\Debug\ResolveAssemblyReference.cache |
obj\Debug\Robotics.RoboBoard.Properties.Resources.resources |
obj\Debug\Robotics.RoboBoard.RoboBoardForm.resources |
obj\Debug\RoboBoardService.csproj.GenerateResource.Cache |
obj\Debug\RoboBoardService.Y2007.M08.dll |
obj\Debug\RoboBoardService.Y2007.M08.pdb |
/Microsoft Robotics Studio/MSRS Service/RoboBoardService/obj/RoboBoardService.csproj.FileListAbsolute.txt |
---|
0,0 → 1,14 |
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.dll |
C:\Microsoft Robotics Studio (1.5)\bin\RoboBoardService.Y2007.M08.pdb |
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\ResolveAssemblyReference.cache |
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\Robotics.RoboBoard.Properties.Resources.resources |
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\Robotics.RoboBoard.RoboBoardForm.resources |
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\RoboBoardService.csproj.GenerateResource.Cache |
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\RoboBoardService.Y2007.M08.dll |
C:\mikrokopter\RoboBoardService\RoboBoardService\obj\Debug\RoboBoardService.Y2007.M08.pdb |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\ResolveAssemblyReference.cache |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\Robotics.RoboBoard.Properties.Resources.resources |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\Robotics.RoboBoard.RoboBoardForm.resources |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\RoboBoardService.csproj.GenerateResource.Cache |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\RoboBoardService.Y2007.M08.dll |
C:\mikrokopter\svc\Projects\Microsoft Robotics Studio\MSRS Service\RoboBoardService\obj\Debug\RoboBoardService.Y2007.M08.pdb |
/Microsoft Robotics Studio/PCB/mikrokopter_extension1.T3000 |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/Roboboard/Main.c |
---|
0,0 → 1,285 |
/***************************************************************************** |
Project : Roboboard |
Date : 1/14/2007 |
Author : Gunter Logemann (C) ALL RIGHTS RESERVED |
Comments: This project is optimized to work with the Mikrocopter (www.mikrokopter.de) |
Redistributions of this source code (with or without modifications) or parts |
of this sourcode must retain the above copyright notice, this list of |
conditions and the following disclaimer. |
* Neither the name of the copyright holders nor the names of contributors may |
be used to endorse or promote products derived from this software without |
specific prior written permission. |
* The use of this source code permittet for non-commercial use (directly |
or indirectly) only. |
* Commercial use Is only permitted with our written permission by |
Gunter Logemann (gunter@pccon.de) |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGE. |
Chip type : ATmega8 |
Program type : Application |
Clock frequency : CPUSPEED |
*****************************************************************************/ |
#include <avr/interrupt.h> |
#include <avr/sleep.h> |
//#include <avr/signal.h> |
#include <avr/io.h> |
//#include <avr/stdio.h> |
#include "StdDefines.h" |
#include "Main.h" |
//#define CPUSPEED_20 |
//#define CPUSPEED_16 |
#define CPUSPEED_11059 |
// Macros |
#define WatchdogReset() asm("wdr") |
#define Wait() while(!(SPSR & (1<<SPIF))) |
// Define CPU speed dependant constants: |
#define MAX_RX_BUF 100 |
#define MAX_TX_BUF 100 |
unsigned volatile char SioTmp = 0; |
unsigned volatile char RxdBuffer[MAX_RX_BUF]; |
unsigned volatile char TxdBuffer[MAX_TX_BUF]; |
unsigned volatile char NeuerDatensatzEmpfangen = 0; |
unsigned volatile char UebertragungAbgeschlossen = 1; |
unsigned volatile char CntCrcError = 0; |
unsigned volatile char AnzahlEmpfangsBytes = 0; |
struct str_VersionInfo VersionInfo; |
struct str_AnalogData AnalogData; |
struct str_Exception Exception; |
// -------------------------------------------------------------------------- |
int uart_putchar (char c) |
{ |
UDR = c; |
return (0); |
} |
// -------------------------------------------------------------------------- |
SIGNAL(SIG_UART_TRANS) |
{ |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
{ |
ptr++; // die [0] wurde schon gesendet |
tmp_tx = TxdBuffer[ptr]; |
if((tmp_tx == '\r') || (ptr == MAX_TX_BUF)) |
{ |
ptr = 0; |
UebertragungAbgeschlossen = 1; |
} |
UDR = tmp_tx; |
} |
else ptr = 0; |
} |
// -------------------------------------------------------------------------- |
SIGNAL(SIG_UART_RECV) |
{ |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
SioTmp = UDR; |
if(buf_ptr >= MAX_RX_BUF) |
UartState = 0; |
if(SioTmp == '\r' && UartState == 2) |
{ |
UartState = 0; |
crc -= RxdBuffer[buf_ptr-2]; |
crc -= RxdBuffer[buf_ptr-1]; |
crc %= 4096; |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
CrcOkay = 0; |
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) |
{ |
CrcOkay = 1; |
} |
else |
{ |
CrcOkay = 0; |
CntCrcError++; |
} |
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet |
{ |
NeuerDatensatzEmpfangen = 1; |
AnzahlEmpfangsBytes = buf_ptr; |
RxdBuffer[buf_ptr] = '\r'; |
} |
} |
else |
switch(UartState) |
{ |
case 0: |
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet |
buf_ptr = 0; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc = SioTmp; |
break; |
case 1: // Adresse auswerten |
UartState++; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc += SioTmp; |
break; |
case 2: // Eingangsdaten sammeln |
RxdBuffer[buf_ptr] = SioTmp; |
if(buf_ptr < MAX_RX_BUF) buf_ptr++; |
else UartState = 0; |
crc += SioTmp; |
break; |
default: |
UartState = 0; |
break; |
} |
} |
// -------------------------------------------------------------------------- |
void AddCRC(unsigned int wieviele) |
{ |
unsigned int tmpCRC = 0,i; |
for(i = 0; i < wieviele;i++) |
{ |
tmpCRC += TxdBuffer[i]; |
} |
tmpCRC %= 4096; |
TxdBuffer[i++] = '=' + tmpCRC / 64; |
TxdBuffer[i++] = '=' + tmpCRC % 64; |
TxdBuffer[i++] = '\r'; |
UebertragungAbgeschlossen = 0; |
UDR = TxdBuffer[0]; |
} |
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len) |
{ |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
TxdBuffer[pt++] = '#'; // Startzeichen |
TxdBuffer[pt++] = modul; // Adresse (a=0; b=1,...) |
TxdBuffer[pt++] = cmd; // Commando |
while(len) |
{ |
if(len) { a = snd[ptr++]; len--;} else a = 0; |
if(len) { b = snd[ptr++]; len--;} else b = 0; |
if(len) { c = snd[ptr++]; len--;} else c = 0; |
TxdBuffer[pt++] = '=' + (a >> 2); |
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
TxdBuffer[pt++] = '=' + ( c & 0x3f); |
} |
AddCRC(pt); |
} |
//----------------------------------------------------------------------------- |
//main |
//main execution loop |
//----------------------------------------------------------------------------- |
int main(void) |
{ |
// int message structures; |
VersionInfo.identifier = XIDENTIFIER_VERSION; |
VersionInfo.majorversion = MAJORVERSION; |
VersionInfo.minorversion = MINORVERSION; |
AnalogData.identifier = XIDENTIFIER_ANALOG; |
Exception.identifier = XIDENTIFIER_EXCEPTION; |
// PORT D - unused right now |
PORTD = 0x10; |
DDRD = 0x00; |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
// USART initialization |
// Communication Parameters: 8 Data, 1 Stop, No Parity |
// USART Receiver: On |
// USART Transmitter: On |
// USART RX/TX interrupt enable |
// USART Mode: Asynchronous |
// USART Baud rate: 57600 |
UCSRA=0x00; |
UCSRB=0xD8; |
UCSRC=0x86; |
#ifdef CPUSPEED_20 //20.000MHz |
UBRRH=0x00; |
UBRRL=0x15; |
#endif |
#ifdef CPUSPEED_16 //16.000MHz |
UBRRH=0x00; |
UBRRL=0x10; |
#endif |
#ifdef CPUSPEED_11059 //11.059MHz |
UBRRH=0x00; |
UBRRL=0x0B; |
#endif |
// Enable interrupts |
sei(); |
NeuerDatensatzEmpfangen = 0; |
// main loop |
while (1) |
{ |
if(NeuerDatensatzEmpfangen==1) { |
switch(RxdBuffer[3]) |
{ |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
// version request |
case XIDENTIFIER_VERSION: |
SendOutData('X',0x00,(unsigned char *) &VersionInfo,sizeof(VersionInfo)); |
break; |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
case XIDENTIFIER_ANALOG: |
break; |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
default: |
Exception.errorcode = ERRORCODE_NOTIMPLEMENTED; |
SendOutData('X',0x00,(unsigned char *) &Exception,sizeof(VersionInfo)); |
} |
NeuerDatensatzEmpfangen=0; |
} |
} |
return(1); |
} /* main */ |
/Microsoft Robotics Studio/Roboboard/Main.h |
---|
0,0 → 1,71 |
/***************************************************************************** |
Project : Roboboard |
Date : 1/14/2007 |
Author : Gunter Logemann (C) ALL RIGHTS RESERVED |
Comments: This project is optimized to work with the Mikrocopter (www.mikrokopter.de) |
Redistributions of this source code (with or without modifications) or parts |
of this sourcode must retain the above copyright notice, this list of |
conditions and the following disclaimer. |
* Neither the name of the copyright holders nor the names of contributors may |
be used to endorse or promote products derived from this software without |
specific prior written permission. |
* The use of this source code permittet for non-commercial use (directly |
or indirectly) only. |
* Commercial use Is only permitted with our written permission by |
Gunter Logemann (gunter@pccon.de) |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGE. |
Chip type : ATmega8 |
Program type : Application |
Clock frequency : CPUSPEED |
*****************************************************************************/ |
#define XIDENTIFIER_EXCEPTION 0x00 |
#define XIDENTIFIER_VERSION 0x01 |
#define XIDENTIFIER_ANALOG 0x02 |
//--------------------------------------------------------------------------- |
struct str_VersionInfo |
{ |
unsigned char identifier; |
unsigned char majorversion; |
unsigned char minorversion; |
}; |
extern struct str_VersionInfo VersionInfo; |
#define MAJORVERSION 0x00 |
#define MINORVERSION 0x01 |
//--------------------------------------------------------------------------- |
struct str_AnalogData |
{ |
unsigned char identifier; |
int analog[8]; |
}; |
extern struct str_AnalogData AnalogData; |
//--------------------------------------------------------------------------- |
struct str_Exception |
{ |
unsigned char identifier; |
unsigned char errorcode; |
}; |
extern struct str_Exception Exception; |
#define ERRORCODE_NOTIMPLEMENTED 0x00 |
#define ERRORCODE_WRONGPARAMETER 0x01 |
/Microsoft Robotics Studio/Roboboard/Makefile |
---|
0,0 → 1,90 |
PRG = main |
OBJ = main.o \ |
MCU_TARGET = atmega8 |
OPTIMIZE = -O1 |
DEFS = |
LIBS = |
# You should not have to change anything below here. |
CC = avr-gcc |
# Override is only needed by avr-lib build system. |
override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) |
override LDFLAGS = -Wl,-Map,$(PRG).map |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
all: $(PRG).elf lst text eeprom |
$(PRG).elf: $(OBJ) |
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) |
clean: |
rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak |
rm -rf *.lst *.map $(EXTRA_CLEAN_FILES) |
lst: $(PRG).lst |
%.lst: %.elf |
$(OBJDUMP) -h -S $< > $@ |
# Rules for building the .text rom images |
text: hex bin srec |
hex: $(PRG).hex |
bin: $(PRG).bin |
srec: $(PRG).srec |
%.hex: %.elf |
$(OBJCOPY) -j .text -j .data -O ihex $< $@ |
%.srec: %.elf |
$(OBJCOPY) -j .text -j .data -O srec $< $@ |
%.bin: %.elf |
$(OBJCOPY) -j .text -j .data -O binary $< $@ |
# Rules for building the .eeprom rom images |
eeprom: ehex ebin esrec |
ehex: $(PRG)_eeprom.hex |
ebin: $(PRG)_eeprom.bin |
esrec: $(PRG)_eeprom.srec |
%_eeprom.hex: %.elf |
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@ |
%_eeprom.srec: %.elf |
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@ |
%_eeprom.bin: %.elf |
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@ |
# Every thing below here is used by avr-libc's build system and can be ignored |
# by the casual user. |
FIG2DEV = fig2dev |
EXTRA_CLEAN_FILES = *.bin *.srec |
dox: eps png pdf |
eps: $(PRG).eps |
png: $(PRG).png |
pdf: $(PRG).pdf |
%.eps: %.fig |
$(FIG2DEV) -L eps $< $@ |
%.pdf: %.fig |
$(FIG2DEV) -L pdf $< $@ |
%.png: %.fig |
$(FIG2DEV) -L png $< $@ |
/Microsoft Robotics Studio/Roboboard/RoboBoard.pnproj |
---|
0,0 → 1,0 |
<Project name="MKvideooverlay"><File path="Main.c"></File><File path="Main.h"></File><File path="main.hex"></File><File path="main_eeprom.hex"></File><File path="Makefile"></File><File path="overlay.sch"></File><File path="StdDefines.h"></File><File path="main.lst"></File></Project> |
/Microsoft Robotics Studio/Roboboard/RoboBoard.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="MKvideooverlay" x="true"></e></ViewState></pd> |
/Microsoft Robotics Studio/Roboboard/StdDefines.h |
---|
0,0 → 1,51 |
/******************************************************************************* |
File: StdDefines.h |
Standard definitions file. |
Created: 1.00 04/14/03 GND Gary Dion |
Version: 1.00 |
Revisions: 1.00 04/14/03 GND Initial Release. |
*******************************************************************************/ |
/* General use definitions */ |
# define TRUE (1) |
# define FALSE (0) |
# define ON (1) |
# define OFF (0) |
# define HI (1) |
# define LO (0) |
/* General status constants. */ |
# define PASS (1) |
# define OK (PASS) |
# define FAIL (0) |
# define ERROR (FAIL) |
/* Define PUBLIC as extern. */ |
#define PUBLIC extern |
/* Define PRIVATE as static. */ |
#define PRIVATE static |
/* Scalar type definitions */ |
typedef char INT8; |
typedef unsigned char UINT8; |
typedef unsigned char UCHAR; |
typedef unsigned char BOOL; |
typedef int INT16; |
typedef unsigned int UINT16; |
typedef unsigned int UINT; |
typedef short SHORT; |
typedef unsigned short USHORT; |
typedef long INT32; |
typedef unsigned long UINT32; |
typedef unsigned long ULONG; |
typedef long STATUS; |
/Microsoft Robotics Studio/Roboboard/main.bin |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/Roboboard/main.elf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Microsoft Robotics Studio/Roboboard/main.hex |
---|
0,0 → 1,74 |
:1000000012C02CC02BC02AC029C028C027C026C0BF |
:1000100025C024C023C05CC021C025C01FC01EC095 |
:100020001DC01CC01BC011241FBECFE5D4E0DEBF25 |
:10003000CDBF10E0A0E6B0E0EEE7F4E002C005902E |
:100040000D92A236B107D9F711E0A2E6B0E001C0E7 |
:100050001D92AC34B107E1F7D4D110C2D1CF8CB925 |
:1000600080E090E008951F920F920FB60F92112436 |
:100070008F939F93EF93FF93809160008823D9F42F |
:1000800080916C0090916D00019690936D0080932B |
:100090006C00FC01E952FF4FE081ED3019F084362D |
:1000A000910539F410926D0010926C0081E08093FC |
:1000B0006000ECB904C010926D0010926C00FF91CA |
:1000C000EF919F918F910F900FBE0F901F901895F9 |
:1000D0001F920F920FB60F9211242F933F934F93BD |
:1000E0005F936F937F938F939F93AF93BF93EF93A0 |
:1000F000FF938CB18093620050916700543610F0EA |
:1001000010926600809162008D3009F056C0809197 |
:100110006600823009F051C010926600652F772783 |
:10012000FB01329723E730E0E20FF31F4081CB0160 |
:100130000197DC01A20FB31F2C9180916A0090916E |
:100140006B00841B9109821B91099F7090936B0037 |
:1001500080936A009C010024220F331F001C220F91 |
:10016000331F001C232F302D235C209369008F73D5 |
:10017000382F335C309368008081281729F48C91E4 |
:10018000381711F491E006C0809164008F5F80936E |
:10019000640090E080916300882309F06CC099238B |
:1001A00009F469C081E08093630050936500FB010E |
:1001B000ED58FF4F8DE080835EC0809166008130F6 |
:1001C00001F1813020F0823009F053C035C08091B8 |
:1001D0006200833239F480916300882319F481E04E |
:1001E00080936600809162008093730081E0809329 |
:1001F000670080916200992790936B0080936A005A |
:100200003AC082E08093660080916200E3E7F0E00C |
:10021000E50FF11D8083852F8F5F8093670020910C |
:10022000620080916A0090916B00820F911D909303 |
:100230006B0080936A001FC080916200E3E7F0E0EA |
:10024000E50FF11D8083543628F4852F8F5F80934E |
:10025000670002C0109266002091620080916A00DF |
:1002600090916B00820F911D90936B0080936A00B8 |
:1002700002C010926600FF91EF91BF91AF919F91E4 |
:100280008F917F916F915F914F913F912F910F903F |
:100290000FBE0F901F901895DC01892B29F420E0E8 |
:1002A00030E0A0E0B0E011C020E030E040E050E0FD |
:1002B00067ED70E0FA01E60FF71F8081280F311D0E |
:1002C0004F5F5F4FA417B507A9F73F70C90100241E |
:1002D000880F991F001C880F991F001C892F902DD3 |
:1002E000835C47ED50E0FD01E40FF51F808311961C |
:1002F0002F73235CFD01E40FF51F20831196A40FDB |
:10030000B51F8DE08C93109260008091D7008CB95E |
:100310000895FF920F931F93CF93DF938A01722F5B |
:1003200093E29093D7006093D8008093D900222362 |
:1003300019F4A3E0B0E05DC0A3E0B0E060E0C7ED79 |
:10034000D0E0F801E60FF11D90816F5F715019F454 |
:10035000FF2440E00FC0F801E60FF11D40816F5F00 |
:10036000715011F4FF2406C0F801E60FF11DF08072 |
:100370006F5F7150892F86958695835CFD01EC0F28 |
:10038000FD1F8083FD0131965527892F99278370A2 |
:10039000907082959295907F9827807F98279A01F8 |
:1003A000329522952F7023273F702327822B835C61 |
:1003B000EC0FFD1F8083FD0132964F705070440F8B |
:1003C000551F440F551F8F2D8295869586958370F6 |
:1003D000842B835CEC0FFD1F8083FD0133968F2DF2 |
:1003E0008F73835CEC0FFD1F80831496772309F0D5 |
:1003F000A8CFCD0151DFDF91CF911F910F91FF90D9 |
:1004000008950F931F93CF93DF9381E080936E0045 |
:1004100010926F008093700082E080933B011092F5 |
:10042000710080E182BB11BA1BB888ED8AB986E8F9 |
:1004300080BD10BC8BE089B97894109263000EE601 |
:1004400010E0C1E7D0E0809163008130E1F7809156 |
:100450007600813019F0823039F40DC023E0A80114 |
:1004600060E088E556DF07C01092720023E0AE011D |
:0E04700060E088E54EDF10926300E5CFFFCF1D |
:02047E0001007B |
:00000001FF |
/Microsoft Robotics Studio/Roboboard/main.lst |
---|
0,0 → 1,777 |
main.elf: file format elf32-avr |
Sections: |
Idx Name Size VMA LMA File off Algn |
0 .text 0000047e 00000000 00000000 00000094 2**1 |
CONTENTS, ALLOC, LOAD, READONLY, CODE |
1 .data 00000002 00800060 0000047e 00000512 2**0 |
CONTENTS, ALLOC, LOAD, DATA |
2 .bss 000000ea 00800062 00800062 00000514 2**0 |
ALLOC |
3 .stab 00000378 00000000 00000000 00000514 2**2 |
CONTENTS, READONLY, DEBUGGING |
4 .stabstr 00000071 00000000 00000000 0000088c 2**0 |
CONTENTS, READONLY, DEBUGGING |
5 .debug_aranges 00000020 00000000 00000000 000008fd 2**0 |
CONTENTS, READONLY, DEBUGGING |
6 .debug_pubnames 0000011d 00000000 00000000 0000091d 2**0 |
CONTENTS, READONLY, DEBUGGING |
7 .debug_info 000003bf 00000000 00000000 00000a3a 2**0 |
CONTENTS, READONLY, DEBUGGING |
8 .debug_abbrev 0000011c 00000000 00000000 00000df9 2**0 |
CONTENTS, READONLY, DEBUGGING |
9 .debug_line 00000367 00000000 00000000 00000f15 2**0 |
CONTENTS, READONLY, DEBUGGING |
10 .debug_frame 00000070 00000000 00000000 0000127c 2**2 |
CONTENTS, READONLY, DEBUGGING |
11 .debug_str 000001dc 00000000 00000000 000012ec 2**0 |
CONTENTS, READONLY, DEBUGGING |
12 .debug_loc 00000220 00000000 00000000 000014c8 2**0 |
CONTENTS, READONLY, DEBUGGING |
Disassembly of section .text: |
00000000 <__vectors>: |
0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end> |
2: 2c c0 rjmp .+88 ; 0x5c <__bad_interrupt> |
4: 2b c0 rjmp .+86 ; 0x5c <__bad_interrupt> |
6: 2a c0 rjmp .+84 ; 0x5c <__bad_interrupt> |
8: 29 c0 rjmp .+82 ; 0x5c <__bad_interrupt> |
a: 28 c0 rjmp .+80 ; 0x5c <__bad_interrupt> |
c: 27 c0 rjmp .+78 ; 0x5c <__bad_interrupt> |
e: 26 c0 rjmp .+76 ; 0x5c <__bad_interrupt> |
10: 25 c0 rjmp .+74 ; 0x5c <__bad_interrupt> |
12: 24 c0 rjmp .+72 ; 0x5c <__bad_interrupt> |
14: 23 c0 rjmp .+70 ; 0x5c <__bad_interrupt> |
16: 5c c0 rjmp .+184 ; 0xd0 <__vector_11> |
18: 21 c0 rjmp .+66 ; 0x5c <__bad_interrupt> |
1a: 25 c0 rjmp .+74 ; 0x66 <__vector_13> |
1c: 1f c0 rjmp .+62 ; 0x5c <__bad_interrupt> |
1e: 1e c0 rjmp .+60 ; 0x5c <__bad_interrupt> |
20: 1d c0 rjmp .+58 ; 0x5c <__bad_interrupt> |
22: 1c c0 rjmp .+56 ; 0x5c <__bad_interrupt> |
24: 1b c0 rjmp .+54 ; 0x5c <__bad_interrupt> |
00000026 <__ctors_end>: |
26: 11 24 eor r1, r1 |
28: 1f be out 0x3f, r1 ; 63 |
2a: cf e5 ldi r28, 0x5F ; 95 |
2c: d4 e0 ldi r29, 0x04 ; 4 |
2e: de bf out 0x3e, r29 ; 62 |
30: cd bf out 0x3d, r28 ; 61 |
00000032 <__do_copy_data>: |
32: 10 e0 ldi r17, 0x00 ; 0 |
34: a0 e6 ldi r26, 0x60 ; 96 |
36: b0 e0 ldi r27, 0x00 ; 0 |
38: ee e7 ldi r30, 0x7E ; 126 |
3a: f4 e0 ldi r31, 0x04 ; 4 |
3c: 02 c0 rjmp .+4 ; 0x42 <.do_copy_data_start> |
0000003e <.do_copy_data_loop>: |
3e: 05 90 lpm r0, Z+ |
40: 0d 92 st X+, r0 |
00000042 <.do_copy_data_start>: |
42: a2 36 cpi r26, 0x62 ; 98 |
44: b1 07 cpc r27, r17 |
46: d9 f7 brne .-10 ; 0x3e <__SP_H__> |
00000048 <__do_clear_bss>: |
48: 11 e0 ldi r17, 0x01 ; 1 |
4a: a2 e6 ldi r26, 0x62 ; 98 |
4c: b0 e0 ldi r27, 0x00 ; 0 |
4e: 01 c0 rjmp .+2 ; 0x52 <.do_clear_bss_start> |
00000050 <.do_clear_bss_loop>: |
50: 1d 92 st X+, r1 |
00000052 <.do_clear_bss_start>: |
52: ac 34 cpi r26, 0x4C ; 76 |
54: b1 07 cpc r27, r17 |
56: e1 f7 brne .-8 ; 0x50 <.do_clear_bss_loop> |
58: d4 d1 rcall .+936 ; 0x402 <main> |
5a: 10 c2 rjmp .+1056 ; 0x47c <_exit> |
0000005c <__bad_interrupt>: |
5c: d1 cf rjmp .-94 ; 0x0 <__heap_end> |
0000005e <uart_putchar>: |
struct str_Exception Exception; |
// -------------------------------------------------------------------------- |
int uart_putchar (char c) |
{ |
5e: 8c b9 out 0x0c, r24 ; 12 |
UDR = c; |
return (0); |
} |
60: 80 e0 ldi r24, 0x00 ; 0 |
62: 90 e0 ldi r25, 0x00 ; 0 |
64: 08 95 ret |
00000066 <__vector_13>: |
// -------------------------------------------------------------------------- |
SIGNAL(SIG_UART_TRANS) |
{ |
66: 1f 92 push r1 |
68: 0f 92 push r0 |
6a: 0f b6 in r0, 0x3f ; 63 |
6c: 0f 92 push r0 |
6e: 11 24 eor r1, r1 |
70: 8f 93 push r24 |
72: 9f 93 push r25 |
74: ef 93 push r30 |
76: ff 93 push r31 |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
78: 80 91 60 00 lds r24, 0x0060 |
7c: 88 23 and r24, r24 |
7e: d9 f4 brne .+54 ; 0xb6 <__vector_13+0x50> |
{ |
ptr++; // die [0] wurde schon gesendet |
80: 80 91 6c 00 lds r24, 0x006C |
84: 90 91 6d 00 lds r25, 0x006D |
88: 01 96 adiw r24, 0x01 ; 1 |
8a: 90 93 6d 00 sts 0x006D, r25 |
8e: 80 93 6c 00 sts 0x006C, r24 |
tmp_tx = TxdBuffer[ptr]; |
92: fc 01 movw r30, r24 |
94: e9 52 subi r30, 0x29 ; 41 |
96: ff 4f sbci r31, 0xFF ; 255 |
98: e0 81 ld r30, Z |
if((tmp_tx == '\r') || (ptr == MAX_TX_BUF)) |
9a: ed 30 cpi r30, 0x0D ; 13 |
9c: 19 f0 breq .+6 ; 0xa4 <__vector_13+0x3e> |
9e: 84 36 cpi r24, 0x64 ; 100 |
a0: 91 05 cpc r25, r1 |
a2: 39 f4 brne .+14 ; 0xb2 <__vector_13+0x4c> |
{ |
ptr = 0; |
a4: 10 92 6d 00 sts 0x006D, r1 |
a8: 10 92 6c 00 sts 0x006C, r1 |
UebertragungAbgeschlossen = 1; |
ac: 81 e0 ldi r24, 0x01 ; 1 |
ae: 80 93 60 00 sts 0x0060, r24 |
} |
UDR = tmp_tx; |
b2: ec b9 out 0x0c, r30 ; 12 |
b4: 04 c0 rjmp .+8 ; 0xbe <__vector_13+0x58> |
} |
else ptr = 0; |
b6: 10 92 6d 00 sts 0x006D, r1 |
ba: 10 92 6c 00 sts 0x006C, r1 |
be: ff 91 pop r31 |
c0: ef 91 pop r30 |
c2: 9f 91 pop r25 |
c4: 8f 91 pop r24 |
c6: 0f 90 pop r0 |
c8: 0f be out 0x3f, r0 ; 63 |
ca: 0f 90 pop r0 |
cc: 1f 90 pop r1 |
ce: 18 95 reti |
000000d0 <__vector_11>: |
} |
// -------------------------------------------------------------------------- |
SIGNAL(SIG_UART_RECV) |
{ |
d0: 1f 92 push r1 |
d2: 0f 92 push r0 |
d4: 0f b6 in r0, 0x3f ; 63 |
d6: 0f 92 push r0 |
d8: 11 24 eor r1, r1 |
da: 2f 93 push r18 |
dc: 3f 93 push r19 |
de: 4f 93 push r20 |
e0: 5f 93 push r21 |
e2: 6f 93 push r22 |
e4: 7f 93 push r23 |
e6: 8f 93 push r24 |
e8: 9f 93 push r25 |
ea: af 93 push r26 |
ec: bf 93 push r27 |
ee: ef 93 push r30 |
f0: ff 93 push r31 |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
SioTmp = UDR; |
f2: 8c b1 in r24, 0x0c ; 12 |
f4: 80 93 62 00 sts 0x0062, r24 |
if(buf_ptr >= MAX_RX_BUF) |
f8: 50 91 67 00 lds r21, 0x0067 |
fc: 54 36 cpi r21, 0x64 ; 100 |
fe: 10 f0 brcs .+4 ; 0x104 <__vector_11+0x34> |
UartState = 0; |
100: 10 92 66 00 sts 0x0066, r1 |
if(SioTmp == '\r' && UartState == 2) |
104: 80 91 62 00 lds r24, 0x0062 |
108: 8d 30 cpi r24, 0x0D ; 13 |
10a: 09 f0 breq .+2 ; 0x10e <__vector_11+0x3e> |
10c: 56 c0 rjmp .+172 ; 0x1ba <__vector_11+0xea> |
10e: 80 91 66 00 lds r24, 0x0066 |
112: 82 30 cpi r24, 0x02 ; 2 |
114: 09 f0 breq .+2 ; 0x118 <__vector_11+0x48> |
116: 51 c0 rjmp .+162 ; 0x1ba <__vector_11+0xea> |
{ |
UartState = 0; |
118: 10 92 66 00 sts 0x0066, r1 |
crc -= RxdBuffer[buf_ptr-2]; |
11c: 65 2f mov r22, r21 |
11e: 77 27 eor r23, r23 |
120: fb 01 movw r30, r22 |
122: 32 97 sbiw r30, 0x02 ; 2 |
124: 23 e7 ldi r18, 0x73 ; 115 |
126: 30 e0 ldi r19, 0x00 ; 0 |
128: e2 0f add r30, r18 |
12a: f3 1f adc r31, r19 |
12c: 40 81 ld r20, Z |
crc -= RxdBuffer[buf_ptr-1]; |
12e: cb 01 movw r24, r22 |
130: 01 97 sbiw r24, 0x01 ; 1 |
132: dc 01 movw r26, r24 |
134: a2 0f add r26, r18 |
136: b3 1f adc r27, r19 |
138: 2c 91 ld r18, X |
crc %= 4096; |
13a: 80 91 6a 00 lds r24, 0x006A |
13e: 90 91 6b 00 lds r25, 0x006B |
142: 84 1b sub r24, r20 |
144: 91 09 sbc r25, r1 |
146: 82 1b sub r24, r18 |
148: 91 09 sbc r25, r1 |
14a: 9f 70 andi r25, 0x0F ; 15 |
14c: 90 93 6b 00 sts 0x006B, r25 |
150: 80 93 6a 00 sts 0x006A, r24 |
crc1 = '=' + crc / 64; |
154: 9c 01 movw r18, r24 |
156: 00 24 eor r0, r0 |
158: 22 0f add r18, r18 |
15a: 33 1f adc r19, r19 |
15c: 00 1c adc r0, r0 |
15e: 22 0f add r18, r18 |
160: 33 1f adc r19, r19 |
162: 00 1c adc r0, r0 |
164: 23 2f mov r18, r19 |
166: 30 2d mov r19, r0 |
168: 23 5c subi r18, 0xC3 ; 195 |
16a: 20 93 69 00 sts 0x0069, r18 |
crc2 = '=' + crc % 64; |
16e: 8f 73 andi r24, 0x3F ; 63 |
170: 38 2f mov r19, r24 |
172: 33 5c subi r19, 0xC3 ; 195 |
174: 30 93 68 00 sts 0x0068, r19 |
CrcOkay = 0; |
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) |
178: 80 81 ld r24, Z |
17a: 28 17 cp r18, r24 |
17c: 29 f4 brne .+10 ; 0x188 <__vector_11+0xb8> |
17e: 8c 91 ld r24, X |
180: 38 17 cp r19, r24 |
182: 11 f4 brne .+4 ; 0x188 <__vector_11+0xb8> |
184: 91 e0 ldi r25, 0x01 ; 1 |
186: 06 c0 rjmp .+12 ; 0x194 <__vector_11+0xc4> |
{ |
CrcOkay = 1; |
} |
else |
{ |
CrcOkay = 0; |
CntCrcError++; |
188: 80 91 64 00 lds r24, 0x0064 |
18c: 8f 5f subi r24, 0xFF ; 255 |
18e: 80 93 64 00 sts 0x0064, r24 |
192: 90 e0 ldi r25, 0x00 ; 0 |
} |
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet |
194: 80 91 63 00 lds r24, 0x0063 |
198: 88 23 and r24, r24 |
19a: 09 f0 breq .+2 ; 0x19e <__vector_11+0xce> |
19c: 6c c0 rjmp .+216 ; 0x276 <__vector_11+0x1a6> |
19e: 99 23 and r25, r25 |
1a0: 09 f4 brne .+2 ; 0x1a4 <__vector_11+0xd4> |
1a2: 69 c0 rjmp .+210 ; 0x276 <__vector_11+0x1a6> |
{ |
NeuerDatensatzEmpfangen = 1; |
1a4: 81 e0 ldi r24, 0x01 ; 1 |
1a6: 80 93 63 00 sts 0x0063, r24 |
AnzahlEmpfangsBytes = buf_ptr; |
1aa: 50 93 65 00 sts 0x0065, r21 |
RxdBuffer[buf_ptr] = '\r'; |
1ae: fb 01 movw r30, r22 |
1b0: ed 58 subi r30, 0x8D ; 141 |
1b2: ff 4f sbci r31, 0xFF ; 255 |
1b4: 8d e0 ldi r24, 0x0D ; 13 |
1b6: 80 83 st Z, r24 |
1b8: 5e c0 rjmp .+188 ; 0x276 <__vector_11+0x1a6> |
} |
} |
else |
switch(UartState) |
1ba: 80 91 66 00 lds r24, 0x0066 |
1be: 81 30 cpi r24, 0x01 ; 1 |
1c0: 01 f1 breq .+64 ; 0x202 <__vector_11+0x132> |
1c2: 81 30 cpi r24, 0x01 ; 1 |
1c4: 20 f0 brcs .+8 ; 0x1ce <__vector_11+0xfe> |
1c6: 82 30 cpi r24, 0x02 ; 2 |
1c8: 09 f0 breq .+2 ; 0x1cc <__vector_11+0xfc> |
1ca: 53 c0 rjmp .+166 ; 0x272 <__vector_11+0x1a2> |
1cc: 35 c0 rjmp .+106 ; 0x238 <__vector_11+0x168> |
{ |
case 0: |
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet |
1ce: 80 91 62 00 lds r24, 0x0062 |
1d2: 83 32 cpi r24, 0x23 ; 35 |
1d4: 39 f4 brne .+14 ; 0x1e4 <__vector_11+0x114> |
1d6: 80 91 63 00 lds r24, 0x0063 |
1da: 88 23 and r24, r24 |
1dc: 19 f4 brne .+6 ; 0x1e4 <__vector_11+0x114> |
1de: 81 e0 ldi r24, 0x01 ; 1 |
1e0: 80 93 66 00 sts 0x0066, r24 |
buf_ptr = 0; |
RxdBuffer[buf_ptr++] = SioTmp; |
1e4: 80 91 62 00 lds r24, 0x0062 |
1e8: 80 93 73 00 sts 0x0073, r24 |
1ec: 81 e0 ldi r24, 0x01 ; 1 |
1ee: 80 93 67 00 sts 0x0067, r24 |
crc = SioTmp; |
1f2: 80 91 62 00 lds r24, 0x0062 |
1f6: 99 27 eor r25, r25 |
1f8: 90 93 6b 00 sts 0x006B, r25 |
1fc: 80 93 6a 00 sts 0x006A, r24 |
200: 3a c0 rjmp .+116 ; 0x276 <__vector_11+0x1a6> |
break; |
case 1: // Adresse auswerten |
UartState++; |
202: 82 e0 ldi r24, 0x02 ; 2 |
204: 80 93 66 00 sts 0x0066, r24 |
RxdBuffer[buf_ptr++] = SioTmp; |
208: 80 91 62 00 lds r24, 0x0062 |
20c: e3 e7 ldi r30, 0x73 ; 115 |
20e: f0 e0 ldi r31, 0x00 ; 0 |
210: e5 0f add r30, r21 |
212: f1 1d adc r31, r1 |
214: 80 83 st Z, r24 |
216: 85 2f mov r24, r21 |
218: 8f 5f subi r24, 0xFF ; 255 |
21a: 80 93 67 00 sts 0x0067, r24 |
crc += SioTmp; |
21e: 20 91 62 00 lds r18, 0x0062 |
222: 80 91 6a 00 lds r24, 0x006A |
226: 90 91 6b 00 lds r25, 0x006B |
22a: 82 0f add r24, r18 |
22c: 91 1d adc r25, r1 |
22e: 90 93 6b 00 sts 0x006B, r25 |
232: 80 93 6a 00 sts 0x006A, r24 |
236: 1f c0 rjmp .+62 ; 0x276 <__vector_11+0x1a6> |
break; |
case 2: // Eingangsdaten sammeln |
RxdBuffer[buf_ptr] = SioTmp; |
238: 80 91 62 00 lds r24, 0x0062 |
23c: e3 e7 ldi r30, 0x73 ; 115 |
23e: f0 e0 ldi r31, 0x00 ; 0 |
240: e5 0f add r30, r21 |
242: f1 1d adc r31, r1 |
244: 80 83 st Z, r24 |
if(buf_ptr < MAX_RX_BUF) buf_ptr++; |
246: 54 36 cpi r21, 0x64 ; 100 |
248: 28 f4 brcc .+10 ; 0x254 <__vector_11+0x184> |
24a: 85 2f mov r24, r21 |
24c: 8f 5f subi r24, 0xFF ; 255 |
24e: 80 93 67 00 sts 0x0067, r24 |
252: 02 c0 rjmp .+4 ; 0x258 <__vector_11+0x188> |
else UartState = 0; |
254: 10 92 66 00 sts 0x0066, r1 |
crc += SioTmp; |
258: 20 91 62 00 lds r18, 0x0062 |
25c: 80 91 6a 00 lds r24, 0x006A |
260: 90 91 6b 00 lds r25, 0x006B |
264: 82 0f add r24, r18 |
266: 91 1d adc r25, r1 |
268: 90 93 6b 00 sts 0x006B, r25 |
26c: 80 93 6a 00 sts 0x006A, r24 |
270: 02 c0 rjmp .+4 ; 0x276 <__vector_11+0x1a6> |
break; |
default: |
UartState = 0; |
272: 10 92 66 00 sts 0x0066, r1 |
276: ff 91 pop r31 |
278: ef 91 pop r30 |
27a: bf 91 pop r27 |
27c: af 91 pop r26 |
27e: 9f 91 pop r25 |
280: 8f 91 pop r24 |
282: 7f 91 pop r23 |
284: 6f 91 pop r22 |
286: 5f 91 pop r21 |
288: 4f 91 pop r20 |
28a: 3f 91 pop r19 |
28c: 2f 91 pop r18 |
28e: 0f 90 pop r0 |
290: 0f be out 0x3f, r0 ; 63 |
292: 0f 90 pop r0 |
294: 1f 90 pop r1 |
296: 18 95 reti |
00000298 <AddCRC>: |
break; |
} |
} |
// -------------------------------------------------------------------------- |
void AddCRC(unsigned int wieviele) |
{ |
298: dc 01 movw r26, r24 |
unsigned int tmpCRC = 0,i; |
for(i = 0; i < wieviele;i++) |
29a: 89 2b or r24, r25 |
29c: 29 f4 brne .+10 ; 0x2a8 <AddCRC+0x10> |
29e: 20 e0 ldi r18, 0x00 ; 0 |
2a0: 30 e0 ldi r19, 0x00 ; 0 |
2a2: a0 e0 ldi r26, 0x00 ; 0 |
2a4: b0 e0 ldi r27, 0x00 ; 0 |
2a6: 11 c0 rjmp .+34 ; 0x2ca <AddCRC+0x32> |
2a8: 20 e0 ldi r18, 0x00 ; 0 |
2aa: 30 e0 ldi r19, 0x00 ; 0 |
2ac: 40 e0 ldi r20, 0x00 ; 0 |
2ae: 50 e0 ldi r21, 0x00 ; 0 |
2b0: 67 ed ldi r22, 0xD7 ; 215 |
2b2: 70 e0 ldi r23, 0x00 ; 0 |
{ |
tmpCRC += TxdBuffer[i]; |
2b4: fa 01 movw r30, r20 |
2b6: e6 0f add r30, r22 |
2b8: f7 1f adc r31, r23 |
2ba: 80 81 ld r24, Z |
2bc: 28 0f add r18, r24 |
2be: 31 1d adc r19, r1 |
2c0: 4f 5f subi r20, 0xFF ; 255 |
2c2: 5f 4f sbci r21, 0xFF ; 255 |
2c4: a4 17 cp r26, r20 |
2c6: b5 07 cpc r27, r21 |
2c8: a9 f7 brne .-22 ; 0x2b4 <AddCRC+0x1c> |
} |
tmpCRC %= 4096; |
2ca: 3f 70 andi r19, 0x0F ; 15 |
TxdBuffer[i++] = '=' + tmpCRC / 64; |
2cc: c9 01 movw r24, r18 |
2ce: 00 24 eor r0, r0 |
2d0: 88 0f add r24, r24 |
2d2: 99 1f adc r25, r25 |
2d4: 00 1c adc r0, r0 |
2d6: 88 0f add r24, r24 |
2d8: 99 1f adc r25, r25 |
2da: 00 1c adc r0, r0 |
2dc: 89 2f mov r24, r25 |
2de: 90 2d mov r25, r0 |
2e0: 83 5c subi r24, 0xC3 ; 195 |
2e2: 47 ed ldi r20, 0xD7 ; 215 |
2e4: 50 e0 ldi r21, 0x00 ; 0 |
2e6: fd 01 movw r30, r26 |
2e8: e4 0f add r30, r20 |
2ea: f5 1f adc r31, r21 |
2ec: 80 83 st Z, r24 |
2ee: 11 96 adiw r26, 0x01 ; 1 |
TxdBuffer[i++] = '=' + tmpCRC % 64; |
2f0: 2f 73 andi r18, 0x3F ; 63 |
2f2: 23 5c subi r18, 0xC3 ; 195 |
2f4: fd 01 movw r30, r26 |
2f6: e4 0f add r30, r20 |
2f8: f5 1f adc r31, r21 |
2fa: 20 83 st Z, r18 |
2fc: 11 96 adiw r26, 0x01 ; 1 |
TxdBuffer[i++] = '\r'; |
2fe: a4 0f add r26, r20 |
300: b5 1f adc r27, r21 |
302: 8d e0 ldi r24, 0x0D ; 13 |
304: 8c 93 st X, r24 |
UebertragungAbgeschlossen = 0; |
306: 10 92 60 00 sts 0x0060, r1 |
UDR = TxdBuffer[0]; |
30a: 80 91 d7 00 lds r24, 0x00D7 |
30e: 8c b9 out 0x0c, r24 ; 12 |
310: 08 95 ret |
00000312 <SendOutData>: |
} |
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len) |
{ |
312: ff 92 push r15 |
314: 0f 93 push r16 |
316: 1f 93 push r17 |
318: cf 93 push r28 |
31a: df 93 push r29 |
31c: 8a 01 movw r16, r20 |
31e: 72 2f mov r23, r18 |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
TxdBuffer[pt++] = '#'; // Startzeichen |
320: 93 e2 ldi r25, 0x23 ; 35 |
322: 90 93 d7 00 sts 0x00D7, r25 |
TxdBuffer[pt++] = modul; // Adresse (a=0; b=1,...) |
326: 60 93 d8 00 sts 0x00D8, r22 |
TxdBuffer[pt++] = cmd; // Commando |
32a: 80 93 d9 00 sts 0x00D9, r24 |
while(len) |
32e: 22 23 and r18, r18 |
330: 19 f4 brne .+6 ; 0x338 <SendOutData+0x26> |
332: a3 e0 ldi r26, 0x03 ; 3 |
334: b0 e0 ldi r27, 0x00 ; 0 |
336: 5d c0 rjmp .+186 ; 0x3f2 <SendOutData+0xe0> |
338: a3 e0 ldi r26, 0x03 ; 3 |
33a: b0 e0 ldi r27, 0x00 ; 0 |
33c: 60 e0 ldi r22, 0x00 ; 0 |
33e: c7 ed ldi r28, 0xD7 ; 215 |
340: d0 e0 ldi r29, 0x00 ; 0 |
{ |
if(len) { a = snd[ptr++]; len--;} else a = 0; |
342: f8 01 movw r30, r16 |
344: e6 0f add r30, r22 |
346: f1 1d adc r31, r1 |
348: 90 81 ld r25, Z |
34a: 6f 5f subi r22, 0xFF ; 255 |
34c: 71 50 subi r23, 0x01 ; 1 |
if(len) { b = snd[ptr++]; len--;} else b = 0; |
34e: 19 f4 brne .+6 ; 0x356 <SendOutData+0x44> |
350: ff 24 eor r15, r15 |
352: 40 e0 ldi r20, 0x00 ; 0 |
354: 0f c0 rjmp .+30 ; 0x374 <SendOutData+0x62> |
356: f8 01 movw r30, r16 |
358: e6 0f add r30, r22 |
35a: f1 1d adc r31, r1 |
35c: 40 81 ld r20, Z |
35e: 6f 5f subi r22, 0xFF ; 255 |
360: 71 50 subi r23, 0x01 ; 1 |
if(len) { c = snd[ptr++]; len--;} else c = 0; |
362: 11 f4 brne .+4 ; 0x368 <SendOutData+0x56> |
364: ff 24 eor r15, r15 |
366: 06 c0 rjmp .+12 ; 0x374 <SendOutData+0x62> |
368: f8 01 movw r30, r16 |
36a: e6 0f add r30, r22 |
36c: f1 1d adc r31, r1 |
36e: f0 80 ld r15, Z |
370: 6f 5f subi r22, 0xFF ; 255 |
372: 71 50 subi r23, 0x01 ; 1 |
TxdBuffer[pt++] = '=' + (a >> 2); |
374: 89 2f mov r24, r25 |
376: 86 95 lsr r24 |
378: 86 95 lsr r24 |
37a: 83 5c subi r24, 0xC3 ; 195 |
37c: fd 01 movw r30, r26 |
37e: ec 0f add r30, r28 |
380: fd 1f adc r31, r29 |
382: 80 83 st Z, r24 |
384: fd 01 movw r30, r26 |
386: 31 96 adiw r30, 0x01 ; 1 |
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
388: 55 27 eor r21, r21 |
38a: 89 2f mov r24, r25 |
38c: 99 27 eor r25, r25 |
38e: 83 70 andi r24, 0x03 ; 3 |
390: 90 70 andi r25, 0x00 ; 0 |
392: 82 95 swap r24 |
394: 92 95 swap r25 |
396: 90 7f andi r25, 0xF0 ; 240 |
398: 98 27 eor r25, r24 |
39a: 80 7f andi r24, 0xF0 ; 240 |
39c: 98 27 eor r25, r24 |
39e: 9a 01 movw r18, r20 |
3a0: 32 95 swap r19 |
3a2: 22 95 swap r18 |
3a4: 2f 70 andi r18, 0x0F ; 15 |
3a6: 23 27 eor r18, r19 |
3a8: 3f 70 andi r19, 0x0F ; 15 |
3aa: 23 27 eor r18, r19 |
3ac: 82 2b or r24, r18 |
3ae: 83 5c subi r24, 0xC3 ; 195 |
3b0: ec 0f add r30, r28 |
3b2: fd 1f adc r31, r29 |
3b4: 80 83 st Z, r24 |
3b6: fd 01 movw r30, r26 |
3b8: 32 96 adiw r30, 0x02 ; 2 |
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
3ba: 4f 70 andi r20, 0x0F ; 15 |
3bc: 50 70 andi r21, 0x00 ; 0 |
3be: 44 0f add r20, r20 |
3c0: 55 1f adc r21, r21 |
3c2: 44 0f add r20, r20 |
3c4: 55 1f adc r21, r21 |
3c6: 8f 2d mov r24, r15 |
3c8: 82 95 swap r24 |
3ca: 86 95 lsr r24 |
3cc: 86 95 lsr r24 |
3ce: 83 70 andi r24, 0x03 ; 3 |
3d0: 84 2b or r24, r20 |
3d2: 83 5c subi r24, 0xC3 ; 195 |
3d4: ec 0f add r30, r28 |
3d6: fd 1f adc r31, r29 |
3d8: 80 83 st Z, r24 |
3da: fd 01 movw r30, r26 |
3dc: 33 96 adiw r30, 0x03 ; 3 |
TxdBuffer[pt++] = '=' + ( c & 0x3f); |
3de: 8f 2d mov r24, r15 |
3e0: 8f 73 andi r24, 0x3F ; 63 |
3e2: 83 5c subi r24, 0xC3 ; 195 |
3e4: ec 0f add r30, r28 |
3e6: fd 1f adc r31, r29 |
3e8: 80 83 st Z, r24 |
3ea: 14 96 adiw r26, 0x04 ; 4 |
3ec: 77 23 and r23, r23 |
3ee: 09 f0 breq .+2 ; 0x3f2 <SendOutData+0xe0> |
3f0: a8 cf rjmp .-176 ; 0x342 <SendOutData+0x30> |
} |
AddCRC(pt); |
3f2: cd 01 movw r24, r26 |
3f4: 51 df rcall .-350 ; 0x298 <AddCRC> |
3f6: df 91 pop r29 |
3f8: cf 91 pop r28 |
3fa: 1f 91 pop r17 |
3fc: 0f 91 pop r16 |
3fe: ff 90 pop r15 |
400: 08 95 ret |
00000402 <main>: |
} |
//----------------------------------------------------------------------------- |
//main |
//main execution loop |
//----------------------------------------------------------------------------- |
int main(void) |
{ |
402: 0f 93 push r16 |
404: 1f 93 push r17 |
406: cf 93 push r28 |
408: df 93 push r29 |
// int message structures; |
VersionInfo.identifier = XIDENTIFIER_VERSION; |
40a: 81 e0 ldi r24, 0x01 ; 1 |
40c: 80 93 6e 00 sts 0x006E, r24 |
VersionInfo.majorversion = MAJORVERSION; |
410: 10 92 6f 00 sts 0x006F, r1 |
VersionInfo.minorversion = MINORVERSION; |
414: 80 93 70 00 sts 0x0070, r24 |
AnalogData.identifier = XIDENTIFIER_ANALOG; |
418: 82 e0 ldi r24, 0x02 ; 2 |
41a: 80 93 3b 01 sts 0x013B, r24 |
Exception.identifier = XIDENTIFIER_EXCEPTION; |
41e: 10 92 71 00 sts 0x0071, r1 |
// PORT D - unused right now |
PORTD = 0x10; |
422: 80 e1 ldi r24, 0x10 ; 16 |
424: 82 bb out 0x12, r24 ; 18 |
DDRD = 0x00; |
426: 11 ba out 0x11, r1 ; 17 |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
// USART initialization |
// Communication Parameters: 8 Data, 1 Stop, No Parity |
// USART Receiver: On |
// USART Transmitter: On |
// USART RX/TX interrupt enable |
// USART Mode: Asynchronous |
// USART Baud rate: 57600 |
UCSRA=0x00; |
428: 1b b8 out 0x0b, r1 ; 11 |
UCSRB=0xD8; |
42a: 88 ed ldi r24, 0xD8 ; 216 |
42c: 8a b9 out 0x0a, r24 ; 10 |
UCSRC=0x86; |
42e: 86 e8 ldi r24, 0x86 ; 134 |
430: 80 bd out 0x20, r24 ; 32 |
#ifdef CPUSPEED_20 //20.000MHz |
UBRRH=0x00; |
UBRRL=0x15; |
#endif |
#ifdef CPUSPEED_16 //16.000MHz |
UBRRH=0x00; |
UBRRL=0x10; |
#endif |
#ifdef CPUSPEED_11059 //11.059MHz |
UBRRH=0x00; |
432: 10 bc out 0x20, r1 ; 32 |
UBRRL=0x0B; |
434: 8b e0 ldi r24, 0x0B ; 11 |
436: 89 b9 out 0x09, r24 ; 9 |
#endif |
// Enable interrupts |
sei(); |
438: 78 94 sei |
NeuerDatensatzEmpfangen = 0; |
43a: 10 92 63 00 sts 0x0063, r1 |
43e: 0e e6 ldi r16, 0x6E ; 110 |
440: 10 e0 ldi r17, 0x00 ; 0 |
442: c1 e7 ldi r28, 0x71 ; 113 |
444: d0 e0 ldi r29, 0x00 ; 0 |
// main loop |
while (1) |
{ |
if(NeuerDatensatzEmpfangen==1) { |
446: 80 91 63 00 lds r24, 0x0063 |
44a: 81 30 cpi r24, 0x01 ; 1 |
44c: e1 f7 brne .-8 ; 0x446 <main+0x44> |
switch(RxdBuffer[3]) |
44e: 80 91 76 00 lds r24, 0x0076 |
452: 81 30 cpi r24, 0x01 ; 1 |
454: 19 f0 breq .+6 ; 0x45c <main+0x5a> |
456: 82 30 cpi r24, 0x02 ; 2 |
458: 39 f4 brne .+14 ; 0x468 <__stack+0x9> |
45a: 0d c0 rjmp .+26 ; 0x476 <__stack+0x17> |
{ |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
// version request |
case XIDENTIFIER_VERSION: |
SendOutData('X',0x00,(unsigned char *) &VersionInfo,sizeof(VersionInfo)); |
45c: 23 e0 ldi r18, 0x03 ; 3 |
45e: a8 01 movw r20, r16 |
460: 60 e0 ldi r22, 0x00 ; 0 |
462: 88 e5 ldi r24, 0x58 ; 88 |
464: 56 df rcall .-340 ; 0x312 <SendOutData> |
466: 07 c0 rjmp .+14 ; 0x476 <__stack+0x17> |
break; |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
case XIDENTIFIER_ANALOG: |
break; |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
default: |
Exception.errorcode = ERRORCODE_NOTIMPLEMENTED; |
468: 10 92 72 00 sts 0x0072, r1 |
SendOutData('X',0x00,(unsigned char *) &Exception,sizeof(VersionInfo)); |
46c: 23 e0 ldi r18, 0x03 ; 3 |
46e: ae 01 movw r20, r28 |
470: 60 e0 ldi r22, 0x00 ; 0 |
472: 88 e5 ldi r24, 0x58 ; 88 |
474: 4e df rcall .-356 ; 0x312 <SendOutData> |
} |
NeuerDatensatzEmpfangen=0; |
476: 10 92 63 00 sts 0x0063, r1 |
47a: e5 cf rjmp .-54 ; 0x446 <main+0x44> |
0000047c <_exit>: |
47c: ff cf rjmp .-2 ; 0x47c <_exit> |
/Microsoft Robotics Studio/Roboboard/main.map |
---|
0,0 → 1,372 |
Archive member included because of file (symbol) |
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o) |
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o (exit) |
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o) |
main.o (__do_copy_data) |
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o) |
main.o (__do_clear_bss) |
Allocating common symbols |
Common symbol size file |
VersionInfo 0x3 main.o |
Exception 0x2 main.o |
RxdBuffer 0x64 main.o |
TxdBuffer 0x64 main.o |
AnalogData 0x11 main.o |
Discarded input sections |
.stabstr 0x00000000 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
Memory Configuration |
Name Origin Length Attributes |
text 0x00000000 0x00002000 xr |
data 0x00800060 0x0000ffa0 rw !x |
eeprom 0x00810000 0x00010000 rw !x |
*default* 0x00000000 0xffffffff |
Linker script and memory map |
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
LOAD main.o |
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a |
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4\libc.a |
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a |
.hash |
*(.hash) |
.dynsym |
*(.dynsym) |
.dynstr |
*(.dynstr) |
.gnu.version |
*(.gnu.version) |
.gnu.version_d |
*(.gnu.version_d) |
.gnu.version_r |
*(.gnu.version_r) |
.rel.init |
*(.rel.init) |
.rela.init |
*(.rela.init) |
.rel.text |
*(.rel.text) |
*(.rel.text.*) |
*(.rel.gnu.linkonce.t*) |
.rela.text |
*(.rela.text) |
*(.rela.text.*) |
*(.rela.gnu.linkonce.t*) |
.rel.fini |
*(.rel.fini) |
.rela.fini |
*(.rela.fini) |
.rel.rodata |
*(.rel.rodata) |
*(.rel.rodata.*) |
*(.rel.gnu.linkonce.r*) |
.rela.rodata |
*(.rela.rodata) |
*(.rela.rodata.*) |
*(.rela.gnu.linkonce.r*) |
.rel.data |
*(.rel.data) |
*(.rel.data.*) |
*(.rel.gnu.linkonce.d*) |
.rela.data |
*(.rela.data) |
*(.rela.data.*) |
*(.rela.gnu.linkonce.d*) |
.rel.ctors |
*(.rel.ctors) |
.rela.ctors |
*(.rela.ctors) |
.rel.dtors |
*(.rel.dtors) |
.rela.dtors |
*(.rela.dtors) |
.rel.got |
*(.rel.got) |
.rela.got |
*(.rela.got) |
.rel.bss |
*(.rel.bss) |
.rela.bss |
*(.rela.bss) |
.rel.plt |
*(.rel.plt) |
.rela.plt |
*(.rela.plt) |
.text 0x00000000 0x47e |
*(.vectors) |
.vectors 0x00000000 0x26 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
0x00000000 __vectors |
0x00000000 __vector_default |
*(.vectors) |
*(.progmem.gcc*) |
*(.progmem*) |
0x00000026 . = ALIGN (0x2) |
0x00000026 __trampolines_start = . |
*(.trampolines) |
.trampolines 0x00000026 0x0 linker stubs |
*(.trampolines*) |
0x00000026 __trampolines_end = . |
*(.jumptables) |
*(.jumptables*) |
*(.lowtext) |
*(.lowtext*) |
0x00000026 __ctors_start = . |
*(.ctors) |
0x00000026 __ctors_end = . |
0x00000026 __dtors_start = . |
*(.dtors) |
0x00000026 __dtors_end = . |
SORT(*)(.ctors) |
SORT(*)(.dtors) |
*(.init0) |
.init0 0x00000026 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
0x00000026 __init |
*(.init0) |
*(.init1) |
*(.init1) |
*(.init2) |
.init2 0x00000026 0xc c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
*(.init2) |
*(.init3) |
*(.init3) |
*(.init4) |
.init4 0x00000032 0x16 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o) |
0x00000032 __do_copy_data |
.init4 0x00000048 0x10 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o) |
0x00000048 __do_clear_bss |
*(.init4) |
*(.init5) |
*(.init5) |
*(.init6) |
*(.init6) |
*(.init7) |
*(.init7) |
*(.init8) |
*(.init8) |
*(.init9) |
.init9 0x00000058 0x4 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
*(.init9) |
*(.text) |
.text 0x0000005c 0x2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
0x0000005c __vector_1 |
0x0000005c __vector_12 |
0x0000005c __bad_interrupt |
0x0000005c __vector_6 |
0x0000005c __vector_3 |
0x0000005c __vector_17 |
0x0000005c __vector_7 |
0x0000005c __vector_5 |
0x0000005c __vector_4 |
0x0000005c __vector_9 |
0x0000005c __vector_2 |
0x0000005c __vector_15 |
0x0000005c __vector_8 |
0x0000005c __vector_14 |
0x0000005c __vector_10 |
0x0000005c __vector_16 |
0x0000005c __vector_18 |
.text 0x0000005e 0x41e main.o |
0x000000d0 __vector_11 |
0x00000066 __vector_13 |
0x00000298 AddCRC |
0x00000402 main |
0x00000312 SendOutData |
0x0000005e uart_putchar |
.text 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o) |
.text 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o) |
.text 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o) |
0x0000047c . = ALIGN (0x2) |
*(.text.*) |
.text.libgcc 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o) |
.text.libgcc 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o) |
.text.libgcc 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o) |
0x0000047c . = ALIGN (0x2) |
*(.fini9) |
.fini9 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o) |
0x0000047c exit |
0x0000047c _exit |
*(.fini9) |
*(.fini8) |
*(.fini8) |
*(.fini7) |
*(.fini7) |
*(.fini6) |
*(.fini6) |
*(.fini5) |
*(.fini5) |
*(.fini4) |
*(.fini4) |
*(.fini3) |
*(.fini3) |
*(.fini2) |
*(.fini2) |
*(.fini1) |
*(.fini1) |
*(.fini0) |
.fini0 0x0000047c 0x2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o) |
*(.fini0) |
0x0000047e _etext = . |
.data 0x00800060 0x2 load address 0x0000047e |
0x00800060 PROVIDE (__data_start, .) |
*(.data) |
.data 0x00800060 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
.data 0x00800060 0x1 main.o |
0x00800060 UebertragungAbgeschlossen |
.data 0x00800061 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o) |
.data 0x00800061 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o) |
.data 0x00800061 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o) |
*(.data*) |
*(.rodata) |
*(.rodata*) |
*(.gnu.linkonce.d*) |
0x00800062 . = ALIGN (0x2) |
*fill* 0x00800061 0x1 00 |
0x00800062 _edata = . |
0x00800062 PROVIDE (__data_end, .) |
.bss 0x00800062 0xea |
0x00800062 PROVIDE (__bss_start, .) |
*(.bss) |
.bss 0x00800062 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
.bss 0x00800062 0xc main.o |
0x00800062 SioTmp |
0x00800063 NeuerDatensatzEmpfangen |
0x00800064 CntCrcError |
0x00800065 AnzahlEmpfangsBytes |
.bss 0x0080006e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o) |
.bss 0x0080006e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o) |
.bss 0x0080006e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o) |
*(.bss*) |
*(COMMON) |
COMMON 0x0080006e 0xde main.o |
0x0080006e VersionInfo |
0x00800071 Exception |
0x00800073 RxdBuffer |
0x008000d7 TxdBuffer |
0x0080013b AnalogData |
0x0080014c PROVIDE (__bss_end, .) |
0x0000047e __data_load_start = LOADADDR (.data) |
0x00000480 __data_load_end = (__data_load_start + SIZEOF (.data)) |
.noinit 0x0080014c 0x0 |
0x0080014c PROVIDE (__noinit_start, .) |
*(.noinit*) |
0x0080014c PROVIDE (__noinit_end, .) |
0x0080014c _end = . |
0x0080014c PROVIDE (__heap_start, .) |
.eeprom 0x00810000 0x0 |
*(.eeprom*) |
0x00810000 __eeprom_end = . |
.stab 0x00000000 0x378 |
*(.stab) |
.stab 0x00000000 0x378 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
.stabstr 0x00000000 0x71 |
*(.stabstr) |
.stabstr 0x00000000 0x71 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o |
.stab.excl |
*(.stab.excl) |
.stab.exclstr |
*(.stab.exclstr) |
.stab.index |
*(.stab.index) |
.stab.indexstr |
*(.stab.indexstr) |
.comment |
*(.comment) |
.debug |
*(.debug) |
.line |
*(.line) |
.debug_srcinfo |
*(.debug_srcinfo) |
.debug_sfnames |
*(.debug_sfnames) |
.debug_aranges 0x00000000 0x20 |
*(.debug_aranges) |
.debug_aranges |
0x00000000 0x20 main.o |
.debug_pubnames |
0x00000000 0x11d |
*(.debug_pubnames) |
.debug_pubnames |
0x00000000 0x11d main.o |
.debug_info 0x00000000 0x3bf |
*(.debug_info) |
.debug_info 0x00000000 0x3bf main.o |
*(.gnu.linkonce.wi.*) |
.debug_abbrev 0x00000000 0x11c |
*(.debug_abbrev) |
.debug_abbrev 0x00000000 0x11c main.o |
.debug_line 0x00000000 0x367 |
*(.debug_line) |
.debug_line 0x00000000 0x367 main.o |
.debug_frame 0x00000000 0x70 |
*(.debug_frame) |
.debug_frame 0x00000000 0x70 main.o |
.debug_str 0x00000000 0x1dc |
*(.debug_str) |
.debug_str 0x00000000 0x1dc main.o |
0x236 (size before relaxing) |
.debug_loc 0x00000000 0x220 |
*(.debug_loc) |
.debug_loc 0x00000000 0x220 main.o |
.debug_macinfo |
*(.debug_macinfo) |
OUTPUT(main.elf elf32-avr) |
LOAD linker stubs |
/Microsoft Robotics Studio/Roboboard/main.srec |
---|
0,0 → 1,75 |
S00C00006D61696E2E7372656373 |
S113000012C02CC02BC02AC029C028C027C026C0BB |
S113001025C024C023C05CC021C025C01FC01EC091 |
S11300201DC01CC01BC011241FBECFE5D4E0DEBF21 |
S1130030CDBF10E0A0E6B0E0EEE7F4E002C005902A |
S11300400D92A236B107D9F711E0A2E6B0E001C0E3 |
S11300501D92AC34B107E1F7D4D110C2D1CF8CB921 |
S113006080E090E008951F920F920FB60F92112432 |
S11300708F939F93EF93FF93809160008823D9F42B |
S113008080916C0090916D00019690936D00809327 |
S11300906C00FC01E952FF4FE081ED3019F0843629 |
S11300A0910539F410926D0010926C0081E08093F8 |
S11300B06000ECB904C010926D0010926C00FF91C6 |
S11300C0EF919F918F910F900FBE0F901F901895F5 |
S11300D01F920F920FB60F9211242F933F934F93B9 |
S11300E05F936F937F938F939F93AF93BF93EF939C |
S11300F0FF938CB18093620050916700543610F0E6 |
S113010010926600809162008D3009F056C0809193 |
S11301106600823009F051C010926600652F77277F |
S1130120FB01329723E730E0E20FF31F4081CB015C |
S11301300197DC01A20FB31F2C9180916A0090916A |
S11301406B00841B9109821B91099F7090936B0033 |
S113015080936A009C010024220F331F001C220F8D |
S1130160331F001C232F302D235C209369008F73D1 |
S1130170382F335C309368008081281729F48C91E0 |
S1130180381711F491E006C0809164008F5F80936A |
S1130190640090E080916300882309F06CC0992387 |
S11301A009F469C081E08093630050936500FB010A |
S11301B0ED58FF4F8DE080835EC0809166008130F2 |
S11301C001F1813020F0823009F053C035C08091B4 |
S11301D06200833239F480916300882319F481E04A |
S11301E080936600809162008093730081E0809325 |
S11301F0670080916200992790936B0080936A0056 |
S11302003AC082E08093660080916200E3E7F0E008 |
S1130210E50FF11D8083852F8F5F80936700209108 |
S1130220620080916A0090916B00820F911D9093FF |
S11302306B0080936A001FC080916200E3E7F0E0E6 |
S1130240E50FF11D8083543628F4852F8F5F80934A |
S1130250670002C0109266002091620080916A00DB |
S113026090916B00820F911D90936B0080936A00B4 |
S113027002C010926600FF91EF91BF91AF919F91E0 |
S11302808F917F916F915F914F913F912F910F903B |
S11302900FBE0F901F901895DC01892B29F420E0E4 |
S11302A030E0A0E0B0E011C020E030E040E050E0F9 |
S11302B067ED70E0FA01E60FF71F8081280F311D0A |
S11302C04F5F5F4FA417B507A9F73F70C90100241A |
S11302D0880F991F001C880F991F001C892F902DCF |
S11302E0835C47ED50E0FD01E40FF51F8083119618 |
S11302F02F73235CFD01E40FF51F20831196A40FD7 |
S1130300B51F8DE08C93109260008091D7008CB95A |
S11303100895FF920F931F93CF93DF938A01722F57 |
S113032093E29093D7006093D8008093D90022235E |
S113033019F4A3E0B0E05DC0A3E0B0E060E0C7ED75 |
S1130340D0E0F801E60FF11D90816F5F715019F450 |
S1130350FF2440E00FC0F801E60FF11D40816F5FFC |
S1130360715011F4FF2406C0F801E60FF11DF0806E |
S11303706F5F7150892F86958695835CFD01EC0F24 |
S1130380FD1F8083FD0131965527892F992783709E |
S1130390907082959295907F9827807F98279A01F4 |
S11303A0329522952F7023273F702327822B835C5D |
S11303B0EC0FFD1F8083FD0132964F705070440F87 |
S11303C0551F440F551F8F2D8295869586958370F2 |
S11303D0842B835CEC0FFD1F8083FD0133968F2DEE |
S11303E08F73835CEC0FFD1F80831496772309F0D1 |
S11303F0A8CFCD0151DFDF91CF911F910F91FF90D5 |
S113040008950F931F93CF93DF9381E080936E0041 |
S113041010926F008093700082E080933B011092F1 |
S1130420710080E182BB11BA1BB888ED8AB986E8F5 |
S113043080BD10BC8BE089B97894109263000EE6FD |
S113044010E0C1E7D0E0809163008130E1F7809152 |
S11304507600813019F0823039F40DC023E0A80110 |
S113046060E088E556DF07C01092720023E0AE0119 |
S111047060E088E54EDF10926300E5CFFFCF19 |
S105047E010077 |
S9030000FC |