use serde::Serialize;
const MAX_MIDI_BUFFER: usize = 256;
const OBF_BIT: u8 = 0x80;
#[derive(Serialize)]
pub struct MidiInterface {
pub(crate) out_buffer: Vec<(u8, u64)>,
}
impl Default for MidiInterface {
fn default() -> Self {
Self {
out_buffer: Vec::with_capacity(MAX_MIDI_BUFFER),
}
}
}
impl MidiInterface {
pub fn new() -> Self {
Self::default()
}
#[inline]
pub fn update(&mut self, port_a: u8, port_c: u8, cycle_count: u64) -> bool {
let obf_active = (port_c & OBF_BIT) == 0;
if obf_active {
if self.out_buffer.len() < MAX_MIDI_BUFFER {
self.out_buffer.push((port_a, cycle_count));
}
true
} else {
false
}
}
}