jack2/common/JackDebugClient.h

156 lines
5.7 KiB
C++

/*
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 __JackDebugClient__
#define __JackDebugClient__
#define MAX_PORT_HISTORY 2048
#include "JackClient.h"
#include <list>
#include <fstream>
namespace Jack
{
/*!
\brief Follow a single port.
*/
typedef struct
{
jack_port_id_t idport;
char name[JACK_PORT_NAME_SIZE]; //portname
int IsConnected;
int IsUnregistered;
}
PortFollower;
/*!
\brief A "decorator" debug client to validate API use.
*/
class JackDebugClient : public JackClient
{
protected:
JackClient* fClient;
std::ofstream* fStream;
PortFollower fPortList[MAX_PORT_HISTORY]; // Arbitrary value... To be tuned...
int fTotalPortNumber; // The total number of port opened and maybe closed. Historical view.
int fOpenPortNumber; // The current number of opened port.
int fIsActivated;
int fIsDeactivated;
int fIsClosed;
bool fFreewheel;
char fClientName[JACK_CLIENT_NAME_SIZE+1];
JackProcessCallback fProcessTimeCallback;
void* fProcessTimeCallbackArg;
public:
JackDebugClient(JackClient* fTheClient);
virtual ~JackDebugClient();
virtual int Open(const char* server_name, const char* name, jack_uuid_t uuid, jack_options_t options, jack_status_t* status);
int Close();
virtual JackGraphManager* GetGraphManager() const;
virtual JackEngineControl* GetEngineControl() const;
// Notifications
int ClientNotify(int refnum, const char* name, int notify, int sync, const char* message, int value1, int value2);
int Activate();
int Deactivate();
// Context
int SetBufferSize(jack_nframes_t buffer_size);
int SetFreeWheel(int onoff);
int ComputeTotalLatencies();
void ShutDown(jack_status_t code, const char* message);
jack_native_thread_t GetThreadID();
// Port management
int PortRegister(const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size);
int PortUnRegister(jack_port_id_t port);
int PortConnect(const char* src, const char* dst);
int PortDisconnect(const char* src, const char* dst);
int PortDisconnect(jack_port_id_t src);
int PortIsMine(jack_port_id_t port_index);
int PortRename(jack_port_id_t port_index, const char* name);
// Transport
int ReleaseTimebase();
int SetSyncCallback(JackSyncCallback sync_callback, void* arg);
int SetSyncTimeout(jack_time_t timeout);
int SetTimebaseCallback(int conditional, JackTimebaseCallback timebase_callback, void* arg);
void TransportLocate(jack_nframes_t frame);
jack_transport_state_t TransportQuery(jack_position_t* pos);
jack_nframes_t GetCurrentTransportFrame();
int TransportReposition(const jack_position_t* pos);
void TransportStart();
void TransportStop();
// Callbacks
void OnShutdown(JackShutdownCallback callback, void *arg);
void OnInfoShutdown(JackInfoShutdownCallback callback, void *arg);
int SetProcessCallback(JackProcessCallback callback, void* arg);
int SetXRunCallback(JackXRunCallback callback, void* arg);
int SetInitCallback(JackThreadInitCallback callback, void* arg);
int SetGraphOrderCallback(JackGraphOrderCallback callback, void* arg);
int SetBufferSizeCallback(JackBufferSizeCallback callback, void* arg);
int SetClientRegistrationCallback(JackClientRegistrationCallback callback, void* arg);
int SetFreewheelCallback(JackFreewheelCallback callback, void* arg);
int SetPortRegistrationCallback(JackPortRegistrationCallback callback, void* arg);
int SetPortConnectCallback(JackPortConnectCallback callback, void *arg);
int SetPortRenameCallback(JackPortRenameCallback callback, void *arg);
int SetSessionCallback(JackSessionCallback callback, void *arg);
int SetLatencyCallback(JackLatencyCallback callback, void *arg);
// Internal clients
char* GetInternalClientName(int ref);
int InternalClientHandle(const char* client_name, jack_status_t* status);
int InternalClientLoad(const char* client_name, jack_options_t options, jack_status_t* status, jack_varargs_t* va);
void InternalClientUnload(int ref, jack_status_t* status);
// RT Thread
int SetProcessThread(JackThreadCallback fun, void *arg);
// Session API
jack_session_command_t* SessionNotify(const char* target, jack_session_event_type_t type, const char* path);
int SessionReply(jack_session_event_t* ev);
char* GetUUIDForClientName(const char* client_name);
char* GetClientNameByUUID(const char* uuid);
int ReserveClientName(const char* client_name, const char* uuid);
int ClientHasSessionCallback(const char* client_name);
JackClientControl* GetClientControl() const;
void CheckClient(const char* function_name) const;
static int TimeCallback(jack_nframes_t nframes, void *arg);
};
} // end of namespace
#endif