Sound Byte Libs 0.5.1-121-g3358a44
C++ firmware library for audio applications on 32-bit ARM Cortex-M processors
Loading...
Searching...
No Matches
midi.cpp
Go to the documentation of this file.
1/**
2 * @file midi.cpp
3 * @brief USB MIDI device implementation
4 *
5 * Wraps TinyUSB's MIDI device class for SBL.
6 * See midi.hpp for API documentation.
7 */
8
9#include "tusb.h"
10#include <sbl/usb/midi.hpp>
11
12namespace sbl::usb {
13
14namespace {
15
16/// Cable number for our single virtual MIDI cable
17constexpr uint8_t CABLE_NUM = 0;
18
19/// A USB device has one cable, so one output port
20constexpr uint8_t OUT_PORTS = 1;
21
22} // anonymous namespace
23
25 return tud_midi_mounted();
26}
27
28uint32_t MidiPort::read(uint8_t* buf, uint32_t max_len) {
29 if (!tud_midi_mounted()) return 0;
30 return tud_midi_stream_read(buf, max_len);
31}
32
33bool MidiPort::send(const sbl::midi::MidiEvent& event, uint8_t port) {
34 if (port != 0 || !tud_midi_mounted()) return false;
35
36 uint8_t msg[3];
37 uint8_t len = event.to_bytes(msg);
38 if (len == 0) return false;
39
40 return tud_midi_stream_write(CABLE_NUM, msg, len) == len;
41}
42
43uint32_t MidiPort::write(const uint8_t* data, uint32_t len, uint8_t port) {
44 if (port != 0 || !tud_midi_mounted()) return 0;
45 return tud_midi_stream_write(CABLE_NUM, data, len);
46}
47
48uint8_t MidiPort::out_port_count() { return OUT_PORTS; }
49
50} // namespace sbl::usb
static bool connected()
Check if USB MIDI interface is mounted by host.
Definition midi.cpp:24
static uint32_t write(const uint8_t *data, uint32_t len, uint8_t port=0)
Write raw MIDI bytes to USB MIDI (TX)
Definition midi.cpp:43
static uint8_t out_port_count()
How many output ports this target has.
Definition midi.cpp:48
static uint32_t read(uint8_t *buf, uint32_t max_len)
Read decoded MIDI bytes from USB (RX)
Definition midi.cpp:28
static bool send(const sbl::midi::MidiEvent &event, uint8_t port=0)
Send a MidiEvent over USB MIDI (TX)
Definition midi.cpp:33
USB MIDI device interface.
constexpr uint8_t OUT_PORTS
A USB device has one cable, so one output port.
Definition midi.cpp:20
constexpr uint8_t CABLE_NUM
Cable number for our single virtual MIDI cable.
Definition midi.cpp:17
USB device classes.
Definition cdc.cpp:24