From d5ca50f4752550be7fd3157ea48a610e97006edf Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Tue, 2 Apr 2019 13:34:59 +0200 Subject: [PATCH] linux, go! --- driver/drv/b15f.cpp | 7 +- driver/drv/b15f.o | Bin 30832 -> 31512 bytes driver/main | Bin 65928 -> 65928 bytes firmware/B15F.elf | Bin 14612 -> 15308 bytes firmware/B15F.hex | 487 ++++++++++++++------------ firmware/Makefile | 30 +- firmware/MakefileWindoofs | 36 ++ firmware/b15f.aws | 2 +- firmware/global_vars.cpp | 6 + firmware/global_vars.h | 6 + firmware/main.cpp | 49 ++- firmware/requests.cpp | 26 +- firmware/{TLC5615.cpp => tlc5615.cpp} | 0 firmware/{TLC5615.h => tlc5615.h} | 0 firmware/usart.cpp | 29 +- firmware/usart.h | 9 + 16 files changed, 414 insertions(+), 273 deletions(-) mode change 100644 => 100755 firmware/B15F.elf create mode 100644 firmware/MakefileWindoofs rename firmware/{TLC5615.cpp => tlc5615.cpp} (100%) rename firmware/{TLC5615.h => tlc5615.h} (100%) diff --git a/driver/drv/b15f.cpp b/driver/drv/b15f.cpp index aa9c449..1130b0b 100644 --- a/driver/drv/b15f.cpp +++ b/driver/drv/b15f.cpp @@ -50,7 +50,6 @@ void B15F::init() if(!testConnection()) continue; - if(!testIntConv()) continue; @@ -136,12 +135,14 @@ std::vector B15F::getBoardInfo(void) uint8_t n = usart.readByte(); while(n--) { - uint8_t len = usart.readByte(); + uint8_t len = usart.readByte(); + std::cout << (int) len << std::endl; std::string str; - + while(len--) str += static_cast(usart.readByte()); + std::cout << str << std::endl; info.push_back(str); } diff --git a/driver/drv/b15f.o b/driver/drv/b15f.o index 0a9c58b5df94ac3d3d972804eb1adb9b3b4b8984..31747e13933dda0da3ab7896c5d1bfb3fa6975b7 100644 GIT binary patch delta 5027 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 diff --git a/driver/main b/driver/main index 3370cd82098b2f7ceac477ce751944499a9529f1..289cfc64e05f4c5ee3e1a7b5e36eb5cca2d9f708 100755 GIT binary patch delta 7170 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 delta 6843 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 F{{WZaBMtxn diff --git a/firmware/B15F.elf b/firmware/B15F.elf old mode 100644 new mode 100755 index c153cbd6d3b84ca0b814b710be4a0ccbbeae0adf..b34092436c3271b202b728aea4347c2659d3908b GIT binary patch delta 5571 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 diff --git a/firmware/B15F.hex b/firmware/B15F.hex index 582abad..10ac7c3 100644 --- a/firmware/B15F.hex +++ b/firmware/B15F.hex @@ -3,235 +3,264 @@ :100020000C947D000C947D000C947D000C947D005C :100030000C947D000C947D000C947D000C947D004C :100040000C947D000C947D000C947D000C947D003C -:100050000C947F000C947D000C947D000C947D002A +:100050000C9429010C947D000C947F000C947D007D :100060000C947D000C947D000C947D000C947D001C :100070000C947D000C947D000C947D000C947D000C -:100080000C947D000C947D000C947D0023012601CE -:1000900029011A012C012F013201350138013B01E0 -:1000A00020013E010D0711241FBECFEFD0E4DEBFBB -:1000B000CDBF11E0A0E0B1E0ECE8FEE000E00BBF56 -:1000C00002C007900D92A232B107D9F721E0A2E257 -:1000D000B1E001C01D92AA37B207E1F710E0C3E515 -:1000E000D0E004C02197FE010E943B07C235D10732 -:1000F000C9F70E94F1060C9444070C9400001F926B -:100100000F920FB60F9211240BB60F922F933F93BD -:100110004F935F936F937F938F939F93AF93BF930F -:10012000EF93FF938091C00083FF05C06FEF86E7D8 -:1001300091E00E94C701F8946091C60082E291E0CC -:100140000E943B047894FF91EF91BF91AF919F91F2 -:100150008F917F916F915F914F913F912F910F9070 -:100160000BBE0F900FBE0F901F90189589E791E07E -:100170000E94420160E086E791E00E9485016FEFF6 -:1001800086E791E00E94A60160E083E791E00E948B -:1001900085016FEF83E791E00E94A6016FEF80E792 -:1001A00091E00E94A60189E691E00E947D0282E230 -:1001B00091E00E947503789484B7877F84BF109282 -:1001C00060000FB6F894A8958091600088618093D4 -:1001D0006000109260000FBE0895CF930FB6F894A0 -:1001E000A895809160008861809360001092600003 -:1001F0000FBE6FEF83E791E00E94C70182E291E0BA -:100200000E942304C82F60E083E791E00E94C701A9 -:1002100098E088E10FB6F894A895809360000FBE2F -:1002200090936000A8958C2F90E0FC013197EC3002 -:10023000F10510F0CF910895EA5BFF4F0C943B0756 -:10024000CF910C947D06CF910C94F605CF910C9430 -:100250000706CF910C942606CF910C943306CF91CC -:100260000C944106CF910C944F06CF910C945806F4 -:10027000CF910C946106CF910C946F06CF910C94A2 -:100280008B06089584B1806B84B926988AB18C61FD -:100290008AB980E58CBD81E08DBD8BB1837E8BB941 -:1002A0005A9A5B9A5C9A08958BB1837E8BB98BB115 -:1002B00060FD10C090E0892B8BB98BB161FD10C03F -:1002C00090E0892B8BB98BB162FD10C090E0892B37 -:1002D0008BB9089594E0892B8BB98BB161FFF0CF76 -:1002E00098E0892B8BB98BB162FFF0CF90E1892B1D -:1002F0008BB908956EBD0DB407FEFDCF8EB5089580 -:10030000FC0171836083428308951F93CF93DF9331 -:10031000EC01162F6A81888199810E94540160E462 -:10032000888199810E947A0160E0888199810E9488 -:100330007A01612F888199810E947A0167E0888122 -:100340009981DF91CF911F910C9454011F93CF930A -:10035000DF93EC01162F6A81888199810E945401F4 -:1003600060E4888199810E947A0161E088819981A5 -:100370000E947A01612F888199810E947A0167E049 -:1003800088819981DF91CF911F910C9454011F9323 -:10039000CF93DF93EC01162F6A81888199810E94A7 -:1003A000540160E4888199810E947A0162E1888128 -:1003B00099810E947A01612F888199810E947A0136 -:1003C00067E088819981DF91CF911F910C9454014E -:1003D0001F93CF93DF93EC01162F6A818881998157 -:1003E0000E94540160E4888199810E947A0163E14E -:1003F000888199810E947A01612F888199810E9468 -:100400007A0167E088819981DF91CF911F910C94E7 -:1004100054011F93CF93DF93EC016A818881998106 -:100420000E94540161E4888199810E947A0162E10D -:10043000888199810E947A0160E0888199810E9477 -:100440007A01182F67E0888199810E945401812FD9 -:10045000DF91CF911F9108951F93CF93DF93EC010C -:100460006A81888199810E94540161E4888199811F -:100470000E947A0163E1888199810E947A0160E09B -:10048000888199810E947A01182F67E0888199817B -:100490000E945401812FDF91CF911F910895FC019B -:1004A00071836083428308950F931F93CF93DF93EB -:1004B000EC018B016A81888199810E945401B80105 -:1004C0000024660F771F001C660F771F001C672F24 -:1004D000702D888199810E947A01602F660F660FC6 -:1004E000888199810E947A0167E088819981DF91F2 -:1004F000CF911F910F910C94540110927C0087E8CA -:1005000080937A00089580917C00807E682B6093B0 -:100510007C0080917A00806480937A0083EA91E085 -:100520000197F1F700C0000080917A0086FDFCCFB2 -:10053000809178009091790008950F931F93CF9345 -:10054000DF9361E086E791E00E94C701C1E0D0E05F -:1005500001E010E02FEF84E39CE0215080409040C8 -:10056000E1F700C00000B8010C2E01C0660F0A942C -:10057000EAF786E791E00E94C7012196C930D105CC -:1005800049F7DF91CF911F910F9108950F931F931A -:10059000CF93DF9361E083E791E00E94C701C1E060 -:1005A000D0E001E010E02FEF84E39CE02150804098 -:1005B0009040E1F700C00000B8010C2E01C0660FAA -:1005C0000A94EAF783E791E00E94C7012196C930B7 -:1005D000D10549F7DF91CF911F910F910895CF93E6 -:1005E000DF93C0E0D0E0BE018DE691E00E945402AE -:1005F00087E893E10197F1F700C000002196C1154B -:1006000094E0D90781F72FE78AE196E021508040F6 -:100610009040E1F700C0000060E070E08DE691E0FE -:10062000DF91CF910C945402CF93DF93C0E0D0E0E0 -:10063000BE018AE691E00E94540287E893E10197A7 -:10064000F1F700C000002196C11594E0D90781F7A9 -:100650002FE78AE196E0215080409040E1F700C00A -:10066000000060E070E08AE691E0DF91CF910C94A9 -:1006700054020FB6F894A895809160008861809329 -:100680006000109260000FBE60E089E691E00E9479 -:100690008302BC018DE691E00E94540261E089E68C -:1006A00091E00E948302BC018AE691E00E9454021C -:1006B00086E791E00E942C02682F86E791E00E9475 -:1006C000C70180E791E00E942C02682F83E791E048 -:1006D0000E94C701D9CF0E949D020E94C6020E94BB -:1006E000EF020E9414030E94390382E08093C0004D -:1006F00088E98093C10086E08093C2001092C50013 -:1007000084E18093C40008958091C6008FE792E051 -:100710000197F1F700C000008091C00087FDF4CF81 -:1007200008958091C00085FFFCCF6093C6000895B6 -:100730008091C00085FFFCCF6093C6008091C0000F -:1007400085FFFCCF7093C60008958091C00085FF9F -:10075000FCCF4093C6009FEF940F442351F0FB0160 -:1007600021918091C00085FFFCCF2093C60091505D -:10077000B8F708958091C00085FFFCCF4093C60074 -:100780005FEF540F442309F45CC0FB0120E041E912 -:10079000DF0190818091C00085FFFCCF9093C6005F -:1007A00031969C91822F892780FD842790E0959532 -:1007B0008795282F80FF02C0242F2827822F90E0C2 -:1007C00095958795282F80FF02C0242F282730E099 -:1007D00035952795822F20FF02C0842F822790E035 -:1007E00095958795282F80FF02C0242F282730E079 -:1007F00035952795822F20FF02C0842F822790E015 -:1008000095958795282F80FF02C0242F282730E058 -:1008100035952795822F20FF02C0842F8227282F0D -:100820002695515008F0B4CF8091C00085FFFCCFD1 -:100830002093C6008091C00087FFFCCF8091C60046 -:10084000089520E0F1CF8091C00087FFFCCF809118 -:10085000C60008958091C00087FFFCCF2091C6009C -:1008600030E09091C00097FFFCCF8091C600A901B5 -:10087000582BCA010895CF93DF93FC01DC01AB5BD9 -:10088000BF4F8D919C9111978230910509F4ACC0B6 -:1008900098F4009709F48AC0019771F58081EF01FF -:1008A000C80FD11D698322E030E02D933C938F5F08 -:1008B0008083DF91CF9108958330910519F10497DA -:1008C000D9F48091C6008FE792E00197F1F700C05C -:1008D00000008091C00087FDF4CFEF01CC5BDF4FBB -:1008E00088818111E7C09FEF8091C00085FFFCCF18 -:1008F0009093C6001D921C9280818F5F8083DF9150 -:10090000CF9108958081EF01C80FD11D6983EF0158 -:10091000CC5BDF4F9881692760FF02C091E96927AE -:1009200070E075956795462F60FF02C041E9462744 -:1009300050E055954795242F40FF02C021E9242718 -:1009400030E035952795422F20FF02C041E942272C -:1009500050E055954795242F40FF02C021E92427F8 -:1009600030E035952795422F20FF02C041E942270C -:1009700050E055954795242F40FF02C021E92427D8 -:1009800030E035952795922F20FF02C091E99227FC -:10099000292F30E035952795288324E030E02D93EA -:1009A0003C938F5F8083DF91CF910895613408F489 -:1009B00083C08091C6008FE792E00197F1F700C0F5 -:1009C00000008091C00087FDF4CF8091C00085FFBA -:1009D000FCCF8EEF8093C6001D921C9280818F5FAA -:1009E0008083DF91CF9108958081EF01C80FD11DE1 -:1009F0006983EF01CC5BDF4F9881692760FF02C0FC -:100A000091E9692770E075956795462F60FF02C0F0 -:100A100041E9462750E055954795242F40FF02C0F5 -:100A200021E9242730E035952795422F20FF02C089 -:100A300041E9422750E055954795242F40FF02C0D9 -:100A400021E9242730E035952795422F20FF02C069 -:100A500041E9422750E055954795242F40FF02C0B9 -:100A600021E9242730E035952795922F20FF02C0F9 -:100A700091E99227292F30E0359527952883918198 -:100A8000891721F1891708F438CF8091C6008FE7C4 -:100A900092E00197F1F700C000008091C00087FD4F -:100AA000F4CF8091C00085FD94CF8091C00085FF78 -:100AB000F8CF8FCF9EEF18CF6183EF01CC5BDF4F74 -:100AC000188281E090E08D939C9318CF23E030E072 -:100AD0002D933C938F5F12CFCF93DF93CB0171E9BE -:100AE0009C01240F311DA901AEEF8091C00087FF4A -:100AF000FCCFE091C600E03809F46AC0E13408F0A8 -:100B0000E0E060E090E08091C00087FFFCCFF091D2 -:100B1000C6008F2F892780FD872790E095958795C0 -:100B2000282F80FF02C0272F2827822F90E095953D -:100B30008795282F80FF02C0272F282730E0359582 -:100B40002795822F20FF02C0872F822790E095955E -:100B50008795282F80FF02C0272F282730E0359562 -:100B60002795822F20FF02C0872F822790E095953E -:100B70008795282F80FF02C0272F282730E0359542 -:100B80002795822F20FF02C0872F8227982F9695C6 -:100B90006E1738F16F5FE61708F0B5CF8091C60089 -:100BA000EFE7F2E03197F1F700C000008091C0005C -:100BB00087FDF4CF992399F02EEF8091C00085FF37 -:100BC000FCCF2093C600911190CFDF91CF91089573 -:100BD0008091C00085FFFCCFA093C60086CF2FEF89 -:100BE000ECCFEA01C60FD11DF883D4CFCF9382E2B8 -:100BF00091E00E942304C82F6FEF82E291E00E94EF -:100C000091036C2F82E291E0CF910C94910363E009 -:100C100082E291E00E9491034CE065E171E082E2A2 -:100C200091E00E94A50349E06CE071E082E291E06E -:100C30000E94A5034CE060E071E082E291E00E9436 -:100C4000A5036FEF82E291E00C94910382E291E0C0 -:100C50000E942A04BC01660F771F680F791F82E289 -:100C600091E00C94980382E291E00E942304682FA3 -:100C700086E791E00E94C7016FEF82E291E00C9459 -:100C8000910382E291E00E942304682F83E791E0C0 -:100C90000E94C7016FEF82E291E00C94910386E716 -:100CA00091E00E942C02682F82E291E00C94910363 -:100CB00083E791E00E942C02682F82E291E00C947D -:100CC000910382E291E00E942A04BC018DE691E04A -:100CD0000E9454026FEF82E291E00C94910382E251 -:100CE00091E00E942A04BC018AE691E00E9454022D -:100CF0006FEF82E291E00C94910382E291E00E9416 -:100D00002304682F89E691E00E948302BC0182E2FD -:100D100091E00C9498038F929F92AF92BF92CF92E2 -:100D2000DF92EF92FF920F931F93CF93DF9382E2B4 -:100D300091E00E942304882E82E291E00E94230425 -:100D4000982E82E291E00E942A04EC0182E291E076 -:100D50000E942A045C0182E291E00E942A048C0134 -:100D60006FEF82E291E00E949103A09E6001A19E3C -:100D7000D00CB09ED00C1124CC15DD050CF5BE01B5 -:100D80008DE691E00E945402A895682D89E691E0D5 -:100D90000E9483027C01692D89E691E00E94830212 -:100DA0008C01B70182E291E00E949803B80182E2CF -:100DB00091E00E949803CA0DDB1DCC15DD05FCF205 -:100DC0006FEF82E291E0DF91CF911F910F91FF9041 -:100DD000EF90DF90CF90BF90AF909F908F900C944A -:100DE00091030E94B6006FEF86E791E00E94C70171 -:100DF0002FE78AE196E0215080409040E1F700C063 -:100E0000000060E086E791E00E94C70187E893E177 -:100E10000197F1F700C00000F9CF89E791E00E9447 -:100E2000410142E069E771E086E791E00E948001BC -:100E300043E069E771E083E791E00E94800145E0CB -:100E400069E771E080E791E00E94800140E069E796 -:100E500071E08DE691E00E944F0241E069E771E0A8 -:100E60008AE691E00E944F021092220110926801DE -:100E7000109267010895EE0FFF1F0024001C0BBEA7 -:0C0E80000790F691E02D0994F894FFCF44 -:100E8C00626F617264696E666F2E680031303A343D -:100E9C00333A3130004170722020322032303139F7 -:020EAC00000044 +:100080000C947D000C947D000C947D000E011101F8 +:100090001401080117011A011D01200123010601A5 +:1000A0000B012601F60711241FBECFEFD0E4DEBFFF +:1000B000CDBF11E0A0E0B1E0EEE5F0E100E00BBF64 +:1000C00002C007900D92AE32B107D9F721E0AEE23F +:1000D000B1E001C01D92A93CB207E1F710E0C3E511 +:1000E000D0E004C02197FE010E942408C235D10748 +:1000F000C9F70E94DA070C942D080C9400001F9297 +:100100000F920FB60F9211240BB60F928F939F93FD +:10011000EF93FF9390912F0180912E01981760F437 +:10012000E0912F0181E08E0F80932F01F0E0E05DE0 +:10013000FE4F80818093C600FF91EF919F918F9138 +:100140000F900BBE0F900FBE0F901F90189588EC6C +:1001500091E00E946C0160E085EC91E00E94AF01AB +:100160006FEF85EC91E00E94D00160E082EC91E0BD +:100170000E94AF016FEF82EC91E00E94D0016FEF1F +:100180008FEB91E00E94D00188EB91E00E94A702E2 +:1001900081E791E00E949F03789484B7877F84BFB2 +:1001A000109260000FB6F894A89580916000886165 +:1001B00080936000109260000FBE08950FB6F8940F +:1001C000A895809160008861809360001092600023 +:1001D0000FBE81E791E00E94BE04E82F10922F012C +:1001E0009EE088E10FB6F894A895809360000FBE5A +:1001F00090936000A8958E2F90E0FC013197EC3031 +:10020000F10530F4EA5BFF4F0C9424080E9451077B +:100210001092500108950E946307FACF0E94A6062B +:10022000F7CF0E94BB06F4CF0E94F006F1CF0E94E8 +:100230000107EECF0E941307EBCF0E942507E8CFFE +:100240000E943207E5CF0E943F07E2CF0E94750768 +:10025000DFCF1F920F920FB60F9211240BB60F92A1 +:100260002F933F934F935F936F937F938F939F93BE +:10027000AF93BF93EF93FF93E0915001F0E0809133 +:10028000C600EF5AFE4F8083809150018F5F8093AC +:100290005001E091510180915001F0E0E050FF4F9A +:1002A0009081981799F0FF91EF91BF91AF919F9135 +:1002B0008F917F916F915F914F913F912F910F900F +:1002C0000BBE0F900FBE0F901F901895109250010B +:1002D0000E94DE00E8CF089584B1806B84B926982F +:1002E0008AB18C618AB980E58CBD81E08DBD8BB10E +:1002F000837E8BB95A9A5B9A5C9A08958BB1837E00 +:100300008BB98BB160FD10C090E0892B8BB98BB19C +:1003100061FD10C090E0892B8BB98BB162FD10C0DC +:1003200090E0892B8BB9089594E0892B8BB98BB120 +:1003300061FFF0CF98E0892B8BB98BB162FFF0CFD2 +:1003400090E1892B8BB908956EBD0DB407FEFDCFEA +:100350008EB50895FC0171836083428308951F93D5 +:10036000CF93DF93EC01162F6A81888199810E94D7 +:100370007E0160E4888199810E94A40160E0888107 +:1003800099810E94A401612F888199810E94A40112 +:1003900067E088819981DF91CF911F910C947E0154 +:1003A0001F93CF93DF93EC01162F6A818881998187 +:1003B0000E947E0160E4888199810E94A40161E02D +:1003C000888199810E94A401612F888199810E946E +:1003D000A40167E088819981DF91CF911F910C94EE +:1003E0007E011F93CF93DF93EC01162F6A818881E2 +:1003F00099810E947E0160E4888199810E94A40114 +:1004000062E1888199810E94A401612F888199818C +:100410000E94A40167E088819981DF91CF911F91AB +:100420000C947E011F93CF93DF93EC01162F6A810A +:10043000888199810E947E0160E4888199810E946F +:10044000A40163E1888199810E94A401612F8881C0 +:1004500099810E94A40167E088819981DF91CF9101 +:100460001F910C947E011F93CF93DF93EC016A815F +:10047000888199810E947E0161E4888199810E942E +:10048000A40162E1888199810E94A40160E08881D1 +:1004900099810E94A401182F67E0888199810E94A8 +:1004A0007E01812FDF91CF911F9108951F93CF93EC +:1004B000DF93EC016A81888199810E947E0161E469 +:1004C000888199810E94A40163E1888199810E94B9 +:1004D000A40160E0888199810E94A401182F67E03F +:1004E000888199810E947E01812FDF91CF911F9198 +:1004F0000895FC0171836083428308950F931F93D5 +:10050000CF93DF93EC018B016A81888199810E94EE +:100510007E01B8010024660F771F001C660F771F4D +:10052000001C672F702D888199810E94A401602F83 +:10053000660F660F888199810E94A40167E0888117 +:100540009981DF91CF911F910F910C947E011092B0 +:100550007C0087E880937A00089580917C00807EFB +:10056000682B60937C0080917A00806480937A008D +:1005700083EA91E00197F1F700C0000080917A00D2 +:1005800086FDFCCF809178009091790008950F93BB +:100590001F93CF93DF9361E085EC91E00E94F1011E +:1005A000C1E0D0E001E010E02FEF84E39CE02150B7 +:1005B00080409040E1F700C00000B8010C2E01C05F +:1005C000660F0A94EAF785EC91E00E94F10121960A +:1005D000C930D10549F7DF91CF911F910F9108954F +:1005E0000F931F93CF93DF9361E082EC91E00E9421 +:1005F000F101C1E0D0E001E010E02FEF84E39CE0E6 +:10060000215080409040E1F700C00000B8010C2E5E +:1006100001C0660F0A94EAF782EC91E00E94F101B2 +:100620002196C930D10549F7DF91CF911F910F91E4 +:100630000895CF93DF93C0E0D0E0BE018CEB91E052 +:100640000E947E0287E893E10197F1F700C0000065 +:100650002196C11594E0D90781F72FE78AE196E04A +:10066000215080409040E1F700C0000060E070E061 +:100670008CEB91E0DF91CF910C947E02CF93DF93CE +:10068000C0E0D0E0BE0189EB91E00E947E0287E8E5 +:1006900093E10197F1F700C000002196C11594E0A5 +:1006A000D90781F72FE78AE196E0215080409040FA +:1006B000E1F700C0000060E070E089EB91E0DF91BD +:1006C000CF910C947E020FB6F894A89580916000AB +:1006D000886180936000109260000FBE60E088EB3C +:1006E00091E00E94AD02BC018CEB91E00E947E0281 +:1006F00061E088EB91E00E94AD02BC0189EB91E0E2 +:100700000E947E0285EC91E00E945602682F85ECE3 +:1007100091E00E94F1018FEB91E00E945602682F58 +:1007200082EC91E00E94F101D9CF0E94C7020E94A1 +:10073000F0020E9419030E943E030E94630382E0BC +:100740008093C00088ED8093C10086E08093C20052 +:100750001092C50084E18093C40008958091C60082 +:100760008FE792E00197F1F700C000008091C00090 +:1007700087FDF4CF089580912F0180932E01109270 +:100780002F018091C00085FFFCCFE0912F0181E017 +:100790008E0F80932F01F0E0E05DFE4F808180930B +:1007A000C6000895E0912F0181E08E0F80932F0104 +:1007B000F0E0E05DFE4F60830895E0912F0181E05D +:1007C0008E0F80932F01F0E0E05DFE4F6083E0919B +:1007D0002F0181E08E0F80932F01F0E0E05DFE4F4E +:1007E00070830895E0912F0181E08E0F80932F0197 +:1007F000F0E0E05DFE4F40838FEF840F442371F003 +:10080000DB019D91E0912F0121E02E0F20932F011C +:10081000F0E0E05DFE4F9083815098F70895CF930C +:10082000DF93E0912F0181E08E0F80932F01F0E0A4 +:10083000E05DFE4F40835FEF540F442309F486C010 +:10084000FB0180E041E939C0822F90E09C013595A1 +:100850002795942F922720FD53C0822F90E09C0172 +:1008600035952795942F922720FD53C0822F90E035 +:100870009C0135952795942F922720FD53C0822FF8 +:1008800090E09C0135952795942F922720FD53C029 +:10089000822F90E09C0135952795942F922720FD7B +:1008A00053C0822F90E095958795242F282780FDAF +:1008B000822F8695515008F44AC0EF019191A09182 +:1008C0002F0121E02A0F20932F01B0E0A05DBE4F41 +:1008D0009C9328818227982F942780FD892F90E070 +:1008E0009C0135952795942F922720FFADCF892F16 +:1008F00090E09C0135952795942F922720FFADCF4E +:10090000892F90E09C0135952795942F922720FF01 +:10091000ADCF892F90E09C0135952795942F922794 +:1009200020FFADCF892F90E09C0135952795942F1E +:10093000922720FFADCF892F90E09C013595279518 +:10094000942F922720FFADCF892FACCF80E0E0918C +:100950002F0191E09E0F90932F01F0E0E05DFE4F9C +:100960008083E091500181E08E0F80935001F0E090 +:10097000EF5AFE4F8081DF91CF910895E0915001B1 +:1009800081E08E0F80935001F0E0EF5AFE4F80819E +:100990000895E091500181E08E0F80935001F0E0C6 +:1009A000EF5AFE4F8081E091500191E09E0F9093AD +:1009B0005001F0E0EF5AFE4F208190E0922B089515 +:1009C000CF93DF93FC01DC01AB5BBF4F8D919C911A +:1009D00011978230910509F460C090F40097D9F125 +:1009E000019799F58081EF01C80FD11D698322E03D +:1009F00030E02D933C938F5F8083DF91CF910895FA +:100A00008330910509F4A8C00497F9F48091C600D9 +:100A10008FE792E00197F1F700C000008091C000DD +:100A200087FDF4CFEF01CC5BDF4F88818111E8C0F7 +:100A30008FEFC0912F0191E09C0F90932F01D0E098 +:100A4000C05DDE4F88831D921C9280818F5F808302 +:100A5000DF91CF910895613408F4D4C08091C6002D +:100A60008FE792E00197F1F700C000008091C0008D +:100A700087FDF4CFC0912F0181E08C0F80932F016F +:100A8000D0E0C05DDE4F8EEF88831D921C92808186 +:100A90008F5F8083DF91CF9108958081EF01C80F30 +:100AA000D11D6983EF01CC5BDF4F9881692760FF1F +:100AB00002C091E9692770E075956795462F60FF40 +:100AC00002C041E9462750E055954795242F40FF45 +:100AD00002C021E9242730E035952795422F20FFD9 +:100AE00002C041E9422750E055954795242F40FF29 +:100AF00002C021E9242730E035952795422F20FFB9 +:100B000002C041E9422750E055954795242F40FF08 +:100B100002C021E9242730E035952795922F20FF48 +:100B200002C091E99227292F30E035952795288337 +:100B30009181891709F470C0891708F487CF8091D3 +:100B4000C6008FE792E00197F1F700C000008091A6 +:100B5000C00087FDF4CF8ECF8081EF01C80FD11D7B +:100B60006983EF01CC5BDF4F9881692760FF02C08A +:100B700091E9692770E075956795462F60FF02C07F +:100B800041E9462750E055954795242F40FF02C084 +:100B900021E9242730E035952795422F20FF02C018 +:100BA00041E9422750E055954795242F40FF02C068 +:100BB00021E9242730E035952795422F20FF02C0F8 +:100BC00041E9422750E055954795242F40FF02C048 +:100BD00021E9242730E035952795922F20FF02C088 +:100BE00091E99227292F30E035952795288324E035 +:100BF00030E02D933C938F5F8083DF91CF910895F8 +:100C00008EEF17CF6183EF01CC5BDF4F188281E05D +:100C100090E08D939C931BCF23E030E02D933C9389 +:100C20008F5F15CFCF93DF93CB0171E99C01240F28 +:100C3000311DA901AEEFE091500181E08E0F80934C +:100C40005001F0E0EF5AFE4FE081E03809F46EC049 +:100C5000E13408F0E0E060E080E0C091500191E014 +:100C60009C0F90935001D0E0CF5ADE4FF8818F2730 +:100C700080FD872790E095958795282F80FF02C0FB +:100C8000272F2827822F90E095958795282F80FF82 +:100C900002C0272F282730E035952795822F20FF87 +:100CA00002C0872F822790E095958795282F80FF97 +:100CB00002C0272F282730E035952795822F20FF67 +:100CC00002C0872F822790E095958795282F80FF77 +:100CD00002C0272F282730E035952795822F20FF47 +:100CE00002C0872F822786956E1758F16F5FE6172F +:100CF00008F0B3CF9091C600EFE7F2E03197F1F73B +:100D000000C000009091C00097FDF4CF81110EC08B +:100D1000E0912F0181E08E0F80932F01F0E0E05DE4 +:100D2000FE4F8FEF8083DF91CF910895E0912F01E7 +:100D300081E08E0F80932F01F0E0E05DFE4FA083F5 +:100D40007ACFEA01C60FD11DF883D0CFCF9381E7C8 +:100D500091E00E94BE04C82F6FEF81E791E00E94EE +:100D6000D2036C2F81E791E00E94D20381E791E0EA +:100D7000CF910C94BB0363E081E791E00E94D20322 +:100D800081E791E00E94BB0310922F014CE062E2E8 +:100D900071E081E791E00E94F20381E791E00E9417 +:100DA000BB0310922F0149E069E171E081E791E016 +:100DB0000E94F20381E791E00E94BB0310922F0191 +:100DC0004CE06DE071E081E791E00E94F2036FEF8B +:100DD00081E791E00E94D20381E791E00C94BB038C +:100DE00081E791E00E94C904BC01660F771F680F7C +:100DF000791F81E791E00E94DD0381E791E00C9487 +:100E0000BB0381E791E00E94BE04682F85EC91E06E +:100E10000E94F1016FEF81E791E00E94D20381E728 +:100E200091E00C94BB0381E791E00E94BE04682F1F +:100E300082EC91E00E94F1016FEF81E791E00E9466 +:100E4000D20381E791E00C94BB0385EC91E00E9412 +:100E50005602682F81E791E00E94D20381E791E07A +:100E60000C94BB0382EC91E00E945602682F81E74C +:100E700091E00E94D20381E791E00C94BB0381E7EB +:100E800091E00E94C904BC018CEB91E00E947E02BB +:100E90006FEF81E791E00E94D20381E791E00C942B +:100EA000BB0381E791E00E94C904BC0189EB91E09A +:100EB0000E947E026FEF81E791E00E94D20381E7FA +:100EC00091E00C94BB0381E791E00E94BE04682F7F +:100ED00088EB91E00E94AD02BC0181E791E00E94A5 +:100EE000DD0381E791E00C94BB038F929F92AF9258 +:100EF000BF92CF92DF92EF92FF920F931F93CF9307 +:100F0000DF9381E791E00E94BE04882E81E791E0A3 +:100F10000E94BE04982E81E791E00E94C904EC0172 +:100F200081E791E00E94C9045C0181E791E00E94A1 +:100F3000C904A89E6001A99ED00CB89ED00C1124B3 +:100F40006FEF82EC91E00E94F101CC15DD050CF50C +:100F5000BE018CEB91E00E947E02A895682D88EB83 +:100F600091E00E94AD027C01692D88EB91E00E9426 +:100F7000AD028C01B70181E791E00E94DD03B80169 +:100F800081E791E00E94DD03CA0DDB1DCC15DD0574 +:100F9000FCF26FEF81E791E0DF91CF911F910F910C +:100FA000FF90EF90DF90CF90BF90AF909F908F9089 +:100FB0000C94D2030E94A7006FEF85EC91E00E9491 +:100FC000F1012FE78AE196E0215080409040E1F75F +:100FD00000C0000060E085EC91E00E94F10187E82C +:100FE00093E10197F1F700C00000F9CF88EC91E0A0 +:100FF0000E946B0142E068EC71E085EC91E00E9498 +:10100000AA0143E068EC71E082EC91E00E94AA0141 +:1010100045E068EC71E08FEB91E00E94AA0140E0AE +:1010200068EC71E08CEB91E00E94790241E068ECA1 +:1010300071E089EB91E00E947902109271011092A7 +:10104000B7011092B6010895EE0FFF1F0024001C97 +:0E1050000BBE0790F691E02D0994F894FFCFA7 +:10105E0001020103000202010103030209626F6132 +:10106E007264696E666F2E680031323A31303A35ED +:0E107E003400417072202032203230313900AF :00000001FF diff --git a/firmware/Makefile b/firmware/Makefile index 7846f59..ce89319 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -1,26 +1,27 @@ # Name: Makefile # Project: B15F (board15 Famulus Edition) # Author: Tristan Krause -# Creation Date: 2019-03-22 - -# Umgebungseinstellungen -COMPILER_PATH = C:\avr8-gnu-toolchain-win32_x86\bin\avr-g++.exe -OBJCOPY_PATH = C:\avr8-gnu-toolchain-win32_x86\bin\avr-objcopy.exe - +# Creation Date: 2019-03-22 -OUTPUT = B15F.elf -HEX = B15F.hex -CFLAGS = -Wall -Wextra -std=c++14 -O3 -mmcu=atmega1284 -DF_CPU=20000000 +# Umgebungseinstellungen +COMPILER_PATH = avr-g++ +OBJCOPY_PATH = avr-objcopy + + +OUTPUT = B15F.elf +HEX = B15F.hex +MCU = atmega1284p +CFLAGS = -Wall -Wextra -std=c++14 -O3 -mmcu=$(MCU) -DF_CPU=20000000 LDFLAGS = OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o selftest.o global_vars.o usart.o requests.o - + COMPILE = $(COMPILER_PATH) $(CFLAGS) B15F: $(OBJECTS) @echo "Linking..." - $(COMPILE) $(OBJECTS) -o $(OUTPUT) $(LDFLAGS) - + $(COMPILE) $(OBJECTS) -o $(OUTPUT) $(LDFLAGS) + $(OBJCOPY_PATH) -O ihex -R .eeprom -R .fuse -R .lock -R .signature $(OUTPUT) $(HEX) help: @@ -28,9 +29,12 @@ help: @echo "make B15F .... to compile (default)" @echo "make clean ... to delete objects, elf and hex file" -clean: +clean: @echo "Cleaning..." rm -f $(OBJECTS) $(OUTPUT) $(HEX) +upload: + avrdude -Pusb -p $(MCU) -c avrispmkII -U flash:w:$(HEX) + .cpp.o: $(COMPILE) -c $< -o $@ diff --git a/firmware/MakefileWindoofs b/firmware/MakefileWindoofs new file mode 100644 index 0000000..7846f59 --- /dev/null +++ b/firmware/MakefileWindoofs @@ -0,0 +1,36 @@ +# Name: Makefile +# Project: B15F (board15 Famulus Edition) +# Author: Tristan Krause +# Creation Date: 2019-03-22 + +# Umgebungseinstellungen +COMPILER_PATH = C:\avr8-gnu-toolchain-win32_x86\bin\avr-g++.exe +OBJCOPY_PATH = C:\avr8-gnu-toolchain-win32_x86\bin\avr-objcopy.exe + + +OUTPUT = B15F.elf +HEX = B15F.hex +CFLAGS = -Wall -Wextra -std=c++14 -O3 -mmcu=atmega1284 -DF_CPU=20000000 +LDFLAGS = +OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o selftest.o global_vars.o usart.o requests.o + + +COMPILE = $(COMPILER_PATH) $(CFLAGS) + +B15F: $(OBJECTS) + @echo "Linking..." + $(COMPILE) $(OBJECTS) -o $(OUTPUT) $(LDFLAGS) + + $(OBJCOPY_PATH) -O ihex -R .eeprom -R .fuse -R .lock -R .signature $(OUTPUT) $(HEX) + +help: + @echo "This Makefile has the following rules:" + @echo "make B15F .... to compile (default)" + @echo "make clean ... to delete objects, elf and hex file" + +clean: + @echo "Cleaning..." + rm -f $(OBJECTS) $(OUTPUT) $(HEX) + +.cpp.o: + $(COMPILE) -c $< -o $@ diff --git a/firmware/b15f.aws b/firmware/b15f.aws index 2372df2..2f1dc2d 100644 --- a/firmware/b15f.aws +++ b/firmware/b15f.aws @@ -1 +1 @@ - + diff --git a/firmware/global_vars.cpp b/firmware/global_vars.cpp index 88e73ca..0622545 100644 --- a/firmware/global_vars.cpp +++ b/firmware/global_vars.cpp @@ -9,3 +9,9 @@ volatile TLC5615 dac1(*((SPI*) &spi), SPIADR::AA1); volatile ADU adu; volatile USART usart; + +volatile uint8_t receive_buffer[32]; +volatile uint8_t receive_pos; +volatile uint8_t send_buffer[32]; +volatile uint8_t send_pos; +volatile uint8_t send_len; diff --git a/firmware/global_vars.h b/firmware/global_vars.h index 94511ec..45ac856 100644 --- a/firmware/global_vars.h +++ b/firmware/global_vars.h @@ -15,4 +15,10 @@ extern volatile TLC5615 dac1; extern volatile ADU adu; extern volatile USART usart; +extern volatile uint8_t receive_buffer[32]; +extern volatile uint8_t receive_pos; +extern volatile uint8_t send_buffer[32]; +extern volatile uint8_t send_pos; +extern volatile uint8_t send_len; +extern volatile bool send_active; #endif // GLOBAL_VARS_H diff --git a/firmware/main.cpp b/firmware/main.cpp index a243042..2a86cde 100644 --- a/firmware/main.cpp +++ b/firmware/main.cpp @@ -7,17 +7,46 @@ #include "requests.h" -#define WDT_TIMEOUT WDTO_15MS +#define WDT_TIMEOUT WDTO_1S + +uint8_t const rq_len[] = { + /* RQ_DISC */ 1, + /* RQ_TEST */ 2, + /* RQ_INFO */ 1, + /* RQ_INT */ 3, + /* [ reserved ] */ 0, + /* RQ_BA0 */ 2, + /* RQ_BA1 */ 2, + /* RQ_BE0 */ 1, + /* RQ_BE1 */ 1, + /* RQ_AA0 */ 3, + /* RQ_AA1 */ 3, + /* RQ_ADC */ 2, + /* RQ_ADC_DAC_STROKE */ 9 +}; + + + + + +void handleRequest(void); ISR(USART0_RX_vect) { - if(UCSR0A & _BV(DOR0)) + receive_buffer[receive_pos] = UDR0; + receive_pos++; + + if(receive_pos == rq_len[receive_buffer[0]]) // last byte { - ((MCP23S17*) &beba0)->writePortA(0xFF); + receive_pos = 0; + handleRequest(); } - cli(); - ((USART*) &usart)->nextByte(UDR0); - sei(); +} + +ISR(USART0_TX_vect) +{ + if(send_pos < send_len) + UDR0 = send_buffer[send_pos++]; } void initAll() @@ -46,14 +75,14 @@ void handleRequest() { wdt_disable(); - ((MCP23S17*) &beba1)->writePortA(0xFF); const uint8_t req = ((USART*) &usart)->readByte(); - ((MCP23S17*) &beba1)->writePortA(0x00); + send_pos = 0; // starte WDT wdt_enable(WDT_TIMEOUT); wdt_reset(); + //((MCP23S17*) &beba0)->writePortA(receive_buffer[0]); switch(req) { case RQ_DISC: @@ -106,6 +135,10 @@ void handleRequest() default: break; } + //((MCP23S17*) &beba1)->writePortA(0x00); + + receive_pos = 0; + } int main() diff --git a/firmware/requests.cpp b/firmware/requests.cpp index 4d870e7..968a18d 100644 --- a/firmware/requests.cpp +++ b/firmware/requests.cpp @@ -5,21 +5,33 @@ void rqTestConnection() uint8_t dummy = ((USART*) &usart)->readByte(); ((USART*) &usart)->writeByte(USART::MSG_OK); ((USART*) &usart)->writeByte(dummy); + ((USART*) &usart)->write(); } void rqBoardInfo() { ((USART*) &usart)->writeByte(3); // Anzahl an Strings - + ((USART*) &usart)->write(); + + send_pos = 0; ((USART*) &usart)->writeStr(DATE, sizeof(DATE)); + ((USART*) &usart)->write(); + + send_pos = 0; ((USART*) &usart)->writeStr(TIME, sizeof(TIME)); + ((USART*) &usart)->write(); + + send_pos = 0; ((USART*) &usart)->writeStr(FSRC, sizeof(FSRC)); ((USART*) &usart)->writeByte(USART::MSG_OK); + ((USART*) &usart)->write(); } void rqTestIntConv() { - ((USART*) &usart)->writeInt(((USART*) &usart)->readInt() * 3); + uint16_t d = ((USART*) &usart)->readInt(); + ((USART*) &usart)->writeInt(d * 3); + ((USART*) &usart)->write(); } void rqDigitalWrite0() @@ -28,6 +40,7 @@ void rqDigitalWrite0() ((MCP23S17*) &beba0)->writePortA(port); ((USART*) &usart)->writeByte(USART::MSG_OK); + ((USART*) &usart)->write(); } void rqDigitalWrite1() @@ -36,18 +49,21 @@ void rqDigitalWrite1() ((MCP23S17*) &beba1)->writePortA(port); ((USART*) &usart)->writeByte(USART::MSG_OK); + ((USART*) &usart)->write(); } void rqDigitalRead0() { uint8_t port = ((MCP23S17*) &beba0)->readPortB(); ((USART*) &usart)->writeByte(port); + ((USART*) &usart)->write(); } void rqDigitalRead1() { uint8_t port = ((MCP23S17*) &beba1)->readPortB(); ((USART*) &usart)->writeByte(port); + ((USART*) &usart)->write(); } void rqAnalogWrite0() @@ -56,6 +72,7 @@ void rqAnalogWrite0() ((TLC5615*) &dac0)->setValue(value); ((USART*) &usart)->writeByte(USART::MSG_OK); + ((USART*) &usart)->write(); } void rqAnalogWrite1() @@ -64,6 +81,7 @@ void rqAnalogWrite1() ((TLC5615*) &dac1)->setValue(value); ((USART*) &usart)->writeByte(USART::MSG_OK); + ((USART*) &usart)->write(); } void rqAnalogRead() @@ -71,6 +89,7 @@ void rqAnalogRead() uint8_t channel = ((USART*) &usart)->readByte(); uint16_t value = ((ADU*) &adu)->getValue(channel); ((USART*) &usart)->writeInt(value); + ((USART*) &usart)->write(); } void rqAdcDacStroke() @@ -82,9 +101,10 @@ void rqAdcDacStroke() int16_t delta = static_cast(((USART*) &usart)->readInt()); int16_t count = static_cast(((USART*) &usart)->readInt()); - ((USART*) &usart)->writeByte(USART::MSG_OK); + //((USART*) &usart)->writeByte(USART::MSG_OK); count *= delta; + ((MCP23S17*) &beba1)->writePortA(0xFF); for(int16_t i = start; i < count; i += delta) { diff --git a/firmware/TLC5615.cpp b/firmware/tlc5615.cpp similarity index 100% rename from firmware/TLC5615.cpp rename to firmware/tlc5615.cpp diff --git a/firmware/TLC5615.h b/firmware/tlc5615.h similarity index 100% rename from firmware/TLC5615.h rename to firmware/tlc5615.h diff --git a/firmware/usart.cpp b/firmware/usart.cpp index dc78264..5e78bcc 100644 --- a/firmware/usart.cpp +++ b/firmware/usart.cpp @@ -4,7 +4,7 @@ void USART::init() { UCSR0A = _BV(U2X0); - UCSR0B = _BV(RXEN0) | _BV(TXEN0) | _BV(RXCIE0); + UCSR0B = _BV(RXEN0) | _BV(TXEN0) | _BV(RXCIE0) | _BV(TXCIE0); // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit UCSR0C = _BV(UCSZ00) |_BV(UCSZ01);// (1<>= 8; - while (!(UCSR0A & (1< #include + +extern volatile uint8_t receive_buffer[32]; +extern volatile uint8_t receive_pos; +extern volatile uint8_t send_buffer[32]; +extern volatile uint8_t send_pos; +extern volatile uint8_t send_len; + enum BlockSequence { IDLE = 0, @@ -24,10 +31,12 @@ public: void writeInt(uint16_t); void writeLong(uint32_t); void writeStr(const char*, uint8_t); + uint8_t writeBlock(uint8_t*, uint8_t); uint8_t readByte(void); uint16_t readInt(void); uint32_t readLong(void); + void write(void); void nextByte(uint8_t byte); void readBlock(uint8_t*, uint8_t);