diff options
| -rw-r--r-- | cores/arduino/USBDesc.h | 34 | ||||
| -rw-r--r-- | libraries/HID/HID.cpp | 113 | ||||
| -rw-r--r-- | libraries/HID/HID.h | 35 | 
3 files changed, 86 insertions, 96 deletions
| diff --git a/cores/arduino/USBDesc.h b/cores/arduino/USBDesc.h index 528a7fd..4b9cf66 100644 --- a/cores/arduino/USBDesc.h +++ b/cores/arduino/USBDesc.h @@ -1,20 +1,20 @@ - - -/* Copyright (c) 2011, Peter Barrett   -**   -** 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.   -**  -** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL   -** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED   -** 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.   -*/ +/* +   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. + +   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +   WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +   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 diff --git a/libraries/HID/HID.cpp b/libraries/HID/HID.cpp index 3a439f0..574af6b 100644 --- a/libraries/HID/HID.cpp +++ b/libraries/HID/HID.cpp @@ -1,20 +1,20 @@ -/* Copyright (c) 2015, Arduino LLC -** -** Original code (pre-library): Copyright (c) 2011, Peter Barrett -** -** 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.   -**  -** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL   -** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED   -** 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.   -*/ +/* +   Copyright (c) 2015, Arduino LLC +   Original code (pre-library): Copyright (c) 2011, Peter Barrett + +   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. + +   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +   WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +   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. + */  #include "PluggableUSB.h"  #include "HID.h" @@ -25,11 +25,10 @@ HID_ HID;  int HID_::getInterface(uint8_t* interfaceNum)  { -	interfaceNum[0] += 1;	// uses 1 -	hidInterface = -	{ +	*interfaceNum += 1; // uses 1 +	hidInterface = {  		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)  	};  	return USB_SendControl(0, &hidInterface, sizeof(hidInterface)); @@ -38,14 +37,13 @@ int HID_::getInterface(uint8_t* interfaceNum)  int HID_::getDescriptor(int8_t type)  {  	if (HID_REPORT_DESCRIPTOR_TYPE == type) { -		HIDDescriptorListNode* current = rootNode;  		int total = 0; -		while (current != NULL) { -			int res = USB_SendControl(TRANSFER_PGM, current->data, current->length); +		HIDDescriptorListNode* node; +		for (node = rootNode; node; node = node->next) { +			int res = USB_SendControl(TRANSFER_PGM, node->data, node->length);  			if (res == -1)  				return -1;  			total += res; -			current = current->next;  		}  		return total;  	} @@ -60,61 +58,58 @@ void HID_::AppendDescriptor(HIDDescriptorListNode *node)  		rootNode = node;  	} else {  		HIDDescriptorListNode *current = rootNode; -		while(current->next != NULL) { +		while (current->next) {  			current = current->next;  		}  		current->next = node;  	} -	sizeof_hidReportDescriptor += (uint16_t)node->length; +	descriptorSize += node->length;  }  void HID_::SendReport(uint8_t id, const void* data, int len)  {  	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)  {  	if (interface() != interfaceNum) {  		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; -			} +	} + +	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_HOSTTODEVICE_CLASS_INTERFACE == requestType) -		{ -			if (HID_SET_PROTOCOL == r) -			{ -				protocol = setup.wValueL; -				return true; -			} - -			if (HID_SET_IDLE == r) -			{ -				idle = setup.wValueL; -				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;  	} + +	return false;  }  HID_::HID_(void) : PUSBListNode(1, 1, epType), -                   rootNode(NULL), sizeof_hidReportDescriptor(0), +                   rootNode(NULL), descriptorSize(0),                     protocol(1), idle(1)  {  	epType[0] = EP_TYPE_INTERRUPT_IN; diff --git a/libraries/HID/HID.h b/libraries/HID/HID.h index c6f9ab5..d31d9c5 100644 --- a/libraries/HID/HID.h +++ b/libraries/HID/HID.h @@ -1,23 +1,20 @@  /* -  HID.h -    Copyright (c) 2015, Arduino LLC    Original code (pre-library): Copyright (c) 2011, Peter Barrett -  This library is free software; you can redistribute it and/or -  modify it under the terms of the GNU Lesser General Public -  License as published by the Free Software Foundation; either -  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, -  but WITHOUT ANY WARRANTY; without even the implied warranty of -  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -  Lesser General Public License for more details. +  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. -  You should have received a copy of the GNU Lesser General Public -  License along with this library; if not, write to the Free Software -  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -*/ +  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +  WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +  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. + */  #ifndef HID_h  #define HID_h @@ -91,7 +88,7 @@ private:    uint8_t epType[1];    HIDDescriptorListNode* rootNode; -  uint16_t sizeof_hidReportDescriptor; +  uint16_t descriptorSize;    uint8_t protocol;    uint8_t idle; @@ -99,8 +96,6 @@ private:  #define D_HIDREPORT(length) { 9, 0x21, 0x01, 0x01, 0, 1, 0x22, lowByte(length), highByte(length) } -#define WEAK __attribute__ ((weak)) - -#endif +#endif // USBCON -#endif +#endif // HID_h | 
