1 /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
3 This software may be distributed and modified under the terms of the GNU
4 General Public License version 2 (GPL2) as published by the Free Software
5 Foundation and appearing in the file GPL2.TXT included in the packaging of
6 this file. Please note that GPL2 Section 2[b] requires that all works based
7 on this software must also be made publicly available under the terms of
14 Web : http://www.circuitsathome.com
15 e-mail : support@circuitsathome.com
20 //get HID report descriptor
22 /* WRONG! Endpoint is _ALWAYS_ ZERO for HID! We want the _INTERFACE_ value here!
23 uint8_t HID::GetReportDescr(uint8_t ep, USBReadParser *parser) {
24 const uint8_t constBufLen = 64;
25 uint8_t buf[constBufLen];
27 uint8_t rcode = pUsb->ctrlReq(bAddress, ep, bmREQ_HID_REPORT, USB_REQUEST_GET_DESCRIPTOR, 0x00,
28 HID_DESCRIPTOR_REPORT, 0x0000, 128, constBufLen, buf, (USBReadParser*)parser);
30 //return ((rcode != hrSTALL) ? rcode : 0);
34 uint8_t HID::GetReportDescr(uint16_t wIndex
, USBReadParser
*parser
) {
35 const uint8_t constBufLen
= 64;
36 uint8_t buf
[constBufLen
];
38 uint8_t rcode
= pUsb
->ctrlReq(bAddress
, 0x00, bmREQ_HID_REPORT
, USB_REQUEST_GET_DESCRIPTOR
, 0x00,
39 HID_DESCRIPTOR_REPORT
, wIndex
, 128, constBufLen
, buf
, (USBReadParser
*)parser
);
41 //return ((rcode != hrSTALL) ? rcode : 0);
45 //uint8_t HID::getHidDescr( uint8_t ep, uint16_t nbytes, uint8_t* dataptr )
47 // return( pUsb->ctrlReq( bAddress, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, 0x00, HID_DESCRIPTOR_HID, 0x0000, nbytes, dataptr ));
50 uint8_t HID::SetReport(uint8_t ep
, uint8_t iface
, uint8_t report_type
, uint8_t report_id
, uint16_t nbytes
, uint8_t* dataptr
) {
51 return ( pUsb
->ctrlReq(bAddress
, ep
, bmREQ_HID_OUT
, HID_REQUEST_SET_REPORT
, report_id
, report_type
, iface
, nbytes
, nbytes
, dataptr
, NULL
));
54 uint8_t HID::GetReport(uint8_t ep
, uint8_t iface
, uint8_t report_type
, uint8_t report_id
, uint16_t nbytes
, uint8_t* dataptr
) {
55 return ( pUsb
->ctrlReq(bAddress
, ep
, bmREQ_HID_IN
, HID_REQUEST_GET_REPORT
, report_id
, report_type
, iface
, nbytes
, nbytes
, dataptr
, NULL
));
58 uint8_t HID::GetIdle(uint8_t iface
, uint8_t reportID
, uint8_t* dataptr
) {
59 return ( pUsb
->ctrlReq(bAddress
, 0, bmREQ_HID_IN
, HID_REQUEST_GET_IDLE
, reportID
, 0, iface
, 0x0001, 0x0001, dataptr
, NULL
));
62 uint8_t HID::SetIdle(uint8_t iface
, uint8_t reportID
, uint8_t duration
) {
63 return ( pUsb
->ctrlReq(bAddress
, 0, bmREQ_HID_OUT
, HID_REQUEST_SET_IDLE
, reportID
, duration
, iface
, 0x0000, 0x0000, NULL
, NULL
));
66 uint8_t HID::SetProtocol(uint8_t iface
, uint8_t protocol
) {
67 return ( pUsb
->ctrlReq(bAddress
, 0, bmREQ_HID_OUT
, HID_REQUEST_SET_PROTOCOL
, protocol
, 0x00, iface
, 0x0000, 0x0000, NULL
, NULL
));
70 uint8_t HID::GetProtocol(uint8_t iface
, uint8_t* dataptr
) {
71 return ( pUsb
->ctrlReq(bAddress
, 0, bmREQ_HID_IN
, HID_REQUEST_GET_PROTOCOL
, 0x00, 0x00, iface
, 0x0001, 0x0001, dataptr
, NULL
));
74 void HID::PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR
* ep_ptr
) {
75 Notify(PSTR("Endpoint descriptor:"), 0x80);
76 Notify(PSTR("\r\nLength:\t\t"), 0x80);
77 D_PrintHex
<uint8_t > (ep_ptr
->bLength
, 0x80);
78 Notify(PSTR("\r\nType:\t\t"), 0x80);
79 D_PrintHex
<uint8_t > (ep_ptr
->bDescriptorType
, 0x80);
80 Notify(PSTR("\r\nAddress:\t"), 0x80);
81 D_PrintHex
<uint8_t > (ep_ptr
->bEndpointAddress
, 0x80);
82 Notify(PSTR("\r\nAttributes:\t"), 0x80);
83 D_PrintHex
<uint8_t > (ep_ptr
->bmAttributes
, 0x80);
84 Notify(PSTR("\r\nMaxPktSize:\t"), 0x80);
85 D_PrintHex
<uint16_t > (ep_ptr
->wMaxPacketSize
, 0x80);
86 Notify(PSTR("\r\nPoll Intrv:\t"), 0x80);
87 D_PrintHex
<uint8_t > (ep_ptr
->bInterval
, 0x80);
90 void HID::PrintHidDescriptor(const USB_HID_DESCRIPTOR
*pDesc
) {
91 Notify(PSTR("\r\n\r\nHID Descriptor:\r\n"), 0x80);
92 Notify(PSTR("bDescLength:\t\t"), 0x80);
93 D_PrintHex
<uint8_t > (pDesc
->bLength
, 0x80);
95 Notify(PSTR("\r\nbDescriptorType:\t"), 0x80);
96 D_PrintHex
<uint8_t > (pDesc
->bDescriptorType
, 0x80);
98 Notify(PSTR("\r\nbcdHID:\t\t\t"), 0x80);
99 D_PrintHex
<uint16_t > (pDesc
->bcdHID
, 0x80);
101 Notify(PSTR("\r\nbCountryCode:\t\t"), 0x80);
102 D_PrintHex
<uint8_t > (pDesc
->bCountryCode
, 0x80);
104 Notify(PSTR("\r\nbNumDescriptors:\t"), 0x80);
105 D_PrintHex
<uint8_t > (pDesc
->bNumDescriptors
, 0x80);
107 Notify(PSTR("\r\nbDescrType:\t\t"), 0x80);
108 D_PrintHex
<uint8_t > (pDesc
->bDescrType
, 0x80);
110 Notify(PSTR("\r\nwDescriptorLength:\t"), 0x80);
111 D_PrintHex
<uint16_t > (pDesc
->wDescriptorLength
, 0x80);