#ifndef JACK_H #define JACK_H #include #include enum PortEventType { PET_REGISTER, PET_UNREGISTER, PET_CONNECT, PET_DISCONNECT }; struct PortEvent { PortEventType type; jack_port_id_t port_id_a; jack_port_id_t port_id_b; }; class JackDriver { private: bool m_connected; jack_client_t *m_client; jack_ringbuffer_t *m_buffer; static void ShutdownCallbackHandler(void *arg) { ((JackDriver *)arg)->ShutdownCallback(); } static void PortRegistrationCallbackHandler(jack_port_id_t port_id, int reg, void *arg) { ((JackDriver *)arg)->PortRegistrationCallback(port_id, reg); } static void PortConnectCallbackHandler(jack_port_id_t port_id_a, jack_port_id_t port_id_b, int connect, void *arg) { ((JackDriver *)arg)->PortConnectCallback(port_id_a, port_id_b, connect); } void ShutdownCallback(); void PortRegistrationCallback(jack_port_id_t port, int reg); void PortConnectCallback(jack_port_id_t a, jack_port_id_t b, int connect); public: JackDriver(); ~JackDriver(); void Connect(); void Disconnect(); bool IsConnected() const { return m_connected; } bool ProcessEvents(); void Connect(jack_port_t *a, jack_port_t *b); void Disconnect(jack_port_t *a, jack_port_t *b); }; extern JackDriver jack; #endif // JACK_H