/* $Id$ */ #include #include #include "port.h" #include "jack.h" JackPortManager::JackPortManager() { m_connected = false; } JackPortManager::~JackPortManager() { Disconnect(); } bool JackPortManager::Connect() { if (m_connected) return true; jack_status_t status; m_client = jack_client_open("mplex", JackNoStartServer, &status); if (m_client == NULL) { if (status & JackServerFailed) { fprintf(stderr, "JACK server not running\n"); } else { fprintf(stderr, "jack_client_open() failed, status = 0x%2.0x\n", status); } return false; } m_connected = true; jack_on_shutdown(m_client, &ShutdownCallbackHandler, this); jack_set_port_registration_callback(m_client, &PortRegistrationCallbackHandler, this); jack_set_port_connect_callback(m_client, &PortConnectCallbackHandler, this); jack_set_port_rename_callback(m_client, &PortRenameCallbackHandler, this); jack_activate(m_client); return true; } void JackPortManager::Disconnect() { if (!m_connected) return; m_connected = false; jack_deactivate(m_client); jack_client_close(m_client); } void JackPortManager::ShutdownCallback() { m_connected = false; printf("shutdowncallback\n"); } void JackPortManager::PortRegistrationCallback(jack_port_id_t port, int reg) { jack_port_t *p = jack_port_by_id(m_client, port); printf("portregistrationcallback: %s reg %d\n", jack_port_name(p), reg); Port *pp = GetPortByName(jack_port_name(p)); if (!reg) { delete pp; } } void JackPortManager::PortConnectCallback(jack_port_id_t a, jack_port_id_t b, int connect) { jack_port_t *pa = jack_port_by_id(m_client, a); jack_port_t *pb = jack_port_by_id(m_client, b); printf("portconnectcallback: %s %s con %d\n", jack_port_name(pa), jack_port_name(pb), connect); } int JackPortManager::PortRenameCallback(jack_port_id_t port, const char *new_name) { jack_port_t *p = jack_port_by_id(m_client, port); printf("portrenamecallback: %s -> %s\n", jack_port_name(p), new_name); return 0; } void JackPortManager::RefreshPorts() { m_ports.clear(); if (!m_connected) return; const char **jack_ports = jack_get_ports(m_client, NULL, NULL, 0); if (jack_ports == NULL) return; for (; *jack_ports != NULL; jack_ports++) { const char *name = *jack_ports; Port *p = GetPortByName(name); jack_port_t *jack_port = jack_port_by_name(m_client, name); p->connections = jack_port_get_all_connections(m_client, jack_port); } }