git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2279 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.90
| @@ -20,7 +20,11 @@ Fernando Lopez-Lezcano | |||
| Jackdmp changes log | |||
| --------------------------- | |||
| 2008-05-13 Stephane Letz <letz@grame.fr> | |||
| 2008-05-16 Stephane Letz <letz@grame.fr> | |||
| * Activate now connect to FW driver and start the realtime thread only if clients are actually realtime, that is have setup any of the RT callback. | |||
| 2008-05-14 Stephane Letz <letz@grame.fr> | |||
| * Fix JackEngine::Close to only delete "loadable" clients. | |||
| @@ -80,7 +80,7 @@ class JackClientChannelInterface | |||
| virtual void ClientClose(int refnum, int* result) | |||
| {} | |||
| virtual void ClientActivate(int refnum, int* result) | |||
| virtual void ClientActivate(int refnum, int state, int* result) | |||
| {} | |||
| virtual void ClientDeactivate(int refnum, int* result) | |||
| {} | |||
| @@ -35,6 +35,8 @@ using namespace std; | |||
| namespace Jack | |||
| { | |||
| #define IsRealTime() ((fProcess != NULL) | (fThreadFun != NULL) | (fSync != NULL) | (fTimebase != NULL)) | |||
| JackClient::JackClient() | |||
| {} | |||
| @@ -52,7 +54,9 @@ JackClient::JackClient(JackSynchro** table) | |||
| fFreewheel = NULL; | |||
| fPortRegistration = NULL; | |||
| fPortConnect = NULL; | |||
| fTimebase = NULL; | |||
| fSync = NULL; | |||
| fThreadFun = NULL; | |||
| fProcessArg = NULL; | |||
| fGraphOrderArg = NULL; | |||
| fXrunArg = NULL; | |||
| @@ -64,7 +68,7 @@ JackClient::JackClient(JackSynchro** table) | |||
| fPortRegistrationArg = NULL; | |||
| fPortConnectArg = NULL; | |||
| fSyncArg = NULL; | |||
| fThreadFun = NULL; | |||
| fTimebaseArg = NULL; | |||
| fThreadFunArg = NULL; | |||
| } | |||
| @@ -232,25 +236,17 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync, | |||
| \brief We need to start thread before activating in the server, otherwise the FW driver | |||
| connected to the client may not be activated. | |||
| */ | |||
| int JackClient::Activate() | |||
| { | |||
| jack_log("JackClient::Activate"); | |||
| if (IsActive()) | |||
| return 0; | |||
| /* TODO : solve WIN32 thread Kill issue | |||
| #ifdef WIN32 | |||
| // Done first so that the RT thread then access an allocated synchro | |||
| if (!fSynchroTable[GetClientControl()->fRefNum]->Connect(GetClientControl()->fName)) { | |||
| jack_error("Cannot ConnectSemaphore %s client", GetClientControl()->fName); | |||
| // RT thread is started only when needed... | |||
| if (IsRealTime()) { | |||
| if (StartThread() < 0) | |||
| return -1; | |||
| } | |||
| #endif | |||
| */ | |||
| if (StartThread() < 0) | |||
| return -1; | |||
| } | |||
| /* | |||
| Insertion of client in the graph will cause a kGraphOrderCallback notification | |||
| @@ -263,7 +259,8 @@ int JackClient::Activate() | |||
| GetClientControl()->fTransportTimebase = true; | |||
| int result = -1; | |||
| fChannel->ClientActivate(GetClientControl()->fRefNum, &result); | |||
| GetClientControl()->fCallback[kRealTimeCallback] = IsRealTime(); | |||
| fChannel->ClientActivate(GetClientControl()->fRefNum, IsRealTime(), &result); | |||
| return result; | |||
| } | |||
| @@ -288,15 +285,10 @@ int JackClient::Deactivate() | |||
| jack_log("JackClient::Deactivate res = %ld ", result); | |||
| // We need to wait for the new engine cycle before stopping the RT thread, but this is done by ClientDeactivate | |||
| /* TODO : solve WIN32 thread Kill issue | |||
| #ifdef WIN32 | |||
| fSynchroTable[GetClientControl()->fRefNum]->Disconnect(); | |||
| fThread->Stop(); | |||
| #else | |||
| fThread->Kill(); | |||
| #endif | |||
| */ | |||
| fThread->Kill(); | |||
| // RT thread is stopped only when needed... | |||
| if (IsRealTime()) { | |||
| fThread->Kill(); | |||
| } | |||
| return result; | |||
| } | |||
| @@ -67,9 +67,9 @@ namespace Jack | |||
| #define ALL_CLIENTS -1 // for notification | |||
| #if defined(__ppc64__) || defined(__x86_64__) | |||
| #define JACK_PROTOCOL_VERSION 4 | |||
| #define JACK_PROTOCOL_VERSION 5 | |||
| #else | |||
| #define JACK_PROTOCOL_VERSION 3 | |||
| #define JACK_PROTOCOL_VERSION 4 | |||
| #endif | |||
| #define SOCKET_TIME_OUT 5 // in sec | |||
| @@ -596,14 +596,15 @@ int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wai | |||
| return 0; | |||
| } | |||
| int JackEngine::ClientActivate(int refnum) | |||
| int JackEngine::ClientActivate(int refnum, bool state) | |||
| { | |||
| JackClientInterface* client = fClientTable[refnum]; | |||
| assert(fClientTable[refnum]); | |||
| jack_log("JackEngine::ClientActivate ref = %ld name = %s", refnum, client->GetClientControl()->fName); | |||
| fGraphManager->Activate(refnum); | |||
| if (state) | |||
| fGraphManager->Activate(refnum); | |||
| // Wait for graph state change to be effective | |||
| if (!fSignal->TimedWait(fEngineControl->fTimeOutUsecs * 10)) { | |||
| jack_error("JackEngine::ClientActivate wait error ref = %ld name = %s", refnum, client->GetClientControl()->fName); | |||
| @@ -86,7 +86,7 @@ class JackEngine | |||
| virtual int ClientExternalClose(int refnum); | |||
| virtual int ClientInternalClose(int refnum, bool wait); | |||
| virtual int ClientActivate(int refnum); | |||
| virtual int ClientActivate(int refnum, bool state); | |||
| virtual int ClientDeactivate(int refnum); | |||
| // Internal client management | |||
| @@ -63,9 +63,9 @@ class JackInternalClientChannel : public JackClientChannelInterface | |||
| *result = fEngine->ClientInternalClose(refnum, true); | |||
| } | |||
| void ClientActivate(int refnum, int* result) | |||
| void ClientActivate(int refnum, int state, int* result) | |||
| { | |||
| *result = fEngine->ClientActivate(refnum); | |||
| *result = fEngine->ClientActivate(refnum, state); | |||
| } | |||
| void ClientDeactivate(int refnum, int* result) | |||
| { | |||
| @@ -107,15 +107,6 @@ int JackLibClient::Open(const char* server_name, const char* name, jack_options_ | |||
| SetupDriverSync(false); | |||
| /* TODO : solve WIN32 thread Kill issue | |||
| #ifndef WIN32 | |||
| // Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process | |||
| if (!fSynchroTable[fClientControl->fRefNum]->Connect(name)) { | |||
| jack_error("Cannot ConnectSemaphore %s client", name); | |||
| goto error; | |||
| } | |||
| #endif | |||
| */ | |||
| // Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process | |||
| if (!fSynchroTable[GetClientControl()->fRefNum]->Connect(name_res, fServerName)) { | |||
| jack_error("Cannot ConnectSemaphore %s client", name_res); | |||
| @@ -84,10 +84,10 @@ class JackLockedEngine : public JackEngine, public JackLockAble | |||
| return fEngine->ClientInternalClose(refnum, wait); | |||
| } | |||
| int ClientActivate(int refnum) | |||
| int ClientActivate(int refnum, bool state) | |||
| { | |||
| JackLock lock(this); | |||
| return fEngine->ClientActivate(refnum); | |||
| return fEngine->ClientActivate(refnum, state); | |||
| } | |||
| int ClientDeactivate(int refnum) | |||
| { | |||
| @@ -35,7 +35,8 @@ enum NotificationType { | |||
| kPortRegistrationOffCallback = 9, | |||
| kPortConnectCallback = 10, | |||
| kPortDisconnectCallback = 11, | |||
| kDeadClient = 12, | |||
| kRealTimeCallback = 12, | |||
| kDeadClient = 13, | |||
| kMaxNotification | |||
| }; | |||
| @@ -287,21 +287,24 @@ struct JackActivateRequest : public JackRequest | |||
| { | |||
| int fRefNum; | |||
| int fState; | |||
| JackActivateRequest() | |||
| {} | |||
| JackActivateRequest(int refnum): JackRequest(JackRequest::kActivateClient), fRefNum(refnum) | |||
| JackActivateRequest(int refnum, int state): JackRequest(JackRequest::kActivateClient), fRefNum(refnum), fState(state) | |||
| {} | |||
| int Read(JackChannelTransaction* trans) | |||
| { | |||
| return trans->Read(&fRefNum, sizeof(int)); | |||
| CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
| return trans->Read(&fState, sizeof(int)); | |||
| } | |||
| int Write(JackChannelTransaction* trans) | |||
| { | |||
| CheckRes(JackRequest::Write(trans)); | |||
| return trans->Write(&fRefNum, sizeof(int)); | |||
| CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
| return trans->Write(&fState, sizeof(int)); | |||
| } | |||
| }; | |||
| @@ -165,9 +165,9 @@ void JackSocketClientChannel::ClientClose(int refnum, int* result) | |||
| ServerSyncCall(&req, &res, result); | |||
| } | |||
| void JackSocketClientChannel::ClientActivate(int refnum, int* result) | |||
| void JackSocketClientChannel::ClientActivate(int refnum, int state, int* result) | |||
| { | |||
| JackActivateRequest req(refnum); | |||
| JackActivateRequest req(refnum, state); | |||
| JackResult res; | |||
| ServerSyncCall(&req, &res, result); | |||
| } | |||
| @@ -63,7 +63,7 @@ class JackSocketClientChannel : public JackClientChannelInterface, public JackRu | |||
| void ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result); | |||
| void ClientClose(int refnum, int* result); | |||
| void ClientActivate(int refnum, int* result); | |||
| void ClientActivate(int refnum, int state, int* result); | |||
| void ClientDeactivate(int refnum, int* result); | |||
| void PortRegister(int refnum, const char* name, const char* type, unsigned int flags, unsigned int buffer_size, unsigned int* port_index, int* result); | |||
| @@ -190,7 +190,7 @@ int JackSocketServerChannel::HandleRequest(int fd) | |||
| JackResult res; | |||
| jack_log("JackRequest::ActivateClient"); | |||
| if (req.Read(socket) == 0) | |||
| res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum); | |||
| res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum, ref.fState); | |||
| if (res.Write(socket) < 0) | |||
| jack_error("JackRequest::ActivateClient write error ref = %d", req.fRefNum); | |||
| break; | |||
| @@ -101,10 +101,11 @@ void JackTransportEngine::MakeAllStartingLocating(JackClientInterface** table) | |||
| for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) { | |||
| JackClientInterface* client = table[i]; | |||
| if (client) { | |||
| // Inactive clients don't have their process function called at all, so they must appear as already "rolling" for the transport.... | |||
| client->GetClientControl()->fTransportState = (client->GetClientControl()->fActive) ? JackTransportStarting : JackTransportRolling; | |||
| client->GetClientControl()->fTransportSync = true; | |||
| client->GetClientControl()->fTransportTimebase = true; | |||
| JackClientControl* control = client->GetClientControl(); | |||
| // Inactive clients don't have their process function called at all, so they must appear as already "rolling" for the transport.... | |||
| control->fTransportState = (control->fActive && control->fCallback[kRealTimeCallback]) ? JackTransportStarting : JackTransportRolling; | |||
| control->fTransportSync = true; | |||
| control->fTransportTimebase = true; | |||
| jack_log("MakeAllStartingLocating ref = %ld", i); | |||
| } | |||
| } | |||
| @@ -116,9 +117,10 @@ void JackTransportEngine::MakeAllStopping(JackClientInterface** table) | |||
| for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) { | |||
| JackClientInterface* client = table[i]; | |||
| if (client) { | |||
| client->GetClientControl()->fTransportState = JackTransportStopped; | |||
| client->GetClientControl()->fTransportSync = false; | |||
| client->GetClientControl()->fTransportTimebase = false; | |||
| JackClientControl* control = client->GetClientControl(); | |||
| control->fTransportState = JackTransportStopped; | |||
| control->fTransportSync = false; | |||
| control->fTransportTimebase = false; | |||
| jack_log("MakeAllStopping ref = %ld", i); | |||
| } | |||
| } | |||
| @@ -130,8 +132,9 @@ void JackTransportEngine::MakeAllLocating(JackClientInterface** table) | |||
| for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) { | |||
| JackClientInterface* client = table[i]; | |||
| if (client) { | |||
| client->GetClientControl()->fTransportState = JackTransportStopped; | |||
| client->GetClientControl()->fTransportTimebase = true; | |||
| JackClientControl* control = client->GetClientControl(); | |||
| control->fTransportState = JackTransportStopped; | |||
| control->fTransportTimebase = true; | |||
| jack_log("MakeAllLocating ref = %ld", i); | |||
| } | |||
| } | |||
| @@ -155,7 +158,7 @@ void JackTransportEngine::CycleEnd(JackClientInterface** table, jack_nframes_t f | |||
| transport_command_t cmd = fTransportCmd; | |||
| if (cmd != fPreviousCmd) { | |||
| fPreviousCmd = cmd; | |||
| jack_log("transport command: %s", (cmd == TransportCommandStart ? "START" : "STOP")); | |||
| jack_log("transport command: %s", (cmd == TransportCommandStart ? "Transport start" : "Transport stop")); | |||
| } else { | |||
| cmd = TransportCommandNone; | |||
| } | |||
| @@ -59,12 +59,12 @@ rpc_type server_rpc_jack_client_close(mach_port_t private_port, int refnum, int* | |||
| return KERN_SUCCESS; | |||
| } | |||
| rpc_type server_rpc_jack_client_activate(mach_port_t private_port, int refnum, int* result) | |||
| rpc_type server_rpc_jack_client_activate(mach_port_t private_port, int refnum, int state, int* result) | |||
| { | |||
| jack_log("rpc_jack_client_activate"); | |||
| JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port]; | |||
| assert(channel); | |||
| *result = channel->GetEngine()->ClientActivate(refnum); | |||
| *result = channel->GetEngine()->ClientActivate(refnum, state); | |||
| return KERN_SUCCESS; | |||
| } | |||
| @@ -152,9 +152,9 @@ void JackMachClientChannel::ClientClose(int refnum, int* result) | |||
| } | |||
| } | |||
| void JackMachClientChannel::ClientActivate(int refnum, int* result) | |||
| void JackMachClientChannel::ClientActivate(int refnum, int state, int* result) | |||
| { | |||
| kern_return_t res = rpc_jack_client_activate(fPrivatePort, refnum, result); | |||
| kern_return_t res = rpc_jack_client_activate(fPrivatePort, refnum, state, result); | |||
| if (res != KERN_SUCCESS) { | |||
| *result = -1; | |||
| jack_error("JackMachClientChannel::ClientActivate err = %s", mach_error_string(res)); | |||
| @@ -60,7 +60,7 @@ class JackMachClientChannel : public JackClientChannelInterface, public JackRunn | |||
| void ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result); | |||
| void ClientClose(int refnum, int* result); | |||
| void ClientActivate(int refnum, int* result); | |||
| void ClientActivate(int refnum, int state, int* result); | |||
| void ClientDeactivate(int refnum, int* result); | |||
| void PortRegister(int refnum, const char* name, const char* type, unsigned int flags, unsigned int buffer_size, unsigned int* port_index, int* result); | |||
| @@ -1000,7 +1000,7 @@ | |||
| 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackGlobals.cpp; path = ../common/JackGlobals.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 4B35C4250D4731D1000DE7AE /* jackdmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jackdmp; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B35C4830D4731D1000DE7AE /* Jackmp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackmp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackdmp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackservermp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B35C5080D4731D1000DE7AE /* Jackwrapper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackwrapper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B35C5140D4731D1000DE7AE /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B35C5200D4731D1000DE7AE /* jack_midisine */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midisine; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| @@ -1034,10 +1034,10 @@ | |||
| 4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMacEngineRPC.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 4B44FAE50C7598370033A72C /* JackServerLaunch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackServerLaunch.cpp; path = ../common/JackServerLaunch.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 4B464301076CAC7700E5077C /* Jack-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "Jack-Info.plist"; sourceTree = SOURCE_ROOT; }; | |||
| 4B51752F0D8FE69300961F37 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B51752F0D8FE69300961F37 /* jack_thread_wait1 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait1; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B56880F08B5C8620022B32D /* JackFifo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackFifo.cpp; path = ../common/JackFifo.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 4B56881008B5C8620022B32D /* JackFifo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackFifo.h; path = ../common/JackFifo.h; sourceTree = SOURCE_ROOT; }; | |||
| 4B57F5950D72C27900B4E719 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B57F5950D72C27900B4E719 /* jack_thread_wait1 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait1; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B57F5BA0D72C2B000B4E719 /* tw1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tw1.c; path = "../example-clients/tw1.c"; sourceTree = SOURCE_ROOT; }; | |||
| 4B5A1BBB0CD1CB9E0005BF74 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4B5A1BBD0CD1CC110005BF74 /* midiseq.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = midiseq.c; path = "../example-clients/midiseq.c"; sourceTree = SOURCE_ROOT; }; | |||
| @@ -1105,7 +1105,7 @@ | |||
| 4BA692B20CBE4C2D00EAD520 /* ipload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipload.c; path = "../example-clients/ipload.c"; sourceTree = SOURCE_ROOT; }; | |||
| 4BA692D40CBE4C9000EAD520 /* jack_unload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_unload; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4BA692D60CBE4CC600EAD520 /* ipunload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipunload.c; path = "../example-clients/ipunload.c"; sourceTree = SOURCE_ROOT; }; | |||
| 4BA7FEC30D8E76270017FF73 /* jack_lsp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_lsp; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4BA7FEC30D8E76270017FF73 /* jack_server_control */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_server_control; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 4BA7FEC80D8E76650017FF73 /* control.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = control.c; path = "../example-clients/control.c"; sourceTree = SOURCE_ROOT; }; | |||
| 4BAB95B60B9E20B800A0C723 /* JackPortType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackPortType.cpp; path = ../common/JackPortType.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 4BAB95B70B9E20B800A0C723 /* JackPortType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackPortType.h; path = ../common/JackPortType.h; sourceTree = SOURCE_ROOT; }; | |||
| @@ -1723,7 +1723,7 @@ | |||
| 4B5A1BDA0CD1CCE10005BF74 /* jack_midisine */, | |||
| 4B35C4250D4731D1000DE7AE /* jackdmp */, | |||
| 4B35C4830D4731D1000DE7AE /* Jackmp.framework */, | |||
| 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */, | |||
| 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */, | |||
| 4B35C5080D4731D1000DE7AE /* Jackwrapper.framework */, | |||
| 4B35C5140D4731D1000DE7AE /* jack_midiseq */, | |||
| 4B35C5200D4731D1000DE7AE /* jack_midisine */, | |||
| @@ -1752,9 +1752,9 @@ | |||
| 4B0A292D0D52108E002EFF74 /* jack_thread_wait */, | |||
| 4B0A296D0D5231DC002EFF74 /* jack_mp_thread_wait */, | |||
| 4B0A2A650D524AB2002EFF74 /* jack_mp_thread_wait */, | |||
| 4B57F5950D72C27900B4E719 /* jack_thread_wait */, | |||
| 4BA7FEC30D8E76270017FF73 /* jack_lsp */, | |||
| 4B51752F0D8FE69300961F37 /* jack_thread_wait */, | |||
| 4B57F5950D72C27900B4E719 /* jack_thread_wait1 */, | |||
| 4BA7FEC30D8E76270017FF73 /* jack_server_control */, | |||
| 4B51752F0D8FE69300961F37 /* jack_thread_wait1 */, | |||
| ); | |||
| name = Products; | |||
| sourceTree = "<group>"; | |||
| @@ -2875,7 +2875,7 @@ | |||
| ); | |||
| name = "Jackservermp.framework 64 bits"; | |||
| productName = Jack; | |||
| productReference = 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */; | |||
| productReference = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; | |||
| productType = "com.apple.product-type.framework"; | |||
| }; | |||
| 4B35C4FE0D4731D1000DE7AE /* Jackwrapper.framework 64 bits */ = { | |||
| @@ -3342,7 +3342,7 @@ | |||
| name = "jack_thread_wait1 64 bits"; | |||
| productInstallPath = /usr/local/bin; | |||
| productName = testSem; | |||
| productReference = 4B51752F0D8FE69300961F37 /* jack_thread_wait */; | |||
| productReference = 4B51752F0D8FE69300961F37 /* jack_thread_wait1 */; | |||
| productType = "com.apple.product-type.tool"; | |||
| }; | |||
| 4B57F58B0D72C27900B4E719 /* jack_thread_wait1 */ = { | |||
| @@ -3361,7 +3361,7 @@ | |||
| name = jack_thread_wait1; | |||
| productInstallPath = /usr/local/bin; | |||
| productName = testSem; | |||
| productReference = 4B57F5950D72C27900B4E719 /* jack_thread_wait */; | |||
| productReference = 4B57F5950D72C27900B4E719 /* jack_thread_wait1 */; | |||
| productType = "com.apple.product-type.tool"; | |||
| }; | |||
| 4B5A1BB10CD1CB9E0005BF74 /* jack_midiseq Universal */ = { | |||
| @@ -3793,7 +3793,7 @@ | |||
| name = "jack_server_control Universal"; | |||
| productInstallPath = /usr/local/bin; | |||
| productName = jack_lsp; | |||
| productReference = 4BA7FEC30D8E76270017FF73 /* jack_lsp */; | |||
| productReference = 4BA7FEC30D8E76270017FF73 /* jack_server_control */; | |||
| productType = "com.apple.product-type.tool"; | |||
| }; | |||
| 4BD623ED0CBCF0F000DE782F /* inprocess */ = { | |||
| @@ -1,7 +1,7 @@ | |||
| /* | |||
| * IDENTIFICATION: | |||
| * stub generated Mon Jan 28 15:04:07 2008 | |||
| * with a MiG generated Sun Sep 23 15:44:06 PDT 2007 by root@hoosier.apple.com | |||
| * stub generated Fri May 16 09:21:55 2008 | |||
| * with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local | |||
| * OPTIONS: | |||
| */ | |||
| @@ -1,7 +1,7 @@ | |||
| /* | |||
| * IDENTIFICATION: | |||
| * stub generated Mon Jan 28 15:04:07 2008 | |||
| * with a MiG generated Sun Sep 23 15:44:06 PDT 2007 by root@hoosier.apple.com | |||
| * stub generated Fri May 16 09:21:55 2008 | |||
| * with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local | |||
| * OPTIONS: | |||
| */ | |||
| #define __MIG_check__Reply__JackRPCClient_subsystem__ 1 | |||
| @@ -57,6 +57,7 @@ routine rpc_jack_client_close( | |||
| routine rpc_jack_client_activate( | |||
| server_port : mach_port_t; | |||
| refnum : int; | |||
| state : int; | |||
| out result : int); | |||
| routine rpc_jack_client_deactivate( | |||
| @@ -100,6 +100,7 @@ kern_return_t rpc_jack_client_activate | |||
| ( | |||
| mach_port_t server_port, | |||
| int refnum, | |||
| int state, | |||
| int *result | |||
| ); | |||
| @@ -404,6 +405,7 @@ __END_DECLS | |||
| mach_msg_header_t Head; | |||
| NDR_record_t NDR; | |||
| int refnum; | |||
| int state; | |||
| } __Request__rpc_jack_client_activate_t; | |||
| #ifdef __MigPackStructs | |||
| #pragma pack() | |||
| @@ -1,7 +1,7 @@ | |||
| /* | |||
| * IDENTIFICATION: | |||
| * stub generated Mon Jan 28 15:04:07 2008 | |||
| * with a MiG generated Sun Sep 23 15:44:06 PDT 2007 by root@hoosier.apple.com | |||
| * stub generated Fri May 16 09:21:56 2008 | |||
| * with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local | |||
| * OPTIONS: | |||
| */ | |||
| @@ -149,6 +149,7 @@ | |||
| mach_msg_header_t Head; | |||
| NDR_record_t NDR; | |||
| int refnum; | |||
| int state; | |||
| } __Request__rpc_jack_client_activate_t; | |||
| #ifdef __MigPackStructs | |||
| #pragma pack() | |||
| @@ -1463,6 +1464,26 @@ mig_internal novalue _Xrpc_jack_client_close | |||
| #endif /* defined(__NDR_convert__*__defined) */ | |||
| #endif /* __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
| #ifndef __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #if defined(__NDR_convert__int_rep__JackRPCEngine__int__defined) | |||
| #define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__int_rep__JackRPCEngine__int((int *)(a), f) | |||
| #elif defined(__NDR_convert__int_rep__int__defined) | |||
| #define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__int_rep__int((int *)(a), f) | |||
| #elif defined(__NDR_convert__int_rep__JackRPCEngine__int32_t__defined) | |||
| #define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__int_rep__JackRPCEngine__int32_t((int32_t *)(a), f) | |||
| #elif defined(__NDR_convert__int_rep__int32_t__defined) | |||
| #define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__int_rep__int32_t((int32_t *)(a), f) | |||
| #endif /* defined(__NDR_convert__*__defined) */ | |||
| #endif /* __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
| #ifndef __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined | |||
| #if defined(__NDR_convert__char_rep__JackRPCEngine__int__defined) | |||
| #define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined | |||
| @@ -1483,6 +1504,26 @@ mig_internal novalue _Xrpc_jack_client_close | |||
| #endif /* defined(__NDR_convert__*__defined) */ | |||
| #endif /* __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
| #ifndef __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #if defined(__NDR_convert__char_rep__JackRPCEngine__int__defined) | |||
| #define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__char_rep__JackRPCEngine__int((int *)(a), f) | |||
| #elif defined(__NDR_convert__char_rep__int__defined) | |||
| #define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__char_rep__int((int *)(a), f) | |||
| #elif defined(__NDR_convert__char_rep__JackRPCEngine__int32_t__defined) | |||
| #define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__char_rep__JackRPCEngine__int32_t((int32_t *)(a), f) | |||
| #elif defined(__NDR_convert__char_rep__int32_t__defined) | |||
| #define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__char_rep__int32_t((int32_t *)(a), f) | |||
| #endif /* defined(__NDR_convert__*__defined) */ | |||
| #endif /* __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
| #ifndef __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined | |||
| #if defined(__NDR_convert__float_rep__JackRPCEngine__int__defined) | |||
| #define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined | |||
| @@ -1503,6 +1544,26 @@ mig_internal novalue _Xrpc_jack_client_close | |||
| #endif /* defined(__NDR_convert__*__defined) */ | |||
| #endif /* __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
| #ifndef __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #if defined(__NDR_convert__float_rep__JackRPCEngine__int__defined) | |||
| #define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__float_rep__JackRPCEngine__int((int *)(a), f) | |||
| #elif defined(__NDR_convert__float_rep__int__defined) | |||
| #define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__float_rep__int((int *)(a), f) | |||
| #elif defined(__NDR_convert__float_rep__JackRPCEngine__int32_t__defined) | |||
| #define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__float_rep__JackRPCEngine__int32_t((int32_t *)(a), f) | |||
| #elif defined(__NDR_convert__float_rep__int32_t__defined) | |||
| #define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined | |||
| #define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
| __NDR_convert__float_rep__int32_t((int32_t *)(a), f) | |||
| #endif /* defined(__NDR_convert__*__defined) */ | |||
| #endif /* __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
| mig_internal kern_return_t __MIG_check__Request__rpc_jack_client_activate_t(__attribute__((__unused__)) __Request__rpc_jack_client_activate_t *In0P) | |||
| { | |||
| @@ -1514,27 +1575,39 @@ mig_internal kern_return_t __MIG_check__Request__rpc_jack_client_activate_t(__at | |||
| return MIG_BAD_ARGUMENTS; | |||
| #endif /* __MigTypeCheck */ | |||
| #if defined(__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
| #if defined(__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum__defined) || \ | |||
| defined(__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
| if (In0P->NDR.int_rep != NDR_record.int_rep) { | |||
| #if defined(__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
| __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum(&In0P->refnum, In0P->NDR.int_rep); | |||
| #endif /* __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
| #if defined(__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
| __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state(&In0P->state, In0P->NDR.int_rep); | |||
| #endif /* __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
| } | |||
| #endif /* defined(__NDR_convert__int_rep...) */ | |||
| #if defined(__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
| #if defined(__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined) || \ | |||
| defined(__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
| if (In0P->NDR.char_rep != NDR_record.char_rep) { | |||
| #if defined(__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
| __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum(&In0P->refnum, In0P->NDR.char_rep); | |||
| #endif /* __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
| #if defined(__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
| __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state(&In0P->state, In0P->NDR.char_rep); | |||
| #endif /* __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
| } | |||
| #endif /* defined(__NDR_convert__char_rep...) */ | |||
| #if defined(__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
| #if defined(__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined) || \ | |||
| defined(__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
| if (In0P->NDR.float_rep != NDR_record.float_rep) { | |||
| #if defined(__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
| __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum(&In0P->refnum, In0P->NDR.float_rep); | |||
| #endif /* __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
| #if defined(__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
| __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state(&In0P->state, In0P->NDR.float_rep); | |||
| #endif /* __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
| } | |||
| #endif /* defined(__NDR_convert__float_rep...) */ | |||
| @@ -1555,6 +1628,7 @@ kern_return_t server_rpc_jack_client_activate | |||
| ( | |||
| mach_port_t server_port, | |||
| int refnum, | |||
| int state, | |||
| int *result | |||
| ); | |||
| @@ -1570,6 +1644,7 @@ mig_internal novalue _Xrpc_jack_client_activate | |||
| mach_msg_header_t Head; | |||
| NDR_record_t NDR; | |||
| int refnum; | |||
| int state; | |||
| mach_msg_trailer_t trailer; | |||
| } Request; | |||
| #ifdef __MigPackStructs | |||
| @@ -1601,7 +1676,7 @@ mig_internal novalue _Xrpc_jack_client_activate | |||
| { MIG_RETURN_ERROR(OutP, check_result); } | |||
| #endif /* defined(__MIG_check__Request__rpc_jack_client_activate_t__defined) */ | |||
| OutP->RetCode = server_rpc_jack_client_activate(In0P->Head.msgh_request_port, In0P->refnum, &OutP->result); | |||
| OutP->RetCode = server_rpc_jack_client_activate(In0P->Head.msgh_request_port, In0P->refnum, In0P->state, &OutP->result); | |||
| if (OutP->RetCode != KERN_SUCCESS) { | |||
| MIG_RETURN_ERROR(OutP, OutP->RetCode); | |||
| } | |||
| @@ -6129,7 +6204,7 @@ const struct server_JackRPCEngine_subsystem { | |||
| { (mig_impl_routine_t) 0, | |||
| (mig_stub_routine_t) _Xrpc_jack_client_close, 3, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_close_t)}, | |||
| { (mig_impl_routine_t) 0, | |||
| (mig_stub_routine_t) _Xrpc_jack_client_activate, 3, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_activate_t)}, | |||
| (mig_stub_routine_t) _Xrpc_jack_client_activate, 4, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_activate_t)}, | |||
| { (mig_impl_routine_t) 0, | |||
| (mig_stub_routine_t) _Xrpc_jack_client_deactivate, 3, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_deactivate_t)}, | |||
| { (mig_impl_routine_t) 0, | |||
| @@ -1,7 +1,7 @@ | |||
| /* | |||
| * IDENTIFICATION: | |||
| * stub generated Mon Jan 28 15:04:07 2008 | |||
| * with a MiG generated Sun Sep 23 15:44:06 PDT 2007 by root@hoosier.apple.com | |||
| * stub generated Fri May 16 09:21:56 2008 | |||
| * with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local | |||
| * OPTIONS: | |||
| */ | |||
| #define __MIG_check__Reply__JackRPCEngine_subsystem__ 1 | |||
| @@ -1425,6 +1425,7 @@ mig_external kern_return_t rpc_jack_client_activate | |||
| ( | |||
| mach_port_t server_port, | |||
| int refnum, | |||
| int state, | |||
| int *result | |||
| ) | |||
| { | |||
| @@ -1436,6 +1437,7 @@ mig_external kern_return_t rpc_jack_client_activate | |||
| mach_msg_header_t Head; | |||
| NDR_record_t NDR; | |||
| int refnum; | |||
| int state; | |||
| } Request; | |||
| #ifdef __MigPackStructs | |||
| #pragma pack() | |||
| @@ -1495,6 +1497,8 @@ mig_external kern_return_t rpc_jack_client_activate | |||
| InP->refnum = refnum; | |||
| InP->state = state; | |||
| InP->Head.msgh_bits = | |||
| MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE); | |||
| /* msgh_size passed as argument */ | |||
| @@ -22,7 +22,7 @@ | |||
| #include <stdlib.h> | |||
| #include <stdio.h> | |||
| #include <math.h> | |||
| #include <math.h> | |||
| #include <jack/jack.h> | |||
| #ifdef WIN32 | |||
| #define M_PI 3.141562653 | |||
| @@ -181,8 +181,7 @@ static int jack_callback (jack_nframes_t nframes, void *arg) | |||
| int main (int ac, char *av []) | |||
| { | |||
| int i, k; | |||
| const char** ports; | |||
| const char** ports; | |||
| if ((jack_handle = jack_client_new ("jdelay")) == 0) | |||
| { | |||
| @@ -168,9 +168,9 @@ void JackWinNamedPipeClientChannel::ClientClose(int refnum, int* result) | |||
| ServerSyncCall(&req, &res, result); | |||
| } | |||
| void JackWinNamedPipeClientChannel::ClientActivate(int refnum, int* result) | |||
| void JackWinNamedPipeClientChannel::ClientActivate(int refnum, int state, int* result) | |||
| { | |||
| JackActivateRequest req(refnum); | |||
| JackActivateRequest req(refnum, state); | |||
| JackResult res; | |||
| ServerSyncCall(&req, &res, result); | |||
| } | |||
| @@ -62,7 +62,7 @@ class JackWinNamedPipeClientChannel : public JackClientChannelInterface, public | |||
| void ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result); | |||
| void ClientClose(int refnum, int* result); | |||
| void ClientActivate(int refnum, int* result); | |||
| void ClientActivate(int refnum, int state, int* result); | |||
| void ClientDeactivate(int refnum, int* result); | |||
| void PortRegister(int refnum, const char* name, const char* type, unsigned int flags, unsigned int buffer_size, unsigned int* port_index, int* result); | |||
| @@ -144,7 +144,7 @@ int JackClientPipeThread::HandleRequest() | |||
| JackResult res; | |||
| jack_log("JackRequest::ActivateClient"); | |||
| if (req.Read(fPipe) == 0) | |||
| res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum); | |||
| res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum, req.fState); | |||
| res.Write(fPipe); | |||
| break; | |||
| } | |||