/* Copyright (C) 2003 Paul Davis Copyright (C) 2004-2008 Grame This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __JackClientControl__ #define __JackClientControl__ #include "JackShmMem.h" #include "JackPort.h" #include "JackSynchro.h" #include "JackNotification.h" #include "JackSession.h" namespace Jack { /*! \brief Client control possibly in shared memory. */ PRE_PACKED_STRUCTURE struct JackClientControl : public JackShmMemAble { char fName[JACK_CLIENT_NAME_SIZE + 1]; bool fCallback[kMaxNotification]; volatile jack_transport_state_t fTransportState; volatile bool fTransportSync; /* Will be true when slow-sync cb has to be called */ volatile bool fTransportTimebase; /* Will be true when timebase cb is called with new_pos on */ int fRefNum; int fPID; bool fActive; jack_uuid_t fSessionID; char fSessionCommand[JACK_SESSION_COMMAND_SIZE]; jack_session_flags_t fSessionFlags; JackClientControl(const char* name, int pid, int refnum, jack_uuid_t uuid) { Init(name, pid, refnum, uuid); } JackClientControl(const char* name, jack_uuid_t uuid) { Init(name, 0, -1, uuid); } JackClientControl() { Init("", 0, -1, JACK_UUID_EMPTY_INITIALIZER); } void Init(const char* name, int pid, int refnum, jack_uuid_t uuid) { strcpy(fName, name); for (int i = 0; i < kMaxNotification; i++) { fCallback[i] = false; } // Always activated fCallback[kAddClient] = true; fCallback[kRemoveClient] = true; fCallback[kActivateClient] = true; fCallback[kLatencyCallback] = true; // So that driver synchro are correctly setup in "flush" or "normal" mode fCallback[kStartFreewheelCallback] = true; fCallback[kStopFreewheelCallback] = true; fRefNum = refnum; fPID = pid; fTransportState = JackTransportStopped; fTransportSync = false; fTransportTimebase = false; fActive = false; fSessionID = uuid; } } POST_PACKED_STRUCTURE; } // end of namespace #endif