Arnaud VALLEY / Mbed 2 deprecated Pinscape_Controller_V2_arnoz

Dependencies:   mbed FastIO FastPWM USBDevice

Committer:
mjr
Date:
Tue May 09 05:48:37 2017 +0000
Revision:
87:8d35c74403af
Parent:
86:e30a1f60f783
Child:
90:aa4e571da8e8
AEDR-8300, VL6180X, TLC59116; new plunger firing detection

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mjr 0:5acbbe3f4cf4 1 /* USBJoystick.h */
mjr 0:5acbbe3f4cf4 2 /* USB device example: Joystick*/
mjr 0:5acbbe3f4cf4 3 /* Copyright (c) 2011 ARM Limited. All rights reserved. */
mjr 0:5acbbe3f4cf4 4 /* Modified Mouse code for Joystick - WH 2012 */
mjr 0:5acbbe3f4cf4 5
mjr 0:5acbbe3f4cf4 6 #ifndef USBJOYSTICK_H
mjr 0:5acbbe3f4cf4 7 #define USBJOYSTICK_H
mjr 0:5acbbe3f4cf4 8
mjr 0:5acbbe3f4cf4 9 #include "USBHID.h"
mjr 77:0b96f6867312 10 #include "circbuf.h"
mjr 35:e959ffba78fd 11
mjr 39:b3815a1c3802 12 // Bufferd incoming LedWiz message structure
mjr 38:091e511ce8a0 13 struct LedWizMsg
mjr 38:091e511ce8a0 14 {
mjr 38:091e511ce8a0 15 uint8_t data[8];
mjr 38:091e511ce8a0 16 };
mjr 38:091e511ce8a0 17
mjr 39:b3815a1c3802 18 // interface IDs
mjr 39:b3815a1c3802 19 const uint8_t IFC_ID_JS = 0; // joystick + LedWiz interface
mjr 39:b3815a1c3802 20 const uint8_t IFC_ID_KB = 1; // keyboard interface
mjr 39:b3815a1c3802 21
mjr 35:e959ffba78fd 22 // keyboard interface report IDs
mjr 63:5cd1a5f3a41b 23 const uint8_t REPORT_ID_KB = 1;
mjr 63:5cd1a5f3a41b 24 const uint8_t REPORT_ID_MEDIA = 2;
mjr 35:e959ffba78fd 25
mjr 0:5acbbe3f4cf4 26 /* Common usage */
mjr 0:5acbbe3f4cf4 27 enum JOY_BUTTON {
mjr 0:5acbbe3f4cf4 28 JOY_B0 = 0x0001,
mjr 0:5acbbe3f4cf4 29 JOY_B1 = 0x0002,
mjr 0:5acbbe3f4cf4 30 JOY_B2 = 0x0004,
mjr 0:5acbbe3f4cf4 31 JOY_B3 = 0x0008,
mjr 0:5acbbe3f4cf4 32 JOY_B4 = 0x0010,
mjr 0:5acbbe3f4cf4 33 JOY_B5 = 0x0020,
mjr 0:5acbbe3f4cf4 34 JOY_B6 = 0x0040,
mjr 0:5acbbe3f4cf4 35 JOY_B7 = 0x0080,
mjr 0:5acbbe3f4cf4 36 JOY_B8 = 0x0100,
mjr 0:5acbbe3f4cf4 37 JOY_B9 = 0x0200,
mjr 0:5acbbe3f4cf4 38 JOY_B10 = 0x0400,
mjr 0:5acbbe3f4cf4 39 JOY_B11 = 0x0800,
mjr 0:5acbbe3f4cf4 40 JOY_B12 = 0x1000,
mjr 0:5acbbe3f4cf4 41 JOY_B13 = 0x2000,
mjr 0:5acbbe3f4cf4 42 JOY_B14 = 0x4000,
mjr 0:5acbbe3f4cf4 43 JOY_B15 = 0x8000
mjr 0:5acbbe3f4cf4 44 };
mjr 0:5acbbe3f4cf4 45
mjr 0:5acbbe3f4cf4 46 /**
mjr 0:5acbbe3f4cf4 47 *
mjr 0:5acbbe3f4cf4 48 * USBJoystick example
mjr 0:5acbbe3f4cf4 49 * @code
mjr 0:5acbbe3f4cf4 50 * #include "mbed.h"
mjr 0:5acbbe3f4cf4 51 * #include "USBJoystick.h"
mjr 0:5acbbe3f4cf4 52 *
mjr 0:5acbbe3f4cf4 53 * USBJoystick joystick;
mjr 0:5acbbe3f4cf4 54 *
mjr 0:5acbbe3f4cf4 55 * int main(void)
mjr 0:5acbbe3f4cf4 56 * {
mjr 0:5acbbe3f4cf4 57 * while (1)
mjr 0:5acbbe3f4cf4 58 * {
mjr 0:5acbbe3f4cf4 59 * joystick.move(20, 0);
mjr 0:5acbbe3f4cf4 60 * wait(0.5);
mjr 0:5acbbe3f4cf4 61 * }
mjr 0:5acbbe3f4cf4 62 * }
mjr 0:5acbbe3f4cf4 63 *
mjr 0:5acbbe3f4cf4 64 * @endcode
mjr 0:5acbbe3f4cf4 65 *
mjr 0:5acbbe3f4cf4 66 *
mjr 0:5acbbe3f4cf4 67 * @code
mjr 0:5acbbe3f4cf4 68 * #include "mbed.h"
mjr 0:5acbbe3f4cf4 69 * #include "USBJoystick.h"
mjr 0:5acbbe3f4cf4 70 * #include <math.h>
mjr 0:5acbbe3f4cf4 71 *
mjr 0:5acbbe3f4cf4 72 * USBJoystick joystick;
mjr 0:5acbbe3f4cf4 73 *
mjr 0:5acbbe3f4cf4 74 * int main(void)
mjr 0:5acbbe3f4cf4 75 * {
mjr 0:5acbbe3f4cf4 76 * while (1) {
mjr 0:5acbbe3f4cf4 77 * // Basic Joystick
mjr 0:5acbbe3f4cf4 78 * joystick.update(tx, y, z, buttonBits);
mjr 0:5acbbe3f4cf4 79 * wait(0.001);
mjr 0:5acbbe3f4cf4 80 * }
mjr 0:5acbbe3f4cf4 81 * }
mjr 0:5acbbe3f4cf4 82 * @endcode
mjr 0:5acbbe3f4cf4 83 */
mjr 0:5acbbe3f4cf4 84
mjr 0:5acbbe3f4cf4 85
mjr 77:0b96f6867312 86 class USBJoystick: public USBHID
mjr 77:0b96f6867312 87 {
mjr 77:0b96f6867312 88 public:
mjr 77:0b96f6867312 89 // Length of our joystick reports. Important: This must be kept in sync
mjr 77:0b96f6867312 90 // with the actual joystick report format sent in update().
mjr 77:0b96f6867312 91 static const int reportLen = 14;
mjr 77:0b96f6867312 92
mjr 38:091e511ce8a0 93
mjr 77:0b96f6867312 94 /**
mjr 77:0b96f6867312 95 * Constructor
mjr 77:0b96f6867312 96 *
mjr 77:0b96f6867312 97 * @param vendor_id Your vendor_id (default: 0x1234)
mjr 77:0b96f6867312 98 * @param product_id Your product_id (default: 0x0002)
mjr 77:0b96f6867312 99 * @param product_release Your product_release (default: 0x0001)
mjr 77:0b96f6867312 100 */
mjr 77:0b96f6867312 101 USBJoystick(uint16_t vendor_id, uint16_t product_id, uint16_t product_release,
mjr 77:0b96f6867312 102 int waitForConnect, bool enableJoystick, bool useKB)
mjr 77:0b96f6867312 103 : USBHID(16, 64, vendor_id, product_id, product_release, false)
mjr 77:0b96f6867312 104 {
mjr 77:0b96f6867312 105 _init();
mjr 77:0b96f6867312 106 this->useKB = useKB;
mjr 77:0b96f6867312 107 this->enableJoystick = enableJoystick;
mjr 77:0b96f6867312 108 connect(waitForConnect);
mjr 77:0b96f6867312 109 };
mjr 77:0b96f6867312 110
mjr 77:0b96f6867312 111 /* read a report from the LedWiz buffer */
mjr 77:0b96f6867312 112 bool readLedWizMsg(LedWizMsg &msg)
mjr 77:0b96f6867312 113 {
mjr 77:0b96f6867312 114 return lwbuf.read(msg);
mjr 77:0b96f6867312 115 }
mjr 77:0b96f6867312 116
mjr 77:0b96f6867312 117 /* get the idle time settings, in milliseconds */
mjr 77:0b96f6867312 118 uint32_t getKbIdle() const { return kbIdleTime * 4UL; }
mjr 77:0b96f6867312 119 uint32_t getMediaIdle() const { return mediaIdleTime * 4UL; }
mjr 77:0b96f6867312 120
mjr 39:b3815a1c3802 121
mjr 77:0b96f6867312 122 /**
mjr 77:0b96f6867312 123 * Send a keyboard report. The argument gives the key state, in the standard
mjr 77:0b96f6867312 124 * 6KRO USB keyboard report format: byte 0 is the modifier key bit mask, byte 1
mjr 77:0b96f6867312 125 * is reserved (must be 0), and bytes 2-6 are the currently pressed keys, as
mjr 77:0b96f6867312 126 * USB key codes.
mjr 77:0b96f6867312 127 */
mjr 77:0b96f6867312 128 bool kbUpdate(uint8_t data[8]);
mjr 77:0b96f6867312 129
mjr 77:0b96f6867312 130 /**
mjr 77:0b96f6867312 131 * Send a media key update. The argument gives the bit mask of media keys
mjr 77:0b96f6867312 132 * currently pressed. See the HID report descriptor for the order of bits.
mjr 77:0b96f6867312 133 */
mjr 77:0b96f6867312 134 bool mediaUpdate(uint8_t data);
mjr 77:0b96f6867312 135
mjr 77:0b96f6867312 136 /**
mjr 77:0b96f6867312 137 * Update the joystick status
mjr 77:0b96f6867312 138 *
mjr 77:0b96f6867312 139 * @param x x-axis position
mjr 77:0b96f6867312 140 * @param y y-axis position
mjr 77:0b96f6867312 141 * @param z z-axis position
mjr 77:0b96f6867312 142 * @param buttons buttons state, as a bit mask (combination with '|' of JOY_Bn values)
mjr 77:0b96f6867312 143 * @returns true if there is no error, false otherwise
mjr 77:0b96f6867312 144 */
mjr 77:0b96f6867312 145 bool update(int16_t x, int16_t y, int16_t z, uint32_t buttons, uint16_t status);
mjr 77:0b96f6867312 146
mjr 77:0b96f6867312 147 /**
mjr 77:0b96f6867312 148 * Update just the status
mjr 77:0b96f6867312 149 */
mjr 77:0b96f6867312 150 bool updateStatus(uint32_t stat);
mjr 77:0b96f6867312 151
mjr 77:0b96f6867312 152 /**
mjr 86:e30a1f60f783 153 * Write the plunger status report header.
mjr 86:e30a1f60f783 154 *
mjr 86:e30a1f60f783 155 * Note that we automatically add the "calibration mode" bit to the flags,
mjr 86:e30a1f60f783 156 * so the caller doesn't have to include this. The caller only has to
mjr 86:e30a1f60f783 157 * include the sensor-specific flags.
mjr 77:0b96f6867312 158 *
mjr 77:0b96f6867312 159 * @param npix number of pixels in the sensor (0 for non-imaging sensors)
mjr 86:e30a1f60f783 160 * @param pos the decoded plunger position, or -1 if none detected
mjr 86:e30a1f60f783 161 * @param flags (see USBProtocol.h, message type 2A, "byte 7" bit flags)
mjr 77:0b96f6867312 162 * @param avgScanTime average sensor scan time in microseconds
mjr 77:0b96f6867312 163 * @param processingTime time in microseconds to process the current frame
mjr 77:0b96f6867312 164 */
mjr 86:e30a1f60f783 165 bool sendPlungerStatus(int npix, int flags, int dir,
mjr 86:e30a1f60f783 166 uint32_t avgScanTime, uint32_t processingTime);
mjr 86:e30a1f60f783 167
mjr 86:e30a1f60f783 168 /**
mjr 86:e30a1f60f783 169 * Send a secondary plunger status report header.
mjr 86:e30a1f60f783 170 *
mjr 86:e30a1f60f783 171 * @param nativeScale upper bound of the sensor's native reading scale
mjr 86:e30a1f60f783 172 * @param jitterLo low end of jitter filter window (in sensor native scale units)
mjr 86:e30a1f60f783 173 * @param jitterHi high end of jitter filter window
mjr 86:e30a1f60f783 174 * @param rawPos raw position reading, before applying jitter filter
mjr 86:e30a1f60f783 175 * @param axcTime auto-exposure time in microseconds
mjr 86:e30a1f60f783 176 */
mjr 86:e30a1f60f783 177 bool sendPlungerStatus2(
mjr 86:e30a1f60f783 178 int nativeScale, int jitterLo, int jitterHi, int rawPos, int axcTime);
mjr 87:8d35c74403af 179
mjr 87:8d35c74403af 180 /**
mjr 87:8d35c74403af 181 * Send a barcode plunger status report header.
mjr 87:8d35c74403af 182 *
mjr 87:8d35c74403af 183 * @param nbits number of bits in bar code
mjr 87:8d35c74403af 184 * @param codetype bar code type (1=Gray code/Manchester bit coding)
mjr 87:8d35c74403af 185 * @param pixofs pixel offset of first bit
mjr 87:8d35c74403af 186 * @param raw raw bar code bits
mjr 87:8d35c74403af 187 * @param mask mask of successfully read bar code bits
mjr 87:8d35c74403af 188 */
mjr 87:8d35c74403af 189 bool sendPlungerStatusBarcode(
mjr 87:8d35c74403af 190 int nbits, int codetype, int startOfs, int pixPerBit, int raw, int mask);
mjr 86:e30a1f60f783 191
mjr 77:0b96f6867312 192 /**
mjr 77:0b96f6867312 193 * Write an exposure report. We'll fill out a report with as many pixels as
mjr 77:0b96f6867312 194 * will fit in the packet, send the report, and update the index to the next
mjr 77:0b96f6867312 195 * pixel to send. The caller should call this repeatedly to send reports for
mjr 77:0b96f6867312 196 * all pixels.
mjr 77:0b96f6867312 197 *
mjr 77:0b96f6867312 198 * @param idx current index in pixel array, updated to point to next pixel to send
mjr 77:0b96f6867312 199 * @param npix number of pixels in the overall array
mjr 77:0b96f6867312 200 * @param pix pixel array
mjr 77:0b96f6867312 201 */
mjr 77:0b96f6867312 202 bool sendPlungerPix(int &idx, int npix, const uint8_t *pix);
mjr 77:0b96f6867312 203
mjr 77:0b96f6867312 204 /**
mjr 77:0b96f6867312 205 * Write a configuration report.
mjr 77:0b96f6867312 206 *
mjr 77:0b96f6867312 207 * @param numOutputs the number of configured output channels
mjr 77:0b96f6867312 208 * @param unitNo the device unit number
mjr 77:0b96f6867312 209 * @param plungerZero plunger zero calibration point
mjr 77:0b96f6867312 210 * @param plungerMax plunger max calibration point
mjr 77:0b96f6867312 211 * @param plungerRlsTime measured plunger release time, in milliseconds
mjr 77:0b96f6867312 212 * @param configured true if a configuration has been saved to flash from the host
mjr 77:0b96f6867312 213 * @param sbxpbx true if this firmware version supports SBX/PBX protocol extensions
mjr 78:1e00b3fa11af 214 * @param newAccelFeatures true if this firmware version supports the new accelerometer
mjr 78:1e00b3fa11af 215 * features (adjustable dynamic range, adjustable auto-centering mode time,
mjr 78:1e00b3fa11af 216 * auto-centering mode on/off)
mjr 82:4f6209cb5c33 217 * @param flashStatusFeature true if this firmware versions upports the flash write
mjr 82:4f6209cb5c33 218 * success flags in the status bits
mjr 77:0b96f6867312 219 * @param freeHeapBytes number of free bytes in the malloc heap
mjr 77:0b96f6867312 220 */
mjr 77:0b96f6867312 221 bool reportConfig(int numOutputs, int unitNo,
mjr 77:0b96f6867312 222 int plungerZero, int plungerMax, int plunterRlsTime,
mjr 82:4f6209cb5c33 223 bool configured, bool sbxpbx, bool newAccelFeatures, bool flashStatusFeature,
mjr 78:1e00b3fa11af 224 size_t freeHeapBytes);
mjr 77:0b96f6867312 225
mjr 77:0b96f6867312 226 /**
mjr 77:0b96f6867312 227 * Write a configuration variable query report.
mjr 77:0b96f6867312 228 *
mjr 77:0b96f6867312 229 * @param data the 7-byte data variable buffer, starting with the variable ID byte
mjr 77:0b96f6867312 230 */
mjr 77:0b96f6867312 231 bool reportConfigVar(const uint8_t *data);
mjr 77:0b96f6867312 232
mjr 77:0b96f6867312 233 /**
mjr 77:0b96f6867312 234 * Write a device ID report.
mjr 77:0b96f6867312 235 */
mjr 77:0b96f6867312 236 bool reportID(int index);
mjr 77:0b96f6867312 237
mjr 77:0b96f6867312 238 /**
mjr 77:0b96f6867312 239 * Write a build data report
mjr 77:0b96f6867312 240 *
mjr 77:0b96f6867312 241 * @param date build date plus time, in __DATE__ " " __TIME__ macro format ("Mon dd, yyyy hh:mm:ss")
mjr 77:0b96f6867312 242 */
mjr 77:0b96f6867312 243 bool reportBuildInfo(const char *date);
mjr 77:0b96f6867312 244
mjr 77:0b96f6867312 245 /**
mjr 77:0b96f6867312 246 * Write a physical button status report.
mjr 77:0b96f6867312 247 *
mjr 77:0b96f6867312 248 * @param numButtons the number of buttons
mjr 77:0b96f6867312 249 * @param state the button states, 1 bit per button, 8 buttons per byte,
mjr 77:0b96f6867312 250 * starting with button 0 in the low-order bit (0x01) of the
mjr 77:0b96f6867312 251 * first byte
mjr 77:0b96f6867312 252 */
mjr 77:0b96f6867312 253 bool reportButtonStatus(int numButtons, const uint8_t *state);
mjr 77:0b96f6867312 254
mjr 77:0b96f6867312 255 /**
mjr 77:0b96f6867312 256 * Write an IR raw sensor input report. This reports a set of raw
mjr 77:0b96f6867312 257 * timing reports for input read from the IR sensor, for learning
mjr 77:0b96f6867312 258 * remote purposes.
mjr 77:0b96f6867312 259 *
mjr 77:0b96f6867312 260 * @param n number of items to report, up to maxRawIR
mjr 77:0b96f6867312 261 * @param data items to report; each is a timing reading, in 2us
mjr 77:0b96f6867312 262 * increments, with the low bit in each report set to 0 for
mjr 77:0b96f6867312 263 * a "space" (IR off) or 1 for a "mark" (IR on)
mjr 77:0b96f6867312 264 */
mjr 77:0b96f6867312 265 bool reportRawIR(int n, const uint16_t *data);
mjr 77:0b96f6867312 266
mjr 77:0b96f6867312 267 /**
mjr 77:0b96f6867312 268 * Maximum number of raw IR readings that can be sent in one report
mjr 77:0b96f6867312 269 * via reportRawIR().
mjr 77:0b96f6867312 270 */
mjr 77:0b96f6867312 271 static const int maxRawIR = (reportLen - 3)/2;
mjr 77:0b96f6867312 272
mjr 77:0b96f6867312 273 /**
mjr 77:0b96f6867312 274 * Write an IR input report. This reports a decoded command read in
mjr 77:0b96f6867312 275 * learning mode to the host.
mjr 77:0b96f6867312 276 *
mjr 77:0b96f6867312 277 * @param pro protocol ID (see IRProtocolID.h)
mjr 77:0b96f6867312 278 * @param flags bit flags: 0x02 = protocol uses dittos
mjr 77:0b96f6867312 279 * @param code decoded command code
mjr 77:0b96f6867312 280 */
mjr 77:0b96f6867312 281 bool reportIRCode(uint8_t pro, uint8_t flags, uint64_t code);
mjr 35:e959ffba78fd 282
mjr 77:0b96f6867312 283 /**
mjr 77:0b96f6867312 284 * Send a joystick report to the host
mjr 77:0b96f6867312 285 *
mjr 77:0b96f6867312 286 * @returns true if there is no error, false otherwise
mjr 77:0b96f6867312 287 */
mjr 77:0b96f6867312 288 bool update();
mjr 77:0b96f6867312 289
mjr 77:0b96f6867312 290 /**
mjr 77:0b96f6867312 291 * Move the cursor to (x, y)
mjr 77:0b96f6867312 292 *
mjr 77:0b96f6867312 293 * @param x x-axis position
mjr 77:0b96f6867312 294 * @param y y-axis position
mjr 77:0b96f6867312 295 * @returns true if there is no error, false otherwise
mjr 77:0b96f6867312 296 */
mjr 77:0b96f6867312 297 bool move(int16_t x, int16_t y);
mjr 77:0b96f6867312 298
mjr 77:0b96f6867312 299 /**
mjr 77:0b96f6867312 300 * Set the z position
mjr 77:0b96f6867312 301 *
mjr 77:0b96f6867312 302 * @param z z-axis osition
mjr 77:0b96f6867312 303 */
mjr 77:0b96f6867312 304 bool setZ(int16_t z);
mjr 77:0b96f6867312 305
mjr 77:0b96f6867312 306 /**
mjr 77:0b96f6867312 307 * Press one or several buttons
mjr 77:0b96f6867312 308 *
mjr 77:0b96f6867312 309 * @param buttons button state, as a bitwise combination of JOY_Bn values
mjr 77:0b96f6867312 310 * @returns true if there is no error, false otherwise
mjr 77:0b96f6867312 311 */
mjr 77:0b96f6867312 312 bool buttons(uint32_t buttons);
mjr 77:0b96f6867312 313
mjr 77:0b96f6867312 314 /* USB descriptor overrides */
mjr 77:0b96f6867312 315 virtual const uint8_t *configurationDesc();
mjr 77:0b96f6867312 316 virtual const uint8_t *reportDesc(int idx, uint16_t &len);
mjr 39:b3815a1c3802 317
mjr 77:0b96f6867312 318 /* USB descriptor string overrides */
mjr 77:0b96f6867312 319 virtual const uint8_t *stringImanufacturerDesc();
mjr 77:0b96f6867312 320 virtual const uint8_t *stringIserialDesc();
mjr 77:0b96f6867312 321 virtual const uint8_t *stringIproductDesc();
mjr 77:0b96f6867312 322
mjr 77:0b96f6867312 323 /* set/get idle time */
mjr 77:0b96f6867312 324 virtual void setIdleTime(int ifc, int rptid, int t)
mjr 77:0b96f6867312 325 {
mjr 77:0b96f6867312 326 // Remember the new value if operating on the keyboard. Remember
mjr 77:0b96f6867312 327 // separate keyboard and media control idle times, in case the
mjr 77:0b96f6867312 328 // host wants separate report rates.
mjr 77:0b96f6867312 329 if (ifc == IFC_ID_KB)
mjr 77:0b96f6867312 330 {
mjr 77:0b96f6867312 331 if (rptid == REPORT_ID_KB)
mjr 77:0b96f6867312 332 kbIdleTime = t;
mjr 77:0b96f6867312 333 else if (rptid == REPORT_ID_MEDIA)
mjr 77:0b96f6867312 334 mediaIdleTime = t;
mjr 77:0b96f6867312 335 }
mjr 77:0b96f6867312 336 }
mjr 77:0b96f6867312 337 virtual uint8_t getIdleTime(int ifc, int rptid)
mjr 77:0b96f6867312 338 {
mjr 77:0b96f6867312 339 // Return the kb idle time if the kb interface is the one requested.
mjr 77:0b96f6867312 340 if (ifc == IFC_ID_KB)
mjr 77:0b96f6867312 341 {
mjr 77:0b96f6867312 342 if (rptid == REPORT_ID_KB)
mjr 77:0b96f6867312 343 return kbIdleTime;
mjr 77:0b96f6867312 344 if (rptid == REPORT_ID_MEDIA)
mjr 77:0b96f6867312 345 return mediaIdleTime;
mjr 77:0b96f6867312 346 }
mjr 77:0b96f6867312 347
mjr 77:0b96f6867312 348 // we don't use idle times for other interfaces or report types
mjr 77:0b96f6867312 349 return 0;
mjr 77:0b96f6867312 350 }
mjr 77:0b96f6867312 351
mjr 77:0b96f6867312 352 /* callback overrides */
mjr 77:0b96f6867312 353 virtual bool USBCallback_setConfiguration(uint8_t configuration);
mjr 77:0b96f6867312 354 virtual bool USBCallback_setInterface(uint16_t interface, uint8_t alternate)
mjr 77:0b96f6867312 355 { return interface == 0 || interface == 1; }
mjr 77:0b96f6867312 356
mjr 77:0b96f6867312 357 virtual bool EP1_OUT_callback();
mjr 77:0b96f6867312 358 virtual bool EP4_OUT_callback();
mjr 77:0b96f6867312 359
mjr 77:0b96f6867312 360 private:
mjr 38:091e511ce8a0 361
mjr 77:0b96f6867312 362 // Incoming LedWiz message buffer. Each LedWiz message is exactly 8 bytes.
mjr 77:0b96f6867312 363 CircBuf<LedWizMsg, 16> lwbuf;
mjr 77:0b96f6867312 364
mjr 77:0b96f6867312 365 bool enableJoystick;
mjr 77:0b96f6867312 366 bool useKB;
mjr 77:0b96f6867312 367 uint8_t kbIdleTime;
mjr 77:0b96f6867312 368 uint8_t mediaIdleTime;
mjr 77:0b96f6867312 369 int16_t _x;
mjr 77:0b96f6867312 370 int16_t _y;
mjr 77:0b96f6867312 371 int16_t _z;
mjr 77:0b96f6867312 372 uint16_t _buttonsLo;
mjr 77:0b96f6867312 373 uint16_t _buttonsHi;
mjr 77:0b96f6867312 374 uint16_t _status;
mjr 77:0b96f6867312 375
mjr 77:0b96f6867312 376 void _init();
mjr 0:5acbbe3f4cf4 377 };
mjr 0:5acbbe3f4cf4 378
mjr 38:091e511ce8a0 379 #endif