Zoltan Hudak / UsbHostMAX3421E

Dependents:   UsbHostMAX3421E_Hello

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usbhid.cpp Source File

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 }