WIP conversion from HID to PID

Dependents:   USBJoystick_HelloWorld2_wip

Fork of USBJoystick by Wim Huiskamp

Committer:
Cirrus01
Date:
Sat Jul 07 10:46:53 2018 +0000
Revision:
1:7f1e68e6da0c
Parent:
0:e086541742c3
w/o

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:e086541742c3 1 /* mbed USBJoystick Library
wim 0:e086541742c3 2 * Copyright (c) 2012, v01: Initial version, WH,
wim 0:e086541742c3 3 * Modified USBMouse code ARM Limited.
wim 0:e086541742c3 4 * (c) 2010-2011 mbed.org, MIT License
Cirrus01 1:7f1e68e6da0c 5 * 2016, v02: Updated USBDevice Lib, Added waitForConnect, Updated 32 bits button
wim 0:e086541742c3 6 *
wim 0:e086541742c3 7 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 0:e086541742c3 8 * of this software and associated documentation files (the "Software"), to deal
wim 0:e086541742c3 9 * in the Software without restriction, inclumosig without limitation the rights
wim 0:e086541742c3 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 0:e086541742c3 11 * copies of the Software, and to permit persons to whom the Software is
wim 0:e086541742c3 12 * furnished to do so, subject to the following conditions:
wim 0:e086541742c3 13 *
wim 0:e086541742c3 14 * The above copyright notice and this permission notice shall be included in
wim 0:e086541742c3 15 * all copies or substantial portions of the Software.
wim 0:e086541742c3 16 *
wim 0:e086541742c3 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 0:e086541742c3 18 * IMPLIED, INCLUmosiG BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 0:e086541742c3 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 0:e086541742c3 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 0:e086541742c3 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 0:e086541742c3 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 0:e086541742c3 23 * THE SOFTWARE.
wim 0:e086541742c3 24 */
wim 0:e086541742c3 25
wim 0:e086541742c3 26
wim 0:e086541742c3 27 #include "stdint.h"
wim 0:e086541742c3 28 #include "USBJoystick.h"
wim 0:e086541742c3 29
Cirrus01 1:7f1e68e6da0c 30 bool USBJoystick::update(int16_t t, int16_t r, int16_t f, int16_t b, int16_t x, int16_t y, uint32_t buttons, uint8_t hat)
Cirrus01 1:7f1e68e6da0c 31 {
wim 0:e086541742c3 32
Cirrus01 1:7f1e68e6da0c 33 _t = t;
Cirrus01 1:7f1e68e6da0c 34 _r = r;
Cirrus01 1:7f1e68e6da0c 35 _f = f;
Cirrus01 1:7f1e68e6da0c 36 _b = b;
Cirrus01 1:7f1e68e6da0c 37 _x = x;
Cirrus01 1:7f1e68e6da0c 38 _y = y;
Cirrus01 1:7f1e68e6da0c 39 _buttons = buttons;
Cirrus01 1:7f1e68e6da0c 40 _hat = hat;
wim 0:e086541742c3 41
Cirrus01 1:7f1e68e6da0c 42 return update();
wim 0:e086541742c3 43 }
Cirrus01 1:7f1e68e6da0c 44
Cirrus01 1:7f1e68e6da0c 45 bool USBJoystick::update()
Cirrus01 1:7f1e68e6da0c 46 {
Cirrus01 1:7f1e68e6da0c 47 PID_REPORT report;
wim 0:e086541742c3 48
Cirrus01 1:7f1e68e6da0c 49 // Fill the report according to the Joystick Descriptor
Cirrus01 1:7f1e68e6da0c 50 report.data[0] = _t & 0xff;
Cirrus01 1:7f1e68e6da0c 51 report.data[1] = _r & 0xff;
Cirrus01 1:7f1e68e6da0c 52 report.data[2] = _f & 0xff;
Cirrus01 1:7f1e68e6da0c 53 report.data[3] = _b & 0xff;
Cirrus01 1:7f1e68e6da0c 54 report.data[4] = _x & 0xff;
Cirrus01 1:7f1e68e6da0c 55 report.data[5] = _y & 0xff;
wim 0:e086541742c3 56
wim 0:e086541742c3 57
Cirrus01 1:7f1e68e6da0c 58 #if (BUTTONS4 == 1)
wim 0:e086541742c3 59 //Hat and 4 Buttons
Cirrus01 1:7f1e68e6da0c 60 // report.data[4] = ((_buttons & 0x0f) << 4) | (_hat & 0x0f) ;
Cirrus01 1:7f1e68e6da0c 61 // report.length = 5;
wim 0:e086541742c3 62
wim 0:e086541742c3 63
wim 0:e086541742c3 64 //Use 4 bit padding for hat4 or hat8
Cirrus01 1:7f1e68e6da0c 65 report.data[6] = (_hat & 0x0f) ;
wim 0:e086541742c3 66
Cirrus01 1:7f1e68e6da0c 67 //Use 4 bit padding for buttons
Cirrus01 1:7f1e68e6da0c 68 report.data[7] = (_buttons & 0x0f) ;
Cirrus01 1:7f1e68e6da0c 69 report.length = 8;
wim 0:e086541742c3 70 #endif
wim 0:e086541742c3 71
Cirrus01 1:7f1e68e6da0c 72 #if (BUTTONS8 == 1)
wim 0:e086541742c3 73 //Hat and first 4 Buttons
Cirrus01 1:7f1e68e6da0c 74 // report.data[4] = ((_buttons & 0x0f) << 4) | (_hat & 0x0f) ;
wim 0:e086541742c3 75 //
wim 0:e086541742c3 76 //Use bit padding for last 4 Buttons
Cirrus01 1:7f1e68e6da0c 77 // report.data[5] = (_buttons & 0xf0) >> 4;
Cirrus01 1:7f1e68e6da0c 78 // report.length = 6;
wim 0:e086541742c3 79
wim 0:e086541742c3 80 //Use 4 bit padding for hat4 or hat8
Cirrus01 1:7f1e68e6da0c 81 report.data[6] = (_hat & 0x0f) ;
Cirrus01 1:7f1e68e6da0c 82
Cirrus01 1:7f1e68e6da0c 83 //Use 8 bits for buttons
Cirrus01 1:7f1e68e6da0c 84 report.data[7] = (_buttons & 0xff) ;
Cirrus01 1:7f1e68e6da0c 85 report.length = 8;
Cirrus01 1:7f1e68e6da0c 86 #endif
wim 0:e086541742c3 87
Cirrus01 1:7f1e68e6da0c 88 #if (BUTTONS32 == 1)
Cirrus01 1:7f1e68e6da0c 89 //Use 4 bit padding for hat4 or hat8
Cirrus01 1:7f1e68e6da0c 90 report.data[6] = (_hat & 0x0f) ;
Cirrus01 1:7f1e68e6da0c 91
Cirrus01 1:7f1e68e6da0c 92 //No bit padding for 32 buttons
Cirrus01 1:7f1e68e6da0c 93 report.data[7] = (_buttons >> 0) & 0xff;
Cirrus01 1:7f1e68e6da0c 94 report.data[8] = (_buttons >> 8) & 0xff;
Cirrus01 1:7f1e68e6da0c 95 report.data[9] = (_buttons >> 16) & 0xff;
Cirrus01 1:7f1e68e6da0c 96 report.data[10] = (_buttons >> 24) & 0xff;
Cirrus01 1:7f1e68e6da0c 97 report.length = 11;
wim 0:e086541742c3 98 #endif
wim 0:e086541742c3 99
Cirrus01 1:7f1e68e6da0c 100 return send(&report);
Cirrus01 1:7f1e68e6da0c 101 }
wim 0:e086541742c3 102
Cirrus01 1:7f1e68e6da0c 103 bool USBJoystick::throttle(int16_t t)
Cirrus01 1:7f1e68e6da0c 104 {
Cirrus01 1:7f1e68e6da0c 105 _t = t;
Cirrus01 1:7f1e68e6da0c 106 return update();
wim 0:e086541742c3 107 }
wim 0:e086541742c3 108
Cirrus01 1:7f1e68e6da0c 109 bool USBJoystick::rudder(int16_t r)
Cirrus01 1:7f1e68e6da0c 110 {
Cirrus01 1:7f1e68e6da0c 111 _r = r;
Cirrus01 1:7f1e68e6da0c 112 return update();
Cirrus01 1:7f1e68e6da0c 113 }
Cirrus01 1:7f1e68e6da0c 114
Cirrus01 1:7f1e68e6da0c 115 bool USBJoystick::flaps(int16_t f)
Cirrus01 1:7f1e68e6da0c 116 {
Cirrus01 1:7f1e68e6da0c 117 _f = f;
Cirrus01 1:7f1e68e6da0c 118 return update();
wim 0:e086541742c3 119 }
wim 0:e086541742c3 120
Cirrus01 1:7f1e68e6da0c 121 bool USBJoystick::breaks(int16_t b)
Cirrus01 1:7f1e68e6da0c 122 {
Cirrus01 1:7f1e68e6da0c 123 _b = b;
Cirrus01 1:7f1e68e6da0c 124 return update();
wim 0:e086541742c3 125 }
wim 0:e086541742c3 126
Cirrus01 1:7f1e68e6da0c 127 bool USBJoystick::move(int16_t x, int16_t y)
Cirrus01 1:7f1e68e6da0c 128 {
Cirrus01 1:7f1e68e6da0c 129 _x = x;
Cirrus01 1:7f1e68e6da0c 130 _y = y;
Cirrus01 1:7f1e68e6da0c 131 return update();
wim 0:e086541742c3 132 }
wim 0:e086541742c3 133
Cirrus01 1:7f1e68e6da0c 134 bool USBJoystick::buttons(uint32_t buttons)
Cirrus01 1:7f1e68e6da0c 135 {
Cirrus01 1:7f1e68e6da0c 136 _buttons = buttons;
Cirrus01 1:7f1e68e6da0c 137 return update();
wim 0:e086541742c3 138 }
wim 0:e086541742c3 139
Cirrus01 1:7f1e68e6da0c 140 bool USBJoystick::hat(uint8_t hat)
Cirrus01 1:7f1e68e6da0c 141 {
Cirrus01 1:7f1e68e6da0c 142 _hat = hat;
Cirrus01 1:7f1e68e6da0c 143 return update();
wim 0:e086541742c3 144 }
wim 0:e086541742c3 145
wim 0:e086541742c3 146
Cirrus01 1:7f1e68e6da0c 147 void USBJoystick::_init()
Cirrus01 1:7f1e68e6da0c 148 {
Cirrus01 1:7f1e68e6da0c 149 _t = -127;
Cirrus01 1:7f1e68e6da0c 150 _r = -127;
Cirrus01 1:7f1e68e6da0c 151 _f = -127;
Cirrus01 1:7f1e68e6da0c 152 _b = -127;
Cirrus01 1:7f1e68e6da0c 153 _x = 0;
Cirrus01 1:7f1e68e6da0c 154 _y = 0;
Cirrus01 1:7f1e68e6da0c 155 _buttons = 0x00000000;
Cirrus01 1:7f1e68e6da0c 156 _hat = 0x00;
wim 0:e086541742c3 157 }
wim 0:e086541742c3 158
wim 0:e086541742c3 159
Cirrus01 1:7f1e68e6da0c 160 uint8_t * USBJoystick::stringIinterfaceDesc()
Cirrus01 1:7f1e68e6da0c 161 {
Cirrus01 1:7f1e68e6da0c 162 static uint8_t stringIinterfaceDescriptor[] = {
Cirrus01 1:7f1e68e6da0c 163 0x08, //bLength
Cirrus01 1:7f1e68e6da0c 164 STRING_DESCRIPTOR, //bDescriptorType 0x03
Cirrus01 1:7f1e68e6da0c 165 'S',0, //bString iInterface - PID
Cirrus01 1:7f1e68e6da0c 166 'i',0,
Cirrus01 1:7f1e68e6da0c 167 'm',0,
Cirrus01 1:7f1e68e6da0c 168 'u',0,
Cirrus01 1:7f1e68e6da0c 169 'l',0,
Cirrus01 1:7f1e68e6da0c 170 'a',0,
Cirrus01 1:7f1e68e6da0c 171 't',0,
Cirrus01 1:7f1e68e6da0c 172 'o',0,
Cirrus01 1:7f1e68e6da0c 173 'r',0,
Cirrus01 1:7f1e68e6da0c 174 };
Cirrus01 1:7f1e68e6da0c 175 return stringIinterfaceDescriptor;
Cirrus01 1:7f1e68e6da0c 176 }
wim 0:e086541742c3 177
Cirrus01 1:7f1e68e6da0c 178 uint8_t * USBJoystick::stringIproductDesc()
Cirrus01 1:7f1e68e6da0c 179 {
Cirrus01 1:7f1e68e6da0c 180 static uint8_t stringIproductDescriptor[] = {
Cirrus01 1:7f1e68e6da0c 181 0x16, //bLength
Cirrus01 1:7f1e68e6da0c 182 STRING_DESCRIPTOR, //bDescriptorType 0x03
Cirrus01 1:7f1e68e6da0c 183 'C',0, //bString iProduct - PID device
Cirrus01 1:7f1e68e6da0c 184 'o',0,
Cirrus01 1:7f1e68e6da0c 185 'n',0,
Cirrus01 1:7f1e68e6da0c 186 'd',0,
Cirrus01 1:7f1e68e6da0c 187 'o',0,
Cirrus01 1:7f1e68e6da0c 188 'r',0,
Cirrus01 1:7f1e68e6da0c 189 '-',0,
Cirrus01 1:7f1e68e6da0c 190 'S',0,
Cirrus01 1:7f1e68e6da0c 191 'i',0,
Cirrus01 1:7f1e68e6da0c 192 'm',0
Cirrus01 1:7f1e68e6da0c 193 };
Cirrus01 1:7f1e68e6da0c 194 return stringIproductDescriptor;
Cirrus01 1:7f1e68e6da0c 195 }
Cirrus01 1:7f1e68e6da0c 196
Cirrus01 1:7f1e68e6da0c 197 uint8_t * USBJoystick::reportDesc()
Cirrus01 1:7f1e68e6da0c 198 {
Cirrus01 1:7f1e68e6da0c 199 static uint8_t reportDescriptor[] = {
Cirrus01 1:7f1e68e6da0c 200
Cirrus01 1:7f1e68e6da0c 201 USAGE_PAGE(1), 0x01, // Generic Desktop
Cirrus01 1:7f1e68e6da0c 202 LOGICAL_MINIMUM(1), 0x00, // Logical_Minimum (0)
Cirrus01 1:7f1e68e6da0c 203 USAGE(1), 0x04, // Usage (Joystick)
Cirrus01 1:7f1e68e6da0c 204 COLLECTION(1), 0x01, // Application
Cirrus01 1:7f1e68e6da0c 205 USAGE_PAGE(1), 0x02, // Simulation Controls
Cirrus01 1:7f1e68e6da0c 206 USAGE(1), 0xBB, // Throttle
Cirrus01 1:7f1e68e6da0c 207 USAGE(1), 0xBA, // Rudder
Cirrus01 1:7f1e68e6da0c 208 USAGE(1), 0xC3, // Wing Flaps
Cirrus01 1:7f1e68e6da0c 209 USAGE(1), 0xB6, // Dive Breaks
Cirrus01 1:7f1e68e6da0c 210 LOGICAL_MINIMUM(1), 0x81, // -127
Cirrus01 1:7f1e68e6da0c 211 LOGICAL_MAXIMUM(1), 0x7f, // 127
Cirrus01 1:7f1e68e6da0c 212 REPORT_SIZE(1), 0x08,
Cirrus01 1:7f1e68e6da0c 213 REPORT_COUNT(1), 0x02,
Cirrus01 1:7f1e68e6da0c 214 INPUT(1), 0x02, // Data, Variable, Absolute
Cirrus01 1:7f1e68e6da0c 215 USAGE_PAGE(1), 0x01, // Generic Desktop
Cirrus01 1:7f1e68e6da0c 216 USAGE(1), 0x01, // Usage (Pointer)
Cirrus01 1:7f1e68e6da0c 217 COLLECTION(1), 0x00, // Physical
Cirrus01 1:7f1e68e6da0c 218 USAGE(1), 0x30, // X
Cirrus01 1:7f1e68e6da0c 219 USAGE(1), 0x31, // Y
wim 0:e086541742c3 220 // 8 bit values
Cirrus01 1:7f1e68e6da0c 221 LOGICAL_MINIMUM(1), 0x81, // -127
Cirrus01 1:7f1e68e6da0c 222 LOGICAL_MAXIMUM(1), 0x7f, // 127
Cirrus01 1:7f1e68e6da0c 223 REPORT_SIZE(1), 0x08,
Cirrus01 1:7f1e68e6da0c 224 REPORT_COUNT(1), 0x02,
Cirrus01 1:7f1e68e6da0c 225 INPUT(1), 0x02, // Data, Variable, Absolute
wim 0:e086541742c3 226 // 16 bit values
wim 0:e086541742c3 227 // LOGICAL_MINIMUM(1), 0x00, // 0
wim 0:e086541742c3 228 // LOGICAL_MAXIMUM(2), 0xff, 0x7f, // 32767
wim 0:e086541742c3 229 // REPORT_SIZE(1), 0x10,
wim 0:e086541742c3 230 // REPORT_COUNT(1), 0x02,
Cirrus01 1:7f1e68e6da0c 231 // INPUT(1), 0x02, // Data, Variable, Absolute
wim 0:e086541742c3 232
Cirrus01 1:7f1e68e6da0c 233 END_COLLECTION(0),
wim 0:e086541742c3 234
wim 0:e086541742c3 235 #if (HAT4 == 1)
wim 0:e086541742c3 236 // 4 Position Hat Switch
Cirrus01 1:7f1e68e6da0c 237 USAGE(1), 0x39, // Usage (Hat switch)
Cirrus01 1:7f1e68e6da0c 238 LOGICAL_MINIMUM(1), 0x00, // 0
Cirrus01 1:7f1e68e6da0c 239 LOGICAL_MAXIMUM(1), 0x03, // 3
Cirrus01 1:7f1e68e6da0c 240 PHYSICAL_MINIMUM(1), 0x00, // Physical_Minimum (0)
Cirrus01 1:7f1e68e6da0c 241 PHYSICAL_MAXIMUM(2), 0x0E, 0x01, // Physical_Maximum (270)
Cirrus01 1:7f1e68e6da0c 242 UNIT(1), 0x14, // Unit (Eng Rot:Angular Pos)
Cirrus01 1:7f1e68e6da0c 243 REPORT_SIZE(1), 0x04,
Cirrus01 1:7f1e68e6da0c 244 REPORT_COUNT(1), 0x01,
Cirrus01 1:7f1e68e6da0c 245 INPUT(1), 0x02, // Data, Variable, Absolute
wim 0:e086541742c3 246 #endif
wim 0:e086541742c3 247 #if (HAT8 == 1)
wim 0:e086541742c3 248 // 8 Position Hat Switch
Cirrus01 1:7f1e68e6da0c 249 USAGE(1), 0x39, // Usage (Hat switch)
Cirrus01 1:7f1e68e6da0c 250 LOGICAL_MINIMUM(1), 0x00, // 0
Cirrus01 1:7f1e68e6da0c 251 LOGICAL_MAXIMUM(1), 0x07, // 7
Cirrus01 1:7f1e68e6da0c 252 PHYSICAL_MINIMUM(1), 0x00, // Physical_Minimum (0)
Cirrus01 1:7f1e68e6da0c 253 PHYSICAL_MAXIMUM(2), 0x3B, 0x01, // Physical_Maximum (315)
Cirrus01 1:7f1e68e6da0c 254 UNIT(1), 0x14, // Unit (Eng Rot:Angular Pos)
Cirrus01 1:7f1e68e6da0c 255 REPORT_SIZE(1), 0x04,
Cirrus01 1:7f1e68e6da0c 256 REPORT_COUNT(1), 0x01,
Cirrus01 1:7f1e68e6da0c 257 INPUT(1), 0x02, // Data, Variable, Absolute
wim 0:e086541742c3 258 #endif
wim 0:e086541742c3 259
wim 0:e086541742c3 260 // Padding 4 bits
Cirrus01 1:7f1e68e6da0c 261 REPORT_SIZE(1), 0x01,
Cirrus01 1:7f1e68e6da0c 262 REPORT_COUNT(1), 0x04,
Cirrus01 1:7f1e68e6da0c 263 INPUT(1), 0x01, // Constant
wim 0:e086541742c3 264
wim 0:e086541742c3 265
wim 0:e086541742c3 266 #if (BUTTONS4 == 1)
wim 0:e086541742c3 267 // 4 Buttons
Cirrus01 1:7f1e68e6da0c 268 USAGE_PAGE(1), 0x09, // Buttons
Cirrus01 1:7f1e68e6da0c 269 USAGE_MINIMUM(1), 0x01, // 1
Cirrus01 1:7f1e68e6da0c 270 USAGE_MAXIMUM(1), 0x04, // 4
Cirrus01 1:7f1e68e6da0c 271 LOGICAL_MINIMUM(1), 0x00, // 0
Cirrus01 1:7f1e68e6da0c 272 LOGICAL_MAXIMUM(1), 0x01, // 1
Cirrus01 1:7f1e68e6da0c 273 REPORT_SIZE(1), 0x01,
Cirrus01 1:7f1e68e6da0c 274 REPORT_COUNT(1), 0x04,
Cirrus01 1:7f1e68e6da0c 275 UNIT_EXPONENT(1), 0x00, // Unit_Exponent (0)
Cirrus01 1:7f1e68e6da0c 276 UNIT(1), 0x00, // Unit (None)
Cirrus01 1:7f1e68e6da0c 277 INPUT(1), 0x02, // Data, Variable, Absolute
wim 0:e086541742c3 278
wim 0:e086541742c3 279 // Padding 4 bits
Cirrus01 1:7f1e68e6da0c 280 REPORT_SIZE(1), 0x01,
Cirrus01 1:7f1e68e6da0c 281 REPORT_COUNT(1), 0x04,
Cirrus01 1:7f1e68e6da0c 282 INPUT(1), 0x01, // Constant
wim 0:e086541742c3 283
wim 0:e086541742c3 284 #endif
wim 0:e086541742c3 285 #if (BUTTONS8 == 1)
wim 0:e086541742c3 286 // 8 Buttons
Cirrus01 1:7f1e68e6da0c 287 USAGE_PAGE(1), 0x09, // Buttons
Cirrus01 1:7f1e68e6da0c 288 USAGE_MINIMUM(1), 0x01, // 1
Cirrus01 1:7f1e68e6da0c 289 USAGE_MAXIMUM(1), 0x08, // 8
Cirrus01 1:7f1e68e6da0c 290 LOGICAL_MINIMUM(1), 0x00, // 0
Cirrus01 1:7f1e68e6da0c 291 LOGICAL_MAXIMUM(1), 0x01, // 1
Cirrus01 1:7f1e68e6da0c 292 REPORT_SIZE(1), 0x01,
Cirrus01 1:7f1e68e6da0c 293 REPORT_COUNT(1), 0x08,
Cirrus01 1:7f1e68e6da0c 294 UNIT_EXPONENT(1), 0x00, // Unit_Exponent (0)
Cirrus01 1:7f1e68e6da0c 295 UNIT(1), 0x00, // Unit (None)
Cirrus01 1:7f1e68e6da0c 296 INPUT(1), 0x02, // Data, Variable, Absolute
wim 0:e086541742c3 297 #endif
wim 0:e086541742c3 298
wim 0:e086541742c3 299 #if (BUTTONS32 == 1)
wim 0:e086541742c3 300 // 32 Buttons
Cirrus01 1:7f1e68e6da0c 301 USAGE_PAGE(1), 0x09, // Buttons
Cirrus01 1:7f1e68e6da0c 302 USAGE_MINIMUM(1), 0x01, // 1
Cirrus01 1:7f1e68e6da0c 303 USAGE_MAXIMUM(1), 0x20, // 32
Cirrus01 1:7f1e68e6da0c 304 LOGICAL_MINIMUM(1), 0x00, // 0
Cirrus01 1:7f1e68e6da0c 305 LOGICAL_MAXIMUM(1), 0x01, // 1
Cirrus01 1:7f1e68e6da0c 306 REPORT_SIZE(1), 0x01,
Cirrus01 1:7f1e68e6da0c 307 REPORT_COUNT(1), 0x20,
Cirrus01 1:7f1e68e6da0c 308 UNIT_EXPONENT(1), 0x00, // Unit_Exponent (0)
Cirrus01 1:7f1e68e6da0c 309 UNIT(1), 0x00, // Unit (None)
Cirrus01 1:7f1e68e6da0c 310 INPUT(1), 0x02, // Data, Variable, Absolute
wim 0:e086541742c3 311 #endif
Cirrus01 1:7f1e68e6da0c 312 #if (FFB == 1)
Cirrus01 1:7f1e68e6da0c 313 PHYSICAL_MINIMUM(1), 0x00, // PHYSICAL_MINIMUM (0)
Cirrus01 1:7f1e68e6da0c 314 INPUT(1), 0x02, // INPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 315 USAGE_PAGE(1), 0x0f, // USAGE_PAGE (Physical Interface Device)
Cirrus01 1:7f1e68e6da0c 316 USAGE(1), 0x21, // USAGE (Set Effect Report)
Cirrus01 1:7f1e68e6da0c 317 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 318 USAGE(1), 0x22, // USAGE (Effect Block Index)
Cirrus01 1:7f1e68e6da0c 319 LOGICAL_MAXIMUM(1), 0x7f, // LOGICAL_MAXIMUM (127)
Cirrus01 1:7f1e68e6da0c 320 REPORT_SIZE(1), 0x07, // REPORT_SIZE (7)
Cirrus01 1:7f1e68e6da0c 321 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 322 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 323 USAGE(1), 0x24, // USAGE (ROM Flag)
Cirrus01 1:7f1e68e6da0c 324 LOGICAL_MAXIMUM(1), 0x01, // LOGICAL_MAXIMUM (1)
Cirrus01 1:7f1e68e6da0c 325 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 326 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 327 USAGE(1), 0x25, // USAGE (Effect Type)
Cirrus01 1:7f1e68e6da0c 328 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 329 USAGE(1), 0x26, // USAGE (ET Constant Force)
Cirrus01 1:7f1e68e6da0c 330 USAGE(1), 0x27, // USAGE (ET Ramp)
Cirrus01 1:7f1e68e6da0c 331 USAGE(1), 0x30, // USAGE (ET Square)
Cirrus01 1:7f1e68e6da0c 332 USAGE(1), 0x31, // USAGE (ET Sine)
Cirrus01 1:7f1e68e6da0c 333 USAGE(1), 0x32, // USAGE (ET Triangle)
Cirrus01 1:7f1e68e6da0c 334 USAGE(1), 0x33, // USAGE (ET Sawtooth Up)
Cirrus01 1:7f1e68e6da0c 335 USAGE(1), 0x34, // USAGE (ET Sawtooth Down)
Cirrus01 1:7f1e68e6da0c 336 USAGE(1), 0x40, // USAGE (ET Spring)
Cirrus01 1:7f1e68e6da0c 337 USAGE(1), 0x41, // USAGE (ET Damper)
Cirrus01 1:7f1e68e6da0c 338 USAGE(1), 0x42, // USAGE (ET Inertia)
Cirrus01 1:7f1e68e6da0c 339 LOGICAL_MINIMUM(1), 0x01, // LOGICAL_MINIMUM (1)
Cirrus01 1:7f1e68e6da0c 340 LOGICAL_MAXIMUM(1), 0x0a, // LOGICAL_MAXIMUM (10)
Cirrus01 1:7f1e68e6da0c 341 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 342 OUTPUT(1), 0x00, // OUTPUT (Data,Ary,Abs)
Cirrus01 1:7f1e68e6da0c 343 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 344 USAGE(1), 0x50, // USAGE (Duration)
Cirrus01 1:7f1e68e6da0c 345 USAGE(1), 0x54, // USAGE (Trigger Repeat Interval)
Cirrus01 1:7f1e68e6da0c 346 LOGICAL_MINIMUM(1), 0x00, // LOGICAL_MINIMUM (0)
Cirrus01 1:7f1e68e6da0c 347 LOGICAL_MAXIMUM(2), 0x10, 0x27, // LOGICAL_MAXIMUM (10000)
Cirrus01 1:7f1e68e6da0c 348 PHYSICAL_MAXIMUM(2), 0x10, 0x27,// PHYSICAL_MAXIMUM (10000)
Cirrus01 1:7f1e68e6da0c 349 REPORT_SIZE(1), 0x10, // REPORT_SIZE (16)
Cirrus01 1:7f1e68e6da0c 350 UNIT(2), 0x03, 0x10, // UNIT (Eng Lin:Time)
Cirrus01 1:7f1e68e6da0c 351 UNIT_EXPONENT(1), 0x0d, // UNIT_EXPONENT (-3)
Cirrus01 1:7f1e68e6da0c 352 REPORT_COUNT(1), 0x02, // REPORT_COUNT (2)
Cirrus01 1:7f1e68e6da0c 353 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 354 UNIT_EXPONENT(1), 0x0a, // UNIT_EXPONENT (-6)
Cirrus01 1:7f1e68e6da0c 355 USAGE(1), 0x51, // USAGE (Sample Period)
Cirrus01 1:7f1e68e6da0c 356 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 357 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 358 PHYSICAL_MAXIMUM(1), 0x00, // PHYSICAL_MAXIMUM (0)
Cirrus01 1:7f1e68e6da0c 359 UNIT_EXPONENT(1), 0x00, // UNIT_EXPONENT (0)
Cirrus01 1:7f1e68e6da0c 360 UNIT(1), 0x00, // UNIT (None)
Cirrus01 1:7f1e68e6da0c 361 USAGE(1), 0x52, // USAGE (Gain)
Cirrus01 1:7f1e68e6da0c 362 USAGE(1), 0x53, // USAGE (Trigger Button)
Cirrus01 1:7f1e68e6da0c 363 LOGICAL_MAXIMUM(1), 0x7f, // LOGICAL_MAXIMUM (127)
Cirrus01 1:7f1e68e6da0c 364 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 365 REPORT_COUNT(1), 0x02, // REPORT_COUNT (2)
Cirrus01 1:7f1e68e6da0c 366 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 367 USAGE(1), 0x55, // USAGE (Axes Enable)
Cirrus01 1:7f1e68e6da0c 368 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 369 USAGE_PAGE(1), 0x01, // USAGE_PAGE (Generic Desktop)
Cirrus01 1:7f1e68e6da0c 370 USAGE(1), 0x01, // USAGE (Pointer)
Cirrus01 1:7f1e68e6da0c 371 COLLECTION(1), 0x00, // COLLECTION (Physical)
Cirrus01 1:7f1e68e6da0c 372 USAGE(1), 0x30, // USAGE (X)
Cirrus01 1:7f1e68e6da0c 373 USAGE(1), 0x31, // USAGE (Y)
Cirrus01 1:7f1e68e6da0c 374 USAGE(1), 0x32, // USAGE (Z)
Cirrus01 1:7f1e68e6da0c 375 LOGICAL_MINIMUM(1), 0x01, // LOGICAL_MINIMUM (1)
Cirrus01 1:7f1e68e6da0c 376 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 377 REPORT_COUNT(1), 0x03, // REPORT_COUNT (3)
Cirrus01 1:7f1e68e6da0c 378 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 379 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 380 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 381 REPORT_COUNT(1), 0x06, // REPORT_COUNT (6)
Cirrus01 1:7f1e68e6da0c 382 OUTPUT(1), 0x03, // OUTPUT (Cnst,Var,Abs)
Cirrus01 1:7f1e68e6da0c 383 USAGE_PAGE(1), 0x0f, // USAGE_PAGE (Physical Interface Device)
Cirrus01 1:7f1e68e6da0c 384 USAGE(1), 0x57, // USAGE (Direction)
Cirrus01 1:7f1e68e6da0c 385 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 386 USAGE_PAGE(1), 0x01, // USAGE_PAGE (Generic Desktop)
Cirrus01 1:7f1e68e6da0c 387 USAGE(1), 0x01, // USAGE (Pointer)
Cirrus01 1:7f1e68e6da0c 388 COLLECTION(1), 0x00, // COLLECTION (Physical)
Cirrus01 1:7f1e68e6da0c 389 USAGE(1), 0x30, // USAGE (X)
Cirrus01 1:7f1e68e6da0c 390 USAGE(1), 0x31, // USAGE (Y)
Cirrus01 1:7f1e68e6da0c 391 USAGE(1), 0x32, // USAGE (Z)
Cirrus01 1:7f1e68e6da0c 392 LOGICAL_MINIMUM(1), 0x00, // LOGICAL_MINIMUM (0)
Cirrus01 1:7f1e68e6da0c 393 LOGICAL_MAXIMUM(2), 0xff, 0x00, // LOGICAL_MAXIMUM (255)
Cirrus01 1:7f1e68e6da0c 394 0xPHYSICAL_MAXIMUM(2)6, 0x68, 0x01, // PHYSICAL_MAXIMUM (360)
Cirrus01 1:7f1e68e6da0c 395 UNIT(1), 0x14, // UNIT (Eng Rot:Angular Pos)
Cirrus01 1:7f1e68e6da0c 396 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 397 REPORT_COUNT(1), 0x03, // REPORT_COUNT (3)
Cirrus01 1:7f1e68e6da0c 398 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 399 UNIT(1), 0x00, // UNIT (None)
Cirrus01 1:7f1e68e6da0c 400 PHYSICAL_MAXIMUM(1), 0x00, // PHYSICAL_MAXIMUM (0)
Cirrus01 1:7f1e68e6da0c 401 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 402 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 403 USAGE_PAGE(1), 0x0f, // USAGE_PAGE (Physical Interface Device)
Cirrus01 1:7f1e68e6da0c 404 USAGE(1), 0x58, // USAGE (Type Specific Block Offset)
Cirrus01 1:7f1e68e6da0c 405 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 406 USAGE(3), 0x01, 0x00, 0x0a, 0x00, // USAGE (Ordinals:Instance 1)
Cirrus01 1:7f1e68e6da0c 407 USAGE(3), 0x02, 0x00, 0x0a, 0x00, // USAGE (Ordinals:Instance 2)
Cirrus01 1:7f1e68e6da0c 408 LOGICAL_MAXIMUM(2), 0xfd, 0x7f, // LOGICAL_MAXIMUM (32765)
Cirrus01 1:7f1e68e6da0c 409 REPORT_SIZE(1), 0x10, // REPORT_SIZE (16)
Cirrus01 1:7f1e68e6da0c 410 REPORT_COUNT(1), 0x02, // REPORT_COUNT (2)
Cirrus01 1:7f1e68e6da0c 411 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 412 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 413 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 414 USAGE_PAGE(1), 0x0f, // USAGE_PAGE (Physical Interface Device)
Cirrus01 1:7f1e68e6da0c 415 USAGE(1), 0x5a, // USAGE (Set Envelope Report)
Cirrus01 1:7f1e68e6da0c 416 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 417 REPORT_ID(1), 0x02, // REPORT_ID (2)
Cirrus01 1:7f1e68e6da0c 418 USAGE(1), 0x23, // USAGE (Parameter Block Offset)
Cirrus01 1:7f1e68e6da0c 419 LOGICAL_MAXIMUM(2), 0xfd, 0x7f, // LOGICAL_MAXIMUM (32765)
Cirrus01 1:7f1e68e6da0c 420 REPORT_SIZE(1), 0x0f, // REPORT_SIZE (15)
Cirrus01 1:7f1e68e6da0c 421 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 422 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 423 USAGE(1), 0x24, // USAGE (ROM Flag)
Cirrus01 1:7f1e68e6da0c 424 LOGICAL_MAXIMUM(1), 0x01, // LOGICAL_MAXIMUM (1)
Cirrus01 1:7f1e68e6da0c 425 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 426 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 427 USAGE(1), 0x5b, // USAGE (Attack Level)
Cirrus01 1:7f1e68e6da0c 428 USAGE(1), 0x5d, // USAGE (Fade Level)
Cirrus01 1:7f1e68e6da0c 429 LOGICAL_MAXIMUM(1), 0xff // LOGICAL_MAXIMUM (255)
Cirrus01 1:7f1e68e6da0c 430 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 431 REPORT_COUNT(1), 0x02, // REPORT_COUNT (2)
Cirrus01 1:7f1e68e6da0c 432 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 433 USAGE(1), 0x5c, // USAGE (Attack Time)
Cirrus01 1:7f1e68e6da0c 434 USAGE(1), 0x5e, // USAGE (Fade Time)
Cirrus01 1:7f1e68e6da0c 435 LOGICAL_MAXIMUM(2), 0x10, 0x27, // LOGICAL_MAXIMUM (10000)
Cirrus01 1:7f1e68e6da0c 436 PHYSICAL_MAXIMUM(1), 0x10, 0x27,// PHYSICAL_MAXIMUM (10000)
Cirrus01 1:7f1e68e6da0c 437 UNIT(2), 0x03, 0x10, // UNIT (Eng Lin:Time)
Cirrus01 1:7f1e68e6da0c 438 UNIT_EXPONENT(1), 0x0d, // UNIT_EXPONENT (-3)
Cirrus01 1:7f1e68e6da0c 439 REPORT_SIZE(1), 0x10, // REPORT_SIZE (16)
Cirrus01 1:7f1e68e6da0c 440 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 441 PHYSICAL_MAXIMUM(1), 0x00, // PHYSICAL_MAXIMUM (0)
Cirrus01 1:7f1e68e6da0c 442 UNIT(1), 0x00, // UNIT (None)
Cirrus01 1:7f1e68e6da0c 443 UNIT_EXPONENT(1), 0x00, // UNIT_EXPONENT (0)
Cirrus01 1:7f1e68e6da0c 444 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 445 USAGE(1), 0x5f, // USAGE (Set Condition Report)
Cirrus01 1:7f1e68e6da0c 446 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 447 REPORT_ID(1), 0x03, // REPORT_ID (3)
Cirrus01 1:7f1e68e6da0c 448 USAGE(1), 0x23, // USAGE (Parameter Block Offset)
Cirrus01 1:7f1e68e6da0c 449 LOGICAL_MAXIMUM(1), 0xfd, 0x7f, // LOGICAL_MAXIMUM (32765)
Cirrus01 1:7f1e68e6da0c 450 REPORT_SIZE(1), 0x0f, // REPORT_SIZE (15)
Cirrus01 1:7f1e68e6da0c 451 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 452 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 453 USAGE(1), 0x24, // USAGE (ROM Flag)
Cirrus01 1:7f1e68e6da0c 454 LOGICAL_MAXIMUM(1), 0x01, // LOGICAL_MAXIMUM (1)
Cirrus01 1:7f1e68e6da0c 455 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 456 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 457 USAGE(1), 0x60, // USAGE (CP Offset)
Cirrus01 1:7f1e68e6da0c 458 USAGE(1), 0x61, // USAGE (Positive Coefficient)
Cirrus01 1:7f1e68e6da0c 459 USAGE(1), 0x62, // USAGE (Negative Coefficient)
Cirrus01 1:7f1e68e6da0c 460 USAGE(1), 0x63, // USAGE (Positive Saturation)
Cirrus01 1:7f1e68e6da0c 461 USAGE(1), 0x64, // USAGE (Negative Saturation)
Cirrus01 1:7f1e68e6da0c 462 USAGE(1), 0x65, // USAGE (Dead Band)
Cirrus01 1:7f1e68e6da0c 463 LOGICAL_MAXIMUM(1), 0xff // LOGICAL_MAXIMUM (255)
Cirrus01 1:7f1e68e6da0c 464 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 465 REPORT_COUNT(1), 0x06, // REPORT_COUNT (6)
Cirrus01 1:7f1e68e6da0c 466 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 467 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 468 USAGE(1), 0x6e, // USAGE (Set Periodic Report)
Cirrus01 1:7f1e68e6da0c 469 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 470 REPORT_ID(1), 0x04, // REPORT_ID (4)
Cirrus01 1:7f1e68e6da0c 471 USAGE(1), 0x23, // USAGE (Parameter Block Offset)
Cirrus01 1:7f1e68e6da0c 472 LOGICAL_MAXIMUM(2), 0xfd, 0x7f, // LOGICAL_MAXIMUM (32765)
Cirrus01 1:7f1e68e6da0c 473 REPORT_SIZE(1), 0x0f, // REPORT_SIZE (15)
Cirrus01 1:7f1e68e6da0c 474 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 475 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 476 USAGE(1), 0x24, // USAGE (ROM Flag)
Cirrus01 1:7f1e68e6da0c 477 LOGICAL_MAXIMUM(1), 0x01, // LOGICAL_MAXIMUM (1)
Cirrus01 1:7f1e68e6da0c 478 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 479 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 480 USAGE(1), 0x70, // USAGE (Magnitude)
Cirrus01 1:7f1e68e6da0c 481 USAGE(1), 0x6f, // USAGE (Offset)
Cirrus01 1:7f1e68e6da0c 482 USAGE(1), 0x71, // USAGE (Phase)
Cirrus01 1:7f1e68e6da0c 483 LOGICAL_MAXIMUM(2), 0xff, 0x00, // LOGICAL_MAXIMUM (255)
Cirrus01 1:7f1e68e6da0c 484 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 485 REPORT_COUNT(1), 0x03, // REPORT_COUNT (3)
Cirrus01 1:7f1e68e6da0c 486 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 487 USAGE(1), 0x72, // USAGE (Period)
Cirrus01 1:7f1e68e6da0c 488 LOGICAL_MAXIMUM(2), 0x10, 0x27, // LOGICAL_MAXIMUM (10000)
Cirrus01 1:7f1e68e6da0c 489 PHYSICAL_MAXIMUM(2), 0x10, 0x27,// PHYSICAL_MAXIMUM (10000)
Cirrus01 1:7f1e68e6da0c 490 UNIT(2), 0x03, 0x10, // UNIT (Eng Lin:Time)
Cirrus01 1:7f1e68e6da0c 491 UNIT_EXPONENT(1), 0x0d, // UNIT_EXPONENT (-3)
Cirrus01 1:7f1e68e6da0c 492 REPORT_SIZE(1), 0x10, // REPORT_SIZE (16)
Cirrus01 1:7f1e68e6da0c 493 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 494 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 495 PHYSICAL_MAXIMUM(1), 0x00, // PHYSICAL_MAXIMUM (0)
Cirrus01 1:7f1e68e6da0c 496 UNIT(1), 0x00, // UNIT (None)
Cirrus01 1:7f1e68e6da0c 497 UNIT_EXPONENT(1), 0x00, // UNIT_EXPONENT (0))
Cirrus01 1:7f1e68e6da0c 498 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 499 USAGE(1), 0x73, // USAGE (Set Constant Force Report)
Cirrus01 1:7f1e68e6da0c 500 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 501 REPORT_ID(1), 0x05, // REPORT_ID (5)
Cirrus01 1:7f1e68e6da0c 502 USAGE(1), 0x23, // USAGE (Parameter Block Offset)
Cirrus01 1:7f1e68e6da0c 503 LOGICAL_MAXIMUM(2), 0xfd, 0x7f, // LOGICAL_MAXIMUM (32765)
Cirrus01 1:7f1e68e6da0c 504 REPORT_SIZE(1), 0x0f, // REPORT_SIZE (15)
Cirrus01 1:7f1e68e6da0c 505 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 506 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 507 USAGE(1), 0x24, // USAGE (ROM Flag)
Cirrus01 1:7f1e68e6da0c 508 LOGICAL_MAXIMUM(1), 0x01, // LOGICAL_MAXIMUM (1)
Cirrus01 1:7f1e68e6da0c 509 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 510 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 511 USAGE(1), 0x70, // USAGE (Magnitude)
Cirrus01 1:7f1e68e6da0c 512 LOGICAL_MAXIMUM(2), 0xff, 0x00, // LOGICAL_MAXIMUM (255)
Cirrus01 1:7f1e68e6da0c 513 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 514 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 515 COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 516 USAGE(1), 0x74, // USAGE (Set Ramp Force Report)
Cirrus01 1:7f1e68e6da0c 517 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 518 REPORT_ID(1), 0x06, // REPORT_ID (6)
Cirrus01 1:7f1e68e6da0c 519 USAGE(1), 0x23, // USAGE (Parameter Block Offset)
Cirrus01 1:7f1e68e6da0c 520 LOGICAL_MAXIMUM(2), 0xfd, 0x7f, // LOGICAL_MAXIMUM (32765)
Cirrus01 1:7f1e68e6da0c 521 REPORT_SIZE(1), 0x0f, // REPORT_SIZE (15)
Cirrus01 1:7f1e68e6da0c 522 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 523 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 524 USAGE(1), 0x24, // USAGE (ROM Flag)
Cirrus01 1:7f1e68e6da0c 525 LOGICAL_MAXIMUM(1), 0x01, // LOGICAL_MAXIMUM (1)
Cirrus01 1:7f1e68e6da0c 526 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 527 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 528 USAGE(1), 0x75, // USAGE (Ramp Start)
Cirrus01 1:7f1e68e6da0c 529 USAGE(1), 0x76, // USAGE (Ramp End)
Cirrus01 1:7f1e68e6da0c 530 LOGICAL_MAXIMUM(2), 0xff, 0x00, // LOGICAL_MAXIMUM (255)
Cirrus01 1:7f1e68e6da0c 531 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 532 REPORT_COUNT(1), 0x02, // REPORT_COUNT (2)
Cirrus01 1:7f1e68e6da0c 533 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 534 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 535 USAGE(1), 0x68, // USAGE (Custom Force Data Report)
Cirrus01 1:7f1e68e6da0c 536 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 537 REPORT_ID(1), 0x07, // REPORT_ID (7)
Cirrus01 1:7f1e68e6da0c 538 USAGE(1), 0x23, // USAGE (Parameter Block Offset)
Cirrus01 1:7f1e68e6da0c 539 LOGICAL_MAXIMUM(2), 0xfd, 0x7f, // LOGICAL_MAXIMUM (32765)
Cirrus01 1:7f1e68e6da0c 540 REPORT_SIZE(1), 0x0f, // REPORT_SIZE (15)
Cirrus01 1:7f1e68e6da0c 541 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 542 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 543 USAGE(3), 0x3b, 0x00, 0x01, 0x00// USAGE (Generic Desktop:Byte Count)
Cirrus01 1:7f1e68e6da0c 544 LOGICAL_MAXIMUM(2), 0x00, 0x01, // LOGICAL_MAXIMUM (256)
Cirrus01 1:7f1e68e6da0c 545 REPORT_SIZE(1), 0x09, // REPORT_SIZE (9)
Cirrus01 1:7f1e68e6da0c 546 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 547 USAGE(1), 0x69, // USAGE (Custom Force Data)
Cirrus01 1:7f1e68e6da0c 548 LOGICAL_MAXIMUM(2), 0xff, 0x00, // LOGICAL_MAXIMUM (255)
Cirrus01 1:7f1e68e6da0c 549 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 550 REPORT_COUNT(2), 0x00, 0x01, // REPORT_COUNT (256)
Cirrus01 1:7f1e68e6da0c 551 OUTPUT(2), 0x02, 0x01, // OUTPUT (Data,Var,Abs,Buf)
Cirrus01 1:7f1e68e6da0c 552 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 553 USAGE(1), 0x66, // USAGE (Download Force Sample)
Cirrus01 1:7f1e68e6da0c 554 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 555 REPORT_ID(1), 0x08, // REPORT_ID (8)
Cirrus01 1:7f1e68e6da0c 556 USAGE_PAGE(1), 0x01, // USAGE_PAGE (Generic Desktop)
Cirrus01 1:7f1e68e6da0c 557 USAGE(1), 0x01, // USAGE (Pointer)
Cirrus01 1:7f1e68e6da0c 558 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 559 USAGE(1), 0x30, // USAGE (X)
Cirrus01 1:7f1e68e6da0c 560 USAGE(1), 0x31, // USAGE (Y)
Cirrus01 1:7f1e68e6da0c 561 USAGE(1), 0x32, // USAGE (Z)
Cirrus01 1:7f1e68e6da0c 562 LOGICAL_MINIMUM(1), 0x81, // LOGICAL_MINIMUM (-127)
Cirrus01 1:7f1e68e6da0c 563 LOGICAL_MAXIMUM(1), 0x7f, // LOGICAL_MAXIMUM (127)
Cirrus01 1:7f1e68e6da0c 564 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 565 REPORT_COUNT(1), 0x03, // REPORT_COUNT (3)
Cirrus01 1:7f1e68e6da0c 566 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 567 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 568 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 569 USAGE_PAGE(1), 0x0f, // USAGE_PAGE (Physical Interface Device)
Cirrus01 1:7f1e68e6da0c 570 USAGE(1), 0x6b, // USAGE (Set Custom Force Report)
Cirrus01 1:7f1e68e6da0c 571 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 572 REPORT_ID(1), 0x09, // REPORT_ID (9)
Cirrus01 1:7f1e68e6da0c 573 USAGE(1), 0x23, // USAGE (Parameter Block Offset)
Cirrus01 1:7f1e68e6da0c 574 USAGE(1), 0x6c, // USAGE (Custom Force Data Offset)
Cirrus01 1:7f1e68e6da0c 575 USAGE(1), 0x6d, // USAGE (Sample Count)
Cirrus01 1:7f1e68e6da0c 576 LOGICAL_MINIMUM(1), 0x00, // LOGICAL_MINIMUM (0)
Cirrus01 1:7f1e68e6da0c 577 LOGICAL_MAXIMUM(2), 0xfd, 0x7f, // LOGICAL_MAXIMUM (32765)
Cirrus01 1:7f1e68e6da0c 578 REPORT_COUNT(1), 0x03, // REPORT_COUNT (3)
Cirrus01 1:7f1e68e6da0c 579 REPORT_SIZE(1), 0x10, // REPORT_SIZE (16)
Cirrus01 1:7f1e68e6da0c 580 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 581 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 582 USAGE(1), 0x77, // USAGE (Effect Operation Report)
Cirrus01 1:7f1e68e6da0c 583 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 584 REPORT_ID(1), 0x0a, // REPORT_ID (10)
Cirrus01 1:7f1e68e6da0c 585 USAGE(1), 0x22, // USAGE (Effect Block Index)
Cirrus01 1:7f1e68e6da0c 586 LOGICAL_MAXIMUM(1), 0x7f, // LOGICAL_MAXIMUM (127)
Cirrus01 1:7f1e68e6da0c 587 REPORT_SIZE(1), 0x07, // REPORT_SIZE (7)
Cirrus01 1:7f1e68e6da0c 588 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 589 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 590 USAGE(1), 0x24, // USAGE (ROM Flag)
Cirrus01 1:7f1e68e6da0c 591 LOGICAL_MAXIMUM(1), 0x01, // LOGICAL_MAXIMUM (1)
Cirrus01 1:7f1e68e6da0c 592 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 593 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 594 USAGE(1), 0x78, // USAGE (Effect Operation)
Cirrus01 1:7f1e68e6da0c 595 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 596 USAGE(1), 0x79, // USAGE (Op Effect Start)
Cirrus01 1:7f1e68e6da0c 597 USAGE(1), 0x7a, // USAGE (Op Effect Start Solo)
Cirrus01 1:7f1e68e6da0c 598 USAGE(1), 0x7b, // USAGE (Op Effect Stop)
Cirrus01 1:7f1e68e6da0c 599 LOGICAL_MINIMUM(1), 0x01, // LOGICAL_MINIMUM (1)
Cirrus01 1:7f1e68e6da0c 600 LOGICAL_MAXIMUM(1), 0x03, // LOGICAL_MAXIMUM (3)
Cirrus01 1:7f1e68e6da0c 601 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 602 OUTPUT(1), 0x00, // OUTPUT (Data,Ary,Abs)
Cirrus01 1:7f1e68e6da0c 603 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 604 USAGE(1), 0x7c, // USAGE (Loop Count)
Cirrus01 1:7f1e68e6da0c 605 LOGICAL_MINIMUM(1), 0x00, // LOGICAL_MINIMUM (0)
Cirrus01 1:7f1e68e6da0c 606 LOGICAL_MAXIMUM(2), 0xff, 0x00, // LOGICAL_MAXIMUM (255)
Cirrus01 1:7f1e68e6da0c 607 OUTPUT(1), 0x02, // OUTPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 608 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 609 USAGE(1), 0x7f, // USAGE (PID Pool Report)
Cirrus01 1:7f1e68e6da0c 610 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 611 REPORT_ID(1), 0x01, // REPORT_ID (1)
Cirrus01 1:7f1e68e6da0c 612 USAGE(1), 0x80, // USAGE (RAM Pool Size)
Cirrus01 1:7f1e68e6da0c 613 USAGE(1), 0x81, // USAGE (ROM Pool Size)
Cirrus01 1:7f1e68e6da0c 614 USAGE(1), 0x82, // USAGE (ROM Effect Block Count)
Cirrus01 1:7f1e68e6da0c 615 LOGICAL_MAXIMUM(2), 0xfd, 0x7f, // LOGICAL_MAXIMUM (32765)
Cirrus01 1:7f1e68e6da0c 616 REPORT_COUNT(1), 0x03, // REPORT_COUNT (3)
Cirrus01 1:7f1e68e6da0c 617 REPORT_SIZE(1), 0x10, // REPORT_SIZE (16)
Cirrus01 1:7f1e68e6da0c 618 FEATURE(1), 0x02, // FEATURE (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 619 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 620 USAGE(1), 0x92, // USAGE (PID State Report)
Cirrus01 1:7f1e68e6da0c 621 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 622 REPORT_ID(1), 0x02, // REPORT_ID (2)
Cirrus01 1:7f1e68e6da0c 623 USAGE(1), 0x22, // USAGE (Effect Block Index)
Cirrus01 1:7f1e68e6da0c 624 LOGICAL_MAXIMUM(1), 0x7f, // LOGICAL_MAXIMUM (127)
Cirrus01 1:7f1e68e6da0c 625 REPORT_SIZE(1), 0x07, // REPORT_SIZE (7)
Cirrus01 1:7f1e68e6da0c 626 INPUT(1), 0x02, // INPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 627 USAGE(1), 0x24, // USAGE (ROM Flag)
Cirrus01 1:7f1e68e6da0c 628 LOGICAL_MAXIMUM(1), 0x01, // LOGICAL_MAXIMUM (1)
Cirrus01 1:7f1e68e6da0c 629 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 630 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 631 INPUT(1), 0x02, // INPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 632 USAGE(1), 0x94, // USAGE (Effect Playing)
Cirrus01 1:7f1e68e6da0c 633 USAGE(1), 0xa0, // USAGE (Actuators Enabled)
Cirrus01 1:7f1e68e6da0c 634 USAGE(1), 0xa4, // USAGE (Safety Switch)
Cirrus01 1:7f1e68e6da0c 635 USAGE(1), 0xa6, // USAGE (Actuator Power)
Cirrus01 1:7f1e68e6da0c 636 REPORT_COUNT(1), 0x04, // REPORT_COUNT (4)
Cirrus01 1:7f1e68e6da0c 637 INPUT(1), 0x02, // INPUT (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 638 INPUT(1), 0x03, // INPUT (Cnst,Var,Abs)
Cirrus01 1:7f1e68e6da0c 639 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 640 USAGE(1), 0x95, // USAGE (PID Device Control Report)
Cirrus01 1:7f1e68e6da0c 641 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 642 REPORT_ID(1), 0x0b, // REPORT_ID (11)
Cirrus01 1:7f1e68e6da0c 643 USAGE(1), 0x96, // USAGE (PID Device Control)
Cirrus01 1:7f1e68e6da0c 644 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 645 USAGE(1), 0x97, // USAGE (DC Enable Actuators)
Cirrus01 1:7f1e68e6da0c 646 USAGE(1), 0x98, // USAGE (DC Disable Actuators)
Cirrus01 1:7f1e68e6da0c 647 USAGE(1), 0x99, // USAGE (DC Stop All Effects)
Cirrus01 1:7f1e68e6da0c 648 USAGE(1), 0x9a, // USAGE (DC Device Reset)
Cirrus01 1:7f1e68e6da0c 649 USAGE(1), 0x9b, // USAGE (DC Device Pause)
Cirrus01 1:7f1e68e6da0c 650 USAGE(1), 0x9c, // USAGE (DC Device Continue)
Cirrus01 1:7f1e68e6da0c 651 LOGICAL_MINIMUM(1), 0x01, // LOGICAL_MINIMUM (1)
Cirrus01 1:7f1e68e6da0c 652 LOGICAL_MAXIMUM(1), 0x06, // LOGICAL_MAXIMUM (6)
Cirrus01 1:7f1e68e6da0c 653 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 654 REPORT_COUNT(1), 0x04, // REPORT_COUNT (4)
Cirrus01 1:7f1e68e6da0c 655 OUTPUT(1), 0x00, // OUTPUT (Data,Ary,Abs)
Cirrus01 1:7f1e68e6da0c 656 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 657 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 658 USAGE(1), 0x85, // USAGE (PID Pool Move Report)
Cirrus01 1:7f1e68e6da0c 659 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 660 REPORT_ID(1), 0x0c, // REPORT_ID (12)
Cirrus01 1:7f1e68e6da0c 661 USAGE(1), 0x86, // USAGE (Move Source)
Cirrus01 1:7f1e68e6da0c 662 USAGE(1), 0x87, // USAGE (Move Destination)
Cirrus01 1:7f1e68e6da0c 663 USAGE(1), 0x88, // USAGE (Move Length)
Cirrus01 1:7f1e68e6da0c 664 LOGICAL_MAXIMUM(2), 0xff, 0x7f, // LOGICAL_MAXIMUM (32767)
Cirrus01 1:7f1e68e6da0c 665 REPORT_SIZE(1), 0x01, // REPORT_SIZE (1)
Cirrus01 1:7f1e68e6da0c 666 REPORT_COUNT(1), 0x04, // REPORT_COUNT (4)
Cirrus01 1:7f1e68e6da0c 667 OUTPUT(1), 0x00, // OUTPUT (Data,Ary,Abs)
Cirrus01 1:7f1e68e6da0c 668 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 669 USAGE(1), 0x7d, // USAGE (Device Gain Report)
Cirrus01 1:7f1e68e6da0c 670 COLLECTION(1), 0x02, // COLLECTION (Logical)
Cirrus01 1:7f1e68e6da0c 671 REPORT_ID(1), 0x02, // REPORT_ID (2)
Cirrus01 1:7f1e68e6da0c 672 USAGE(1), 0x7e, // USAGE (Device Gain)
Cirrus01 1:7f1e68e6da0c 673 LOGICAL_MAXIMUM(2), 0xff, 0x00, // LOGICAL_MAXIMUM (255)
Cirrus01 1:7f1e68e6da0c 674 REPORT_SIZE(1), 0x08, // REPORT_SIZE (8)
Cirrus01 1:7f1e68e6da0c 675 REPORT_COUNT(1), 0x01, // REPORT_COUNT (1)
Cirrus01 1:7f1e68e6da0c 676 FEATURE(1), 0x02, // FEATURE (Data,Var,Abs)
Cirrus01 1:7f1e68e6da0c 677 END_COLLECTION(0), // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 678 #endif
Cirrus01 1:7f1e68e6da0c 679 END_COLLECTION(0) // END_COLLECTION
Cirrus01 1:7f1e68e6da0c 680 };
wim 0:e086541742c3 681
Cirrus01 1:7f1e68e6da0c 682 reportLength = sizeof(reportDescriptor);
Cirrus01 1:7f1e68e6da0c 683 return reportDescriptor;
wim 0:e086541742c3 684 }
Cirrus01 1:7f1e68e6da0c 685
Cirrus01 1:7f1e68e6da0c 686 bool USBPID::EPINT_OUT_callback() {
Cirrus01 1:7f1e68e6da0c 687 uint32_t bytesRead = 0;
Cirrus01 1:7f1e68e6da0c 688 uint8_t output[65];
Cirrus01 1:7f1e68e6da0c 689 uint8_t rID;
Cirrus01 1:7f1e68e6da0c 690 USBDevice::readEP(EPINT_OUT, output, &bytesRead, MAX_PID_REPORT_SIZE);
Cirrus01 1:7f1e68e6da0c 691
Cirrus01 1:7f1e68e6da0c 692 // get the report ID
Cirrus01 1:7f1e68e6da0c 693 rID = output[0]
Cirrus01 1:7f1e68e6da0c 694
Cirrus01 1:7f1e68e6da0c 695 switch(rID)
Cirrus01 1:7f1e68e6da0c 696 // Set Envelope Report
Cirrus01 1:7f1e68e6da0c 697 case 1 :
Cirrus01 1:7f1e68e6da0c 698 // we take led[1] because led[0] is the report ID
Cirrus01 1:7f1e68e6da0c 699 lock_status = led[1] & 0x07;
Cirrus01 1:7f1e68e6da0c 700
Cirrus01 1:7f1e68e6da0c 701 // We activate the endpoint to be able to recceive data
Cirrus01 1:7f1e68e6da0c 702 if (!readStart(EPINT_OUT, MAX_HID_REPORT_SIZE))
Cirrus01 1:7f1e68e6da0c 703 return false;
Cirrus01 1:7f1e68e6da0c 704 return true;
Cirrus01 1:7f1e68e6da0c 705 }