17#if !defined(__HIDBOOT_H__)
22#define UHS_HID_BOOT_KEY_ZERO 0x27
23#define UHS_HID_BOOT_KEY_ENTER 0x28
24#define UHS_HID_BOOT_KEY_SPACE 0x2c
25#define UHS_HID_BOOT_KEY_CAPS_LOCK 0x39
26#define UHS_HID_BOOT_KEY_SCROLL_LOCK 0x47
27#define UHS_HID_BOOT_KEY_NUM_LOCK 0x53
28#define UHS_HID_BOOT_KEY_ZERO2 0x62
29#define UHS_HID_BOOT_KEY_PERIOD 0x63
32#define bitsEndpoints(p) ((((p) & USB_HID_PROTOCOL_KEYBOARD)? 2 : 0) | (((p) & USB_HID_PROTOCOL_MOUSE)? 1 : 0))
33#define totalEndpoints(p) ((bitsEndpoints(p) == 3) ? 3 : 2)
34#define epMUL(p) ((((p) & USB_HID_PROTOCOL_KEYBOARD)? 1 : 0) + (((p) & USB_HID_PROTOCOL_MOUSE)? 1 : 0))
122 static const uint8_t numKeys[10];
123 static const uint8_t symKeysUp[12];
124 static const uint8_t symKeysLo[12];
125 static const uint8_t padKeys[5];
156 kbdLockingKeys.kbdLeds.bmNumLock = ~kbdLockingKeys.kbdLeds.bmNumLock;
159 kbdLockingKeys.kbdLeds.bmCapsLock = ~kbdLockingKeys.kbdLeds.bmCapsLock;
162 kbdLockingKeys.kbdLeds.bmScrollLock = ~kbdLockingKeys.kbdLeds.bmScrollLock;
200template <const u
int8_t BOOT_PROTOCOL>
213 bool bRptProtoEnable;
218 return pRptParser[
id];
225 pRptParser[
id] =
prs;
255template <const u
int8_t BOOT_PROTOCOL>
260bRptProtoEnable(bRptProtoEnable) {
264 pRptParser[
i] =
NULL;
270template <const u
int8_t BOOT_PROTOCOL>
273 epInfo[
i].epAddr = 0;
274 epInfo[
i].maxPktSize = (
i) ? 0 : 8;
275 epInfo[
i].bmSndToggle = 0;
276 epInfo[
i].bmRcvToggle = 0;
284template <const u
int8_t BOOT_PROTOCOL>
326 p->lowspeed = lowspeed;
356 rcode = pUsb->setAddr(0, 0, bAddress);
376 p->lowspeed = lowspeed;
390 USBTRACE(
"HID_PROTOCOL_KEYBOARD AND MOUSE\r\n");
405 USBTRACE(
"HID_PROTOCOL_KEYBOARD\r\n");
444 rcode = pUsb->setEpInfoEntry(bAddress, bNumEP, epInfo);
451 rcode = pUsb->setConf(bAddress, 0, bConfNum);
485 SetReport(0, 0, 2, 0, 1, &
rcode);
538template <const u
int8_t BOOT_PROTOCOL>
550 if(
pep->bInterval > bInterval) bInterval =
pep->bInterval;
553 epInfo[bNumEP].epAddr = (
pep->bEndpointAddress & 0x0F);
554 epInfo[bNumEP].maxPktSize = (
uint8_t)
pep->wMaxPacketSize;
555 epInfo[bNumEP].bmSndToggle = 0;
556 epInfo[bNumEP].bmRcvToggle = 0;
563template <const u
int8_t BOOT_PROTOCOL>
565 pUsb->GetAddressPool().FreeAddress(bAddress);
577template <const u
int8_t BOOT_PROTOCOL>
588 USBTRACE3(
"(hidboot.h) epInfo[epInterruptInIndex + i].epAddr=", epInfo[epInterruptInIndex +
i].epAddr, 0x81);
589 USBTRACE3(
"(hidboot.h) epInfo[epInterruptInIndex + i].maxPktSize=", epInfo[epInterruptInIndex +
i].maxPktSize, 0x81);
597 rcode = pUsb->inTransfer(bAddress, epInfo[epInterruptInIndex +
i].epAddr, &read,
buf);
600 if(!
rcode && read > 2) {
610 USBTRACE3(
"(hidboot.h) Strange read count: ", read, 0x80);
#define USB_ERROR_OUT_OF_ADDRESS_SPACE_IN_POOL
#define USB_ERROR_CLASS_INSTANCE_ALREADY_IN_USE
#define USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED
#define USB_ERROR_EPINFO_IS_NULL
#define USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL
#define USB_NAK_MAX_POWER
virtual void FreeAddress(uint8_t addr)=0
virtual UsbDevice * GetUsbDevicePtr(uint8_t addr)=0
virtual uint8_t AllocAddress(uint8_t parent, bool is_hub=false, uint8_t port=0)=0
void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset)
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep)
virtual bool SetReportParser(uint8_t id, HIDReportParser *prs)
virtual uint8_t GetAddress()
virtual bool DEVCLASSOK(uint8_t klass)
uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed)
HIDBoot(USB *p, bool bRptProtoEnable=false)
virtual bool DEVSUBCLASSOK(uint8_t subklass)
void Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)
union KeyboardReportParser::@17 prevState
virtual void OnKeyUp(uint8_t mod, uint8_t key)
virtual const uint8_t * getNumKeys()
uint8_t bInfo[sizeof(KBDINFO)]
union KeyboardReportParser::@18 kbdLockingKeys
virtual const uint8_t * getSymKeysUp()
uint8_t OemToAscii(uint8_t mod, uint8_t key)
virtual const uint8_t * getPadKeys()
virtual void OnControlKeysChanged(uint8_t before, uint8_t after)
virtual const uint8_t * getSymKeysLo()
virtual void OnKeyDown(uint8_t mod, uint8_t key)
virtual uint8_t HandleLockingKeys(USBHID *hid, uint8_t key)
virtual void OnRightButtonUp(MOUSEINFO *mi)
virtual void OnMouseMove(MOUSEINFO *mi)
virtual void OnRightButtonDown(MOUSEINFO *mi)
virtual void OnLeftButtonUp(MOUSEINFO *mi)
virtual void OnMiddleButtonUp(MOUSEINFO *mi)
uint8_t bInfo[sizeof(MOUSEINFO)]
virtual void OnLeftButtonDown(MOUSEINFO *mi)
virtual void OnMiddleButtonDown(MOUSEINFO *mi)
void Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)
static const uint8_t totalEndpoints
uint8_t RegisterDeviceClass(USBDeviceConfig *pdev)
#define CP_MASK_COMPARE_ALL
#define UHS_HID_BOOT_KEY_CAPS_LOCK
#define totalEndpoints(p)
#define UHS_HID_BOOT_KEY_NUM_LOCK
#define UHS_HID_BOOT_KEY_SCROLL_LOCK
#define USBTRACE3(s, r, l)
#define NotifyFailSetConfDescr(...)
#define NotifyFailGetDevDescr(...)
#define bmUSB_TRANSFER_TYPE
#define USB_TRANSFER_TYPE_INTERRUPT
#define USB_HID_PROTOCOL_MOUSE
#define USB_HID_BOOT_PROTOCOL
#define USB_HID_PROTOCOL_KEYBOARD
#define HID_BOOT_INTF_SUBCLASS