1 /*
2 Copyright (C) 2004-2008 Grame
3 
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation; either version 2.1 of the License, or
7 (at your option) any later version.
8 
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU Lesser General Public License for more details.
13 
14 You should have received a copy of the GNU Lesser General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 
18 */
19 
20 #ifndef __JackChannel__
21 #define __JackChannel__
22 
23 #include "types.h"
24 #include "JackSession.h"
25 #include "JackMetadata.h"
26 
27 namespace Jack
28 {
29 
30 class JackClientInterface;
31 class JackClient;
32 class JackServer;
33 struct JackEngineControl;
34 class JackGraphManager;
35 
36 namespace detail
37 {
38 
39 class JackChannelTransactionInterface
40 {
41 
42     public:
43 
JackChannelTransactionInterface()44         JackChannelTransactionInterface()
45         {}
~JackChannelTransactionInterface()46         virtual ~JackChannelTransactionInterface()
47         {}
48 
49         virtual int Read(void* data, int len) = 0;
50         virtual int Write(void* data, int len) = 0;
51 
52 };
53 
54 class JackRequestInterface
55 {
56 
57     public:
58 
JackRequestInterface()59         JackRequestInterface()
60         {}
~JackRequestInterface()61         virtual ~JackRequestInterface()
62         {}
63 
64         virtual int Connect(const char* dir, const char* name, int which) = 0;
65         virtual int Close() = 0;
66 
67 };
68 
69 class JackClientRequestInterface : public JackChannelTransactionInterface, public JackRequestInterface
70 {
71 
72     public:
73 
JackClientRequestInterface()74         JackClientRequestInterface()
75         {}
~JackClientRequestInterface()76         virtual ~JackClientRequestInterface()
77         {}
78 
Read(void * data,int len)79         virtual int Read(void* data, int len) { return -1; }
Write(void * data,int len)80         virtual int Write(void* data, int len) { return -1; }
81 
Connect(const char * dir,const char * name,int which)82         virtual int Connect(const char* dir, const char* name, int which) { return -1; }
Close()83         virtual int Close() { return -1; }
84 
85 };
86 
87 /*!
88 \brief Inter process channel for server/client bidirectionnal communication : request and (receiving) notifications.
89 */
90 
91 class JackClientChannelInterface
92 {
93 
94     public:
95 
JackClientChannelInterface()96         JackClientChannelInterface()
97         {}
~JackClientChannelInterface()98         virtual ~JackClientChannelInterface()
99         {}
100 
101         // Open the Server/Client connection
Open(const char * server_name,const char * name,jack_uuid_t uuid,char * name_res,JackClient * obj,jack_options_t options,jack_status_t * status)102         virtual int Open(const char* server_name, const char* name, jack_uuid_t uuid, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status)
103         {
104             return 0;
105         }
106 
107         // Close the Server/Client connection
Close()108         virtual void Close()
109         {}
110 
111         // Start listening for messages from the server
Start()112         virtual int Start()
113         {
114             return 0;
115         }
116 
117         // Stop listening for messages from the server
Stop()118         virtual void Stop()
119         {}
120 
ServerCheck(const char * server_name)121         virtual int ServerCheck(const char* server_name)
122         {
123             return -1;
124         }
125 
ClientCheck(const char * name,jack_uuid_t uuid,char * name_res,int protocol,int options,int * status,int * result,int open)126         virtual void ClientCheck(const char* name, jack_uuid_t uuid, char* name_res, int protocol, int options, int* status, int* result, int open)
127         {}
ClientOpen(const char * name,int pid,jack_uuid_t uuid,int * shared_engine,int * shared_client,int * shared_graph,int * result)128         virtual void ClientOpen(const char* name, int pid, jack_uuid_t uuid, int* shared_engine, int* shared_client, int* shared_graph, int* result)
129         {}
ClientOpen(const char * name,int * ref,JackEngineControl ** shared_engine,JackGraphManager ** shared_manager,JackClientInterface * client,int * result)130         virtual void ClientOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, int* result)
131         {}
ClientClose(int refnum,int * result)132         virtual void ClientClose(int refnum, int* result)
133         {}
134 
ClientActivate(int refnum,int is_real_time,int * result)135         virtual void ClientActivate(int refnum, int is_real_time, int* result)
136         {}
ClientDeactivate(int refnum,int * result)137         virtual void ClientDeactivate(int refnum, int* result)
138         {}
139 
PortRegister(int refnum,const char * name,const char * type,unsigned int flags,unsigned int buffer_size,jack_port_id_t * port_index,int * result)140         virtual void PortRegister(int refnum, const char* name, const char* type, unsigned int flags, unsigned int buffer_size, jack_port_id_t* port_index, int* result)
141         {}
PortUnRegister(int refnum,jack_port_id_t port_index,int * result)142         virtual void PortUnRegister(int refnum, jack_port_id_t port_index, int* result)
143         {}
144 
PortConnect(int refnum,const char * src,const char * dst,int * result)145         virtual void PortConnect(int refnum, const char* src, const char* dst, int* result)
146         {}
PortDisconnect(int refnum,const char * src,const char * dst,int * result)147         virtual void PortDisconnect(int refnum, const char* src, const char* dst, int* result)
148         {}
PortConnect(int refnum,jack_port_id_t src,jack_port_id_t dst,int * result)149         virtual void PortConnect(int refnum, jack_port_id_t src, jack_port_id_t dst, int* result)
150         {}
PortDisconnect(int refnum,jack_port_id_t src,jack_port_id_t dst,int * result)151         virtual void PortDisconnect(int refnum, jack_port_id_t src, jack_port_id_t dst, int* result)
152         {}
PortRename(int refnum,jack_port_id_t port,const char * name,int * result)153         virtual void PortRename(int refnum, jack_port_id_t port, const char* name, int* result)
154         {}
155 
SetBufferSize(jack_nframes_t buffer_size,int * result)156         virtual void SetBufferSize(jack_nframes_t buffer_size, int* result)
157         {}
SetFreewheel(int onoff,int * result)158         virtual void SetFreewheel(int onoff, int* result)
159         {}
ComputeTotalLatencies(int * result)160         virtual void ComputeTotalLatencies(int* result)
161         {}
162 
ReleaseTimebase(int refnum,int * result)163         virtual void ReleaseTimebase(int refnum, int* result)
164         {}
SetTimebaseCallback(int refnum,int conditional,int * result)165         virtual void SetTimebaseCallback(int refnum, int conditional, int* result)
166         {}
167 
GetInternalClientName(int refnum,int int_ref,char * name_res,int * result)168         virtual void GetInternalClientName(int refnum, int int_ref, char* name_res, int* result)
169         {}
InternalClientHandle(int refnum,const char * client_name,int * status,int * int_ref,int * result)170         virtual void InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result)
171         {}
InternalClientLoad(int refnum,const char * client_name,const char * so_name,const char * objet_data,int options,int * status,int * int_ref,jack_uuid_t uuid,int * result)172         virtual void InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, jack_uuid_t uuid, int* result)
173         {}
InternalClientUnload(int refnum,int int_ref,int * status,int * result)174         virtual void InternalClientUnload(int refnum, int int_ref, int* status, int* result)
175         {}
176 
SessionNotify(int refnum,const char * target,jack_session_event_type_t type,const char * path,jack_session_command_t ** result)177         virtual void SessionNotify(int refnum, const char* target, jack_session_event_type_t type, const char* path, jack_session_command_t** result)
178         {}
SessionReply(int refnum,int * result)179         virtual void SessionReply(int refnum, int* result)
180         {}
GetUUIDForClientName(int refnum,const char * client_name,char * uuid_res,int * result)181         virtual void GetUUIDForClientName(int refnum, const char* client_name, char* uuid_res, int* result)
182         {}
GetClientNameForUUID(int refnum,const char * uuid,char * name_res,int * result)183         virtual void GetClientNameForUUID(int refnum, const char* uuid, char* name_res, int* result)
184         {}
ReserveClientName(int refnum,const char * client_name,const char * uuid,int * result)185         virtual void ReserveClientName(int refnum, const char* client_name, const char *uuid, int* result)
186         {}
ClientHasSessionCallback(const char * client_name,int * result)187         virtual void ClientHasSessionCallback(const char* client_name, int* result)
188         {}
189 
PropertyChangeNotify(jack_uuid_t subject,const char * key,jack_property_change_t change,int * result)190         virtual void PropertyChangeNotify(jack_uuid_t subject, const char* key, jack_property_change_t change, int* result)
191         {}
192 
IsChannelThread()193         virtual bool IsChannelThread()
194         {
195             return false;
196         }
197 };
198 
199 }
200 
201 } // end of namespace
202 
203 #endif
204 
205