]> git.friedersdorff.com Git - max/tmk_keyboard.git/blob - tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/hid.cpp
lufa: usb-usb: Use LUFA startup instead of cusotom
[max/tmk_keyboard.git] / tmk_core / protocol / usb_hid / USB_Host_Shield_2.0 / hid.cpp
1 /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
2
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
8 the GPL2 ("Copyleft").
9
10 Contact information
11 -------------------
12
13 Circuits At Home, LTD
14 Web      :  http://www.circuitsathome.com
15 e-mail   :  support@circuitsathome.com
16  */
17
18 #include "hid.h"
19
20 //get HID report descriptor
21
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];
26
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);
29
30         //return ((rcode != hrSTALL) ? rcode : 0);
31         return rcode;
32 }
33  */
34 uint8_t HID::GetReportDescr(uint16_t wIndex, USBReadParser *parser) {
35         const uint8_t constBufLen = 64;
36         uint8_t buf[constBufLen];
37
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);
40
41         //return ((rcode != hrSTALL) ? rcode : 0);
42         return rcode;
43 }
44
45 //uint8_t HID::getHidDescr( uint8_t ep, uint16_t nbytes, uint8_t* dataptr )
46 //{
47 //    return( pUsb->ctrlReq( bAddress, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, 0x00, HID_DESCRIPTOR_HID, 0x0000, nbytes, dataptr ));
48 //}
49
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));
52 }
53
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));
56 }
57
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));
60 }
61
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));
64 }
65
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));
68 }
69
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));
72 }
73
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);
88 }
89
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);
94
95         Notify(PSTR("\r\nbDescriptorType:\t"), 0x80);
96         D_PrintHex<uint8_t > (pDesc->bDescriptorType, 0x80);
97
98         Notify(PSTR("\r\nbcdHID:\t\t\t"), 0x80);
99         D_PrintHex<uint16_t > (pDesc->bcdHID, 0x80);
100
101         Notify(PSTR("\r\nbCountryCode:\t\t"), 0x80);
102         D_PrintHex<uint8_t > (pDesc->bCountryCode, 0x80);
103
104         Notify(PSTR("\r\nbNumDescriptors:\t"), 0x80);
105         D_PrintHex<uint8_t > (pDesc->bNumDescriptors, 0x80);
106
107         Notify(PSTR("\r\nbDescrType:\t\t"), 0x80);
108         D_PrintHex<uint8_t > (pDesc->bDescrType, 0x80);
109
110         Notify(PSTR("\r\nwDescriptorLength:\t"), 0x80);
111         D_PrintHex<uint16_t > (pDesc->wDescriptorLength, 0x80);
112 }