git-svn-id: http://subversion.jackaudio.org/jack/jack2/branches/libjacknet@3954 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.8
@@ -46,7 +46,7 @@ extern "C" | |||||
int audio_input; | int audio_input; | ||||
int audio_output; | int audio_output; | ||||
int midi_input; | int midi_input; | ||||
int midi_ouput; | |||||
int midi_output; | |||||
int mtu; | int mtu; | ||||
int time_out; // in millisecond, -1 means in infinite | int time_out; // in millisecond, -1 means in infinite | ||||
char mode; | char mode; | ||||
@@ -230,8 +230,8 @@ struct JackNetExtMaster : public JackNetMasterInterface { | |||||
result->audio_input = fParams.fSendAudioChannels; | result->audio_input = fParams.fSendAudioChannels; | ||||
result->audio_output = fParams.fReturnAudioChannels; | result->audio_output = fParams.fReturnAudioChannels; | ||||
result->midi_input = fParams.fSendMidiChannels; | result->midi_input = fParams.fSendMidiChannels; | ||||
result->midi_ouput = fParams.fReturnMidiChannels; | |||||
result->midi_ouput = fParams.fMtu; | |||||
result->midi_output = fParams.fReturnMidiChannels; | |||||
result->mtu = fParams.fMtu; | |||||
result->mode = fParams.fNetworkMode; | result->mode = fParams.fNetworkMode; | ||||
return 0; | return 0; | ||||
@@ -425,6 +425,8 @@ struct JackNetExtSlave : public JackNetSlaveInterface, public JackRunnableInterf | |||||
JackMidiBuffer** fMidiCaptureBuffer; | JackMidiBuffer** fMidiCaptureBuffer; | ||||
JackMidiBuffer** fMidiPlaybackBuffer; | JackMidiBuffer** fMidiPlaybackBuffer; | ||||
int fConnectTimeOut; | |||||
JackNetExtSlave(const char* ip, | JackNetExtSlave(const char* ip, | ||||
int port, | int port, | ||||
const char* name, | const char* name, | ||||
@@ -448,9 +450,10 @@ struct JackNetExtSlave : public JackNetSlaveInterface, public JackRunnableInterf | |||||
fParams.fSendAudioChannels = request->audio_input; | fParams.fSendAudioChannels = request->audio_input; | ||||
fParams.fReturnAudioChannels = request->audio_output; | fParams.fReturnAudioChannels = request->audio_output; | ||||
fParams.fSendMidiChannels = request->midi_input; | fParams.fSendMidiChannels = request->midi_input; | ||||
fParams.fReturnMidiChannels = request->midi_ouput; | |||||
fParams.fReturnMidiChannels = request->midi_output; | |||||
fParams.fNetworkMode = request->mode; | fParams.fNetworkMode = request->mode; | ||||
fParams.fSlaveSyncMode = 1; | fParams.fSlaveSyncMode = 1; | ||||
fConnectTimeOut = request->time_out; | |||||
// Create name with hostname and client name | // Create name with hostname and client name | ||||
GetHostName(host_name, JACK_CLIENT_NAME_SIZE); | GetHostName(host_name, JACK_CLIENT_NAME_SIZE); | ||||
@@ -468,7 +471,7 @@ struct JackNetExtSlave : public JackNetSlaveInterface, public JackRunnableInterf | |||||
int Open(jack_master_t* result) | int Open(jack_master_t* result) | ||||
{ | { | ||||
// Init network connection | // Init network connection | ||||
if (!JackNetSlaveInterface::InitConnection()) | |||||
if (!JackNetSlaveInterface::InitConnection(fConnectTimeOut)) | |||||
return -1; | return -1; | ||||
// Then set global parameters | // Then set global parameters | ||||
@@ -609,10 +609,11 @@ namespace Jack | |||||
// Separate the connection protocol into two separated step | // Separate the connection protocol into two separated step | ||||
bool JackNetSlaveInterface::InitConnection() | |||||
bool JackNetSlaveInterface::InitConnection(int time_out) | |||||
{ | { | ||||
jack_log ( "JackNetSlaveInterface::InitConnection()" ); | |||||
jack_log("JackNetSlaveInterface::InitConnection()"); | |||||
int try_count = (time_out > 0) ? ((1000000 * time_out) / SLAVE_INIT_TIMEOUT) : LONG_MAX; | |||||
//set the parameters to send | //set the parameters to send | ||||
strcpy (fParams.fPacketType, "params"); | strcpy (fParams.fPacketType, "params"); | ||||
fParams.fProtocolVersion = SLAVE_PROTOCOL; | fParams.fProtocolVersion = SLAVE_PROTOCOL; | ||||
@@ -622,13 +623,13 @@ namespace Jack | |||||
do | do | ||||
{ | { | ||||
//get a master | //get a master | ||||
status = SendAvailableToMaster(); | |||||
status = SendAvailableToMaster(try_count); | |||||
if (status == NET_SOCKET_ERROR) | if (status == NET_SOCKET_ERROR) | ||||
return false; | return false; | ||||
} | } | ||||
while (status != NET_CONNECTED); | |||||
while (status != NET_CONNECTED && --try_count > 0); | |||||
return true; | |||||
return (try_count != 0); | |||||
} | } | ||||
bool JackNetSlaveInterface::InitRendering() | bool JackNetSlaveInterface::InitRendering() | ||||
@@ -649,7 +650,7 @@ namespace Jack | |||||
return true; | return true; | ||||
} | } | ||||
net_status_t JackNetSlaveInterface::SendAvailableToMaster() | |||||
net_status_t JackNetSlaveInterface::SendAvailableToMaster(int count) | |||||
{ | { | ||||
jack_log ( "JackNetSlaveInterface::SendAvailableToMaster()" ); | jack_log ( "JackNetSlaveInterface::SendAvailableToMaster()" ); | ||||
//utility | //utility | ||||
@@ -697,7 +698,12 @@ namespace Jack | |||||
return NET_RECV_ERROR; | return NET_RECV_ERROR; | ||||
} | } | ||||
} | } | ||||
while ( strcmp ( host_params.fPacketType, fParams.fPacketType ) && ( GetPacketType ( &host_params ) != SLAVE_SETUP ) ); | |||||
while (strcmp(host_params.fPacketType, fParams.fPacketType) && (GetPacketType(&host_params) != SLAVE_SETUP) && (--count > 0)); | |||||
// Time out failure.. | |||||
if (count == 0) { | |||||
return NET_CONNECT_ERROR; | |||||
} | |||||
//everything is OK, copy parameters | //everything is OK, copy parameters | ||||
SessionParamsDisplay(&host_params); | SessionParamsDisplay(&host_params); | ||||
@@ -145,10 +145,10 @@ namespace Jack | |||||
static uint fSlaveCounter; | static uint fSlaveCounter; | ||||
bool Init(); | bool Init(); | ||||
bool InitConnection(); | |||||
bool InitConnection(int time_out); | |||||
bool InitRendering(); | bool InitRendering(); | ||||
net_status_t SendAvailableToMaster(); | |||||
net_status_t SendAvailableToMaster(int count = LONG_MAX); | |||||
net_status_t SendStartToMaster(); | net_status_t SendStartToMaster(); | ||||
bool SetParams(); | bool SetParams(); | ||||
@@ -207,7 +207,7 @@ namespace Jack | |||||
#define SLAVE_SETUP_RETRY 5 | #define SLAVE_SETUP_RETRY 5 | ||||
#define MASTER_INIT_TIMEOUT 1000000 // in usec | #define MASTER_INIT_TIMEOUT 1000000 // in usec | ||||
#define SLAVE_INIT_TIMEOUT 2000000 // in usec | |||||
#define SLAVE_INIT_TIMEOUT 1000000 // in usec | |||||
#define CYCLE_OFFSET_FAST 0 | #define CYCLE_OFFSET_FAST 0 | ||||
#define CYCLE_OFFSET_NORMAL 1 | #define CYCLE_OFFSET_NORMAL 1 | ||||
@@ -49,7 +49,7 @@ typedef struct { | |||||
int midi_input; // from master or to slave | int midi_input; // from master or to slave | ||||
int midi_output; // to master or from slave | int midi_output; // to master or from slave | ||||
int mtu; | int mtu; | ||||
int time_out; // in millisecond, -1 means in infinite | |||||
int time_out; // in second, -1 means in infinite | |||||
char mode; | char mode; | ||||
} jack_slave_t; | } jack_slave_t; | ||||