USB Host Shield 2.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
hid.cpp
Go to the documentation of this file.
1 #include "hid.h"
2 
3 //get HID report descriptor
4 
5 /* WRONG! Endpoint is _ALWAYS_ ZERO for HID! We want the _INTERFACE_ value here!
6 uint8_t HID::GetReportDescr(uint8_t ep, USBReadParser *parser) {
7  const uint8_t constBufLen = 64;
8  uint8_t buf[constBufLen];
9 
10  uint8_t rcode = pUsb->ctrlReq(bAddress, ep, bmREQ_HIDREPORT, USB_REQUEST_GET_DESCRIPTOR, 0x00,
11  HID_DESCRIPTOR_REPORT, 0x0000, 128, constBufLen, buf, (USBReadParser*)parser);
12 
13  //return ((rcode != hrSTALL) ? rcode : 0);
14  return rcode;
15 }
16  */
17 uint8_t HID::GetReportDescr(uint16_t wIndex, USBReadParser *parser) {
18  const uint8_t constBufLen = 64;
19  uint8_t buf[constBufLen];
20 
21  uint8_t rcode = pUsb->ctrlReq(bAddress, 0x00, bmREQ_HIDREPORT, USB_REQUEST_GET_DESCRIPTOR, 0x00,
22  HID_DESCRIPTOR_REPORT, wIndex, 128, constBufLen, buf, (USBReadParser*)parser);
23 
24  //return ((rcode != hrSTALL) ? rcode : 0);
25  return rcode;
26 }
27 
28 //uint8_t HID::getHidDescr( uint8_t ep, uint16_t nbytes, uint8_t* dataptr )
29 //{
30 // return( pUsb->ctrlReq( bAddress, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, 0x00, HID_DESCRIPTOR_HID, 0x0000, nbytes, dataptr ));
31 //}
32 
33 uint8_t HID::SetReport(uint8_t ep, uint8_t iface, uint8_t report_type, uint8_t report_id, uint16_t nbytes, uint8_t* dataptr) {
34  return ( pUsb->ctrlReq(bAddress, ep, bmREQ_HIDOUT, HID_REQUEST_SET_REPORT, report_id, report_type, iface, nbytes, nbytes, dataptr, NULL));
35 }
36 
37 uint8_t HID::GetReport(uint8_t ep, uint8_t iface, uint8_t report_type, uint8_t report_id, uint16_t nbytes, uint8_t* dataptr) {
38  return ( pUsb->ctrlReq(bAddress, ep, bmREQ_HIDIN, HID_REQUEST_GET_REPORT, report_id, report_type, iface, nbytes, nbytes, dataptr, NULL));
39 }
40 
41 uint8_t HID::GetIdle(uint8_t iface, uint8_t reportID, uint8_t* dataptr) {
42  return ( pUsb->ctrlReq(bAddress, 0, bmREQ_HIDIN, HID_REQUEST_GET_IDLE, reportID, 0, iface, 0x0001, 0x0001, dataptr, NULL));
43 }
44 
45 uint8_t HID::SetIdle(uint8_t iface, uint8_t reportID, uint8_t duration) {
46  return ( pUsb->ctrlReq(bAddress, 0, bmREQ_HIDOUT, HID_REQUEST_SET_IDLE, reportID, duration, iface, 0x0000, 0x0000, NULL, NULL));
47 }
48 
49 uint8_t HID::SetProtocol(uint8_t iface, uint8_t protocol) {
50  return ( pUsb->ctrlReq(bAddress, 0, bmREQ_HIDOUT, HID_REQUEST_SET_PROTOCOL, protocol, 0x00, iface, 0x0000, 0x0000, NULL, NULL));
51 }
52 
53 uint8_t HID::GetProtocol(uint8_t iface, uint8_t* dataptr) {
54  return ( pUsb->ctrlReq(bAddress, 0, bmREQ_HIDIN, HID_REQUEST_GET_PROTOCOL, 0x00, 0x00, iface, 0x0001, 0x0001, dataptr, NULL));
55 }
56 
58  Notify(PSTR("Endpoint descriptor:"), 0x80);
59  Notify(PSTR("\r\nLength:\t\t"), 0x80);
60  D_PrintHex<uint8_t > (ep_ptr->bLength, 0x80);
61  Notify(PSTR("\r\nType:\t\t"), 0x80);
62  D_PrintHex<uint8_t > (ep_ptr->bDescriptorType, 0x80);
63  Notify(PSTR("\r\nAddress:\t"), 0x80);
64  D_PrintHex<uint8_t > (ep_ptr->bEndpointAddress, 0x80);
65  Notify(PSTR("\r\nAttributes:\t"), 0x80);
66  D_PrintHex<uint8_t > (ep_ptr->bmAttributes, 0x80);
67  Notify(PSTR("\r\nMaxPktSize:\t"), 0x80);
68  D_PrintHex<uint16_t > (ep_ptr->wMaxPacketSize, 0x80);
69  Notify(PSTR("\r\nPoll Intrv:\t"), 0x80);
70  D_PrintHex<uint8_t > (ep_ptr->bInterval, 0x80);
71 }
72 
74  Notify(PSTR("\r\n\r\nHID Descriptor:\r\n"), 0x80);
75  Notify(PSTR("bDescLength:\t\t"), 0x80);
76  D_PrintHex<uint8_t > (pDesc->bLength, 0x80);
77 
78  Notify(PSTR("\r\nbDescriptorType:\t"), 0x80);
79  D_PrintHex<uint8_t > (pDesc->bDescriptorType, 0x80);
80 
81  Notify(PSTR("\r\nbcdHID:\t\t\t"), 0x80);
82  D_PrintHex<uint16_t > (pDesc->bcdHID, 0x80);
83 
84  Notify(PSTR("\r\nbCountryCode:\t\t"), 0x80);
85  D_PrintHex<uint8_t > (pDesc->bCountryCode, 0x80);
86 
87  Notify(PSTR("\r\nbNumDescriptors:\t"), 0x80);
88  D_PrintHex<uint8_t > (pDesc->bNumDescriptors, 0x80);
89 
90  Notify(PSTR("\r\nbDescrType:\t\t"), 0x80);
91  D_PrintHex<uint8_t > (pDesc->bDescrType, 0x80);
92 
93  Notify(PSTR("\r\nwDescriptorLength:\t"), 0x80);
94  D_PrintHex<uint16_t > (pDesc->wDescriptorLength, 0x80);
95 }
#define HID_DESCRIPTOR_REPORT
Definition: hid.h:78
#define HID_REQUEST_GET_IDLE
Definition: hid.h:70
uint8_t GetIdle(uint8_t iface, uint8_t reportID, uint8_t *dataptr)
Definition: hid.cpp:41
uint8_t SetReport(uint8_t ep, uint8_t iface, uint8_t report_type, uint8_t report_id, uint16_t nbytes, uint8_t *dataptr)
Definition: hid.cpp:33
#define bmREQ_HIDOUT
Definition: hid.h:63
uint8_t GetReport(uint8_t ep, uint8_t iface, uint8_t report_type, uint8_t report_id, uint16_t nbytes, uint8_t *dataptr)
Definition: hid.cpp:37
#define USB_REQUEST_GET_DESCRIPTOR
Definition: usb_ch9.h:37
#define HID_REQUEST_SET_IDLE
Definition: hid.h:73
uint8_t bLength
Definition: usb_ch9.h:152
uint8_t bAddress
Definition: hid.h:146
uint8_t ctrlReq(uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bRequest, uint8_t wValLo, uint8_t wValHi, uint16_t wInd, uint16_t total, uint16_t nbytes, uint8_t *dataptr, USBReadParser *p)
Definition: Usb.cpp:126
uint8_t GetProtocol(uint8_t iface, uint8_t *dataptr)
Definition: hid.cpp:53
#define Notify(...)
Definition: message.h:44
uint8_t SetProtocol(uint8_t iface, uint8_t protocol)
Definition: hid.cpp:49
uint8_t GetReportDescr(uint16_t wIndex, USBReadParser *parser=NULL)
Definition: hid.cpp:17
#define bmREQ_HIDREPORT
Definition: hid.h:65
uint16_t wDescriptorLength
Definition: usb_ch9.h:158
uint8_t bCountryCode
Definition: usb_ch9.h:155
#define HID_REQUEST_SET_PROTOCOL
Definition: hid.h:74
uint16_t wMaxPacketSize
Definition: usb_ch9.h:146
#define HID_REQUEST_SET_REPORT
Definition: BTD.h:39
#define HID_REQUEST_GET_REPORT
Definition: hid.h:69
uint8_t bNumDescriptors
Definition: usb_ch9.h:156
uint8_t bEndpointAddress
Definition: usb_ch9.h:144
uint8_t bDescriptorType
Definition: usb_ch9.h:153
void PrintHidDescriptor(const USB_HID_DESCRIPTOR *pDesc)
Definition: hid.cpp:73
USB * pUsb
Definition: hid.h:145
uint8_t SetIdle(uint8_t iface, uint8_t reportID, uint8_t duration)
Definition: hid.cpp:45
#define bmREQ_HIDIN
Definition: hid.h:64
void PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR *ep_ptr)
Definition: hid.cpp:57
uint16_t bcdHID
Definition: usb_ch9.h:154
#define HID_REQUEST_GET_PROTOCOL
Definition: hid.h:71
uint8_t bDescrType
Definition: usb_ch9.h:157