JackDebugClient.h 4.87 KB
Newer Older
sletz's avatar
sletz committed
1
/*
sletz's avatar
sletz committed
2
Copyright (C) 2004-2008 Grame
sletz's avatar
sletz committed
3
4

This program is free software; you can redistribute it and/or modify
sletz's avatar
sletz committed
5
6
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
sletz's avatar
sletz committed
7
8
9
10
11
(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
sletz's avatar
sletz committed
12
GNU Lesser General Public License for more details.
sletz's avatar
sletz committed
13

sletz's avatar
sletz committed
14
15
16
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.
sletz's avatar
sletz committed
17
18
19
20
21
22
23
24
25
26

*/

#ifndef __JackDebugClient__
#define __JackDebugClient__

#define MAX_PORT_HISTORY 2048

#include "JackClient.h"
#include <list>
sletz's avatar
sletz committed
27
#include <fstream>
sletz's avatar
sletz committed
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

namespace Jack
{

/*!
\brief Follow a single port.
*/

typedef struct
{
    jack_port_id_t idport;
    char name[JACK_PORT_NAME_SIZE]; //portname
    int IsConnected;
    int IsUnregistrated;
}
PortFollower;

/*!
\brief A "decorator" debug client to validate API use.
*/
sletz's avatar
sletz committed
48

sletz's avatar
sletz committed
49
50
51
class JackDebugClient : public JackClient
{
    protected:
sletz's avatar
sletz committed
52
53

        JackClient* fClient;
54
        std::ofstream* fStream;
sletz's avatar
sletz committed
55
        PortFollower fPortList[MAX_PORT_HISTORY]; // Arbitrary value... To be tuned...
sletz's avatar
sletz committed
56
57
58
59
60
        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;
61
        bool fFreewheel;
62
        char fClientName[JACK_CLIENT_NAME_SIZE + 1];
sletz's avatar
sletz committed
63
64
        JackProcessCallback fProcessTimeCallback;
        void* fProcessTimeCallbackArg;
sletz's avatar
sletz committed
65
66
67

    public:

68
        JackDebugClient(JackClient* fTheClient);
sletz's avatar
sletz committed
69
70
        virtual ~JackDebugClient();

71
        virtual int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status);
sletz's avatar
sletz committed
72
73
74
75
76
77
        int Close();

        virtual JackGraphManager* GetGraphManager() const;
        virtual JackEngineControl* GetEngineControl() const;

        // Notifications
78
        int ClientNotify(int refnum, const char* name, int notify, int sync, const char* message, int value1, int value2);
sletz's avatar
sletz committed
79
80
81
82
83

        int Activate();
        int Deactivate();

        // Context
84
        int SetBufferSize(jack_nframes_t buffer_size);
sletz's avatar
sletz committed
85
86
87
88
89
90
91
92
93
94
        int SetFreeWheel(int onoff);
        void ShutDown();
        pthread_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);
95
        int PortDisconnect(jack_port_id_t src);
sletz's avatar
sletz committed
96
97
98
99
100
101
102
103

        int PortIsMine(jack_port_id_t port_index);

        // 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);
104
        void TransportLocate(jack_nframes_t frame);
sletz's avatar
sletz committed
105
106
107
108
109
110
111
112
        jack_transport_state_t TransportQuery(jack_position_t* pos);
        jack_nframes_t GetCurrentTransportFrame();
        int TransportReposition(jack_position_t* pos);
        void TransportStart();
        void TransportStop();

        // Callbacks
        void OnShutdown(JackShutdownCallback callback, void *arg);
113
        void OnInfoShutdown(JackInfoShutdownCallback callback, void *arg);
sletz's avatar
sletz committed
114
115
116
117
118
        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);
sletz's avatar
sletz committed
119
        int SetClientRegistrationCallback(JackClientRegistrationCallback callback, void* arg);
sletz's avatar
sletz committed
120
121
        int SetFreewheelCallback(JackFreewheelCallback callback, void* arg);
        int SetPortRegistrationCallback(JackPortRegistrationCallback callback, void* arg);
sletz's avatar
sletz committed
122
        int SetPortConnectCallback(JackPortConnectCallback callback, void *arg);
123
        int SetPortRenameCallback(JackPortRenameCallback callback, void *arg);
sletz's avatar
sletz committed
124
125
126
127
128
129
130

        // 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);

sletz's avatar
sletz committed
131
        JackClientControl* GetClientControl() const;
sletz's avatar
sletz committed
132
133
134
        void CheckClient() const;

        static int TimeCallback(jack_nframes_t nframes, void *arg);
sletz's avatar
sletz committed
135
136
137
138
139
140
};


} // end of namespace

#endif