Jack2 1.9.6

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 
00029 namespace Jack
00030 {
00031 
00036 struct JackClientControl : public JackShmMemAble
00037 {
00038     char fName[JACK_CLIENT_NAME_SIZE + 1];
00039     bool fCallback[kMaxNotification];
00040     volatile jack_transport_state_t fTransportState;
00041     volatile bool fTransportSync;      /* Will be true when slow-sync cb has to be called */
00042     volatile bool fTransportTimebase;  /* Will be true when timebase cb is called with new_pos on */
00043     int fRefNum;
00044     int fPID;
00045     bool fActive;
00046 
00047     JackClientControl(const char* name, int pid, int refnum)
00048     {
00049         Init(name, pid, refnum);
00050     }
00051 
00052     JackClientControl(const char* name)
00053     {
00054         Init(name, 0, -1);
00055     }
00056 
00057     JackClientControl()
00058     {
00059         Init("", 0, -1);
00060     }
00061 
00062     void Init(const char* name, int pid, int refnum)
00063     {
00064         strcpy(fName, name);
00065         for (int i = 0; i < kMaxNotification; i++)
00066             fCallback[i] = false;
00067         // Always activated
00068         fCallback[kAddClient] = true;
00069         fCallback[kRemoveClient] = true;
00070         fCallback[kActivateClient] = true;
00071         // So that driver synchro are correctly setup in "flush" or "normal" mode
00072         fCallback[kStartFreewheelCallback] = true;
00073         fCallback[kStopFreewheelCallback] = true;
00074         fRefNum = refnum;
00075         fPID = pid;
00076         fTransportState = JackTransportStopped;
00077         fTransportSync = false;
00078         fTransportTimebase = false;
00079         fActive = false;
00080     }
00081 
00082 } POST_PACKED_STRUCTURE;
00083 
00084 } // end of namespace
00085 
00086 
00087 #endif