Pierre Provent / USBHost

Dependents:   TEST_USB_Nucleo_F429ZI Essais_USB_Nucleo_F429ZI SID_V3_Nucleo_F429ZI SID_V4_Nucleo_F429ZI_copy

Committer:
pierreprovent
Date:
Fri Sep 25 10:17:49 2020 +0000
Revision:
0:77ca32e8e04e
Programme acquisition en enregistrement sur clef USB carte Nucleo F429ZI cours ELE118 Cnam

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pierreprovent 0:77ca32e8e04e 1 /* Copyright (c) 2014 mbed.org, MIT License
pierreprovent 0:77ca32e8e04e 2 *
pierreprovent 0:77ca32e8e04e 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
pierreprovent 0:77ca32e8e04e 4 * and associated documentation files (the "Software"), to deal in the Software without
pierreprovent 0:77ca32e8e04e 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
pierreprovent 0:77ca32e8e04e 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
pierreprovent 0:77ca32e8e04e 7 * Software is furnished to do so, subject to the following conditions:
pierreprovent 0:77ca32e8e04e 8 *
pierreprovent 0:77ca32e8e04e 9 * The above copyright notice and this permission notice shall be included in all copies or
pierreprovent 0:77ca32e8e04e 10 * substantial portions of the Software.
pierreprovent 0:77ca32e8e04e 11 *
pierreprovent 0:77ca32e8e04e 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
pierreprovent 0:77ca32e8e04e 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
pierreprovent 0:77ca32e8e04e 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
pierreprovent 0:77ca32e8e04e 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
pierreprovent 0:77ca32e8e04e 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
pierreprovent 0:77ca32e8e04e 17 */
pierreprovent 0:77ca32e8e04e 18
pierreprovent 0:77ca32e8e04e 19 #ifndef USBHOSTMIDI_H
pierreprovent 0:77ca32e8e04e 20 #define USBHOSTMIDI_H
pierreprovent 0:77ca32e8e04e 21
pierreprovent 0:77ca32e8e04e 22 #include "USBHostConf.h"
pierreprovent 0:77ca32e8e04e 23
pierreprovent 0:77ca32e8e04e 24 #if USBHOST_MIDI
pierreprovent 0:77ca32e8e04e 25
pierreprovent 0:77ca32e8e04e 26 #include "USBHost.h"
pierreprovent 0:77ca32e8e04e 27
pierreprovent 0:77ca32e8e04e 28 /**
pierreprovent 0:77ca32e8e04e 29 * A class to communicate a USB MIDI device
pierreprovent 0:77ca32e8e04e 30 */
pierreprovent 0:77ca32e8e04e 31 class USBHostMIDI : public IUSBEnumerator {
pierreprovent 0:77ca32e8e04e 32 public:
pierreprovent 0:77ca32e8e04e 33 /**
pierreprovent 0:77ca32e8e04e 34 * Constructor
pierreprovent 0:77ca32e8e04e 35 */
pierreprovent 0:77ca32e8e04e 36 USBHostMIDI();
pierreprovent 0:77ca32e8e04e 37
pierreprovent 0:77ca32e8e04e 38 /**
pierreprovent 0:77ca32e8e04e 39 * Check if a USB MIDI device is connected
pierreprovent 0:77ca32e8e04e 40 *
pierreprovent 0:77ca32e8e04e 41 * @returns true if a midi device is connected
pierreprovent 0:77ca32e8e04e 42 */
pierreprovent 0:77ca32e8e04e 43 bool connected();
pierreprovent 0:77ca32e8e04e 44
pierreprovent 0:77ca32e8e04e 45 /**
pierreprovent 0:77ca32e8e04e 46 * Try to connect a midi device
pierreprovent 0:77ca32e8e04e 47 *
pierreprovent 0:77ca32e8e04e 48 * @return true if connection was successful
pierreprovent 0:77ca32e8e04e 49 */
pierreprovent 0:77ca32e8e04e 50 bool connect();
pierreprovent 0:77ca32e8e04e 51
pierreprovent 0:77ca32e8e04e 52 /**
pierreprovent 0:77ca32e8e04e 53 * Attach a callback called when miscellaneous function code is received
pierreprovent 0:77ca32e8e04e 54 *
pierreprovent 0:77ca32e8e04e 55 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 56 * prototype: void onMiscellaneousFunctionCode(uint8_t data1, uint8_t data2, uint8_t data3);
pierreprovent 0:77ca32e8e04e 57 */
pierreprovent 0:77ca32e8e04e 58 inline void attachMiscellaneousFunctionCode(void (*fn)(uint8_t, uint8_t, uint8_t)) {
pierreprovent 0:77ca32e8e04e 59 miscellaneousFunctionCode = fn;
pierreprovent 0:77ca32e8e04e 60 }
pierreprovent 0:77ca32e8e04e 61
pierreprovent 0:77ca32e8e04e 62 /**
pierreprovent 0:77ca32e8e04e 63 * Attach a callback called when cable event is received
pierreprovent 0:77ca32e8e04e 64 *
pierreprovent 0:77ca32e8e04e 65 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 66 * prototype: void onCableEvent(uint8_t data1, uint8_t data2, uint8_t data3);
pierreprovent 0:77ca32e8e04e 67 */
pierreprovent 0:77ca32e8e04e 68 inline void attachCableEvent(void (*fn)(uint8_t, uint8_t, uint8_t)) {
pierreprovent 0:77ca32e8e04e 69 cableEvent = fn;
pierreprovent 0:77ca32e8e04e 70 }
pierreprovent 0:77ca32e8e04e 71
pierreprovent 0:77ca32e8e04e 72 /**
pierreprovent 0:77ca32e8e04e 73 * Attach a callback called when system exclusive is received
pierreprovent 0:77ca32e8e04e 74 *
pierreprovent 0:77ca32e8e04e 75 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 76 * prototype: void onSystemCommonTwoBytes(uint8_t data1, uint8_t data2);
pierreprovent 0:77ca32e8e04e 77 */
pierreprovent 0:77ca32e8e04e 78 inline void attachSystemCommonTwoBytes(void (*fn)(uint8_t, uint8_t)) {
pierreprovent 0:77ca32e8e04e 79 systemCommonTwoBytes = fn;
pierreprovent 0:77ca32e8e04e 80 }
pierreprovent 0:77ca32e8e04e 81
pierreprovent 0:77ca32e8e04e 82 /**
pierreprovent 0:77ca32e8e04e 83 * Attach a callback called when system exclusive is received
pierreprovent 0:77ca32e8e04e 84 *
pierreprovent 0:77ca32e8e04e 85 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 86 * prototype: void onSystemCommonThreeBytes(uint8_t data1, uint8_t data2, uint8_t data3);
pierreprovent 0:77ca32e8e04e 87 */
pierreprovent 0:77ca32e8e04e 88 inline void attachSystemCommonThreeBytes(void (*fn)(uint8_t, uint8_t, uint8_t)) {
pierreprovent 0:77ca32e8e04e 89 systemCommonThreeBytes = fn;
pierreprovent 0:77ca32e8e04e 90 }
pierreprovent 0:77ca32e8e04e 91
pierreprovent 0:77ca32e8e04e 92 /**
pierreprovent 0:77ca32e8e04e 93 * Attach a callback called when system exclusive is received
pierreprovent 0:77ca32e8e04e 94 *
pierreprovent 0:77ca32e8e04e 95 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 96 * prototype: void onSystemExclusive(uint8_t *data, uint16_t length, bool hasNextData);
pierreprovent 0:77ca32e8e04e 97 */
pierreprovent 0:77ca32e8e04e 98 inline void attachSystemExclusive(void (*fn)(uint8_t *, uint16_t, bool)) {
pierreprovent 0:77ca32e8e04e 99 systemExclusive = fn;
pierreprovent 0:77ca32e8e04e 100 }
pierreprovent 0:77ca32e8e04e 101
pierreprovent 0:77ca32e8e04e 102 /**
pierreprovent 0:77ca32e8e04e 103 * Attach a callback called when note on is received
pierreprovent 0:77ca32e8e04e 104 *
pierreprovent 0:77ca32e8e04e 105 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 106 * prototype: void onNoteOn(uint8_t channel, uint8_t note, uint8_t velocity);
pierreprovent 0:77ca32e8e04e 107 */
pierreprovent 0:77ca32e8e04e 108 inline void attachNoteOn(void (*fn)(uint8_t, uint8_t, uint8_t)) {
pierreprovent 0:77ca32e8e04e 109 noteOn = fn;
pierreprovent 0:77ca32e8e04e 110 }
pierreprovent 0:77ca32e8e04e 111
pierreprovent 0:77ca32e8e04e 112 /**
pierreprovent 0:77ca32e8e04e 113 * Attach a callback called when note off is received
pierreprovent 0:77ca32e8e04e 114 *
pierreprovent 0:77ca32e8e04e 115 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 116 * prototype: void onNoteOff(uint8_t channel, uint8_t note, uint8_t velocity);
pierreprovent 0:77ca32e8e04e 117 */
pierreprovent 0:77ca32e8e04e 118 inline void attachNoteOff(void (*fn)(uint8_t, uint8_t, uint8_t)) {
pierreprovent 0:77ca32e8e04e 119 noteOff = fn;
pierreprovent 0:77ca32e8e04e 120 }
pierreprovent 0:77ca32e8e04e 121
pierreprovent 0:77ca32e8e04e 122 /**
pierreprovent 0:77ca32e8e04e 123 * Attach a callback called when poly keypress is received
pierreprovent 0:77ca32e8e04e 124 *
pierreprovent 0:77ca32e8e04e 125 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 126 * prototype: void onPolyKeyPress(uint8_t channel, uint8_t note, uint8_t pressure);
pierreprovent 0:77ca32e8e04e 127 */
pierreprovent 0:77ca32e8e04e 128 inline void attachPolyKeyPress(void (*fn)(uint8_t, uint8_t, uint8_t)) {
pierreprovent 0:77ca32e8e04e 129 polyKeyPress = fn;
pierreprovent 0:77ca32e8e04e 130 }
pierreprovent 0:77ca32e8e04e 131
pierreprovent 0:77ca32e8e04e 132 /**
pierreprovent 0:77ca32e8e04e 133 * Attach a callback called when control change is received
pierreprovent 0:77ca32e8e04e 134 *
pierreprovent 0:77ca32e8e04e 135 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 136 * prototype: void onControlChange(uint8_t channel, uint8_t key, uint8_t value);
pierreprovent 0:77ca32e8e04e 137 */
pierreprovent 0:77ca32e8e04e 138 inline void attachControlChange(void (*fn)(uint8_t, uint8_t, uint8_t)) {
pierreprovent 0:77ca32e8e04e 139 controlChange = fn;
pierreprovent 0:77ca32e8e04e 140 }
pierreprovent 0:77ca32e8e04e 141
pierreprovent 0:77ca32e8e04e 142 /**
pierreprovent 0:77ca32e8e04e 143 * Attach a callback called when program change is received
pierreprovent 0:77ca32e8e04e 144 *
pierreprovent 0:77ca32e8e04e 145 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 146 * prototype: void onProgramChange(uint8_t channel, uint8_t program);
pierreprovent 0:77ca32e8e04e 147 */
pierreprovent 0:77ca32e8e04e 148 inline void attachProgramChange(void (*fn)(uint8_t, uint8_t)) {
pierreprovent 0:77ca32e8e04e 149 programChange = fn;
pierreprovent 0:77ca32e8e04e 150 }
pierreprovent 0:77ca32e8e04e 151
pierreprovent 0:77ca32e8e04e 152 /**
pierreprovent 0:77ca32e8e04e 153 * Attach a callback called when channel pressure is received
pierreprovent 0:77ca32e8e04e 154 *
pierreprovent 0:77ca32e8e04e 155 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 156 * prototype: void onChannelPressure(uint8_t channel, uint8_t pressure);
pierreprovent 0:77ca32e8e04e 157 */
pierreprovent 0:77ca32e8e04e 158 inline void attachChannelPressure(void (*fn)(uint8_t, uint8_t)) {
pierreprovent 0:77ca32e8e04e 159 channelPressure = fn;
pierreprovent 0:77ca32e8e04e 160 }
pierreprovent 0:77ca32e8e04e 161
pierreprovent 0:77ca32e8e04e 162 /**
pierreprovent 0:77ca32e8e04e 163 * Attach a callback called when pitch bend is received
pierreprovent 0:77ca32e8e04e 164 *
pierreprovent 0:77ca32e8e04e 165 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 166 * prototype: void onPitchBend(uint8_t channel, uint16_t value);
pierreprovent 0:77ca32e8e04e 167 */
pierreprovent 0:77ca32e8e04e 168 inline void attachPitchBend(void (*fn)(uint8_t, uint16_t)) {
pierreprovent 0:77ca32e8e04e 169 pitchBend = fn;
pierreprovent 0:77ca32e8e04e 170 }
pierreprovent 0:77ca32e8e04e 171
pierreprovent 0:77ca32e8e04e 172 /**
pierreprovent 0:77ca32e8e04e 173 * Attach a callback called when single byte is received
pierreprovent 0:77ca32e8e04e 174 *
pierreprovent 0:77ca32e8e04e 175 * @param ptr function pointer
pierreprovent 0:77ca32e8e04e 176 * prototype: void onSingleByte(uint8_t value);
pierreprovent 0:77ca32e8e04e 177 */
pierreprovent 0:77ca32e8e04e 178 inline void attachSingleByte(void (*fn)(uint8_t)) {
pierreprovent 0:77ca32e8e04e 179 singleByte = fn;
pierreprovent 0:77ca32e8e04e 180 }
pierreprovent 0:77ca32e8e04e 181
pierreprovent 0:77ca32e8e04e 182 /**
pierreprovent 0:77ca32e8e04e 183 * Send a cable event with 3 bytes event
pierreprovent 0:77ca32e8e04e 184 *
pierreprovent 0:77ca32e8e04e 185 * @param data1 0-255
pierreprovent 0:77ca32e8e04e 186 * @param data2 0-255
pierreprovent 0:77ca32e8e04e 187 * @param data3 0-255
pierreprovent 0:77ca32e8e04e 188 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 189 */
pierreprovent 0:77ca32e8e04e 190 bool sendMiscellaneousFunctionCode(uint8_t data1, uint8_t data2, uint8_t data3);
pierreprovent 0:77ca32e8e04e 191
pierreprovent 0:77ca32e8e04e 192 /**
pierreprovent 0:77ca32e8e04e 193 * Send a cable event with 3 bytes event
pierreprovent 0:77ca32e8e04e 194 *
pierreprovent 0:77ca32e8e04e 195 * @param data1 0-255
pierreprovent 0:77ca32e8e04e 196 * @param data2 0-255
pierreprovent 0:77ca32e8e04e 197 * @param data3 0-255
pierreprovent 0:77ca32e8e04e 198 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 199 */
pierreprovent 0:77ca32e8e04e 200 bool sendCableEvent(uint8_t data1, uint8_t data2, uint8_t data3);
pierreprovent 0:77ca32e8e04e 201
pierreprovent 0:77ca32e8e04e 202 /**
pierreprovent 0:77ca32e8e04e 203 * Send a system common message with 2 bytes event
pierreprovent 0:77ca32e8e04e 204 *
pierreprovent 0:77ca32e8e04e 205 * @param data1 0-255
pierreprovent 0:77ca32e8e04e 206 * @param data2 0-255
pierreprovent 0:77ca32e8e04e 207 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 208 */
pierreprovent 0:77ca32e8e04e 209 bool sendSystemCommmonTwoBytes(uint8_t data1, uint8_t data2);
pierreprovent 0:77ca32e8e04e 210
pierreprovent 0:77ca32e8e04e 211 /**
pierreprovent 0:77ca32e8e04e 212 * Send a system common message with 3 bytes event
pierreprovent 0:77ca32e8e04e 213 *
pierreprovent 0:77ca32e8e04e 214 * @param data1 0-255
pierreprovent 0:77ca32e8e04e 215 * @param data2 0-255
pierreprovent 0:77ca32e8e04e 216 * @param data3 0-255
pierreprovent 0:77ca32e8e04e 217 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 218 */
pierreprovent 0:77ca32e8e04e 219 bool sendSystemCommmonThreeBytes(uint8_t data1, uint8_t data2, uint8_t data3);
pierreprovent 0:77ca32e8e04e 220
pierreprovent 0:77ca32e8e04e 221 /**
pierreprovent 0:77ca32e8e04e 222 * Send a system exclusive event
pierreprovent 0:77ca32e8e04e 223 *
pierreprovent 0:77ca32e8e04e 224 * @param buffer, starts with 0xF0, and end with 0xf7
pierreprovent 0:77ca32e8e04e 225 * @param length
pierreprovent 0:77ca32e8e04e 226 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 227 */
pierreprovent 0:77ca32e8e04e 228 bool sendSystemExclusive(uint8_t *buffer, int length);
pierreprovent 0:77ca32e8e04e 229
pierreprovent 0:77ca32e8e04e 230 /**
pierreprovent 0:77ca32e8e04e 231 * Send a note off event
pierreprovent 0:77ca32e8e04e 232 *
pierreprovent 0:77ca32e8e04e 233 * @param channel 0-15
pierreprovent 0:77ca32e8e04e 234 * @param note 0-127
pierreprovent 0:77ca32e8e04e 235 * @param velocity 0-127
pierreprovent 0:77ca32e8e04e 236 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 237 */
pierreprovent 0:77ca32e8e04e 238 bool sendNoteOff(uint8_t channel, uint8_t note, uint8_t velocity);
pierreprovent 0:77ca32e8e04e 239
pierreprovent 0:77ca32e8e04e 240 /**
pierreprovent 0:77ca32e8e04e 241 * Send a note on event
pierreprovent 0:77ca32e8e04e 242 *
pierreprovent 0:77ca32e8e04e 243 * @param channel 0-15
pierreprovent 0:77ca32e8e04e 244 * @param note 0-127
pierreprovent 0:77ca32e8e04e 245 * @param velocity 0-127 (0 means note off)
pierreprovent 0:77ca32e8e04e 246 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 247 */
pierreprovent 0:77ca32e8e04e 248 bool sendNoteOn(uint8_t channel, uint8_t note, uint8_t velocity);
pierreprovent 0:77ca32e8e04e 249
pierreprovent 0:77ca32e8e04e 250 /**
pierreprovent 0:77ca32e8e04e 251 * Send a poly keypress event
pierreprovent 0:77ca32e8e04e 252 *
pierreprovent 0:77ca32e8e04e 253 * @param channel 0-15
pierreprovent 0:77ca32e8e04e 254 * @param note 0-127
pierreprovent 0:77ca32e8e04e 255 * @param pressure 0-127
pierreprovent 0:77ca32e8e04e 256 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 257 */
pierreprovent 0:77ca32e8e04e 258 bool sendPolyKeyPress(uint8_t channel, uint8_t note, uint8_t pressure);
pierreprovent 0:77ca32e8e04e 259
pierreprovent 0:77ca32e8e04e 260 /**
pierreprovent 0:77ca32e8e04e 261 * Send a control change event
pierreprovent 0:77ca32e8e04e 262 *
pierreprovent 0:77ca32e8e04e 263 * @param channel 0-15
pierreprovent 0:77ca32e8e04e 264 * @param key 0-127
pierreprovent 0:77ca32e8e04e 265 * @param value 0-127
pierreprovent 0:77ca32e8e04e 266 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 267 */
pierreprovent 0:77ca32e8e04e 268 bool sendControlChange(uint8_t channel, uint8_t key, uint8_t value);
pierreprovent 0:77ca32e8e04e 269
pierreprovent 0:77ca32e8e04e 270 /**
pierreprovent 0:77ca32e8e04e 271 * Send a program change event
pierreprovent 0:77ca32e8e04e 272 *
pierreprovent 0:77ca32e8e04e 273 * @param channel 0-15
pierreprovent 0:77ca32e8e04e 274 * @param program 0-127
pierreprovent 0:77ca32e8e04e 275 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 276 */
pierreprovent 0:77ca32e8e04e 277 bool sendProgramChange(uint8_t channel, uint8_t program);
pierreprovent 0:77ca32e8e04e 278
pierreprovent 0:77ca32e8e04e 279 /**
pierreprovent 0:77ca32e8e04e 280 * Send a channel pressure event
pierreprovent 0:77ca32e8e04e 281 *
pierreprovent 0:77ca32e8e04e 282 * @param channel 0-15
pierreprovent 0:77ca32e8e04e 283 * @param pressure 0-127
pierreprovent 0:77ca32e8e04e 284 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 285 */
pierreprovent 0:77ca32e8e04e 286 bool sendChannelPressure(uint8_t channel, uint8_t pressure);
pierreprovent 0:77ca32e8e04e 287
pierreprovent 0:77ca32e8e04e 288 /**
pierreprovent 0:77ca32e8e04e 289 * Send a control change event
pierreprovent 0:77ca32e8e04e 290 *
pierreprovent 0:77ca32e8e04e 291 * @param channel 0-15
pierreprovent 0:77ca32e8e04e 292 * @param key 0(lower)-8191(center)-16383(higher)
pierreprovent 0:77ca32e8e04e 293 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 294 */
pierreprovent 0:77ca32e8e04e 295 bool sendPitchBend(uint8_t channel, uint16_t value);
pierreprovent 0:77ca32e8e04e 296
pierreprovent 0:77ca32e8e04e 297 /**
pierreprovent 0:77ca32e8e04e 298 * Send a single byte event
pierreprovent 0:77ca32e8e04e 299 *
pierreprovent 0:77ca32e8e04e 300 * @param data 0-255
pierreprovent 0:77ca32e8e04e 301 * @return true if message sent successfully
pierreprovent 0:77ca32e8e04e 302 */
pierreprovent 0:77ca32e8e04e 303 bool sendSingleByte(uint8_t data);
pierreprovent 0:77ca32e8e04e 304
pierreprovent 0:77ca32e8e04e 305 protected:
pierreprovent 0:77ca32e8e04e 306 //From IUSBEnumerator
pierreprovent 0:77ca32e8e04e 307 virtual void setVidPid(uint16_t vid, uint16_t pid);
pierreprovent 0:77ca32e8e04e 308 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
pierreprovent 0:77ca32e8e04e 309 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
pierreprovent 0:77ca32e8e04e 310
pierreprovent 0:77ca32e8e04e 311 private:
pierreprovent 0:77ca32e8e04e 312 USBHost * host;
pierreprovent 0:77ca32e8e04e 313 USBDeviceConnected * dev;
pierreprovent 0:77ca32e8e04e 314 USBEndpoint * bulk_in;
pierreprovent 0:77ca32e8e04e 315 USBEndpoint * bulk_out;
pierreprovent 0:77ca32e8e04e 316 uint32_t size_bulk_in;
pierreprovent 0:77ca32e8e04e 317 uint32_t size_bulk_out;
pierreprovent 0:77ca32e8e04e 318
pierreprovent 0:77ca32e8e04e 319 bool dev_connected;
pierreprovent 0:77ca32e8e04e 320
pierreprovent 0:77ca32e8e04e 321 void init();
pierreprovent 0:77ca32e8e04e 322
pierreprovent 0:77ca32e8e04e 323 uint8_t buf[64];
pierreprovent 0:77ca32e8e04e 324
pierreprovent 0:77ca32e8e04e 325 void rxHandler();
pierreprovent 0:77ca32e8e04e 326
pierreprovent 0:77ca32e8e04e 327 uint16_t sysExBufferPos;
pierreprovent 0:77ca32e8e04e 328 uint8_t sysExBuffer[64];
pierreprovent 0:77ca32e8e04e 329
pierreprovent 0:77ca32e8e04e 330 void (*miscellaneousFunctionCode)(uint8_t, uint8_t, uint8_t);
pierreprovent 0:77ca32e8e04e 331 void (*cableEvent)(uint8_t, uint8_t, uint8_t);
pierreprovent 0:77ca32e8e04e 332 void (*systemCommonTwoBytes)(uint8_t, uint8_t);
pierreprovent 0:77ca32e8e04e 333 void (*systemCommonThreeBytes)(uint8_t, uint8_t, uint8_t);
pierreprovent 0:77ca32e8e04e 334 void (*systemExclusive)(uint8_t *, uint16_t, bool);
pierreprovent 0:77ca32e8e04e 335 void (*noteOff)(uint8_t, uint8_t, uint8_t);
pierreprovent 0:77ca32e8e04e 336 void (*noteOn)(uint8_t, uint8_t, uint8_t);
pierreprovent 0:77ca32e8e04e 337 void (*polyKeyPress)(uint8_t, uint8_t, uint8_t);
pierreprovent 0:77ca32e8e04e 338 void (*controlChange)(uint8_t, uint8_t, uint8_t);
pierreprovent 0:77ca32e8e04e 339 void (*programChange)(uint8_t, uint8_t);
pierreprovent 0:77ca32e8e04e 340 void (*channelPressure)(uint8_t, uint8_t);
pierreprovent 0:77ca32e8e04e 341 void (*pitchBend)(uint8_t, uint16_t);
pierreprovent 0:77ca32e8e04e 342 void (*singleByte)(uint8_t);
pierreprovent 0:77ca32e8e04e 343
pierreprovent 0:77ca32e8e04e 344 bool sendMidiBuffer(uint8_t data0, uint8_t data1, uint8_t data2, uint8_t data3);
pierreprovent 0:77ca32e8e04e 345
pierreprovent 0:77ca32e8e04e 346 int midi_intf;
pierreprovent 0:77ca32e8e04e 347 bool midi_device_found;
pierreprovent 0:77ca32e8e04e 348
pierreprovent 0:77ca32e8e04e 349 };
pierreprovent 0:77ca32e8e04e 350
pierreprovent 0:77ca32e8e04e 351 #endif /* USBHOST_MIDI */
pierreprovent 0:77ca32e8e04e 352
pierreprovent 0:77ca32e8e04e 353 #endif /* USBHOSTMIDI_H */