/[svn]/linuxsampler/trunk/src/network/lscpserver.h
ViewVC logotype

Contents of /linuxsampler/trunk/src/network/lscpserver.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 219 - (show annotations) (download) (as text)
Tue Aug 17 20:35:04 2004 UTC (19 years, 8 months ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 8508 byte(s)
* completely removed the lex scanner and replaced it by pure yacc rules
  for all terminal symbols (that is command keywords and variables) to
  avoid misunderstandings while parsing (e.g. recognition of command
  keywords in string arguments)
* src/drivers/audio/AudioChannel.cpp: changed channel parameter 'Name' to
 'NAME' as defined in the LSCP documentation

1 /***************************************************************************
2 * *
3 * LinuxSampler - modular, streaming capable sampler *
4 * *
5 * Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck *
6 * *
7 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program; if not, write to the Free Software *
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
20 * MA 02111-1307 USA *
21 ***************************************************************************/
22
23 #ifndef __LSCPSERVER_H_
24 #define __LSCPSERVER_H_
25
26 #include <unistd.h>
27 #include <sys/types.h>
28 #include <sys/socket.h>
29 #include <sys/select.h>
30 #include <sys/time.h>
31 #include <netinet/in.h>
32 #include <netinet/tcp.h>
33 #include <arpa/inet.h>
34 #include <netdb.h>
35
36 #include <list>
37
38 #include "lscp.h"
39 #include "lscpparser.h"
40 #include "lscp.h"
41 #include "lscpevent.h"
42 #include "../Sampler.h"
43 #include "../common/Thread.h"
44 #include "../common/Mutex.h"
45 #include "../common/Condition.h"
46
47 /// TCP Port on which the server should listen for connection requests.
48 #define LSCP_PORT 8888
49
50 using namespace LinuxSampler;
51
52 // External references to the main scanner and parser functions
53 extern int yyparse(void* YYPARSE_PARAM);
54 extern void restart(yyparse_param_t* pparam, int& yychar);
55
56 /**
57 * Network server for the LinuxSampler Control Protocol (LSCP).
58 */
59 class LSCPServer : public Thread {
60 public:
61 LSCPServer(Sampler* pSampler);
62 int WaitUntilInitialized(long TimeoutSeconds = 0L, long TimeoutNanoSeconds = 0L);
63
64 // Methods called by the parser
65 String DestroyAudioOutputDevice(uint DeviceIndex);
66 String DestroyMidiInputDevice(uint DeviceIndex);
67 String LoadInstrument(String Filename, uint uiInstrument, uint uiSamplerChannel, bool bBackground = false);
68 String LoadEngine(String EngineName, uint uiSamplerChannel);
69 String GetChannels();
70 String ListChannels();
71 String AddChannel();
72 String RemoveChannel(uint uiSamplerChannel);
73 String GetAvailableEngines();
74 String GetEngineInfo(String EngineName);
75 String GetChannelInfo(uint uiSamplerChannel);
76 String GetVoiceCount(uint uiSamplerChannel);
77 String GetStreamCount(uint uiSamplerChannel);
78 String GetBufferFill(fill_response_t ResponseType, uint uiSamplerChannel);
79 String GetAvailableAudioOutputDrivers();
80 String GetAvailableMidiInputDrivers();
81 String GetAudioOutputDriverInfo(String Driver);
82 String GetMidiInputDriverInfo(String Driver);
83 #ifdef __GNUC__
84 typedef std::map<String,String> StringMap; // nasty workaround for a GCC bug (see GCC bug #15980, #57)
85 String GetAudioOutputDriverParameterInfo(String Driver, String Parameter, std::map<String,String> DependencyList = StringMap());
86 String GetMidiInputDriverParameterInfo(String Driver, String Parameter, std::map<String,String> DependencyList = StringMap());
87 String CreateAudioOutputDevice(String Driver, std::map<String,String> Parameters = StringMap());
88 String CreateMidiInputDevice(String Driver, std::map<String,String> Parameters = StringMap());
89 #else
90 String GetAudioOutputDriverParameterInfo(String Driver, String Parameter, std::map<String,String> DependencyList = std::map<String,String>());
91 String GetMidiInputDriverParameterInfo(String Driver, String Parameter, std::map<String,String> DependencyList = std::map<String,String>());
92 String CreateAudioOutputDevice(String Driver, std::map<String,String> Parameters = std::map<String,String>());
93 String CreateMidiInputDevice(String Driver, std::map<String,String> Parameters = std::map<String,String>());
94 #endif // __GNUC__
95 String GetAudioOutputDeviceCount();
96 String GetMidiInputDeviceCount();
97 String GetAudioOutputDevices();
98 String GetMidiInputDevices();
99 String GetAudioOutputDeviceInfo(uint DeviceIndex);
100 String GetMidiInputDeviceInfo(uint DeviceIndex);
101 String GetMidiInputPortInfo(uint DeviceIndex, uint PortIndex);
102 String GetMidiInputPortParameterInfo(uint DeviceId, uint PortId, String ParameterName);
103 String GetAudioOutputChannelInfo(uint DeviceId, uint ChannelId);
104 String GetAudioOutputChannelParameterInfo(uint DeviceId, uint ChannelId, String ParameterName);
105 String SetAudioOutputChannelParameter(uint DeviceId, uint ChannelId, String ParamKey, String ParamVal);
106 String SetAudioOutputDeviceParameter(uint DeviceIndex, String ParamKey, String ParamVal);
107 String SetMidiInputDeviceParameter(uint DeviceIndex, String ParamKey, String ParamVal);
108 String SetMidiInputPortParameter(uint DeviceIndex, uint PortIndex, String ParamKey, String ParamVal);
109 String SetAudioOutputChannel(uint ChannelAudioOutputChannel, uint AudioOutputDeviceInputChannel, uint uiSamplerChannel);
110 String SetAudioOutputDevice(uint AudioDeviceId, uint SamplerChannel);
111 String SetAudioOutputType(String AudioOutputDriver, uint uiSamplerChannel);
112 String SetMIDIInputPort(uint MIDIPort, uint uiSamplerChannel);
113 String SetMIDIInputChannel(uint MIDIChannel, uint uiSamplerChannel);
114 String SetMIDIInputDevice(uint MIDIDeviceId, uint uiSamplerChannel);
115 String SetMIDIInputType(String MidiInputDriver, uint uiSamplerChannel);
116 String SetMIDIInput(uint MIDIDeviceId, uint MIDIPort, uint MIDIChannel, uint uiSamplerChannel);
117 String SetVolume(double Volume, uint uiSamplerChannel);
118 String ResetChannel(uint uiSamplerChannel);
119 String ResetSampler();
120 String SubscribeNotification(LSCPEvent::event_t);
121 String UnsubscribeNotification(LSCPEvent::event_t);
122 String SetEcho(yyparse_param_t* pSession, double boolean_value);
123 void AnswerClient(String ReturnMessage);
124
125 static int currentSocket;
126 static std::map<int,String> bufferedCommands;
127
128 static void SendLSCPNotify( LSCPEvent Event );
129
130 protected:
131 int hSocket;
132 sockaddr_in SocketAddress;
133 Sampler* pSampler;
134 Condition Initialized;
135
136 int Main(); ///< Implementation of virtual method from class Thread
137
138 private:
139
140 /**
141 * Find a created audio output device index.
142 */
143 int GetAudioOutputDeviceIndex (AudioOutputDevice *pDevice);
144
145 /**
146 * Find a created midi input device index.
147 */
148 int GetMidiInputDeviceIndex (MidiInputDevice *pDevice);
149
150 static std::map<int,String> bufferedNotifies;
151 static Mutex NotifyMutex;
152 static Mutex NotifyBufferMutex;
153 static bool GetLSCPCommand( std::vector<yyparse_param_t>::iterator iter );
154 static void CloseConnection( std::vector<yyparse_param_t>::iterator iter );
155 static std::vector<yyparse_param_t> Sessions;
156 static Mutex SubscriptionMutex;
157 static std::map< LSCPEvent::event_t, std::list<int> > eventSubscriptions;
158 static fd_set fdSet;
159 };
160
161 /**
162 * Instrument loader thread for the LinuxSampler Control Protocol (LSCP).
163 */
164 class LSCPLoadInstrument : public Thread {
165
166 public:
167 LSCPLoadInstrument(Engine* pEngine, String Filename, uint uiInstrument);
168
169 protected:
170 // Instance variables.
171 Engine* pEngine;
172 String Filename;
173 uint uiInstrument;
174
175 // Implementation of virtual method from class Thread.
176 int Main();
177 };
178
179 #endif // __LSCPSERVER_H_

  ViewVC Help
Powered by ViewVC