Fork to support Mouse boot protocol and steam controllers.

Fork of USBHOST by ST

Committer:
Louise Newberry
Date:
Thu Aug 31 21:36:56 2017 +0100
Revision:
11:ba29414a455e
Parent:
10:89cf0de5f793
Add control write to select boot mode as mice require this to
guarentee boot reports are selected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
geekylou 8:e57ccb876952 1 /* mbed USBHost Library
geekylou 8:e57ccb876952 2 * Copyright (c) 2006-2013 ARM Limited
geekylou 8:e57ccb876952 3 *
geekylou 8:e57ccb876952 4 * Licensed under the Apache License, Version 2.0 (the "License");
geekylou 8:e57ccb876952 5 * you may not use this file except in compliance with the License.
geekylou 8:e57ccb876952 6 * You may obtain a copy of the License at
geekylou 8:e57ccb876952 7 *
geekylou 8:e57ccb876952 8 * http://www.apache.org/licenses/LICENSE-2.0
geekylou 8:e57ccb876952 9 *
geekylou 8:e57ccb876952 10 * Unless required by applicable law or agreed to in writing, software
geekylou 8:e57ccb876952 11 * distributed under the License is distributed on an "AS IS" BASIS,
geekylou 8:e57ccb876952 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
geekylou 8:e57ccb876952 13 * See the License for the specific language governing permissions and
geekylou 8:e57ccb876952 14 * limitations under the License.
geekylou 8:e57ccb876952 15 */
geekylou 8:e57ccb876952 16
geekylou 8:e57ccb876952 17 #ifndef USBHOSTSTEAMCONTROLLER_H
geekylou 8:e57ccb876952 18 #define USBHOSTSTEAMCONTROLLER_H
geekylou 8:e57ccb876952 19
geekylou 8:e57ccb876952 20 #include "USBHostConf.h"
geekylou 8:e57ccb876952 21
geekylou 8:e57ccb876952 22 #if USBHOST_STEAM
geekylou 8:e57ccb876952 23
geekylou 8:e57ccb876952 24 #include "USBHost.h"
geekylou 8:e57ccb876952 25
geekylou 8:e57ccb876952 26 /**
geekylou 8:e57ccb876952 27 * A class to communicate a USB mouse
geekylou 8:e57ccb876952 28 */
geekylou 8:e57ccb876952 29 class USBHostSteamController : public IUSBEnumerator {
geekylou 8:e57ccb876952 30 public:
geekylou 8:e57ccb876952 31
geekylou 8:e57ccb876952 32 /**
geekylou 8:e57ccb876952 33 * Constructor
geekylou 8:e57ccb876952 34 */
geekylou 8:e57ccb876952 35 USBHostSteamController();
geekylou 8:e57ccb876952 36
geekylou 8:e57ccb876952 37 /**
geekylou 8:e57ccb876952 38 * Try to connect a mouse device
geekylou 8:e57ccb876952 39 *
geekylou 8:e57ccb876952 40 * @return true if connection was successful
geekylou 8:e57ccb876952 41 */
geekylou 8:e57ccb876952 42 bool connect();
geekylou 8:e57ccb876952 43
geekylou 8:e57ccb876952 44 /**
geekylou 8:e57ccb876952 45 * Check if a mouse is connected
geekylou 8:e57ccb876952 46 *
geekylou 8:e57ccb876952 47 * @returns true if a mouse is connected
geekylou 8:e57ccb876952 48 */
geekylou 8:e57ccb876952 49 bool connected();
geekylou 8:e57ccb876952 50
geekylou 8:e57ccb876952 51 /**
geekylou 8:e57ccb876952 52 * Attach a callback called when a mouse event is received
geekylou 8:e57ccb876952 53 *
geekylou 8:e57ccb876952 54 * @param ptr function pointer
geekylou 8:e57ccb876952 55 */
geekylou 8:e57ccb876952 56 inline void attachEvent(void (*ptr)(uint32_t buttons, int8_t x, int8_t y, int16_t r_x, int16_t r_y)) {
geekylou 8:e57ccb876952 57 if (ptr != NULL) {
geekylou 8:e57ccb876952 58 onUpdate = ptr;
geekylou 8:e57ccb876952 59 }
geekylou 8:e57ccb876952 60 }
geekylou 8:e57ccb876952 61
geekylou 8:e57ccb876952 62 /**
geekylou 8:e57ccb876952 63 * Attach a callback called when the button state changes
geekylou 8:e57ccb876952 64 *
geekylou 8:e57ccb876952 65 * @param ptr function pointer
geekylou 8:e57ccb876952 66 */
geekylou 8:e57ccb876952 67 inline void attachButtonEvent(void (*ptr)(uint8_t buttons)) {
geekylou 8:e57ccb876952 68 if (ptr != NULL) {
geekylou 8:e57ccb876952 69 onButtonUpdate = ptr;
geekylou 8:e57ccb876952 70 }
geekylou 8:e57ccb876952 71 }
geekylou 8:e57ccb876952 72
geekylou 8:e57ccb876952 73 /**
geekylou 8:e57ccb876952 74 * Attach a callback called when the X axis value changes
geekylou 8:e57ccb876952 75 *
geekylou 8:e57ccb876952 76 * @param ptr function pointer
geekylou 8:e57ccb876952 77 */
geekylou 8:e57ccb876952 78 inline void attachXEvent(void (*ptr)(int8_t x)) {
geekylou 8:e57ccb876952 79 if (ptr != NULL) {
geekylou 8:e57ccb876952 80 onXUpdate = ptr;
geekylou 8:e57ccb876952 81 }
geekylou 8:e57ccb876952 82 }
geekylou 8:e57ccb876952 83
geekylou 8:e57ccb876952 84 /**
geekylou 8:e57ccb876952 85 * Attach a callback called when the Y axis value changes
geekylou 8:e57ccb876952 86 *
geekylou 8:e57ccb876952 87 * @param ptr function pointer
geekylou 8:e57ccb876952 88 */
geekylou 8:e57ccb876952 89 inline void attachYEvent(void (*ptr)(int8_t y)) {
geekylou 8:e57ccb876952 90 if (ptr != NULL) {
geekylou 8:e57ccb876952 91 onYUpdate = ptr;
geekylou 8:e57ccb876952 92 }
geekylou 8:e57ccb876952 93 }
geekylou 8:e57ccb876952 94
geekylou 8:e57ccb876952 95 /**
geekylou 8:e57ccb876952 96 * Attach a callback called when the Z axis value changes (scrolling)
geekylou 8:e57ccb876952 97 *
geekylou 8:e57ccb876952 98 * @param ptr function pointer
geekylou 8:e57ccb876952 99 */
geekylou 8:e57ccb876952 100 inline void attachZEvent(void (*ptr)(int8_t z)) {
geekylou 8:e57ccb876952 101 if (ptr != NULL) {
geekylou 8:e57ccb876952 102 onZUpdate = ptr;
geekylou 8:e57ccb876952 103 }
geekylou 8:e57ccb876952 104 }
geekylou 8:e57ccb876952 105
geekylou 8:e57ccb876952 106 protected:
geekylou 8:e57ccb876952 107 //From IUSBEnumerator
geekylou 8:e57ccb876952 108 virtual void setVidPid(uint16_t vid, uint16_t pid);
geekylou 8:e57ccb876952 109 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
geekylou 8:e57ccb876952 110 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
geekylou 8:e57ccb876952 111
geekylou 8:e57ccb876952 112 private:
geekylou 8:e57ccb876952 113 USBHost * host;
geekylou 8:e57ccb876952 114 USBDeviceConnected * dev;
geekylou 8:e57ccb876952 115 USBEndpoint * int_in;
geekylou 8:e57ccb876952 116 uint8_t report[64];
geekylou 8:e57ccb876952 117 bool dev_connected;
geekylou 10:89cf0de5f793 118 bool steam_device_found;
geekylou 10:89cf0de5f793 119 int steam_intf;
geekylou 8:e57ccb876952 120
geekylou 8:e57ccb876952 121 uint8_t buttons;
geekylou 8:e57ccb876952 122 int8_t x;
geekylou 8:e57ccb876952 123 int8_t y;
geekylou 8:e57ccb876952 124 int8_t z;
geekylou 8:e57ccb876952 125
geekylou 8:e57ccb876952 126 int right_pad_x;
geekylou 8:e57ccb876952 127 int right_pad_y;
geekylou 8:e57ccb876952 128
geekylou 8:e57ccb876952 129 void rxHandler();
geekylou 8:e57ccb876952 130 void (*onUpdate)(uint32_t buttons, int8_t x, int8_t y, int16_t r_x, int16_t r_y);
geekylou 8:e57ccb876952 131 void (*onButtonUpdate)(uint8_t buttons);
geekylou 8:e57ccb876952 132 void (*onXUpdate)(int8_t x);
geekylou 8:e57ccb876952 133 void (*onYUpdate)(int8_t y);
geekylou 8:e57ccb876952 134 void (*onZUpdate)(int8_t z);
geekylou 8:e57ccb876952 135 int report_id;
geekylou 8:e57ccb876952 136 void init();
geekylou 8:e57ccb876952 137 };
geekylou 8:e57ccb876952 138
geekylou 8:e57ccb876952 139 #endif
geekylou 8:e57ccb876952 140
geekylou 8:e57ccb876952 141 #endif