[gnoduino: 217/237] Leonardo bootloader now sends iSerial string during enumeration. Seems to satisfy Windows' composit



commit 1d64fafe388b0cbb03939e82c21111f707c13142
Author: Zach Eveland <zeveland blacklabel-development com>
Date:   Wed Nov 16 16:38:22 2011 -0500

    Leonardo bootloader now sends iSerial string during enumeration.  Seems to satisfy Windows' composite device requirements.

 .../bootloaders/diskloader/DiskLoader-Leonardo.hex |  218 ++++++++++----------
 .../bootloaders/diskloader/DiskLoader-Micro.hex    |  113 ----------
 arduino/bootloaders/diskloader/src/Platform.h      |    2 +
 arduino/bootloaders/diskloader/src/USBCore.cpp     |    2 +
 arduino/bootloaders/diskloader/src/USBDesc.cpp     |    9 +-
 arduino/bootloaders/diskloader/src/USBDesc.h       |    2 +
 6 files changed, 123 insertions(+), 223 deletions(-)
---
diff --git a/arduino/bootloaders/diskloader/DiskLoader-Leonardo.hex b/arduino/bootloaders/diskloader/DiskLoader-Leonardo.hex
index 4528a8b..0d0c167 100644
--- a/arduino/bootloaders/diskloader/DiskLoader-Leonardo.hex
+++ b/arduino/bootloaders/diskloader/DiskLoader-Leonardo.hex
@@ -1,113 +1,115 @@
-:1078000011241FBECFEFDAE0DEBFCDBFF2C04101D1
+:1078000011241FBECFEFDAE0DEBFCDBFFFC04101C4
 :1078100042144505560455026403740300001E9586
 :1078200087020110030000C18081C106C0FF0A0069
 :107830000CA10185037508150026FF00954009017C
-:107840008102954009029102C004030904380341F2
-:107850000072006400750069006E006F0020004C2B
-:107860000065006F006E006100720064006F002010
-:107870000062006F006F0074006C006F00610064B4
-:107880000065007200180341007200640075006911
-:10789000006E006F0020004C004C004300120100FD
-:1078A00002020000404123340000010102000112E5
-:1078B00001000200000040412334000001010200E9
-:1078C00001090264000301008032080B0002020279
-:1078D000010009040000010202000005240010015B
-:1078E0000524010101042402020524060001070504
-:1078F000810310004009040100020A00000007058E
-:107900000202400000070583024000000904020053
-:107910000103000000092101010001221E000705EA
-:1079200084034000400020918A0130918B012C5F3C
-:107930003F4F30938B0120938A01C901892F9927EA
-:107940008695982F803418F08FE7891B982F990F10
-:10795000921710F447980895479A08955D9A289AC7
-:1079600081E08093E0001092E200EE27FF27099467
-:1079700008950F931F93CF93DF93982FEB01042F5C
-:1079800010E088E76030780730F411E083E0FB0115
-:1079900080935700E895892F68E071E0402FF8D078
-:1079A000112311F107B600FCFDCF402F4695FE01D3
-:1079B000A8E0B1E020E031E009C08D919D910C017B
-:1079C00030935700E895112432962F5F2417A8F3BF
-:1079D00085E0FE0180935700E89507B600FCFDCFD7
-:1079E00081E180935700E895DF91CF911F910F912E
-:1079F000089588E10FB6F8948093600010926000BB
-:107A00000FBE5D9A289A47983F9A209A559A90E817
-:107A1000909361001092610081E885BF95BF9FD06F
-:107A200084E18093880180E180938901E0E0F0E0C7
-:107A3000859194918F5F9F4F19F081E080938F0122
-:107A4000EE24FF24BB24B39454EFC52E51E0D52E71
-:107A50000ED2082F8EE098E7FC0124913196029611
-:107A60004491201711F02223B9F71092910110923E
-:107A7000900182E068E071E08BD0013479F460918C
-:107A800008016058633028F0683111F064E001C0EB
-:107A900063E0C62FD0E0CF5DD7480EC0063571F445
-:107AA00080910801803311F011E022C080910A0119
-:107AB000C82FD0E0C25ED74811E022C0053721F4BC
-:107AC00013E0CEE1D8E71CC0053539F4E090080199
-:107AD000F0900901EE0CFF1C0AC0043631F482E07C
-:107AE000B7014091090145DF02C0043721F010E0E1
-:107AF000C5E2D8E705C010910901E701E10EF11CCC
-:107B0000B6D18097B1F483E068E871E041E050E0DD
-:107B100059D0112329F0412F50E083E8BE0152D003
-:107B200083E469E871E041E050E04CD0013509F0B0
-:107B30008FCFD0929101C0929001B0928F01EE242C
-:107B4000FF2486CFFC01289884E680938D0104C031
-:107B50008091F100819361506623D1F708951092CE
-:107B600091011092900110928E0110928F0181E08C
-:107B70008093D70080EA8093D80082E189BD09B460
-:107B800000FEFDCF80E98093D8001092E0000895B8
-:107B9000FB018093E90024E69BE611C08091E80098
-:107BA00085FFFCCF289820938D018091F10081936F
-:107BB0008091E80085FD02C09093E8004150442385
-:107BC00069F70895982FFB01282F20728770809302
-:107BD000E90064E63AE317C08091E80085FFFCCF36
-:107BE00097FF02C0849101C080813196211180E00D
-:107BF0005D9860938C018093F1008091E80085FD91
-:107C000002C03093E800415050408FEF4F3F58077B
-:107C100019F796FF03C08AE38093E80008958091E6
-:107C20009301813299F45D9884E680938C0120E081
-:107C300030E003C080818093F100F901E050FF4FF4
-:107C40002F5F3F4F28303105A9F714C0803261F40F
-:107C50008091E80082FFFCCF80E091E067E072DF76
-:107C60008BEF8093E80006C0823221F4809194016A
-:107C70008093070181E0089520919501223261F1FE
-:107C8000213081F48091980190919901089711F425
-:107C900020939A0180919A01882309F04AC0EFEA63
-:107CA000F8E749C0223021F484E6E1ECF8E717C098
-:107CB000233009F03CC080919401882319F4E9E451
-:107CC000F8E739C0823019F4EDE4F8E734C08130C8
-:107CD00071F5E5E8F8E72FC081E0EBE2F8E7909175
-:107CE0009801382F981708F4392F90918C0120E0D3
-:107CF0004EEF8091E8008570E1F38091E80082FD0D
-:107D000012C02F5F84915D988093F100822F8F7352
-:107D100011F44093E800319694E6231750F39093C2
-:107D20008C0181E0089590938C0180E0089580E0BB
-:107D30000895EDE9F8E78491D2CF1092E90080919F
-:107D4000E80083FF61C082E991E068E0FBDE82EF3A
-:107D50008093E8008091920187FF05C08091E80040
-:107D600080FFFCCF03C08EEF8093E80080919301E9
-:107D7000853051F48091E80080FFFCCF8091940120
-:107D800080688093E30039C08930E1F480919401E8
-:107D900080938E01E7E2F8E791E031E026E39093EB
-:107DA000E9003093EB0084918093EC002093ED0088
-:107DB0009F5F3196953099F78EE78093EA00109295
-:107DC000EA001BC0883049F490918E015D9884E6EA
-:107DD00080938C019093F10010C0882339F45D9852
-:107DE00084E680938C011092F10007C0863011F474
-:107DF00043DF01C014DF882321F08EEF8093E80079
-:107E0000089581E28093EB0008958091E100109243
-:107E1000E100282F83FF0CC01092E90081E08093DD
-:107E2000EB001092EC0082E38093ED0010928E0143
-:107E300022FF1CC080918C01882331F081508093F7
-:107E40008C01882309F45D9A80918D01882331F09B
-:107E5000815080938D01882309F4289A80918F01A5
-:107E6000882321F4109291011092900108951F939C
-:107E7000CF93DF9312E0C0E9D1E05FDFC6DF10935C
-:107E8000E9008091E80085FF13C0289884E680937C
-:107E90008D019091F1008091E80085FD03C08BE693
-:107EA0008093E800892F90E0DF91CF911F91089592
-:107EB000809190019091910101979093910180930D
-:107EC00090018091900190919101892B09F446DDF8
-:0A7ED000CE010197F1F727DDD0CFB6
-:087EDA0000E1000000000000BF
+:107840008102954009029102C0040309041A033021
+:1078500000300030003000300030003000300031A7
+:1078600000370030003100380341007200640075B9
+:107870000069006E006F0020004C0065006F006E14
+:10788000006100720064006F00200062006F006FF2
+:107890000074006C006F00610064006500720018E5
+:1078A00003410072006400750069006E006F0020E3
+:1078B000004C004C00430012010002020000404155
+:1078C0002334000001000203011201000200000045
+:1078D0004041233400000100020301090264000357
+:1078E00001008032080B00020202010009040000BE
+:1078F0000102020000052400100105240101010419
+:107900002402020524060001070581031000400936
+:10791000040100020A0000000705020240000007FF
+:107920000583024000000904020001030000000971
+:107930002101010001221E000705840340004000D0
+:1079400020918A0130918B012C5F3F4F30938B0146
+:1079500020938A01C901892F99278695982F803411
+:1079600018F08FE7891B982F990F921710F44798FA
+:107970000895479A08955D9A289A81E08093E000DF
+:107980001092E200EE27FF27099408950F931F93AA
+:10799000CF93DF93982FEB01042F10E088E760303E
+:1079A000780730F411E083E0FB0180935700E895FD
+:1079B000892F68E071E0402FF8D0112311F107B64C
+:1079C00000FCFDCF402F4695FE01A8E0B1E020E08D
+:1079D00031E009C08D919D910C0130935700E895DD
+:1079E000112432962F5F2417A8F385E0FE018093BF
+:1079F0005700E89507B600FCFDCF81E18093570062
+:107A0000E895DF91CF911F910F91089588E10FB60E
+:107A1000F89480936000109260000FBE5D9A289ADF
+:107A200047983F9A209A559A90E890936100109257
+:107A3000610081E885BF95BF9FD084E18093880174
+:107A400080E180938901E0E0F0E0859194918F5F7F
+:107A50009F4F19F081E080938F01EE24FF24BB2417
+:107A6000B39454EFC52E51E0D52E13D2082F8EE0DB
+:107A700098E7FC012491319602964491201711F069
+:107A80002223B9F7109291011092900182E068E0F0
+:107A900071E08BD0013479F4609108016058633053
+:107AA00028F0683111F064E001C063E0C62FD0E037
+:107AB000CF5DD7480EC0063571F480910801803340
+:107AC00011F011E022C080910A01C82FD0E0C25EFF
+:107AD000D74811E022C0053721F413E0CEE1D8E702
+:107AE0001CC0053539F4E0900801F0900901EE0C56
+:107AF000FF1C0AC0043631F482E0B701409109014D
+:107B000045DF02C0043721F010E0C5E2D8E705C028
+:107B100010910901E701E10EF11CBBD18097B1F48E
+:107B200083E068E871E041E050E059D0112329F08A
+:107B3000412F50E083E8BE0152D083E469E871E050
+:107B400041E050E04CD0013509F08FCFD092910147
+:107B5000C0929001B0928F01EE24FF2486CFFC01E9
+:107B6000289884E680938D0104C08091F100819370
+:107B700061506623D1F708951092910110929001FF
+:107B800010928E0110928F0181E08093D70080EADD
+:107B90008093D80082E189BD09B400FEFDCF80E961
+:107BA0008093D8001092E0000895FB018093E900D3
+:107BB00024E69BE611C08091E80085FFFCCF289861
+:107BC00020938D018091F10081938091E80085FDE3
+:107BD00002C09093E8004150442369F70895982F1C
+:107BE000FB01282F207287708093E90064E63AE356
+:107BF00017C08091E80085FFFCCF97FF02C08491F9
+:107C000001C080813196211180E05D9860938C01E4
+:107C10008093F1008091E80085FD02C03093E80078
+:107C2000415050408FEF4F3F580719F796FF03C060
+:107C30008AE38093E800089580919301813299F45A
+:107C40005D9884E680938C0120E030E003C0808161
+:107C50008093F100F901E050FF4F2F5F3F4F283034
+:107C60003105A9F714C0803261F48091E80082FFE9
+:107C7000FCCF80E091E067E072DF8BEF8093E8005B
+:107C800006C0823221F4809194018093070181E043
+:107C9000089520919501223289F1213081F480915B
+:107CA000980190919901089711F420939A0180917D
+:107CB0009A01882309F04FC0E9ECF8E74EC0223062
+:107CC00021F484E6EBEDF8E71CC0233009F041C055
+:107CD00080919401882319F4E9E4F8E73EC08230EA
+:107CE00019F4E7E6F8E739C0833019F4EDE4F8E772
+:107CF00034C0813071F5EFE9F8E72FC081E0EBE2A5
+:107D0000F8E790919801382F981708F4392F90913F
+:107D10008C0120E04EEF8091E8008570E1F38091C6
+:107D2000E80082FD12C02F5F84915D988093F1007E
+:107D3000822F8F7311F44093E800319694E6231755
+:107D400050F390938C0181E0089590938C0180E032
+:107D5000089580E00895E7EBF8E78491D2CF109280
+:107D6000E9008091E80083FF61C082E991E068E06A
+:107D7000F6DE82EF8093E8008091920187FF05C0D4
+:107D80008091E80080FFFCCF03C08EEF8093E80075
+:107D900080919301853051F48091E80080FFFCCF01
+:107DA0008091940180688093E30039C08930E1F4C8
+:107DB0008091940180938E01E7E2F8E791E031E051
+:107DC00026E39093E9003093EB0084918093EC00DC
+:107DD0002093ED009F5F3196953099F78EE7809361
+:107DE000EA001092EA001BC0883049F490918E019D
+:107DF0005D9884E680938C019093F10010C08823F5
+:107E000039F45D9884E680938C011092F10007C0EC
+:107E1000863011F43EDF01C00FDF882321F08EEFA2
+:107E20008093E800089581E28093EB0008958091AB
+:107E3000E1001092E100282F83FF0CC01092E900AE
+:107E400081E08093EB001092EC0082E38093ED00E0
+:107E500010928E0122FF1CC080918C01882331F08A
+:107E6000815080938C01882309F45D9A80918D0163
+:107E7000882331F0815080938D01882309F4289A5A
+:107E800080918F01882321F410929101109290012A
+:107E900008951F93CF93DF9312E0C0E9D1E05FDF35
+:107EA000C6DF1093E9008091E80085FF13C0289891
+:107EB00084E680938D019091F1008091E80085FD2A
+:107EC00003C08BE68093E800892F90E0DF91CF918B
+:107ED0001F91089580919001909191010197909345
+:107EE0009101809390018091900190919101892B53
+:0E7EF00009F441DDCE010197F1F722DDD0CF7C
+:087EFE0000E10000000000009B
 :040000030000780081
 :00000001FF
diff --git a/arduino/bootloaders/diskloader/src/Platform.h b/arduino/bootloaders/diskloader/src/Platform.h
index 6acbf39..04c5b79 100644
--- a/arduino/bootloaders/diskloader/src/Platform.h
+++ b/arduino/bootloaders/diskloader/src/Platform.h
@@ -24,6 +24,8 @@ typedef unsigned long u32;
 #define USB_VID 0x2341	// arduino LLC vid
 #define USB_PID ARDUINO_MODEL_PID	// passed in by Makefile - 0x0034 for Leonardo, 0x0035 for MIcro
 
+#define USB_SERIAL_STRING	'0','0','0','0','0','0','0','0','1','7','0','1'
+
 #define OEM_NAME		'l','e','o','n','a','r','d','o'					// 8 chars
 #define BOARD_INIT()	DDRC |= (1<<7); DDRB |= (1<<0); DDRD |= (1<<5); CPU_PRESCALE(0); DISABLE_JTAG();
 #define LED0			PORTC &= ~(1<<7)
diff --git a/arduino/bootloaders/diskloader/src/USBCore.cpp b/arduino/bootloaders/diskloader/src/USBCore.cpp
index ca74721..208121e 100644
--- a/arduino/bootloaders/diskloader/src/USBCore.cpp
+++ b/arduino/bootloaders/diskloader/src/USBCore.cpp
@@ -376,6 +376,8 @@ bool SendDescriptor()
 			desc_addr = (const u8*)&STRING_LANGUAGE;
 		else if (setup.wValueL == IPRODUCT) 
 			desc_addr = (const u8*)&STRING_IPRODUCT;
+		else if (setup.wValueL == ISERIAL)
+			desc_addr = (const u8*)&STRING_SERIAL;
 		else if (setup.wValueL == IMANUFACTURER)
 			desc_addr = (const u8*)&STRING_IMANUFACTURER;
 		else
diff --git a/arduino/bootloaders/diskloader/src/USBDesc.cpp b/arduino/bootloaders/diskloader/src/USBDesc.cpp
index c8ea9c6..ade072a 100644
--- a/arduino/bootloaders/diskloader/src/USBDesc.cpp
+++ b/arduino/bootloaders/diskloader/src/USBDesc.cpp
@@ -27,6 +27,10 @@ const u16 STRING_LANGUAGE[2] = {
 	0x0409	// English
 };
 
+const u16 STRING_SERIAL[13] = {
+	(3<<8) | (2+2*12),
+	USB_SERIAL_STRING
+};
 
 const u16 STRING_IPRODUCT[28] = {
 	(3<<8) | (2+2*27),
@@ -44,11 +48,12 @@ const u16 STRING_IMANUFACTURER[12] = {
 
 
 //#ifdef CDC_ENABLED
-DeviceDescriptor USB_DeviceDescriptorA = D_DEVICE(0X02,0X00,0X00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1);
+DeviceDescriptor USB_DeviceDescriptorA = D_DEVICE(0X02,0X00,0X00,64,USB_VID,USB_PID,0x100,0,IPRODUCT,ISERIAL,1);
 //#else
-DeviceDescriptor USB_DeviceDescriptor = D_DEVICE(0x00,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1);
+DeviceDescriptor USB_DeviceDescriptor = D_DEVICE(0x00,0x00,0x00,64,USB_VID,USB_PID,0x100,0,IPRODUCT,ISERIAL,1);
 //#endif
 
+
 Config USB_ConfigDescriptor =
 {
 	D_CONFIG(sizeof(Config),INTERFACE_COUNT),
diff --git a/arduino/bootloaders/diskloader/src/USBDesc.h b/arduino/bootloaders/diskloader/src/USBDesc.h
index 094dba5..a970fa4 100644
--- a/arduino/bootloaders/diskloader/src/USBDesc.h
+++ b/arduino/bootloaders/diskloader/src/USBDesc.h
@@ -55,9 +55,11 @@ extern DeviceDescriptor USB_DeviceDescriptorA PROGMEM;
 extern const u16 STRING_LANGUAGE[2] PROGMEM;
 extern const u16 STRING_IPRODUCT[28] PROGMEM;
 extern const u16 STRING_IMANUFACTURER[12] PROGMEM;
+extern const u16 STRING_SERIAL[13] PROGMEM;
 
 #define IMANUFACTURER	1
 #define IPRODUCT		2
+#define ISERIAL			3
 
 #define CDC_TX CDC_ENDPOINT_IN
 #define CDC_RX CDC_ENDPOINT_OUT
\ No newline at end of file



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]