X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fbackends%2Fcoreaudio%2Fcoremidi_io.h;h=b09261cbf9c51f70bd18d881c1b83f715802170f;hb=8c61c7f14a8136b877368be7d20fe4eaf8e5bf88;hp=312b9d171e0a1bf7db7abe7c96c1467c80afc1c5;hpb=f6f64d3f81d2d38301fd921c8e094b648f74a5c5;p=ardour.git diff --git a/libs/backends/coreaudio/coremidi_io.h b/libs/backends/coreaudio/coremidi_io.h index 312b9d171e..b09261cbf9 100644 --- a/libs/backends/coreaudio/coremidi_io.h +++ b/libs/backends/coreaudio/coremidi_io.h @@ -16,6 +16,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#ifndef __libbackend_coremidi_io_h__ +#define __libbackend_coremidi_io_h__ + #include #include #include @@ -30,10 +33,12 @@ #include #include "pbd/ringbuffer.h" -typedef struct _CoreMIDIPacket { - MIDITimeStamp timeStamp; - UInt16 length; - Byte data[256]; +namespace ARDOUR { + +typedef struct _CoreMIDIPacket { + MIDITimeStamp timeStamp; + UInt16 length; + Byte data[256]; #if 0 // unused _CoreMIDIPacket (MIDITimeStamp t, Byte *d, UInt16 l) : timeStamp(t) @@ -47,7 +52,7 @@ typedef struct _CoreMIDIPacket { } } #endif - _CoreMIDIPacket (const MIDIPacket *other) + _CoreMIDIPacket (const MIDIPacket *other) : timeStamp(other->timeStamp) , length (other->length) { @@ -64,40 +69,57 @@ public: CoreMidiIo (void); ~CoreMidiIo (void); - // TODO explicit start/stop, add/remove devices as needed. - void discover (); + void start (); + void stop (); + void start_cycle (); int send_event (uint32_t, double, const uint8_t *, const size_t); + int send_events (uint32_t, double, const void *); size_t recv_event (uint32_t, double, uint64_t &, uint8_t *, size_t &); uint32_t n_midi_inputs (void) const { return _n_midi_in; } uint32_t n_midi_outputs (void) const { return _n_midi_out; } + std::string port_id (uint32_t, bool input); + std::string port_name (uint32_t, bool input); void notify_proc (const MIDINotification *message); - void setPortChangedCallback (void (changed_callback (void*)), void *arg) { + void set_enabled (bool yn = true) { _enabled = yn; } + bool enabled (void) const { return _active && _enabled; } + + void set_port_changed_callback (void (changed_callback (void*)), void *arg) { _changed_callback = changed_callback; _changed_arg = arg; } private: + void discover (); void cleanup (); - MIDIClientRef _midiClient; - MIDIEndpointRef * _inputEndPoints; - MIDIEndpointRef * _outputEndPoints; - MIDIPortRef * _inputPorts; - MIDIPortRef * _outputPorts; - CoreMIDIQueue * _inputQueue; + MIDIClientRef _midi_client; + MIDIEndpointRef * _input_endpoints; + MIDIEndpointRef * _output_endpoints; + MIDIPortRef * _input_ports; + MIDIPortRef * _output_ports; + CoreMIDIQueue * _input_queue; + RingBuffer ** _rb; - uint32_t _n_midi_in; - uint32_t _n_midi_out; + uint32_t _n_midi_in; + uint32_t _n_midi_out; - MIDITimeStamp _time_at_cycle_start; - bool _active; + MIDITimeStamp _time_at_cycle_start; + bool _active; // internal deactivate during discovery etc + bool _enabled; // temporary disable, e.g. during freewheeli + bool _run; // general status void (* _changed_callback) (void*); void * _changed_arg; + + pthread_mutex_t _discovery_lock; }; + +} // namespace + +#endif /* __libbackend_coremidi_io */