Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: UsbHostMAX3421E_Hello
usbhid.cpp
00001 /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved. 00002 00003 This software may be distributed and modified under the terms of the GNU 00004 General Public License version 2 (GPL2) as published by the Free Software 00005 Foundation and appearing in the file GPL2.TXT included in the packaging of 00006 this file. Please note that GPL2 Section 2[b] requires that all works based 00007 on this software must also be made publicly available under the terms of 00008 the GPL2 ("Copyleft"). 00009 00010 Contact information 00011 ------------------- 00012 00013 Circuits At Home, LTD 00014 Web : http://www.circuitsathome.com 00015 e-mail : support@circuitsathome.com 00016 */ 00017 00018 #include "usbhid.h" 00019 00020 //get HID report descriptor 00021 00022 /* WRONG! Endpoint is _ALWAYS_ ZERO for HID! We want the _INTERFACE_ value here! 00023 uint8_t USBHID::GetReportDescr(uint8_t ep, USBReadParser *parser) { 00024 const uint8_t constBufLen = 64; 00025 uint8_t buf[constBufLen]; 00026 00027 uint8_t rcode = pUsb->ctrlReq(bAddress, ep, bmREQ_HID_REPORT, USB_REQUEST_GET_DESCRIPTOR, 0x00, 00028 HID_DESCRIPTOR_REPORT, 0x0000, 128, constBufLen, buf, (USBReadParser*)parser); 00029 00030 //return ((rcode != hrSTALL) ? rcode : 0); 00031 return rcode; 00032 } 00033 */ 00034 uint8_t USBHID::GetReportDescr(uint16_t wIndex, USBReadParser *parser) { 00035 const uint8_t constBufLen = 64; 00036 uint8_t buf[constBufLen]; 00037 00038 uint8_t rcode = pUsb->ctrlReq(bAddress, 0x00, bmREQ_HID_REPORT, USB_REQUEST_GET_DESCRIPTOR, 0x00, 00039 HID_DESCRIPTOR_REPORT, wIndex, 128, constBufLen, buf, (USBReadParser*)parser); 00040 00041 //return ((rcode != hrSTALL) ? rcode : 0); 00042 return rcode; 00043 } 00044 00045 //uint8_t USBHID::getHidDescr( uint8_t ep, uint16_t nbytes, uint8_t* dataptr ) 00046 //{ 00047 // return( pUsb->ctrlReq( bAddress, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, 0x00, HID_DESCRIPTOR_HID, 0x0000, nbytes, dataptr )); 00048 //} 00049 00050 uint8_t USBHID::SetReport(uint8_t ep, uint8_t iface, uint8_t report_type, uint8_t report_id, uint16_t nbytes, uint8_t* dataptr) { 00051 return ( pUsb->ctrlReq(bAddress, ep, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, report_id, report_type, iface, nbytes, nbytes, dataptr, NULL)); 00052 } 00053 00054 uint8_t USBHID::GetReport(uint8_t ep, uint8_t iface, uint8_t report_type, uint8_t report_id, uint16_t nbytes, uint8_t* dataptr) { 00055 return ( pUsb->ctrlReq(bAddress, ep, bmREQ_HID_IN, HID_REQUEST_GET_REPORT, report_id, report_type, iface, nbytes, nbytes, dataptr, NULL)); 00056 } 00057 00058 uint8_t USBHID::GetIdle(uint8_t iface, uint8_t reportID, uint8_t* dataptr) { 00059 return ( pUsb->ctrlReq(bAddress, 0, bmREQ_HID_IN, HID_REQUEST_GET_IDLE, reportID, 0, iface, 0x0001, 0x0001, dataptr, NULL)); 00060 } 00061 00062 uint8_t USBHID::SetIdle(uint8_t iface, uint8_t reportID, uint8_t duration) { 00063 return ( pUsb->ctrlReq(bAddress, 0, bmREQ_HID_OUT, HID_REQUEST_SET_IDLE, reportID, duration, iface, 0x0000, 0x0000, NULL, NULL)); 00064 } 00065 00066 uint8_t USBHID::SetProtocol(uint8_t iface, uint8_t protocol) { 00067 return ( pUsb->ctrlReq(bAddress, 0, bmREQ_HID_OUT, HID_REQUEST_SET_PROTOCOL, protocol, 0x00, iface, 0x0000, 0x0000, NULL, NULL)); 00068 } 00069 00070 uint8_t USBHID::GetProtocol(uint8_t iface, uint8_t* dataptr) { 00071 return ( pUsb->ctrlReq(bAddress, 0, bmREQ_HID_IN, HID_REQUEST_GET_PROTOCOL, 0x00, 0x00, iface, 0x0001, 0x0001, dataptr, NULL)); 00072 } 00073 00074 void USBHID::PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR* ep_ptr) { 00075 Notify(PSTR("Endpoint descriptor:"), 0x80); 00076 Notify(PSTR("\r\nLength:\t\t"), 0x80); 00077 D_PrintHex<uint8_t > (ep_ptr->bLength, 0x80); 00078 Notify(PSTR("\r\nType:\t\t"), 0x80); 00079 D_PrintHex<uint8_t > (ep_ptr->bDescriptorType, 0x80); 00080 Notify(PSTR("\r\nAddress:\t"), 0x80); 00081 D_PrintHex<uint8_t > (ep_ptr->bEndpointAddress, 0x80); 00082 Notify(PSTR("\r\nAttributes:\t"), 0x80); 00083 D_PrintHex<uint8_t > (ep_ptr->bmAttributes, 0x80); 00084 Notify(PSTR("\r\nMaxPktSize:\t"), 0x80); 00085 D_PrintHex<uint16_t > (ep_ptr->wMaxPacketSize, 0x80); 00086 Notify(PSTR("\r\nPoll Intrv:\t"), 0x80); 00087 D_PrintHex<uint8_t > (ep_ptr->bInterval, 0x80); 00088 } 00089 00090 void USBHID::PrintHidDescriptor(const USB_HID_DESCRIPTOR *pDesc) { 00091 Notify(PSTR("\r\n\r\nHID Descriptor:\r\n"), 0x80); 00092 Notify(PSTR("bDescLength:\t\t"), 0x80); 00093 D_PrintHex<uint8_t > (pDesc->bLength, 0x80); 00094 00095 Notify(PSTR("\r\nbDescriptorType:\t"), 0x80); 00096 D_PrintHex<uint8_t > (pDesc->bDescriptorType, 0x80); 00097 00098 Notify(PSTR("\r\nbcdHID:\t\t\t"), 0x80); 00099 D_PrintHex<uint16_t > (pDesc->bcdHID, 0x80); 00100 00101 Notify(PSTR("\r\nbCountryCode:\t\t"), 0x80); 00102 D_PrintHex<uint8_t > (pDesc->bCountryCode, 0x80); 00103 00104 Notify(PSTR("\r\nbNumDescriptors:\t"), 0x80); 00105 D_PrintHex<uint8_t > (pDesc->bNumDescriptors, 0x80); 00106 00107 Notify(PSTR("\r\nbDescrType:\t\t"), 0x80); 00108 D_PrintHex<uint8_t > (pDesc->bDescrType, 0x80); 00109 00110 Notify(PSTR("\r\nwDescriptorLength:\t"), 0x80); 00111 D_PrintHex<uint16_t > (pDesc->wDescriptorLength, 0x80); 00112 }
Generated on Tue Jul 12 2022 18:12:05 by
1.7.2