USBHost library with fixes

Dependencies:   mbed-rtos FATFileSystem

Dependents:   mbedica

Committer:
zrussell3
Date:
Thu Dec 13 19:24:21 2018 +0000
Revision:
0:b176d95bb38f
Modified USBHost library to fix modifier input

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zrussell3 0:b176d95bb38f 1 /* mbed USBHost Library
zrussell3 0:b176d95bb38f 2 * Copyright (c) 2006-2013 ARM Limited
zrussell3 0:b176d95bb38f 3 *
zrussell3 0:b176d95bb38f 4 * Licensed under the Apache License, Version 2.0 (the "License");
zrussell3 0:b176d95bb38f 5 * you may not use this file except in compliance with the License.
zrussell3 0:b176d95bb38f 6 * You may obtain a copy of the License at
zrussell3 0:b176d95bb38f 7 *
zrussell3 0:b176d95bb38f 8 * http://www.apache.org/licenses/LICENSE-2.0
zrussell3 0:b176d95bb38f 9 *
zrussell3 0:b176d95bb38f 10 * Unless required by applicable law or agreed to in writing, software
zrussell3 0:b176d95bb38f 11 * distributed under the License is distributed on an "AS IS" BASIS,
zrussell3 0:b176d95bb38f 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
zrussell3 0:b176d95bb38f 13 * See the License for the specific language governing permissions and
zrussell3 0:b176d95bb38f 14 * limitations under the License.
zrussell3 0:b176d95bb38f 15 */
zrussell3 0:b176d95bb38f 16
zrussell3 0:b176d95bb38f 17 #ifndef USBHOSTKEYBOARD_H
zrussell3 0:b176d95bb38f 18 #define USBHOSTKEYBOARD_H
zrussell3 0:b176d95bb38f 19
zrussell3 0:b176d95bb38f 20 #include "USBHostConf.h"
zrussell3 0:b176d95bb38f 21
zrussell3 0:b176d95bb38f 22 #if USBHOST_KEYBOARD
zrussell3 0:b176d95bb38f 23
zrussell3 0:b176d95bb38f 24 #include "USBHost.h"
zrussell3 0:b176d95bb38f 25
zrussell3 0:b176d95bb38f 26 /**
zrussell3 0:b176d95bb38f 27 * A class to communicate a USB keyboard
zrussell3 0:b176d95bb38f 28 */
zrussell3 0:b176d95bb38f 29 class USBHostKeyboard : public IUSBEnumerator {
zrussell3 0:b176d95bb38f 30 public:
zrussell3 0:b176d95bb38f 31
zrussell3 0:b176d95bb38f 32 /**
zrussell3 0:b176d95bb38f 33 * Constructor
zrussell3 0:b176d95bb38f 34 */
zrussell3 0:b176d95bb38f 35 USBHostKeyboard();
zrussell3 0:b176d95bb38f 36
zrussell3 0:b176d95bb38f 37 /**
zrussell3 0:b176d95bb38f 38 * Try to connect a keyboard device
zrussell3 0:b176d95bb38f 39 *
zrussell3 0:b176d95bb38f 40 * @return true if connection was successful
zrussell3 0:b176d95bb38f 41 */
zrussell3 0:b176d95bb38f 42 bool connect();
zrussell3 0:b176d95bb38f 43
zrussell3 0:b176d95bb38f 44 /**
zrussell3 0:b176d95bb38f 45 * Check if a keyboard is connected
zrussell3 0:b176d95bb38f 46 *
zrussell3 0:b176d95bb38f 47 * @returns true if a keyboard is connected
zrussell3 0:b176d95bb38f 48 */
zrussell3 0:b176d95bb38f 49 bool connected();
zrussell3 0:b176d95bb38f 50
zrussell3 0:b176d95bb38f 51 /**
zrussell3 0:b176d95bb38f 52 * Attach a callback called when a keyboard event is received
zrussell3 0:b176d95bb38f 53 *
zrussell3 0:b176d95bb38f 54 * @param ptr function pointer
zrussell3 0:b176d95bb38f 55 */
zrussell3 0:b176d95bb38f 56 inline void attach(void (*ptr)(uint8_t key)) {
zrussell3 0:b176d95bb38f 57 if (ptr != NULL) {
zrussell3 0:b176d95bb38f 58 onKey = ptr;
zrussell3 0:b176d95bb38f 59 }
zrussell3 0:b176d95bb38f 60 }
zrussell3 0:b176d95bb38f 61
zrussell3 0:b176d95bb38f 62 /**
zrussell3 0:b176d95bb38f 63 * Attach a callback called when a keyboard event is received
zrussell3 0:b176d95bb38f 64 *
zrussell3 0:b176d95bb38f 65 * @param ptr function pointer
zrussell3 0:b176d95bb38f 66 */
zrussell3 0:b176d95bb38f 67 inline void attach(void (*ptr)(uint8_t keyCode, uint8_t modifier)) {
zrussell3 0:b176d95bb38f 68 if (ptr != NULL) {
zrussell3 0:b176d95bb38f 69 onKeyCode = ptr;
zrussell3 0:b176d95bb38f 70 }
zrussell3 0:b176d95bb38f 71 }
zrussell3 0:b176d95bb38f 72
zrussell3 0:b176d95bb38f 73 protected:
zrussell3 0:b176d95bb38f 74 //From IUSBEnumerator
zrussell3 0:b176d95bb38f 75 virtual void setVidPid(uint16_t vid, uint16_t pid);
zrussell3 0:b176d95bb38f 76 virtual bool parseInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol); //Must return true if the interface should be parsed
zrussell3 0:b176d95bb38f 77 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
zrussell3 0:b176d95bb38f 78
zrussell3 0:b176d95bb38f 79 private:
zrussell3 0:b176d95bb38f 80 USBHost * host;
zrussell3 0:b176d95bb38f 81 USBDeviceConnected * dev;
zrussell3 0:b176d95bb38f 82 USBEndpoint * int_in;
zrussell3 0:b176d95bb38f 83 uint8_t report[9];
zrussell3 0:b176d95bb38f 84 int keyboard_intf;
zrussell3 0:b176d95bb38f 85 bool keyboard_device_found;
zrussell3 0:b176d95bb38f 86
zrussell3 0:b176d95bb38f 87 bool dev_connected;
zrussell3 0:b176d95bb38f 88
zrussell3 0:b176d95bb38f 89 void rxHandler();
zrussell3 0:b176d95bb38f 90
zrussell3 0:b176d95bb38f 91 void (*onKey)(uint8_t key);
zrussell3 0:b176d95bb38f 92 void (*onKeyCode)(uint8_t key, uint8_t modifier);
zrussell3 0:b176d95bb38f 93
zrussell3 0:b176d95bb38f 94 int report_id;
zrussell3 0:b176d95bb38f 95
zrussell3 0:b176d95bb38f 96 void init();
zrussell3 0:b176d95bb38f 97
zrussell3 0:b176d95bb38f 98 };
zrussell3 0:b176d95bb38f 99
zrussell3 0:b176d95bb38f 100 #endif
zrussell3 0:b176d95bb38f 101
zrussell3 0:b176d95bb38f 102 #endif