Skip to content

Commit 304b76e

Browse files
facchinmmattairtech
authored andcommitted
PUSB: add iSerial USB field
1 parent 6230913 commit 304b76e

File tree

6 files changed

+35
-3
lines changed

6 files changed

+35
-3
lines changed

Diff for: cores/arduino/USB/PluggableUSB.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@ int PluggableUSB_::getDescriptor(USBSetup& setup)
5252
return 0;
5353
}
5454

55+
void PluggableUSB_::getShortName(char *iSerialNum)
56+
{
57+
PluggableUSBModule* node;
58+
for (node = rootNode; node; node = node->next) {
59+
iSerialNum += node->getShortName(iSerialNum);
60+
}
61+
*iSerialNum = 0;
62+
}
63+
5564
bool PluggableUSB_::setup(USBSetup& setup)
5665
{
5766
PluggableUSBModule* node;

Diff for: cores/arduino/USB/PluggableUSB.h

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class PluggableUSBModule {
3535
virtual bool setup(USBSetup& setup) = 0;
3636
virtual int getInterface(uint8_t* interfaceCount) = 0;
3737
virtual int getDescriptor(USBSetup& setup) = 0;
38+
virtual uint8_t getShortName(char *name) { name[0] = 'A'+pluggedInterface; return 1; }
3839

3940
uint8_t pluggedInterface;
4041
uint8_t pluggedEndpoint;
@@ -55,6 +56,7 @@ class PluggableUSB_ {
5556
int getInterface(uint8_t* interfaceCount);
5657
int getDescriptor(USBSetup& setup);
5758
bool setup(USBSetup& setup);
59+
void getShortName(char *iSerialNum);
5860

5961
private:
6062
uint8_t lastIf;

Diff for: cores/arduino/USB/USBCore.cpp

+9-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ const uint8_t STRING_MANUFACTURER[] = USB_MANUFACTURER;
6666

6767

6868
// DEVICE DESCRIPTOR
69-
const DeviceDescriptor USB_DeviceDescriptorB = D_DEVICE(0xEF, 0x02, 0x01, 64, USB_VID, USB_PID, 0x100, IMANUFACTURER, IPRODUCT, 0, 1);
70-
const DeviceDescriptor USB_DeviceDescriptor = D_DEVICE(0x00, 0x00, 0x00, 64, USB_VID, USB_PID, 0x100, IMANUFACTURER, IPRODUCT, 0, 1);
69+
const DeviceDescriptor USB_DeviceDescriptorB = D_DEVICE(0xEF, 0x02, 0x01, 64, USB_VID, USB_PID, 0x100, IMANUFACTURER, IPRODUCT, ISERIAL, 1);
70+
const DeviceDescriptor USB_DeviceDescriptor = D_DEVICE(0x00, 0x00, 0x00, 64, USB_VID, USB_PID, 0x100, IMANUFACTURER, IPRODUCT, ISERIAL, 1);
7171

7272
//==================================================================
7373

@@ -208,6 +208,13 @@ bool USBDeviceClass::sendDescriptor(USBSetup &setup)
208208
else if (setup.wValueL == IMANUFACTURER) {
209209
return sendStringDescriptor(STRING_MANUFACTURER, setup.wLength);
210210
}
211+
else if (setup.wValueL == ISERIAL) {
212+
#ifdef PLUGGABLE_USB_ENABLED
213+
char name[ISERIAL_MAX_LEN];
214+
PluggableUSB().getShortName(name);
215+
return sendStringDescriptor((uint8_t*)name, setup.wLength);
216+
#endif
217+
}
211218
else {
212219
return false;
213220
}

Diff for: cores/arduino/USB/USBDesc.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,11 @@
5454
#define CDC_TX CDC_ENDPOINT_IN
5555
#endif
5656

57+
#define ISERIAL_MAX_LEN 20
58+
5759
// Defined string description
5860
#define IMANUFACTURER 1
59-
#define IPRODUCT 2
61+
#define IPRODUCT 2
62+
#define ISERIAL 3
6063

6164
#endif /* __USBDESC_H__ */

Diff for: libraries/HID/HID.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,16 @@ int HID_::getDescriptor(USBSetup& setup)
6060
return total;
6161
}
6262

63+
uint8_t HID_::getShortName(char *name)
64+
{
65+
name[0] = 'H';
66+
name[1] = 'I';
67+
name[2] = 'D';
68+
name[3] = 'A' + (descriptorSize & 0x0F);
69+
name[4] = 'A' + ((descriptorSize >> 4) & 0x0F);
70+
return 5;
71+
}
72+
6373
void HID_::AppendDescriptor(HIDSubDescriptor *node)
6474
{
6575
if (!rootNode) {

Diff for: libraries/HID/HID.h

+1
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ class HID_ : public PluggableUSBModule
9696
int getInterface(uint8_t* interfaceCount);
9797
int getDescriptor(USBSetup& setup);
9898
bool setup(USBSetup& setup);
99+
uint8_t getShortName(char* name);
99100

100101
private:
101102
uint32_t epType[1];

0 commit comments

Comments
 (0)