1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-01-17 06:52:18 +01:00

HID: merged HID_Descriptor into HIDDescriptorListNode

This simplifies the object model and produce a small gain in code
size and performance.
This commit is contained in:
Cristian Maglie 2015-09-22 01:40:35 +02:00
parent f0cf13c89b
commit 401c4f0cf8
6 changed files with 13 additions and 28 deletions

View File

@ -61,7 +61,7 @@ int HID_GetDescriptor(int8_t t)
HIDDescriptorListNode* current = rootNode;
int total = 0;
while(current != NULL) {
total += USB_SendControl(TRANSFER_PGM,current->descriptor->data,current->descriptor->length);
total += USB_SendControl(TRANSFER_PGM,current->data,current->length);
current = current->next;
}
return total;
@ -82,7 +82,7 @@ void HID_::AppendDescriptor(HIDDescriptorListNode *node)
current->next = node;
}
modules_count++;
sizeof_hidReportDescriptor += (uint16_t)node->descriptor->length;
sizeof_hidReportDescriptor += (uint16_t)node->length;
}
void HID_::SendReport(u8 id, const void* data, int len)

View File

@ -44,16 +44,13 @@
#define HID_REPORT_DESCRIPTOR_TYPE 0x22
#define HID_PHYSICAL_DESCRIPTOR_TYPE 0x23
typedef struct __attribute__((packed)) {
uint16_t length;
const void* data;
} HID_Descriptor;
class HIDDescriptorListNode {
public:
HIDDescriptorListNode *next = NULL;
const HID_Descriptor *descriptor;
HIDDescriptorListNode(const HID_Descriptor *d) : descriptor(d) { }
HIDDescriptorListNode(const void *d, uint16_t l) : data(d), length(l) { }
const void* data;
uint16_t length;
};
class HID_

View File

@ -68,7 +68,7 @@ int HID_GetDescriptor(int8_t t)
HIDDescriptorListNode* current = rootNode;
int total = 0;
while(current != NULL) {
total += USBD_SendControl(0,current->descriptor->data,current->descriptor->length);
total += USBD_SendControl(0,current->data,current->length);
current = current->next;
}
return total;
@ -89,7 +89,7 @@ void HID_::AppendDescriptor(HIDDescriptorListNode *node)
current->next = node;
}
modules_count++;
sizeof_hidReportDescriptor += node->descriptor->length;
sizeof_hidReportDescriptor += node->length;
}
void HID_::SendReport(uint8_t id, const void* data, int len)

View File

@ -42,16 +42,12 @@
#define HID_REPORT_DESCRIPTOR_TYPE 0x22
#define HID_PHYSICAL_DESCRIPTOR_TYPE 0x23
typedef struct __attribute__((packed)) {
uint8_t length;
const void* data;
} HID_Descriptor;
class HIDDescriptorListNode {
public:
HIDDescriptorListNode *next = NULL;
const HID_Descriptor *descriptor;
HIDDescriptorListNode(const HID_Descriptor *d) : descriptor(d) { }
HIDDescriptorListNode(const void *d, uint16_t l) : data(d), length(l) { }
uint8_t length;
const void* data;
};
class HID_

View File

@ -62,11 +62,7 @@ static const uint8_t _hidReportDescriptor[] PROGMEM = {
Keyboard_::Keyboard_(void)
{
static HID_Descriptor descriptor = {
.length = sizeof(_hidReportDescriptor),
.data = _hidReportDescriptor,
};
static HIDDescriptorListNode node(&descriptor);
static HIDDescriptorListNode node(_hidReportDescriptor, sizeof(_hidReportDescriptor));
HID.AppendDescriptor(&node);
}

View File

@ -62,11 +62,7 @@ static const uint8_t _hidReportDescriptor[] PROGMEM = {
Mouse_::Mouse_(void) : _buttons(0)
{
const static HID_Descriptor descriptor = {
.length = sizeof(_hidReportDescriptor),
.data = _hidReportDescriptor,
};
static HIDDescriptorListNode node(&descriptor);
static HIDDescriptorListNode node(_hidReportDescriptor, sizeof(_hidReportDescriptor));
HID.AppendDescriptor(&node);
}