[HID] Code cleanup (no semantic changes)

This commit is contained in:
Cristian Maglie 2015-10-01 12:50:18 +02:00
parent 0b3244c5ec
commit 2e328bae3b
3 changed files with 86 additions and 96 deletions

View File

@ -1,20 +1,20 @@
/*
Copyright (c) 2011, Peter Barrett
Copyright (c) 2015, Arduino LLC
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
above copyright notice and this permission notice appear in all copies.
/* Copyright (c) 2011, Peter Barrett THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** Permission to use, copy, modify, and/or distribute this software for WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** any purpose with or without fee is hereby granted, provided that the BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** above copyright notice and this permission notice appear in all copies. OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED SOFTWARE.
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR */
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE.
*/
#define PLUGGABLE_USB_ENABLED #define PLUGGABLE_USB_ENABLED

View File

@ -1,20 +1,20 @@
/* Copyright (c) 2015, Arduino LLC /*
** Copyright (c) 2015, Arduino LLC
** Original code (pre-library): Copyright (c) 2011, Peter Barrett Original code (pre-library): Copyright (c) 2011, Peter Barrett
**
** Permission to use, copy, modify, and/or distribute this software for Permission to use, copy, modify, and/or distribute this software for
** any purpose with or without fee is hereby granted, provided that the any purpose with or without fee is hereby granted, provided that the
** above copyright notice and this permission notice appear in all copies. above copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
** SOFTWARE. SOFTWARE.
*/ */
#include "PluggableUSB.h" #include "PluggableUSB.h"
#include "HID.h" #include "HID.h"
@ -25,11 +25,10 @@ HID_ HID;
int HID_::getInterface(uint8_t* interfaceNum) int HID_::getInterface(uint8_t* interfaceNum)
{ {
interfaceNum[0] += 1; // uses 1 *interfaceNum += 1; // uses 1
hidInterface = hidInterface = {
{
D_INTERFACE(interface(), 1, 3, 0, 0), D_INTERFACE(interface(), 1, 3, 0, 0),
D_HIDREPORT(sizeof_hidReportDescriptor), D_HIDREPORT(descriptorSize),
D_ENDPOINT(USB_ENDPOINT_IN(endpoint()), USB_ENDPOINT_TYPE_INTERRUPT, USB_EP_SIZE, 0x01) D_ENDPOINT(USB_ENDPOINT_IN(endpoint()), USB_ENDPOINT_TYPE_INTERRUPT, USB_EP_SIZE, 0x01)
}; };
return USB_SendControl(0, &hidInterface, sizeof(hidInterface)); return USB_SendControl(0, &hidInterface, sizeof(hidInterface));
@ -38,14 +37,13 @@ int HID_::getInterface(uint8_t* interfaceNum)
int HID_::getDescriptor(int8_t type) int HID_::getDescriptor(int8_t type)
{ {
if (HID_REPORT_DESCRIPTOR_TYPE == type) { if (HID_REPORT_DESCRIPTOR_TYPE == type) {
HIDDescriptorListNode* current = rootNode;
int total = 0; int total = 0;
while (current != NULL) { HIDDescriptorListNode* node;
int res = USB_SendControl(TRANSFER_PGM, current->data, current->length); for (node = rootNode; node; node = node->next) {
int res = USB_SendControl(TRANSFER_PGM, node->data, node->length);
if (res == -1) if (res == -1)
return -1; return -1;
total += res; total += res;
current = current->next;
} }
return total; return total;
} }
@ -60,61 +58,58 @@ void HID_::AppendDescriptor(HIDDescriptorListNode *node)
rootNode = node; rootNode = node;
} else { } else {
HIDDescriptorListNode *current = rootNode; HIDDescriptorListNode *current = rootNode;
while(current->next != NULL) { while (current->next) {
current = current->next; current = current->next;
} }
current->next = node; current->next = node;
} }
sizeof_hidReportDescriptor += (uint16_t)node->length; descriptorSize += node->length;
} }
void HID_::SendReport(uint8_t id, const void* data, int len) void HID_::SendReport(uint8_t id, const void* data, int len)
{ {
USB_Send(endpoint(), &id, 1); USB_Send(endpoint(), &id, 1);
USB_Send(endpoint() | TRANSFER_RELEASE,data,len); USB_Send(endpoint() | TRANSFER_RELEASE, data, len);
} }
bool HID_::setup(USBSetup& setup, uint8_t interfaceNum) bool HID_::setup(USBSetup& setup, uint8_t interfaceNum)
{ {
if (interface() != interfaceNum) { if (interface() != interfaceNum) {
return false; return false;
} else {
uint8_t r = setup.bRequest;
uint8_t requestType = setup.bmRequestType;
if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
{
if (HID_GET_REPORT == r)
{
//HID_GetReport();
return true;
}
if (HID_GET_PROTOCOL == r)
{
//Send8(protocol); // TODO
return true;
}
}
if (REQUEST_HOSTTODEVICE_CLASS_INTERFACE == requestType)
{
if (HID_SET_PROTOCOL == r)
{
protocol = setup.wValueL;
return true;
}
if (HID_SET_IDLE == r)
{
idle = setup.wValueL;
return true;
}
}
return false;
} }
uint8_t request = setup.bRequest;
uint8_t requestType = setup.bmRequestType;
if (requestType == REQUEST_DEVICETOHOST_CLASS_INTERFACE)
{
if (request == HID_GET_REPORT) {
// TODO: HID_GetReport();
return true;
}
if (request == HID_GET_PROTOCOL) {
// TODO: Send8(protocol);
return true;
}
}
if (requestType == REQUEST_HOSTTODEVICE_CLASS_INTERFACE)
{
if (request == HID_SET_PROTOCOL) {
protocol = setup.wValueL;
return true;
}
if (request == HID_SET_IDLE) {
idle = setup.wValueL;
return true;
}
}
return false;
} }
HID_::HID_(void) : PUSBListNode(1, 1, epType), HID_::HID_(void) : PUSBListNode(1, 1, epType),
rootNode(NULL), sizeof_hidReportDescriptor(0), rootNode(NULL), descriptorSize(0),
protocol(1), idle(1) protocol(1), idle(1)
{ {
epType[0] = EP_TYPE_INTERRUPT_IN; epType[0] = EP_TYPE_INTERRUPT_IN;

View File

@ -1,23 +1,20 @@
/* /*
HID.h
Copyright (c) 2015, Arduino LLC Copyright (c) 2015, Arduino LLC
Original code (pre-library): Copyright (c) 2011, Peter Barrett Original code (pre-library): Copyright (c) 2011, Peter Barrett
This library is free software; you can redistribute it and/or Permission to use, copy, modify, and/or distribute this software for
modify it under the terms of the GNU Lesser General Public any purpose with or without fee is hereby granted, provided that the
License as published by the Free Software Foundation; either above copyright notice and this permission notice appear in all copies.
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
but WITHOUT ANY WARRANTY; without even the implied warranty of WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
Lesser General Public License for more details. BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
You should have received a copy of the GNU Lesser General Public WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
License along with this library; if not, write to the Free Software ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA SOFTWARE.
*/ */
#ifndef HID_h #ifndef HID_h
#define HID_h #define HID_h
@ -91,7 +88,7 @@ private:
uint8_t epType[1]; uint8_t epType[1];
HIDDescriptorListNode* rootNode; HIDDescriptorListNode* rootNode;
uint16_t sizeof_hidReportDescriptor; uint16_t descriptorSize;
uint8_t protocol; uint8_t protocol;
uint8_t idle; uint8_t idle;
@ -99,8 +96,6 @@ private:
#define D_HIDREPORT(length) { 9, 0x21, 0x01, 0x01, 0, 1, 0x22, lowByte(length), highByte(length) } #define D_HIDREPORT(length) { 9, 0x21, 0x01, 0x01, 0, 1, 0x22, lowByte(length), highByte(length) }
#define WEAK __attribute__ ((weak)) #endif // USBCON
#endif #endif // HID_h
#endif