21 #ifndef __JackDriver__    22 #define __JackDriver__    25 #include "JackClientInterface.h"    26 #include "JackConstants.h"    27 #include "JackPlatformPlug.h"    28 #include "JackClientControl.h"    34 class JackLockedEngine;
    35 class JackGraphManager;
    36 struct JackEngineControl;
    37 class JackSlaveDriverInterface;
    53         virtual int Open() = 0;
    55         virtual int Open(jack_nframes_t buffer_size,
    56                          jack_nframes_t samplerate,
    62                          const char* capture_driver_name,
    63                          const char* playback_driver_name,
    64                          jack_nframes_t capture_latency,
    65                          jack_nframes_t playback_latency) = 0;
    67         virtual int Attach() = 0;
    68         virtual int Detach() = 0;
    70         virtual int Read() = 0;
    71         virtual int Write() = 0;
    73         virtual int Start() = 0;
    74         virtual int Stop() = 0;
    76         virtual bool IsFixedBufferSize() = 0;
    77         virtual int SetBufferSize(jack_nframes_t buffer_size) = 0;
    78         virtual int SetSampleRate(jack_nframes_t sample_rate) = 0;
    80         virtual int Process() = 0;
    82         virtual void SetMaster(
bool onoff) = 0;
    83         virtual bool GetMaster() = 0;
    88         virtual std::list<JackDriverInterface*> GetSlaves() = 0;
    91         virtual int ProcessReadSlaves() = 0;
    92         virtual int ProcessWriteSlaves() = 0;
    95         virtual int ProcessRead() = 0;
    96         virtual int ProcessWrite() = 0;
    99         virtual int ProcessReadSync() = 0;
   100         virtual int ProcessWriteSync() = 0;
   103         virtual int ProcessReadAsync() = 0;
   104         virtual int ProcessWriteAsync() = 0;
   106         virtual bool IsRealTime() 
const = 0;
   107         virtual bool IsRunning() 
const = 0;
   121 #define CaptureDriverFlags  static_cast<JackPortFlags>(JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal)   122 #define PlaybackDriverFlags static_cast<JackPortFlags>(JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal)   123 #define MonitorDriverFlags static_cast<JackPortFlags>(JackPortIsOutput)   125 typedef std::list<std::pair<std::string, std::pair<std::string, std::string> > > driver_connections_list_t; 
   132         char fCaptureDriverName[JACK_CLIENT_NAME_SIZE+1];
   133         char fPlaybackDriverName[JACK_CLIENT_NAME_SIZE+1];
   134         char fAliasName[JACK_CLIENT_NAME_SIZE+1];
   136         jack_nframes_t fCaptureLatency;
   137         jack_nframes_t fPlaybackLatency;
   139         int fCaptureChannels;
   140         int fPlaybackChannels;
   142         jack_time_t fBeginDateUst;
   143         jack_time_t fEndDateUst;
   153         std::list<JackDriverInterface*> fSlaveList;
   157         bool fWithMonitorPorts;
   161         jack_port_id_t fCapturePortList[DRIVER_PORT_NUM];
   162         jack_port_id_t fPlaybackPortList[DRIVER_PORT_NUM];
   163         jack_port_id_t fMonitorPortList[DRIVER_PORT_NUM];
   165         driver_connections_list_t fConnections;         
   168         void CycleTakeBeginTime();
   169         void CycleTakeEndTime();
   171         void SetupDriverSync(
int ref, 
bool freewheel);
   173         void NotifyXRun(jack_time_t callback_usecs, 
float delayed_usecs);   
   174         void NotifyBufferSize(jack_nframes_t buffer_size);                  
   175         void NotifySampleRate(jack_nframes_t sample_rate);                  
   176         void NotifyFailure(
int code, 
const char* reason);                   
   178         virtual void SaveConnections(
int alias);
   179         virtual void LoadConnections(
int alias, 
bool full_name = 
true);
   180         std::string MatchPortName(
const char* name, 
const char** ports, 
int alias, 
const std::string& type);
   182         virtual int StartSlaves();
   183         virtual int StopSlaves();
   185         virtual int ResumeRefNum();
   186         virtual int SuspendRefNum();
   193         void SetMaster(
bool onoff);
   199         std::list<JackDriverInterface*> GetSlaves()
   206         virtual int Open(jack_nframes_t buffer_size,
   207                          jack_nframes_t samplerate,
   213                          const char* capture_driver_name,
   214                          const char* playback_driver_name,
   215                          jack_nframes_t capture_latency,
   216                          jack_nframes_t playback_latency);
   220         virtual int Process();
   222         virtual int Attach();
   223         virtual int Detach();
   232         int ProcessReadSlaves();
   233         int ProcessWriteSlaves();
   236         virtual int ProcessRead();
   237         virtual int ProcessWrite();
   240         virtual int ProcessReadSync();
   241         virtual int ProcessWriteSync();
   244         virtual int ProcessReadAsync();
   245         virtual int ProcessWriteAsync();
   247         virtual bool IsFixedBufferSize();
   248         virtual int SetBufferSize(jack_nframes_t buffer_size);
   249         virtual int SetSampleRate(jack_nframes_t sample_rate);
   251         virtual int ClientNotify(
int refnum, 
const char* name, 
int notify, 
int sync, 
const char* message, 
int value1, 
int value2);
   254         virtual bool IsRealTime() 
const;
   255         virtual bool IsRunning()
 const { 
return fIsRunning; }
   256         virtual bool Initialize();  
 The base interface for drivers.
Locked Engine, access to methods is serialized using a mutex.
Inter process synchronization using POSIX semaphore.
Graph manager: contains the connection manager and the port array.
The base interface for drivers clients.
Engine control in shared memory.
Client control possibly in shared memory.