USBHost+USB MIDI

Dependencies:   FATFileSystem mbed-rtos

Dependents:   USBHostMIDI_example MIDISynthwithSpecAnalyzer

Fork of USBHost by mbed official

USBHost with USB MIDI support

(work in progress...)

Tested functions

Receiving

  • note on
  • note off
  • program change
  • control change
  • pitch bend

Tranmitting

  • not tested yet.
Committer:
kshoji
Date:
Thu Dec 05 09:32:50 2013 +0000
Revision:
19:bf09452b8f26
forked

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kshoji 19:bf09452b8f26 1 /* mbed USBHost Library
kshoji 19:bf09452b8f26 2 * Copyright (c) 2006-2013 ARM Limited
kshoji 19:bf09452b8f26 3 *
kshoji 19:bf09452b8f26 4 * Licensed under the Apache License, Version 2.0 (the "License");
kshoji 19:bf09452b8f26 5 * you may not use this file except in compliance with the License.
kshoji 19:bf09452b8f26 6 * You may obtain a copy of the License at
kshoji 19:bf09452b8f26 7 *
kshoji 19:bf09452b8f26 8 * http://www.apache.org/licenses/LICENSE-2.0
kshoji 19:bf09452b8f26 9 *
kshoji 19:bf09452b8f26 10 * Unless required by applicable law or agreed to in writing, software
kshoji 19:bf09452b8f26 11 * distributed under the License is distributed on an "AS IS" BASIS,
kshoji 19:bf09452b8f26 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kshoji 19:bf09452b8f26 13 * See the License for the specific language governing permissions and
kshoji 19:bf09452b8f26 14 * limitations under the License.
kshoji 19:bf09452b8f26 15 */
kshoji 19:bf09452b8f26 16
kshoji 19:bf09452b8f26 17 #ifndef MTXCIRCBUFFER_H
kshoji 19:bf09452b8f26 18 #define MTXCIRCBUFFER_H
kshoji 19:bf09452b8f26 19
kshoji 19:bf09452b8f26 20 #include "stdint.h"
kshoji 19:bf09452b8f26 21 #include "rtos.h"
kshoji 19:bf09452b8f26 22
kshoji 19:bf09452b8f26 23 //Mutex protected circular buffer
kshoji 19:bf09452b8f26 24 template<typename T, int size>
kshoji 19:bf09452b8f26 25 class MtxCircBuffer {
kshoji 19:bf09452b8f26 26 public:
kshoji 19:bf09452b8f26 27
kshoji 19:bf09452b8f26 28 MtxCircBuffer() {
kshoji 19:bf09452b8f26 29 write = 0;
kshoji 19:bf09452b8f26 30 read = 0;
kshoji 19:bf09452b8f26 31 }
kshoji 19:bf09452b8f26 32
kshoji 19:bf09452b8f26 33 bool isFull() {
kshoji 19:bf09452b8f26 34 mtx.lock();
kshoji 19:bf09452b8f26 35 bool r = (((write + 1) % size) == read);
kshoji 19:bf09452b8f26 36 mtx.unlock();
kshoji 19:bf09452b8f26 37 return r;
kshoji 19:bf09452b8f26 38 }
kshoji 19:bf09452b8f26 39
kshoji 19:bf09452b8f26 40 bool isEmpty() {
kshoji 19:bf09452b8f26 41 mtx.lock();
kshoji 19:bf09452b8f26 42 bool r = (read == write);
kshoji 19:bf09452b8f26 43 mtx.unlock();
kshoji 19:bf09452b8f26 44 return r;
kshoji 19:bf09452b8f26 45 }
kshoji 19:bf09452b8f26 46
kshoji 19:bf09452b8f26 47 void flush() {
kshoji 19:bf09452b8f26 48 write = 0;
kshoji 19:bf09452b8f26 49 read = 0;
kshoji 19:bf09452b8f26 50 }
kshoji 19:bf09452b8f26 51
kshoji 19:bf09452b8f26 52 void queue(T k) {
kshoji 19:bf09452b8f26 53 mtx.lock();
kshoji 19:bf09452b8f26 54 while (((write + 1) % size) == read) {
kshoji 19:bf09452b8f26 55 mtx.unlock();
kshoji 19:bf09452b8f26 56 Thread::wait(10);
kshoji 19:bf09452b8f26 57 mtx.lock();
kshoji 19:bf09452b8f26 58 }
kshoji 19:bf09452b8f26 59 buf[write++] = k;
kshoji 19:bf09452b8f26 60 write %= size;
kshoji 19:bf09452b8f26 61 mtx.unlock();
kshoji 19:bf09452b8f26 62 }
kshoji 19:bf09452b8f26 63
kshoji 19:bf09452b8f26 64 uint16_t available() {
kshoji 19:bf09452b8f26 65 mtx.lock();
kshoji 19:bf09452b8f26 66 uint16_t a = (write >= read) ? (write - read) : (size - read + write);
kshoji 19:bf09452b8f26 67 mtx.unlock();
kshoji 19:bf09452b8f26 68 return a;
kshoji 19:bf09452b8f26 69 }
kshoji 19:bf09452b8f26 70
kshoji 19:bf09452b8f26 71 bool dequeue(T * c) {
kshoji 19:bf09452b8f26 72 mtx.lock();
kshoji 19:bf09452b8f26 73 bool empty = (read == write);
kshoji 19:bf09452b8f26 74 if (!empty) {
kshoji 19:bf09452b8f26 75 *c = buf[read++];
kshoji 19:bf09452b8f26 76 read %= size;
kshoji 19:bf09452b8f26 77 }
kshoji 19:bf09452b8f26 78 mtx.unlock();
kshoji 19:bf09452b8f26 79 return (!empty);
kshoji 19:bf09452b8f26 80 }
kshoji 19:bf09452b8f26 81
kshoji 19:bf09452b8f26 82 private:
kshoji 19:bf09452b8f26 83 volatile uint16_t write;
kshoji 19:bf09452b8f26 84 volatile uint16_t read;
kshoji 19:bf09452b8f26 85 volatile T buf[size];
kshoji 19:bf09452b8f26 86 Mutex mtx;
kshoji 19:bf09452b8f26 87 };
kshoji 19:bf09452b8f26 88
kshoji 19:bf09452b8f26 89 #endif