Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge remote-tracking branch 'remotes/triddle/master'

  • Loading branch information...
commit f97cdcb7ef9bbadd3afe538b429527cdfc65b884 2 parents 28ba6b5 + d7cfe37
Rocco Caputo authored
488 Firmdata-atmega328.hex
View
@@ -1,488 +0,0 @@
-:100000000C9434000C9451000C9451000C94510049
-:100010000C9451000C9451000C9451000C94640207
-:100020000C9451000C9436020C9451000C94510025
-:100030000C9451000C9451000C9451000C945100FC
-:100040000C94D5050C9451000C94BA090C94F40945
-:100050000C9451000C9490000C9451000C9451009D
-:100060000C9451000C94510011241FBECFEFD8E026
-:10007000DEBFCDBF11E0A0E0B1E0E0E2FEE102C0F2
-:1000800005900D92AE34B107D9F713E0AEE4B1E0BC
-:1000900001C01D92AC35B107E1F70E9414050C9424
-:1000A0000E0F0C942F0480917C00806280937C0062
-:1000B00080917A00836080937A0080917C008064D4
-:1000C00080937C0080917A00806880937A00809190
-:1000D0007A00806480937A0080917A0086FDFCCF5C
-:1000E0001092860108951F931FB7F894809186019E
-:1000F000882399F080917A0086FD0FC080917A0064
-:10010000877E80937A00809185016091870140917C
-:1001100079000E94A107109286011FBF1F910895C8
-:100120001F920F920FB60F9211242F933F934F936C
-:100130005F936F937F938F939F93AF93BF93EF934F
-:10014000FF930E947300EAE7F0E08081877F80835D
-:10015000FF91EF91BF91AF919F918F917F916F919F
-:100160005F914F913F912F910F900FBE0F901F9075
-:100170001895FF920F931F93182F062F893018F0B0
-:100180008DE10E94E703FFB6F89480917A0086FF24
-:1001900006C082E20E94E703FFBE80E021C00E9409
-:1001A000730080917C00807F80937C0080917C0034
-:1001B000812B80937C00009385010E945C028093D8
-:1001C000870181E08093860180917A008F7E809301
-:1001D0007A0080917A00886480937A00FFBE81E083
-:1001E0001F910F91FF900895FC01138214821282D7
-:1001F0000895FC013FB7F89494818381981729F4FE
-:100200008281882389F0208110C09481838189179D
-:1002100030F4908123818481290F281B06C03FBFC1
-:1002200023818481281B02C020E03FBF822F0895D4
-:100230001F93FC0110810E94F900181B812F1F9150
-:1002400008950895EF92FF920F931F93CF93DF933A
-:10025000EC01E62EF42E052F1FB7F8949C818B81BC
-:10026000981729F48A81882311F41FBF12C08C814A
-:100270002981289F90011124275F3F4F2C0F3D1F9C
-:1002800049818F2D902FB90150E00E94CD0B1FBFE7
-:1002900081E080934E01882311F4EE20E9F6DF918E
-:1002A000CF911F910F91FF90EF9008951F93CF93DF
-:1002B000DF93EC011FB7F8949C818B81981729F488
-:1002C0008A81882311F41FBF21C06115710579F05F
-:1002D0008C812981289F90011124275F3F4F2C0F8B
-:1002E0003D1F4981CB01B90150E00E94CD0B8C81AB
-:1002F0008F5F8C838C8168810E94BC0A9C839C8167
-:100300008B81981709F41A821FBF81E0DF91CF918A
-:100310001F910895FF920F931F93CF93DF938C014A
-:10032000F62EEA01C801BE010E94560180934F01DA
-:10033000882311F4FF20B1F7DF91CF911F910F9126
-:10034000FF9008951F93CF93DF93EC011FB7F894AC
-:100350009B818C81981731F48A81882319F01FBF03
-:1003600080E022C08B812981289F90011124275F82
-:100370003F4F2C0F3D1F4981C90150E00E94CD0B1A
-:100380008B818F5F8B838B8168810E94BC0A9B83EA
-:1003900081E08A831FBF8D819E81892B21F0ED81B1
-:1003A000FE81CE01099581E0DF91CF911F910895E3
-:1003B000FF920F931F93CF93DF938C01F62EEA01E8
-:1003C000C801BE010E94A20180935001882311F44C
-:1003D000FF20B1F7DF91CF911F910F91FF9008950A
-:1003E000EF92FF920F931F93CF93DF93F82EE62E99
-:1003F000689F80011124075F1F4FC8010E94C80A2F
-:10040000EC01009719F486E00E94E703CE0160E05A
-:1004100070E0A8010E94D60BF882E982CE01DF913C
-:10042000CF911F910F91FF90EF900895E1EBF0E0D5
-:100430008081887F808308951092B2000895E1EB57
-:10044000F0E08081887F80831092B2000895E1EB14
-:10045000F0E0808187608083089588E08093B30016
-:10046000E0E7F0E080818360808308951F920F921F
-:100470000FB60F9211242F933F934F935F936F9377
-:100480007F938F939F93AF93BF93EF93FF930E94BC
-:10049000CF050E94B607FF91EF91BF91AF919F9159
-:1004A0008F917F916F915F914F913F912F910F901D
-:1004B0000FBE0F901F901895B89B03C0B8980E946C
-:1004C000B6078091B20008951F920F920FB60F9257
-:1004D00011242F933F934F935F936F937F938F9349
-:1004E0009F93AF93BF93EF93FF930E94CF05E3EBEE
-:1004F000F0E08081885F80830E940A0878940E94DF
-:1005000073000E943508FF91EF91BF91AF919F91C9
-:100510008F917F916F915F914F913F912F910F90AC
-:100520000FBE0F901F9018959093890180938801BA
-:1005300008950895EF92FF920F931F93182FF62EB0
-:10054000E72E042F473018F084E10E94E70381E092
-:10055000809360011093610122E631E0C9016F2DA3
-:100560007E2D402F50E00E94CD0B0E5F8FE160E0AA
-:1005700042E651E042505040202F0E943805882327
-:1005800019F485E10E94E70381E01F910F91FF902C
-:10059000EF900895CF92DF92EF92FF920F931F9307
-:1005A000DF93CF9300D000D000D0CDB7DEB77C0171
-:1005B00080915201882371F4C70160E041E551E068
-:1005C0000E948A01882319F486E10E94E70381E0F2
-:1005D00080935201809151018A3009F464C08B30BC
-:1005E00070F48230C9F0833020F4813009F0CAC041
-:1005F000CDC08330F9F0843009F0C4C022C08C3003
-:1006000009F457C08C3008F451C08D3009F454C03F
-:100610008E3009F0B7C07EC0C70160E043E551E00D
-:100620000E948A01882309F4B3C082E063E571E087
-:1006300041E004C083E060E071E046E00E949A027D
-:10064000A5C01092570110925601C7010E94F900EF
-:10065000863008F49DC0109254011CC0C70160E0B0
-:1006600045E551E00E948A01882319F482E10E9445
-:10067000E703809155012091560130915701280FD1
-:10068000311D3093570120935601809154018F5FA3
-:100690008093540180915401863000F384E066E534
-:1006A00071E042E0CBCF0E94C00770C00E94BB0740
-:1006B0006DC00E94AC076AC0C7010E94F900863075
-:1006C00008F466C08E010F5F1F4F87E0C82ED12C43
-:1006D000CC0EDD1EC70160E0A8010E948A018823BC
-:1006E00019F48EE10E94E7030F5F1F4F0C151D05E3
-:1006F00089F75C8140E08B8190E0482B592B3E814B
-:1007000020E08D8190E0282B392B89816A810E941D
-:1007100090073CC0C7010E94F9008330C8F11092D5
-:1007200059011092580114C0435A5E4FC70160E04E
-:100730000E948A01882319F481E20E94E7038091D4
-:100740005801909159010196909359018093580155
-:100750004091580150915901433051052CF390912B
-:100760005E0180E060915D0170E0682B792B7093F1
-:100770005C0160935B0180915F0180935A010E944C
-:10078000010604C083E10E94E70302C010925201F7
-:1007900026960FB6F894DEBF0FBECDBFCF91DF9186
-:1007A0001F910F91FF90EF90DF90CF90089580916F
-:1007B0008801909189010E94F900882331F080918D
-:1007C0008801909189010E94CA02089508950F93AB
-:1007D0001F93CF93DF93082FF8940E94DB0410E05F
-:1007E000C0E9D1E013C00E94CE0484EF91E0FE0185
-:1007F0003197F1F70197D9F70E94C70484EF91E090
-:10080000FE013197F1F70197D9F71F5F153058F3C3
-:1008100080E197E2FE013197F1F70197D9F710E0F7
-:1008200013C00E94CE0480ED97E0FE013197F1F7EE
-:100830000197D9F70E94C70488EB9BE0FE0131972E
-:10084000F1F70197D9F71F5F101758F380E197E28E
-:10085000FE013197F1F70197D9F710E0C4CF1F924D
-:100860000F920FB60F9211242F933F934F935F93E4
-:100870006F937F938F939F93AF93BF93EF93FF9368
-:100880000E94CF0589E00E94E703FF91EF91BF919D
-:10089000AF919F918F917F916F915F914F913F9118
-:1008A0002F910F900FBE0F901F901895FC01208183
-:1008B00081E090E0062E02C0880F991F0A94E2F7AB
-:1008C000809582238083808150E002C0440F551FB1
-:1008D0006A95E2F7842B80830895FC01208140E033
-:1008E00081E090E002C0880F991F6A95E2F730E03E
-:1008F000822B932B892B09F041E0842F08950895D2
-:100900001F93162F859719F4E4E2F0E005C085E007
-:100910000E94E703E0E0F0E0808121E030E002C0E7
-:10092000220F331F1A95E2F78223808380811F9163
-:1009300008950F931F93162F042F859719F4E4E25F
-:10094000F0E005C085E00E94E703E0E0F0E02081F0
-:1009500081E090E0012E02C0880F991F0A94E2F70F
-:100960008095282320832081802F90E002C0880F6B
-:10097000991F1A95E2F7282B20831F910F91089554
-:10098000482F85E290E065E00E945604089585E2D4
-:1009900090E065E040E00E945604089585E290E012
-:1009A00065E041E00E945604089585E290E065E02C
-:1009B0000E946D04089585E290E065E041E00E94A8
-:1009C000990408950E94FB0583B7816083BF8895D1
-:1009D00083B78E7F83BF08950E94D7030E94A70626
-:1009E000089578940E9427020E94EC040E94E20479
-:1009F000FBCF0E94C9050E947F040E94DB040E9475
-:100A0000E6030E9421010E943A0A0E9453000E94BC
-:100A100012060E9423050E9499020E942D020E9444
-:100A20009E080E947E0608950E94F9040E94F10427
-:100A300084E00E94E70380E090E0089590938B01AA
-:100A400080938A0108958FEB95E060E070E00E944A
-:100A5000DD0B909359038093580387EB95E060E09A
-:100A600070E00E94DD0B90935B0380935A0308951E
-:100A7000AF92BF92CF92DF92EF92FF920F931F93AC
-:100A8000CF93DF93A62EB42EE52E122F082F000F42
-:100A9000000F000F022BC22EDD24183018F080E169
-:100AA0000E94E70300936B01FFB6F89480918A01DE
-:100AB00090918B01892B19F48DE00E94E7038091BE
-:100AC0008A0190918B010E94180190E0C816D90606
-:100AD0001CF0FFBE80E02EC080918A0190918B01B6
-:100AE00060E04BE651E00E94D801882319F48EE0C3
-:100AF0000E94E70310926C018B2D9E2D9C01E90151
-:100B000013C080918A0190918B0160E0AE010E9438
-:100B1000D801882319F48FE00E94E7032196809181
-:100B20006C018F5F80936C0180916C01811748F399
-:100B3000FFBE81E080936A01882319F4AA2009F09E
-:100B4000ACCFDF91CF911F910F91FF90EF90DF908D
-:100B5000CF90BF90AF900895809368014093690152
-:100B600080E048E651E022E00E9438050895482FD1
-:100B700082E061E00E94AC0580E090E00895482F9B
-:100B800081E061E00E94AC0580E090E0089516BC31
-:100B90000895EEE6F0E0808181608083089585B558
-:100BA000856085BD0E94CE0408951F920F920FB6F6
-:100BB0000F9211242F933F934F935F936F937F93E3
-:100BC0008F939F93AF93BF93EF93FF930E94CF05B3
-:100BD0000E94B107FF91EF91BF91AF919F918F91CB
-:100BE0007F916F915F914F913F912F910F900FBE29
-:100BF0000F901F90189585B5887F85BD0E94C7040A
-:100C000008959FB7F894813029F470938900609318
-:100C1000880006C0823021F470938B0060938A00B4
-:100C20009FBF08950F931F93E0E8F0E080818068F4
-:100C3000808380818062808301E810E0D8018C91FC
-:100C400080618C938081808380E49CE9909387000D
-:100C5000809386008CED95E09093890080938800C6
-:100C600090938B0080938A0085E290E061E041E000
-:100C70000E94990485E290E062E041E00E949904BC
-:100C8000F8018081826080831F910F910895FC019B
-:100C90000484F585E02D808161810E94B90008956A
-:100CA00000D000D087E091E0EDB7FEB7928381835A
-:100CB00085E191E0948383830E94290C0F900F902B
-:100CC0000F900F908FE161E04CE151E021E00E9434
-:100CD000380508950F931F930E94500689E991E00B
-:100CE00060E070E041E02FE737E000E010E00E94B4
-:100CF00035090E94C5071F910F91089510928F0129
-:100D000010928C0184E167E00E94F00190938E01C3
-:100D100080938D010E946A0608951F930E941C0211
-:100D20000E941D091FB7F89410928F0180918D01C8
-:100D300090918E010E94F4001FBF8BE060E070E094
-:100D400040E00E949A020E946A061F910895CF9285
-:100D5000DF92EF92FF920F931F93CF93DF93AFC079
-:100D600080916D01833009F44DC0843028F48130C6
-:100D700099F18230B0F50AC0853009F454C085304D
-:100D800008F461C0863009F097C051C00E941D0967
-:100D900089E991E060E070E041E024E737E000E0BD
-:100DA00010E00E9435090E94C5071FB7F8940E9401
-:100DB0001C020E94C70580918D0190918E010E94B6
-:100DC000F40081E080938F011FBF8AE060E070E053
-:100DD00040E00E949A0273C08DE691E00E948D0669
-:100DE0006EC080918F01882309F469C08FE160E0B3
-:100DF00044E751E021E00E943805882309F05FC0F4
-:100E000087E15BC080918F01882309F458C08FE18E
-:100E100060E04BE151E021E00E943805882309F0B1
-:100E20004EC08BE14AC081E080938C0148C0809124
-:100E3000710160E04FE651E022E00E94380588230E
-:100E4000F1F58CE13AC086E090E00E94C80AEC011E
-:100E5000009719F48FE10E94E70380916E01888367
-:100E600080916F0189838091700120917101D22E50
-:100E7000CC2490E08C299D299B838A8380917101E9
-:100E800020917201F22EEE2490E08E299F299D83FD
-:100E90008C838DE060E070E040E00E949A026C81FB
-:100EA0007D818A819B8141E027E436E08E010E94AA
-:100EB00035090E94C50703C089E10E94E7038091BC
-:100EC0008D0190918E0160E04DE651E00E948A0113
-:100ED000882309F045CFDF91CF911F910F91FF90AB
-:100EE000EF90DF90CF90089580918C01882321F4BA
-:100EF00080E090E00E948D0610928C0108950E947F
-:100F000050060895AC0180918D0190918E0160E0B2
-:100F10000E94D801882319F48AE10E94E70308950A
-:100F200080931E0160931F01409320015093210183
-:100F300020932201309323018DE191E00E948207EA
-:100F4000089560932601409327018093280184E24D
-:100F500091E00E94820708958BE291E00E9482074F
-:100F6000089582E391E00E948207089589E391E069
-:100F70000E948207089580E491E00E94820708950C
-:100F800085E791E00E9482070895282F30E0220F24
-:100F9000331FF90183E0EE0FFF1F8A95E1F7E21B93
-:100FA000F30BE057FE4F81E081830895282F30E056
-:100FB000220F331FF90143E0EE0FFF1F4A95E1F7BF
-:100FC000E21BF30BE057FE4F11820895A0E9B1E058
-:100FD000282F30E0220F331FF90193E0EE0FFF1F9F
-:100FE0009A95E1F7E21BF30BEA0FFB1F1182282F02
-:100FF00030E0220F331FC90163E0880F991F6A9503
-:10100000E1F7821B930BA80FB91F17961C921E9233
-:101010001697089540E06EE051E022C0469FF0012F
-:101020001124E057FE4F81818823C9F08481958186
-:10103000892B31F0848195810197958384830FC03A
-:101040008681978101969783868326813781808563
-:1010500091852817390718F05383178216824F5F3E
-:101060004032E0F240937E0108951F939FB7F894B9
-:1010700080917C01882341F481E080937C019FBFB3
-:1010800010927D011EE051C09FBF56C0822F90E09C
-:10109000880F991FFC0133E0EE0FFF1F3A95E1F72F
-:1010A000E81BF90BE057FE4F83818823C9F1822F9B
-:1010B00090E0880F991FFC01A3E0EE0FFF1FAA9597
-:1010C000E1F7E81BF90BE057FE4F82859385892BEA
-:1010D000B9F0822F90E0880F991FFC0173E0EE0FAA
-:1010E000FF1F7A95E1F7E81BF90BE057FE4F0284EA
-:1010F000F385E02D219FC001112480579E4F099553
-:1011000080917D0190E0880F991FFC0153E0EE0F64
-:10111000FF1F5A95E1F7E81BF90BE057FE4F1382CA
-:1011200080917D018F5F80937D0120917D01203230
-:1011300008F4ACCF10927C011F91089520E931E0B2
-:10114000C90160E070E040EC51E00E94D60B0895C8
-:101150001F93182F90E0880F991FFC01A3E0EE0F5A
-:10116000FF1FAA95E1F7E81BF90BE057FE4F8485B6
-:101170009585892B91F0812F90E0880F991FFC01B4
-:1011800063E0EE0FFF1F6A95E1F7E81BF90BE057EC
-:10119000FE4F848595850E94750B812F90E0880F06
-:1011A000991FFC0143E0EE0FFF1F4A95E1F7E81B92
-:1011B000F90BE057FE4F1182812F90E0880F991FA5
-:1011C000FC0123E0EE0FFF1F2A95E1F7E81BF90B66
-:1011D000E057FE4F17821682812F90E0880F991FEB
-:1011E000FC01A3E0EE0FFF1FAA95E1F7E81BF90B46
-:1011F000E057FE4F1082812F90E0880F991FFC016D
-:1012000073E0EE0FFF1F7A95E1F7E81BF90BE0574B
-:10121000FE4F13861286812F90E0880F991FFC01E4
-:1012200053E0EE0FFF1F5A95E1F7E81BF90BE0576B
-:10123000FE4F158614861F9108951092800110921A
-:101240007F010BC00E94A80880917F0190918001CE
-:1012500001969093800180937F0180917F0190910E
-:1012600080018032910574F308957F928F929F924E
-:10127000AF92BF92CF92DF92EF92FF920F931F93A4
-:10128000CF93DF936C017B01742E5901480120E05C
-:1012900030E0122FC901880F991FFC0163E0EE0FA7
-:1012A000FF1F6A95E1F7E81BF90BE057FE4F8081BD
-:1012B000882331F01F5F2F5F3F4F2032310549F700
-:1012C000C12FD0E0CE01880F991FFC0143E0EE0F43
-:1012D000FF1F4A95E1F7E81BF90BE057FE4F8081AD
-:1012E000882319F088E10E94E703CE01880F991F37
-:1012F000DC0123E0AA0FBB1F2A95E1F7A81BB90B5D
-:10130000A057BE4F13961C92139781E08C931596AD
-:10131000FC92EE9214971996DC92CE921897FE01E9
-:1013200083E0EE0FFF1F8A95E1F7EC1BFD0BEE0F3C
-:10133000FF1FEE56FE4F70821B96BC92AE921A971C
-:101340001D969C928E921C97812FDF91CF911F91B9
-:101350000F91FF90EF90DF90CF90BF90AF909F9054
-:101360008F907F900895E1ECF0E08081806280832F
-:10137000089508951F920F920FB60F9211242F9384
-:101380003F934F935F936F937F938F939F93AF930D
-:10139000BF93EF93FF930E94CF050E94730080914B
-:1013A000C0008091C6008093810180918801909156
-:1013B000890160E041E851E00E94D801882319F4D6
-:1013C0008BE00E94E703FF91EF91BF91AF919F9156
-:1013D0008F917F916F915F914F913F912F910F90DE
-:1013E0000FBE0F901F9018951F920F920FB60F927D
-:1013F00011242F933F934F935F936F937F938F931A
-:101400009F93AF93BF93EF93FF930E94CF0580917B
-:10141000C1008F7D8093C10078940E9473008091F9
-:1014200050039091510360E042E851E00E948A012C
-:10143000882321F48091C1008F7D09C08091C00074
-:10144000809182018093C6008091C1008062809368
-:10145000C100FF91EF91BF91AF919F918F917F91CB
-:101460006F915F914F913F912F910F900FBE0F9011
-:101470001F9018950F931F938FEF61E00E94F0016A
-:10148000909351038093500380E461E00E94F00147
-:101490009093890180938801A0915003B0915103EA
-:1014A00083EB99E016969C938E9315971092C50046
-:1014B00082E28093C400E0ECF0E08081826080836F
-:1014C00086E08093C20001EC10E088E1F80180839F
-:1014D000CD010E941E0580918801909189010E9492
-:1014E0009402F8018081806880831F910F91089594
-:1014F000BF92CF92DF92EF92FF920F931F93CF9301
-:10150000DF93B82E6B01E42E00915003109151032C
-:10151000FFB6F894C8010E9418018E1518F4FFBE9A
-:1015200080E01AC010928401E60110C0C80160E09A
-:10153000AE010E94D801882319F487E00E94E703D6
-:101540002196809184018F5F809384018091840132
-:101550008E1560F3FFBE81E080938301882311F430
-:10156000BB2091F6DF91CF911F910F91FF90EF90EB
-:10157000DF90CF90BF900895991B79E004C0991F28
-:10158000961708F0961B881F7A95C9F780950895DD
-:10159000CF93DF93BC018230910510F462E070E0DC
-:1015A000A0915403B0915503ED01E0E0F0E040E07C
-:1015B00050E021C0888199818617970769F48A8154
-:1015C0009B81309719F09383828304C090935503D5
-:1015D00080935403FE0134C06817790738F441152D
-:1015E000510519F08417950708F4AC01FE018A81B2
-:1015F0009B819C01E9012097E9F641155105A9F16C
-:10160000CA01861B970B049708F4BA01E0E0F0E0EA
-:101610002AC08D919C91119784179507F9F464174E
-:10162000750781F412968D919C911397309719F05C
-:101630009383828304C09093550380935403FD01E8
-:1016400032964FC0CA01861B970BFD01E80FF91FA8
-:101650006193719302978D939C9343C0FD018281A6
-:1016600093819C01D9011097A1F68091520390912A
-:101670005303892B41F48091490190914A01909341
-:1016800053038093520340914B0150914C014115FB
-:10169000510541F44DB75EB78091470190914801E3
-:1016A000481B590B209152033091530324173507DF
-:1016B000B0F4CA01821B930B8617970780F0AB0129
-:1016C0004E5F5F4F8417950750F0420F531F5093A2
-:1016D000530340935203F9016193719302C0E0E018
-:1016E000F0E0CF01DF91CF910895CF93DF93009782
-:1016F00009F450C0EC0122971B821A82A091540376
-:10170000B0915503109709F140E050E0AC17BD07C8
-:1017100008F1BB83AA83FE0121913191E20FF31FEF
-:10172000AE17BF0779F48D919C911197280F391F3F
-:101730002E5F3F4F3983288312968D919C9113978A
-:101740009B838A834115510571F4D0935503C0934F
-:10175000540320C012968D919C911397AD01009770
-:1017600011F0DC01D3CFFA01D383C28321913191EF
-:10177000E20FF31FCE17DF0769F488819981280FE4
-:10178000391F2E5F3F4FFA01318320838A819B816D
-:1017900093838283DF91CF910895FB01DC0102C026
-:1017A00001900D9241505040D8F70895DC0101C0DE
-:1017B0006D9341505040E0F708950F931F93CF93DE
-:1017C000DF938C01EB01009731F46115710519F479
-:1017D00020E030E038C081E090E06EE070E00E94F0
-:1017E0001B0EFC019C01009771F180E88383209718
-:1017F00071F0D387C28781E88383809156039091EB
-:101800005703892B21F4F0935703E09356030115F6
-:101810001105C9F0118700878381826083838091DD
-:10182000580390915903892B71F4F0935903E09375
-:10183000580380915A0390915B03892B21F4F09314
-:101840005B03E0935A03C901DF91CF911F910F9180
-:101850000895A0E0B0E0EFE2FCE00C94E70EFE019A
-:101860003596619171918091580390915903AF0120
-:101870000E943E0C2096E2E00C94030FABE0B0E037
-:10188000E4E4FCE00C94D70E3C012B015A01FC016E
-:1018900017821682838181FD03C06FEF7FEFC6C17F
-:1018A0009AE0892E1E010894211C311CF30123812A
-:1018B000F20123FD859123FF81912F01882309F4F3
-:1018C000B2C1853239F423FD859123FF81912F0127
-:1018D000853229F490E0B3010E944D0EE7CF982F96
-:1018E000FF24EE249924FFE1FF15D0F09B3269F02C
-:1018F0009C3228F4903259F0933291F40EC09D320C
-:1019000049F0903369F441E024C052E0F52A84E0C4
-:10191000F82A28C098E0F92A25C0E0E1FE2A22C072
-:10192000F7FC29C0892F80538A3070F4F6FE05C079
-:10193000989C902C1124980E15C0E89CE02C112442
-:10194000E80EF0E2FF2A0EC09E3229F4F6FC6BC1CD
-:1019500040E4F42A07C09C3619F450E8F52A02C086
-:10196000983649F4F20123FD959123FF91912F01BF
-:10197000992309F0B8CF892F8554833018F080520D
-:10198000833038F444E050E0A40EB51E5FE3598381
-:101990000FC0933631F0933779F0933509F056C084
-:1019A00020C0F5018081898342E050E0A40EB51E7D
-:1019B000610101E010E012C0F501C080D180F6FCA9
-:1019C00003C06FEF7FEF02C0692D70E042E050E08E
-:1019D000A40EB51EC6010E94420E8C015FE7F522DF
-:1019E00014C0F501C080D180F6FC03C06FEF7FEF1B
-:1019F00002C0692D70E042E050E0A40EB51EC601A1
-:101A00000E94370E8C0150E8F52AF3FE07C01AC079
-:101A100080E290E0B3010E944D0EEA948E2D90E09A
-:101A200008171907A8F30EC0F601F7FC8591F7FE19
-:101A300081916F0190E0B3010E944D0EE110EA9494
-:101A4000015010400115110579F7EAC0943611F0E4
-:101A5000993669F5F7FE08C0F50120813181428190
-:101A6000538184E090E00AC0F501808191819C015E
-:101A7000442737FD4095542F82E090E0A80EB91E10
-:101A80009FE6F92257FF09C0509540953095219562
-:101A90003F4F4F4F5F4FE0E8FE2ACA01B901A10155
-:101AA0002AE030E00E94790ED82ED21840C0953737
-:101AB00029F41F2D1F7E2AE030E01DC01F2D197F45
-:101AC0009F3661F0903720F4983509F0ACC00FC014
-:101AD000903739F0983709F0A6C004C028E030E00C
-:101AE0000AC0106114FD146020E130E004C014FD50
-:101AF000166020E132E017FF08C0F50160817181B6
-:101B00008281938144E050E008C0F5018081918199
-:101B1000BC0180E090E042E050E0A40EB51EA101BF
-:101B20000E94790ED82ED2188FE7F82EF122F6FEF9
-:101B30000BC05EEFF522D91438F4F4FE07C0F2FCB6
-:101B400005C08FEEF82202C01D2D01C0192DF4FE34
-:101B50000DC0FE01ED0DF11D8081803319F499EE69
-:101B6000F92208C01F5FF2FE05C003C08F2D8678E2
-:101B700009F01F5F0F2DF3FC14C0F0FE0FC01E15FF
-:101B800010F09D2C0BC09D2C9E0C911A1E2D06C092
-:101B900080E290E0B3010E944D0E1F5F1E15C0F35E
-:101BA00004C01E1510F4E11A01C0EE2404FF0FC09A
-:101BB00080E390E0B3010E944D0E02FF1DC001FDC5
-:101BC00003C088E790E00EC088E590E00BC0802F4E
-:101BD000867891F001FF02C08BE201C080E2F7FC41
-:101BE0008DE290E0B3010E944D0E06C080E390E0CC
-:101BF000B3010E944D0E9A94D914C0F3DA94F10106
-:101C0000ED0DF11D808190E0B3010E944D0EDD20AD
-:101C1000A9F706C080E290E0B3010E944D0EEA945D
-:101C2000EE20C1F743CEF30166817781CB012B967D
-:101C3000E2E10C94F30E0F931F93CF93DF93689F11
-:101C40008001699F100D789F100D1124C8010E941A
-:101C5000C80AEC01009729F060E070E0A8010E943A
-:101C6000D60BCE01DF91CF911F910F910895FC010A
-:101C70000590615070400110D8F7809590958E0FB7
-:101C80009F1F0895FC016150704001900110D8F72A
-:101C9000809590958E0F9F1F08950F931F93CF935C
-:101CA000DF938C01EB018B8181FF1BC082FF0DC094
-:101CB0002E813F818C819D812817390764F4E8814A
-:101CC000F9810193F983E88306C0E885F985802FBF
-:101CD0000995892B31F48E819F8101969F838E8394
-:101CE00002C00FEF1FEFC801DF91CF911F910F913D
-:101CF0000895FA01AA27283051F1203181F1E894A2
-:101D00006F936E7F6E5F7F4F8F4F9F4FAF4FB1E0EE
-:101D10003ED0B4E03CD0670F781F891F9A1FA11DE9
-:101D2000680F791F8A1F911DA11D6A0F711D811DEA
-:101D3000911DA11D20D009F468943F912AE0269FAF
-:101D400011243019305D3193DEF6CF010895462F0E
-:101D50004770405D4193B3E00FD0C9F7F6CF462FEF
-:101D60004F70405D4A3318F0495D31FD4052419358
-:101D700002D0A9F7EACFB4E0A69597958795779515
-:101D80006795BA95C9F700976105710508959B019C
-:101D9000AC010A2E06945795479537952795BA9525
-:101DA000C9F7620F731F841F951FA01D08952F92FE
-:101DB0003F924F925F926F927F928F929F92AF92DB
-:101DC000BF92CF92DF92EF92FF920F931F93CF9328
-:101DD000DF93CDB7DEB7CA1BDB0B0FB6F894DEBFBF
-:101DE0000FBECDBF09942A88398848885F846E84E5
-:101DF0007D848C849B84AA84B984C884DF80EE802F
-:101E0000FD800C811B81AA81B981CE0FD11D0FB637
-:101E1000F894DEBF0FBECDBFED010895F894FFCF5B
-:101E2000616D33323870004669726D64617461208F
-:101E30007625732000302E302E310003020400007E
-:101E40000000000006000000000000050000000087
-:101E5000000003000000000000020000000000007D
-:0E1E60000100000000000020005C03000000F4
-:00000001FF
32 README.md
View
@@ -79,7 +79,35 @@ The following features remain to be implemented:
would be very good.
* Get faster, better, stronger IO channels running such as Ethernet.
+
+
+INSTALL
+
+Uploading to Arduino Uno on MacOSX
+ * avrdude -F -V -c arduino -p ATMEGA328P -P /dev/cu.usbmodem641 -b 115200 -U flash:w:Firmdata-atmega328p.hex
+
+Uploading to Arduino Duemilanove on Windows
+ * avrdude -pm328p -cstk500v1 -Pcom3 -b57600 -Uflash:w:Firmdata-atmega328p.hex:a
+
+COMPILE
+
+The Firmware is built using the avr-gcc/avr-libc integration for Eclipse. To compile the software outside of Eclipse follow this guide:
-Uploading to Arduino Uno on MacOSX:
+Install the following required GNU tools as detailed at http://www.nongnu.org/avr-libc/user-manual/install_tools.html
+
+ * GNU Binutils
+ * GCC
+ * AVR LibC
+ * AVRDUDE
+
+There should be a Makefile but there isn't right now so once all the tools are installed do something like this:
- avrdude -F -V -c arduino -p ATMEGA328P -P /dev/cu.usbmodem641 -b 115200 -U flash:w:Firmdata-atmega328p.hex
+avr-gcc -DF_CPU=16000000UL -mmcu=atmega328p -Wall -g2 -gstabs -Os \
+-fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields \
+-Wl,-Map,Firmdata-atmega328p.map -o "Firmdata-atmega328p.elf" *.c
+
+avr-objcopy -j .text -j .data -O ihex Firmdata-atmega328p.elf Firmdata-atmega328p.hex
+
+Then upload the Firmdata-atmega328p.elf file to the Arduino using the INSTALL instructions above.
+
+
24 RPM.pm
View
@@ -81,21 +81,23 @@ sub got_magnetometer {
$self->outside_pole($when);
$self->currentPole(undef);
}
- } else {
- if ($value > 135) {
- $self->currentPole('s');
- $self->inside_pole($when);
-
- } elsif ($value < 122) {
- $self->currentPole('n');
- $self->inside_pole($when);
- }
+ }
+
+ #a single reading may both indicate that a pole is no longer present
+ #and that a new one has been detected so this should not be in an else
+ #block with the logic above that clears out the current pole
+ if ($value > 135) {
+ $self->currentPole('s');
+ $self->inside_pole($when);
+ } elsif ($value < 122) {
+ $self->currentPole('n');
+ $self->inside_pole($when);
}
}
sub inside_pole {
my ($self, $when) = @_;
-
+ #this is where north poles could be counted
}
#counting a turn when a pole is left instead of when it is entered
@@ -119,6 +121,8 @@ sub outside_pole {
sub got_knob {
my ($self, $when, $value) = @_;
+
+ warn "Knob at $when";
}
return "RPMController";
17 lib/Device/Firmdata.pm
View
@@ -44,7 +44,7 @@ sub build_io {
if ($^O eq 'MSWin32') {
$ioRole = 'Device::Firmdata::Role::IO::Win32Serial';
} else {
- $ioRole = 'Device::Firmdata::Role::IO::DeviceSerial';
+ $ioRole = 'Device::Firmdata::Role::IO::Serial';
}
unless(defined($portName)) {
@@ -58,6 +58,20 @@ sub build_io {
return $metaclass->new_object(portName => $portName);
}
+sub build_session {
+ my ($self) = @_;
+ my $sessionFile = $self->config->{sessionFile};
+ my $sessionClass;
+
+ if (defined($sessionFile)) {
+ $sessionClass = require $sessionFile;
+ } else {
+ $sessionClass = 'Device::Firmdata::Session';
+ }
+
+ return $sessionClass->new(host => $self);
+}
+
sub run {
my ($self) = @_;
@@ -178,6 +192,7 @@ sub handleSystemMessage_beacon {
$self->session(Device::Firmdata::Session->new(host => $self));
+ $self->session($self->build_session);
$self->session->sessionOpen;
}
6 lib/Device/Firmdata/Role/IO.pm
View
@@ -18,7 +18,7 @@ use constant HEADER_LENGTH => 1;
sub getHeader {
my ($self) = @_;
- my $headerByte = $self->read(1);
+ my $headerByte = $self->read(HEADER_LENGTH);
my $headerValue = unpack('C', $headerByte);
my $channel = ($headerValue & HEADER_CHANNEL_MASK) >> HEADER_CHANNEL_SHIFT;
my $length = $headerValue & HEADER_SIZE_MASK;
@@ -29,9 +29,11 @@ sub getHeader {
sub getMessage {
my ($self) = @_;
my ($channel, $length) = $self->getHeader;
- my $content = $self->read($length);
+ my $content = $self->read($length) if $length > 0;
my $bytesRead = $length + HEADER_LENGTH;
+ $content = '' unless defined $content;
+
$self->bytesRead->add($bytesRead);
return ($channel, $content, $bytesRead);
176 lib/Device/Firmdata/Role/IO/DeviceSerial.pm
View
@@ -1,94 +1,84 @@
-package Device::Firmdata::Role::IO::DeviceSerial;
-
-use Moose::Role;
-use Device::SerialPort;
-use Symbol qw(gensym);
-
-with 'Device::Firmdata::Role::IO';
-
-has driver => ( is => 'ro', isa => 'Device::SerialPort', required => 1, builder => 'build_driver', lazy => 1 );
-
-sub build_portName {
- my ($self) = @_;
-
- opendir my $dir, "/dev" or die $!;
- my @modems = grep /^cu\.usbmodem/, readdir $dir;
-
- die "Can't find a modem in /dev ...\n" if @modems < 1;
- die "Don't know which modem to use: @modems\n" if @modems > 1;
-
- return "/dev/$modems[0]";
-}
-
-
-sub build_driver {
- my ($self) = @_;
-
- my $driver = Device::SerialPort->new($self->portName());
- $driver->debug(1);
-
- #$driver->datatype("raw");
- $driver->baudrate(57600) or die "Could not set baud: $^E";
- $driver->databits(8);
- $driver->parity('none') or die "Could not set parity: $^E";
- $driver->stopbits(1) or die "Could not set stopbits: $^E";
-
- $driver->stty_echo(0);
-
- # Block indefinitely.
- $driver->read_const_time(0);
- $driver->read_char_time(0);
-
- $driver->write_settings();
-
- return $driver;
-}
-
-sub read {
- my ($self, $bytes) = @_;
-
- # Device::SerialPort is often returning short strings, and I'm not
- # sure why. It was more expedient to work around that here.
-
- my $done_buf = "";
-
- my $done = 0;
- while ($done < $bytes) {
- my ($bytesRead, $buf) = $self->driver->read($bytes - $done);
- die "Could not read: $!" if $bytesRead < 0;
-
- if ($done + $bytesRead > $bytes) {
- die "Device::SerialPort is a bastard ($done + $bytesRead > $bytes)";
- }
-
- $done_buf .= $buf;
- $done += $bytesRead;
- }
-
- if (0) {
- use bytes;
- my $ascii = $done_buf;
- $ascii =~ s/([^ -~])/sprintf '\x{%02x}', ord($1)/eg;
- warn "<<< $done ($ascii)\n";
- }
-
- return $done_buf;
-}
-
-sub write {
- my ($self, $content) = @_;
-
- use bytes;
- my $length = length($content);
- my $written;
-
- $written = $self->driver->write($content);
-
- if ($written != $length) {
- die "tried to write $length bytes but only wrote $written: $!";
- }
-
- return;
-}
-
+package Device::Firmdata::Role::IO::DeviceSerial;
+
+use Moose::Role;
+use Device::SerialPort;
+use Symbol qw(gensym);
+
+with 'Device::Firmdata::Role::IO';
+
+has driver => ( is => 'ro', isa => 'Device::SerialPort', required => 1, builder => 'build_driver', lazy => 1 );
+
+sub build_portName {
+ my ($self) = @_;
+
+ opendir my $dir, "/dev" or die $!;
+ my @modems = grep /^cu\.usbmodem/, readdir $dir;
+
+ die "Can't find a modem in /dev ...\n" if @modems < 1;
+ die "Don't know which modem to use: @modems\n" if @modems > 1;
+
+ return "/dev/$modems[0]";
+}
+
+
+sub build_driver {
+ my ($self) = @_;
+
+ my $driver = Device::SerialPort->new($self->portName());
+ $driver->debug(1);
+
+ #$driver->datatype("raw");
+ $driver->baudrate(57600) or die "Could not set baud: $^E";
+ $driver->databits(8);
+ $driver->parity('none') or die "Could not set parity: $^E";
+ $driver->stopbits(1) or die "Could not set stopbits: $^E";
+
+ $driver->stty_echo(0);
+
+ $driver->read_const_time(10000);
+ $driver->read_char_time(0);
+
+ $driver->write_settings();
+
+ return $driver;
+}
+
+sub read {
+ my ($self, $bytes) = @_;
+ my $buf;
+
+ while(1) {
+ my ($bytesRead);
+
+ ($bytesRead, $buf) = $self->driver->read($bytes);
+
+ next if $bytesRead == 0;
+
+ if ($bytesRead != $bytes) {
+ die "Tried to read $bytes bytes but only got $bytesRead";
+ }
+
+ last;
+ }
+
+ return $buf;
+
+}
+
+sub write {
+ my ($self, $content) = @_;
+
+ use bytes;
+ my $length = length($content);
+ my $written;
+
+ $written = $self->driver->write($content);
+
+ if ($written != $length) {
+ die "tried to write $length bytes but only wrote $written: $!";
+ }
+
+ return;
+}
+
1;
63 lib/Device/Firmdata/Role/IO/Serial.pm
View
@@ -0,0 +1,63 @@
+package Device::Firmdata::Role::IO::Serial;
+
+use Moose::Role;
+
+with 'Device::Firmdata::Role::IO';
+
+has fh => ( is => 'ro', isa => 'GlobRef', required => 1, lazy => 1, builder => 'build_fh' );
+
+sub build_fh {
+ my ($self) = @_;
+ my $path = $self->portName;
+ my $fh;
+
+ die "Could not open $path for read/write" unless open($fh, '+>', $path);
+
+ return $fh;
+}
+
+sub read {
+ my ($self, $wantBytes) = @_;
+ my $bytesLeft = $wantBytes;
+ my $readBytes = 0;
+ my $outputBuf;
+
+ while($bytesLeft > 0) {
+ my $readBuf;
+ my $bytesRead = sysread($self->fh, $readBuf, $bytesLeft);
+
+ if ($bytesRead == -1) {
+ die "Could not read from fh: $!";
+ }
+
+ $bytesLeft -= $bytesRead;
+
+ $outputBuf .= $readBuf;
+ }
+
+ if ($bytesLeft < 0) {
+ die "read too much data";
+ }
+
+ return $outputBuf;
+}
+
+sub write {
+ my ($self, $content) = @_;
+ my $length = length($content);
+ my $bytesLeft = length($content);
+
+ while($bytesLeft > 0) {
+ my $bytesSent = syswrite($self->fh, $content, $bytesLeft, $length - $bytesLeft);
+
+ if ($bytesSent == -1) {
+ die "could not write to fh: $!";
+ }
+
+ $bytesLeft -= $bytesSent;
+ }
+
+ return;
+}
+
+1;
2  work.pl
View
@@ -8,4 +8,4 @@
my $firmdata = Device::Firmdata->new(config => { @ARGV } );
-$firmdata->run;
+$firmdata->run;
Please sign in to comment.
Something went wrong with that request. Please try again.