use super::*; /// A Device bound to a JACK client and a set of ports. pub struct JackDevice { /// The active JACK client of this device. pub client: DynamicAsyncClient, /// The device state, encapsulated for sharing between threads. pub state: Arc>>, /// Unowned copies of the device's JACK ports, for connecting to the device. /// The "real" readable/writable `Port`s are owned by the `state`. pub ports: UnownedJackPorts, } ports!(JackDevice { audio: { ins: |s|Ok(s.ports.audio_ins.values().collect()), outs: |s|Ok(s.ports.audio_outs.values().collect()), } midi: { ins: |s|Ok(s.ports.midi_ins.values().collect()), outs: |s|Ok(s.ports.midi_outs.values().collect()), } }); impl JackDevice { /// Returns a locked mutex of the state's contents. pub fn state (&self) -> MutexGuard> { self.state.lock().unwrap() } }