Skip to content

Commit fff8541

Browse files
committed
remove static iSerial buffers
1 parent 8d01a44 commit fff8541

File tree

6 files changed

+15
-15
lines changed

6 files changed

+15
-15
lines changed

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

+6-7
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,15 @@ int PluggableUSB_::getDescriptor(USBSetup& setup)
5050
return 0;
5151
}
5252

53-
char* PluggableUSB_::getShortName(void)
53+
uint8_t PluggableUSB_::getShortName(char* _iSerialNum, uint8_t max_len)
5454
{
55-
char* ret = 0;
56-
memset(_iSerialNum, 0, sizeof(_iSerialNum));
55+
uint8_t ret = 0;
56+
memset(_iSerialNum, 0, max_len);
5757
PluggableUSBModule* node;
58-
for (node = rootNode; node; node = node->next) {
59-
ret = node->getShortName();
60-
memcpy(&_iSerialNum[strlen(_iSerialNum)], ret, strlen(ret));
58+
for (node = rootNode; node && ret < max_len; node = node->next) {
59+
ret += node->getShortName(&_iSerialNum[ret]);
6160
}
62-
return _iSerialNum;
61+
return ret;
6362
}
6463

6564
bool PluggableUSB_::setup(USBSetup& setup)

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

+2-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +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;
38+
virtual uint8_t getShortName(char* name) { name[0] = 'A'+pluggedInterface; return 1; }
3939

4040
uint8_t pluggedInterface;
4141
uint8_t pluggedEndpoint;
@@ -56,12 +56,11 @@ class PluggableUSB_ {
5656
int getInterface(uint8_t* interfaceCount);
5757
int getDescriptor(USBSetup& setup);
5858
bool setup(USBSetup& setup);
59-
char* getShortName(void);
59+
uint8_t getShortName(char* _iSerialNum, uint8_t max_len);
6060

6161
private:
6262
uint8_t lastIf;
6363
uint8_t lastEp;
64-
char _iSerialNum[20] = {0};
6564
PluggableUSBModule* rootNode;
6665
};
6766

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,8 @@ bool SendDescriptor(USBSetup& setup)
504504
}
505505
else if (setup.wValueL == ISERIAL) {
506506
#ifdef PLUGGABLE_USB_ENABLED
507-
char* name = PluggableUSB().getShortName();
507+
char name[ISERIAL_MAX_LEN];
508+
PluggableUSB().getShortName(name, sizeof(name));
508509
return USB_SendStringDescriptor((uint8_t*)name, strlen(name), 0);
509510
#endif
510511
}

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

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#define USB_ENDPOINTS 5 // AtMegaxxU2
2525
#endif
2626

27+
#define ISERIAL_MAX_LEN 20
28+
2729
#define CDC_INTERFACE_COUNT 2
2830
#define CDC_ENPOINT_COUNT 3
2931

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

+2-3
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,13 @@ int HID_::getDescriptor(USBSetup& setup)
5757
return total;
5858
}
5959

60-
char* HID_::getShortName()
60+
uint8_t HID_::getShortName(char* name)
6161
{
62-
static char name[7] = {0};
6362
char num[3];
6463
memcpy(name, "HID", 3);
6564
itoa(descriptorSize, num, 10);
6665
memcpy(&name[3], num, 3);
67-
return name;
66+
return strlen(name);
6867
}
6968

7069
void HID_::AppendDescriptor(HIDSubDescriptor *node)

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +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);
99+
uint8_t getShortName(char* name);
100100

101101
private:
102102
uint8_t epType[1];

0 commit comments

Comments
 (0)