Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8d01a44

Browse files
committed
[USB] use plugged modules name to create iSerial field
1 parent bf609ec commit 8d01a44

File tree

6 files changed

+43
-9
lines changed

6 files changed

+43
-9
lines changed

‎hardware/arduino/avr/cores/arduino/PluggableUSB.cpp‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,18 @@ int PluggableUSB_::getDescriptor(USBSetup& setup)
5050
return 0;
5151
}
5252

53+
char* PluggableUSB_::getShortName(void)
54+
{
55+
char* ret = 0;
56+
memset(_iSerialNum, 0, sizeof(_iSerialNum));
57+
PluggableUSBModule* node;
58+
for (node = rootNode; node; node = node->next) {
59+
ret = node->getShortName();
60+
memcpy(&_iSerialNum[strlen(_iSerialNum)], ret, strlen(ret));
61+
}
62+
return _iSerialNum;
63+
}
64+
5365
bool PluggableUSB_::setup(USBSetup& setup)
5466
{
5567
PluggableUSBModule* node;

‎hardware/arduino/avr/cores/arduino/PluggableUSB.h‎

Lines changed: 3 additions & 0 deletions
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 char* getShortName(void) = 0;
3839

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

5961
private:
6062
uint8_t lastIf;
6163
uint8_t lastEp;
64+
char _iSerialNum[20] = {0};
6265
PluggableUSBModule* rootNode;
6366
};
6467

‎hardware/arduino/avr/cores/arduino/USBCore.cpp‎

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include "USBAPI.h"
2020
#include "PluggableUSB.h"
21+
#include <stdlib.h>
2122

2223
#if defined(USBCON)
2324

@@ -69,10 +70,10 @@ const u8 STRING_MANUFACTURER[] PROGMEM = USB_MANUFACTURER;
6970

7071
// DEVICE DESCRIPTOR
7172
const DeviceDescriptor USB_DeviceDescriptor =
72-
D_DEVICE(0x00,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1);
73+
D_DEVICE(0x00,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,ISERIAL,1);
7374

7475
const DeviceDescriptor USB_DeviceDescriptorB =
75-
D_DEVICE(0xEF,0x02,0x01,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1);
76+
D_DEVICE(0xEF,0x02,0x01,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,ISERIAL,1);
7677

7778
//==================================================================
7879
//==================================================================
@@ -409,11 +410,12 @@ int USB_SendControl(u8 flags, const void* d, int len)
409410
// Send a USB descriptor string. The string is stored in PROGMEM as a
410411
// plain ASCII string but is sent out as UTF-16 with the correct 2-byte
411412
// prefix
412-
static bool USB_SendStringDescriptor(const u8*string_P, u8 string_len) {
413+
static bool USB_SendStringDescriptor(const u8*string_P, u8 string_len, uint8_t flags) {
413414
SendControl(2 + string_len * 2);
414415
SendControl(3);
416+
bool pgm = flags & TRANSFER_PGM;
415417
for(u8 i = 0; i < string_len; i++) {
416-
bool r = SendControl(pgm_read_byte(&string_P[i]));
418+
bool r = SendControl(pgm ? pgm_read_byte(&string_P[i]) : string_P[i]);
417419
r &= SendControl(0); // high byte
418420
if(!r) {
419421
return false;
@@ -495,10 +497,16 @@ bool SendDescriptor(USBSetup& setup)
495497
desc_addr = (const u8*)&STRING_LANGUAGE;
496498
}
497499
else if (setup.wValueL == IPRODUCT) {
498-
return USB_SendStringDescriptor(STRING_PRODUCT, strlen(USB_PRODUCT));
500+
return USB_SendStringDescriptor(STRING_PRODUCT, strlen(USB_PRODUCT), TRANSFER_PGM);
499501
}
500502
else if (setup.wValueL == IMANUFACTURER) {
501-
return USB_SendStringDescriptor(STRING_MANUFACTURER, strlen(USB_MANUFACTURER));
503+
return USB_SendStringDescriptor(STRING_MANUFACTURER, strlen(USB_MANUFACTURER), TRANSFER_PGM);
504+
}
505+
else if (setup.wValueL == ISERIAL) {
506+
#ifdef PLUGGABLE_USB_ENABLED
507+
char* name = PluggableUSB().getShortName();
508+
return USB_SendStringDescriptor((uint8_t*)name, strlen(name), 0);
509+
#endif
502510
}
503511
else
504512
return false;

‎hardware/arduino/avr/cores/arduino/USBDesc.h‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@
3939
#define CDC_RX CDC_ENDPOINT_OUT
4040
#define CDC_TX CDC_ENDPOINT_IN
4141

42-
#define IMANUFACTURER1
43-
#define IPRODUCT2
44-
42+
#define IMANUFACTURER1
43+
#define IPRODUCT2
44+
#defineISERIAL 3

‎hardware/arduino/avr/libraries/HID/HID.cpp‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ int HID_::getDescriptor(USBSetup& setup)
5757
return total;
5858
}
5959

60+
char* HID_::getShortName()
61+
{
62+
static char name[7] = {0};
63+
char num[3];
64+
memcpy(name, "HID", 3);
65+
itoa(descriptorSize, num, 10);
66+
memcpy(&name[3], num, 3);
67+
return name;
68+
}
69+
6070
void HID_::AppendDescriptor(HIDSubDescriptor *node)
6171
{
6272
if (!rootNode) {

‎hardware/arduino/avr/libraries/HID/HID.h‎

Lines changed: 1 addition & 0 deletions
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+
char* getShortName(void);
99100

100101
private:
101102
uint8_t epType[1];

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /