00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "JackConstants.h"
00021 #include "JackMidiPort.h"
00022 #include "JackTools.h"
00023 #include "JackPlatformPlug.h"
00024 #include "types.h"
00025 #include "transport.h"
00026 #include <cmath>
00027
00028 using namespace std;
00029
00030 namespace Jack
00031 {
00032 typedef struct _session_params session_params_t;
00033 typedef struct _packet_header packet_header_t;
00034 typedef struct _net_transport_data net_transport_data_t;
00035 typedef struct sockaddr socket_address_t;
00036 typedef struct in_addr address_t;
00037 typedef jack_default_audio_sample_t sample_t;
00038
00039
00040
00055 struct _session_params
00056 {
00057 char fPacketType[7];
00058 char fProtocolVersion;
00059 uint32_t fPacketID;
00060 char fName[JACK_CLIENT_NAME_SIZE];
00061 char fMasterNetName[256];
00062 char fSlaveNetName[256];
00063 uint32_t fMtu;
00064 uint32_t fID;
00065 uint32_t fTransportSync;
00066 uint32_t fSendAudioChannels;
00067 uint32_t fReturnAudioChannels;
00068 uint32_t fSendMidiChannels;
00069 uint32_t fReturnMidiChannels;
00070 uint32_t fSampleRate;
00071 uint32_t fPeriodSize;
00072 uint32_t fFramesPerPacket;
00073 uint32_t fBitdepth;
00074 uint32_t fSlaveSyncMode;
00075 char fNetworkMode;
00076 };
00077
00078
00079
00084 enum _net_status
00085 {
00086 NET_SOCKET_ERROR = 0,
00087 NET_CONNECT_ERROR,
00088 NET_ERROR,
00089 NET_SEND_ERROR,
00090 NET_RECV_ERROR,
00091 NET_CONNECTED,
00092 NET_ROLLING
00093 };
00094
00095 typedef enum _net_status net_status_t;
00096
00097
00098
00103 enum _sync_packet_type
00104 {
00105 INVALID = 0,
00106 SLAVE_AVAILABLE,
00107 SLAVE_SETUP,
00108 START_MASTER,
00109 START_SLAVE,
00110 KILL_MASTER
00111 };
00112
00113 typedef enum _sync_packet_type sync_packet_type_t;
00114
00115
00116
00117
00137 struct _packet_header
00138 {
00139 char fPacketType[7];
00140 char fDataType;
00141 char fDataStream;
00142 uint32_t fID;
00143 uint32_t fBitdepth;
00144 uint32_t fMidiDataSize;
00145 uint32_t fNMidiPckt;
00146 uint32_t fPacketSize;
00147 uint32_t fCycle;
00148 uint32_t fSubCycle;
00149 uint32_t fIsLastPckt;
00150 char fASyncWrongCycle;
00151 char fFree[26];
00152 };
00153
00154
00155
00160 enum _net_timebase_master
00161 {
00162 NO_CHANGE = 0,
00163 RELEASE_TIMEBASEMASTER = 1,
00164 TIMEBASEMASTER = 2,
00165 CONDITIONAL_TIMEBASEMASTER = 3
00166 };
00167
00168 typedef enum _net_timebase_master net_timebase_master_t;
00169
00170
00171
00172
00177 struct _net_transport_data
00178 {
00179 uint32_t fNewState;
00180 uint32_t fTimebaseMaster;
00181 int32_t fState;
00182 jack_position_t fPosition;
00183 };
00184
00185
00186
00202 class SERVER_EXPORT NetMidiBuffer
00203 {
00204 private:
00205 int fNPorts;
00206 size_t fMaxBufsize;
00207 int fMaxPcktSize;
00208 char* fBuffer;
00209 char* fNetBuffer;
00210 JackMidiBuffer** fPortBuffer;
00211
00212 public:
00213 NetMidiBuffer ( session_params_t* params, uint32_t nports, char* net_buffer );
00214 ~NetMidiBuffer();
00215
00216 void Reset();
00217 size_t GetSize();
00218
00219 void DisplayEvents();
00220
00221 int RenderFromJackPorts();
00222 int RenderToJackPorts();
00223
00224 int RenderFromNetwork ( int subcycle, size_t copy_size );
00225 int RenderToNetwork ( int subcycle, size_t total_size );
00226
00227 void SetBuffer ( int index, JackMidiBuffer* buffer );
00228 JackMidiBuffer* GetBuffer ( int index );
00229 };
00230
00231
00232
00243 class SERVER_EXPORT NetAudioBuffer
00244 {
00245 private:
00246 int fNPorts;
00247 jack_nframes_t fPeriodSize;
00248 jack_nframes_t fSubPeriodSize;
00249 size_t fSubPeriodBytesSize;
00250 char* fNetBuffer;
00251 sample_t** fPortBuffer;
00252 public:
00253 NetAudioBuffer ( session_params_t* params, uint32_t nports, char* net_buffer );
00254 ~NetAudioBuffer();
00255
00256 size_t GetSize();
00257
00258 void RenderFromJackPorts ( int subcycle );
00259 void RenderToJackPorts ( int subcycle );
00260
00261 void SetBuffer ( int index, sample_t* buffer );
00262 sample_t* GetBuffer ( int index );
00263 };
00264
00265
00266
00267
00268 SERVER_EXPORT int SocketAPIInit();
00269 SERVER_EXPORT int SocketAPIEnd();
00270
00271 SERVER_EXPORT void SessionParamsHToN ( session_params_t* params );
00272 SERVER_EXPORT void SessionParamsNToH ( session_params_t* params );
00273 SERVER_EXPORT void PacketHeaderHToN ( packet_header_t* header );
00274 SERVER_EXPORT void PacketHeaderNToH ( packet_header_t* header );
00275
00276 SERVER_EXPORT void SessionParamsDisplay ( session_params_t* params );
00277
00278 SERVER_EXPORT void PacketHeaderDisplay ( packet_header_t* header );
00279
00280 SERVER_EXPORT sync_packet_type_t GetPacketType ( session_params_t* params );
00281
00282 SERVER_EXPORT int SetPacketType ( session_params_t* params, sync_packet_type_t packet_type );
00283
00284 SERVER_EXPORT const char* GetTransportState ( int transport_state );
00285 }