From 8a5ad75c501027c15e645f50bb533f3c64109354 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 1 Oct 2015 12:35:24 +0200 Subject: [PATCH] [PUSB] Fixed checks on return values --- .../avr/cores/arduino/PluggableUSB.cpp | 14 ++++++++----- hardware/arduino/avr/libraries/HID/HID.cpp | 20 +++++++++++-------- hardware/arduino/avr/libraries/HID/HID.h | 4 ++-- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/hardware/arduino/avr/cores/arduino/PluggableUSB.cpp b/hardware/arduino/avr/cores/arduino/PluggableUSB.cpp index 50fd79825..acc627652 100644 --- a/hardware/arduino/avr/cores/arduino/PluggableUSB.cpp +++ b/hardware/arduino/avr/cores/arduino/PluggableUSB.cpp @@ -29,19 +29,23 @@ PluggableUSB_ PluggableUSB; int PluggableUSB_::getInterface(uint8_t* interfaceNum) { - int ret = 0; + int sent = 0; PUSBListNode* node; for (node = rootNode; node; node = node->next) { - ret = node->getInterface(interfaceNum); + int res = node->getInterface(interfaceNum); + if (res == -1) + return -1; + sent += res; } - return ret; + return sent; } -int PluggableUSB_::getDescriptor(int8_t t) +int PluggableUSB_::getDescriptor(int8_t type) { PUSBListNode* node; for (node = rootNode; node; node = node->next) { - int ret = node->getDescriptor(t); + int ret = node->getDescriptor(type); + // ret!=0 -> request has been processed if (ret) return ret; } diff --git a/hardware/arduino/avr/libraries/HID/HID.cpp b/hardware/arduino/avr/libraries/HID/HID.cpp index a8714157d..a10957429 100644 --- a/hardware/arduino/avr/libraries/HID/HID.cpp +++ b/hardware/arduino/avr/libraries/HID/HID.cpp @@ -35,19 +35,23 @@ int HID_::getInterface(uint8_t* interfaceNum) return USB_SendControl(0, &hidInterface, sizeof(hidInterface)); } -int HID_::getDescriptor(int8_t t) +int HID_::getDescriptor(int8_t type) { - if (HID_REPORT_DESCRIPTOR_TYPE == t) { + if (HID_REPORT_DESCRIPTOR_TYPE == type) { HIDDescriptorListNode* current = rootNode; int total = 0; - while(current != NULL) { - total += USB_SendControl(TRANSFER_PGM,current->data,current->length); + while (current != NULL) { + int res = USB_SendControl(TRANSFER_PGM, current->data, current->length); + if (res == -1) + return -1; + total += res; current = current->next; } return total; - } else { - return 0; } + + // Ignored + return 0; } void HID_::AppendDescriptor(HIDDescriptorListNode *node) @@ -71,9 +75,9 @@ void HID_::SendReport(uint8_t id, const void* data, int len) USB_Send(endpoint() | TRANSFER_RELEASE,data,len); } -bool HID_::setup(USBSetup& setup, uint8_t i) +bool HID_::setup(USBSetup& setup, uint8_t interfaceNum) { - if (interface() != i) { + if (interface() != interfaceNum) { return false; } else { uint8_t r = setup.bRequest; diff --git a/hardware/arduino/avr/libraries/HID/HID.h b/hardware/arduino/avr/libraries/HID/HID.h index f951229f8..ed08cf051 100644 --- a/hardware/arduino/avr/libraries/HID/HID.h +++ b/hardware/arduino/avr/libraries/HID/HID.h @@ -83,8 +83,8 @@ public: protected: // Implementation of the PUSBListNode int getInterface(uint8_t* interfaceNum); - int getDescriptor(int8_t t); - bool setup(USBSetup& setup, uint8_t i); + int getDescriptor(int8_t type); + bool setup(USBSetup& setup, uint8_t interfaceNum); private: HIDDescriptor hidInterface;