diff --git a/Mainboard/Mainboard.atsln b/Mainboard/Mainboard.atsln new file mode 100644 index 0000000..f299e7f --- /dev/null +++ b/Mainboard/Mainboard.atsln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Atmel Studio Solution File, Format Version 11.00 +Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "Mainboard", "Mainboard\Mainboard.cproj", "{839C4697-AB18-4132-8E80-F57DDB26ADEB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|AVR = Debug|AVR + Release|AVR = Release|AVR + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {839C4697-AB18-4132-8E80-F57DDB26ADEB}.Debug|AVR.ActiveCfg = Debug|AVR + {839C4697-AB18-4132-8E80-F57DDB26ADEB}.Debug|AVR.Build.0 = Debug|AVR + {839C4697-AB18-4132-8E80-F57DDB26ADEB}.Release|AVR.ActiveCfg = Release|AVR + {839C4697-AB18-4132-8E80-F57DDB26ADEB}.Release|AVR.Build.0 = Release|AVR + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Mainboard/Mainboard.atsuo b/Mainboard/Mainboard.atsuo new file mode 100644 index 0000000..386f49d Binary files /dev/null and b/Mainboard/Mainboard.atsuo differ diff --git a/Mainboard/Mainboard/Debug/Mainboard.d b/Mainboard/Mainboard/Debug/Mainboard.d new file mode 100644 index 0000000..960d4aa --- /dev/null +++ b/Mainboard/Mainboard/Debug/Mainboard.d @@ -0,0 +1,68 @@ +Mainboard.d Mainboard.o: .././Mainboard.c .././config.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/interrupt.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h \ + .././led.h .././rs232.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdarg.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h \ + .././usb.h + +.././config.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/interrupt.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h: + +.././led.h: + +.././rs232.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdarg.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h: + +.././usb.h: diff --git a/Mainboard/Mainboard/Debug/Mainboard.eep b/Mainboard/Mainboard/Debug/Mainboard.eep new file mode 100644 index 0000000..1996e8f --- /dev/null +++ b/Mainboard/Mainboard/Debug/Mainboard.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/Mainboard/Mainboard/Debug/Mainboard.elf b/Mainboard/Mainboard/Debug/Mainboard.elf new file mode 100644 index 0000000..bf68df4 Binary files /dev/null and b/Mainboard/Mainboard/Debug/Mainboard.elf differ diff --git a/Mainboard/Mainboard/Debug/Mainboard.hex b/Mainboard/Mainboard/Debug/Mainboard.hex new file mode 100644 index 0000000..b5fc9b3 --- /dev/null +++ b/Mainboard/Mainboard/Debug/Mainboard.hex @@ -0,0 +1,245 @@ +:100000000C9461000C947E000C947E000C947E0095 +:100010000C947E000C947E000C947E000C947E0068 +:100020000C947E000C947E000C947E000C9434039F +:100030000C945C030C947E000C947E000C947E0067 +:100040000C947E000C947E000C947E000C947E0038 +:100050000C947E000C947E000C947E000C947E0028 +:100060000C947E000C947E000C947E000C947E0018 +:100070000C947E0012010002FF000010ADDEEEBE07 +:1000800000010102030104030904140342006C008F +:10009000750062006200460069007300680000009D +:1000A00020034800610063006B00650072002D00B2 +:1000B0004A0065006F007000610072006400790002 +:1000C000000011241FBECFEFD4E0DEBFCDBF11E092 +:1000D000A0E0B1E0E6EFFEE002C005900D92AE3385 +:1000E000B107D9F721E0AEE3B1E001C01D92AA3417 +:1000F000B207E1F70E9433010C9479070C940000D9 +:1001000095B19F7195B995B18295880F807E982B96 +:1001100095B9089584B1806E84B9089586E090E021 +:100120000E94800078940E948A000E944E010E94E2 +:10013000BA0108952F923F924F925F926F927F92F1 +:100140008F929F92AF92BF92CF92DF92EF92FF92E7 +:100150000F931F93CF93DF937C018B015A01C0E073 +:10016000D0E0212C312C422C532C2CC0862C972CE7 +:10017000C7010E9480008FEF881A980A8FEF8816B7 +:100180009104B1F71C161D065CF4842C952CC80153 +:100190000E9480008FEF881A980A8C169D06B9F786 +:1001A0008FEFC81AD80ACA14DB0421F407C0610112 +:1001B0006C2E7D2ECF3FD105CCF2E4CF2196CF3FE0 +:1001C000D10521F01A141B0494F3F8CFDF91CF91DD +:1001D0001F910F91FF90EF90DF90CF90BF90AF9065 +:1001E0009F908F907F906F905F904F903F902F9057 +:1001F0000895C82F4AE050E064E070E087E090E0A6 +:100200000E949A004C2F50E066E070E084E090E09D +:100210000E949A004C2F50E062E070E086E090E08F +:100220000E949A004C2F50E063E070E082E090E082 +:100230000E949A004C2F50E061E070E083E090E073 +:100240000E949A004C2F50E065E070E081E090E061 +:100250000E949A004C2F50E064E070E085E090E04E +:100260000E949A00CFCF0E948E0082E090E00E9410 +:1002700080008CE30E94F900CF93C82F8A3019F4D4 +:100280008DE00E943C01E8ECF0E0908195FFFDCF0D +:10029000C093CE0080E090E0CF91089586E08093F7 +:1002A000CA00E9ECF0E080818860808387E6809373 +:1002B000CC0080E091E0909347018093460108953F +:1002C000CF93DF93CDB7DEB760970FB6F894DEBF5C +:1002D0000FBECDBF2CE0E5E1F1E0DE01119601900B +:1002E0000D922A95E1F71D861E861F86188AFC014D +:1002F0002081233C51F48181813049F460E1CE01B9 +:1003000001960E94E20281E003C080E001C080E02B +:1003100060960FB6F894DEBF0FBECDBFDF91CF91D0 +:100320000895CF93DF93CDB7DEB7A0970FB6F894BB +:10033000DEBF0FBECDBF8130A1F440E2BE016F5FD2 +:100340007F4F0E94BD02882361F018A2CE01019662 +:100350000E94540740E2BE016F5F7F4F81E80E9418 +:100360000503A0960FB6F894DEBF0FBECDBFDF9198 +:10037000CF9108950E94BD01089580EA8093D8002E +:1003800086E089BD09B400FEFDCF80E88093D800E7 +:100390001092E00010923E018FEF80930E013C9886 +:1003A00088E08093E20008952F923F924F925F92EF +:1003B0007F928F929F92AF92CF92DF92EF92FF92B5 +:1003C0000F931F93CF93DF93282F90E06CE070E0A2 +:1003D0000E940A06FC01EB5DFE4F822F90E06CE06C +:1003E00070E00E940A06895D9E4F41E00F2EF9EEF3 +:1003F000CF2ED12CF02D0F2EFBEEEF2EF12CF02D69 +:10040000AA24A3940CEE10E06DEE70E00F2EF0EF36 +:100410004F2E512CF02D6894992492F8812C6894D9 +:10042000772474F8DF0120812F3F59F1E6014883DA +:10043000E701A8822081E80128831C019C0121504A +:100440003109E9012881203841F0203441F020327F +:1004500041F0203141F4372D07C030E405C030E3CE +:1004600003C030E201C0382DE1012881232BEB01CC +:1004700028832C9120FF03C0D2011C9202C0E2010C +:1004800098824F5F33960396453061F6EAEEF0E0CE +:100490008EE180831082DF91CF911F910F91FF90A9 +:1004A000EF90DF90CF90AF909F908F907F905F9074 +:1004B0004F903F902F900895E8EEF0E08081857096 +:1004C000E9F30895AF92BF92CF92DF92EF92FF923D +:1004D0000F931F93CF93DF93D82ED62FC72FE42FE0 +:1004E000F0E02E173F0710F4C22E01C0C42E0E9468 +:1004F0005C020D2F1C2F6894AA24A4F80F2EF8EE8E +:10050000EF2EF12CF02D0F2EFEEFBF2EF02DC1EFB0 +:10051000D0E02C2D80E18C1508F42A2D2223D9F06F +:10052000F801922FDD2011F0808101C08491888331 +:10053000915031969111F6CF622F615070E06F5F4C +:100540007F4F060F171FC21AF701B082C11007C0F4 +:10055000203129F007C0F701B082CC2019F00E94A9 +:100560005C02D7CFDF91CF911F910F91FF90EF9059 +:10057000DF90CF90BF90AF9008958093E900909165 +:10058000F200941708F4492F4423D1F0362FE62FB8 +:10059000F72FA1EFB0E09C9191939E2F931B94179E +:1005A000D0F39091F20091110BC021E030E002C035 +:1005B000220F331F8A95E2F7EAEEF0E020831082E3 +:1005C000842F08956623E9F01092E900E8EEF0E048 +:1005D000208120FFFDCF2091F200211114C0282F8F +:1005E000E82FF92FA1EFB0E081918C938E2F821B21 +:1005F0008617D0F3E8EEF0E080818E7F808381E083 +:10060000089580E0089580E00895CF93DF93442318 +:1006100029F18093E900E8EEF0E0808180FFFDCFD2 +:100620008091F20081111CC0962FE62FF72FA8EEC3 +:10063000B0E0C1EFD0E08C9185FF02C0808188835B +:1006400031968E2F891B8417B0F3E8EEF0E080819D +:100650008E7F80838FE7808381E003C080E001C0CC +:1006600080E0DF91CF9108951F920F920FB60F9205 +:1006700011248F93EF93FF93E1EEF0E080811082DD +:1006800083FF12C01092E90081E08093EB0010928A +:10069000EC0082E18093ED0088E08093F0001092FE +:1006A0003E018FEF80930E01FF91EF918F910F909C +:1006B0000FBE0F901F9018951F920F920FB60F92BA +:1006C00011243F924F925F926F927F928F929F92EE +:1006D000AF92BF92CF92DF92EF92FF920F931F9350 +:1006E0002F933F934F935F936F937F938F939F933A +:1006F000AF93BF93EF93FF93CF93DF93CDB7DEB765 +:100700002A97DEBFCDBF8091F40080FF4CC21092CB +:10071000E9008091E80083FF13C2E1EFF0E08081FF +:10072000898380818A83208130E03C832B834081D0 +:10073000942F80E0822B932B9C838B83208130E04D +:100740003E832D834081942F80E0822B932B9E83C8 +:100750008D83208130E038872F834081942F80E083 +:10076000822B932B98878F8382EF8093E8008A8176 +:10077000863009F024C18B819C81811523E092078A +:1007800009F4FBC048F4811551E0950779F0811513 +:10079000924009F010C124C08130B3E09B0709F4F6 +:1007A000F6C08230934009F006C1FBC0E4E7F0E0F8 +:1007B00044912F813885BF0180E00E94620202C20D +:1007C0009A2F50815F3F09F49B2F490F8150339638 +:1007D0008111F6CF2F5F3F4F2230310539F410C021 +:1007E00020E030E040E014E0A1E0B0E0C9016CE0BE +:1007F00070E00E940A06FC01EB5DFE4F812FE0CF06 +:10080000842F880F880F880F841B0F2EFBE1EF2E9B +:10081000F02DE80E8E2D90E00E941C06082F192F57 +:1008200089E0D8018C9382E011968C9311971296EF +:10083000EC92129713961C92139714968C9314971C +:1008400081E015968C93159716961C92169780EC5E +:1008500017968C9317978AEF18968C93F801399610 +:100860001A86198644E0A12C88248394F82C9A2CAB +:100870000F2EF9E07F2EF02DDD24DA940F2EF7E015 +:10088000BF2EF02D0F2EF5E0CF2EF02D68946624AC +:1008900061F80F2EF3E05F2EF02D56C07F2DDC01A6 +:1008A0002C912F3F09F4792D670F51500396511168 +:1008B000F5CF70824183428213826483D58216828F +:1008C000D782108639966623C1F1832F932D6CE071 +:1008D00070E00E940A069C012A5D3E4F482CC90127 +:1008E000B90161507109DB015C915F3F01F1B08298 +:1008F000C182652F679566276795642962835134A5 +:1009000041F0503441F0513841F0503841F4562D07 +:1009100007C05F2D05C05F2D03C0562D01C0552DAA +:100920005383DC018C91848315821682379643941D +:100930002D5F3F4FB5E04B12D2CFA985BA851196F6 +:10094000BA87A987129771F04984342D3A84842D8F +:10095000932D6CE070E00E940A068B5D9E4F542F31 +:100960006A2D9CCF2F8138854E2DB80181E00E94E1 +:100970006202C8010E94B70625C1E6E8F0E0449192 +:100980002F813885BF0180E00E9462021BC1EAE826 +:10099000F0E044912F813885BF0180E00E9462021F +:1009A00011C1E0EAF0E044912F813885BF0180E079 +:1009B0000E94620207C181E28093EB0003C185308F +:1009C00071F48EEF8093E800E8EEF0E0808180FF24 +:1009D000FDCF8B819C8180688093E300F3C08930D8 +:1009E000C1F49981911160C08B819C81019769F458 +:1009F00081E080933E018EEF8093E80010920E011B +:100A000080910E010E94D401DDC081E28093EB0051 +:100A1000D9C0883089F49981903809F057C0E8EE40 +:100A2000F0E0808180FFFDCF80913E018093F10056 +:100A30008EEF8093E800C6C081111CC0E8EEF0E0A4 +:100A4000808180FFFDCF8981823859F48D81E9EE64 +:100A5000F0E080838091EB0085FB882780F910828D +:100A600001C080E0E1EFF0E0808310828EEF8093A0 +:100A7000E800A8C08B30C1F48981803211F0811167 +:100A800055C08D819E818230910550F480930E0176 +:100A90008EEF8093E80080910E010E94D40192C0F5 +:100AA00081E28093EB008EC08A3081F489818038A6 +:100AB000E9F5E8EEF0E0808180FFFDCF80910E0146 +:100AC0008093F1008EEF8093E8007CC0813011F0BC +:100AD000833061F58981823049F58B819C81892B36 +:100AE00029F58D819E818F779927382F31503430A9 +:100AF000E8F43EEF3093E8008093E9002A81233048 +:100B000021F481E28093EB005DC099E19093EB00CA +:100B100021E030E0F90102C0EE0FFF1F8A95E2F7F5 +:100B2000CF01EAEEF0E0808310824CC0CE01019646 +:100B30000E946001811146C081E28093EB0042C0B7 +:100B400081E28093EB002FC0F22E408150E0022E14 +:100B500002C0559547950A94E2F740FF1BC0DB01A0 +:100B60002C93D6018C9182FF13C08091F2008823D0 +:100B700041F06091F20070E0822F0E949101F092AA +:100B8000E900E8EEF0E089EF80838FE780831AC008 +:100B9000D8019C932F5F3F4F25303105A9F681E2A4 +:100BA0008093EB000FC021E030E0E4EFF0E069EE6D +:100BB00070E00F2EF8EECF2ED12CF02D0BEE10E0C2 +:100BC00091E2C2CF2A960FB6F894DEBF0FBECDBF1A +:100BD000DF91CF91FF91EF91BF91AF919F918F9155 +:100BE0007F916F915F914F913F912F911F910F9145 +:100BF000FF90EF90DF90CF90BF90AF909F908F903D +:100C00007F906F905F904F903F900F900FBE0F902E +:100C10001F9018955527002480FF02C0060E571F0D +:100C2000660F771F6115710521F0969587950097DE +:100C300099F7952F802D08950F931F93CF93DF93EE +:100C40008230910510F482E090E0E0914201F09151 +:100C5000430120E030E0C0E0D0E023C0408151817A +:100C600048175907A8F04817590761F48281938102 +:100C7000209719F09B838A832EC090934301809321 +:100C8000420129C02115310529F04217530710F000 +:100C9000A90102C0BE01DF0102811381EF019A01A7 +:100CA000F8013097D9F62115310509F1281B390BC8 +:100CB0002430310590F412968D919C911397611513 +:100CC000710521F0FB019383828304C0909343015B +:100CD00080934201FD01329644C0FD01E20FF31FF3 +:100CE00081939193225031092D933C933AC02091E6 +:100CF000400130914101232B41F4209111013091A9 +:100D00001201309341012093400120910F01309155 +:100D100010012115310541F42DB73EB74091130163 +:100D200050911401241B350BE0914001F0914101D9 +:100D3000E217F307A0F42E1B3F0B2817390778F0B2 +:100D4000AC014E5F5F4F2417350748F04E0F5F1F11 +:100D500050934101409340018193919302C0E0E0A0 +:100D6000F0E0CF01DF91CF911F910F910895EF92A5 +:100D7000FF920F931F93CF93DF93009709F48FC0D7 +:100D8000DC01129713961C921E921297E09042017A +:100D9000F0904301E114F10489F42D913C911197F5 +:100DA000280F391F809140019091410182179307CC +:100DB00089F5B0934101A093400171C0E70120E0A3 +:100DC00030E001C0EA01CA17DB0738F44A815B81D1 +:100DD0009E0141155105B1F722C0BC016250710955 +:100DE000FB01D383C28300811181AC01400F511FED +:100DF0004C175D0761F448815981400F511F4E5FC8 +:100E00005F4F518340834A815B8153834283211525 +:100E1000310529F4B0934301A093420140C0F90188 +:100E2000B383A283E90169917991C60FD71FAC17EB +:100E3000BD0779F4DC015E914E91460F571F4E5F5E +:100E40005F4F5183408312968D919C9113979383AA +:100E50008283A0E0B0E002C0D7017C01F70182816B +:100E600093810097C9F7C701029620813181820FD3 +:100E7000931F20914001309141012817390779F4DF +:100E8000109729F4109243011092420104C0139666 +:100E90001C921E921297F0924101E0924001CDB750 +:100EA000DEB7E6E00C946A07DC016C9161566A31AA +:100EB00008F0605E6F5B6D93C1F708952A883988EA +:100EC00048885F846E847D848C849B84AA84B984E2 +:100ED000C884DF80EE80FD800C811B81AA81B981EE +:100EE000CE0FD11D0FB6F894DEBF0FBECDBFED0102 +:060EF0000895F894FFCF05 +:100EF60000000002000000003C0100000000FF00AE +:100F0600004A01200056657273696F6E20312E30DB +:100F16000000000000802002812002FF2002FF2046 +:0E0F260002FF2002FF2002FF2002FF20020037 +:00000001FF diff --git a/Mainboard/Mainboard/Debug/Mainboard.lss b/Mainboard/Mainboard/Debug/Mainboard.lss new file mode 100644 index 0000000..1cbb1cc --- /dev/null +++ b/Mainboard/Mainboard/Debug/Mainboard.lss @@ -0,0 +1,2502 @@ + +Mainboard.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .data 0000003e 00800100 00000ef6 00000f8a 2**0 + CONTENTS, ALLOC, LOAD, DATA + 1 .text 00000ef6 00000000 00000000 00000094 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .bss 0000000c 0080013e 0080013e 00000fc8 2**0 + ALLOC + 3 .stab 00000d2c 00000000 00000000 00000fc8 2**2 + CONTENTS, READONLY, DEBUGGING + 4 .stabstr 00000209 00000000 00000000 00001cf4 2**0 + CONTENTS, READONLY, DEBUGGING + 5 .comment 0000002f 00000000 00000000 00001efd 2**0 + CONTENTS, READONLY + 6 .debug_aranges 000001f0 00000000 00000000 00001f2c 2**0 + CONTENTS, READONLY, DEBUGGING + 7 .debug_info 000020ca 00000000 00000000 0000211c 2**0 + CONTENTS, READONLY, DEBUGGING + 8 .debug_abbrev 00000d9a 00000000 00000000 000041e6 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_line 000010cf 00000000 00000000 00004f80 2**0 + CONTENTS, READONLY, DEBUGGING + 10 .debug_frame 00000510 00000000 00000000 00006050 2**2 + CONTENTS, READONLY, DEBUGGING + 11 .debug_str 0000074d 00000000 00000000 00006560 2**0 + CONTENTS, READONLY, DEBUGGING + 12 .debug_loc 0000198b 00000000 00000000 00006cad 2**0 + CONTENTS, READONLY, DEBUGGING + 13 .debug_ranges 00000190 00000000 00000000 00008638 2**0 + CONTENTS, READONLY, DEBUGGING + +Disassembly of section .text: + +00000000 <__vectors>: + 0: 0c 94 61 00 jmp 0xc2 ; 0xc2 <__ctors_end> + 4: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 8: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + c: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 10: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 14: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 18: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 1c: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 20: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 24: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 28: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 2c: 0c 94 34 03 jmp 0x668 ; 0x668 <__vector_11> + 30: 0c 94 5c 03 jmp 0x6b8 ; 0x6b8 <__vector_12> + 34: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 38: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 3c: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 40: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 44: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 48: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 4c: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 50: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 54: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 58: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 5c: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 60: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 64: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 68: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 6c: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + 70: 0c 94 7e 00 jmp 0xfc ; 0xfc <__bad_interrupt> + +00000074 : + 74: 12 01 00 02 ff 00 00 10 ad de ee be 00 01 01 02 ................ + 84: 03 01 .. + +00000086 : + 86: 04 03 09 04 .... + +0000008a : + 8a: 14 03 42 00 6c 00 75 00 62 00 62 00 46 00 69 00 ..B.l.u.b.b.F.i. + 9a: 73 00 68 00 00 00 s.h... + +000000a0 : + a0: 20 03 48 00 61 00 63 00 6b 00 65 00 72 00 2d 00 .H.a.c.k.e.r.-. + b0: 4a 00 65 00 6f 00 70 00 61 00 72 00 64 00 79 00 J.e.o.p.a.r.d.y. + ... + +000000c2 <__ctors_end>: + c2: 11 24 eor r1, r1 + c4: 1f be out 0x3f, r1 ; 63 + c6: cf ef ldi r28, 0xFF ; 255 + c8: d4 e0 ldi r29, 0x04 ; 4 + ca: de bf out 0x3e, r29 ; 62 + cc: cd bf out 0x3d, r28 ; 61 + +000000ce <__do_copy_data>: + ce: 11 e0 ldi r17, 0x01 ; 1 + d0: a0 e0 ldi r26, 0x00 ; 0 + d2: b1 e0 ldi r27, 0x01 ; 1 + d4: e6 ef ldi r30, 0xF6 ; 246 + d6: fe e0 ldi r31, 0x0E ; 14 + d8: 02 c0 rjmp .+4 ; 0xde <__do_copy_data+0x10> + da: 05 90 lpm r0, Z+ + dc: 0d 92 st X+, r0 + de: ae 33 cpi r26, 0x3E ; 62 + e0: b1 07 cpc r27, r17 + e2: d9 f7 brne .-10 ; 0xda <__do_copy_data+0xc> + +000000e4 <__do_clear_bss>: + e4: 21 e0 ldi r18, 0x01 ; 1 + e6: ae e3 ldi r26, 0x3E ; 62 + e8: b1 e0 ldi r27, 0x01 ; 1 + ea: 01 c0 rjmp .+2 ; 0xee <.do_clear_bss_start> + +000000ec <.do_clear_bss_loop>: + ec: 1d 92 st X+, r1 + +000000ee <.do_clear_bss_start>: + ee: aa 34 cpi r26, 0x4A ; 74 + f0: b2 07 cpc r27, r18 + f2: e1 f7 brne .-8 ; 0xec <.do_clear_bss_loop> + f4: 0e 94 33 01 call 0x266 ; 0x266
+ f8: 0c 94 79 07 jmp 0xef2 ; 0xef2 <_exit> + +000000fc <__bad_interrupt>: + fc: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> + +00000100 : + 100: 95 b1 in r25, 0x05 ; 5 + 102: 9f 71 andi r25, 0x1F ; 31 + 104: 95 b9 out 0x05, r25 ; 5 + 106: 95 b1 in r25, 0x05 ; 5 + 108: 82 95 swap r24 + 10a: 88 0f add r24, r24 + 10c: 80 7e andi r24, 0xE0 ; 224 + 10e: 98 2b or r25, r24 + 110: 95 b9 out 0x05, r25 ; 5 + 112: 08 95 ret + +00000114 : + 114: 84 b1 in r24, 0x04 ; 4 + 116: 80 6e ori r24, 0xE0 ; 224 + 118: 84 b9 out 0x04, r24 ; 4 + 11a: 08 95 ret + +0000011c : + 11c: 86 e0 ldi r24, 0x06 ; 6 + 11e: 90 e0 ldi r25, 0x00 ; 0 + 120: 0e 94 80 00 call 0x100 ; 0x100 + 124: 78 94 sei + 126: 0e 94 8a 00 call 0x114 ; 0x114 + 12a: 0e 94 4e 01 call 0x29c ; 0x29c + 12e: 0e 94 ba 01 call 0x374 ; 0x374 + 132: 08 95 ret + +00000134 : + 134: 2f 92 push r2 + 136: 3f 92 push r3 + 138: 4f 92 push r4 + 13a: 5f 92 push r5 + 13c: 6f 92 push r6 + 13e: 7f 92 push r7 + 140: 8f 92 push r8 + 142: 9f 92 push r9 + 144: af 92 push r10 + 146: bf 92 push r11 + 148: cf 92 push r12 + 14a: df 92 push r13 + 14c: ef 92 push r14 + 14e: ff 92 push r15 + 150: 0f 93 push r16 + 152: 1f 93 push r17 + 154: cf 93 push r28 + 156: df 93 push r29 + 158: 7c 01 movw r14, r24 + 15a: 8b 01 movw r16, r22 + 15c: 5a 01 movw r10, r20 + 15e: c0 e0 ldi r28, 0x00 ; 0 + 160: d0 e0 ldi r29, 0x00 ; 0 + 162: 21 2c mov r2, r1 + 164: 31 2c mov r3, r1 + 166: 42 2c mov r4, r2 + 168: 53 2c mov r5, r3 + 16a: 2c c0 rjmp .+88 ; 0x1c4 + 16c: 86 2c mov r8, r6 + 16e: 97 2c mov r9, r7 + 170: c7 01 movw r24, r14 + 172: 0e 94 80 00 call 0x100 ; 0x100 + 176: 8f ef ldi r24, 0xFF ; 255 + 178: 88 1a sub r8, r24 + 17a: 98 0a sbc r9, r24 + 17c: 8f ef ldi r24, 0xFF ; 255 + 17e: 88 16 cp r8, r24 + 180: 91 04 cpc r9, r1 + 182: b1 f7 brne .-20 ; 0x170 + 184: 1c 16 cp r1, r28 + 186: 1d 06 cpc r1, r29 + 188: 5c f4 brge .+22 ; 0x1a0 + 18a: 84 2c mov r8, r4 + 18c: 95 2c mov r9, r5 + 18e: c8 01 movw r24, r16 + 190: 0e 94 80 00 call 0x100 ; 0x100 + 194: 8f ef ldi r24, 0xFF ; 255 + 196: 88 1a sub r8, r24 + 198: 98 0a sbc r9, r24 + 19a: 8c 16 cp r8, r28 + 19c: 9d 06 cpc r9, r29 + 19e: b9 f7 brne .-18 ; 0x18e + 1a0: 8f ef ldi r24, 0xFF ; 255 + 1a2: c8 1a sub r12, r24 + 1a4: d8 0a sbc r13, r24 + 1a6: ca 14 cp r12, r10 + 1a8: db 04 cpc r13, r11 + 1aa: 21 f4 brne .+8 ; 0x1b4 + 1ac: 07 c0 rjmp .+14 ; 0x1bc + 1ae: 61 01 movw r12, r2 + 1b0: 6c 2e mov r6, r28 + 1b2: 7d 2e mov r7, r29 + 1b4: cf 3f cpi r28, 0xFF ; 255 + 1b6: d1 05 cpc r29, r1 + 1b8: cc f2 brlt .-78 ; 0x16c + 1ba: e4 cf rjmp .-56 ; 0x184 + 1bc: 21 96 adiw r28, 0x01 ; 1 + 1be: cf 3f cpi r28, 0xFF ; 255 + 1c0: d1 05 cpc r29, r1 + 1c2: 21 f0 breq .+8 ; 0x1cc + 1c4: 1a 14 cp r1, r10 + 1c6: 1b 04 cpc r1, r11 + 1c8: 94 f3 brlt .-28 ; 0x1ae + 1ca: f8 cf rjmp .-16 ; 0x1bc + 1cc: df 91 pop r29 + 1ce: cf 91 pop r28 + 1d0: 1f 91 pop r17 + 1d2: 0f 91 pop r16 + 1d4: ff 90 pop r15 + 1d6: ef 90 pop r14 + 1d8: df 90 pop r13 + 1da: cf 90 pop r12 + 1dc: bf 90 pop r11 + 1de: af 90 pop r10 + 1e0: 9f 90 pop r9 + 1e2: 8f 90 pop r8 + 1e4: 7f 90 pop r7 + 1e6: 6f 90 pop r6 + 1e8: 5f 90 pop r5 + 1ea: 4f 90 pop r4 + 1ec: 3f 90 pop r3 + 1ee: 2f 90 pop r2 + 1f0: 08 95 ret + +000001f2 : + 1f2: c8 2f mov r28, r24 + 1f4: 4a e0 ldi r20, 0x0A ; 10 + 1f6: 50 e0 ldi r21, 0x00 ; 0 + 1f8: 64 e0 ldi r22, 0x04 ; 4 + 1fa: 70 e0 ldi r23, 0x00 ; 0 + 1fc: 87 e0 ldi r24, 0x07 ; 7 + 1fe: 90 e0 ldi r25, 0x00 ; 0 + 200: 0e 94 9a 00 call 0x134 ; 0x134 + 204: 4c 2f mov r20, r28 + 206: 50 e0 ldi r21, 0x00 ; 0 + 208: 66 e0 ldi r22, 0x06 ; 6 + 20a: 70 e0 ldi r23, 0x00 ; 0 + 20c: 84 e0 ldi r24, 0x04 ; 4 + 20e: 90 e0 ldi r25, 0x00 ; 0 + 210: 0e 94 9a 00 call 0x134 ; 0x134 + 214: 4c 2f mov r20, r28 + 216: 50 e0 ldi r21, 0x00 ; 0 + 218: 62 e0 ldi r22, 0x02 ; 2 + 21a: 70 e0 ldi r23, 0x00 ; 0 + 21c: 86 e0 ldi r24, 0x06 ; 6 + 21e: 90 e0 ldi r25, 0x00 ; 0 + 220: 0e 94 9a 00 call 0x134 ; 0x134 + 224: 4c 2f mov r20, r28 + 226: 50 e0 ldi r21, 0x00 ; 0 + 228: 63 e0 ldi r22, 0x03 ; 3 + 22a: 70 e0 ldi r23, 0x00 ; 0 + 22c: 82 e0 ldi r24, 0x02 ; 2 + 22e: 90 e0 ldi r25, 0x00 ; 0 + 230: 0e 94 9a 00 call 0x134 ; 0x134 + 234: 4c 2f mov r20, r28 + 236: 50 e0 ldi r21, 0x00 ; 0 + 238: 61 e0 ldi r22, 0x01 ; 1 + 23a: 70 e0 ldi r23, 0x00 ; 0 + 23c: 83 e0 ldi r24, 0x03 ; 3 + 23e: 90 e0 ldi r25, 0x00 ; 0 + 240: 0e 94 9a 00 call 0x134 ; 0x134 + 244: 4c 2f mov r20, r28 + 246: 50 e0 ldi r21, 0x00 ; 0 + 248: 65 e0 ldi r22, 0x05 ; 5 + 24a: 70 e0 ldi r23, 0x00 ; 0 + 24c: 81 e0 ldi r24, 0x01 ; 1 + 24e: 90 e0 ldi r25, 0x00 ; 0 + 250: 0e 94 9a 00 call 0x134 ; 0x134 + 254: 4c 2f mov r20, r28 + 256: 50 e0 ldi r21, 0x00 ; 0 + 258: 64 e0 ldi r22, 0x04 ; 4 + 25a: 70 e0 ldi r23, 0x00 ; 0 + 25c: 85 e0 ldi r24, 0x05 ; 5 + 25e: 90 e0 ldi r25, 0x00 ; 0 + 260: 0e 94 9a 00 call 0x134 ; 0x134 + 264: cf cf rjmp .-98 ; 0x204 + +00000266
: + 266: 0e 94 8e 00 call 0x11c ; 0x11c + 26a: 82 e0 ldi r24, 0x02 ; 2 + 26c: 90 e0 ldi r25, 0x00 ; 0 + 26e: 0e 94 80 00 call 0x100 ; 0x100 + 272: 8c e3 ldi r24, 0x3C ; 60 + 274: 0e 94 f9 00 call 0x1f2 ; 0x1f2 + +00000278 : + 278: cf 93 push r28 + 27a: c8 2f mov r28, r24 + 27c: 8a 30 cpi r24, 0x0A ; 10 + 27e: 19 f4 brne .+6 ; 0x286 + 280: 8d e0 ldi r24, 0x0D ; 13 + 282: 0e 94 3c 01 call 0x278 ; 0x278 + 286: e8 ec ldi r30, 0xC8 ; 200 + 288: f0 e0 ldi r31, 0x00 ; 0 + 28a: 90 81 ld r25, Z + 28c: 95 ff sbrs r25, 5 + 28e: fd cf rjmp .-6 ; 0x28a + 290: c0 93 ce 00 sts 0x00CE, r28 + 294: 80 e0 ldi r24, 0x00 ; 0 + 296: 90 e0 ldi r25, 0x00 ; 0 + 298: cf 91 pop r28 + 29a: 08 95 ret + +0000029c : + 29c: 86 e0 ldi r24, 0x06 ; 6 + 29e: 80 93 ca 00 sts 0x00CA, r24 + 2a2: e9 ec ldi r30, 0xC9 ; 201 + 2a4: f0 e0 ldi r31, 0x00 ; 0 + 2a6: 80 81 ld r24, Z + 2a8: 88 60 ori r24, 0x08 ; 8 + 2aa: 80 83 st Z, r24 + 2ac: 87 e6 ldi r24, 0x67 ; 103 + 2ae: 80 93 cc 00 sts 0x00CC, r24 + 2b2: 80 e0 ldi r24, 0x00 ; 0 + 2b4: 91 e0 ldi r25, 0x01 ; 1 + 2b6: 90 93 47 01 sts 0x0147, r25 + 2ba: 80 93 46 01 sts 0x0146, r24 + 2be: 08 95 ret + +000002c0 : + 2c0: cf 93 push r28 + 2c2: df 93 push r29 + 2c4: cd b7 in r28, 0x3d ; 61 + 2c6: de b7 in r29, 0x3e ; 62 + 2c8: 60 97 sbiw r28, 0x10 ; 16 + 2ca: 0f b6 in r0, 0x3f ; 63 + 2cc: f8 94 cli + 2ce: de bf out 0x3e, r29 ; 62 + 2d0: 0f be out 0x3f, r0 ; 63 + 2d2: cd bf out 0x3d, r28 ; 61 + 2d4: 2c e0 ldi r18, 0x0C ; 12 + 2d6: e5 e1 ldi r30, 0x15 ; 21 + 2d8: f1 e0 ldi r31, 0x01 ; 1 + 2da: de 01 movw r26, r28 + 2dc: 11 96 adiw r26, 0x01 ; 1 + 2de: 01 90 ld r0, Z+ + 2e0: 0d 92 st X+, r0 + 2e2: 2a 95 dec r18 + 2e4: e1 f7 brne .-8 ; 0x2de + 2e6: 1d 86 std Y+13, r1 ; 0x0d + 2e8: 1e 86 std Y+14, r1 ; 0x0e + 2ea: 1f 86 std Y+15, r1 ; 0x0f + 2ec: 18 8a std Y+16, r1 ; 0x10 + 2ee: fc 01 movw r30, r24 + 2f0: 20 81 ld r18, Z + 2f2: 23 3c cpi r18, 0xC3 ; 195 + 2f4: 51 f4 brne .+20 ; 0x30a + 2f6: 81 81 ldd r24, Z+1 ; 0x01 + 2f8: 81 30 cpi r24, 0x01 ; 1 + 2fa: 49 f4 brne .+18 ; 0x30e + 2fc: 60 e1 ldi r22, 0x10 ; 16 + 2fe: ce 01 movw r24, r28 + 300: 01 96 adiw r24, 0x01 ; 1 + 302: 0e 94 e2 02 call 0x5c4 ; 0x5c4 + 306: 81 e0 ldi r24, 0x01 ; 1 + 308: 03 c0 rjmp .+6 ; 0x310 + 30a: 80 e0 ldi r24, 0x00 ; 0 + 30c: 01 c0 rjmp .+2 ; 0x310 + 30e: 80 e0 ldi r24, 0x00 ; 0 + 310: 60 96 adiw r28, 0x10 ; 16 + 312: 0f b6 in r0, 0x3f ; 63 + 314: f8 94 cli + 316: de bf out 0x3e, r29 ; 62 + 318: 0f be out 0x3f, r0 ; 63 + 31a: cd bf out 0x3d, r28 ; 61 + 31c: df 91 pop r29 + 31e: cf 91 pop r28 + 320: 08 95 ret + +00000322 : + 322: cf 93 push r28 + 324: df 93 push r29 + 326: cd b7 in r28, 0x3d ; 61 + 328: de b7 in r29, 0x3e ; 62 + 32a: a0 97 sbiw r28, 0x20 ; 32 + 32c: 0f b6 in r0, 0x3f ; 63 + 32e: f8 94 cli + 330: de bf out 0x3e, r29 ; 62 + 332: 0f be out 0x3f, r0 ; 63 + 334: cd bf out 0x3d, r28 ; 61 + 336: 81 30 cpi r24, 0x01 ; 1 + 338: a1 f4 brne .+40 ; 0x362 + 33a: 40 e2 ldi r20, 0x20 ; 32 + 33c: be 01 movw r22, r28 + 33e: 6f 5f subi r22, 0xFF ; 255 + 340: 7f 4f sbci r23, 0xFF ; 255 + 342: 0e 94 bd 02 call 0x57a ; 0x57a + 346: 88 23 and r24, r24 + 348: 61 f0 breq .+24 ; 0x362 + 34a: 18 a2 std Y+32, r1 ; 0x20 + 34c: ce 01 movw r24, r28 + 34e: 01 96 adiw r24, 0x01 ; 1 + 350: 0e 94 54 07 call 0xea8 ; 0xea8 + 354: 40 e2 ldi r20, 0x20 ; 32 + 356: be 01 movw r22, r28 + 358: 6f 5f subi r22, 0xFF ; 255 + 35a: 7f 4f sbci r23, 0xFF ; 255 + 35c: 81 e8 ldi r24, 0x81 ; 129 + 35e: 0e 94 05 03 call 0x60a ; 0x60a + 362: a0 96 adiw r28, 0x20 ; 32 + 364: 0f b6 in r0, 0x3f ; 63 + 366: f8 94 cli + 368: de bf out 0x3e, r29 ; 62 + 36a: 0f be out 0x3f, r0 ; 63 + 36c: cd bf out 0x3d, r28 ; 61 + 36e: df 91 pop r29 + 370: cf 91 pop r28 + 372: 08 95 ret + +00000374 : + 374: 0e 94 bd 01 call 0x37a ; 0x37a + 378: 08 95 ret + +0000037a : + 37a: 80 ea ldi r24, 0xA0 ; 160 + 37c: 80 93 d8 00 sts 0x00D8, r24 + 380: 86 e0 ldi r24, 0x06 ; 6 + 382: 89 bd out 0x29, r24 ; 41 + 384: 09 b4 in r0, 0x29 ; 41 + 386: 00 fe sbrs r0, 0 + 388: fd cf rjmp .-6 ; 0x384 + 38a: 80 e8 ldi r24, 0x80 ; 128 + 38c: 80 93 d8 00 sts 0x00D8, r24 + 390: 10 92 e0 00 sts 0x00E0, r1 + 394: 10 92 3e 01 sts 0x013E, r1 + 398: 8f ef ldi r24, 0xFF ; 255 + 39a: 80 93 0e 01 sts 0x010E, r24 + 39e: 3c 98 cbi 0x07, 4 ; 7 + 3a0: 88 e0 ldi r24, 0x08 ; 8 + 3a2: 80 93 e2 00 sts 0x00E2, r24 + 3a6: 08 95 ret + +000003a8 : + 3a8: 2f 92 push r2 + 3aa: 3f 92 push r3 + 3ac: 4f 92 push r4 + 3ae: 5f 92 push r5 + 3b0: 7f 92 push r7 + 3b2: 8f 92 push r8 + 3b4: 9f 92 push r9 + 3b6: af 92 push r10 + 3b8: cf 92 push r12 + 3ba: df 92 push r13 +#if (NUMINTERFACES>1) +void usb_endpoints(uint8_t ifnumber) // with interface number +#else +void usb_endpoints(void) +#endif +{ + 3bc: ef 92 push r14 + 3be: ff 92 push r15 + 3c0: 0f 93 push r16 + 3c2: 1f 93 push r17 + 3c4: cf 93 push r28 + 3c6: df 93 push r29 + 3c8: 28 2f mov r18, r24 +//----------------------------------------------------------------------------- +// Initializing Endpoints +//----------------------------------------------------------------------------- + +#if (NUMINTERFACES>1) +void usb_endpoints(uint8_t ifnumber) // with interface number + 3ca: 90 e0 ldi r25, 0x00 ; 0 + 3cc: 6c e0 ldi r22, 0x0C ; 12 + 3ce: 70 e0 ldi r23, 0x00 ; 0 + 3d0: 0e 94 0a 06 call 0xc14 ; 0xc14 <__mulhi3> + 3d4: fc 01 movw r30, r24 + 3d6: eb 5d subi r30, 0xDB ; 219 + 3d8: fe 4f sbci r31, 0xFE ; 254 + 3da: 82 2f mov r24, r18 + 3dc: 90 e0 ldi r25, 0x00 ; 0 + 3de: 6c e0 ldi r22, 0x0C ; 12 + 3e0: 70 e0 ldi r23, 0x00 ; 0 + 3e2: 0e 94 0a 06 call 0xc14 ; 0xc14 <__mulhi3> + 3e6: 89 5d subi r24, 0xD9 ; 217 + 3e8: 9e 4f sbci r25, 0xFE ; 254 + 3ea: 41 e0 ldi r20, 0x01 ; 1 + #endif + uint8_t i; + + for (i=0; i1) +void usb_endpoints(uint8_t ifnumber) // with interface number + 424: df 01 movw r26, r30 + #define IN_TRANSFER EP_CONFIG[i].ep_type & 0x01 + #endif + uint8_t i; + + for (i=0; i + UENUM = i+1; // select endpoint + 42c: e6 01 movw r28, r12 + 42e: 48 83 st Y, r20 + UECONX = _BV(EPEN); // enable endpoint + 430: e7 01 movw r28, r14 + 432: a8 82 st Y, r10 + UECFG0X = EPC.ep_type; // transfer type and direction + 434: 20 81 ld r18, Z + 436: e8 01 movw r28, r16 + 438: 28 83 st Y, r18 +//----------------------------------------------------------------------------- +// Initializing Endpoints +//----------------------------------------------------------------------------- + +#if (NUMINTERFACES>1) +void usb_endpoints(uint8_t ifnumber) // with interface number + 43a: 1c 01 movw r2, r24 + 43c: 9c 01 movw r18, r24 + 43e: 21 50 subi r18, 0x01 ; 1 + 440: 31 09 sbc r19, r1 + for (i=0; i + 44a: 20 34 cpi r18, 0x40 ; 64 + 44c: 41 f0 breq .+16 ; 0x45e + 44e: 20 32 cpi r18, 0x20 ; 32 + 450: 41 f0 breq .+16 ; 0x462 + 452: 20 31 cpi r18, 0x10 ; 16 + 454: 41 f4 brne .+16 ; 0x466 + 456: 37 2d mov r19, r7 + 458: 07 c0 rjmp .+14 ; 0x468 + 45a: 30 e4 ldi r19, 0x40 ; 64 + 45c: 05 c0 rjmp .+10 ; 0x468 + 45e: 30 e3 ldi r19, 0x30 ; 48 + 460: 03 c0 rjmp .+6 ; 0x468 + 462: 30 e2 ldi r19, 0x20 ; 32 + 464: 01 c0 rjmp .+2 ; 0x468 + 466: 38 2d mov r19, r8 + 468: e1 01 movw r28, r2 + 46a: 28 81 ld r18, Y + 46c: 23 2b or r18, r19 + 46e: eb 01 movw r28, r22 + 470: 28 83 st Y, r18 + (EPC.ep_buffer); // bufer size and bank + if (IN_TRANSFER) UEIENX = 0; // no interrupts handling for IN endpoints + 472: 2c 91 ld r18, X + 474: 20 ff sbrs r18, 0 + 476: 03 c0 rjmp .+6 ; 0x47e + 478: d2 01 movw r26, r4 + 47a: 1c 92 st X, r1 + 47c: 02 c0 rjmp .+4 ; 0x482 + else UEIENX = _BV(RXOUTE); // interrupt handling for incoming data (OUT endpoint) + 47e: e2 01 movw r28, r4 + 480: 98 82 st Y, r9 + 482: 4f 5f subi r20, 0xFF ; 255 + 484: 33 96 adiw r30, 0x03 ; 3 + 486: 03 96 adiw r24, 0x03 ; 3 + #define EPC EP_CONFIG[i] + #define IN_TRANSFER EP_CONFIG[i].ep_type & 0x01 + #endif + uint8_t i; + + for (i=0; i + } + } + #ifdef MEGA4_6 + UERST = 0x7E; // endpoint FIFO reset for endpoint 1, 2, 3, 4, 5 and 6 + #else + UERST = 0x1E; // endpoint FIFO reset for endpoint 1, 2, 3 and 4 + 48c: ea ee ldi r30, 0xEA ; 234 + 48e: f0 e0 ldi r31, 0x00 ; 0 + 490: 8e e1 ldi r24, 0x1E ; 30 + 492: 80 83 st Z, r24 + #endif + UERST = 0; + 494: 10 82 st Z, r1 +} + 496: df 91 pop r29 + 498: cf 91 pop r28 + 49a: 1f 91 pop r17 + 49c: 0f 91 pop r16 + 49e: ff 90 pop r15 + 4a0: ef 90 pop r14 + 4a2: df 90 pop r13 + 4a4: cf 90 pop r12 + 4a6: af 90 pop r10 + 4a8: 9f 90 pop r9 + 4aa: 8f 90 pop r8 + 4ac: 7f 90 pop r7 + 4ae: 5f 90 pop r5 + 4b0: 4f 90 pop r4 + 4b2: 3f 90 pop r3 + 4b4: 2f 90 pop r2 + 4b6: 08 95 ret + +000004b8 : +void usb_wait_in(void) +// wait for host, until it's ready to receive IN package +{ + uint8_t i; + do { + i = UEINTX; + 4b8: e8 ee ldi r30, 0xE8 ; 232 + 4ba: f0 e0 ldi r31, 0x00 ; 0 + 4bc: 80 81 ld r24, Z + } while (!(i & (_BV(TXINI)|_BV(RXOUTI)))); + 4be: 85 70 andi r24, 0x05 ; 5 + 4c0: e9 f3 breq .-6 ; 0x4bc +} + 4c2: 08 95 ret + +000004c4 : + +void usb_desc_out(bool isRAM, const uint8_t *pgmaddr, uint8_t size, uint16_t maxsize) +// return descriptor over endpoint 0 to host from flash memory or RAM +{ + 4c4: af 92 push r10 + 4c6: bf 92 push r11 + 4c8: cf 92 push r12 + 4ca: df 92 push r13 + 4cc: ef 92 push r14 + 4ce: ff 92 push r15 + 4d0: 0f 93 push r16 + 4d2: 1f 93 push r17 + 4d4: cf 93 push r28 + 4d6: df 93 push r29 + 4d8: d8 2e mov r13, r24 + 4da: d6 2f mov r29, r22 + 4dc: c7 2f mov r28, r23 + uint8_t i=0, len, n; + const uint8_t *addr; + + addr=pgmaddr; + len=size; + if (len>maxsize) len=maxsize; + 4de: e4 2f mov r30, r20 + 4e0: f0 e0 ldi r31, 0x00 ; 0 + 4e2: 2e 17 cp r18, r30 + 4e4: 3f 07 cpc r19, r31 + 4e6: 10 f4 brcc .+4 ; 0x4ec + 4e8: c2 2e mov r12, r18 + 4ea: 01 c0 rjmp .+2 ; 0x4ee +{ + uint8_t i=0, len, n; + const uint8_t *addr; + + addr=pgmaddr; + len=size; + 4ec: c4 2e mov r12, r20 + if (len>maxsize) len=maxsize; + do { + usb_wait_in(); + 4ee: 0e 94 5c 02 call 0x4b8 ; 0x4b8 + 4f2: 0d 2f mov r16, r29 + 4f4: 1c 2f mov r17, r28 + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + 4f6: 68 94 set + 4f8: aa 24 eor r10, r10 + 4fa: a4 f8 bld r10, 4 + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + len -= n; + USB_SEND_IN; + 4fc: 0f 2e mov r0, r31 + 4fe: f8 ee ldi r31, 0xE8 ; 232 + 500: ef 2e mov r14, r31 + 502: f1 2c mov r15, r1 + 504: f0 2d mov r31, r0 + 506: 0f 2e mov r0, r31 + 508: fe ef ldi r31, 0xFE ; 254 + 50a: bf 2e mov r11, r31 + 50c: f0 2d mov r31, r0 + usb_wait_in(); + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + 50e: c1 ef ldi r28, 0xF1 ; 241 + 510: d0 e0 ldi r29, 0x00 ; 0 + if (len>maxsize) len=maxsize; + do { + usb_wait_in(); + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + 512: 2c 2d mov r18, r12 + 514: 80 e1 ldi r24, 0x10 ; 16 + 516: 8c 15 cp r24, r12 + 518: 08 f4 brcc .+2 ; 0x51c <__stack+0x1d> + 51a: 2a 2d mov r18, r10 + for (i = n; i; i--) + 51c: 22 23 and r18, r18 + 51e: d9 f0 breq .+54 ; 0x556 <__stack+0x57> + 520: f8 01 movw r30, r16 + 522: 92 2f mov r25, r18 + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + 524: dd 20 and r13, r13 + 526: 11 f0 breq .+4 ; 0x52c <__stack+0x2d> + 528: 80 81 ld r24, Z + 52a: 01 c0 rjmp .+2 ; 0x52e <__stack+0x2f> + 52c: 84 91 lpm r24, Z + 52e: 88 83 st Y, r24 + do { + usb_wait_in(); + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) + 530: 91 50 subi r25, 0x01 ; 1 + 532: 31 96 adiw r30, 0x01 ; 1 + 534: 91 11 cpse r25, r1 + 536: f6 cf rjmp .-20 ; 0x524 <__stack+0x25> + do { + i = UEINTX; + } while (!(i & (_BV(TXINI)|_BV(RXOUTI)))); +} + +void usb_desc_out(bool isRAM, const uint8_t *pgmaddr, uint8_t size, uint16_t maxsize) + 538: 62 2f mov r22, r18 + 53a: 61 50 subi r22, 0x01 ; 1 + 53c: 70 e0 ldi r23, 0x00 ; 0 + 53e: 6f 5f subi r22, 0xFF ; 255 + 540: 7f 4f sbci r23, 0xFF ; 255 + 542: 06 0f add r16, r22 + 544: 17 1f adc r17, r23 + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + len -= n; + 546: c2 1a sub r12, r18 + USB_SEND_IN; + 548: f7 01 movw r30, r14 + 54a: b0 82 st Z, r11 + } while (len || n == ENDPOINT0_SIZE); + 54c: c1 10 cpse r12, r1 + 54e: 07 c0 rjmp .+14 ; 0x55e <__stack+0x5f> + 550: 20 31 cpi r18, 0x10 ; 16 + 552: 29 f0 breq .+10 ; 0x55e <__stack+0x5f> + 554: 07 c0 rjmp .+14 ; 0x564 <__stack+0x65> + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + len -= n; + USB_SEND_IN; + 556: f7 01 movw r30, r14 + 558: b0 82 st Z, r11 + } while (len || n == ENDPOINT0_SIZE); + 55a: cc 20 and r12, r12 + 55c: 19 f0 breq .+6 ; 0x564 <__stack+0x65> + + addr=pgmaddr; + len=size; + if (len>maxsize) len=maxsize; + do { + usb_wait_in(); + 55e: 0e 94 5c 02 call 0x4b8 ; 0x4b8 + 562: d7 cf rjmp .-82 ; 0x512 <__stack+0x13> + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + len -= n; + USB_SEND_IN; + } while (len || n == ENDPOINT0_SIZE); +} + 564: df 91 pop r29 + 566: cf 91 pop r28 + 568: 1f 91 pop r17 + 56a: 0f 91 pop r16 + 56c: ff 90 pop r15 + 56e: ef 90 pop r14 + 570: df 90 pop r13 + 572: cf 90 pop r12 + 574: bf 90 pop r11 + 576: af 90 pop r10 + 578: 08 95 ret + +0000057a : + uint16_t r, i; + #else + uint8_t r, i; + #endif + + UENUM = endpoint; // select endpoint + 57a: 80 93 e9 00 sts 0x00E9, r24 + #ifdef MEGA4_6 + r = ((uint16_t)(UEBCHX)<<8)+UEBCLX; + #else + r = UEBCLX; + 57e: 90 91 f2 00 lds r25, 0x00F2 + 582: 94 17 cp r25, r20 + 584: 08 f4 brcc .+2 ; 0x588 + 586: 49 2f mov r20, r25 + #endif + if (r>maxdatasize) r = maxdatasize; + if (r) { // data available in input endpoint + 588: 44 23 and r20, r20 + 58a: d1 f0 breq .+52 ; 0x5c0 + 58c: 36 2f mov r19, r22 + 58e: e6 2f mov r30, r22 + 590: f7 2f mov r31, r23 + for (i=0; i + #ifdef MEGA4_6 + if ((((uint16_t)(UEBCHX)<<8)+UEBCLX)==0) { // buffer is empty + #else + if (UEBCLX==0) { // buffer is empty + 5a2: 90 91 f2 00 lds r25, 0x00F2 + 5a6: 91 11 cpse r25, r1 + 5a8: 0b c0 rjmp .+22 ; 0x5c0 + #endif + UERST = _BV(endpoint); // endpoint FIFO reset + 5aa: 21 e0 ldi r18, 0x01 ; 1 + 5ac: 30 e0 ldi r19, 0x00 ; 0 + 5ae: 02 c0 rjmp .+4 ; 0x5b4 + 5b0: 22 0f add r18, r18 + 5b2: 33 1f adc r19, r19 + 5b4: 8a 95 dec r24 + 5b6: e2 f7 brpl .-8 ; 0x5b0 + 5b8: ea ee ldi r30, 0xEA ; 234 + 5ba: f0 e0 ldi r31, 0x00 ; 0 + 5bc: 20 83 st Z, r18 + UERST = 0; + 5be: 10 82 st Z, r1 + } + } + return r; +} + 5c0: 84 2f mov r24, r20 + 5c2: 08 95 ret + +000005c4 : + +bool usb_txdata_control(uint8_t *buffer, uint8_t datasize) +{ + uint8_t i; + + if (datasize) { + 5c4: 66 23 and r22, r22 + 5c6: e9 f0 breq .+58 ; 0x602 + UENUM = 0; + 5c8: 10 92 e9 00 sts 0x00E9, r1 + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + 5cc: e8 ee ldi r30, 0xE8 ; 232 + 5ce: f0 e0 ldi r31, 0x00 ; 0 + 5d0: 20 81 ld r18, Z + 5d2: 20 ff sbrs r18, 0 + 5d4: fd cf rjmp .-6 ; 0x5d0 + UENUM = 0; + usb_wait_in_ready(); + #ifdef MEGA4_6 + if ((((uint16_t)(UEBCHX)<<8)+UEBCLX)==0) { // buffer is empty + #else + if (UEBCLX==0) { // buffer is empty + 5d6: 20 91 f2 00 lds r18, 0x00F2 + 5da: 21 11 cpse r18, r1 + 5dc: 14 c0 rjmp .+40 ; 0x606 + 5de: 28 2f mov r18, r24 + 5e0: e8 2f mov r30, r24 + 5e2: f9 2f mov r31, r25 + #endif + for (i=0; i + UEINTX&=~_BV(TXINI); // necessary (in this order) (changed V1.1.1) + 5f4: e8 ee ldi r30, 0xE8 ; 232 + 5f6: f0 e0 ldi r31, 0x00 ; 0 + 5f8: 80 81 ld r24, Z + 5fa: 8e 7f andi r24, 0xFE ; 254 + 5fc: 80 83 st Z, r24 + return true; + 5fe: 81 e0 ldi r24, 0x01 ; 1 + 600: 08 95 ret + } + } + return false; + 602: 80 e0 ldi r24, 0x00 ; 0 + 604: 08 95 ret + 606: 80 e0 ldi r24, 0x00 ; 0 +} + 608: 08 95 ret + +0000060a : +#ifdef MEGA4_6 +bool usb_txdata(uint8_t endpoint, uint8_t *buffer, uint16_t datasize) +#else +bool usb_txdata(uint8_t endpoint, uint8_t *buffer, uint8_t datasize) +#endif +{ + 60a: cf 93 push r28 + 60c: df 93 push r29 + uint16_t i; + #else + uint8_t i; + #endif + + if (datasize) { + 60e: 44 23 and r20, r20 + 610: 29 f1 breq .+74 ; 0x65c + UENUM = endpoint; + 612: 80 93 e9 00 sts 0x00E9, r24 + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + 616: e8 ee ldi r30, 0xE8 ; 232 + 618: f0 e0 ldi r31, 0x00 ; 0 + 61a: 80 81 ld r24, Z + 61c: 80 ff sbrs r24, 0 + 61e: fd cf rjmp .-6 ; 0x61a + UENUM = endpoint; + usb_wait_in_ready(); + #ifdef MEGA4_6 + if ((((uint16_t)(UEBCHX)<<8)+UEBCLX)==0) { // buffer is empty + #else + if (UEBCLX==0) { // buffer is empty + 620: 80 91 f2 00 lds r24, 0x00F2 + 624: 81 11 cpse r24, r1 + 626: 1c c0 rjmp .+56 ; 0x660 + 628: 96 2f mov r25, r22 + 62a: e6 2f mov r30, r22 + 62c: f7 2f mov r31, r23 + #endif + for (i=0; i + 63c: 80 81 ld r24, Z + 63e: 88 83 st Y, r24 + 640: 31 96 adiw r30, 0x01 ; 1 + #ifdef MEGA4_6 + if ((((uint16_t)(UEBCHX)<<8)+UEBCLX)==0) { // buffer is empty + #else + if (UEBCLX==0) { // buffer is empty + #endif + for (i=0; i + if (UEINTX & _BV(RWAL)) UEDATX = buffer[i]; + UEINTX&=~_BV(TXINI); // necessary (in this order) (changed V1.1.1) + 64a: e8 ee ldi r30, 0xE8 ; 232 + 64c: f0 e0 ldi r31, 0x00 ; 0 + 64e: 80 81 ld r24, Z + 650: 8e 7f andi r24, 0xFE ; 254 + 652: 80 83 st Z, r24 + UEINTX=0x7F; // (uint8_t)~_BV(FIFOCON); + 654: 8f e7 ldi r24, 0x7F ; 127 + 656: 80 83 st Z, r24 + return true; + 658: 81 e0 ldi r24, 0x01 ; 1 + 65a: 03 c0 rjmp .+6 ; 0x662 + } + } + return false; + 65c: 80 e0 ldi r24, 0x00 ; 0 + 65e: 01 c0 rjmp .+2 ; 0x662 + 660: 80 e0 ldi r24, 0x00 ; 0 +} + 662: df 91 pop r29 + 664: cf 91 pop r28 + 666: 08 95 ret + +00000668 <__vector_11>: +// USB Device Interrupt +//----------------------------------------------------------------------------- +// Hardware interrupts of the USB controller + +ISR(USB_GEN_vect) +{ + 668: 1f 92 push r1 + 66a: 0f 92 push r0 + 66c: 0f b6 in r0, 0x3f ; 63 + 66e: 0f 92 push r0 + 670: 11 24 eor r1, r1 + 672: 8f 93 push r24 + 674: ef 93 push r30 + 676: ff 93 push r31 + uint8_t intbits; + + intbits = UDINT; // save flags + 678: e1 ee ldi r30, 0xE1 ; 225 + 67a: f0 e0 ldi r31, 0x00 ; 0 + 67c: 80 81 ld r24, Z + UDINT = 0; // reset flags + 67e: 10 82 st Z, r1 + if (intbits & _BV(EORSTI)) { // End Of Reset Interrupt Flag + 680: 83 ff sbrs r24, 3 + 682: 12 c0 rjmp .+36 ; 0x6a8 <__vector_11+0x40> + // initialize endpoint 0 for control transfers + UENUM = 0; + 684: 10 92 e9 00 sts 0x00E9, r1 + UECONX = _BV(EPEN); + 688: 81 e0 ldi r24, 0x01 ; 1 + 68a: 80 93 eb 00 sts 0x00EB, r24 + UECFG0X = EP_TYPE_CONTROL; + 68e: 10 92 ec 00 sts 0x00EC, r1 + UECFG1X = EP_SIZE(ENDPOINT0_SIZE) | EP_SINGLE_BUFFER; + 692: 82 e1 ldi r24, 0x12 ; 18 + 694: 80 93 ed 00 sts 0x00ED, r24 + UEIENX = _BV(RXSTPE); // enable interrupt for incoming data + 698: 88 e0 ldi r24, 0x08 ; 8 + 69a: 80 93 f0 00 sts 0x00F0, r24 + usb_conf = 0; + 69e: 10 92 3e 01 sts 0x013E, r1 + #if (NUMINTERFACES>1) + usb_if = 0xFF; + 6a2: 8f ef ldi r24, 0xFF ; 255 + 6a4: 80 93 0e 01 sts 0x010E, r24 + #endif + } +} + 6a8: ff 91 pop r31 + 6aa: ef 91 pop r30 + 6ac: 8f 91 pop r24 + 6ae: 0f 90 pop r0 + 6b0: 0f be out 0x3f, r0 ; 63 + 6b2: 0f 90 pop r0 + 6b4: 1f 90 pop r1 + 6b6: 18 95 reti + +000006b8 <__vector_12>: +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) +{ + 6b8: 1f 92 push r1 + 6ba: 0f 92 push r0 + 6bc: 0f b6 in r0, 0x3f ; 63 + 6be: 0f 92 push r0 + 6c0: 11 24 eor r1, r1 + 6c2: 3f 92 push r3 + 6c4: 4f 92 push r4 + 6c6: 5f 92 push r5 + 6c8: 6f 92 push r6 + 6ca: 7f 92 push r7 + 6cc: 8f 92 push r8 + 6ce: 9f 92 push r9 + 6d0: af 92 push r10 + 6d2: bf 92 push r11 + 6d4: cf 92 push r12 + 6d6: df 92 push r13 + 6d8: ef 92 push r14 + 6da: ff 92 push r15 + 6dc: 0f 93 push r16 + 6de: 1f 93 push r17 + 6e0: 2f 93 push r18 + 6e2: 3f 93 push r19 + 6e4: 4f 93 push r20 + 6e6: 5f 93 push r21 + 6e8: 6f 93 push r22 + 6ea: 7f 93 push r23 + 6ec: 8f 93 push r24 + 6ee: 9f 93 push r25 + 6f0: af 93 push r26 + 6f2: bf 93 push r27 + 6f4: ef 93 push r30 + 6f6: ff 93 push r31 + 6f8: cf 93 push r28 + 6fa: df 93 push r29 + 6fc: cd b7 in r28, 0x3d ; 61 + 6fe: de b7 in r29, 0x3e ; 62 + 700: 2a 97 sbiw r28, 0x0a ; 10 + 702: de bf out 0x3e, r29 ; 62 + 704: cd bf out 0x3d, r28 ; 61 + #if (USESN==2) // serial number in RAM + struct usb_string_descriptor_ram buf; + #endif + struct usb_control_request ucr; + + if (UEINT & 0x01) { + 706: 80 91 f4 00 lds r24, 0x00F4 + 70a: 80 ff sbrs r24, 0 + 70c: 4c c2 rjmp .+1176 ; 0xba6 <__vector_12+0x4ee> + // handle interrupts of endpoint 0 (control transfers) + UENUM = 0; + 70e: 10 92 e9 00 sts 0x00E9, r1 + intbits = UEINTX; // save interrupt flags of the endpoint + 712: 80 91 e8 00 lds r24, 0x00E8 + if (intbits & _BV(RXSTPI)) { // control transfer, setup + 716: 83 ff sbrs r24, 3 + 718: 13 c2 rjmp .+1062 ; 0xb40 <__vector_12+0x488> + ucr.bmRequestType = UEDATX; + 71a: e1 ef ldi r30, 0xF1 ; 241 + 71c: f0 e0 ldi r31, 0x00 ; 0 + 71e: 80 81 ld r24, Z + 720: 89 83 std Y+1, r24 ; 0x01 + ucr.bRequest = UEDATX; + 722: 80 81 ld r24, Z + 724: 8a 83 std Y+2, r24 ; 0x02 + ucr.wValue = UEDATX; + 726: 20 81 ld r18, Z + 728: 30 e0 ldi r19, 0x00 ; 0 + 72a: 3c 83 std Y+4, r19 ; 0x04 + 72c: 2b 83 std Y+3, r18 ; 0x03 + ucr.wValue |= (UEDATX << 8); + 72e: 40 81 ld r20, Z + 730: 94 2f mov r25, r20 + 732: 80 e0 ldi r24, 0x00 ; 0 + 734: 82 2b or r24, r18 + 736: 93 2b or r25, r19 + 738: 9c 83 std Y+4, r25 ; 0x04 + 73a: 8b 83 std Y+3, r24 ; 0x03 + ucr.wIndex = UEDATX; + 73c: 20 81 ld r18, Z + 73e: 30 e0 ldi r19, 0x00 ; 0 + 740: 3e 83 std Y+6, r19 ; 0x06 + 742: 2d 83 std Y+5, r18 ; 0x05 + ucr.wIndex |= (UEDATX << 8); + 744: 40 81 ld r20, Z + 746: 94 2f mov r25, r20 + 748: 80 e0 ldi r24, 0x00 ; 0 + 74a: 82 2b or r24, r18 + 74c: 93 2b or r25, r19 + 74e: 9e 83 std Y+6, r25 ; 0x06 + 750: 8d 83 std Y+5, r24 ; 0x05 + ucr.wLength = UEDATX; + 752: 20 81 ld r18, Z + 754: 30 e0 ldi r19, 0x00 ; 0 + 756: 38 87 std Y+8, r19 ; 0x08 + 758: 2f 83 std Y+7, r18 ; 0x07 + ucr.wLength |= (UEDATX << 8); + 75a: 40 81 ld r20, Z + 75c: 94 2f mov r25, r20 + 75e: 80 e0 ldi r24, 0x00 ; 0 + 760: 82 2b or r24, r18 + 762: 93 2b or r25, r19 + 764: 98 87 std Y+8, r25 ; 0x08 + 766: 8f 83 std Y+7, r24 ; 0x07 + UEINTX = ~(_BV(RXSTPI) | _BV(RXOUTI) | _BV(TXINI)); + 768: 82 ef ldi r24, 0xF2 ; 242 + 76a: 80 93 e8 00 sts 0x00E8, r24 + if (ucr.bRequest == GET_DESCRIPTOR) { + 76e: 8a 81 ldd r24, Y+2 ; 0x02 + 770: 86 30 cpi r24, 0x06 ; 6 + 772: 09 f0 breq .+2 ; 0x776 <__vector_12+0xbe> + 774: 24 c1 rjmp .+584 ; 0x9be <__vector_12+0x306> + switch (ucr.wValue) { + 776: 8b 81 ldd r24, Y+3 ; 0x03 + 778: 9c 81 ldd r25, Y+4 ; 0x04 + 77a: 81 15 cp r24, r1 + 77c: 23 e0 ldi r18, 0x03 ; 3 + 77e: 92 07 cpc r25, r18 + 780: 09 f4 brne .+2 ; 0x784 <__vector_12+0xcc> + 782: fb c0 rjmp .+502 ; 0x97a <__vector_12+0x2c2> + 784: 48 f4 brcc .+18 ; 0x798 <__vector_12+0xe0> + 786: 81 15 cp r24, r1 + 788: 51 e0 ldi r21, 0x01 ; 1 + 78a: 95 07 cpc r25, r21 + 78c: 79 f0 breq .+30 ; 0x7ac <__vector_12+0xf4> + 78e: 81 15 cp r24, r1 + 790: 92 40 sbci r25, 0x02 ; 2 + 792: 09 f0 breq .+2 ; 0x796 <__vector_12+0xde> + 794: 10 c1 rjmp .+544 ; 0x9b6 <__vector_12+0x2fe> + 796: 24 c0 rjmp .+72 ; 0x7e0 <__vector_12+0x128> + 798: 81 30 cpi r24, 0x01 ; 1 + 79a: b3 e0 ldi r27, 0x03 ; 3 + 79c: 9b 07 cpc r25, r27 + 79e: 09 f4 brne .+2 ; 0x7a2 <__vector_12+0xea> + 7a0: f6 c0 rjmp .+492 ; 0x98e <__vector_12+0x2d6> + 7a2: 82 30 cpi r24, 0x02 ; 2 + 7a4: 93 40 sbci r25, 0x03 ; 3 + 7a6: 09 f0 breq .+2 ; 0x7aa <__vector_12+0xf2> + 7a8: 06 c1 rjmp .+524 ; 0x9b6 <__vector_12+0x2fe> + 7aa: fb c0 rjmp .+502 ; 0x9a2 <__vector_12+0x2ea> + case 0x0100: // device descriptor + usb_desc_out(false,&device_descriptor[0],pgm_read_byte(&device_descriptor[0]),ucr.wLength); + 7ac: e4 e7 ldi r30, 0x74 ; 116 + 7ae: f0 e0 ldi r31, 0x00 ; 0 + 7b0: 44 91 lpm r20, Z + 7b2: 2f 81 ldd r18, Y+7 ; 0x07 + 7b4: 38 85 ldd r19, Y+8 ; 0x08 + 7b6: bf 01 movw r22, r30 + 7b8: 80 e0 ldi r24, 0x00 ; 0 + 7ba: 0e 94 62 02 call 0x4c4 ; 0x4c4 + break; + 7be: 02 c2 rjmp .+1028 ; 0xbc4 <__vector_12+0x50c> + case 0x0200: // configuration descriptor + // get number of activated endpoints + n=0; + #if (NUMINTERFACES>1) + for (j=0; j + 7c8: 9b 2f mov r25, r27 + 7ca: 49 0f add r20, r25 + 7cc: 81 50 subi r24, 0x01 ; 1 + 7ce: 33 96 adiw r30, 0x03 ; 3 + 7d0: 81 11 cpse r24, r1 + 7d2: f6 cf rjmp .-20 ; 0x7c0 <__vector_12+0x108> + 7d4: 2f 5f subi r18, 0xFF ; 255 + 7d6: 3f 4f sbci r19, 0xFF ; 255 + break; + case 0x0200: // configuration descriptor + // get number of activated endpoints + n=0; + #if (NUMINTERFACES>1) + for (j=0; j + 7de: 10 c0 rjmp .+32 ; 0x800 <__vector_12+0x148> + ucr.wIndex |= (UEDATX << 8); + ucr.wLength = UEDATX; + ucr.wLength |= (UEDATX << 8); + UEINTX = ~(_BV(RXSTPI) | _BV(RXOUTI) | _BV(TXINI)); + if (ucr.bRequest == GET_DESCRIPTOR) { + switch (ucr.wValue) { + 7e0: 20 e0 ldi r18, 0x00 ; 0 + 7e2: 30 e0 ldi r19, 0x00 ; 0 + 7e4: 40 e0 ldi r20, 0x00 ; 0 +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + 7e6: 14 e0 ldi r17, 0x04 ; 4 + case 0x0200: // configuration descriptor + // get number of activated endpoints + n=0; + #if (NUMINTERFACES>1) + for (j=0; j + 7f6: fc 01 movw r30, r24 + 7f8: eb 5d subi r30, 0xDB ; 219 + 7fa: fe 4f sbci r31, 0xFE ; 254 + 7fc: 81 2f mov r24, r17 + 7fe: e0 cf rjmp .-64 ; 0x7c0 <__vector_12+0x108> + for (j=0; j + 81c: 08 2f mov r16, r24 + 81e: 19 2f mov r17, r25 + // initialize configuration descriptor + cfg->bLength = sizeof(cfg_desc); + 820: 89 e0 ldi r24, 0x09 ; 9 + 822: d8 01 movw r26, r16 + 824: 8c 93 st X, r24 + cfg->bDescriptorType = 2; + 826: 82 e0 ldi r24, 0x02 ; 2 + 828: 11 96 adiw r26, 0x01 ; 1 + 82a: 8c 93 st X, r24 + 82c: 11 97 sbiw r26, 0x01 ; 1 + cfg->wTotalLength = s; + 82e: 12 96 adiw r26, 0x02 ; 2 + 830: ec 92 st X, r14 + 832: 12 97 sbiw r26, 0x02 ; 2 + 834: 13 96 adiw r26, 0x03 ; 3 + 836: 1c 92 st X, r1 + 838: 13 97 sbiw r26, 0x03 ; 3 + cfg->bNumInterfaces = NUMINTERFACES; + 83a: 14 96 adiw r26, 0x04 ; 4 + 83c: 8c 93 st X, r24 + 83e: 14 97 sbiw r26, 0x04 ; 4 + cfg->bConfigurationValue = 1; + 840: 81 e0 ldi r24, 0x01 ; 1 + 842: 15 96 adiw r26, 0x05 ; 5 + 844: 8c 93 st X, r24 + 846: 15 97 sbiw r26, 0x05 ; 5 + cfg->iConfiguration = 0; + 848: 16 96 adiw r26, 0x06 ; 6 + 84a: 1c 92 st X, r1 + 84c: 16 97 sbiw r26, 0x06 ; 6 + cfg->bmAttributes = POWERING; + 84e: 80 ec ldi r24, 0xC0 ; 192 + 850: 17 96 adiw r26, 0x07 ; 7 + 852: 8c 93 st X, r24 + 854: 17 97 sbiw r26, 0x07 ; 7 + cfg->bMaxPower = MAXPOWER>>1; + 856: 8a ef ldi r24, 0xFA ; 250 + 858: 18 96 adiw r26, 0x08 ; 8 + 85a: 8c 93 st X, r24 + // initialize interface descriptor + ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc)); + 85c: f8 01 movw r30, r16 + 85e: 39 96 adiw r30, 0x09 ; 9 + 860: 1a 86 std Y+10, r1 ; 0x0a + 862: 19 86 std Y+9, r1 ; 0x09 +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + 864: 44 e0 ldi r20, 0x04 ; 4 + 866: a1 2c mov r10, r1 + // initialize interface descriptor + ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc)); + #if (NUMINTERFACES>1) + for (j=0; jbLength = sizeof(if_desc); + 870: 0f 2e mov r0, r31 + 872: f9 e0 ldi r31, 0x09 ; 9 + 874: 7f 2e mov r7, r31 + 876: f0 2d mov r31, r0 + ifp->bDescriptorType = 4; + ifp->bInterfaceNumber = j; + ifp->bAlternateSetting = 0; + ifp->bNumEndpoints = n; + ifp->bInterfaceClass = 0xFF; + 878: dd 24 eor r13, r13 + 87a: da 94 dec r13 + ifp->iInterface = 0; + epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + if (n) { // endpoints + for (i=0; ibLength = sizeof(ep_desc); + 87c: 0f 2e mov r0, r31 + 87e: f7 e0 ldi r31, 0x07 ; 7 + 880: bf 2e mov r11, r31 + 882: f0 2d mov r31, r0 + epp->bDescriptorType = 5; + 884: 0f 2e mov r0, r31 + 886: f5 e0 ldi r31, 0x05 ; 5 + 888: cf 2e mov r12, r31 + 88a: f0 2d mov r31, r0 + epp->bEndpointAddress = (i+1)|(EPCO.ep_type<<7); + epp->bmAttributes = EP_TRANSFER(EPCO.ep_type); + 88c: 68 94 set + 88e: 66 24 eor r6, r6 + 890: 61 f8 bld r6, 1 + 892: 0f 2e mov r0, r31 + 894: f3 e0 ldi r31, 0x03 ; 3 + 896: 5f 2e mov r5, r31 + 898: f0 2d mov r31, r0 + 89a: 56 c0 rjmp .+172 ; 0x948 <__vector_12+0x290> + // initialize interface descriptor + ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc)); + #if (NUMINTERFACES>1) + for (j=0; j + 8a6: 79 2d mov r23, r9 + 8a8: 67 0f add r22, r23 + 8aa: 51 50 subi r21, 0x01 ; 1 + 8ac: 03 96 adiw r24, 0x03 ; 3 + 8ae: 51 11 cpse r21, r1 + 8b0: f5 cf rjmp .-22 ; 0x89c <__vector_12+0x1e4> + #else + j = 0; + #endif + ifp->bLength = sizeof(if_desc); + 8b2: 70 82 st Z, r7 + ifp->bDescriptorType = 4; + 8b4: 41 83 std Z+1, r20 ; 0x01 + ifp->bInterfaceNumber = j; + 8b6: 42 82 std Z+2, r4 ; 0x02 + ifp->bAlternateSetting = 0; + 8b8: 13 82 std Z+3, r1 ; 0x03 + ifp->bNumEndpoints = n; + 8ba: 64 83 std Z+4, r22 ; 0x04 + ifp->bInterfaceClass = 0xFF; + 8bc: d5 82 std Z+5, r13 ; 0x05 + ifp->bInterfaceSubClass = 0x00; + 8be: 16 82 std Z+6, r1 ; 0x06 + ifp->bInterfaceProtocol = 0xFF; + 8c0: d7 82 std Z+7, r13 ; 0x07 + ifp->iInterface = 0; + 8c2: 10 86 std Z+8, r1 ; 0x08 + epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + 8c4: 39 96 adiw r30, 0x09 ; 9 + if (n) { // endpoints + 8c6: 66 23 and r22, r22 + 8c8: c1 f1 breq .+112 ; 0x93a <__vector_12+0x282> +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) + 8ca: 83 2f mov r24, r19 + 8cc: 93 2d mov r25, r3 + 8ce: 6c e0 ldi r22, 0x0C ; 12 + 8d0: 70 e0 ldi r23, 0x00 ; 0 + 8d2: 0e 94 0a 06 call 0xc14 ; 0xc14 <__mulhi3> + 8d6: 9c 01 movw r18, r24 + 8d8: 2a 5d subi r18, 0xDA ; 218 + 8da: 3e 4f sbci r19, 0xFE ; 254 + 8dc: 48 2c mov r4, r8 + 8de: c9 01 movw r24, r18 + 8e0: b9 01 movw r22, r18 + 8e2: 61 50 subi r22, 0x01 ; 1 + 8e4: 71 09 sbc r23, r1 + ifp->bInterfaceProtocol = 0xFF; + ifp->iInterface = 0; + epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + if (n) { // endpoints + for (i=0; i + epp->bLength = sizeof(ep_desc); + 8ee: b0 82 st Z, r11 + epp->bDescriptorType = 5; + 8f0: c1 82 std Z+1, r12 ; 0x01 + epp->bEndpointAddress = (i+1)|(EPCO.ep_type<<7); + 8f2: 65 2f mov r22, r21 + 8f4: 67 95 ror r22 + 8f6: 66 27 eor r22, r22 + 8f8: 67 95 ror r22 + 8fa: 64 29 or r22, r4 + 8fc: 62 83 std Z+2, r22 ; 0x02 + epp->bmAttributes = EP_TRANSFER(EPCO.ep_type); + 8fe: 51 34 cpi r21, 0x41 ; 65 + 900: 41 f0 breq .+16 ; 0x912 <__vector_12+0x25a> + 902: 50 34 cpi r21, 0x40 ; 64 + 904: 41 f0 breq .+16 ; 0x916 <__vector_12+0x25e> + 906: 51 38 cpi r21, 0x81 ; 129 + 908: 41 f0 breq .+16 ; 0x91a <__vector_12+0x262> + 90a: 50 38 cpi r21, 0x80 ; 128 + 90c: 41 f4 brne .+16 ; 0x91e <__vector_12+0x266> + 90e: 56 2d mov r21, r6 + 910: 07 c0 rjmp .+14 ; 0x920 <__vector_12+0x268> + 912: 5f 2d mov r21, r15 + 914: 05 c0 rjmp .+10 ; 0x920 <__vector_12+0x268> + 916: 5f 2d mov r21, r15 + 918: 03 c0 rjmp .+6 ; 0x920 <__vector_12+0x268> + 91a: 56 2d mov r21, r6 + 91c: 01 c0 rjmp .+2 ; 0x920 <__vector_12+0x268> + 91e: 55 2d mov r21, r5 + 920: 53 83 std Z+3, r21 ; 0x03 + epp->wMaxPacketSize = EPCO.ep_size; + 922: dc 01 movw r26, r24 + 924: 8c 91 ld r24, X + 926: 84 83 std Z+4, r24 ; 0x04 + 928: 15 82 std Z+5, r1 ; 0x05 + epp->bInterval = 0; + 92a: 16 82 std Z+6, r1 ; 0x06 + epp = (ep_desc *)((uint16_t)(epp)+sizeof(ep_desc)); + 92c: 37 96 adiw r30, 0x07 ; 7 + 92e: 43 94 inc r4 + 930: 2d 5f subi r18, 0xFD ; 253 + 932: 3f 4f sbci r19, 0xFF ; 255 + ifp->bInterfaceSubClass = 0x00; + ifp->bInterfaceProtocol = 0xFF; + ifp->iInterface = 0; + epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + if (n) { // endpoints + for (i=0; i + 93a: a9 85 ldd r26, Y+9 ; 0x09 + 93c: ba 85 ldd r27, Y+10 ; 0x0a + 93e: 11 96 adiw r26, 0x01 ; 1 + 940: ba 87 std Y+10, r27 ; 0x0a + 942: a9 87 std Y+9, r26 ; 0x09 + cfg->bmAttributes = POWERING; + cfg->bMaxPower = MAXPOWER>>1; + // initialize interface descriptor + ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc)); + #if (NUMINTERFACES>1) + for (j=0; j + 948: 49 84 ldd r4, Y+9 ; 0x09 + n = 0; + for (i=0; i + 95a: 8b 5d subi r24, 0xDB ; 219 + 95c: 9e 4f sbci r25, 0xFE ; 254 + 95e: 54 2f mov r21, r20 + 960: 6a 2d mov r22, r10 + 962: 9c cf rjmp .-200 ; 0x89c <__vector_12+0x1e4> + #if (NUMINTERFACES>1) + ifp = (if_desc *)epp; + } + #endif + // finally + usb_desc_out(true,(uint8_t *)cfg,s,ucr.wLength); + 964: 2f 81 ldd r18, Y+7 ; 0x07 + 966: 38 85 ldd r19, Y+8 ; 0x08 + 968: 4e 2d mov r20, r14 + 96a: b8 01 movw r22, r16 + 96c: 81 e0 ldi r24, 0x01 ; 1 + 96e: 0e 94 62 02 call 0x4c4 ; 0x4c4 + free(cfg); + 972: c8 01 movw r24, r16 + 974: 0e 94 b7 06 call 0xd6e ; 0xd6e + break; + 978: 25 c1 rjmp .+586 ; 0xbc4 <__vector_12+0x50c> + case 0x0300: // String 0 + usb_desc_out(false,(uint8_t *)&string0.bLength,pgm_read_byte(&string0.bLength),ucr.wLength); + 97a: e6 e8 ldi r30, 0x86 ; 134 + 97c: f0 e0 ldi r31, 0x00 ; 0 + 97e: 44 91 lpm r20, Z + 980: 2f 81 ldd r18, Y+7 ; 0x07 + 982: 38 85 ldd r19, Y+8 ; 0x08 + 984: bf 01 movw r22, r30 + 986: 80 e0 ldi r24, 0x00 ; 0 + 988: 0e 94 62 02 call 0x4c4 ; 0x4c4 + break; + 98c: 1b c1 rjmp .+566 ; 0xbc4 <__vector_12+0x50c> + case 0x0301: // String 1 + usb_desc_out(false,(uint8_t *)&string1.bLength,pgm_read_byte(&string1.bLength),ucr.wLength); + 98e: ea e8 ldi r30, 0x8A ; 138 + 990: f0 e0 ldi r31, 0x00 ; 0 + 992: 44 91 lpm r20, Z + 994: 2f 81 ldd r18, Y+7 ; 0x07 + 996: 38 85 ldd r19, Y+8 ; 0x08 + 998: bf 01 movw r22, r30 + 99a: 80 e0 ldi r24, 0x00 ; 0 + 99c: 0e 94 62 02 call 0x4c4 ; 0x4c4 + break; + 9a0: 11 c1 rjmp .+546 ; 0xbc4 <__vector_12+0x50c> + case 0x0302: // String 2 + usb_desc_out(false,(uint8_t *)&string2.bLength,pgm_read_byte(&string2.bLength),ucr.wLength); + 9a2: e0 ea ldi r30, 0xA0 ; 160 + 9a4: f0 e0 ldi r31, 0x00 ; 0 + 9a6: 44 91 lpm r20, Z + 9a8: 2f 81 ldd r18, Y+7 ; 0x07 + 9aa: 38 85 ldd r19, Y+8 ; 0x08 + 9ac: bf 01 movw r22, r30 + 9ae: 80 e0 ldi r24, 0x00 ; 0 + 9b0: 0e 94 62 02 call 0x4c4 ; 0x4c4 + break; + 9b4: 07 c1 rjmp .+526 ; 0xbc4 <__vector_12+0x50c> + usb_desc_out(true,(uint8_t *)&buf,buf.bLength,ucr.wLength); + #endif + break; + #endif + default: + STALL; // stall + 9b6: 81 e2 ldi r24, 0x21 ; 33 + 9b8: 80 93 eb 00 sts 0x00EB, r24 + 9bc: 03 c1 rjmp .+518 ; 0xbc4 <__vector_12+0x50c> + } + return; + } + if (ucr.bRequest == SET_ADDRESS) { + 9be: 85 30 cpi r24, 0x05 ; 5 + 9c0: 71 f4 brne .+28 ; 0x9de <__vector_12+0x326> + USB_SEND_IN; + 9c2: 8e ef ldi r24, 0xFE ; 254 + 9c4: 80 93 e8 00 sts 0x00E8, r24 + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + 9c8: e8 ee ldi r30, 0xE8 ; 232 + 9ca: f0 e0 ldi r31, 0x00 ; 0 + 9cc: 80 81 ld r24, Z + 9ce: 80 ff sbrs r24, 0 + 9d0: fd cf rjmp .-6 ; 0x9cc <__vector_12+0x314> + return; + } + if (ucr.bRequest == SET_ADDRESS) { + USB_SEND_IN; + usb_wait_in_ready(); + UDADDR = ucr.wValue | _BV(ADDEN); + 9d2: 8b 81 ldd r24, Y+3 ; 0x03 + 9d4: 9c 81 ldd r25, Y+4 ; 0x04 + 9d6: 80 68 ori r24, 0x80 ; 128 + 9d8: 80 93 e3 00 sts 0x00E3, r24 + 9dc: f3 c0 rjmp .+486 ; 0xbc4 <__vector_12+0x50c> + return; + } + if (ucr.bRequest == SET_CONFIGURATION && ucr.bmRequestType == 0) { // another configuration will be chosen + 9de: 89 30 cpi r24, 0x09 ; 9 + 9e0: c1 f4 brne .+48 ; 0xa12 <__vector_12+0x35a> + 9e2: 99 81 ldd r25, Y+1 ; 0x01 + 9e4: 91 11 cpse r25, r1 + 9e6: 60 c0 rjmp .+192 ; 0xaa8 <__vector_12+0x3f0> + if (ucr.wValue==1) { // configuration 1 will be chosen + 9e8: 8b 81 ldd r24, Y+3 ; 0x03 + 9ea: 9c 81 ldd r25, Y+4 ; 0x04 + 9ec: 01 97 sbiw r24, 0x01 ; 1 + 9ee: 69 f4 brne .+26 ; 0xa0a <__vector_12+0x352> + usb_conf = ucr.wValue; + 9f0: 81 e0 ldi r24, 0x01 ; 1 + 9f2: 80 93 3e 01 sts 0x013E, r24 + USB_SEND_IN; + 9f6: 8e ef ldi r24, 0xFE ; 254 + 9f8: 80 93 e8 00 sts 0x00E8, r24 + #if (NUMINTERFACES==1) + usb_endpoints(); // initialize endpoints + #else + usb_if = 0; // select interface 0 + 9fc: 10 92 0e 01 sts 0x010E, r1 + usb_endpoints(usb_if); // initialize endpoints + a00: 80 91 0e 01 lds r24, 0x010E + a04: 0e 94 d4 01 call 0x3a8 ; 0x3a8 + a08: dd c0 rjmp .+442 ; 0xbc4 <__vector_12+0x50c> + #endif + } else { // other configurations are not supported in this version + STALL; // stall + a0a: 81 e2 ldi r24, 0x21 ; 33 + a0c: 80 93 eb 00 sts 0x00EB, r24 + a10: d9 c0 rjmp .+434 ; 0xbc4 <__vector_12+0x50c> + } + return; + } + if (ucr.bRequest == GET_CONFIGURATION && ucr.bmRequestType == 0x80) { + a12: 88 30 cpi r24, 0x08 ; 8 + a14: 89 f4 brne .+34 ; 0xa38 <__vector_12+0x380> + a16: 99 81 ldd r25, Y+1 ; 0x01 + a18: 90 38 cpi r25, 0x80 ; 128 + a1a: 09 f0 breq .+2 ; 0xa1e <__vector_12+0x366> + a1c: 57 c0 rjmp .+174 ; 0xacc <__vector_12+0x414> + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + a1e: e8 ee ldi r30, 0xE8 ; 232 + a20: f0 e0 ldi r31, 0x00 ; 0 + a22: 80 81 ld r24, Z + a24: 80 ff sbrs r24, 0 + a26: fd cf rjmp .-6 ; 0xa22 <__vector_12+0x36a> + } + return; + } + if (ucr.bRequest == GET_CONFIGURATION && ucr.bmRequestType == 0x80) { + usb_wait_in_ready(); + UEDATX = usb_conf; + a28: 80 91 3e 01 lds r24, 0x013E + a2c: 80 93 f1 00 sts 0x00F1, r24 + USB_SEND_IN; + a30: 8e ef ldi r24, 0xFE ; 254 + a32: 80 93 e8 00 sts 0x00E8, r24 + a36: c6 c0 rjmp .+396 ; 0xbc4 <__vector_12+0x50c> + return; + } + if (ucr.bRequest == GET_STATUS) { + a38: 81 11 cpse r24, r1 + a3a: 1c c0 rjmp .+56 ; 0xa74 <__vector_12+0x3bc> + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + a3c: e8 ee ldi r30, 0xE8 ; 232 + a3e: f0 e0 ldi r31, 0x00 ; 0 + a40: 80 81 ld r24, Z + a42: 80 ff sbrs r24, 0 + a44: fd cf rjmp .-6 ; 0xa40 <__vector_12+0x388> + } + if (ucr.bRequest == GET_STATUS) { + usb_wait_in_ready(); + i = 0; + #ifdef SUPPORT_ENDPOINT_HALT + if (ucr.bmRequestType == 0x82) { + a46: 89 81 ldd r24, Y+1 ; 0x01 + a48: 82 38 cpi r24, 0x82 ; 130 + a4a: 59 f4 brne .+22 ; 0xa62 <__vector_12+0x3aa> + UENUM = ucr.wIndex; + a4c: 8d 81 ldd r24, Y+5 ; 0x05 + a4e: e9 ee ldi r30, 0xE9 ; 233 + a50: f0 e0 ldi r31, 0x00 ; 0 + a52: 80 83 st Z, r24 + if (UECONX & _BV(STALLRQ)) i = 1; + a54: 80 91 eb 00 lds r24, 0x00EB + a58: 85 fb bst r24, 5 + a5a: 88 27 eor r24, r24 + a5c: 80 f9 bld r24, 0 + UENUM = 0; + a5e: 10 82 st Z, r1 + a60: 01 c0 rjmp .+2 ; 0xa64 <__vector_12+0x3ac> + USB_SEND_IN; + return; + } + if (ucr.bRequest == GET_STATUS) { + usb_wait_in_ready(); + i = 0; + a62: 80 e0 ldi r24, 0x00 ; 0 + UENUM = ucr.wIndex; + if (UECONX & _BV(STALLRQ)) i = 1; + UENUM = 0; + } + #endif + UEDATX = i; + a64: e1 ef ldi r30, 0xF1 ; 241 + a66: f0 e0 ldi r31, 0x00 ; 0 + a68: 80 83 st Z, r24 + UEDATX = 0; + a6a: 10 82 st Z, r1 + USB_SEND_IN; + a6c: 8e ef ldi r24, 0xFE ; 254 + a6e: 80 93 e8 00 sts 0x00E8, r24 + a72: a8 c0 rjmp .+336 ; 0xbc4 <__vector_12+0x50c> + return; + } + #if (NUMINTERFACES>1) + if (ucr.bRequest == SET_INTERFACE && (ucr.bmRequestType == 0x20 || ucr.bmRequestType == 0)) { // another interface will be chosen + a74: 8b 30 cpi r24, 0x0B ; 11 + a76: c1 f4 brne .+48 ; 0xaa8 <__vector_12+0x3f0> + a78: 89 81 ldd r24, Y+1 ; 0x01 + a7a: 80 32 cpi r24, 0x20 ; 32 + a7c: 11 f0 breq .+4 ; 0xa82 <__vector_12+0x3ca> + a7e: 81 11 cpse r24, r1 + a80: 55 c0 rjmp .+170 ; 0xb2c <__vector_12+0x474> + if (ucr.wIndex + usb_if = ucr.wIndex; + a8c: 80 93 0e 01 sts 0x010E, r24 + USB_SEND_IN; + a90: 8e ef ldi r24, 0xFE ; 254 + a92: 80 93 e8 00 sts 0x00E8, r24 + usb_endpoints(usb_if); // initialize endpoints + a96: 80 91 0e 01 lds r24, 0x010E + a9a: 0e 94 d4 01 call 0x3a8 ; 0x3a8 + a9e: 92 c0 rjmp .+292 ; 0xbc4 <__vector_12+0x50c> + } else { // other configurations are not supported in this version + STALL; // stall + aa0: 81 e2 ldi r24, 0x21 ; 33 + aa2: 80 93 eb 00 sts 0x00EB, r24 + aa6: 8e c0 rjmp .+284 ; 0xbc4 <__vector_12+0x50c> + } + return; + } + if (ucr.bRequest == GET_INTERFACE && ucr.bmRequestType == 0x80) { + aa8: 8a 30 cpi r24, 0x0A ; 10 + aaa: 81 f4 brne .+32 ; 0xacc <__vector_12+0x414> + aac: 89 81 ldd r24, Y+1 ; 0x01 + aae: 80 38 cpi r24, 0x80 ; 128 + ab0: e9 f5 brne .+122 ; 0xb2c <__vector_12+0x474> + +#define STALL UECONX = _BV(STALLRQ) | _BV(EPEN) + +static inline void usb_wait_in_ready(void) +{ + while (!(UEINTX & _BV(TXINI))); + ab2: e8 ee ldi r30, 0xE8 ; 232 + ab4: f0 e0 ldi r31, 0x00 ; 0 + ab6: 80 81 ld r24, Z + ab8: 80 ff sbrs r24, 0 + aba: fd cf rjmp .-6 ; 0xab6 <__vector_12+0x3fe> + } + return; + } + if (ucr.bRequest == GET_INTERFACE && ucr.bmRequestType == 0x80) { + usb_wait_in_ready(); + UEDATX = usb_if; + abc: 80 91 0e 01 lds r24, 0x010E + ac0: 80 93 f1 00 sts 0x00F1, r24 + USB_SEND_IN; + ac4: 8e ef ldi r24, 0xFE ; 254 + ac6: 80 93 e8 00 sts 0x00E8, r24 + aca: 7c c0 rjmp .+248 ; 0xbc4 <__vector_12+0x50c> + return; + } + #endif + #ifdef SUPPORT_ENDPOINT_HALT + if ((ucr.bRequest == CLEAR_FEATURE || ucr.bRequest == SET_FEATURE) + acc: 81 30 cpi r24, 0x01 ; 1 + ace: 11 f0 breq .+4 ; 0xad4 <__vector_12+0x41c> + ad0: 83 30 cpi r24, 0x03 ; 3 + ad2: 61 f5 brne .+88 ; 0xb2c <__vector_12+0x474> + && ucr.bmRequestType == 0x02 && ucr.wValue == 0) { + ad4: 89 81 ldd r24, Y+1 ; 0x01 + ad6: 82 30 cpi r24, 0x02 ; 2 + ad8: 49 f5 brne .+82 ; 0xb2c <__vector_12+0x474> + ada: 8b 81 ldd r24, Y+3 ; 0x03 + adc: 9c 81 ldd r25, Y+4 ; 0x04 + ade: 89 2b or r24, r25 + ae0: 29 f5 brne .+74 ; 0xb2c <__vector_12+0x474> + i = ucr.wIndex & 0x7F; + ae2: 8d 81 ldd r24, Y+5 ; 0x05 + ae4: 9e 81 ldd r25, Y+6 ; 0x06 + ae6: 8f 77 andi r24, 0x7F ; 127 + ae8: 99 27 eor r25, r25 + if (i >= 1 && i <= MAX_ENDPOINT) { + aea: 38 2f mov r19, r24 + aec: 31 50 subi r19, 0x01 ; 1 + aee: 34 30 cpi r19, 0x04 ; 4 + af0: e8 f4 brcc .+58 ; 0xb2c <__vector_12+0x474> + USB_SEND_IN; + af2: 3e ef ldi r19, 0xFE ; 254 + af4: 30 93 e8 00 sts 0x00E8, r19 + UENUM = i; + af8: 80 93 e9 00 sts 0x00E9, r24 + if (ucr.bRequest == SET_FEATURE) { + afc: 2a 81 ldd r18, Y+2 ; 0x02 + afe: 23 30 cpi r18, 0x03 ; 3 + b00: 21 f4 brne .+8 ; 0xb0a <__vector_12+0x452> + UECONX = _BV(STALLRQ)|_BV(EPEN); + b02: 81 e2 ldi r24, 0x21 ; 33 + b04: 80 93 eb 00 sts 0x00EB, r24 + b08: 5d c0 rjmp .+186 ; 0xbc4 <__vector_12+0x50c> + } else { + UECONX = _BV(STALLRQC)|_BV(RSTDT)|_BV(EPEN); + b0a: 99 e1 ldi r25, 0x19 ; 25 + b0c: 90 93 eb 00 sts 0x00EB, r25 + UERST = _BV(i); + b10: 21 e0 ldi r18, 0x01 ; 1 + b12: 30 e0 ldi r19, 0x00 ; 0 + b14: f9 01 movw r30, r18 + b16: 02 c0 rjmp .+4 ; 0xb1c <__vector_12+0x464> + b18: ee 0f add r30, r30 + b1a: ff 1f adc r31, r31 + b1c: 8a 95 dec r24 + b1e: e2 f7 brpl .-8 ; 0xb18 <__vector_12+0x460> + b20: cf 01 movw r24, r30 + b22: ea ee ldi r30, 0xEA ; 234 + b24: f0 e0 ldi r31, 0x00 ; 0 + b26: 80 83 st Z, r24 + UERST = 0; + b28: 10 82 st Z, r1 + b2a: 4c c0 rjmp .+152 ; 0xbc4 <__vector_12+0x50c> + } + } + #endif + #ifdef USERDEFCONTROLS + // handle user defined control requests + if (!usb_controlrequest(&ucr)) + b2c: ce 01 movw r24, r28 + b2e: 01 96 adiw r24, 0x01 ; 1 + b30: 0e 94 60 01 call 0x2c0 ; 0x2c0 + b34: 81 11 cpse r24, r1 + b36: 46 c0 rjmp .+140 ; 0xbc4 <__vector_12+0x50c> + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + b38: 81 e2 ldi r24, 0x21 ; 33 + b3a: 80 93 eb 00 sts 0x00EB, r24 + b3e: 42 c0 rjmp .+132 ; 0xbc4 <__vector_12+0x50c> + return; + #endif + } + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + b40: 81 e2 ldi r24, 0x21 ; 33 + b42: 80 93 eb 00 sts 0x00EB, r24 + b46: 2f c0 rjmp .+94 ; 0xba6 <__vector_12+0x4ee> + b48: f2 2e mov r15, r18 + } + + // handle interrupts for further endpoints + for (i=1; i<=MAX_ENDPOINT; i++) { + if (UEINT & _BV(i)) { + b4a: 40 81 ld r20, Z + b4c: 50 e0 ldi r21, 0x00 ; 0 + b4e: 02 2e mov r0, r18 + b50: 02 c0 rjmp .+4 ; 0xb56 <__vector_12+0x49e> + b52: 55 95 asr r21 + b54: 47 95 ror r20 + b56: 0a 94 dec r0 + b58: e2 f7 brpl .-8 ; 0xb52 <__vector_12+0x49a> + b5a: 40 ff sbrs r20, 0 + b5c: 1b c0 rjmp .+54 ; 0xb94 <__vector_12+0x4dc> + UENUM=i; // select endpoint + b5e: db 01 movw r26, r22 + b60: 2c 93 st X, r18 + intbits = UEINTX; // save interrupt bits of the endpoint + b62: d6 01 movw r26, r12 + b64: 8c 91 ld r24, X + if (intbits & _BV(RXOUTI)) { // interrupt occured by incoming data + b66: 82 ff sbrs r24, 2 + b68: 13 c0 rjmp .+38 ; 0xb90 <__vector_12+0x4d8> + #ifdef MEGA4_6 + if (((uint16_t)(UEBCHX)<<8)+UEBCLX) { // data available in input endpoint + usb_ep(i,((uint16_t)(UEBCHX)<<8)+UEBCLX); + #else + if (UEBCLX) { // data available in input endpoint + b6a: 80 91 f2 00 lds r24, 0x00F2 + b6e: 88 23 and r24, r24 + b70: 41 f0 breq .+16 ; 0xb82 <__vector_12+0x4ca> + usb_ep(i,UEBCLX); + b72: 60 91 f2 00 lds r22, 0x00F2 + b76: 70 e0 ldi r23, 0x00 ; 0 + b78: 82 2f mov r24, r18 + b7a: 0e 94 91 01 call 0x322 ; 0x322 + #endif + UENUM=i; // reselect endpoint (if changed by handling routine) + b7e: f0 92 e9 00 sts 0x00E9, r15 + } + UEINTX = ~(_BV(RXOUTI)|_BV(STALLEDI)); // clear interrupt flags + b82: e8 ee ldi r30, 0xE8 ; 232 + b84: f0 e0 ldi r31, 0x00 ; 0 + b86: 89 ef ldi r24, 0xF9 ; 249 + b88: 80 83 st Z, r24 + UEINTX = 0x7F; // free bank (FIFOCON), has to be executed after RXOUTI! + b8a: 8f e7 ldi r24, 0x7F ; 127 + b8c: 80 83 st Z, r24 + b8e: 1a c0 rjmp .+52 ; 0xbc4 <__vector_12+0x50c> + return; + } + STALL; // stall + b90: d8 01 movw r26, r16 + b92: 9c 93 st X, r25 + b94: 2f 5f subi r18, 0xFF ; 255 + b96: 3f 4f sbci r19, 0xFF ; 255 + } + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + } + + // handle interrupts for further endpoints + for (i=1; i<=MAX_ENDPOINT; i++) { + b98: 25 30 cpi r18, 0x05 ; 5 + b9a: 31 05 cpc r19, r1 + b9c: a9 f6 brne .-86 ; 0xb48 <__vector_12+0x490> + return; + } + STALL; // stall + } + } + STALL; // stall + b9e: 81 e2 ldi r24, 0x21 ; 33 + ba0: 80 93 eb 00 sts 0x00EB, r24 + ba4: 0f c0 rjmp .+30 ; 0xbc4 <__vector_12+0x50c> + USB_SEND_IN; + return; + } + if (ucr.bRequest == GET_STATUS) { + usb_wait_in_ready(); + i = 0; + ba6: 21 e0 ldi r18, 0x01 ; 1 + ba8: 30 e0 ldi r19, 0x00 ; 0 + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + } + + // handle interrupts for further endpoints + for (i=1; i<=MAX_ENDPOINT; i++) { + if (UEINT & _BV(i)) { + baa: e4 ef ldi r30, 0xF4 ; 244 + bac: f0 e0 ldi r31, 0x00 ; 0 + UENUM=i; // select endpoint + bae: 69 ee ldi r22, 0xE9 ; 233 + bb0: 70 e0 ldi r23, 0x00 ; 0 + intbits = UEINTX; // save interrupt bits of the endpoint + bb2: 0f 2e mov r0, r31 + bb4: f8 ee ldi r31, 0xE8 ; 232 + bb6: cf 2e mov r12, r31 + bb8: d1 2c mov r13, r1 + bba: f0 2d mov r31, r0 + } + UEINTX = ~(_BV(RXOUTI)|_BV(STALLEDI)); // clear interrupt flags + UEINTX = 0x7F; // free bank (FIFOCON), has to be executed after RXOUTI! + return; + } + STALL; // stall + bbc: 0b ee ldi r16, 0xEB ; 235 + bbe: 10 e0 ldi r17, 0x00 ; 0 + bc0: 91 e2 ldi r25, 0x21 ; 33 + bc2: c2 cf rjmp .-124 ; 0xb48 <__vector_12+0x490> + } + } + STALL; // stall +} + bc4: 2a 96 adiw r28, 0x0a ; 10 + bc6: 0f b6 in r0, 0x3f ; 63 + bc8: f8 94 cli + bca: de bf out 0x3e, r29 ; 62 + bcc: 0f be out 0x3f, r0 ; 63 + bce: cd bf out 0x3d, r28 ; 61 + bd0: df 91 pop r29 + bd2: cf 91 pop r28 + bd4: ff 91 pop r31 + bd6: ef 91 pop r30 + bd8: bf 91 pop r27 + bda: af 91 pop r26 + bdc: 9f 91 pop r25 + bde: 8f 91 pop r24 + be0: 7f 91 pop r23 + be2: 6f 91 pop r22 + be4: 5f 91 pop r21 + be6: 4f 91 pop r20 + be8: 3f 91 pop r19 + bea: 2f 91 pop r18 + bec: 1f 91 pop r17 + bee: 0f 91 pop r16 + bf0: ff 90 pop r15 + bf2: ef 90 pop r14 + bf4: df 90 pop r13 + bf6: cf 90 pop r12 + bf8: bf 90 pop r11 + bfa: af 90 pop r10 + bfc: 9f 90 pop r9 + bfe: 8f 90 pop r8 + c00: 7f 90 pop r7 + c02: 6f 90 pop r6 + c04: 5f 90 pop r5 + c06: 4f 90 pop r4 + c08: 3f 90 pop r3 + c0a: 0f 90 pop r0 + c0c: 0f be out 0x3f, r0 ; 63 + c0e: 0f 90 pop r0 + c10: 1f 90 pop r1 + c12: 18 95 reti + +00000c14 <__mulhi3>: + c14: 55 27 eor r21, r21 + c16: 00 24 eor r0, r0 + +00000c18 <__mulhi3_loop>: + c18: 80 ff sbrs r24, 0 + c1a: 02 c0 rjmp .+4 ; 0xc20 <__mulhi3_skip1> + c1c: 06 0e add r0, r22 + c1e: 57 1f adc r21, r23 + +00000c20 <__mulhi3_skip1>: + c20: 66 0f add r22, r22 + c22: 77 1f adc r23, r23 + c24: 61 15 cp r22, r1 + c26: 71 05 cpc r23, r1 + c28: 21 f0 breq .+8 ; 0xc32 <__mulhi3_exit> + c2a: 96 95 lsr r25 + c2c: 87 95 ror r24 + c2e: 00 97 sbiw r24, 0x00 ; 0 + c30: 99 f7 brne .-26 ; 0xc18 <__mulhi3_loop> + +00000c32 <__mulhi3_exit>: + c32: 95 2f mov r25, r21 + c34: 80 2d mov r24, r0 + c36: 08 95 ret + +00000c38 : + c38: 0f 93 push r16 + c3a: 1f 93 push r17 + c3c: cf 93 push r28 + c3e: df 93 push r29 + c40: 82 30 cpi r24, 0x02 ; 2 + c42: 91 05 cpc r25, r1 + c44: 10 f4 brcc .+4 ; 0xc4a + c46: 82 e0 ldi r24, 0x02 ; 2 + c48: 90 e0 ldi r25, 0x00 ; 0 + c4a: e0 91 42 01 lds r30, 0x0142 + c4e: f0 91 43 01 lds r31, 0x0143 + c52: 20 e0 ldi r18, 0x00 ; 0 + c54: 30 e0 ldi r19, 0x00 ; 0 + c56: c0 e0 ldi r28, 0x00 ; 0 + c58: d0 e0 ldi r29, 0x00 ; 0 + c5a: 23 c0 rjmp .+70 ; 0xca2 + c5c: 40 81 ld r20, Z + c5e: 51 81 ldd r21, Z+1 ; 0x01 + c60: 48 17 cp r20, r24 + c62: 59 07 cpc r21, r25 + c64: a8 f0 brcs .+42 ; 0xc90 + c66: 48 17 cp r20, r24 + c68: 59 07 cpc r21, r25 + c6a: 61 f4 brne .+24 ; 0xc84 + c6c: 82 81 ldd r24, Z+2 ; 0x02 + c6e: 93 81 ldd r25, Z+3 ; 0x03 + c70: 20 97 sbiw r28, 0x00 ; 0 + c72: 19 f0 breq .+6 ; 0xc7a + c74: 9b 83 std Y+3, r25 ; 0x03 + c76: 8a 83 std Y+2, r24 ; 0x02 + c78: 2e c0 rjmp .+92 ; 0xcd6 + c7a: 90 93 43 01 sts 0x0143, r25 + c7e: 80 93 42 01 sts 0x0142, r24 + c82: 29 c0 rjmp .+82 ; 0xcd6 + c84: 21 15 cp r18, r1 + c86: 31 05 cpc r19, r1 + c88: 29 f0 breq .+10 ; 0xc94 + c8a: 42 17 cp r20, r18 + c8c: 53 07 cpc r21, r19 + c8e: 10 f0 brcs .+4 ; 0xc94 + c90: a9 01 movw r20, r18 + c92: 02 c0 rjmp .+4 ; 0xc98 + c94: be 01 movw r22, r28 + c96: df 01 movw r26, r30 + c98: 02 81 ldd r16, Z+2 ; 0x02 + c9a: 13 81 ldd r17, Z+3 ; 0x03 + c9c: ef 01 movw r28, r30 + c9e: 9a 01 movw r18, r20 + ca0: f8 01 movw r30, r16 + ca2: 30 97 sbiw r30, 0x00 ; 0 + ca4: d9 f6 brne .-74 ; 0xc5c + ca6: 21 15 cp r18, r1 + ca8: 31 05 cpc r19, r1 + caa: 09 f1 breq .+66 ; 0xcee + cac: 28 1b sub r18, r24 + cae: 39 0b sbc r19, r25 + cb0: 24 30 cpi r18, 0x04 ; 4 + cb2: 31 05 cpc r19, r1 + cb4: 90 f4 brcc .+36 ; 0xcda + cb6: 12 96 adiw r26, 0x02 ; 2 + cb8: 8d 91 ld r24, X+ + cba: 9c 91 ld r25, X + cbc: 13 97 sbiw r26, 0x03 ; 3 + cbe: 61 15 cp r22, r1 + cc0: 71 05 cpc r23, r1 + cc2: 21 f0 breq .+8 ; 0xccc + cc4: fb 01 movw r30, r22 + cc6: 93 83 std Z+3, r25 ; 0x03 + cc8: 82 83 std Z+2, r24 ; 0x02 + cca: 04 c0 rjmp .+8 ; 0xcd4 + ccc: 90 93 43 01 sts 0x0143, r25 + cd0: 80 93 42 01 sts 0x0142, r24 + cd4: fd 01 movw r30, r26 + cd6: 32 96 adiw r30, 0x02 ; 2 + cd8: 44 c0 rjmp .+136 ; 0xd62 + cda: fd 01 movw r30, r26 + cdc: e2 0f add r30, r18 + cde: f3 1f adc r31, r19 + ce0: 81 93 st Z+, r24 + ce2: 91 93 st Z+, r25 + ce4: 22 50 subi r18, 0x02 ; 2 + ce6: 31 09 sbc r19, r1 + ce8: 2d 93 st X+, r18 + cea: 3c 93 st X, r19 + cec: 3a c0 rjmp .+116 ; 0xd62 + cee: 20 91 40 01 lds r18, 0x0140 + cf2: 30 91 41 01 lds r19, 0x0141 + cf6: 23 2b or r18, r19 + cf8: 41 f4 brne .+16 ; 0xd0a + cfa: 20 91 11 01 lds r18, 0x0111 + cfe: 30 91 12 01 lds r19, 0x0112 + d02: 30 93 41 01 sts 0x0141, r19 + d06: 20 93 40 01 sts 0x0140, r18 + d0a: 20 91 0f 01 lds r18, 0x010F + d0e: 30 91 10 01 lds r19, 0x0110 + d12: 21 15 cp r18, r1 + d14: 31 05 cpc r19, r1 + d16: 41 f4 brne .+16 ; 0xd28 + d18: 2d b7 in r18, 0x3d ; 61 + d1a: 3e b7 in r19, 0x3e ; 62 + d1c: 40 91 13 01 lds r20, 0x0113 + d20: 50 91 14 01 lds r21, 0x0114 + d24: 24 1b sub r18, r20 + d26: 35 0b sbc r19, r21 + d28: e0 91 40 01 lds r30, 0x0140 + d2c: f0 91 41 01 lds r31, 0x0141 + d30: e2 17 cp r30, r18 + d32: f3 07 cpc r31, r19 + d34: a0 f4 brcc .+40 ; 0xd5e + d36: 2e 1b sub r18, r30 + d38: 3f 0b sbc r19, r31 + d3a: 28 17 cp r18, r24 + d3c: 39 07 cpc r19, r25 + d3e: 78 f0 brcs .+30 ; 0xd5e + d40: ac 01 movw r20, r24 + d42: 4e 5f subi r20, 0xFE ; 254 + d44: 5f 4f sbci r21, 0xFF ; 255 + d46: 24 17 cp r18, r20 + d48: 35 07 cpc r19, r21 + d4a: 48 f0 brcs .+18 ; 0xd5e + d4c: 4e 0f add r20, r30 + d4e: 5f 1f adc r21, r31 + d50: 50 93 41 01 sts 0x0141, r21 + d54: 40 93 40 01 sts 0x0140, r20 + d58: 81 93 st Z+, r24 + d5a: 91 93 st Z+, r25 + d5c: 02 c0 rjmp .+4 ; 0xd62 + d5e: e0 e0 ldi r30, 0x00 ; 0 + d60: f0 e0 ldi r31, 0x00 ; 0 + d62: cf 01 movw r24, r30 + d64: df 91 pop r29 + d66: cf 91 pop r28 + d68: 1f 91 pop r17 + d6a: 0f 91 pop r16 + d6c: 08 95 ret + +00000d6e : + d6e: ef 92 push r14 + d70: ff 92 push r15 + d72: 0f 93 push r16 + d74: 1f 93 push r17 + d76: cf 93 push r28 + d78: df 93 push r29 + d7a: 00 97 sbiw r24, 0x00 ; 0 + d7c: 09 f4 brne .+2 ; 0xd80 + d7e: 8f c0 rjmp .+286 ; 0xe9e + d80: dc 01 movw r26, r24 + d82: 12 97 sbiw r26, 0x02 ; 2 + d84: 13 96 adiw r26, 0x03 ; 3 + d86: 1c 92 st X, r1 + d88: 1e 92 st -X, r1 + d8a: 12 97 sbiw r26, 0x02 ; 2 + d8c: e0 90 42 01 lds r14, 0x0142 + d90: f0 90 43 01 lds r15, 0x0143 + d94: e1 14 cp r14, r1 + d96: f1 04 cpc r15, r1 + d98: 89 f4 brne .+34 ; 0xdbc + d9a: 2d 91 ld r18, X+ + d9c: 3c 91 ld r19, X + d9e: 11 97 sbiw r26, 0x01 ; 1 + da0: 28 0f add r18, r24 + da2: 39 1f adc r19, r25 + da4: 80 91 40 01 lds r24, 0x0140 + da8: 90 91 41 01 lds r25, 0x0141 + dac: 82 17 cp r24, r18 + dae: 93 07 cpc r25, r19 + db0: 89 f5 brne .+98 ; 0xe14 + db2: b0 93 41 01 sts 0x0141, r27 + db6: a0 93 40 01 sts 0x0140, r26 + dba: 71 c0 rjmp .+226 ; 0xe9e + dbc: e7 01 movw r28, r14 + dbe: 20 e0 ldi r18, 0x00 ; 0 + dc0: 30 e0 ldi r19, 0x00 ; 0 + dc2: 01 c0 rjmp .+2 ; 0xdc6 + dc4: ea 01 movw r28, r20 + dc6: ca 17 cp r28, r26 + dc8: db 07 cpc r29, r27 + dca: 38 f4 brcc .+14 ; 0xdda + dcc: 4a 81 ldd r20, Y+2 ; 0x02 + dce: 5b 81 ldd r21, Y+3 ; 0x03 + dd0: 9e 01 movw r18, r28 + dd2: 41 15 cp r20, r1 + dd4: 51 05 cpc r21, r1 + dd6: b1 f7 brne .-20 ; 0xdc4 + dd8: 22 c0 rjmp .+68 ; 0xe1e + dda: bc 01 movw r22, r24 + ddc: 62 50 subi r22, 0x02 ; 2 + dde: 71 09 sbc r23, r1 + de0: fb 01 movw r30, r22 + de2: d3 83 std Z+3, r29 ; 0x03 + de4: c2 83 std Z+2, r28 ; 0x02 + de6: 00 81 ld r16, Z + de8: 11 81 ldd r17, Z+1 ; 0x01 + dea: ac 01 movw r20, r24 + dec: 40 0f add r20, r16 + dee: 51 1f adc r21, r17 + df0: 4c 17 cp r20, r28 + df2: 5d 07 cpc r21, r29 + df4: 61 f4 brne .+24 ; 0xe0e + df6: 48 81 ld r20, Y + df8: 59 81 ldd r21, Y+1 ; 0x01 + dfa: 40 0f add r20, r16 + dfc: 51 1f adc r21, r17 + dfe: 4e 5f subi r20, 0xFE ; 254 + e00: 5f 4f sbci r21, 0xFF ; 255 + e02: 51 83 std Z+1, r21 ; 0x01 + e04: 40 83 st Z, r20 + e06: 4a 81 ldd r20, Y+2 ; 0x02 + e08: 5b 81 ldd r21, Y+3 ; 0x03 + e0a: 53 83 std Z+3, r21 ; 0x03 + e0c: 42 83 std Z+2, r20 ; 0x02 + e0e: 21 15 cp r18, r1 + e10: 31 05 cpc r19, r1 + e12: 29 f4 brne .+10 ; 0xe1e + e14: b0 93 43 01 sts 0x0143, r27 + e18: a0 93 42 01 sts 0x0142, r26 + e1c: 40 c0 rjmp .+128 ; 0xe9e + e1e: f9 01 movw r30, r18 + e20: b3 83 std Z+3, r27 ; 0x03 + e22: a2 83 std Z+2, r26 ; 0x02 + e24: e9 01 movw r28, r18 + e26: 69 91 ld r22, Y+ + e28: 79 91 ld r23, Y+ + e2a: c6 0f add r28, r22 + e2c: d7 1f adc r29, r23 + e2e: ac 17 cp r26, r28 + e30: bd 07 cpc r27, r29 + e32: 79 f4 brne .+30 ; 0xe52 + e34: dc 01 movw r26, r24 + e36: 5e 91 ld r21, -X + e38: 4e 91 ld r20, -X + e3a: 46 0f add r20, r22 + e3c: 57 1f adc r21, r23 + e3e: 4e 5f subi r20, 0xFE ; 254 + e40: 5f 4f sbci r21, 0xFF ; 255 + e42: 51 83 std Z+1, r21 ; 0x01 + e44: 40 83 st Z, r20 + e46: 12 96 adiw r26, 0x02 ; 2 + e48: 8d 91 ld r24, X+ + e4a: 9c 91 ld r25, X + e4c: 13 97 sbiw r26, 0x03 ; 3 + e4e: 93 83 std Z+3, r25 ; 0x03 + e50: 82 83 std Z+2, r24 ; 0x02 + e52: a0 e0 ldi r26, 0x00 ; 0 + e54: b0 e0 ldi r27, 0x00 ; 0 + e56: 02 c0 rjmp .+4 ; 0xe5c + e58: d7 01 movw r26, r14 + e5a: 7c 01 movw r14, r24 + e5c: f7 01 movw r30, r14 + e5e: 82 81 ldd r24, Z+2 ; 0x02 + e60: 93 81 ldd r25, Z+3 ; 0x03 + e62: 00 97 sbiw r24, 0x00 ; 0 + e64: c9 f7 brne .-14 ; 0xe58 + e66: c7 01 movw r24, r14 + e68: 02 96 adiw r24, 0x02 ; 2 + e6a: 20 81 ld r18, Z + e6c: 31 81 ldd r19, Z+1 ; 0x01 + e6e: 82 0f add r24, r18 + e70: 93 1f adc r25, r19 + e72: 20 91 40 01 lds r18, 0x0140 + e76: 30 91 41 01 lds r19, 0x0141 + e7a: 28 17 cp r18, r24 + e7c: 39 07 cpc r19, r25 + e7e: 79 f4 brne .+30 ; 0xe9e + e80: 10 97 sbiw r26, 0x00 ; 0 + e82: 29 f4 brne .+10 ; 0xe8e + e84: 10 92 43 01 sts 0x0143, r1 + e88: 10 92 42 01 sts 0x0142, r1 + e8c: 04 c0 rjmp .+8 ; 0xe96 + e8e: 13 96 adiw r26, 0x03 ; 3 + e90: 1c 92 st X, r1 + e92: 1e 92 st -X, r1 + e94: 12 97 sbiw r26, 0x02 ; 2 + e96: f0 92 41 01 sts 0x0141, r15 + e9a: e0 92 40 01 sts 0x0140, r14 + e9e: cd b7 in r28, 0x3d ; 61 + ea0: de b7 in r29, 0x3e ; 62 + ea2: e6 e0 ldi r30, 0x06 ; 6 + ea4: 0c 94 6a 07 jmp 0xed4 ; 0xed4 <__epilogue_restores__+0x18> + +00000ea8 : + ea8: dc 01 movw r26, r24 + eaa: 6c 91 ld r22, X + eac: 61 56 subi r22, 0x61 ; 97 + eae: 6a 31 cpi r22, 0x1A ; 26 + eb0: 08 f0 brcs .+2 ; 0xeb4 + eb2: 60 5e subi r22, 0xE0 ; 224 + eb4: 6f 5b subi r22, 0xBF ; 191 + eb6: 6d 93 st X+, r22 + eb8: c1 f7 brne .-16 ; 0xeaa + eba: 08 95 ret + +00000ebc <__epilogue_restores__>: + ebc: 2a 88 ldd r2, Y+18 ; 0x12 + ebe: 39 88 ldd r3, Y+17 ; 0x11 + ec0: 48 88 ldd r4, Y+16 ; 0x10 + ec2: 5f 84 ldd r5, Y+15 ; 0x0f + ec4: 6e 84 ldd r6, Y+14 ; 0x0e + ec6: 7d 84 ldd r7, Y+13 ; 0x0d + ec8: 8c 84 ldd r8, Y+12 ; 0x0c + eca: 9b 84 ldd r9, Y+11 ; 0x0b + ecc: aa 84 ldd r10, Y+10 ; 0x0a + ece: b9 84 ldd r11, Y+9 ; 0x09 + ed0: c8 84 ldd r12, Y+8 ; 0x08 + ed2: df 80 ldd r13, Y+7 ; 0x07 + ed4: ee 80 ldd r14, Y+6 ; 0x06 + ed6: fd 80 ldd r15, Y+5 ; 0x05 + ed8: 0c 81 ldd r16, Y+4 ; 0x04 + eda: 1b 81 ldd r17, Y+3 ; 0x03 + edc: aa 81 ldd r26, Y+2 ; 0x02 + ede: b9 81 ldd r27, Y+1 ; 0x01 + ee0: ce 0f add r28, r30 + ee2: d1 1d adc r29, r1 + ee4: 0f b6 in r0, 0x3f ; 63 + ee6: f8 94 cli + ee8: de bf out 0x3e, r29 ; 62 + eea: 0f be out 0x3f, r0 ; 63 + eec: cd bf out 0x3d, r28 ; 61 + eee: ed 01 movw r28, r26 + ef0: 08 95 ret + +00000ef2 <_exit>: + ef2: f8 94 cli + +00000ef4 <__stop_program>: + ef4: ff cf rjmp .-2 ; 0xef4 <__stop_program> diff --git a/Mainboard/Mainboard/Debug/Mainboard.map b/Mainboard/Mainboard/Debug/Mainboard.map new file mode 100644 index 0000000..7d5dd0a --- /dev/null +++ b/Mainboard/Mainboard/Debug/Mainboard.map @@ -0,0 +1,754 @@ +Archive member included because of file (symbol) + +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulhi3.o) + usb_user.o (__mulhi3) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o (exit) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + rs232.o (__do_copy_data) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + usb_user.o (__do_clear_bss) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + usb_user.o (malloc) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strupr.o) + usb.o (strupr) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + rs232.o (fprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + rs232.o (__iob) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) (vfprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) (strnlen_P) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) (strnlen) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) (fputc) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) (__ultoa_invert) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) (__mulqi3) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) (__prologue_saves__) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) (__epilogue_restores__) + +Allocating common symbols +Common symbol size file + +__brkval 0x2 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) +__flp 0x2 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) +__iob 0x6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + +Discarded input sections + + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + .text 0x00000000 0x0 led.o + .bss 0x00000000 0x0 led.o + .text 0x00000000 0x0 Mainboard.o + .bss 0x00000000 0x0 Mainboard.o + .text 0x00000000 0x0 rs232.o + .bss 0x00000000 0x0 rs232.o + .text.rs232_send + 0x00000000 0x1a rs232.o + .text 0x00000000 0x0 usb.o + .bss 0x00000000 0x0 usb.o + .text.usb_send + 0x00000000 0xc usb.o + .text 0x00000000 0x0 usb_user.o + .text.usb_status + 0x00000000 0x1c usb_user.o + .text.usb_configuration + 0x00000000 0x6 usb_user.o + .text.usb_interface + 0x00000000 0x6 usb_user.o + .text.usb_freebuffer + 0x00000000 0x1e usb_user.o + .text.usb_rxavail + 0x00000000 0xa usb_user.o + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulhi3.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulhi3.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulhi3.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulhi3.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulhi3.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulhi3.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulhi3.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strupr.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strupr.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .text.avr-libc + 0x00000000 0x24 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .text.avr-libc + 0x00000000 0x3bc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + .text.avr-libc + 0x00000000 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + .text.avr-libc + 0x00000000 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + .text.avr-libc + 0x00000000 0x58 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + .text.avr-libc + 0x00000000 0xc0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc.mul + 0x00000000 0x12 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc.prologue + 0x00000000 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + +Memory Configuration + +Name Origin Length Attributes +text 0x00000000 0x00010000 xr +data 0x00800060 0x0000ffa0 rw !x +eeprom 0x00810000 0x00010000 rw !x +fuse 0x00820000 0x00000400 rw !x +lock 0x00830000 0x00000400 rw !x +signature 0x00840000 0x00000400 rw !x +user_signatures 0x00850000 0x00000400 rw !x +*default* 0x00000000 0xffffffff + +Linker script and memory map + +Address of section .data set to 0x800100 +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o +LOAD led.o +LOAD Mainboard.o +LOAD rs232.o +LOAD usb.o +LOAD usb_user.o +START GROUP +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libm.a +END GROUP +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\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 0xef6 + *(.vectors) + .vectors 0x00000000 0x74 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + 0x00000000 __vector_default + 0x00000000 __vectors + *(.vectors) + *(.progmem.gcc*) + *(.progmem*) + .progmem.data 0x00000074 0x4e usb_user.o + 0x000000c2 . = ALIGN (0x2) + 0x000000c2 __trampolines_start = . + *(.trampolines) + .trampolines 0x000000c2 0x0 linker stubs + *(.trampolines*) + 0x000000c2 __trampolines_end = . + *(.jumptables) + *(.jumptables*) + *(.lowtext) + *(.lowtext*) + 0x000000c2 __ctors_start = . + *(.ctors) + 0x000000c2 __ctors_end = . + 0x000000c2 __dtors_start = . + *(.dtors) + 0x000000c2 __dtors_end = . + SORT(*)(.ctors) + SORT(*)(.dtors) + *(.init0) + .init0 0x000000c2 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + 0x000000c2 __init + *(.init0) + *(.init1) + *(.init1) + *(.init2) + .init2 0x000000c2 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + *(.init2) + *(.init3) + *(.init3) + *(.init4) + .init4 0x000000ce 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + 0x000000ce __do_copy_data + .init4 0x000000e4 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + 0x000000e4 __do_clear_bss + *(.init4) + *(.init5) + *(.init5) + *(.init6) + *(.init6) + *(.init7) + *(.init7) + *(.init8) + *(.init8) + *(.init9) + .init9 0x000000f4 0x8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + *(.init9) + *(.text) + .text 0x000000fc 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + 0x000000fc __vector_22 + 0x000000fc __vector_28 + 0x000000fc __vector_1 + 0x000000fc __vector_24 + 0x000000fc __bad_interrupt + 0x000000fc __vector_6 + 0x000000fc __vector_3 + 0x000000fc __vector_23 + 0x000000fc __vector_25 + 0x000000fc __vector_13 + 0x000000fc __vector_17 + 0x000000fc __vector_19 + 0x000000fc __vector_7 + 0x000000fc __vector_27 + 0x000000fc __vector_5 + 0x000000fc __vector_4 + 0x000000fc __vector_9 + 0x000000fc __vector_2 + 0x000000fc __vector_21 + 0x000000fc __vector_15 + 0x000000fc __vector_8 + 0x000000fc __vector_26 + 0x000000fc __vector_14 + 0x000000fc __vector_10 + 0x000000fc __vector_16 + 0x000000fc __vector_18 + 0x000000fc __vector_20 + 0x00000100 . = ALIGN (0x2) + *(.text.*) + .text.led 0x00000100 0x14 led.o + 0x00000100 led + .text.init_led + 0x00000114 0x8 led.o + 0x00000114 init_led + .text.init 0x0000011c 0x18 Mainboard.o + 0x0000011c init + .text.fade 0x00000134 0xbe Mainboard.o + 0x00000134 fade + .text.programRainbow + 0x000001f2 0x74 Mainboard.o + 0x000001f2 programRainbow + .text.main 0x00000266 0x12 Mainboard.o + 0x00000266 main + .text.uart_putchar + 0x00000278 0x24 rs232.o + 0x00000278 uart_putchar + .text.init_rs232 + 0x0000029c 0x24 rs232.o + 0x0000029c init_rs232 + .text.usb_controlrequest + 0x000002c0 0x62 usb.o + 0x000002c0 usb_controlrequest + .text.usb_ep 0x00000322 0x52 usb.o + 0x00000322 usb_ep + .text.init_usb + 0x00000374 0x6 usb.o + 0x00000374 init_usb + .text.usb_init + 0x0000037a 0x2e usb_user.o + 0x0000037a usb_init + .text.usb_endpoints + 0x000003a8 0x110 usb_user.o + 0x000003a8 usb_endpoints + .text.usb_wait_in + 0x000004b8 0xc usb_user.o + 0x000004b8 usb_wait_in + .text.usb_desc_out + 0x000004c4 0xb6 usb_user.o + 0x000004c4 usb_desc_out + .text.usb_rxdata + 0x0000057a 0x4a usb_user.o + 0x0000057a usb_rxdata + .text.usb_txdata_control + 0x000005c4 0x46 usb_user.o + 0x000005c4 usb_txdata_control + .text.usb_txdata + 0x0000060a 0x5e usb_user.o + 0x0000060a usb_txdata + .text.__vector_11 + 0x00000668 0x50 usb_user.o + 0x00000668 __vector_11 + .text.__vector_12 + 0x000006b8 0x55c usb_user.o + 0x000006b8 __vector_12 + .text.libgcc.mul + 0x00000c14 0x24 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulhi3.o) + 0x00000c14 __mulhi3 + .text.avr-libc + 0x00000c38 0x270 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + 0x00000c38 malloc + 0x00000d6e free + .text.avr-libc + 0x00000ea8 0x14 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strupr.o) + 0x00000ea8 strupr + .text.libgcc.prologue + 0x00000ebc 0x36 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + 0x00000ebc __epilogue_restores__ + 0x00000ef2 . = ALIGN (0x2) + *(.fini9) + .fini9 0x00000ef2 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + 0x00000ef2 _exit + 0x00000ef2 exit + *(.fini9) + *(.fini8) + *(.fini8) + *(.fini7) + *(.fini7) + *(.fini6) + *(.fini6) + *(.fini5) + *(.fini5) + *(.fini4) + *(.fini4) + *(.fini3) + *(.fini3) + *(.fini2) + *(.fini2) + *(.fini1) + *(.fini1) + *(.fini0) + .fini0 0x00000ef2 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + *(.fini0) + 0x00000ef6 _etext = . + +.data 0x00800100 0x3e load address 0x00000ef6 + 0x00800100 PROVIDE (__data_start, .) + *(.data) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + .data 0x00800100 0x0 led.o + .data 0x00800100 0x0 Mainboard.o + .data 0x00800100 0xe rs232.o + .data 0x0080010e 0x0 usb.o + .data 0x0080010e 0x1 usb_user.o + .data 0x0080010f 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulhi3.o) + .data 0x0080010f 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .data 0x0080010f 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_copy_data.o) + .data 0x0080010f 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_clear_bss.o) + .data 0x0080010f 0x6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + 0x0080010f __malloc_heap_end + 0x00800111 __malloc_heap_start + 0x00800113 __malloc_margin + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strupr.o) + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_prologue.o) + .data 0x00800115 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_epilogue.o) + *(.data*) + *(.rodata) + .rodata 0x00800115 0x10 usb.o + .rodata 0x00800125 0x18 usb_user.o + *(.rodata*) + *(.gnu.linkonce.d*) + 0x0080013e . = ALIGN (0x2) + *fill* 0x0080013d 0x1 + 0x0080013e _edata = . + 0x0080013e PROVIDE (__data_end, .) + +.bss 0x0080013e 0xc + 0x0080013e PROVIDE (__bss_start, .) + *(.bss) + .bss 0x0080013e 0x2 usb_user.o + *(.bss*) + *(COMMON) + COMMON 0x00800140 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + 0x00800140 __brkval + 0x00800142 __flp + COMMON 0x00800144 0x6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + 0x00800144 __iob + 0x0080014a PROVIDE (__bss_end, .) + 0x00000ef6 __data_load_start = LOADADDR (.data) + 0x00000f34 __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x0080014a 0x0 + 0x0080014a PROVIDE (__noinit_start, .) + *(.noinit*) + 0x0080014a PROVIDE (__noinit_end, .) + 0x0080014a _end = . + 0x0080014a PROVIDE (__heap_start, .) + +.eeprom 0x00810000 0x0 + *(.eeprom*) + 0x00810000 __eeprom_end = . + +.fuse + *(.fuse) + *(.lfuse) + *(.hfuse) + *(.efuse) + +.lock + *(.lock*) + +.signature + *(.signature*) + +.user_signatures + *(.user_signatures*) + +.stab 0x00000000 0xd2c + *(.stab) + .stab 0x00000000 0x6cc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + .stab 0x000006cc 0x90 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strupr.o) + 0x9c (size before relaxing) + .stab 0x0000075c 0x9c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen_P.o) + 0xa8 (size before relaxing) + .stab 0x000007f8 0x9c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(strnlen.o) + 0xa8 (size before relaxing) + .stab 0x00000894 0x498 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(ultoa_invert.o) + 0x4a4 (size before relaxing) + +.stabstr 0x00000000 0x209 + *(.stabstr) + .stabstr 0x00000000 0x209 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x00000000 0x2f + *(.comment) + .comment 0x00000000 0x2f led.o + 0x30 (size before relaxing) + .comment 0x00000000 0x30 Mainboard.o + .comment 0x00000000 0x30 rs232.o + .comment 0x00000000 0x30 usb.o + .comment 0x00000000 0x30 usb_user.o + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x00000000 0x1f0 + *(.debug_aranges) + .debug_aranges + 0x00000000 0x28 led.o + .debug_aranges + 0x00000028 0x38 Mainboard.o + .debug_aranges + 0x00000060 0x30 rs232.o + .debug_aranges + 0x00000090 0x38 usb.o + .debug_aranges + 0x000000c8 0x88 usb_user.o + .debug_aranges + 0x00000150 0x28 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_aranges + 0x00000178 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_aranges + 0x00000198 0x18 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .debug_aranges + 0x000001b0 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_aranges + 0x000001d0 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x00000000 0x20ca + *(.debug_info) + .debug_info 0x00000000 0xb7 led.o + .debug_info 0x000000b7 0x34f Mainboard.o + .debug_info 0x00000406 0x232 rs232.o + .debug_info 0x00000638 0x41c usb.o + .debug_info 0x00000a54 0xa32 usb_user.o + .debug_info 0x00001486 0x23d c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_info 0x000016c3 0x1fc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_info 0x000018bf 0x14e c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .debug_info 0x00001a0d 0x549 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_info 0x00001f56 0x174 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + *(.gnu.linkonce.wi.*) + +.debug_abbrev 0x00000000 0xd9a + *(.debug_abbrev) + .debug_abbrev 0x00000000 0x85 led.o + .debug_abbrev 0x00000085 0x174 Mainboard.o + .debug_abbrev 0x000001f9 0x181 rs232.o + .debug_abbrev 0x0000037a 0x1b8 usb.o + .debug_abbrev 0x00000532 0x2ae usb_user.o + .debug_abbrev 0x000007e0 0xf9 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_abbrev 0x000008d9 0x139 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_abbrev 0x00000a12 0xc1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .debug_abbrev 0x00000ad3 0x1d6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_abbrev 0x00000ca9 0xf1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + +.debug_line 0x00000000 0x10cf + *(.debug_line) + .debug_line 0x00000000 0xe0 led.o + .debug_line 0x000000e0 0x178 Mainboard.o + .debug_line 0x00000258 0x107 rs232.o + .debug_line 0x0000035f 0x140 usb.o + .debug_line 0x0000049f 0x485 usb_user.o + .debug_line 0x00000924 0x1c8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_line 0x00000aec 0x14a c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_line 0x00000c36 0xc1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + .debug_line 0x00000cf7 0x2fe c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_line 0x00000ff5 0xda c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + +.debug_frame 0x00000000 0x510 + *(.debug_frame) + .debug_frame 0x00000000 0x34 led.o + .debug_frame 0x00000034 0xb0 Mainboard.o + .debug_frame 0x000000e4 0x5c rs232.o + .debug_frame 0x00000140 0x74 usb.o + .debug_frame 0x000001b4 0x244 usb_user.o + .debug_frame 0x000003f8 0x68 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_frame 0x00000460 0x2c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_frame 0x0000048c 0x4c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_frame 0x000004d8 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + +.debug_str 0x00000000 0x74d + *(.debug_str) + .debug_str 0x00000000 0x9e led.o + 0xd2 (size before relaxing) + .debug_str 0x0000009e 0x4c Mainboard.o + 0x118 (size before relaxing) + .debug_str 0x000000ea 0x59 rs232.o + 0x135 (size before relaxing) + .debug_str 0x00000143 0x158 usb.o + 0x247 (size before relaxing) + .debug_str 0x0000029b 0x223 usb_user.o + 0x43a (size before relaxing) + .debug_str 0x000004be 0xcd c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + 0x167 (size before relaxing) + .debug_str 0x0000058b 0x79 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + 0x12e (size before relaxing) + .debug_str 0x00000604 0x4b c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(iob.o) + 0xf8 (size before relaxing) + .debug_str 0x0000064f 0xb1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + 0x198 (size before relaxing) + .debug_str 0x00000700 0x4d c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + 0xf8 (size before relaxing) + +.debug_loc 0x00000000 0x198b + *(.debug_loc) + .debug_loc 0x00000000 0x26 led.o + .debug_loc 0x00000026 0x27f Mainboard.o + .debug_loc 0x000002a5 0xee rs232.o + .debug_loc 0x00000393 0x1b9 usb.o + .debug_loc 0x0000054c 0x918 usb_user.o + .debug_loc 0x00000e64 0x4f8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_loc 0x0000135c 0x21 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_loc 0x0000137d 0x51b c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_loc 0x00001898 0xf3 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + +.debug_macinfo + *(.debug_macinfo) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x00000000 0x190 + *(.debug_ranges) + .debug_ranges 0x00000000 0x18 led.o + .debug_ranges 0x00000018 0x70 Mainboard.o + .debug_ranges 0x00000088 0x20 rs232.o + .debug_ranges 0x000000a8 0x28 usb.o + .debug_ranges 0x000000d0 0x78 usb_user.o + .debug_ranges 0x00000148 0x18 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(malloc.o) + .debug_ranges 0x00000160 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fprintf.o) + .debug_ranges 0x00000170 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(vfprintf_std.o) + .debug_ranges 0x00000180 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35\libc.a(fputc.o) + +.debug_macro + *(.debug_macro) +OUTPUT(Mainboard.elf elf32-avr) +LOAD linker stubs diff --git a/Mainboard/Mainboard/Debug/Mainboard.srec b/Mainboard/Mainboard/Debug/Mainboard.srec new file mode 100644 index 0000000..44e8c77 --- /dev/null +++ b/Mainboard/Mainboard/Debug/Mainboard.srec @@ -0,0 +1,246 @@ +S01100004D61696E626F6172642E7372656386 +S11300000C9461000C947E000C947E000C947E0091 +S11300100C947E000C947E000C947E000C947E0064 +S11300200C947E000C947E000C947E000C9434039B +S11300300C945C030C947E000C947E000C947E0063 +S11300400C947E000C947E000C947E000C947E0034 +S11300500C947E000C947E000C947E000C947E0024 +S11300600C947E000C947E000C947E000C947E0014 +S11300700C947E0012010002FF000010ADDEEEBE03 +S113008000010102030104030904140342006C008B +S11300907500620062004600690073006800000099 +S11300A020034800610063006B00650072002D00AE +S11300B04A0065006F0070006100720064007900FE +S11300C0000011241FBECFEFD4E0DEBFCDBF11E08E +S11300D0A0E0B1E0E6EFFEE002C005900D92AE3381 +S11300E0B107D9F721E0AEE3B1E001C01D92AA3413 +S11300F0B207E1F70E9433010C9479070C940000D5 +S113010095B19F7195B995B18295880F807E982B92 +S113011095B9089584B1806E84B9089586E090E01D +S11301200E94800078940E948A000E944E010E94DE +S1130130BA0108952F923F924F925F926F927F92ED +S11301408F929F92AF92BF92CF92DF92EF92FF92E3 +S11301500F931F93CF93DF937C018B015A01C0E06F +S1130160D0E0212C312C422C532C2CC0862C972CE3 +S1130170C7010E9480008FEF881A980A8FEF8816B3 +S11301809104B1F71C161D065CF4842C952CC8014F +S11301900E9480008FEF881A980A8C169D06B9F782 +S11301A08FEFC81AD80ACA14DB0421F407C061010E +S11301B06C2E7D2ECF3FD105CCF2E4CF2196CF3FDC +S11301C0D10521F01A141B0494F3F8CFDF91CF91D9 +S11301D01F910F91FF90EF90DF90CF90BF90AF9061 +S11301E09F908F907F906F905F904F903F902F9053 +S11301F00895C82F4AE050E064E070E087E090E0A2 +S11302000E949A004C2F50E066E070E084E090E099 +S11302100E949A004C2F50E062E070E086E090E08B +S11302200E949A004C2F50E063E070E082E090E07E +S11302300E949A004C2F50E061E070E083E090E06F +S11302400E949A004C2F50E065E070E081E090E05D +S11302500E949A004C2F50E064E070E085E090E04A +S11302600E949A00CFCF0E948E0082E090E00E940C +S113027080008CE30E94F900CF93C82F8A3019F4D0 +S11302808DE00E943C01E8ECF0E0908195FFFDCF09 +S1130290C093CE0080E090E0CF91089586E08093F3 +S11302A0CA00E9ECF0E080818860808387E680936F +S11302B0CC0080E091E0909347018093460108953B +S11302C0CF93DF93CDB7DEB760970FB6F894DEBF58 +S11302D00FBECDBF2CE0E5E1F1E0DE011196019007 +S11302E00D922A95E1F71D861E861F86188AFC0149 +S11302F02081233C51F48181813049F460E1CE01B5 +S113030001960E94E20281E003C080E001C080E027 +S113031060960FB6F894DEBF0FBECDBFDF91CF91CC +S11303200895CF93DF93CDB7DEB7A0970FB6F894B7 +S1130330DEBF0FBECDBF8130A1F440E2BE016F5FCE +S11303407F4F0E94BD02882361F018A2CE0101965E +S11303500E94540740E2BE016F5F7F4F81E80E9414 +S11303600503A0960FB6F894DEBF0FBECDBFDF9194 +S1130370CF9108950E94BD01089580EA8093D8002A +S113038086E089BD09B400FEFDCF80E88093D800E3 +S11303901092E00010923E018FEF80930E013C9882 +S11303A088E08093E20008952F923F924F925F92EB +S11303B07F928F929F92AF92CF92DF92EF92FF92B1 +S11303C00F931F93CF93DF93282F90E06CE070E09E +S11303D00E940A06FC01EB5DFE4F822F90E06CE068 +S11303E070E00E940A06895D9E4F41E00F2EF9EEEF +S11303F0CF2ED12CF02D0F2EFBEEEF2EF12CF02D65 +S1130400AA24A3940CEE10E06DEE70E00F2EF0EF32 +S11304104F2E512CF02D6894992492F8812C6894D5 +S1130420772474F8DF0120812F3F59F1E6014883D6 +S1130430E701A8822081E80128831C019C01215046 +S11304403109E9012881203841F0203441F020327B +S113045041F0203141F4372D07C030E405C030E3CA +S113046003C030E201C0382DE1012881232BEB01C8 +S113047028832C9120FF03C0D2011C9202C0E20108 +S113048098824F5F33960396453061F6EAEEF0E0CA +S11304908EE180831082DF91CF911F910F91FF90A5 +S11304A0EF90DF90CF90AF909F908F907F905F9070 +S11304B04F903F902F900895E8EEF0E08081857092 +S11304C0E9F30895AF92BF92CF92DF92EF92FF9239 +S11304D00F931F93CF93DF93D82ED62FC72FE42FDC +S11304E0F0E02E173F0710F4C22E01C0C42E0E9464 +S11304F05C020D2F1C2F6894AA24A4F80F2EF8EE8A +S1130500EF2EF12CF02D0F2EFEEFBF2EF02DC1EFAC +S1130510D0E02C2D80E18C1508F42A2D2223D9F06B +S1130520F801922FDD2011F0808101C0849188832D +S1130530915031969111F6CF622F615070E06F5F48 +S11305407F4F060F171FC21AF701B082C11007C0F0 +S1130550203129F007C0F701B082CC2019F00E94A5 +S11305605C02D7CFDF91CF911F910F91FF90EF9055 +S1130570DF90CF90BF90AF9008958093E900909161 +S1130580F200941708F4492F4423D1F0362FE62FB4 +S1130590F72FA1EFB0E09C9191939E2F931B94179A +S11305A0D0F39091F20091110BC021E030E002C031 +S11305B0220F331F8A95E2F7EAEEF0E020831082DF +S11305C0842F08956623E9F01092E900E8EEF0E044 +S11305D0208120FFFDCF2091F200211114C0282F8B +S11305E0E82FF92FA1EFB0E081918C938E2F821B1D +S11305F08617D0F3E8EEF0E080818E7F808381E07F +S1130600089580E0089580E00895CF93DF93442314 +S113061029F18093E900E8EEF0E0808180FFFDCFCE +S11306208091F20081111CC0962FE62FF72FA8EEBF +S1130630B0E0C1EFD0E08C9185FF02C08081888357 +S113064031968E2F891B8417B0F3E8EEF0E0808199 +S11306508E7F80838FE7808381E003C080E001C0C8 +S113066080E0DF91CF9108951F920F920FB60F9201 +S113067011248F93EF93FF93E1EEF0E080811082D9 +S113068083FF12C01092E90081E08093EB00109286 +S1130690EC0082E18093ED0088E08093F0001092FA +S11306A03E018FEF80930E01FF91EF918F910F9098 +S11306B00FBE0F901F9018951F920F920FB60F92B6 +S11306C011243F924F925F926F927F928F929F92EA +S11306D0AF92BF92CF92DF92EF92FF920F931F934C +S11306E02F933F934F935F936F937F938F939F9336 +S11306F0AF93BF93EF93FF93CF93DF93CDB7DEB761 +S11307002A97DEBFCDBF8091F40080FF4CC21092C7 +S1130710E9008091E80083FF13C2E1EFF0E08081FB +S1130720898380818A83208130E03C832B834081CC +S1130730942F80E0822B932B9C838B83208130E049 +S11307403E832D834081942F80E0822B932B9E83C4 +S11307508D83208130E038872F834081942F80E07F +S1130760822B932B98878F8382EF8093E8008A8172 +S1130770863009F024C18B819C81811523E0920786 +S113078009F4FBC048F4811551E0950779F081150F +S1130790924009F010C124C08130B3E09B0709F4F2 +S11307A0F6C08230934009F006C1FBC0E4E7F0E0F4 +S11307B044912F813885BF0180E00E94620202C209 +S11307C09A2F50815F3F09F49B2F490F8150339634 +S11307D08111F6CF2F5F3F4F2230310539F410C01D +S11307E020E030E040E014E0A1E0B0E0C9016CE0BA +S11307F070E00E940A06FC01EB5DFE4F812FE0CF02 +S1130800842F880F880F880F841B0F2EFBE1EF2E97 +S1130810F02DE80E8E2D90E00E941C06082F192F53 +S113082089E0D8018C9382E011968C9311971296EB +S1130830EC92129713961C92139714968C93149718 +S113084081E015968C93159716961C92169780EC5A +S113085017968C9317978AEF18968C93F80139960C +S11308601A86198644E0A12C88248394F82C9A2CA7 +S11308700F2EF9E07F2EF02DDD24DA940F2EF7E011 +S1130880BF2EF02D0F2EF5E0CF2EF02D68946624A8 +S113089061F80F2EF3E05F2EF02D56C07F2DDC01A2 +S11308A02C912F3F09F4792D670F51500396511164 +S11308B0F5CF70824183428213826483D58216828B +S11308C0D782108639966623C1F1832F932D6CE06D +S11308D070E00E940A069C012A5D3E4F482CC90123 +S11308E0B90161507109DB015C915F3F01F1B08294 +S11308F0C182652F679566276795642962835134A1 +S113090041F0503441F0513841F0503841F4562D03 +S113091007C05F2D05C05F2D03C0562D01C0552DA6 +S11309205383DC018C918483158216823796439419 +S11309302D5F3F4FB5E04B12D2CFA985BA851196F2 +S1130940BA87A987129771F04984342D3A84842D8B +S1130950932D6CE070E00E940A068B5D9E4F542F2D +S11309606A2D9CCF2F8138854E2DB80181E00E94DD +S11309706202C8010E94B70625C1E6E8F0E044918E +S11309802F813885BF0180E00E9462021BC1EAE822 +S1130990F0E044912F813885BF0180E00E9462021B +S11309A011C1E0EAF0E044912F813885BF0180E075 +S11309B00E94620207C181E28093EB0003C185308B +S11309C071F48EEF8093E800E8EEF0E0808180FF20 +S11309D0FDCF8B819C8180688093E300F3C08930D4 +S11309E0C1F49981911160C08B819C81019769F454 +S11309F081E080933E018EEF8093E80010920E0117 +S1130A0080910E010E94D401DDC081E28093EB004D +S1130A10D9C0883089F49981903809F057C0E8EE3C +S1130A20F0E0808180FFFDCF80913E018093F10052 +S1130A308EEF8093E800C6C081111CC0E8EEF0E0A0 +S1130A40808180FFFDCF8981823859F48D81E9EE60 +S1130A50F0E080838091EB0085FB882780F9108289 +S1130A6001C080E0E1EFF0E0808310828EEF80939C +S1130A70E800A8C08B30C1F48981803211F0811163 +S1130A8055C08D819E818230910550F480930E0172 +S1130A908EEF8093E80080910E010E94D40192C0F1 +S1130AA081E28093EB008EC08A3081F489818038A2 +S1130AB0E9F5E8EEF0E0808180FFFDCF80910E0142 +S1130AC08093F1008EEF8093E8007CC0813011F0B8 +S1130AD0833061F58981823049F58B819C81892B32 +S1130AE029F58D819E818F779927382F31503430A5 +S1130AF0E8F43EEF3093E8008093E9002A81233044 +S1130B0021F481E28093EB005DC099E19093EB00C6 +S1130B1021E030E0F90102C0EE0FFF1F8A95E2F7F1 +S1130B20CF01EAEEF0E0808310824CC0CE01019642 +S1130B300E946001811146C081E28093EB0042C0B3 +S1130B4081E28093EB002FC0F22E408150E0022E10 +S1130B5002C0559547950A94E2F740FF1BC0DB019C +S1130B602C93D6018C9182FF13C08091F2008823CC +S1130B7041F06091F20070E0822F0E949101F092A6 +S1130B80E900E8EEF0E089EF80838FE780831AC004 +S1130B90D8019C932F5F3F4F25303105A9F681E2A0 +S1130BA08093EB000FC021E030E0E4EFF0E069EE69 +S1130BB070E00F2EF8EECF2ED12CF02D0BEE10E0BE +S1130BC091E2C2CF2A960FB6F894DEBF0FBECDBF16 +S1130BD0DF91CF91FF91EF91BF91AF919F918F9151 +S1130BE07F916F915F914F913F912F911F910F9141 +S1130BF0FF90EF90DF90CF90BF90AF909F908F9039 +S1130C007F906F905F904F903F900F900FBE0F902A +S1130C101F9018955527002480FF02C0060E571F09 +S1130C20660F771F6115710521F0969587950097DA +S1130C3099F7952F802D08950F931F93CF93DF93EA +S1130C408230910510F482E090E0E0914201F0914D +S1130C50430120E030E0C0E0D0E023C04081518176 +S1130C6048175907A8F04817590761F482819381FE +S1130C70209719F09B838A832EC09093430180931D +S1130C80420129C02115310529F04217530710F0FC +S1130C90A90102C0BE01DF0102811381EF019A01A3 +S1130CA0F8013097D9F62115310509F1281B390BC4 +S1130CB02430310590F412968D919C91139761150F +S1130CC0710521F0FB019383828304C09093430157 +S1130CD080934201FD01329644C0FD01E20FF31FEF +S1130CE081939193225031092D933C933AC02091E2 +S1130CF0400130914101232B41F4209111013091A5 +S1130D001201309341012093400120910F01309151 +S1130D1010012115310541F42DB73EB7409113015F +S1130D2050911401241B350BE0914001F0914101D5 +S1130D30E217F307A0F42E1B3F0B2817390778F0AE +S1130D40AC014E5F5F4F2417350748F04E0F5F1F0D +S1130D5050934101409340018193919302C0E0E09C +S1130D60F0E0CF01DF91CF911F910F910895EF92A1 +S1130D70FF920F931F93CF93DF93009709F48FC0D3 +S1130D80DC01129713961C921E921297E090420176 +S1130D90F0904301E114F10489F42D913C911197F1 +S1130DA0280F391F809140019091410182179307C8 +S1130DB089F5B0934101A093400171C0E70120E09F +S1130DC030E001C0EA01CA17DB0738F44A815B81CD +S1130DD09E0141155105B1F722C0BC016250710951 +S1130DE0FB01D383C28300811181AC01400F511FE9 +S1130DF04C175D0761F448815981400F511F4E5FC4 +S1130E005F4F518340834A815B8153834283211521 +S1130E10310529F4B0934301A093420140C0F90184 +S1130E20B383A283E90169917991C60FD71FAC17E7 +S1130E30BD0779F4DC015E914E91460F571F4E5F5A +S1130E405F4F5183408312968D919C9113979383A6 +S1130E508283A0E0B0E002C0D7017C01F701828167 +S1130E6093810097C9F7C701029620813181820FCF +S1130E70931F20914001309141012817390779F4DB +S1130E80109729F4109243011092420104C0139662 +S1130E901C921E921297F0924101E0924001CDB74C +S1130EA0DEB7E6E00C946A07DC016C9161566A31A6 +S1130EB008F0605E6F5B6D93C1F708952A883988E6 +S1130EC048885F846E847D848C849B84AA84B984DE +S1130ED0C884DF80EE80FD800C811B81AA81B981EA +S1130EE0CE0FD11D0FB6F894DEBF0FBECDBFED01FE +S1090EF00895F894FFCF01 +S1130EF600000002000000003C0100000000FF00AA +S1130F06004A01200056657273696F6E20312E30D7 +S1130F160000000000802002812002FF2002FF2042 +S1110F2602FF2002FF2002FF2002FF20020033 +S9030000FC diff --git a/Mainboard/Mainboard/Debug/Makefile b/Mainboard/Mainboard/Debug/Makefile new file mode 100644 index 0000000..853cef5 --- /dev/null +++ b/Mainboard/Mainboard/Debug/Makefile @@ -0,0 +1,154 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +SHELL := cmd.exe +RM := rm -rf + +USER_OBJS := + +LIBS := +PROJ := + +O_SRCS := +C_SRCS := +S_SRCS := +S_UPPER_SRCS := +OBJ_SRCS := +ASM_SRCS := +PREPROCESSING_SRCS := +OBJS := +OBJS_AS_ARGS := +C_DEPS := +C_DEPS_AS_ARGS := +EXECUTABLES := +OUTPUT_FILE_PATH := +OUTPUT_FILE_PATH_AS_ARGS := +AVR_APP_PATH :=$$$AVR_APP_PATH$$$ +QUOTE := " +ADDITIONAL_DEPENDENCIES:= +OUTPUT_FILE_DEP:= +LIB_DEP:= + +# Every subdirectory with source files must be described here +SUBDIRS := + + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../led.c \ +../Mainboard.c \ +../rs232.c \ +../usb.c \ +../usb_user.c + + +PREPROCESSING_SRCS += + + +ASM_SRCS += + + +OBJS += \ +led.o \ +Mainboard.o \ +rs232.o \ +usb.o \ +usb_user.o + + +OBJS_AS_ARGS += \ +led.o \ +Mainboard.o \ +rs232.o \ +usb.o \ +usb_user.o + + +C_DEPS += \ +led.d \ +Mainboard.d \ +rs232.d \ +usb.d \ +usb_user.d + + +C_DEPS_AS_ARGS += \ +led.d \ +Mainboard.d \ +rs232.d \ +usb.d \ +usb_user.d + + +OUTPUT_FILE_PATH +=Mainboard.elf + +OUTPUT_FILE_PATH_AS_ARGS +=Mainboard.elf + +ADDITIONAL_DEPENDENCIES:= + +OUTPUT_FILE_DEP:= ./makedep.mk + +LIB_DEP+= + +# AVR32/GNU C Compiler + + + + + + + + + + + +./%.o: .././%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega32u2 -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o"$@" "$<" + @echo Finished building: $< + + + +# AVR32/GNU Preprocessing Assembler + + + +# AVR32/GNU Assembler + + + + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +endif + +# Add inputs and outputs from these tool invocations to the build variables + +# All Target +all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES) + +$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) + @echo Building target: $@ + @echo Invoking: AVR/GNU Linker : + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="Mainboard.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atmega32u2 + @echo Finished building target: $@ + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "Mainboard.elf" "Mainboard.hex" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "Mainboard.elf" "Mainboard.eep" || exit 0 + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "Mainboard.elf" > "Mainboard.lss" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature "Mainboard.elf" "Mainboard.srec" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-size.exe" "Mainboard.elf" + + + + + + +# Other Targets +clean: + -$(RM) $(OBJS_AS_ARGS)$(C_DEPS_AS_ARGS) $(EXECUTABLES) + rm -rf "Mainboard.elf" "Mainboard.a" "Mainboard.hex" "Mainboard.lss" "Mainboard.eep" "Mainboard.map" "Mainboard.srec" + \ No newline at end of file diff --git a/Mainboard/Mainboard/Debug/led.d b/Mainboard/Mainboard/Debug/led.d new file mode 100644 index 0000000..babda42 --- /dev/null +++ b/Mainboard/Mainboard/Debug/led.d @@ -0,0 +1,34 @@ +led.d led.o: .././led.c \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h: diff --git a/Mainboard/Mainboard/Debug/makedep.mk b/Mainboard/Mainboard/Debug/makedep.mk new file mode 100644 index 0000000..0492e81 --- /dev/null +++ b/Mainboard/Mainboard/Debug/makedep.mk @@ -0,0 +1,14 @@ +################################################################################ +# Automatically-generated file. Do not edit or delete the file +################################################################################ + +led.c + +Mainboard.c + +rs232.c + +usb.c + +usb_user.c + diff --git a/Mainboard/Mainboard/Debug/rs232.d b/Mainboard/Mainboard/Debug/rs232.d new file mode 100644 index 0000000..7022309 --- /dev/null +++ b/Mainboard/Mainboard/Debug/rs232.d @@ -0,0 +1,63 @@ +rs232.d rs232.o: .././rs232.c .././config.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/interrupt.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdarg.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h \ + .././rs232.h + +.././config.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/interrupt.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdarg.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h: + +.././rs232.h: diff --git a/Mainboard/Mainboard/Debug/usb.d b/Mainboard/Mainboard/Debug/usb.d new file mode 100644 index 0000000..630deaa --- /dev/null +++ b/Mainboard/Mainboard/Debug/usb.d @@ -0,0 +1,65 @@ +usb.d usb.o: .././usb.c .././config.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/interrupt.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/string.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h \ + .././usb_user_config.h .././usb_user.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/pgmspace.h + +.././config.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/interrupt.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/string.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h: + +.././usb_user_config.h: + +.././usb_user.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/pgmspace.h: diff --git a/Mainboard/Mainboard/Debug/usb_user.d b/Mainboard/Mainboard/Debug/usb_user.d new file mode 100644 index 0000000..f69773f --- /dev/null +++ b/Mainboard/Mainboard/Debug/usb_user.d @@ -0,0 +1,67 @@ +usb_user.d usb_user.o: .././usb_user.c \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdlib.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdbool.h \ + .././usb_user_config.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h \ + .././config.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/interrupt.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h \ + .././usb_user.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/pgmspace.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdlib.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdbool.h: + +.././usb_user_config.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h: + +.././config.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/interrupt.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h: + +.././usb_user.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/pgmspace.h: diff --git a/Mainboard/Mainboard/Mainboard.c b/Mainboard/Mainboard/Mainboard.c new file mode 100644 index 0000000..2d7721c --- /dev/null +++ b/Mainboard/Mainboard/Mainboard.c @@ -0,0 +1,65 @@ +/* + * Mainboard.c + * + * Created: 06.10.2013 19:12:35 + * Author: netz + */ + +#include "config.h" +//#include +#include "led.h" +#include "rs232.h" +#include "usb.h" + +void init() +{ + led(YELLOW); + sei(); + init_led(); + init_rs232(); + init_usb(); +} + +void fade(int from, int to, int dur) { + for (int i=0;i<0xFF;i++) + { + for(int k=0;k + + + 2.0 + 6.1 + com.Atmel.AVRGCC8.C + {839c4697-ab18-4132-8e80-f57ddb26adeb} + ATmega32U2 + none + Executable + C + $(MSBuildProjectName) + .elf + $(MSBuildProjectDirectory)\$(Configuration) + Mainboard + Mainboard + Mainboard + Native + true + false + + + 0 + true + 0x20000000 + true + + 0 + + + + + + + + + + + + ISP + com.atmel.avrdbg.tool.ispmk2 + + com.atmel.avrdbg.tool.ispmk2 + AVRISP mkII + 0000000000000 + + 127.0.0.1 + 63239 + False + + + ISP + + 249000 + 1000000 + 150000 + false + false + 0 + 0 + 0 + 0 + + + + + + + + True + True + True + True + True + True + + + NDEBUG + + + Optimize for size (-Os) + True + True + True + + + libm + + + + + + + + + True + True + True + True + True + True + + + DEBUG + + + Optimize (-O1) + True + True + Default (-g2) + True + + + libm + + + Default (-Wa,-g) + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + \ No newline at end of file diff --git a/Mainboard/Mainboard/UserDevice.hex b/Mainboard/Mainboard/UserDevice.hex new file mode 100644 index 0000000..676fded --- /dev/null +++ b/Mainboard/Mainboard/UserDevice.hex @@ -0,0 +1,184 @@ +:100000000C9486000C94A3000C94A3000C94A30001 +:100010000C94A3000C94A3000C94A3000C94A300D4 +:100020000C94A3000C94A3000C94DC010C94FD012F +:100030000C94A3000C94A3000C94A3000C94A300B4 +:100040000C94A3000C94A3000C94A3000C94A300A4 +:100050000C94A3000C94A3000C94A3000C94A30094 +:100060000C94A3000C94A3000C94A3000C94A30084 +:100070000C94A3000C94A3000C94A3000C94A30074 +:100080000C94A3000C94A3000C94A3000C94A30064 +:100090000C94A3000C94A3000C94A3000C94A30054 +:1000A0000C94A3000C94A3000C94A3001201000272 +:1000B000FF00001001000100000101020301040320 +:1000C0000904240352006500750073006300680092 +:1000D000200045006C0065006B00740072006F002A +:1000E0006E0069006B00000022035500730065007C +:1000F000720020004400650076006900630065001E +:100100002000440065006D006F00000011241FBE38 +:10011000CFEFDAE0DEBFCDBF11E0A0E0B1E0E0E478 +:10012000FBE002C005900D92A832B107D9F711E0AB +:10013000A8E2B1E001C01D92AD32B107E1F70E9423 +:10014000DC030C949E050C94000081E08093D700A2 +:1001500080EA8093D80082E189BD09B400FEFDCF1A +:1001600080E98093D8001092E0001092280188E086 +:100170008093E2000895E0E0F1E091E051E044E096 +:1001800020812F3F09F19093E9005093EB002093D9 +:10019000EC008181803811F480E40BC0803411F4CC +:1001A00080E307C0803229F0803111F080E001C087 +:1001B00080E13281382B3093ED0020FF03C0109294 +:1001C000F00002C04093F0009F5F33969730C1F675 +:1001D0008EE78093EA001092EA0008958091D9009A +:1001E00080FD02C080E008958091E30087FD02C099 +:1001F00081E0089580912801882311F083E008951B +:1002000082E008958091280108958091E80085702A +:10021000E1F30895E42FF0E02E173F0708F4422F92 +:10022000262F372F7EEF9091E8009570E1F3942F01 +:10023000413108F090E1F901592F09C0882311F0EC +:10024000608101C064916093F10051503196552353 +:10025000A9F7290F311D491B7093E800442319F7B2 +:10026000903109F308958093E90021E030E002C065 +:10027000220F331F8A95E2F7EAEEF0E02083108226 +:1002800008958093E9009091F3008091F200392F56 +:1002900020E0280F311DC90108958093E900909155 +:1002A000F300E091F200392F20E0D901AE0FB11D2B +:1002B000FD01242F352FE217F30708F49F012115C4 +:1002C000310519F140E050E09091F100FB01E40F9D +:1002D000F51F90834F5F5F4F42175307A8F360915C +:1002E000F3009091F200562F40E0490F511D411547 +:1002F000510559F441E050E002C0440F551F8A9562 +:10030000E2F74093EA001092EA00C90108956623DB +:1003100009F11092E9002091E80020FFFCCF5091F4 +:10032000F3004091F200352F20E0240F311D2115FC +:10033000310581F4FC0180E004C091919093F100BB +:100340008F5F8617D0F38091E8008E7F8093E8005E +:1003500081E0089580E008954115510559F1809399 +:10036000E9008091E80080FFFCCF3091F3002091FC +:10037000F200932F80E0820F911D0097D9F480E066 +:1003800090E00BC02091E80025FF06C0FB01E80FBC +:10039000F91F20812093F10001968417950790F3AF +:1003A0008091E8008E7F8093E8008FE78093E800DB +:1003B00081E0089580E008951F920F920FB60F928A +:1003C00011248F938091E1001092E10083FF0FC010 +:1003D0001092E90081E08093EB001092EC0082E142 +:1003E0008093ED0088E08093F000109228018F91B7 +:1003F0000F900FBE0F901F9018951F920F920FB67F +:100400000F921124DF92EF92FF920F931F932F937D +:100410003F934F935F936F937F938F939F93AF938C +:10042000BF93EF93FF93DF93CF93CDB7DEB72997B9 +:10043000DEBFCDBF8091F40080FF66C11092E9005D +:100440008091E80083FF5DC15091F1005983409194 +:10045000F1004A838091F1009091F100392F20E062 +:1004600090E0822B932B9C838B836091F1007091A1 +:10047000F100372F20E070E0622B732B7E836D83B9 +:100480002091F1003091F100F32FE0E030E02E2BCD +:100490003F2B38872F83E2EFE093E800463009F0E6 +:1004A000BAC043E08030940709F4A3C063E0813010 +:1004B000960750F471E08030970789F0A2E0803011 +:1004C0009A0709F05BC110C0B3E081309B0709F4C3 +:1004D00098C0E3E082309E0709F050C197C06CEAF3 +:1004E00070E0FB01449189C030E0E32E31E0F32E4F +:1004F000F701DD2480E090819F3F09F081E0D80E74 +:10050000339621E0E231F207A9F747E0D49E402D6F +:1005100011244E5E842F90E049870E9440048C0194 +:1005200089E0D8018C9392E011969C9311974985AC +:1005300012964C93129713961C92139791E014966F +:100540009C93149715969C93159716961C92169744 +:1005500090E817969C93179799E118969C93189793 +:10056000F801399619968C93199784E08183128249 +:100570001382D4828FEF8583168287831086DD20D5 +:1005800071F1F801729691E057E035E0D7018C9156 +:100590008F3FF1F050833183282F2795222727950D +:1005A000292B2283813441F0803431F0813831F0BD +:1005B000803821F083E003C081E001C082E08383C2 +:1005C000D70111968C9111978483158216823796E4 +:1005D0009F5F63E070E0E60EF71E9730B9F62F815B +:1005E000388581E0B8010E940A01C8010E94E20436 +:1005F000C8C06EEB70E0FB01449180E00E940A01EC +:10060000C0C062EC70E0FB014491F7CF68EE70E08F +:10061000FB014491F2CF453059F42EEF2093E800CE +:100620002091E80020FFFCCF80688093E300A9C000 +:10063000493081F4552309F05CC08130910509F0FF +:100640009DC081E0809328018EEF8093E8000E9496 +:10065000BB0097C0483061F4503809F04AC080911F +:10066000E80080FFFCCF809128018093F1001BC03F +:100670004423D9F48091E80080FFFCCF523811F078 +:1006800080E00DC06093E9008091EB0090E025E0F0 +:10069000969587952A95E1F781701092E9008093ED +:1006A000F1001092F1008EEF61C0413011F0433043 +:1006B00001F55230F1F40097E1F46F77862F815005 +:1006C0008630B8F48EEF8093E8006093E900433001 +:1006D00009F454C089E18093EB0081E090E002C00E +:1006E000880F991F6A95E2F78093EA001092EA005A +:1006F00048C0CE0101960E940D04882309F041C034 +:100700003DC081E28093EB0080E090E041E2082F61 +:100710000F5F2091F400019630E0082E02C035955D +:1007200027950A94E2F720FF26C00093E900209164 +:10073000E80022FF1EC03091F3002091F200932FB9 +:1007400080E0820F911D009769F09091F3008091F5 +:10075000F200792F60E0680F711D802F0E94E00386 +:100760000093E90089EF8093E8008FE78093E80029 +:1007700008C04093EB008630910549F681E28093F2 +:10078000EB002996DEBFCDBFCF91DF91FF91EF91B6 +:10079000BF91AF919F918F917F916F915F914F9199 +:1007A0003F912F911F910F91FF90EF90DF900F904D +:1007B0000FBE0F901F9018950E94A5007894FFCF50 +:1007C0000F931F93DF93CF93CDB7DEB7A0970FB6EC +:1007D000F894DEBF0FBECDBF8130A1F48E010F5F54 +:1007E0001F4FB80140E250E00E944D01882351F0B4 +:1007F00018A2C8010E94790582E8B80140E250E0E1 +:100800000E94AC01A0960FB6F894DEBF0FBECDBF1C +:10081000CF91DF911F910F910895DF93CF93CDB7C3 +:10082000DEB760970FB6F894DEBF0FBECDBFAC0148 +:100830009E012F5F3F4FA2E1B1E09CE00D90F901D6 +:1008400001929F019150D1F71D861E861F86188A3E +:10085000FA018081833C51F48181813039F4CE01E9 +:10086000019660E10E94870181E001C080E060960E +:100870000FB6F894DEBF0FBECDBFCF91DF910895C4 +:10088000EF92FF920F931F93CF93DF9382309105E6 +:1008900010F482E090E0C0912B01D0912C0120E077 +:1008A00030E040E050E029C068817981681779071D +:1008B000D8F06817790779F48A819B812115310571 +:1008C00021F0F9019383828304C090932C018093DB +:1008D0002B01DE012AC04115510519F06417750777 +:1008E00018F4FE01AB01D9019E017A816B81E72EDC +:1008F000E7017E01062FF62EE7012097A9F64115A4 +:100900005105F9F0481B590B4430510580F48281A0 +:100910009381109729F013969C938E93129704C09D +:1009200090932C0180932B01DF01129645C0DF01CB +:10093000A40FB51F8D939D93425050405183408327 +:100940003BC02091290130912A012115310541F444 +:10095000209124013091250130932A01209329010F +:1009600020912601309127012115310541F42DB741 +:100970003EB74091220150912301241B350BA091D9 +:100980002901B0912A01A217B307A0F42A1B3B0B3F +:100990002817390778F0AC014E5F5F4F24173507F1 +:1009A00048F04A0F5B1F50932A01409329018D9311 +:1009B0009D9302C0A0E0B0E0CD01CDB7DEB7E6E088 +:1009C0000C948F05CF93DF93009709F48FC0FC013F +:1009D00032971382128260912B0170912C01611564 +:1009E000710581F420813181280F391F80912901FF +:1009F00090912A018217930761F5F0932A01E09301 +:100A0000290174C0EB0180E090E0CE17DF0740F4CD +:100A10002A813B81CE012115310501F1E901F5CF94 +:100A2000D383C283DF014D915D919D01240F351F5A +:100A3000C217D30761F428813981240F351F2E5F37 +:100A40003F4F318320832A813B8133832283009768 +:100A500029F4F0932C01E0932B0148C0DC0113969C +:100A6000FC93EE931297EC0149915991C40FD51F55 +:100A7000EC17FD0779F420813181240F351F2E5F9B +:100A80003F4F11963C932E932281338113963C93D2 +:100A90002E931297E0E0F0E0DB0112968D919C918D +:100AA0001397009721F0E62FF72FBC01F5CF9B019C +:100AB0002E5F3F4FDB018D919C911197820F931F09 +:100AC0004091290150912A014817590779F430972C +:100AD00029F410922C0110922B0102C01382128271 +:100AE0002250304030932A0120932901DF91CF9189 +:100AF0000895DC016C9161566A3108F0605E6F5BAD +:100B00006D93C1F708952A88398848885F846E8478 +:100B10007D848C849B84AA84B984C884DF80EE8021 +:100B2000FD800C811B81AA81B981CE0FD11D0FB62A +:100B3000F894DEBF0FBECDBFED010895F894FFCF4E +:100B4000802002812002FF2002FF2002FF2002FFFE +:100B5000200256657273696F6E20312E30000000DE +:080B6000000020002D0100003F +:00000001FF diff --git a/Mainboard/Mainboard/config.h b/Mainboard/Mainboard/config.h new file mode 100644 index 0000000..6b70626 --- /dev/null +++ b/Mainboard/Mainboard/config.h @@ -0,0 +1,21 @@ +/* + * config.h + * + * Created: 06.10.2013 17:05:43 + * Author: netz + */ + + +#ifndef CONFIG_H_ +#define CONFIG_H_ + + +#define F_CPU 16000000 +#define BAUD_RATE 9600 + +#include +#include +#include + + +#endif /* CONFIG_H_ */ \ No newline at end of file diff --git a/Mainboard/Mainboard/led.c b/Mainboard/Mainboard/led.c new file mode 100644 index 0000000..ba948a6 --- /dev/null +++ b/Mainboard/Mainboard/led.c @@ -0,0 +1,23 @@ +/* + * led.c + * + * Created: 06.10.2013 16:32:15 + * Author: netz + */ + +#include + +void led(int mask) { + int rgb = 0; + rgb |= (mask & (1<<0)) ? (1<<0) : (0<<0); + rgb |= (mask & (1<<1)) ? (1<<1) : (0<<1); + rgb |= (mask & (1<<2)) ? (1<<2) : (0<<2); + + PORTB &= ~((1< +#include +#include "rs232.h" + +int uart_putchar(char c, FILE *stream); +static FILE rs232 = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); + + +int uart_putchar(char c, FILE *stream) +{ + if (c == '\n') { + uart_putchar('\r', stream); //Warten solange bis Zeichen gesendet wurde + } + loop_until_bit_is_set(UCSR1A, UDRE1); //Ausgabe des Zeichens + UDR1 = c; + return (0); +} + +void init_rs232() +{ + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + +#ifndef RS232_H_ +#define RS232_H_ + +void init_rs232(); +void rs232_send(char * text); + +#endif /* RS232_H_ */ \ No newline at end of file diff --git a/Mainboard/Mainboard/usb.c b/Mainboard/Mainboard/usb.c new file mode 100644 index 0000000..b994ea3 --- /dev/null +++ b/Mainboard/Mainboard/usb.c @@ -0,0 +1,68 @@ +/* + * usb.c + * + * Created: 06.10.2013 21:42:35 + * Author: netz + */ + +#include "config.h" +#include +#include +#include "usb_user_config.h" // USB configuration +#include "usb_user.h" // USB functions + +#ifdef USERDEFCONTROLS // see usbconfig.h +//----------------------------------------------------------------------------- +// Handle user defined control requests +// "ucr" contains the data of the control request +// function has to return "true", if request is handled (otherwise "false") +bool usb_controlrequest(struct usb_control_request *ucr) { + #define USER_REQUESTTYPE 0xC3 // a user defined request type (means, no standard request) + #define USER_REQUESTVERSION 0x01 // a self defined request: get version info + bool Result; + const char VersionInfo[ENDPOINT0_SIZE] = {"Version 1.0"}; + + Result=false; + if (ucr->bmRequestType == USER_REQUESTTYPE) { + // handle the requests (only one defined in this example) + switch (ucr->bRequest) { + case USER_REQUESTVERSION: // request for version info) + usb_txdata_control((uint8_t *)VersionInfo,sizeof(VersionInfo)); + Result=true; + break; + } + } + return Result; // true means, request is handled +} +#endif + +//----------------------------------------------------------------------------- +// handle of endpoint interrupt for incoming data +// "datasize" contains the number of bytes in the USB FIFO buffer +void usb_ep(uint8_t endpoint, uint16_t datasize) { + #define RXENDPOINT 0x01 // endpoint, used for data transfer host->device (defined in "usb_user_config.h") + #define TXENDPOINT 0x81 // endpoint, used for data transfer device->host + #define BUFSIZE 32 // USB FIFO buffer size (see usb_user_config.h at "endpoints") + + char buf[BUFSIZE]; // buffer for received data from host and data to transmit to host + uint8_t n; + + if (endpoint == RXENDPOINT) { // data from host by our defined data receive endpoint + n=usb_rxdata(endpoint, (uint8_t *)buf, sizeof(buf)); // read data into buffer + if (n) { // data read into local buffer + buf[BUFSIZE-1]=0; // for security: terminate string + strupr(buf); // upper case string + // response to host with converted string + usb_txdata(TXENDPOINT, (uint8_t *)buf, sizeof(buf)); // transfer data to host + } + } +} + +void init_usb() { + usb_init(); +} + +void usb_send(char * text) { + #define TXENDPOINT 0x81 + usb_txdata(TXENDPOINT, (uint8_t *)text, sizeof(text)); +} \ No newline at end of file diff --git a/Mainboard/Mainboard/usb.h b/Mainboard/Mainboard/usb.h new file mode 100644 index 0000000..e4ba5b6 --- /dev/null +++ b/Mainboard/Mainboard/usb.h @@ -0,0 +1,17 @@ +/* + * usb.h + * + * Created: 06.10.2013 21:42:01 + * Author: netz + */ + + +#ifndef USB_H_ +#define USB_H_ + + +void init_usb(); +void usb_send(char * text); + + +#endif /* USB_H_ */ \ No newline at end of file diff --git a/Mainboard/Mainboard/usb_user.c b/Mainboard/Mainboard/usb_user.c new file mode 100644 index 0000000..5a2959f --- /dev/null +++ b/Mainboard/Mainboard/usb_user.c @@ -0,0 +1,683 @@ +/***************************************************************************** + +USB-Template: User defined USB device +V1.1.1 + +(c) 2010-2011 Reusch Elektronik, Dipl.-Ing. (FH) Rainer Reusch +Homepage: http://products.reworld.eu/index.htm + +Supported devices: +- AT90USB82, AT90USB162 +- ATMEGA8U2, ATMEGA16U2, ATMEGA32U2 +- ATMEGA8U4, ATMEGA16U4, ATMEGA32U4 +- AT90USB646, AT90USB647, AT90USB1286, AT90USB1287 + +Supported modules: +- U2DIL-AT90USB162 +- U2DIL-ATMEGA32U2 +- U4DIL-ATMEGA32U4 +- U6DIL-AT90USB1286 + +USB Function Implementation + +Created: 2010-01-07 +Changed: 2011-08-02 + +*****************************************************************************/ + +// Usually no changes are necessary in this file! + +#include +#include +#include "usb_user_config.h" +#include "usb_user.h" + +//----------------------------------------------------------------------------- +// Internal Variables +//----------------------------------------------------------------------------- + +// USB State +static volatile uint8_t usb_stat = USB_STATUS_DISCONNECTED; + +// USB configuration, selected by host (0=none) +// In this version only 0 or 1 is possible (support of only one configuration) +static volatile uint8_t usb_conf = 0; + +// USB interface, selected by host +// In this version the value 0 and optional more cfgs are possible (see usbconfig.h) +#if (NUMINTERFACES>1) +static volatile uint8_t usb_if = 0xFF; // 0xFF: no interface selected +#endif + +//----------------------------------------------------------------------------- +// Descriptors +//----------------------------------------------------------------------------- + +// configuration descriptor +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + uint16_t wTotalLength; + uint8_t bNumInterfaces; + uint8_t bConfigurationValue; + uint8_t iConfiguration; + uint8_t bmAttributes; + uint8_t bMaxPower; +} cfg_desc; + +// interface descriptor +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bInterfaceNumber; + uint8_t bAlternateSetting; + uint8_t bNumEndpoints; + uint8_t bInterfaceClass; + uint8_t bInterfaceSubClass; + uint8_t bInterfaceProtocol; + uint8_t iInterface; +} if_desc; + +// endpoint descriptor +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bEndpointAddress; + uint8_t bmAttributes; + uint16_t wMaxPacketSize; + uint8_t bInterval; +} ep_desc; + +//----------------------------------------------------------------------------- +// USB Initializing +//----------------------------------------------------------------------------- + +#if defined (__AVR_AT90USB1286__) || (__AVR_AT90USB1287__) +#define AT128X +#endif + +void usb_init(void) +{ + #ifdef MEGA4 + UHWCON = _BV(UVREGE); // enable PAD regulator + #endif + #ifdef MEGA6 + UHWCON = _BV(UIMOD)|_BV(UVREGE); // set device mode, enable PAD regulator + #endif + USBCON = _BV(USBE) | _BV(FRZCLK); // enable USB + #if (F_CPU==16000000) + // 16MHz + #ifdef MEGA2 + PLLCSR = _BV(PLLE) | _BV(PLLP0); // config PLL, 16 MHz xtal + #endif + #ifdef MEGA4 + PLLCSR = _BV(PINDIV) | _BV(PLLE); // config PLL, 16 MHz xtal + #endif + + #ifdef MEGA6 + #ifdef AT128X + PLLCSR = _BV(PLLP2) | _BV(PLLP0) | _BV(PLLE); // config PLL, 16 MHz xtal (AT90USB128x) + #else + PLLCSR = _BV(PLLP2) | _BV(PLLP1) | _BV(PLLE); // config PLL, 16 MHz xtal (AT90USB64x and ATMEGA32U6) + #endif + #endif + + #else + + // 8MHz + #ifdef MEGA6 + PLLCSR = _BV(PLLP1) | _BV(PLLP0) |_BV(PLLE); // config PLL, 8 MHz xtal + #else + PLLCSR = _BV(PLLE); // config PLL, 8 MHz xtal + #endif + + #endif + + while (!(PLLCSR & _BV(PLOCK))) ; // wait for PLL lock + #ifdef MEGA4_6 + USBCON = _BV(USBE)|_BV(OTGPADE); // start USB clock + #else + USBCON = _BV(USBE); // start USB clock + #endif + UDCON = 0; // enable attach resistor + usb_conf = 0; + #if (NUMINTERFACES>1) + usb_if = 0xFF; + #endif + #ifdef MEGA2 + // port for VBUS detection + VBUSDIR &= ~_BV(VBUSPIN); // port as input + #endif + UDIEN = _BV(EORSTE); // enable "end of reset" interrupt +} + +//----------------------------------------------------------------------------- +// Initializing Endpoints +//----------------------------------------------------------------------------- + +#if (NUMINTERFACES>1) +void usb_endpoints(uint8_t ifnumber) // with interface number +#else +void usb_endpoints(void) +#endif +{ + #if (NUMINTERFACES>1) + #define EPC EP_CONFIG[ifnumber][i] + #define IN_TRANSFER EP_CONFIG[ifnumber][i].ep_type & 0x01 + #else + #define EPC EP_CONFIG[i] + #define IN_TRANSFER EP_CONFIG[i].ep_type & 0x01 + #endif + uint8_t i; + + for (i=0; i1) +uint8_t usb_interface(void) +{ + return usb_if; +} +#endif + +//----------------------------------------------------------------------------- +// Internal used USB routines and macros +//----------------------------------------------------------------------------- + +#define USB_SEND_IN UEINTX = ~(1<maxsize) len=maxsize; + do { + usb_wait_in(); + if (i & _BV(RXOUTI)) return; // cancel + // send IN package + n = (len < ENDPOINT0_SIZE) ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) + UEDATX = isRAM ? *addr++ : pgm_read_byte(addr++); + len -= n; + USB_SEND_IN; + } while (len || n == ENDPOINT0_SIZE); +} + +//----------------------------------------------------------------------------- +// Free FIFO Buffer +//----------------------------------------------------------------------------- + +void usb_freebuffer(uint8_t endpoint) +{ + UENUM = endpoint; // select endpoint + UERST = _BV(endpoint); // endpoint FIFO reset + UERST = 0; +} + +//----------------------------------------------------------------------------- +// Data Check (Host to Device) +//----------------------------------------------------------------------------- + +#ifdef MEGA4_6 +uint16_t usb_rxavail(uint8_t endpoint) +#else +uint8_t usb_rxavail(uint8_t endpoint) +#endif +{ + UENUM = endpoint; // select endpoint + #ifdef MEGA4_6 + return ((uint16_t)(UEBCHX)<<8)+UEBCLX; + #else + return UEBCLX; + #endif +} + +//----------------------------------------------------------------------------- +// Data Receive (Host to Device) +//----------------------------------------------------------------------------- + +#ifdef MEGA4_6 +uint16_t usb_rxdata(uint8_t endpoint, uint8_t *buffer, uint16_t maxdatasize) +#else +uint8_t usb_rxdata(uint8_t endpoint, uint8_t *buffer, uint8_t maxdatasize) +#endif +{ + #ifdef MEGA4_6 + uint16_t r, i; + #else + uint8_t r, i; + #endif + + UENUM = endpoint; // select endpoint + #ifdef MEGA4_6 + r = ((uint16_t)(UEBCHX)<<8)+UEBCLX; + #else + r = UEBCLX; + #endif + if (r>maxdatasize) r = maxdatasize; + if (r) { // data available in input endpoint + for (i=0; i1) + usb_if = 0xFF; + #endif + } +} + +//----------------------------------------------------------------------------- +// Endpoint Interrupts +//----------------------------------------------------------------------------- +// Interrupts, triggered by incoming data in an endpoint, are handled here. + +ISR(USB_COM_vect) +{ + #if (NUMINTERFACES>1) + #define EPCO EP_CONFIG[j][i] + #else + #define EPCO EP_CONFIG[i] + #endif + + uint8_t intbits; + uint8_t i, j, n, s; + cfg_desc *cfg; + if_desc *ifp; + ep_desc *epp; + #if (USESN==2) // serial number in RAM + struct usb_string_descriptor_ram buf; + #endif + struct usb_control_request ucr; + + if (UEINT & 0x01) { + // handle interrupts of endpoint 0 (control transfers) + UENUM = 0; + intbits = UEINTX; // save interrupt flags of the endpoint + if (intbits & _BV(RXSTPI)) { // control transfer, setup + ucr.bmRequestType = UEDATX; + ucr.bRequest = UEDATX; + ucr.wValue = UEDATX; + ucr.wValue |= (UEDATX << 8); + ucr.wIndex = UEDATX; + ucr.wIndex |= (UEDATX << 8); + ucr.wLength = UEDATX; + ucr.wLength |= (UEDATX << 8); + UEINTX = ~(_BV(RXSTPI) | _BV(RXOUTI) | _BV(TXINI)); + if (ucr.bRequest == GET_DESCRIPTOR) { + switch (ucr.wValue) { + case 0x0100: // device descriptor + usb_desc_out(false,&device_descriptor[0],pgm_read_byte(&device_descriptor[0]),ucr.wLength); + break; + case 0x0200: // configuration descriptor + // get number of activated endpoints + n=0; + #if (NUMINTERFACES>1) + for (j=0; jbLength = sizeof(cfg_desc); + cfg->bDescriptorType = 2; + cfg->wTotalLength = s; + cfg->bNumInterfaces = NUMINTERFACES; + cfg->bConfigurationValue = 1; + cfg->iConfiguration = 0; + cfg->bmAttributes = POWERING; + cfg->bMaxPower = MAXPOWER>>1; + // initialize interface descriptor + ifp = (if_desc *)((uint16_t)(cfg)+sizeof(cfg_desc)); + #if (NUMINTERFACES>1) + for (j=0; jbLength = sizeof(if_desc); + ifp->bDescriptorType = 4; + ifp->bInterfaceNumber = j; + ifp->bAlternateSetting = 0; + ifp->bNumEndpoints = n; + ifp->bInterfaceClass = 0xFF; + ifp->bInterfaceSubClass = 0x00; + ifp->bInterfaceProtocol = 0xFF; + ifp->iInterface = 0; + epp = (ep_desc *)((uint16_t)(ifp)+sizeof(if_desc)); + if (n) { // endpoints + for (i=0; ibLength = sizeof(ep_desc); + epp->bDescriptorType = 5; + epp->bEndpointAddress = (i+1)|(EPCO.ep_type<<7); + epp->bmAttributes = EP_TRANSFER(EPCO.ep_type); + epp->wMaxPacketSize = EPCO.ep_size; + epp->bInterval = 0; + epp = (ep_desc *)((uint16_t)(epp)+sizeof(ep_desc)); + } + } + } + #if (NUMINTERFACES>1) + ifp = (if_desc *)epp; + } + #endif + // finally + usb_desc_out(true,(uint8_t *)cfg,s,ucr.wLength); + free(cfg); + break; + case 0x0300: // String 0 + usb_desc_out(false,(uint8_t *)&string0.bLength,pgm_read_byte(&string0.bLength),ucr.wLength); + break; + case 0x0301: // String 1 + usb_desc_out(false,(uint8_t *)&string1.bLength,pgm_read_byte(&string1.bLength),ucr.wLength); + break; + case 0x0302: // String 2 + usb_desc_out(false,(uint8_t *)&string2.bLength,pgm_read_byte(&string2.bLength),ucr.wLength); + break; + #if (USESN>0) + case 0x0303: // String 3, serial number + #if (USESN==1) // Seriennummer im Flash + usb_desc_out(false,(uint8_t *)&string3.bLength,pgm_read_byte(&string3.bLength),ucr.wLength); + #endif + #if (USESN==2) // serial number in the RAM + buf.bDescriptorType=3; // has to be 3 always + i = 0; + while (RAMSN[i]) { + buf.wString[i] = RAMSN[i]; + i++; + } + buf.bLength=2*i+2; // total length of the data set + usb_desc_out(true,(uint8_t *)&buf,buf.bLength,ucr.wLength); + #endif + break; + #endif + default: + STALL; // stall + } + return; + } + if (ucr.bRequest == SET_ADDRESS) { + USB_SEND_IN; + usb_wait_in_ready(); + UDADDR = ucr.wValue | _BV(ADDEN); + return; + } + if (ucr.bRequest == SET_CONFIGURATION && ucr.bmRequestType == 0) { // another configuration will be chosen + if (ucr.wValue==1) { // configuration 1 will be chosen + usb_conf = ucr.wValue; + USB_SEND_IN; + #if (NUMINTERFACES==1) + usb_endpoints(); // initialize endpoints + #else + usb_if = 0; // select interface 0 + usb_endpoints(usb_if); // initialize endpoints + #endif + } else { // other configurations are not supported in this version + STALL; // stall + } + return; + } + if (ucr.bRequest == GET_CONFIGURATION && ucr.bmRequestType == 0x80) { + usb_wait_in_ready(); + UEDATX = usb_conf; + USB_SEND_IN; + return; + } + if (ucr.bRequest == GET_STATUS) { + usb_wait_in_ready(); + i = 0; + #ifdef SUPPORT_ENDPOINT_HALT + if (ucr.bmRequestType == 0x82) { + UENUM = ucr.wIndex; + if (UECONX & _BV(STALLRQ)) i = 1; + UENUM = 0; + } + #endif + UEDATX = i; + UEDATX = 0; + USB_SEND_IN; + return; + } + #if (NUMINTERFACES>1) + if (ucr.bRequest == SET_INTERFACE && (ucr.bmRequestType == 0x20 || ucr.bmRequestType == 0)) { // another interface will be chosen + if (ucr.wIndex= 1 && i <= MAX_ENDPOINT) { + USB_SEND_IN; + UENUM = i; + if (ucr.bRequest == SET_FEATURE) { + UECONX = _BV(STALLRQ)|_BV(EPEN); + } else { + UECONX = _BV(STALLRQC)|_BV(RSTDT)|_BV(EPEN); + UERST = _BV(i); + UERST = 0; + } + return; + } + } + #endif + #ifdef USERDEFCONTROLS + // handle user defined control requests + if (!usb_controlrequest(&ucr)) + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + return; + #endif + } + UECONX = _BV(STALLRQ) | _BV(EPEN); // stall + } + + // handle interrupts for further endpoints + for (i=1; i<=MAX_ENDPOINT; i++) { + if (UEINT & _BV(i)) { + UENUM=i; // select endpoint + intbits = UEINTX; // save interrupt bits of the endpoint + if (intbits & _BV(RXOUTI)) { // interrupt occured by incoming data + #ifdef MEGA4_6 + if (((uint16_t)(UEBCHX)<<8)+UEBCLX) { // data available in input endpoint + usb_ep(i,((uint16_t)(UEBCHX)<<8)+UEBCLX); + #else + if (UEBCLX) { // data available in input endpoint + usb_ep(i,UEBCLX); + #endif + UENUM=i; // reselect endpoint (if changed by handling routine) + } + UEINTX = ~(_BV(RXOUTI)|_BV(STALLEDI)); // clear interrupt flags + UEINTX = 0x7F; // free bank (FIFOCON), has to be executed after RXOUTI! + return; + } + STALL; // stall + } + } + STALL; // stall +} diff --git a/Mainboard/Mainboard/usb_user.h b/Mainboard/Mainboard/usb_user.h new file mode 100644 index 0000000..f0ff408 --- /dev/null +++ b/Mainboard/Mainboard/usb_user.h @@ -0,0 +1,252 @@ +/***************************************************************************** + +USB-Template: User defined USB device +V1.1.0 + +(c) 2010-2011 Reusch Elektronik, Dipl.-Ing. (FH) Rainer Reusch +Homepage: http://products.reworld.eu/index.htm + +Supported devices: +- AT90USB82, AT90USB162 +- ATMEGA8U2, ATMEGA16U2, ATMEGA32U2 +- ATMEGA8U4, ATMEGA16U4, ATMEGA32U4 +- AT90USB646, AT90USB647, AT90USB1286, AT90USB1287 + +Supported modules: +- U2DIL-AT90USB162 +- U2DIL-ATMEGA32U2 +- U4DIL-ATMEGA32U4 +- U6DIL-AT90USB1286 + +USB Header File + +Created: 2010-01-07 +Changed: 2011-03-12 + +*****************************************************************************/ + +// Usually no changes are necessary in this file! + +#ifndef usb_h__ +#define usb_h__ + +#include +#include +#include +#include "usb_user_config.h" + +//----------------------------------------------------------------------------- +// USB Strings +//----------------------------------------------------------------------------- + +struct usb_string_descriptor { + uint8_t bLength; + uint8_t bDescriptorType; + int16_t wString[]; +}; + +static const struct usb_string_descriptor PROGMEM string0 = { + 4, + 3, + {0x0409} +}; + +static const struct usb_string_descriptor PROGMEM string1 = { + sizeof(STR_MANUFACTURER), + 3, + STR_MANUFACTURER +}; + +static const struct usb_string_descriptor PROGMEM string2 = { + sizeof(STR_PRODUCT), + 3, + STR_PRODUCT +}; + +#if (USESN==1) +static const struct usb_string_descriptor PROGMEM string3 = { + sizeof(STR_SERIAL_NUMBER), + 3, + STR_SERIAL_NUMBER +}; +#endif + +#if (USESN==2) +// Your USB serial numebr in RAM. Must be set into RAMSN before calling usb_init! +// Descriptor size, descriptor ID and conversion into widechars wil be done automatically. + +#define RAMSNLEN 16 // maximum length of the serial number + +struct usb_string_descriptor_ram { + uint8_t bLength; + uint8_t bDescriptorType; + int16_t wString[RAMSNLEN]; +}; + +char RAMSN[RAMSNLEN]; // save the S/N as string here (e.g. read from EEPROM) +#endif + +//----------------------------------------------------------------------------- +// Endpoints +//----------------------------------------------------------------------------- + +// buffer sizes of an endpoint +// Hint: For 64 byte and more only two endpoints must be activated! +#define EP_SIZE(s) ((s) == 512 ? 0x60 : \ + ((s) == 256 ? 0x50 : \ + ((s) == 128 ? 0x40 : \ + ((s) == 64 ? 0x30 : \ + ((s) == 32 ? 0x20 : \ + ((s) == 16 ? 0x10 : \ + 0x00)))))) + +// endpoint attributes +#define EP_TRANSFER(t) ((t) == EP_TYPE_ISOCHRONOUS_IN ? 1 : \ + ((t) == EP_TYPE_ISOCHRONOUS_OUT ? 1 : \ + ((t) == EP_TYPE_BULK_IN ? 2 : \ + ((t) == EP_TYPE_BULK_OUT ? 2 : \ + 3)))) + +//----------------------------------------------------------------------------- +// Device Descriptor +//----------------------------------------------------------------------------- + +#define LSB(n) (n & 255) +#define MSB(n) ((n >> 8) & 255) + +static const uint8_t PROGMEM device_descriptor[] = { + 18, // bLength + 1, // bDescriptorType + 0x00, 0x02, // bcdUSB + USBDEVICECLASS, // bDeviceClass + 0, // bDeviceSubClass + 0, // bDeviceProtocol + ENDPOINT0_SIZE, // bMaxPacketSize0 + LSB(VENDOR_ID), MSB(VENDOR_ID), // idVendor + LSB(PRODUCT_ID), MSB(PRODUCT_ID), // idProduct + 0x00, 0x01, // bcdDevice + 1, // iManufacturer + 2, // iProduct + 3, // iSerialNumber + 1 // bNumConfigurations +}; + +//----------------------------------------------------------------------------- +// Standard Commands for Control Transfers +//----------------------------------------------------------------------------- + +#define GET_STATUS 0 +#define CLEAR_FEATURE 1 +#define SET_FEATURE 3 +#define SET_ADDRESS 5 +#define GET_DESCRIPTOR 6 +#define GET_CONFIGURATION 8 +#define SET_CONFIGURATION 9 +#define GET_INTERFACE 10 +#define SET_INTERFACE 11 + +//============================================================================= +// USB Functions +//============================================================================= + +//----------------------------------------------------------------------------- +// USB Initializing +//----------------------------------------------------------------------------- +// Has to be called one time before any USB actions. +// Interrupts has to be enabled (call of sei macro) + +void usb_init(void); + +//----------------------------------------------------------------------------- +// USB State +//----------------------------------------------------------------------------- +// Request of the USB state. +// State is determined with function call. +// Hint: For AT90USB82/162 and ATMEGAxxU2 without VBUSDETECT option, state will +// not change, if USB connector will be unplugged! +// Possible return values: +#define USB_STATUS_DISCONNECTED 0 // not connected (for self powered devices) +#define USB_STATUS_CONNECTED 1 // connected (for AT90USB82/162 and ATMEGAxxU2 only with option VBUSDETECT) +#define USB_STATUS_ENUMERATED 2 // USB address assigned (USB connection established) +#define USB_STATUS_CONFIGURED 3 // a valid configuration were selected (USB device usable) + +uint8_t usb_status(void); + +//----------------------------------------------------------------------------- +// USB Configuration +//----------------------------------------------------------------------------- +// Returns the configuration number, set by the host +// If the value is 0, no configuration were selected by the host. No endpoint +// (except ep0 for control transfers) can be used in this case. + +uint8_t usb_configuration(void); + +//----------------------------------------------------------------------------- +// USB Interface +//----------------------------------------------------------------------------- +// Returns the number of the interface, selected by the host. + +uint8_t usb_interface(void); + +//----------------------------------------------------------------------------- +// Data Check (Host to Device) +//----------------------------------------------------------------------------- +// This function returns the number of data bytes, contained in the FIFO +// input buffer, for the specified endpoint. + +#ifdef MEGA4_6 +uint16_t usb_rxavail(uint8_t endpoint); +#else +uint8_t usb_rxavail(uint8_t endpoint); +#endif + +//----------------------------------------------------------------------------- +// Data Receive (Host to Device) +//----------------------------------------------------------------------------- +// "endpoint" has to specify an "OUT" endpoint (1..4 or 1..6)! +// Data will be stored into "buffer". +// Returns number of bytes, transfered into buffer +#ifdef MEGA4_6 +uint16_t usb_rxdata(uint8_t endpoint, uint8_t *buffer, uint16_t maxdatasize); +#else +uint8_t usb_rxdata(uint8_t endpoint, uint8_t *buffer, uint8_t maxdatasize); +#endif + +//----------------------------------------------------------------------------- +// Data Return (Device to Host), Control Transfer +//----------------------------------------------------------------------------- +// Data return for control transfers (endpoint 0) +// "datasize" not greater than size of FIFO buffer (no check!) +// Result is always "true", if no connection to host. +// When a connection is established, result is "false", if data block, +// stored before, is not read from the FIFO buffer. + +bool usb_txdata_control(uint8_t *buffer, uint8_t datasize); + +//----------------------------------------------------------------------------- +// Data Return (Device to Host) +//----------------------------------------------------------------------------- +// "endpoint" must specify a valid endpoint number (1..4 or 1..6)! +// "datasize" not greater than size of FIFO buffer (no check!) +// Result is always "true", if no connection to host. +// When a connection is established, result is "false", if data block, +// stored before, is not read from the FIFO buffer. + +#ifdef MEGA4_6 +bool usb_txdata(uint8_t endpoint, uint8_t *buffer, uint16_t datasize); +#else +bool usb_txdata(uint8_t endpoint, uint8_t *buffer, uint8_t datasize); +#endif + +//----------------------------------------------------------------------------- +// Free FIFO Buffer +//----------------------------------------------------------------------------- +// Free the FIFO buffer for one endpoint +// Data contained in the buffer will be lost. +// Endpoint usable for new data transfer. +// It is not necessary, to call this routine after read of buffer data with +// read routine. Routine can be used to clear buffer before writing new data. + +void usb_freebuffer(uint8_t endpoint); + +#endif diff --git a/Mainboard/Mainboard/usb_user_config.h b/Mainboard/Mainboard/usb_user_config.h new file mode 100644 index 0000000..e45d215 --- /dev/null +++ b/Mainboard/Mainboard/usb_user_config.h @@ -0,0 +1,244 @@ +/***************************************************************************** + +USB-Template: User defined USB device +V1.1.0 + +(c) 2010-2011 Reusch Elektronik, Dipl.-Ing. (FH) Rainer Reusch +Homepage: http://products.reworld.eu/index.htm + +Supported devices: +- AT90USB82, AT90USB162 +- ATMEGA8U2, ATMEGA16U2, ATMEGA32U2 +- ATMEGA8U4, ATMEGA16U4, ATMEGA32U4 +- AT90USB646, AT90USB647, AT90USB1286, AT90USB1287 + +Supported modules: +- U2DIL-AT90USB162 +- U2DIL-ATMEGA32U2 +- U4DIL-ATMEGA32U4 +- U6DIL-AT90USB1286 + +USB Configuration + +Created: 2010-01-07 +Changed: 2011-03-12 + +*****************************************************************************/ + +// in this file you will make changes for your purposes + +#ifndef usbconfig_h__ +#define usbconfig_h__ + +#if defined (__AVR_AT90USB82__) || (__AVR_AT90USB162__) || (__AVR_ATmega8U2__) || (__AVR_ATmega32U2__) +#define MEGA2 // AT90USB82/162, ATMEGAxxU2 +#endif +#if defined (__AVR_ATmega16U4__) || (__AVR_ATmega32U4__) +#define MEGA4 // ATMEGAxxU4 +#define MEGA4_6 +#endif +#if defined (__AVR_AT90USB646__) || (__AVR_AT90USB647__) || (__AVR_AT90USB1286__) || (__AVR_AT90USB1287__) +#define MEGA6 // AT90USB646, -647, -1286, -1287 +#define MEGA4_6 +#endif + +#include +#include +#include "config.h" + +#if (F_CPU==8000000) +#define FREQ_OK +#endif +#if (F_CPU==16000000) +#define FREQ_OK +#endif +#ifndef FREQ_OK +#error "Invalid clock frequency (only 8 or 16MHz)!" +#endif + +//----------------------------------------------------------------------------- +// General USB commitments +//----------------------------------------------------------------------------- + +// Vendor Name +// will be a part of the descriptor and can be requested by the host +#define STR_MANUFACTURER L"BlubbFish" + +// Product Name +// will be a part of the descriptor and can be requested by the host +#define STR_PRODUCT L"Hacker-Jeopardy" + +// USB Serial Number (optional) +// will be a part of the descriptor and can be requested by the host +#define USESN 0 // Options: 0= no S/N; 1= S/N inside the flash memory; 2= S/N inside RAM +#if (USESN==1) +#define STR_SERIAL_NUMBER L"000000" // your serial number, stored in flash memory +#endif + +// Vendor ID +// set your vendor ID here +#define VENDOR_ID 0xDEAD // !!! THIS ID IS NOT FOR OFFICIAL USE, FOR YOUR PERSONAL TESTING PURPOSES ONLY !!! + +// Product ID +// set your product ID here +#define PRODUCT_ID 0xBEEE // !!! THIS ID IS NOT FOR OFFICIAL USE, FOR YOUR PERSONAL TESTING PURPOSES ONLY !!! + +// USB device class +// possible settings: +#define USBDEVICECLASS_USER 0xFF // user defined class +// set the class for your purposes +#define USBDEVICECLASS USBDEVICECLASS_USER + +// power supply +#define SELFPOWERED 0x40 +#define BUSPOWERED 0x80 +#define POWERING SELFPOWERED | BUSPOWERED // Alternatives: SELFPOWERED or SELFPOWERED | BUSPOWERED + +// current consumption +// in mA (milliamperes), uses only even values between 2 and 500 +#define MAXPOWER 500 + +#ifdef MEGA2 +// The controllers AT90USB82/162 and ATMEGAxxU2 are not able, to detect a +// plugged USB connector (presence of VBUS voltage). As alternative an input +// port, which is connected with the 5V line of the USB connector, can be +// used. A pull down resistor at the input port is recommended. +// Uncomment the following line, if a port pin is used for this purpose. +//#define VBUSDETECT +#define VBUSDIR DDRC // Data Direction Register of the used port +#define VBUSPORT PINC // used port +#define VBUSPIN PC4 // used pin (PC4 as example) +#endif + +//----------------------------------------------------------------------------- +// Data Set for a USB Control Request +//----------------------------------------------------------------------------- + +// Nothing to change here! + +struct usb_control_request { + uint8_t bmRequestType; + uint8_t bRequest; + uint16_t wValue; + uint16_t wIndex; + uint16_t wLength; +}; + +//----------------------------------------------------------------------------- +// Endpoints +//----------------------------------------------------------------------------- + +// maximum number of endpoints (don't change!) +#ifdef MEGA4_6 +#define MAX_ENDPOINT 6 +#else +#define MAX_ENDPOINT 4 +#endif + +// Constants for endpoint configuration (don't change!) +#define EP_TYPE_DISABLED 0xFF // endpoint not used +#define EP_TYPE_CONTROL 0x00 +#define EP_TYPE_BULK_IN 0x81 +#define EP_TYPE_BULK_OUT 0x80 +#define EP_TYPE_INTERRUPT_IN 0xC1 +#define EP_TYPE_INTERRUPT_OUT 0xC0 +#define EP_TYPE_ISOCHRONOUS_IN 0x41 +#define EP_TYPE_ISOCHRONOUS_OUT 0x40 +#define EP_SINGLE_BUFFER 0x02 +#define EP_DOUBLE_BUFFER 0x06 + +// Endpoint 0 +// (for Control Transfers, must be defined always) +#define ENDPOINT0_SIZE 16 // control endpoint +// uncomment the following line to handle user defined control request +// of endpoint 0 in the main program +#define USERDEFCONTROLS // we will use self defined control transfers in this example +#ifdef USERDEFCONTROLS +// function prototype to handle user defined control requests. +// Function has to return "true", if request is handled. +// If result is "false", a "stall" will be returned to host. +bool usb_controlrequest(struct usb_control_request *ucr); +#endif + +typedef struct { + uint8_t ep_type; // transfer + uint8_t ep_size; // buffer size + uint8_t ep_buffer; // buffer configuration +} ep_config; + +// configuration of the endpoints +// EP_TYPE constant, buffer size (8, 16, 32 or 64 byte), single or double buffer + +// Hint: Use only two endpoints, if buffer size is 64 byte! + +// Additional hints, if more than one USB interfaces are defined: +// - after configuration change (only configuration 1 is possible), +// interface 0 will be selected +// - to chose another interface, the control request command SET_INTERFACE +// with the request type 0x20 has to be executed + +#define NUMINTERFACES 2 // number of supported interfaces (1...3) (Endpoint configurations) + +#if (NUMINTERFACES>1) +static const ep_config EP_CONFIG[NUMINTERFACES][MAX_ENDPOINT] = {{ +#else +static const ep_config EP_CONFIG[MAX_ENDPOINT] = { +#endif + // modify the following lines for your purposes + {EP_TYPE_BULK_OUT, 32, EP_SINGLE_BUFFER}, // one OUT and one IN endpoint with bulk transfer in this example + {EP_TYPE_BULK_IN, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER} + #ifdef MEGA4_6 // the following endpoints are only available on ATMEGAxxU4 and AT90USB64x/128x controllers + , + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER} + #endif + #if (NUMINTERFACES>1) + },{ + // modify the following lines for your purposes + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER} + #ifdef MEGA4_6 // the following endpoints are only available on ATMEGAxxU4 and AT90USB64x/128x controllers + , + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER} + #endif + } + // more interfaces... + #if (NUMINTERFACES==3) + ,{ + // modify the following lines for your purposes + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER} + #ifdef MEGA4_6 // the following endpoints are only available on ATMEGAxxU4 and AT90USB64x/128x controllers + , + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER}, + {EP_TYPE_DISABLED, 32, EP_SINGLE_BUFFER} + #endif + } + #endif + #endif +}; + +//----------------------------------------------------------------------------- +// Endpoint Interrupt +//----------------------------------------------------------------------------- +// Function prototype to handle endpoint interrupts for incoming data +// The routine will be a part of the main program + +void usb_ep(uint8_t endpoint, uint16_t datasize); + +//----------------------------------------------------------------------------- +// Functional Purposes +//----------------------------------------------------------------------------- + +// "Endpoint Halt" option +// Comment the following to save code memory. But USB conformity is lost. +#define SUPPORT_ENDPOINT_HALT + +#endif diff --git a/Mainboard/Windows/UnitMain.cpp b/Mainboard/Windows/UnitMain.cpp new file mode 100644 index 0000000..73574b4 --- /dev/null +++ b/Mainboard/Windows/UnitMain.cpp @@ -0,0 +1,167 @@ +/***************************************************************************** + +USB-Example: User defined USB device +V1.0.0 + +(c) 2011 Reusch Elektronik, Dipl.-Ing. (FH) Rainer Reusch +Homepage: http://products.reworld.eu/index.htm + +Main Form + +Borland C++Builder 6 + +Created: 2011-05-30 +Changed: 2011-05-30 + +*****************************************************************************/ + +/* +This example uses the "LibUSB-Win32" library and driver collection, to communicate +with the USB device. +The example shows, how to use control transfers for the own usage. +It defines two additional endpoints for bulk transfer (write and read) of data. +*/ + +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "UnitMain.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TFormMain *FormMain; +//--------------------------------------------------------------------------- + +__fastcall TFormMain::TFormMain(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- + +usb_dev_handle * TFormMain::open_dev(void) +// open USB device with defined VID and PID +{ + struct usb_bus *bus; + struct usb_device *dev; + + for (bus = usb_get_busses(); bus; bus = bus->next) { + for (dev = bus->devices; dev; dev = dev->next) { + if ((dev->descriptor.idVendor==MY_VID)&&(dev->descriptor.idProduct==MY_PID)) { + return usb_open(dev); + } + } + } + return NULL; +} +//--------------------------------------------------------------------------- + +void __fastcall TFormMain::FormCreate(TObject *Sender) +{ + // USB initializations + dev=0; + usb_init(); // initialize the library + usb_find_busses(); // find all busses + usb_find_devices(); // find all connected devices +} +//--------------------------------------------------------------------------- + +void __fastcall TFormMain::FormCloseQuery(TObject *Sender, bool &CanClose) +{ + ButtonCloseClick(Sender); + CanClose=true; +} +//--------------------------------------------------------------------------- + +void __fastcall TFormMain::FormDestroy(TObject *Sender) +{ + // +} +//--------------------------------------------------------------------------- + +void __fastcall TFormMain::ButtonOpenClick(TObject *Sender) +// open USB device +{ + dev=open_dev(); + if (dev) { + usb_set_configuration(dev, 1); // select 1st USB configuration + StatusBar1->SimpleText="USB device opened"; + } else + StatusBar1->SimpleText="opening failed"; +} +//--------------------------------------------------------------------------- + +void __fastcall TFormMain::ButtonVersionClick(TObject *Sender) +// user defined control transfer +{ + #define CONTROLBUFSIZE 16 // USB buffer size for control transfers + #define USER_REQUESTTYPE 0xC3 // a user defined request type with response (means, no standard request) + #define USER_REQUESTVERSION 0x01 // a self defined request: get version info + int r; + char buf[CONTROLBUFSIZE]; + AnsiString s; + + if (dev) { + r=usb_control_msg(dev,USER_REQUESTTYPE,USER_REQUESTVERSION,0,1,(char *)(&buf),sizeof(buf),100); + if (r>0) { + s.SetLength(strlen(buf)); + strcpy(s.c_str(),buf); + LabelVersion->Caption=s; + StatusBar1->SimpleText="version info received"; + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TFormMain::ButtonTransferClick(TObject *Sender) +// transfer data to device and receive response +// (bulk transfer via user defined endpoints) +{ + #define BUFSIZE 32 // USB buffer size (= max. data size for one data block) + #define EP_TODEVICE 0x01 // endpoint for data to device (OUT) + #define EP_FROMDEVICE 0x82 // endpoint for data from device (IN) + char buf[BUFSIZE]; + int r; + AnsiString s; + + if (dev) { + strcpy(buf,LabeledEdit1->Text.c_str()); + usb_claim_interface(dev, 0); // select interface 0 + r=usb_bulk_write(dev,EP_TODEVICE,buf,sizeof(buf),100); // output data + if (r>0) { // data was transmitted successfully, now wait for response + Sleep(100); + r=usb_bulk_read(dev,EP_FROMDEVICE,(char *)&buf,sizeof(buf),100); + if (r>0) { // data received from device + s.SetLength(strlen(buf)); + strcpy(s.c_str(),buf); + LabelData->Caption=s; + StatusBar1->SimpleText="data sent and received"; + } else { // error + LabelData->Caption="(no response)"; + StatusBar1->SimpleText="no response from device"; + } + } + usb_release_interface(dev, 0); // close pipe + } +} +//--------------------------------------------------------------------------- + +void __fastcall TFormMain::ButtonCloseClick(TObject *Sender) +// close USB device +{ + if (dev) { + usb_close(dev); + dev=NULL; + StatusBar1->SimpleText="USB device closed"; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TFormMain::ButtonExitClick(TObject *Sender) +// exit program +{ + Close(); +} +//--------------------------------------------------------------------------- + diff --git a/Mainboard/Windows/UnitMain.dfm b/Mainboard/Windows/UnitMain.dfm new file mode 100644 index 0000000..b622deb --- /dev/null +++ b/Mainboard/Windows/UnitMain.dfm @@ -0,0 +1,121 @@ +object FormMain: TFormMain + Left = 1154 + Top = 299 + BorderStyle = bsSingle + Caption = 'UxDIL - User Device Demo' + ClientHeight = 276 + ClientWidth = 329 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 8 + Top = 152 + Width = 256 + Height = 13 + Caption = 'Received (converted) string from device (bulk transfer)' + end + object LabelData: TLabel + Left = 8 + Top = 168 + Width = 45 + Height = 16 + Caption = '(none)' + Font.Charset = DEFAULT_CHARSET + Font.Color = clHotLight + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object LabelVersion: TLabel + Left = 216 + Top = 48 + Width = 9 + Height = 16 + Caption = '?' + Font.Charset = DEFAULT_CHARSET + Font.Color = clHotLight + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object StatusBar1: TStatusBar + Left = 0 + Top = 257 + Width = 329 + Height = 19 + Panels = <> + SimplePanel = True + SimpleText = '(c) 2011 Reusch Elektronik' + end + object ButtonOpen: TButton + Left = 8 + Top = 8 + Width = 193 + Height = 25 + Caption = '&Open Device' + TabOrder = 1 + OnClick = ButtonOpenClick + end + object ButtonVersion: TButton + Left = 8 + Top = 40 + Width = 193 + Height = 25 + Caption = 'Firmware &Version (control transfer)' + TabOrder = 2 + OnClick = ButtonVersionClick + end + object LabeledEdit1: TLabeledEdit + Left = 8 + Top = 88 + Width = 289 + Height = 21 + EditLabel.Width = 77 + EditLabel.Height = 13 + EditLabel.Caption = 'String for device' + LabelPosition = lpAbove + LabelSpacing = 3 + MaxLength = 31 + TabOrder = 3 + end + object ButtonClose: TButton + Left = 8 + Top = 192 + Width = 193 + Height = 25 + Caption = '&Close Device' + TabOrder = 4 + OnClick = ButtonCloseClick + end + object ButtonExit: TButton + Left = 8 + Top = 224 + Width = 193 + Height = 25 + Caption = 'E&xit' + TabOrder = 5 + OnClick = ButtonExitClick + end + object ButtonTransfer: TButton + Left = 8 + Top = 120 + Width = 193 + Height = 25 + Caption = 'Convert &String (bulk transfer)' + TabOrder = 6 + OnClick = ButtonTransferClick + end +end diff --git a/Mainboard/Windows/UnitMain.h b/Mainboard/Windows/UnitMain.h new file mode 100644 index 0000000..a25a1e1 --- /dev/null +++ b/Mainboard/Windows/UnitMain.h @@ -0,0 +1,64 @@ +/***************************************************************************** + +USB-Example: User defined USB device +V1.0.0 + +(c) 2011 Reusch Elektronik, Dipl.-Ing. (FH) Rainer Reusch +Homepage: http://products.reworld.eu/index.htm + +Main Form + +Borland C++Builder 6 + +Created: 2011-05-30 +Changed: 2011-05-30 + +*****************************************************************************/ + +//--------------------------------------------------------------------------- + +#ifndef UnitMainH +#define UnitMainH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include "usb.h" + +#define MY_VID 0x0001 // Vendor ID of the device +#define MY_PID 0x0001 // Product ID of the device +//--------------------------------------------------------------------------- +class TFormMain : public TForm +{ +__published: // Von der IDE verwaltete Komponenten + TStatusBar *StatusBar1; + TButton *ButtonOpen; + TButton *ButtonVersion; + TLabeledEdit *LabeledEdit1; + TLabel *Label1; + TLabel *LabelData; + TButton *ButtonClose; + TLabel *LabelVersion; + TButton *ButtonExit; + TButton *ButtonTransfer; + void __fastcall FormCreate(TObject *Sender); + void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose); + void __fastcall FormDestroy(TObject *Sender); + void __fastcall ButtonOpenClick(TObject *Sender); + void __fastcall ButtonVersionClick(TObject *Sender); + void __fastcall ButtonCloseClick(TObject *Sender); + void __fastcall ButtonExitClick(TObject *Sender); + void __fastcall ButtonTransferClick(TObject *Sender); +private: // Anwender-Deklarationen + struct usb_dev_handle *dev; + usb_dev_handle *open_dev(void); +public: // Anwender-Deklarationen + __fastcall TFormMain(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TFormMain *FormMain; +//--------------------------------------------------------------------------- +#endif diff --git a/Mainboard/Windows/UserDevice.bpr b/Mainboard/Windows/UserDevice.bpr new file mode 100644 index 0000000..9de9b9f --- /dev/null +++ b/Mainboard/Windows/UserDevice.bpr @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1031 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=..\..;UxDIL_Examples\UserDevice;$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=..\..;UxDIL_Examples\UserDevice;$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/Mainboard/Windows/UserDevice.cpp b/Mainboard/Windows/UserDevice.cpp new file mode 100644 index 0000000..b8cde53 --- /dev/null +++ b/Mainboard/Windows/UserDevice.cpp @@ -0,0 +1,51 @@ +/***************************************************************************** + +USB-Example: User defined USB device +V1.0.0 + +(c) 2011 Reusch Elektronik, Dipl.-Ing. (FH) Rainer Reusch +Homepage: http://products.reworld.eu/index.htm + +Main program + +Borland C++Builder 6 + +Created: 2011-05-30 +Changed: 2011-05-30 + +*****************************************************************************/ + +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +//--------------------------------------------------------------------------- +USEFORM("UnitMain.cpp", FormMain); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->Title = "User Device Demo"; + Application->CreateForm(__classid(TFormMain), &FormMain); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + catch (...) + { + try + { + throw Exception(""); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/Mainboard/Windows/UserDevice.exe b/Mainboard/Windows/UserDevice.exe new file mode 100644 index 0000000..03daadf Binary files /dev/null and b/Mainboard/Windows/UserDevice.exe differ diff --git a/Mainboard/Windows/UserDevice.res b/Mainboard/Windows/UserDevice.res new file mode 100644 index 0000000..60cfdc5 Binary files /dev/null and b/Mainboard/Windows/UserDevice.res differ diff --git a/Mainboard/Windows/drivers/User_Device_Demo.cat b/Mainboard/Windows/drivers/User_Device_Demo.cat new file mode 100644 index 0000000..adfc8cc --- /dev/null +++ b/Mainboard/Windows/drivers/User_Device_Demo.cat @@ -0,0 +1,3 @@ +This file will contain the digital signature of the files to be installed +on the system. +This file will be provided by Microsoft upon certification of your drivers. \ No newline at end of file diff --git a/Mainboard/Windows/drivers/User_Device_Demo.inf b/Mainboard/Windows/drivers/User_Device_Demo.inf new file mode 100644 index 0000000..2d1badd Binary files /dev/null and b/Mainboard/Windows/drivers/User_Device_Demo.inf differ diff --git a/Mainboard/Windows/drivers/amd64/install-filter-win.exe b/Mainboard/Windows/drivers/amd64/install-filter-win.exe new file mode 100644 index 0000000..970bc7c Binary files /dev/null and b/Mainboard/Windows/drivers/amd64/install-filter-win.exe differ diff --git a/Mainboard/Windows/drivers/amd64/install-filter.exe b/Mainboard/Windows/drivers/amd64/install-filter.exe new file mode 100644 index 0000000..284e5b7 Binary files /dev/null and b/Mainboard/Windows/drivers/amd64/install-filter.exe differ diff --git a/Mainboard/Windows/drivers/amd64/libusb0.dll b/Mainboard/Windows/drivers/amd64/libusb0.dll new file mode 100644 index 0000000..a8eb338 Binary files /dev/null and b/Mainboard/Windows/drivers/amd64/libusb0.dll differ diff --git a/Mainboard/Windows/drivers/amd64/libusb0.sys b/Mainboard/Windows/drivers/amd64/libusb0.sys new file mode 100644 index 0000000..50bce8d Binary files /dev/null and b/Mainboard/Windows/drivers/amd64/libusb0.sys differ diff --git a/Mainboard/Windows/drivers/amd64/testlibusb-win.exe b/Mainboard/Windows/drivers/amd64/testlibusb-win.exe new file mode 100644 index 0000000..fa052b7 Binary files /dev/null and b/Mainboard/Windows/drivers/amd64/testlibusb-win.exe differ diff --git a/Mainboard/Windows/drivers/amd64/testlibusb.exe b/Mainboard/Windows/drivers/amd64/testlibusb.exe new file mode 100644 index 0000000..7ad2364 Binary files /dev/null and b/Mainboard/Windows/drivers/amd64/testlibusb.exe differ diff --git a/Mainboard/Windows/drivers/ia64/install-filter-win.exe b/Mainboard/Windows/drivers/ia64/install-filter-win.exe new file mode 100644 index 0000000..63f3e72 Binary files /dev/null and b/Mainboard/Windows/drivers/ia64/install-filter-win.exe differ diff --git a/Mainboard/Windows/drivers/ia64/install-filter.exe b/Mainboard/Windows/drivers/ia64/install-filter.exe new file mode 100644 index 0000000..82ad9fc Binary files /dev/null and b/Mainboard/Windows/drivers/ia64/install-filter.exe differ diff --git a/Mainboard/Windows/drivers/ia64/libusb0.dll b/Mainboard/Windows/drivers/ia64/libusb0.dll new file mode 100644 index 0000000..9a28423 Binary files /dev/null and b/Mainboard/Windows/drivers/ia64/libusb0.dll differ diff --git a/Mainboard/Windows/drivers/ia64/libusb0.sys b/Mainboard/Windows/drivers/ia64/libusb0.sys new file mode 100644 index 0000000..495d906 Binary files /dev/null and b/Mainboard/Windows/drivers/ia64/libusb0.sys differ diff --git a/Mainboard/Windows/drivers/ia64/testlibusb-win.exe b/Mainboard/Windows/drivers/ia64/testlibusb-win.exe new file mode 100644 index 0000000..fbf4500 Binary files /dev/null and b/Mainboard/Windows/drivers/ia64/testlibusb-win.exe differ diff --git a/Mainboard/Windows/drivers/ia64/testlibusb.exe b/Mainboard/Windows/drivers/ia64/testlibusb.exe new file mode 100644 index 0000000..3f434ad Binary files /dev/null and b/Mainboard/Windows/drivers/ia64/testlibusb.exe differ diff --git a/Mainboard/Windows/drivers/installer_x64.exe b/Mainboard/Windows/drivers/installer_x64.exe new file mode 100644 index 0000000..a923929 Binary files /dev/null and b/Mainboard/Windows/drivers/installer_x64.exe differ diff --git a/Mainboard/Windows/drivers/installer_x86.exe b/Mainboard/Windows/drivers/installer_x86.exe new file mode 100644 index 0000000..90f5331 Binary files /dev/null and b/Mainboard/Windows/drivers/installer_x86.exe differ diff --git a/Mainboard/Windows/drivers/libusb-win32-bin-README.txt b/Mainboard/Windows/drivers/libusb-win32-bin-README.txt new file mode 100644 index 0000000..3d93c4e --- /dev/null +++ b/Mainboard/Windows/drivers/libusb-win32-bin-README.txt @@ -0,0 +1,27 @@ +libusb-win32-bin v1.2.4.0 (04/08/2011) - [Package Information] + +ALL ARCHITECTURES: + x86\libusb0_x86.dll: x86 32-bit library. Must be renamed to libusb0.dll + On 64 bit, Installs to Windows\syswow64\libusb0.dll. + On 32 bit, Installs to Windows\system32\libusb0.dll. + + x86\inf-wizard.exe: inf-wizard application with embedded libusb-win32 + v1.2.4.0 binaries. + +X86 ONLY ARCHITECTURES: + x86\libusb0.sys: x86 32-bit driver. + Installs to Windows\system32\drivers\libusb0.sys + +AMD64-INTEL64 ONLY ARCHITECTURES: + amd64\libusb0.sys: x64 64-bit driver. + Installs to Windows\system32\drivers\libusb0.sys + + amd64\libusb0.dll: x64 64-bit library. + Installs to Windows\system32\libusb0.dll + +IA64 ONLY ARCHITECTURES: + ia64\libusb0.sys: IA64 64-bit driver. + Installs to Windows\system32\drivers\libusb0.sys + + ia64\libusb0.dll: IA64 64-bit library. + Installs to Windows\system32\libusb0.dll diff --git a/Mainboard/Windows/drivers/license/libusb-win32/installer_license.txt b/Mainboard/Windows/drivers/license/libusb-win32/installer_license.txt new file mode 100644 index 0000000..6128be6 --- /dev/null +++ b/Mainboard/Windows/drivers/license/libusb-win32/installer_license.txt @@ -0,0 +1,851 @@ +Copyright (c) 2002-2004 Stephan Meyer, +Copyright (c) 2000-2004 Johannes Erdfelt, +Copyright (c) 2000-2004 Thomas Sailer, +Copyright (c) 2010 Travis Robinson, + +This software is distributed under the following licenses: +Driver: GNU General Public License (GPL) +Library, Test Files, Installer: GNU Lesser General Public License (LGPL) + +*********************************************************************** + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program 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 3 of the License, or + (at your option) any later version. + + This program 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 program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + diff --git a/Mainboard/Windows/drivers/x86/install-filter-win.exe b/Mainboard/Windows/drivers/x86/install-filter-win.exe new file mode 100644 index 0000000..21b4bfd Binary files /dev/null and b/Mainboard/Windows/drivers/x86/install-filter-win.exe differ diff --git a/Mainboard/Windows/drivers/x86/install-filter.exe b/Mainboard/Windows/drivers/x86/install-filter.exe new file mode 100644 index 0000000..cd99165 Binary files /dev/null and b/Mainboard/Windows/drivers/x86/install-filter.exe differ diff --git a/Mainboard/Windows/drivers/x86/libusb0.sys b/Mainboard/Windows/drivers/x86/libusb0.sys new file mode 100644 index 0000000..bf2e8bf Binary files /dev/null and b/Mainboard/Windows/drivers/x86/libusb0.sys differ diff --git a/Mainboard/Windows/drivers/x86/libusb0_x86.dll b/Mainboard/Windows/drivers/x86/libusb0_x86.dll new file mode 100644 index 0000000..2710e96 Binary files /dev/null and b/Mainboard/Windows/drivers/x86/libusb0_x86.dll differ diff --git a/Mainboard/Windows/drivers/x86/testlibusb-win.exe b/Mainboard/Windows/drivers/x86/testlibusb-win.exe new file mode 100644 index 0000000..8b539c6 Binary files /dev/null and b/Mainboard/Windows/drivers/x86/testlibusb-win.exe differ diff --git a/Mainboard/Windows/drivers/x86/testlibusb.exe b/Mainboard/Windows/drivers/x86/testlibusb.exe new file mode 100644 index 0000000..64296ea Binary files /dev/null and b/Mainboard/Windows/drivers/x86/testlibusb.exe differ diff --git a/Mainboard/Windows/libusb.lib b/Mainboard/Windows/libusb.lib new file mode 100644 index 0000000..64b6b51 Binary files /dev/null and b/Mainboard/Windows/libusb.lib differ diff --git a/Mainboard/Windows/usb.h b/Mainboard/Windows/usb.h new file mode 100644 index 0000000..4f814df --- /dev/null +++ b/Mainboard/Windows/usb.h @@ -0,0 +1,394 @@ +#ifndef __USB_H__ +#define __USB_H__ + +#include +#include + +/* + * 'interface' is defined somewhere in the Windows header files. This macro + * is deleted here to avoid conflicts and compile errors. + */ + +#ifdef interface +#undef interface +#endif + +/* + * PATH_MAX from limits.h can't be used on Windows if the dll and + * import libraries are build/used by different compilers + */ + +#define LIBUSB_PATH_MAX 512 + + +/* + * USB spec information + * + * This is all stuff grabbed from various USB specs and is pretty much + * not subject to change + */ + +/* + * Device and/or Interface Class codes + */ +#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ +#define USB_CLASS_AUDIO 1 +#define USB_CLASS_COMM 2 +#define USB_CLASS_HID 3 +#define USB_CLASS_PRINTER 7 +#define USB_CLASS_MASS_STORAGE 8 +#define USB_CLASS_HUB 9 +#define USB_CLASS_DATA 10 +#define USB_CLASS_VENDOR_SPEC 0xff + +/* + * Descriptor types + */ +#define USB_DT_DEVICE 0x01 +#define USB_DT_CONFIG 0x02 +#define USB_DT_STRING 0x03 +#define USB_DT_INTERFACE 0x04 +#define USB_DT_ENDPOINT 0x05 + +#define USB_DT_HID 0x21 +#define USB_DT_REPORT 0x22 +#define USB_DT_PHYSICAL 0x23 +#define USB_DT_HUB 0x29 + +/* + * Descriptor sizes per descriptor type + */ +#define USB_DT_DEVICE_SIZE 18 +#define USB_DT_CONFIG_SIZE 9 +#define USB_DT_INTERFACE_SIZE 9 +#define USB_DT_ENDPOINT_SIZE 7 +#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ +#define USB_DT_HUB_NONVAR_SIZE 7 + + +/* ensure byte-packed structures */ +#include + + +/* All standard descriptors have these 2 fields in common */ +struct usb_descriptor_header { + unsigned char bLength; + unsigned char bDescriptorType; +}; + +/* String descriptor */ +struct usb_string_descriptor { + unsigned char bLength; + unsigned char bDescriptorType; + unsigned short wData[1]; +}; + +/* HID descriptor */ +struct usb_hid_descriptor { + unsigned char bLength; + unsigned char bDescriptorType; + unsigned short bcdHID; + unsigned char bCountryCode; + unsigned char bNumDescriptors; +}; + +/* Endpoint descriptor */ +#define USB_MAXENDPOINTS 32 +struct usb_endpoint_descriptor { + unsigned char bLength; + unsigned char bDescriptorType; + unsigned char bEndpointAddress; + unsigned char bmAttributes; + unsigned short wMaxPacketSize; + unsigned char bInterval; + unsigned char bRefresh; + unsigned char bSynchAddress; + + unsigned char *extra; /* Extra descriptors */ + int extralen; +}; + +#define USB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */ +#define USB_ENDPOINT_DIR_MASK 0x80 + +#define USB_ENDPOINT_TYPE_MASK 0x03 /* in bmAttributes */ +#define USB_ENDPOINT_TYPE_CONTROL 0 +#define USB_ENDPOINT_TYPE_ISOCHRONOUS 1 +#define USB_ENDPOINT_TYPE_BULK 2 +#define USB_ENDPOINT_TYPE_INTERRUPT 3 + +/* Interface descriptor */ +#define USB_MAXINTERFACES 32 +struct usb_interface_descriptor { + unsigned char bLength; + unsigned char bDescriptorType; + unsigned char bInterfaceNumber; + unsigned char bAlternateSetting; + unsigned char bNumEndpoints; + unsigned char bInterfaceClass; + unsigned char bInterfaceSubClass; + unsigned char bInterfaceProtocol; + unsigned char iInterface; + + struct usb_endpoint_descriptor *endpoint; + + unsigned char *extra; /* Extra descriptors */ + int extralen; +}; + +#define USB_MAXALTSETTING 128 /* Hard limit */ + +struct usb_interface { + struct usb_interface_descriptor *altsetting; + + int num_altsetting; +}; + +/* Configuration descriptor information.. */ +#define USB_MAXCONFIG 8 +struct usb_config_descriptor { + unsigned char bLength; + unsigned char bDescriptorType; + unsigned short wTotalLength; + unsigned char bNumInterfaces; + unsigned char bConfigurationValue; + unsigned char iConfiguration; + unsigned char bmAttributes; + unsigned char MaxPower; + + struct usb_interface *interface; + + unsigned char *extra; /* Extra descriptors */ + int extralen; +}; + +/* Device descriptor */ +struct usb_device_descriptor { + unsigned char bLength; + unsigned char bDescriptorType; + unsigned short bcdUSB; + unsigned char bDeviceClass; + unsigned char bDeviceSubClass; + unsigned char bDeviceProtocol; + unsigned char bMaxPacketSize0; + unsigned short idVendor; + unsigned short idProduct; + unsigned short bcdDevice; + unsigned char iManufacturer; + unsigned char iProduct; + unsigned char iSerialNumber; + unsigned char bNumConfigurations; +}; + +struct usb_ctrl_setup { + unsigned char bRequestType; + unsigned char bRequest; + unsigned short wValue; + unsigned short wIndex; + unsigned short wLength; +}; + +/* + * Standard requests + */ +#define USB_REQ_GET_STATUS 0x00 +#define USB_REQ_CLEAR_FEATURE 0x01 +/* 0x02 is reserved */ +#define USB_REQ_SET_FEATURE 0x03 +/* 0x04 is reserved */ +#define USB_REQ_SET_ADDRESS 0x05 +#define USB_REQ_GET_DESCRIPTOR 0x06 +#define USB_REQ_SET_DESCRIPTOR 0x07 +#define USB_REQ_GET_CONFIGURATION 0x08 +#define USB_REQ_SET_CONFIGURATION 0x09 +#define USB_REQ_GET_INTERFACE 0x0A +#define USB_REQ_SET_INTERFACE 0x0B +#define USB_REQ_SYNCH_FRAME 0x0C + +#define USB_TYPE_STANDARD (0x00 << 5) +#define USB_TYPE_CLASS (0x01 << 5) +#define USB_TYPE_VENDOR (0x02 << 5) +#define USB_TYPE_RESERVED (0x03 << 5) + +#define USB_RECIP_DEVICE 0x00 +#define USB_RECIP_INTERFACE 0x01 +#define USB_RECIP_ENDPOINT 0x02 +#define USB_RECIP_OTHER 0x03 + +/* + * Various libusb API related stuff + */ + +#define USB_ENDPOINT_IN 0x80 +#define USB_ENDPOINT_OUT 0x00 + +/* Error codes */ +#define USB_ERROR_BEGIN 500000 + +/* + * This is supposed to look weird. This file is generated from autoconf + * and I didn't want to make this too complicated. + */ +#define USB_LE16_TO_CPU(x) + +/* Data types */ +/* struct usb_device; */ +/* struct usb_bus; */ + +struct usb_device { + struct usb_device *next, *prev; + + char filename[LIBUSB_PATH_MAX]; + + struct usb_bus *bus; + + struct usb_device_descriptor descriptor; + struct usb_config_descriptor *config; + + void *dev; /* Darwin support */ + + unsigned char devnum; + + unsigned char num_children; + struct usb_device **children; +}; + +struct usb_bus { + struct usb_bus *next, *prev; + + char dirname[LIBUSB_PATH_MAX]; + + struct usb_device *devices; + unsigned long location; + + struct usb_device *root_dev; +}; + +/* Version information, Windows specific */ +struct usb_version { + struct { + int major; + int minor; + int micro; + int nano; + } dll; + struct { + int major; + int minor; + int micro; + int nano; + } driver; +}; + + +struct usb_dev_handle; +typedef struct usb_dev_handle usb_dev_handle; + +/* Variables */ +#ifndef __USB_C__ +#define usb_busses usb_get_busses() +#endif + + + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + /* Function prototypes */ + + /* usb.c */ + usb_dev_handle *usb_open(struct usb_device *dev); + int usb_close(usb_dev_handle *dev); + int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf, + size_t buflen); + int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf, + size_t buflen); + + /* descriptors.c */ + int usb_get_descriptor_by_endpoint(usb_dev_handle *udev, int ep, + unsigned char type, unsigned char index, + void *buf, int size); + int usb_get_descriptor(usb_dev_handle *udev, unsigned char type, + unsigned char index, void *buf, int size); + + /* .c */ + int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size, + int timeout); + int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, + int timeout); + int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size, + int timeout); + int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size, + int timeout); + int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, + int value, int index, char *bytes, int size, + int timeout); + int usb_set_configuration(usb_dev_handle *dev, int configuration); + int usb_claim_interface(usb_dev_handle *dev, int interface); + int usb_release_interface(usb_dev_handle *dev, int interface); + int usb_set_altinterface(usb_dev_handle *dev, int alternate); + int usb_resetep(usb_dev_handle *dev, unsigned int ep); + int usb_clear_halt(usb_dev_handle *dev, unsigned int ep); + int usb_reset(usb_dev_handle *dev); + + char *usb_strerror(void); + + void usb_init(void); + void usb_set_debug(int level); + int usb_find_busses(void); + int usb_find_devices(void); + struct usb_device *usb_device(usb_dev_handle *dev); + struct usb_bus *usb_get_busses(void); + + + /* Windows specific functions */ + + #define LIBUSB_HAS_INSTALL_SERVICE_NP 1 + int usb_install_service_np(void); + void CALLBACK usb_install_service_np_rundll(HWND wnd, HINSTANCE instance, + LPSTR cmd_line, int cmd_show); + + #define LIBUSB_HAS_UNINSTALL_SERVICE_NP 1 + int usb_uninstall_service_np(void); + void CALLBACK usb_uninstall_service_np_rundll(HWND wnd, HINSTANCE instance, + LPSTR cmd_line, int cmd_show); + + #define LIBUSB_HAS_INSTALL_DRIVER_NP 1 + int usb_install_driver_np(const char *inf_file); + void CALLBACK usb_install_driver_np_rundll(HWND wnd, HINSTANCE instance, + LPSTR cmd_line, int cmd_show); + + #define LIBUSB_HAS_TOUCH_INF_FILE_NP 1 + int usb_touch_inf_file_np(const char *inf_file); + void CALLBACK usb_touch_inf_file_np_rundll(HWND wnd, HINSTANCE instance, + LPSTR cmd_line, int cmd_show); + + #define LIBUSB_HAS_INSTALL_NEEDS_RESTART_NP 1 + int usb_install_needs_restart_np(void); + + const struct usb_version *usb_get_version(void); + + int usb_isochronous_setup_async(usb_dev_handle *dev, void **context, + unsigned char ep, int pktsize); + int usb_bulk_setup_async(usb_dev_handle *dev, void **context, + unsigned char ep); + int usb_interrupt_setup_async(usb_dev_handle *dev, void **context, + unsigned char ep); + + int usb_submit_async(void *context, char *bytes, int size); + int usb_reap_async(void *context, int timeout); + int usb_reap_async_nocancel(void *context, int timeout); + int usb_cancel_async(void *context); + int usb_free_async(void **context); + + +#ifdef __cplusplus +} +#endif + +#endif /* __USB_H__ */ +