Jack2  1.9.10
JackClientControl.h
00001 /*
00002 Copyright (C) 2003 Paul Davis
00003 Copyright (C) 2004-2008 Grame
00004 
00005 This program is free software; you can redistribute it and/or modify
00006 it under the terms of the GNU Lesser General Public License as published by
00007 the Free Software Foundation; either version 2.1 of the License, or
00008 (at your option) any later version.
00009 
00010 This program is distributed in the hope that it will be useful,
00011 but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 GNU Lesser General Public License for more details.
00014 
00015 You should have received a copy of the GNU Lesser General Public License
00016 along with this program; if not, write to the Free Software
00017 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00018 
00019 */
00020 
00021 #ifndef __JackClientControl__
00022 #define __JackClientControl__
00023 
00024 #include "JackShmMem.h"
00025 #include "JackPort.h"
00026 #include "JackSynchro.h"
00027 #include "JackNotification.h"
00028 #include "JackSession.h"
00029 
00030 namespace Jack
00031 {
00032 
00037 PRE_PACKED_STRUCTURE
00038 struct JackClientControl : public JackShmMemAble
00039 {
00040     char fName[JACK_CLIENT_NAME_SIZE + 1];
00041     bool fCallback[kMaxNotification];
00042     volatile jack_transport_state_t fTransportState;
00043     volatile bool fTransportSync;      /* Will be true when slow-sync cb has to be called */
00044     volatile bool fTransportTimebase;  /* Will be true when timebase cb is called with new_pos on */
00045     int fRefNum;
00046     int fPID;
00047     bool fActive;
00048 
00049     int fSessionID;
00050     char fSessionCommand[JACK_SESSION_COMMAND_SIZE];
00051     jack_session_flags_t fSessionFlags;
00052 
00053     JackClientControl(const char* name, int pid, int refnum, int uuid)
00054     {
00055         Init(name, pid, refnum, uuid);
00056     }
00057 
00058     JackClientControl(const char* name)
00059     {
00060         Init(name, 0, -1, -1);
00061     }
00062 
00063     JackClientControl()
00064     {
00065         Init("", 0, -1, -1);
00066     }
00067 
00068     void Init(const char* name, int pid, int refnum, int uuid)
00069     {
00070         strcpy(fName, name);
00071         for (int i = 0; i < kMaxNotification; i++) {
00072             fCallback[i] = false;
00073         }
00074         // Always activated
00075         fCallback[kAddClient] = true;
00076         fCallback[kRemoveClient] = true;
00077         fCallback[kActivateClient] = true;
00078         fCallback[kLatencyCallback] = true;
00079         // So that driver synchro are correctly setup in "flush" or "normal" mode
00080         fCallback[kStartFreewheelCallback] = true;
00081         fCallback[kStopFreewheelCallback] = true;
00082         fRefNum = refnum;
00083         fPID = pid;
00084         fTransportState = JackTransportStopped;
00085         fTransportSync = false;
00086         fTransportTimebase = false;
00087         fActive = false;
00088 
00089         fSessionID = uuid;
00090     }
00091 
00092 } POST_PACKED_STRUCTURE;
00093 
00094 } // end of namespace
00095 
00096 
00097 #endif