diff --git a/converter/usb_desc_dump/Makefile b/converter/usb_desc_dump/Makefile new file mode 100644 index 00000000..a4e4eb2e --- /dev/null +++ b/converter/usb_desc_dump/Makefile @@ -0,0 +1,47 @@ +TARGET ?= usb_desc_dump +TMK_DIR ?= ../../tmk_core +TARGET_DIR ?= . +SRC ?= desc_dump.cpp +CONFIG_H ?= config.h + +# MCU name +MCU ?= atmega32u4 +# Processor frequency. +F_CPU ?= 16000000 + +# +# LUFA specific +# +ARCH ?= AVR8 +F_USB ?= $(F_CPU) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# +# Build Options +# +MOUSEKEY_ENABLE ?= no # Mouse keys +EXTRAKEY_ENABLE ?= no # Media control and System control +CONSOLE_ENABLE ?= yes # Console for debug +COMMAND_ENABLE ?= no # Commands for debug and configuration +NKRO_ENABLE ?= no # USB Nkey Rollover + +# Boot Section Size in bytes +OPT_DEFS += -DBOOTLOADER_SIZE=4096 +OPT_DEFS += -DNO_ACTION_TAPPING +OPT_DEFS += -DNO_ACTION_LAYER +OPT_DEFS += -DNO_ACTION_MACRO +OPT_DEFS += -DNO_DEBUG + +#LDFLAGS += -Wl,--relax + +# program Leonardo +PROGRAM_CMD = avrdude -p$(MCU) -cavr109 -b57600 -Uflash:w:$(TARGET).hex -P$(DEV) + +# Search Path +VPATH += $(TARGET_DIR) +VPATH += $(TMK_DIR) + +include $(TMK_DIR)/protocol/usb_hid.mk +include $(TMK_DIR)/protocol/lufa.mk +include $(TMK_DIR)/common.mk +include $(TMK_DIR)/rules.mk diff --git a/converter/usb_desc_dump/README.md b/converter/usb_desc_dump/README.md new file mode 100644 index 00000000..973cff3b --- /dev/null +++ b/converter/usb_desc_dump/README.md @@ -0,0 +1,91 @@ +USB Descriptor Dumper +===================== +2021-06-30 + +`usb_desc_dump` read USB descriptors and shows in HEX dump. +This works on TMK USB-USB converter and USB Host Shield with Arduino Leonardo. +USB hub is not supported. Device should be plugged directly. + +Following descriptors are supported. + +- Device Descriptor +- Configuration Descriptor + - Interface Descriptor + - Endpoint Descriptor + - HID Descriptor +- HID Report descriptor + + + +Example optput: + + usb_state: 90 + + Address:01 + lowspeed:01 + idVendor:046A + idProduct:0011 + + Device Descriptor: + 12 01 00 02 00 00 00 08 6A 04 11 00 00 01 00 00 + 00 01 + + Config0: len:0022 + 09 02 22 00 01 01 00 A0 32 09 04 00 00 01 03 01 + 01 00 09 21 11 01 00 01 22 40 00 07 05 81 03 08 + 00 0A + + Report0: len:0040 + 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01 + 75 01 95 08 81 02 95 01 75 08 81 01 95 03 75 01 + 05 08 19 01 29 03 91 02 95 05 75 01 91 01 95 06 + 75 08 15 00 26 DD 00 05 07 19 00 29 DD 81 00 C0 + + + +To check descriptor content use 'USB Descriptor and Request Parser' on line. + +- https://eleccelerator.com/usbdescreqparser/ + + +Or you can use command line tool like hidrd. + +- https://github.com/DIGImend/hidrd + + $ cat | hidrd-convert -i hex -o spec + 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01 + 75 01 95 08 81 02 95 01 75 08 81 01 95 03 75 01 + 05 08 19 01 29 03 91 02 95 05 75 01 91 01 95 06 + 75 08 15 00 26 DD 00 05 07 19 00 29 DD 81 00 C0 + Usage Page (Desktop), ; Generic desktop controls (01h) + Usage (Keyboard), ; Keyboard (06h, application collection) + Collection (Application), + Usage Page (Keyboard), ; Keyboard/keypad (07h) + Usage Minimum (KB Leftcontrol), ; Keyboard left control (E0h, dynamic value) + Usage Maximum (KB Right GUI), ; Keyboard right GUI (E7h, dynamic value) + Logical Minimum (0), + Logical Maximum (1), + Report Size (1), + Report Count (8), + Input (Variable), + Report Count (1), + Report Size (8), + Input (Constant), + Report Count (3), + Report Size (1), + Usage Page (LED), ; LEDs (08h) + Usage Minimum (01h), + Usage Maximum (03h), + Output (Variable), + Report Count (5), + Report Size (1), + Output (Constant), + Report Count (6), + Report Size (8), + Logical Minimum (0), + Logical Maximum (221), + Usage Page (Keyboard), ; Keyboard/keypad (07h) + Usage Minimum (None), ; No event (00h, selector) + Usage Maximum (KP Hexadecimal), ; Keypad Hexadecimal (DDh, selector) + Input, + End Collection diff --git a/converter/usb_desc_dump/binary/usb_desc_dump.hex b/converter/usb_desc_dump/binary/usb_desc_dump.hex new file mode 100644 index 00000000..bf099498 --- /dev/null +++ b/converter/usb_desc_dump/binary/usb_desc_dump.hex @@ -0,0 +1,1072 @@ +:100000000C9448010C949B010C949B010C949B0153 +:100010000C949B010C949B010C949B010C949B01F0 +:100020000C949B010C949B010C94BD190C948F1A99 +:100030000C94AE1E0C949B010C949B010C949B01A0 +:100040000C949B010C949B010C949B010C949B01C0 +:100050000C949B010C94C8050C949B010C949B017F +:100060000C949B010C949B010C949B010C949B01A0 +:100070000C949B010C949B010C949B010C949B0190 +:100080000C949B010C949B010C949B010C949B0180 +:100090000C949B010C949B010C949B010C949B0170 +:1000A0000C949B010C949B010C949B010B1832182F +:1000B0002A1932182A197E18A1182A19F8180719AE +:1000C0007573625F73746174653A20253032580A23 +:1000D000000D0A446576696365204465736372693F +:1000E00070746F723A0D0A006C6F77737065656497 +:1000F0003A253032580D0A000D0A41646472657366 +:10010000733A253032580D0A000D0A436F6E666946 +:100110006725643A000D0A5265706F727425643A5F +:10012000206C656E3A253034580D0A000D0A002502 +:1001300030325820000D0A0020000D0A4552524F5F +:10014000523A253032580D0A0025733A253034587A +:100150000D0A0025733A253032580D0A0000000AB6 +:100160004B6579626F6172642073746172742E0AD8 +:10017000000A55534220636F6E6669677572656445 +:100180002E0A000A0A544D4B3A3433646438313035 +:10019000362B2F4C5546410A0A002C0355005300BC +:1001A0004200200044006500730063007200690093 +:1001B000700074006F0072002000440075006D0034 +:1001C0007000650072000000080354004D004B00F1 +:1001D00000000403090409024200020100A03209E0 +:1001E0000400000103010100092111010001224066 +:1001F000000705810308000A09040100020300004A +:1002000000092111010001222200070582032000BC +:10021000010705020320000112011001000000087F +:10022000EDFE5B001408010200010631FF0974A114 +:10023000010975150026FF009520750881020976D1 +:10024000150026FF00952075089102C005010906DA +:10025000A101050719E029E7150025019508750199 +:100260008102950175088101050819012905950587 +:10027000750191029501750391010507190029FF88 +:10028000150026FF00950675088100C0120533058C +:1002900011241FBECFEFDAE0DEBFCDBF04B603FEF0 +:1002A00028C08091A4059091A505A091A605B091C4 +:1002B000A7058730904BA740B04BD9F41092A40506 +:1002C0001092A5051092A6051092A70514BE0FB6B0 +:1002D000F894A895809160008861809360001092E6 +:1002E00060000FBE1092010810920008E0E0F8E3F1 +:1002F000099511E0A0E0B1E0E0E6F2E402C005906B +:100300000D92AA38B107D9F725E0AAE8B1E001C0FB +:100310001D92A43AB207E1F711E0C8E4D1E004C0AD +:100320002197FE010E942821C634D107C9F70E94F7 +:1003300026150C942E210C940000FF93EF93E0916E +:100340008A01F0918B01309709F00995EF91FF91A7 +:100350000895FC018591803011F0EFDFFBCF089507 +:10036000FF27E0E230E247FF0CC0419597FF09C04C +:10037000EDE26095709580959095611D711D811DD0 +:10038000911D27FF02C0219530E350E2AA27660F96 +:10039000771F881F991FAA1FA41710F0A41B63952D +:1003A0005A95A9F7AA3008F0A95FA05DAF93F3951D +:1003B000611571058105910541F7ED3211F4EF9357 +:1003C000F395F21718F43F93F395FBCF8F91B5DFB8 +:1003D000FA95E1F70895E991F9918591803021F03E +:1003E000853219F0AADFF9CF089520E0E8945591FD +:1003F0005532C1F3503311F4689455915A3348F48F +:10040000505390F3220F022E220F220F200D250FA2 +:10041000F4CF0EF4219589919991533619F35337FE +:1004200029F1533559F1BC0188279927E8945C36A6 +:1004300021F48991999168945591543639F446EF95 +:100440007EF077FF0DC08FEF9FEF0AC055374AE06F +:1004500039F0583540E121F0523642E009F0089574 +:10046000FF93EF937DDFEF91FF91B7CFFF93EF9372 +:10047000FC0181918030B9F360DFFBCFFF93EF93F4 +:1004800068DFF1CFDF93CF93CDB7DEB72596A3DF3B +:10049000CF91DF9108951F926F939F938F9383E580 +:1004A00091E09F938F930E9442020F900F900F90C4 +:1004B0000F900F900F9008957F936F939F938F935A +:1004C00089E491E09F938F930E9442020F900F90D6 +:1004D0000F900F900F900F9008951F928F938AE3C3 +:1004E00091E09F938F930E9442020F900F900F9084 +:1004F0000F900895CF92DF92EF92FF920F931F9388 +:10050000CF93DF936C017B01C0E0D0E00FE211E0FC +:10051000CC15DD05ECF4CE018F709927892B19F0ED +:1005200088E391E004C0209721F085E391E00E94E8 +:10053000A901F70181917F011F928F931F930F9360 +:100540000E94420221960F900F900F900F90E0CFE3 +:100550008CE291E0DF91CF911F910F91FF90EF908E +:10056000DF90CF900C94A9018F929F92AF92BF928F +:10057000CF92EF920F93CF93DF93EA011F921F92D6 +:1005800020E931E03F932F9321E02F931F924A01FE +:100590005B0122E2C22EE12C06E021E840E0FC01F2 +:1005A000628181EA93E00E94090B60E971E0CE016B +:1005B0000E947A020F900F900F900F900F900F9063 +:1005C00080E0DF91CF910F91EF90CF90BF90AF90EF +:1005D0009F908F9008958F929F92AF92BF92CF92EB +:1005E000DF92EF92FF921F93CF93DF935C01EA01BA +:1005F00010E0CB0180579D4F7C0185E1C82E81E042 +:10060000D82ECE15DF0508F042C06981643049F06C +:1006100018F4613048F137C06530A9F1613219F042 +:1006200023C01A8130C088858F938F818F93812E4C +:10063000912C1F921F93DF92CF920E9442026E81F3 +:100640000F900F900F900F900F900F90623239F42F +:100650004F815885B401C5010E94B40214C085E1E0 +:1006600091E00E944B020FC08CE291E0DF91CF91AC +:100670001F91FF90EF90DF90CF90BF90AF909F9031 +:100680008F900C944B028881C80FD11DBACFDF9197 +:10069000CF911F91FF90EF90DF90CF90BF90AF90E0 +:1006A0009F908F9008956F927F928F929F92AF92BA +:1006B000BF92CF92DF92EF92FF920F931F93CF934F +:1006C000DF935C01862E912CC0E0D0E029E0622E01 +:1006D00021E0722E1C2F8C169D0609F443C0DF9377 +:1006E000CF937F926F920E94420290E9E92E92E0AE +:1006F000F92E0C2F29E030E040E0F501628181EA1B +:1007000093E00E94100C0F900F900F900F908111AA +:100710002AC0C0909202D0909302B6018FE391E07C +:100720000E945C029601F1E0CF16DF0610F020E097 +:1007300031E080E9E82E82E0F82E012F40E0F5015B +:10074000628181EA93E00E94100C219681110BC016 +:10075000B701C6010E947A02A701B601C5010E9435 +:10076000EB02B8CF80E0DF91CF911F910F91FF9006 +:10077000EF90DF90CF90BF90AF909F908F907F9041 +:100780006F9008950F931F93CF93DF93EC018A81AD +:100790001F928F9388EF90E09F938F930E94420265 +:1007A0008C811F928F9388EE90E09F938F930E948D +:1007B000420200E912E022E130E040E06A8181EA91 +:1007C00093E00E94E90B2DB73EB7285F3F4F0FB66D +:1007D000F8943EBF0FBE2DBF81110E946D02609143 +:1007E00098027091990284E491E00E945C02609109 +:1007F0009A0270919B028DE491E00E945C0281ED6F +:1008000090E00E94A90160E972E082E190E00E941C +:100810007A026091A102CE010E94530381110E94CD +:100820006D02E091A103F091A2030480F581E02D17 +:100830006A8181EA93E0DF91CF911F910F91099432 +:1008400008950E94A10590938F0180938E010895D1 +:1008500081E00895CF93DF9381EA93E00E94030E35 +:1008600081EA93E00E94F90690918C018917C9F002 +:1008700081EA93E00E94F90680938C011F928F9386 +:1008800080EC90E09F938F930E9442020F900F9014 +:100890000F900F9080910001811103C081E080933F +:1008A000000180918E0190918F010E94B905883BD3 +:1008B0009B40C8F081EA93E00E94F906803999F4E0 +:1008C00080910001882379F0CCEAD3E08A818823E3 +:1008D00019F0CE010E94C203259683E0C73FD807D6 +:1008E000A9F710920001DF91CF9108952E9A0895F3 +:1008F0002E988EBD0DB407FEFDCF1EBC0DB407FEB5 +:10090000FDCF0E9476048EB508952E9882608EBD2C +:100910000DB407FEFDCF6EBD0DB407FEFDCF0C94E8 +:10092000760488EF0E947804807C8034A1F018F46B +:10093000882301F10895803819F0803CB9F00895BA +:1009400088ED0E94780481FD0BC069EC88ED0E945F +:10095000850482E00CC088ED0E94780481FDF5CF0B +:100960006BEC88ED0E94850483E001C081E08093F8 +:100970008D01089561ED88ED0E94850410928D012E +:1009800008950F931F93CF93DF938C01269A0E94B3 +:100990007604219A229A2398209A80E58CBD81E0E2 +:1009A0008DBD259868E188E80E94850460E288E7AB +:1009B0000E94850460E088E70E948504C0E0D0E0E2 +:1009C00088E60E947804219680FD06C0CF3F8FEF15 +:1009D000D807B1F78FEF1DC061EC88ED0E94850448 +:1009E00060E680ED0E94850464E088EE0E94850444 +:1009F00088EE0E94780482FFFBCFC8010E94910418 +:100A000060E288EC0E94850461E080E80E94850431 +:100A100080E0DF91CF911F910F91089581EA93E0DB +:100A20000C94C10481EA93E00E94C90661EA73E074 +:100A300080E993E00C94601180E090E008958FEFDE +:100A40009FEF089581E090E008950895862F0E9419 +:100A50001A1381E090E00895FB0180810E941A132F +:100A600081E090E00895E8E1F4E01382128288EEDC +:100A700093E0A0E0B0E084839583A683B7838BE501 +:100A800091E0918380838FEF9FEF9587848708950E +:100A90000C94AD058F929F92AF92BF92CF92DF924E +:100AA000EF92FF920E9404204B015C0120E030E0B5 +:100AB0004AE755E40E94BB206B017C0120E030E056 +:100AC00040E85FE30E94D01F87FD24C020E03FEF95 +:100AD0004FE757E4C701B6010E94B6201816ACF4E0 +:100AE00020E030E040E251E4C501B4010E94BB20A7 +:100AF0000E94D51F20E931E06115710581F0C9011F +:100B00000197F1F761507109F7CFC701B6010E9453 +:100B1000D51F02C061E070E0CB010197F1F7FF90B3 +:100B2000EF90DF90CF90BF90AF909F908F900895FF +:100B300082E084BD93E095BD9AEF97BD80936E00EF +:100B400008952FB7F8948091680490916904A0915A +:100B50006A04B0916B042FBF08952FB7F894609189 +:100B600068047091690480916A0490916B042FBFAE +:100B700008959C014FB7F89480916804909169049E +:100B8000A0916A04B0916B044FBF821B930B089530 +:100B900078941F920F920FB60F9211248F939F9308 +:100BA000AF93BF938091680490916904A0916A0407 +:100BB000B0916B040196A11DB11D809368049093C0 +:100BC0006904A0936A04B0936B04BF91AF919F91A5 +:100BD0008F910F900FBE0F901F901895CF93DF93BA +:100BE000FC01862F8078A9F4283008F04DC04423FA +:100BF00021F09581973009F447C0EF01A1E0B0E002 +:100C00009D85992341F011962596A031B105C1F734 +:100C10003BC080E039C061111CC085E08A9FE001C3 +:100C20008B9FD00D1124CE0FDF1F442331F081E4C0 +:100C3000888785818F5F858302C081E0888725E072 +:100C40002A9FC0012B9F900D1124E80FF91F80856A +:100C50001BC06770660F660F660F442341F0606427 +:100C600085818F5F85838770687F682B03C02770BD +:100C7000687B622B25E02A9FC0012B9F900D1124D9 +:100C8000E80FF91F6087862FDF91CF9108956111DA +:100C900002C006960895FC0121E03585631739F0FE +:100CA0002F5F35962031C9F780E090E008950696D1 +:100CB00035E0239F800D911D11240895DF92EF925E +:100CC000FF920F931F93CF93DF93EC01E62EF12C4D +:100CD00085E0689FB0011124FE01E60FF71F8085B3 +:100CE000182F177086FF17C001E085E0D82EFE018F +:100CF000D09EE00DF11D1124808586958695869500 +:100D000087701817F9F00F5F003189F78D81811313 +:100D100002C011501D8385E08E9DF0018F9DF00D66 +:100D20001124EC0FFD1F108681E081871286229628 +:100D3000D783C683DF91CF911F910F91FF90EF90E2 +:100D4000DF900895602FCE010E945E06D0CFFC0197 +:100D5000613499F49C01255B3F4F61E0AC014E5F2B +:100D60005F4F158666871786548743873596E21747 +:100D7000F307B9F7FC011582089521E03585631763 +:100D800029F02F5F35962031C9F70895622F0C9412 +:100D90005E06FC018DE691E09183808315821086CA +:100DA00081E081871286CF01029697838683128223 +:100DB00028E023832CE32483DF019F01255B3F4F41 +:100DC00041E01D961C921D971E964C931E971F96F0 +:100DD0001C921F971C969C938E931B971596A21797 +:100DE000B30779F7EA58FF4F108281E180937004CE +:100DF0000895809170040895CF93C42F0E944706F0 +:100E0000009789F0DC01ED91FC911197309759F032 +:100E100013969C9180E0891731F020812C1731F0D6 +:100E200033968F5FF8CF80E090E001C0CF01CF9183 +:100E300008950F931F93CF93DF932115310571F020 +:100E4000E901042F162F0E944706FC01892B41F06F +:100E50001283D183C083038380E003C088ED01C087 +:100E600086EDDF91CF911F910F910895CF92DF9280 +:100E7000FF920F931F93CF93DF93662381F1F62E9A +:100E80008C016C0186E5C80ED11CC0E0D0E0D60113 +:100E90008D919D916D010097F1F0DC01ED91FC9138 +:100EA0000084F185E02D0995F81215C0AB96CC0FA2 +:100EB000DD1FC00FD11F88819981DC01ED91FC916C +:100EC0000480F581E02DDF91CF911F910F91FF906C +:100ED000DF90CF9009942196C031D105C1F680E012 +:100EE000DF91CF911F910F91FF90DF90CF900895E8 +:100EF0002E980895CF93C82F0E947807CEBD0DB4C9 +:100F000007FEFDCF1EBC0DB407FEFDCF0E94760488 +:100F10008EB5CF910895CF93DF93C82FD62F0E941F +:100F20007807C260CEBD0DB407FEFDCFDEBD0DB4A7 +:100F300007FEFDCFDF91CF910C9476048F929F92A4 +:100F4000AF92BF92CF92DF92EF92FF920F931F93D7 +:100F5000CF93DF93EC01D62EC42E59010E94470691 +:100F60007C01009709F445C0FC0180819181892BA7 +:100F700009F441C04C2D6D2DCE010E94FC06F501F7 +:100F8000918380830097C9F1FC01828186958695C3 +:100F900090E08031910514F08FE090E041E050E066 +:100FA00060E070E04A015B0104C0880C991CAA1C37 +:100FB000BB1C8A95D2F7D501C4010197F801918332 +:100FC00080836D2D80EE0E948B0788ED0E947A074A +:100FD000F7019481992331F0CA58DF4F688162602C +:100FE000682B02C0682F697F88ED0E948B0780E024 +:100FF00005C086ED03C087ED01C08BEDDF91CF9179 +:101000001F910F91FF90EF90DF90CF90BF90AF9026 +:101010009F908F9008958F929F92AF92BF92CF92A0 +:10102000DF92EF92FF920F931F93CF93DF93862E61 +:10103000942E59010E9448056B017C0128E8C20EDC +:1010400023E1D21EE11CF11C00E010E0D0E0C0E082 +:1010500098280E944805DC01CB018C199D09AE0936 +:10106000BF09B7FF2DC0692D80EF0E948B070E943A +:101070004805DC01CB018C199D09AE09BF09B7FFFA +:1010800009C088EC0E947A0787FFF1CF60E888ECFE +:101090000E948B0788EF0E947A07C82FCF70C43058 +:1010A00019F0CE3051F00CC00F5F1F4FA114B104E6 +:1010B00081F20A151B0569F603C0DF5FD33049F6DC +:1010C0008C2FDF91CF911F910F91FF90EF90DF90C8 +:1010D000CF90BF90AF909F908F9008959F92AF92C6 +:1010E000BF92CF92DF92EF92FF920F931F93CF9315 +:1010F000DF937C01D42F122F902E00E06C01C60EDE +:10110000D11CC60ED11C86E5C80ED11CA42EB12C54 +:10111000ABE2AA0EB11CAA0CBB1CAE0CBF1CF601A4 +:1011200080819181DC01ED91FC910280F381E02DC1 +:10113000292D412F6D2F0995803EC9F4D1110BC087 +:1011400061E088EE0E948B0766E670E080E090E048 +:101150000E944A0514C0F50180819181DC01ED9166 +:10116000FC910284F385E02D612F099508C08D3034 +:1011700021F4033008F03FC014C081113FC0F601D4 +:1011800080819181DC01ED91FC910190F081E02D55 +:10119000292D412F6D2F0995C82F8D3051F4033023 +:1011A00050F464E670E080E090E00E944A050F5F32 +:1011B000B6CF882311F1D1110BC061E088EE0E94F7 +:1011C0008B0766E670E080E090E00E944A0511C05F +:1011D000ED2FF0E0BB96EE0FFF1FEE0DFF1D80819F +:1011E0009181DC01ED91FC910284F385E02D612F6A +:1011F00009958C2F03C08DE001C080E0DF91CF9175 +:101200001F910F91FF90EF90DF90CF90BF90AF9024 +:101210009F9008950F931F93CF93DF93182F062F5E +:10122000EA010E94780712601EBDFE01802F88230C +:1012300039F00DB407FEFDCF91919EBD8150F7CFDF +:10124000C00FD11D0DB407FEFDCF0E947604CE0164 +:10125000DF91CF911F910F9108952F923F924F925E +:101260005F926F927F928F929F92AF92BF92CF9236 +:10127000DF92EF92FF920F931F93CF93DF9300D0F3 +:1012800000D01F92CDB7DEB77D836C834A01690120 +:10129000FB01F1808FEF8F0D803408F067C00E9452 +:1012A00048052B013C01F8E84F0EF3E15F1E611C7D +:1012B000711CEC81FD81828180FD02C060E401C06F +:1012C00060E888EE0E948B07312C8F2D90E09A8386 +:1012D0008983C114D104B1F1E980FA80CE14DF040E +:1012E00008F47601EB82A8016E2D80E10E940A09C4 +:1012F0006E2D88E30E948B07EC81FD816081606226 +:1013000080EF0E948B0788EC0E947A0787FFFBCF53 +:1013100060E888EC0E948B0788EF0E947A078F7044 +:10132000382EA12CB12C212C332009F472C00E943C +:101330004805DC01CB0184199509A609B709B7FF57 +:1013400068C016C0332021F060E088E30E948B075C +:1013500088EF0E947A0785FB882780F9EC81FD8160 +:10136000928180FB90F99283832D58C08AED56C0FC +:10137000F6E03F1239C088EF0E947A0785FB882784 +:1013800080F991E08927EC81FD81928180FB90F9C1 +:10139000928390FD02C060E401C060E888EE0E9484 +:1013A0008B0760E088E30E948B07F801608180E191 +:1013B0000E948B076B8188E30E948B07EC81FD8183 +:1013C0006081606280EF0E948B0788EC0E947A0740 +:1013D00087FFFBCF60E888EC0E948B0788EF0E94B4 +:1013E0007A078F70382EA0CF2EE0321205C02394DA +:1013F00023E02212D6CFA8CF84E03812A5CFFFEF8A +:10140000AF1ABF0A8114910461F2A814B90449F615 +:101410009BCFCE18DF080E0D1F1D5BCF0F900F90D6 +:101420000F900F900F90DF91CF911F910F91FF9030 +:10143000EF90DF90CF90BF90AF909F908F907F9074 +:101440006F905F904F903F902F9008952F923F9212 +:101450004F925F926F927F928F929F92AF92BF92C4 +:10146000CF92DF92EF92FF920F931F93CF93DF9370 +:10147000CDB7DEB72A970FB6F894DEBF0FBECDBF4B +:101480001C016B015B834A835901D9016D907C90EB +:101490001197FB01F181F9831D921C92DB011296D9 +:1014A0008C9181FD02C060E101C060E288EE0E9483 +:1014B0008B078E2D90E0A0E0B0E08C839D83AE83FF +:1014C000BF8368862A813B81D6014C9160E0C101CF +:1014D0000E940B08F82EB6E08B1318C088EF0E940C +:1014E0007A0782958170E1E08E27D60112969C9151 +:1014F000129780FB91F912969C9391FD02C060E1D6 +:1015000001C060E288EE0E948B07DCCF811167C0CA +:1015100088EC0E947A0782FF60C080E30E947A070D +:10152000582E90E06816790608F45884F5018081F9 +:1015300091819301281B390B3A87298737FF02C015 +:101540001A861986852C912C89859A858816990684 +:1015500014F49A86898649840E94780798E09EBD93 +:101560000DB407FEFDCFF801442041F01EBC4A94A3 +:101570000DB407FEFDCF8EB58193F6CFA985BA8550 +:101580000A0F1B1F0E94760464E088EC0E948B0700 +:10159000F50180819181880E991E91828082F98166 +:1015A0005F1618F08614970470F088EF0E947A078F +:1015B00082958170D60112969C91129780FB91F9C9 +:1015C00012969C930CC0EE2009F47CCF6C817D8137 +:1015D0008E819F810E944A0575CF80EFF82E8F2D56 +:1015E0002A960FB6F894DEBF0FBECDBFDF91CF9124 +:1015F0001F910F91FF90EF90DF90CF90BF90AF9031 +:101600009F908F907F906F905F904F903F902F9022 +:1016100008952F923F924F925F926F927F928F9296 +:101620009F92AF92BF92CF92DF92EF92FF920F9371 +:101630001F93CF93DF93CDB7DEB761970FB6F894C2 +:10164000DEBF0FBECDBF3C01F42E322E202EC98A44 +:101650004EA05FA0C8A4D9A4188A1F861E861D8626 +:101660008E01035F1F4F9E01215F3F4F0E949E0727 +:10167000811196C039822A82EB8289898C83BE824D +:10168000AD8298868F82AE014F5F5F4F68E080E247 +:101690000E940A092D853E854F2D60E1C3010E94FD +:1016A0000B08E82E811178C0932D9078392EC11443 +:1016B000D10409F462C0EF85F8898281992309F485 +:1016C0004DC082608283540122242394A114B1046A +:1016D00009F458C05C864B864D855E856F85788998 +:1016E000E12C86019E01255F3F4FC3010E94260A1F +:1016F000E82EA6E08A130FC00F85188988EF0E9494 +:101700007A0785FB882780F98225F801928180FB82 +:1017100091F99283DBCF81113FC08AA59BA50097E9 +:10172000A1F0DC01ED91FC9111970190F081E02D89 +:10173000C4018A199B099A8789876B857C859E01DC +:10174000275F3F4FA601CD0109958B859C85A81A7F +:10175000B90A8415950508F0B9CF0FC0816082835E +:101760004D855E8586019201BF01C3010E942D094E +:10177000811116C02D853E8511C02D853E85311005 +:1017800005C00CC0E11008C02D853E8560EA4F2DD4 +:10179000C3010E940B0804C08E2D02C060E8F7CF81 +:1017A00061960FB6F894DEBF0FBECDBFDF91CF912B +:1017B0001F910F91FF90EF90DF90CF90BF90AF906F +:1017C0009F908F907F906F905F904F903F902F9061 +:1017D00008958F929F92AF92BF92CF92EF920F9304 +:1017E0001F931F921F921F930F933F932F934901B3 +:1017F000A12CB12CCC24C394E12C06E020E80E945B +:10180000090B0F900F900F900F900F900F901F915A +:101810000F91EF90CF90BF90AF909F908F900895D1 +:101820008F929F92AF92BF92CF92EF92FF920F93BF +:101830001F921F92FF92EF923F932F934901A12C89 +:10184000B12C22E0C22EE02E06E020E80E94090B17 +:101850000F900F900F900F900F900F900F91FF909F +:10186000EF90CF90BF90AF909F908F9008958F9200 +:101870009F92AF92BF92CF92EF920F93CF931F920E +:101880001F921F921F921F921F92812C912CA12CAC +:10189000B12CC12CE22E05E020E00E94090BC82FDC +:1018A0006CE271E080E090E00E944A050F900F909A +:1018B0000F900F900F900F908C2FCF910F91EF9072 +:1018C000CF90BF90AF909F908F9008950F931F93EC +:1018D000CF93DF938A3F3FEF930711F486ED2DC03E +:1018E000DC011696ED91FC911797EF2B09F1122F61 +:1018F000242FEC011A8740E00E94EE05082F882370 +:10190000C9F0682FCE010E944706009739F3FC0109 +:101910001483202F40E060E0CE010E94370C182F86 +:10192000882351F0602FCE010E94A706812F05C0A9 +:1019300087ED03C084ED01C080E0DF91CF911F915E +:101940000F9108952F923F924F925F926F927F92E4 +:101950008F929F92AF92BF92CF92DF92EF92FF92BF +:101960000F931F93CF93DF93CDB7DEB766970FB674 +:10197000F894DEBF0FBECDBF1B8A38E03C8B3CE342 +:101980003D8B8A3F3FEF930709F464C0522E342EFB +:10199000462E7C01DC011696CD90DC901797CE0187 +:1019A000439617969C938E9316971A962C938E01B6 +:1019B0000F5F1F4F22E130E040E060E0C7010E946E +:1019C000E90BF701D782C6828111A6C089849A8467 +:1019D0006B847C84FD81FE8B2E80670136E5C30E0F +:1019E000D11C560110E0D5018D919C910097F1F129 +:1019F000DC01ED91FC910084F185E02D09958111C8 +:101A000035C0F50180819181DC01ED91FC91008868 +:101A1000F189E02D622D0995882341F1F50180813E +:101A20009181DC01ED91FC910484F585E02DA30109 +:101A3000B4010995811110C0F50180819181DC010B +:101A4000ED91FC910684F785E02D6E890995811151 +:101A500003C00CC086ED60C0052D232D442D612FE1 +:101A6000C7010E946E08813D09F056C01F5FB2E0B9 +:101A7000AB0EB11C103109F0B6CF10E0F601808139 +:101A800091810097E1F1DC01ED91FC910084F185F9 +:101A9000E02D0995811133C0F60180819181DC012F +:101AA000ED91FC910088F189E02D622D0995882344 +:101AB000D9F0F60180819181DC01ED91FC910484E3 +:101AC000F585E02DA301B4010995811118C0F60137 +:101AD00080819181DC01ED91FC910684F785E02DF8 +:101AE0006E89099581110BC0052D232D442D612F81 +:101AF000C7010E946E08982F977F913D69F41F5F80 +:101B0000E2E0CE0ED11C103109F0B8CF252D432DC7 +:101B1000642DC7010E94660C66960FB6F894DEBF6E +:101B20000FBECDBFDF91CF911F910F91FF90EF902E +:101B3000DF90CF90BF90AF909F908F907F906F90ED +:101B40005F904F903F902F9008958F929F92AF9209 +:101B5000BF92CF92EF920F931F921F921F921F92EC +:101B60001F921F92812C912CA12CB12CC12CE22E02 +:101B700009E020E00E94090B0F900F900F900F904A +:101B80000F900F900F91EF90CF90BF90AF909F90DC +:101B90008F9008958F929F92AF92BF92CF92DF92D3 +:101BA000EF920F931F93CF93DF9300D000D0CDB768 +:101BB000DEB76C01590148011C821B821A8219820E +:101BC0008E010F5F1F4F9E012D5F3F4F0E949E07AA +:101BD000811109C049815A816B817C818401950101 +:101BE000C6010E94260A0F900F900F900F90DF9170 +:101BF000CF911F910F91EF90DF90CF90BF90AF905A +:101C00009F908F900895AF92BF92CF92DF92EF9204 +:101C1000FF920F931F93CF938C011D990EC088ECF8 +:101C20000E947A0785FF05C0C8010E94910460E206 +:101C300001C060E088EC0E948B0780918D018130AB +:101C400039F040F0823079F0833039F5C1E00CC0D2 +:101C500083E106C080917004807F8031F1F081E1E2 +:101C6000809370041AC0C0E080917004807F80313E +:101C7000A9F40E944805DC01CB0188539F4FAF4F68 +:101C8000BF4F80936C0490936D04A0936E04B09347 +:101C90006F0480E28093700401C0C0E0780186E5A3 +:101CA000E80EF11C6801A6E7CA0ED11C5701F50128 +:101CB000819191915F01009739F0DC01ED91FC91E8 +:101CC0000680F781E02D0995AC14BD0481F7809161 +:101CD0007004803409F43FC050F4803221F1803325 +:101CE000A1F1813109F082C0F60110820AC081356C +:101CF00009F458C0803809F46AC0803509F076C00C +:101D000039C0D7018D919D917D01009739F0DC019B +:101D1000ED91FC910480F581E02D0995EC14FD0412 +:101D200081F782E161C00E94480500916C04109126 +:101D30006D0420916E0430916F04DC01CB01801B97 +:101D4000910BA20BB30BB7FD51C061E088EE0E946E +:101D50008B0780E449C088EE0E947A0780FD46C068 +:101D600088ED0E947A07682F686088ED0E948B07D3 +:101D700080E53AC088EC0E947A0786FF37C081E58B +:101D8000809370040E944805DC01CB014496A11D9C +:101D9000B11D80936C0490936D04A0936E04B09376 +:101DA0006F0424C00E944805C0906C04D0906D045C +:101DB000E0906E04F0906F04DC01CB018C199D095A +:101DC000AE09BF09B7FD12C080E8809370042C2FC4 +:101DD00040E060E0C8010E94A20C882321F0823D0F +:101DE00029F080EA01C080E980937004CF911F91AF +:101DF0000F91FF90EF90DF90CF90BF90AF9008953C +:101E000080E0089580E0089581E00895FC018285D6 +:101E1000089581E0693009F080E00895CF93DF9361 +:101E2000EC018A819B81DC01ED91FC910480F581BC +:101E3000E02D6A8509958A85813439F4EA81FB8130 +:101E4000EA58FF4F8081846080831A861B861C8637 +:101E50001D861E861F86188A80E0DF91CF91089527 +:101E60008F929F92AF92BF92CF92EF920F93A42E38 +:101E7000B12CB22A1F921F921F921F921F921F9283 +:101E8000812C912CC12CE62E01E023E240E0FC01E4 +:101E90006285828193810E94090B0F900F900F90B1 +:101EA0000F900F900F900F91EF90CF90BF90AF9049 +:101EB0009F908F9008958F929F92AF92BF92CF92F2 +:101EC000EF920F93A62EB12C1F921F923F932F9348 +:101ED0005F934F934A01C12CE12C00E023EA40E0DC +:101EE000FC016285828193810E94090B0F900F9003 +:101EF0000F900F900F900F900F91EF90CF90BF9099 +:101F0000AF909F908F9008958F929F92AF92BF92C3 +:101F1000CF92EF920F93A42EB12CB22A1F921F9250 +:101F20001F921F921F921F92812C912CC12CE62E82 +:101F300003E023E240E0FC016285828193810E94FC +:101F4000090B0F900F900F900F900F900F900F9123 +:101F5000EF90CF90BF90AF909F908F9008952F9269 +:101F60003F924F925F926F927F928F929F92AF9229 +:101F7000BF92CF92DF92EF92FF920F931F93CF9376 +:101F8000DF93CDB7DEB7E8970FB6F894DEBF0FBE8C +:101F9000CDBFDC011A963C91311107C1122F242EBE +:101FA000362E3C01FC01C280D380D601ED91FC911C +:101FB0000190F081E02D60E0C60109957C01009759 +:101FC00009F4F5C0FC01A080B180A114B10409F4AA +:101FD000F0C04301F4E08F0E911CDC0111969C923D +:101FE0008E9214961C93FE0131962F018F0128E0EA +:101FF00030E040E060E0D30112968D919C91139700 +:102000000E94E90BF70114828111D9C08D818930BA +:1020100009F0D1C00981D601ED91FC910280F381D4 +:10202000E02D222D41E0632DC6010995F301828741 +:10203000882309F4C2C098859583282F40E060E08A +:10204000828193810E94370C182F882389F0D70151 +:10205000AD92BC92D601ED91FC910480F581E02D0A +:10206000D3011A966C91C6010995F3011286ABC093 +:10207000202F013208F020E2D701AD92BC9221114D +:102080000BC0940142E0F3016285828193810E943A +:102090001907811197C010C030E0820140E0D301E0 +:1020A0001A966C911A9712968D919C9113970E9493 +:1020B000E90B811187C0E5CF1F921F925F924F926B +:1020C0001F9288E08F9388E0882E912CA12CB12C50 +:1020D00099E2C92EE12C06E020EA40E0F301628596 +:1020E000828193810E94090B182F0F900F900F90FF +:1020F0000F900F900F90811166C08B81D3011B96BA +:102100008C931B97720100E028E030E040E01A96C3 +:102110006C911A9712968D919C9113970E94100CB6 +:10212000811150C02B813C8140E0F30162858281A6 +:1021300093810E94100C811145C0298130E0CE01AD +:1021400081967C0140E0D3011A966C911A97129601 +:102150008D919C9113970E94100C811133C02E8198 +:1021600040E0F3016285828193810E94A50D811177 +:1021700029C001E0D3011B968C91801740F020E02C +:10218000402F68E0C3010E94840F0F5FF3CFD3019B +:102190001296ED91FC911397EA58FF4F808184606D +:1021A000808381E050968C930EC019ED0CC016ED23 +:1021B0000AC017ED08C011ED06C014ED04C0F70108 +:1021C000B182A082182F812FE8960FB6F894DEBF57 +:1021D0000FBECDBFDF91CF911F910F91FF90EF9078 +:1021E000DF90CF90BF90AF909F908F907F906F9037 +:1021F0005F904F903F902F900895CF92DF92FF9283 +:102200000F931F93CF93DF9300D000D0CDB7DEB7ED +:102210008C01F62E19821A821B821C8220E0462F26 +:1022200061E10E94300F20E04F2D60E1C8010E9463 +:10223000300F20E04F2D64E0C8010E94840F83E03E +:10224000C82ED12C9E012F5F3F4F44E050E06F2DF0 +:10225000C8010E945B0F8823F1F020E04F2D64E15C +:10226000C8010E94300F20E04F2D60E1C8010E949C +:10227000300F64E170E080E090E00E944A050F902A +:102280000F900F900F90DF91CF911F910F91FF90C2 +:10229000DF90CF90089589819A81AB81BC819D7F29 +:1022A00083309140A041B105C1F264E670E080E066 +:1022B00090E00E944A0581E0C81AD10819F6CDCFF6 +:1022C000FC0187E791E091838083738362831286A8 +:1022D00013861486158616861786108A148288E05F +:1022E00085839CE3968391E09783808784E0818750 +:1022F00061157105B1F0DB01AA5ABF4F80E090E093 +:102300002D913D91232B49F48B96880F991FDB016A +:10231000A80FB91FED93FC930895019680319105A4 +:1023200079F70895EF92FF920F931F93CF938C014B +:10233000C62F7A01FA0180819181A281B381813017 +:10234000F3E09F07F1E0AF07B105D1F060F481152C +:10235000E1E09E07AE07B10571F181309140A140E7 +:10236000B10571F064C0833021E0920720E1A2073B +:10237000B105E1F183309340A041B105B9F157C0F7 +:1023800080917104811153C020E04C2F61E1C8019C +:102390000E94300F20E04C2F60E1C8010E94300FF6 +:1023A00020E04C2F64E0C8010E94840F81E08093FC +:1023B000710481EB3DC020E0462F61E1C8010E941D +:1023C000300F20E04C2F60E1C8010E94300F1092C6 +:1023D0007104F80162856770C770660F660F660F3B +:1023E0006C2B828193810E94360721C020E04C2F04 +:1023F00064E1C8010E94300F20E04C2F60E1C80169 +:102400000E94300F64E170E080E090E00E944A0595 +:10241000F8016285F70121812695217067704C2FA4 +:10242000F801828193810E94A20C1092710480E0D5 +:10243000CF911F910F91FF90EF900895CF92DF926F +:10244000EF920F931F93CF93DF93CDB7DEB72E9705 +:102450000FB6F894DEBF0FBECDBF6C0181E090E0F7 +:102460009E878D87E12C8E010F5F1F4F9E01235F9A +:102470003F4F41E0F6016285828193810E94CA0D3F +:10248000811151C002E011E089818023D1F01986C9 +:102490001A861B861C869E01275F3F4F44E050E052 +:1024A000612FC6010E945B0F81110BC0AE01475F17 +:1024B0005F4F612FC6010E949211813B99F18111FA +:1024C00032C0000F1F5F1830F9F611E0F601838566 +:1024D000811740F119861A861B861C869E01275F8C +:1024E0003F4F44E050E0612FC6010E945B0F811115 +:1024F00017C089859A85877091708130914081F4E9 +:102500008B859C8581609C878B87AE01475F5F4F81 +:10251000612FC6010E949211813B21F0811103C0FD +:102520001F5FD4CF80E02E960FB6F894DEBF0FBEAB +:10253000CDBFDF91CF911F910F91EF90DF90CF90A2 +:1025400008950F931F93CF93DF93FC0120892111EE +:1025500002C080E020C0EC010E9448050C851D856A +:102560002E853F85DC01CB01801B910BA20BB30BA9 +:10257000B7FDEFCFCE010E941E12182F0E94480512 +:10258000DC01CB018C599F4FAF4FBF4F8C879D878C +:10259000AE87BF87812FDF91CF911F910F91089553 +:1025A00080917E05089508950895CF93DF9320913B +:1025B0009B05243049F521E02093E90021E82150D2 +:1025C00059F03091E80035FD07C0EFE3F1E03197B5 +:1025D000F1F700C00000F3CF2091E80025FF14C000 +:1025E000EC0140E050E068E070E00E94D816809175 +:1025F000E8008E778093E80088E0FE01A6E7B5E06A +:1026000001900D928A95E1F7DF91CF910895CF93D4 +:10261000C0917404C1110BC00E94AD05643C7940A7 +:102620008105910520F081E080937404C1E08C2F36 +:10263000CF910895FF920F931F93CF93DF93D82FDD +:102640000FB607FE83C080919B05843081F0809196 +:10265000040190E001962091060130E0822393234B +:102660002091050130E08217930709F0CDC00E9448 +:102670000713811110C08091040190E00196209110 +:10268000060130E0822393232091050130E0821778 +:10269000930709F0B9C00E94A1058C01C091E9001F +:1026A000CF709091EC00892F817090FD80E8C82B4D +:1026B00082E08093E90085E0F82E8091EB0085FDB3 +:1026C00042C08091EB0080FF3EC08091EE0087FF0A +:1026D0003AC08091050190910401981709F457C000 +:1026E0009091E80095FF8EC0E0910201F091030106 +:1026F000E80FF11D20818F5F90910601892380935F +:1027000005012093F1008091E80085FDE2CF8091E2 +:10271000E80080FFDECF8091E8008E778093E800AC +:10272000F0920101D6CF8091040190E001962091B2 +:10273000060130E0822393232091050130E08217C7 +:10274000930709F44CC0CF70C093E9004091040195 +:10275000842F90E001962091060130E0822393239C +:102760002091050130E08217930709F450C0E091F1 +:102770000201F0910301E40FF11DD0838091040167 +:102780008F5F9091060189238093040140C080915E +:10279000E80085FF37C0D093F10021E03091F300CD +:1027A0008091F20090E0932B892B91F08091E800CA +:1027B00080FF0EC08091E80085FF03C01092F100F9 +:1027C000F9CF8091E8008E778093E800F0920101C4 +:1027D000222309F4A8CFCF70C093E90018C08091DC +:1027E0000101882309F4AFCF0E94A1059C01801745 +:1027F000910711F4890161CF90910101915090935B +:102800000101F8CF20E0CACF40910401B0CF80E0B1 +:10281000DF91CF911F910F91FF90089508958091BE +:102820009A05811104C00E9442190C949F190895C1 +:1028300010929A050895089542E061EC81E00E94AB +:10284000511642E261EC82E00C94511680919D0594 +:10285000833009F453C030F4813071F0823009F4D0 +:10286000BAC008958A3009F4A6C08B3009F478C044 +:10287000893009F0C8C020C080919C05813A09F0D8 +:10288000C2C08091E800877F8093E8008091A00516 +:102890009091A105892B21F468E086E795E003C0BB +:1028A00060E080E090E070E00E9423178091E800F3 +:1028B0008B778093E800089580919C05813209F020 +:1028C000A2C08091A0059091A105892B09F09BC021 +:1028D0008091E800877F8093E8008091E80082FD86 +:1028E00005C080919B058111F8CF8DC08091F100CA +:1028F00080937E058091E8008B7781C080919C0554 +:10290000813A09F080C08091A0059091A105892BA2 +:10291000A1F48091E800877F8093E8008091E8002F +:1029200080FFFCCF809112018093F1008091E8003C +:102930008E778093E8000E9486168091A005909182 +:10294000A105892B09F05FC08091E800877F809303 +:10295000E8008091E80080FFFCCF809111014AC01F +:1029600080919C05813209F04EC08091A005909124 +:10297000A105892B69F48091E800877F8093E800A6 +:102980000E94861680919E05809312010E944C1C25 +:102990008091A0059091A105892BA9F58091E8006F +:1029A000877F8093E8000E94861680919E05809321 +:1029B00011010C944C1C80919C05813221F5809171 +:1029C000E800877F8093E8000E94861680919F052B +:1029D00080937F05089580919C05813AA1F48091B0 +:1029E000E800877F8093E8008091E80080FFFCCFBB +:1029F00080917F058093F1008091E8008E7780932D +:102A0000E8000C948616089580917E0580937504E5 +:102A100010927E050E945B1B0C944C1C0C940415B8 +:102A20000E94791E80919905882329F00E94A21E98 +:102A300081110C943B1608950E94AA1E8091750482 +:102A400080937E0508950C941C150895CF9384B748 +:102A5000877F84BF0FB6F894A89580916000886145 +:102A600080936000109260000FBE90E080E80FB687 +:102A7000F89480936100909361000FBE8AE193E126 +:102A80000E94111E87E091E00E94D41A83E891E031 +:102A90000E94A9010E940E050E941C1B0E9442195F +:102AA0000E949F1978940E941E1B80919B05843080 +:102AB00019F00E942515F9CF81E791E00E94A90144 +:102AC0000E9421048FE591E00E94A901C2E080915B +:102AD0009B05853019F40E941015F9CF0E94221B26 +:102AE0002091E4003091E50080917204909173048C +:102AF0002817390761F38091E4009091E5009093E5 +:102B00007304809372040E940713882301F3809159 +:102B10009B058430E1F68091E9008F702091EC00F4 +:102B2000922F917020FD90E8892BC093E90090913D +:102B3000EB0090FF43C09091EE0097FF3FC0909153 +:102B4000050120910401291709F12091E80025FFD2 +:102B50001DC0E0910201F0910301E90FF11D3081E8 +:102B60009F5F209106019223909305013093F1001D +:102B70009091E80095FDE3CF9091E80090FFDFCFC2 +:102B80009091E8009E779093E800D9CF9091F30060 +:102B90002091F20030E0392B232B81F09091E80056 +:102BA00090FF0CC09091E80095FF03C01092F100D7 +:102BB000F9CF9091E8009E779093E8008F70809312 +:102BC000E90085CF292F332723303105C9F060F480 +:102BD0002130310581F02230310509F044C082E412 +:102BE00090E026ED31E043C021323105E1F02232A0 +:102BF000310549F138C082E190E028E132E037C088 +:102C000099278130910549F028F0029761F5EAE9AA +:102C1000F1E005C0E2EDF1E002C0E8ECF1E0849102 +:102C200090E09F0124C06115710541F0613071058C +:102C3000D1F489E090E021E032E019C089E090E031 +:102C400028EE31E014C06115710541F06130710565 +:102C500051F482E290E02AE232E009C080E490E0A0 +:102C60002CE432E004C080E090E020E030E0FA01A3 +:102C700031832083089580E189BD82E189BD09B453 +:102C800000FEFDCF8091D8008F7D8093D800809189 +:102C9000E00082608093E0008091E00081FDFCCF45 +:102CA0000895982F973068F59093E900981739F0B8 +:102CB0007091EC002091ED005091F00003C0242FA2 +:102CC000762F50E021FD02C09F5FECCF3091EB00EA +:102CD0003E7F3093EB003091ED003D7F3093ED006F +:102CE0003091EB0031603093EB007093EC00209357 +:102CF000ED005093F0002091EE0027FDE5CF80E03D +:102D000008958F708093E90081E0089580919C057B +:102D100087FF11C08091E80082FD05C080919B056E +:102D20008111F8CF11C08091E8008B770BC08091A2 +:102D30009B05882349F08091E80080FFF8CF8091BF +:102D4000E8008E778093E80008952091E4003091A8 +:102D5000E50095E64091EC00842F817040FF23C090 +:102D60008091E80080FD1DC080919B05882399F02B +:102D7000853099F08091EB0085FD11C04091E40011 +:102D80005091E5002417350729F3915011F09A016D +:102D9000E1CF84E0089582E0089583E0089581E022 +:102DA000089580E008954091E80042FFDDCF089546 +:102DB000CF92DF92EF92FF920F931F93CF93DF9307 +:102DC000EC018B017A010E94A516811133C0E11438 +:102DD000F10439F0F70180819181081B190BC80FAC +:102DE000D91FC12CD12C0115110519F18091E800D2 +:102DF00085FD16C08091E8008E778093E800E1148D +:102E0000F10449F0F70180819181C80ED91ED18269 +:102E1000C08285E00FC00E94A516882321F30AC056 +:102E200089918093F10001501109FFEFCF1ADF0A59 +:102E3000DACF80E0DF91CF911F910F91FF90EF905B +:102E4000DF90CF9008952091A2053091A305261719 +:102E5000370748F06115710539F42091E8002E77A5 +:102E60002093E80001C0B901FC0120E06115710563 +:102E700079F180919B058823F1F18530F1F1809102 +:102E8000E80083FD3CC08091E80082FD2EC0809167 +:102E9000E80080FFEBCF2091F3008091F20090E0FA +:102EA000922B6115710551F08830910538F421910C +:102EB0002093F100615071090196F3CF21E008974A +:102EC00009F020E08091E8008E778093E800CECF73 +:102ED0002111CFCF0AC080919B05882361F08530F6 +:102EE00061F08091E80083FD0AC08091E80082FFD4 +:102EF000F2CF80E0089582E0089583E0089581E0B4 +:102F000008952091A2053091A3052617370748F0B0 +:102F10006115710539F42091E8002E772093E800BF +:102F200001C0B901FC0120E06115710591F18091AA +:102F30009B05882309F440C0853009F43FC0809187 +:102F4000E80083FD3DC08091E80082FD2FC08091A4 +:102F5000E80080FFE9CF2091F3008091F20090E03B +:102F6000922B6115710559F08830910540F4249138 +:102F70002093F1003196615071090196F2CF21E062 +:102F8000089709F020E08091E8008E778093E800B0 +:102F9000CBCF2111CCCF0AC080919B05882361F053 +:102FA000853061F08091E80083FD0AC08091E800DF +:102FB00082FFF2CF80E0089582E0089583E00895D3 +:102FC00081E008951F93CF93DF93CDB7DEB7AA9723 +:102FD0000FB6F894DEBF0FBECDBFECE9F5E08091EF +:102FE000F100819325E0E43AF207C9F70E94261424 +:102FF0008091E80083FF2EC180919C0590919D05F2 +:10300000492F50E04A30510508F024C1FA01EA5A2C +:10301000FF4F0C942821803821F0823809F01AC122 +:1030200008C08091980590919905992389F0826054 +:103030000FC08091A0058F70873008F00BC180937E +:10304000E9008091EB0085FB882780F91092E90068 +:103050009091E800977F9093E8008093F1001092A0 +:10306000F100D1C0282F2D7F09F0F4C0882319F07A +:10307000823061F0EFC080919E05813009F0EAC096 +:10308000933009F080E0809399052EC080919E05D1 +:1030900081112AC08091A0058F702FEF280F263054 +:1030A00008F0D8C08093E9002091EB0020FF1CC0FD +:1030B000933021F48091EB00806214C09091EB007A +:1030C00090619093EB0021E030E0A90102C0440F31 +:1030D000551F8A95E2F74093EA001092EA0080912A +:1030E000EB0088608093EB001092E9008091E8008B +:1030F000877F8093E8000E948616ACC08111AAC029 +:1031000010919E051F778091E3008078812B80933A +:10311000E3008091E800877F8093E8000E94861694 +:103120008091E80080FFFCCF8091E300806880936D +:10313000E300111102C082E001C083E080939B058F +:1031400089C08058823008F085C080919E0590919A +:103150009F058C3D53E0950779F583E08A838AE2E9 +:1031600089834FB7F894DE01139620E03EE051E2E8 +:10317000E32FF0E050935700E49120FF03C0E29565 +:10318000EF703F5FEF708E2F90E0EA3010F0C7963F +:1031900001C0C0968D939D932F5F243149F74FBF97 +:1031A0008091E800877F8093E8006AE270E0CE01BA +:1031B00001960E94231716C06091A0057091A10589 +:1031C000AE014F5F5F4F0E94E215BC01892B09F4ED +:1031D00041C09091E800977F9093E80089819A819F +:1031E0000E9481178091E8008B778093E80032C0BD +:1031F000803881F58091E800877F8093E800809196 +:1032000097058093F1008091E8008E7772CF81114D +:1032100021C080919E0590919F0599270297D4F433 +:103220008091E800877F8093E80080919E058093DD +:1032300097050E94861680919705811106C080919E +:10324000E30087FD02C081E001C084E080939B051C +:103250000E941C148091E80083FF0AC08091E8005E +:10326000877F8093E8008091EB0080628093EB0081 +:10327000AA960FB6F894DEBF0FBECDBFDF91CF91F7 +:103280001F9108950E94B0190E94B819E0EEF0E075 +:10329000808181608083E8EDF0E080818F7780839A +:1032A00019BCA7EDB0E08C918E7F8C9380818F7ECE +:1032B000808310929A0508950F931F93CF93DF9305 +:1032C0000E94B0190E94B819C8EDD0E088818F77AC +:1032D000888388818068888388818F7D888319BCF2 +:1032E00010929B05109297051092990510929805DF +:1032F00000EE10E0F80180818B7F808388818160FF +:10330000888342E060E080E00E945116E1EEF0E048 +:1033100080818E7F8083E2EEF0E080818160808317 +:10332000808188608083F80180818E7F808388819E +:1033300080618883DF91CF911F910F910895E8ED0F +:10334000F0E080818F7E8083E7EDF0E08081816016 +:10335000808384E082BF81E080939A050C945C199D +:10336000E8EDF0E080818E7F80831092E200089586 +:103370001092DA001092E10008951F920F920FB69A +:103380000F9211242F933F934F935F936F937F93EB +:103390008F939F93AF93BF93EF93FF938091E1003F +:1033A00082FF0BC08091E20082FF07C08091E100A4 +:1033B0008B7F8093E1000E94D31A8091DA0080FF16 +:1033C0001FC08091D80080FF1BC08091DA008E7FE3 +:1033D0008093DA008091D90080FF0DC080E189BD23 +:1033E00082E189BD09B400FEFDCF81E080939B0599 +:1033F0000E940F1405C019BC10929B050E9418145E +:103400008091E10080FF19C08091E20080FF15C02B +:103410008091E2008E7F8093E2008091E2008061E3 +:103420008093E2008091D80080628093D80019BC1C +:1034300085E080939B050E940E158091E10084FF3A +:1034400030C08091E20084FF2CC080E189BD82E120 +:1034500089BD09B400FEFDCF8091D8008F7D809397 +:10346000D8008091E1008F7E8093E1008091E2009E +:103470008F7E8093E2008091E20081608093E20081 +:1034800080919705882311F084E007C08091E300C4 +:1034900087FD02C081E001C083E080939B050E940C +:1034A00023158091E10083FF29C08091E20083FF12 +:1034B00025C08091E100877F8093E10082E08093C6 +:1034C0009B05109297058091E1008E7F8093E1002B +:1034D0008091E2008E7F8093E2008091E200806123 +:1034E0008093E20042E060E080E00E94511680910B +:1034F000F00088608093F0000E941B14FF91EF9110 +:10350000BF91AF919F918F917F916F915F914F91FB +:103510003F912F910F900FBE0F901F9018951F9203 +:103520000F920FB60F9211242F933F934F935F93F7 +:103530006F937F938F939F93AF93BF93CF93DF93BB +:10354000EF93FF93C091E900CF708091EC00D82FEA +:10355000D17080FDD0E81092E9008091F000877F63 +:103560008093F00078940E94E2171092E900809115 +:10357000F00088608093F000CD2BCF70C093E900FD +:10358000FF91EF91DF91CF91BF91AF919F918F917B +:103590007F916F915F914F913F912F910F900FBE4F +:1035A0000F901F901895089590938505809384053A +:1035B0000895E0918405F0918505309721F0019000 +:1035C000F081E02D099480E00895E0918405F09168 +:1035D0008505309721F00280F381E02D099408954C +:1035E00020918205309183052817390771F0909357 +:1035F000830580938205E0918405F09185053097DD +:1036000021F00680F781E02D09940895209180052E +:10361000309181052817390771F0909381058093C7 +:103620008005E0918405F0918505309721F00084B4 +:10363000F185E02D099408950C945C1B0E94980577 +:103640000C942004CF93DF9300D000D01F92CDB70D +:10365000DEB70E9428048FEF89838A831B820E9431 +:10366000A1058160782F9D838C8349815A816B816C +:103670008D810E94FC1C0E942A040E94D91A9091FC +:103680008605891769F00E94D91A809386050F90E4 +:103690000F900F900F900F90DF91CF910C94751EAB +:1036A0000F900F900F900F900F90DF91CF91089592 +:1036B00008950C94581B089508950895089588233B +:1036C00009F4BBC09CEF980F913A18F40E947F1D3B +:1036D0000DC090E2980F983058F4877091E001C0C7 +:1036E000990F8A95EAF7892F0E94BA1D0C94EB1D59 +:1036F0009BE5980F933070F4853A29F0863A31F0C3 +:1037000083E890E005C081E890E002C082E890E0A4 +:103710000C94F01A98E5980F973108F08EC0883A0B +:1037200009F445C0893A09F445C08A3A09F445C00C +:103730008B3A09F445C08C3A09F445C08D3A09F436 +:1037400045C08E3A09F445C08F3A09F445C0813B23 +:1037500009F445C0803B09F445C0823B09F445C0EB +:10376000833B09F445C0843B09F445C0853B09F41B +:1037700045C0863B09F445C0873B09F445C0883BFA +:1037800009F445C0893B09F445C08A3B09F445C0AA +:103790008B3B09F445C08C3B09F445C08D3B09F4D3 +:1037A00045C08E3B09F445C080E090E044C082EE05 +:1037B00090E041C089EE90E03EC08AEE90E03BC0D0 +:1037C00085EB90E038C086EB90E035C083EB90E06D +:1037D00032C084EB90E02FC087EB90E02CC08CECE3 +:1037E00090E029C08DEC90E026C083E891E023C0F2 +:1037F0008AE891E020C082E991E01DC084E991E06F +:103800001AC081E292E017C083E292E014C084E221 +:1038100092E011C085E292E00EC086E292E00BC019 +:1038200087E292E008C08AE292E005C08FE690E06D +:1038300002C080E790E00C94061B0895882329F1CC +:103840009CEF980F913A18F40E949C1D0DC090E2D5 +:10385000980F983058F4877091E001C0990F8A95BD +:10386000EAF7892F0E94C01D0C94EB1D9BE5980F71 +:10387000933020F480E090E00C94F01A885A87315D +:1038800020F480E090E00C94061B08950E94D71D60 +:103890000E94AC1D0C94EB1D0E94C71D0C94461C8D +:1038A000EF92FF920F931F93CF93DF9300D000D03E +:1038B0001F92CDB7DEB78C010E94771E811190C098 +:1038C00085E0F801DE01119601900D928A95E1F7ED +:1038D000F80140815181238134812115310531F076 +:1038E0005F3F31F481E04F3F19F403C081E001C034 +:1038F00080E080FD75C0F801E28049835A83EB8245 +:10390000722F3D832C836E2D8D810E94391DF82EE0 +:10391000492F4F70892F82958F708E30B1F108F04A +:1039200050C0823008F05CC0907F142F11F01295C7 +:10393000107FEE20A9F0112329F0812F0E94CA1DCB +:103940000E94EB1D8F2D0F900F900F900F900F90F6 +:10395000DF91CF911F910F91FF90EF900C945F1B1F +:103960008F2D0E941E1C1123D9F1812F0E94D01D82 +:103970000F900F900F900F900F90DF91CF911F91AC +:103980000F91FF90EF900C94EB1DF11029C0EE20E9 +:1039900039F10E944C1CFFEF20E782E0F1502040FB +:1039A0008040E1F700C000000F900F900F900F9043 +:1039B0000F90DF91CF911F910F91FF90EF900C949A +:1039C000D71E6F2DC8010F900F900F900F900F9082 +:1039D000DF91CF911F910F91FF90EF900C94F61E05 +:1039E0000F900F900F900F900F90DF91CF911F913C +:1039F0000F91FF90EF900895CF93DF93CDB7DEB78F +:103A00002A970FB6F894DEBF0FBECDBF942F4E831A +:103A1000252F5F83688779878A8749855A85452B53 +:103A200031F02F3F31F481E09F3F19F403C081E072 +:103A300001C080E080FD07C04E815F816885798587 +:103A40008A850E94661E85E0FE013696DE0111968B +:103A500001900D928A95E1F7CE0101960E94501CCB +:103A60002A960FB6F894DEBF0FBECDBFDF91CF917F +:103A700008950F931F93CF93DF9300D000D01F9230 +:103A8000CDB7DEB7042F49835A836B837C838D8344 +:103A90002C813D81232B31F05F3F31F481E04F3F9A +:103AA00019F403C081E001C080E080FF03C080E022 +:103AB00090E01BC08B8110E0882379F0609187052E +:103AC000709188058091890590918A050E94161E43 +:103AD000F801E957FA4F808304C0F801E957FA4F1B +:103AE000808169817A810E94061F0F900F900F904C +:103AF0000F900F90DF91CF911F910F91089520911A +:103B0000130130911401F90132969FEF40E0519179 +:103B1000851789F09F3F19F4511101C0942F4F5F11 +:103B20004630A9F79F3F39F0F901E90FF11D97FDE4 +:103B3000FA95828308950895E0911301F09114019C +:103B40009F012A5F3F4F9281891301C012823196F3 +:103B5000E217F307C1F7089581E090E0E0911301C7 +:103B6000F0911401E80FF91F108201968830910539 +:103B7000A9F7089590919505892B8093950508954F +:103B800080959091950589238093950508951092CD +:103B90009505089590919405892B80939405089537 +:103BA00080959091940589238093940508951092AF +:103BB000940508958091130190911401FC013196B0 +:103BC0009C01285F3F4F80E0919191118F5FE21738 +:103BD000F307D1F70895E0911301F091140180915A +:103BE00095058083E0911301F091140190818091FB +:103BF0009405892B808380918B05882361F0E09167 +:103C00001301F09114019081892B80830E94DA1DA9 +:103C1000811110928B0580911301909114010C94E5 +:103C2000E51A90938B0180938A010895CF92DF92D9 +:103C3000EF92FF926C01EE24FF24C114D104E10441 +:103C4000F10421F0C701B60120E101C020E0C72E38 +:103C5000D82EE92EFF24C114D104E104F10419F097 +:103C6000285FC701B6016B017C0154E0F694E7942C +:103C7000D794C7945A95D1F7C114D104E104F10443 +:103C800019F02C5FC701B6016B017C0142E0F6948C +:103C9000E794D794C7944A95D1F7C114D104E104AD +:103CA000F10419F02E5FC701B601DC01CB01B69516 +:103CB000A79597958795892B8A2B8B2B09F02F5FDA +:103CC000822FFF90EF90DF90CF900895CF93DF93F6 +:103CD00000D000D01F92CDB7DEB70F900F900F909D +:103CE0000F900F90DF91CF9108950C94591B80E0B5 +:103CF000089580919B05843021F11092960520E46F +:103D000088E190E00FB6F894A895809360000FBE0C +:103D10002093600083B7817F846083BF83B7816015 +:103D200083BF7894889583B78E7F83BF0FB6F8944E +:103D3000A895809160008861809360001092600077 +:103D40000FBE08950E945D1B0E9428040E945E1B06 +:103D500080E008950E945B1B0C944C1C1F920F92F4 +:103D60000FB60F9211248F939F93AF93BF938091BF +:103D70009605811113C08091680490916904A09107 +:103D80006A04B0916B044196A11DB11D8093680433 +:103D900090936904A0936A04B0936B04BF91AF91B0 +:103DA0009F918F910F900FBE0F901F9018950E94BA +:103DB0004219F89487E797E79093010880930008E9 +:103DC00087E090EBDC018093A4059093A505A09378 +:103DD000A605B093A7059CE088E10FB6F894A895D6 +:103DE000809360000FBE90936000FFCF0895E62F90 +:103DF000F0E0E15AFE4F84910895E82FF0E0EE0FD5 +:103E0000FF1FE352F0408591949108950E94F71EA0 +:103E100090E4980F903218F40E94FD1E08958F3B95 +:103E200050F4883A48F5853AD0F48430A8F48130CB +:103E300009F4B2C0AEC0883E40F4803E68F48F3BC7 +:103E400009F0A7C020E030EEA9C0803F08F4A1C06F +:103E5000282F30E03065A2C0282F30E09FC0853A7F +:103E600029F0863A31F023E830E498C021E830E4C4 +:103E700095C022E830E492C0883A09F445C0893AF6 +:103E800009F445C08A3A09F445C08B3A09F445C0A3 +:103E90008C3A09F445C08D3A09F445C08E3A09F4CC +:103EA00045C08F3A09F445C0813B09F445C0803BC9 +:103EB00009F445C0823B09F445C0833B09F445C081 +:103EC000843B09F445C0853B09F445C0863B09F4B1 +:103ED00045C0873B09F445C0883B09F445C0893B90 +:103EE00009F445C08A3B09F445C08B3B09F445C041 +:103EF0008C3B09F445C08D3B09F445C08E3B09F469 +:103F000045C020E034E44AC022EE34E447C029EE44 +:103F100034E444C02AEE34E441C025EB34E43EC02E +:103F200026EB34E43BC023EB34E438C024EB34E428 +:103F300035C027EB34E432C02CEC34E42FC02DEC38 +:103F400034E42CC023E835E429C02AE835E426C04F +:103F500022E935E423C024E935E420C021E236E437 +:103F60001DC023E236E41AC024E236E417C025E27D +:103F700036E414C026E236E411C027E236E40EC06F +:103F80002AE236E40BC02FE634E408C020E734E42C +:103F900005C020E030E002C021E030E0C901089512 +:103FA0000E94412008F481E008950E94952088F045 +:103FB0009F5798F0B92F9927B751B0F0E1F0660FED +:103FC000771F881F991F1AF0BA95C9F714C0B1302E +:103FD00091F00E94AF20B1E008950C94AF20672FBC +:103FE000782F8827B85F39F0B93FCCF3869577955D +:103FF0006795B395D9F73EF4909580957095619546 +:104000007F4F8F4F9F4F0895E89409C097FB3EF470 +:1040100090958095709561957F4F8F4F9F4F992315 +:10402000A9F0F92F96E9BB279395F6958795779593 +:104030006795B795F111F8CFFAF4BB0F11F460FF53 +:104040001BC06F5F7F4F8F4F9F4F16C0882311F0AB +:1040500096E911C0772321F09EE8872F762F05C0BF +:10406000662371F096E8862F70E060E02AF09A955A +:10407000660F771F881FDAF7880F9695879597F94F +:104080000895990F0008550FAA0BE0E8FEEF1616E9 +:104090001706E807F907C0F012161306E407F5073C +:1040A00098F0621B730B840B950B39F40A2661F0B0 +:1040B000232B242B252B21F408950A2609F4A14053 +:1040C000A6958FEF811D811D089597F99F6780E860 +:1040D00070E060E008959FEF80EC089500240A945A +:1040E0001616170618060906089500240A941216D3 +:1040F0001306140605060895092E0394000C11F406 +:10410000882352F0BB0F40F4BF2B11F460FF04C0B2 +:104110006F5F7F4F8F4F9F4F089557FD9058440F0B +:10412000551F59F05F3F71F04795880F97FB991F16 +:1041300061F09F3F79F087950895121613061406D3 +:10414000551FF2CF4695F1DF08C016161706180660 +:10415000991FF1CF86957105610508940895E8943B +:10416000BB2766277727CB0197F908950E94412046 +:1041700008F48FEF08950E94CE200C947C200E94BA +:104180006E2038F00E94752020F0952311F00C94D9 +:1041900065200C946B2011240C94B0200E948D207B +:1041A00070F3959FC1F3950F50E0551F629FF0018A +:1041B000729FBB27F00DB11D639FAA27F00DB11DA3 +:1041C000AA1F649F6627B00DA11D661F829F22272C +:1041D000B00DA11D621F739FB00DA11D621F839FB3 +:1041E000A00D611D221F749F3327A00D611D231F89 +:1041F000849F600D211D822F762F6A2F11249F57D7 +:1042000050409AF0F1F088234AF0EE0FFF1FBB1FD9 +:10421000661F771F881F91505040A9F79E3F510598 +:1042200080F00C9465200C94B0205F3FE4F3983E3E +:10423000D4F3869577956795B795F795E7959F5F42 +:10424000C1F7FE2B880F911D9695879597F90895D4 +:10425000EE0FFF1F0590F491E02D0994F894FFCF25 +:10426000010576040000FFD012D512D3120E14D42B +:104270001201018C05556E6B6E6F776E20484944B4 +:10428000204465736320547970653A00556E6B6EF7 +:104290006F776E204465736320547970653A00200F +:1042A0006C656E00696456656E646F720069645077 +:1042B000726F64756374000000000026052C0522EF +:1042C0000525051C051F051F05000000004706EE1B +:1042D00005A70600000000AF0F000F0E0FA1120689 +:0A42E0000FFD10020F090F040F007C +:00000001FF diff --git a/converter/usb_desc_dump/config.h b/converter/usb_desc_dump/config.h new file mode 100644 index 00000000..80de3a28 --- /dev/null +++ b/converter/usb_desc_dump/config.h @@ -0,0 +1,52 @@ +/* +Copyright 2012 Jun Wako + +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 2 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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x005B +#define DEVICE_VER 0x0814 +#define MANUFACTURER TMK +#define PRODUCT USB Descriptor Dumper + + +#define DESCRIPTION Product from TMK keyboard firmware project + + +/* matrix size */ +#define MATRIX_ROWS 0 +#define MATRIX_COLS 0 + +/* key combination for command */ +#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) + + +// Disable power saving in USB suspend loop but remote wakeup is still valid. +// This allows keep USB::Task() going during suspend without power down time delay. +//#define NO_SUSPEND_POWER_DOWN + + +// Disable USB startup wait, which can delays starting UHS2 Task() for 350-600ms. +//#define NO_USB_STARTUP_WAIT_LOOP + +// Disable USB suspend loop, which blocks UHS2 Task() while power saving. +// Note that this also disables power saving and remote wakeup from keyboard completely. +//#define NO_USB_SUSPEND_LOOP + +#endif diff --git a/converter/usb_desc_dump/desc_dump.cpp b/converter/usb_desc_dump/desc_dump.cpp new file mode 100644 index 00000000..89e0ddfa --- /dev/null +++ b/converter/usb_desc_dump/desc_dump.cpp @@ -0,0 +1,230 @@ +/* +Copyright 2021 Jun Wako + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +/* + * USB Host Shield HID keyboards + */ +#include "Usb.h" +#include "usbhub.h" +#include "usbhid.h" + +#include "timer.h" +#include "matrix.h" +#include "keymap.h" +#include "hook.h" +// This should be placed after Host Shield lib headers to override +#include "print.h" + + +USB Usb; +USBHub hub1(&Usb); + + +#define BUF_SIZE 256 +uint8_t buf[BUF_SIZE]; + +#define RBUF_SIZE 256 +uint8_t rbuf[RBUF_SIZE]; + + +void printHEX(uint8_t hex) +{ + xprintf("%02X", hex); +} + +void printHEX(uint16_t hex) +{ + xprintf("%02X", hex>>8); + xprintf("%02X", hex); +} + +void printVal(const char* name, uint8_t hex) +{ + xprintf("%s:%02X\r\n", name, hex); +} + +void printVal(const char* name, uint16_t hex) +{ + xprintf("%s:%04X\r\n", name, hex); +} + +void printError(uint8_t rcode) +{ + xprintf("\r\nERROR:%02X\r\n", rcode); +} + +void dumpBuf(int len, uint8_t* buf) +{ + for (int i = 0; i < len; i++) { + if (i % 16) + print(" "); + else if (i != 0) + print("\r\n"); + xprintf("%02X ", buf[i]); + } + print("\r\n"); +} + +uint8_t dumpReportDesc(UsbDevice *pdev, uint16_t iface, uint16_t len) +{ + uint8_t rcode = 0; + Usb.ctrlReq(pdev->address.devAddress, 0x00, bmREQ_HID_REPORT, USB_REQUEST_GET_DESCRIPTOR, 0x00, + HID_DESCRIPTOR_REPORT, iface, len, RBUF_SIZE, rbuf, NULL); + if (rcode) return rcode; + dumpBuf(len, rbuf); + return rcode; +} + +void scanConfigDesc(UsbDevice *pdev, uint16_t tl, uint8_t* pB) +{ + uint8_t iface = 0; + while (pB < buf + tl) { + switch (*(pB+1)) { + case USB_DESCRIPTOR_DEVICE: + break; + case USB_DESCRIPTOR_CONFIGURATION: + break; + case USB_DESCRIPTOR_STRING: + break; + case USB_DESCRIPTOR_ENDPOINT: + break; + case USB_DESCRIPTOR_INTERFACE: { + USB_INTERFACE_DESCRIPTOR *pI = (USB_INTERFACE_DESCRIPTOR *)pB; + iface = pI->bInterfaceNumber; + break; + } + case HID_DESCRIPTOR_HID: { + USB_HID_DESCRIPTOR *pH = (USB_HID_DESCRIPTOR *)pB; + xprintf("\r\nReport%d: len:%04X\r\n", iface, pH->wDescriptorLength); + if (pH->bDescrType == HID_DESCRIPTOR_REPORT) { + dumpReportDesc(pdev, iface, pH->wDescriptorLength); + } else { + printVal("Unknown HID Desc Type:", pH->bDescrType); + } + break; + } + default: + printVal("Unknown Desc Type:", *(pB+1)); + return; + } + pB += *pB; + } +} + +uint8_t dumpConfigDesc(UsbDevice *pdev, uint8_t numConf) +{ + uint8_t rcode = 0; + for (uint8_t i = 0; i < numConf; i++) { + xprintf("\r\nConfig%d:", i); + + rcode = Usb.getConfDescr(pdev->address.devAddress, 0, sizeof(USB_CONFIGURATION_DESCRIPTOR), i, buf); + if (rcode) return rcode; + USB_CONFIGURATION_DESCRIPTOR *pC = (USB_CONFIGURATION_DESCRIPTOR *)&buf; + uint16_t tl = pC->wTotalLength; + printVal(" len", tl); + + rcode = Usb.getConfDescr(pdev->address.devAddress, 0, (tl < BUF_SIZE ? tl : BUF_SIZE), i, buf); + if (rcode) return rcode; + dumpBuf(tl, buf); + + scanConfigDesc(pdev, tl, buf); + } + return rcode; +} + +void dumpDescriptors(UsbDevice *pdev) +{ + uint8_t rcode = 0; + + xprintf("\r\nAddress:%02X\r\n", pdev->address.devAddress); + xprintf("lowspeed:%02X\r\n", pdev->lowspeed); + + // + // Device Descriptor + // + rcode = Usb.getDevDescr(pdev->address.devAddress, 0, sizeof(USB_DEVICE_DESCRIPTOR), buf); + if (rcode) { printError(rcode); } + USB_DEVICE_DESCRIPTOR *pD = (USB_DEVICE_DESCRIPTOR *)&buf; + printVal("idVendor", pD->idVendor); + printVal("idProduct", pD->idProduct); + print("\r\nDevice Descriptor:\r\n"); + dumpBuf(sizeof(USB_DEVICE_DESCRIPTOR), buf); + + + // + // Configuration Descriptor + // + uint8_t numConf = pD->bNumConfigurations; + rcode = dumpConfigDesc(pdev, numConf); + if (rcode) { printError(rcode); } + + Usb.GetAddressPool().FreeAddress(pdev->address.devAddress); + return; +} + + + + + +uint16_t timer; +void matrix_init(void) { +} + +void hook_early_init(void) { + Usb.Init(); +} + +void hook_late_init(void) { + timer = timer_read(); +} + +uint8_t matrix_scan(void) { + return 1; +} + +void hook_keyboard_loop(void) { + static bool waiting = true; + static uint8_t usb_state = 0; + + + Usb.Task(); + + if (usb_state != Usb.getUsbTaskState()) { + usb_state = Usb.getUsbTaskState(); + xprintf("usb_state: %02X\n", usb_state); + if (!waiting) waiting = true; + } + + // Wait for console startutp + if (timer_elapsed(timer) < 3000) { + return; + } + + if (Usb.getUsbTaskState() == USB_STATE_RUNNING && waiting) { + Usb.ForEachUsbDevice(&dumpDescriptors); + waiting = false; + } +} + + +// Keymap unused +const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {}; +const action_t fn_actions[] PROGMEM = {0};