Commit e0135c87 authored by Stephane Letz's avatar Stephane Letz
Browse files

Add NETWORK_RESYNCH_LATENCY parameter to resynch in netjack2.

parent f7d0f8ee
......@@ -423,11 +423,11 @@ struct JackNetExtMaster : public JackNetMasterInterface {
return res;
case NET_PACKET_ERROR:
// Since sync packet is incorrect, don't decode it and continue with data
// since sync packet is incorrect, don't decode it and continue with data
break;
default:
//decode sync
// decode sync
DecodeSyncPacket();
break;
}
......@@ -731,7 +731,7 @@ struct JackNetExtSlave : public JackNetSlaveInterface, public JackRunnableInterf
bool Execute()
{
try {
// Keep running even in case of error
// keep running even in case of error
while (fThread.GetStatus() == JackThread::kRunning) {
if (Process() == SOCKET_ERROR) {
return false;
......@@ -739,7 +739,7 @@ struct JackNetExtSlave : public JackNetSlaveInterface, public JackRunnableInterf
}
return false;
} catch (JackNetException& e) {
// Otherwise just restart...
// otherwise just restart...
e.PrintMessage();
jack_info("NetSlave is restarted");
fThread.DropRealTime();
......@@ -756,18 +756,18 @@ struct JackNetExtSlave : public JackNetSlaveInterface, public JackRunnableInterf
int Read()
{
//receive sync (launch the cycle)
// receive sync (launch the cycle)
switch (SyncRecv()) {
case SOCKET_ERROR:
return SOCKET_ERROR;
case NET_PACKET_ERROR:
// Since sync packet is incorrect, don't decode it and continue with data
// since sync packet is incorrect, don't decode it and continue with data
break;
default:
//decode sync
// decode sync
DecodeSyncPacket();
break;
}
......
......@@ -557,11 +557,11 @@ namespace Jack
return SOCKET_ERROR;
case NET_PACKET_ERROR:
// Since sync packet is incorrect, don't decode it and continue with data
// since sync packet is incorrect, don't decode it and continue with data
break;
default:
//decode sync
// decode sync
DecodeSyncPacket();
break;
}
......
......@@ -485,17 +485,24 @@ namespace Jack
if (rx_head->fDataType != 's') {
jack_error("Wrong packet type : %c", rx_head->fDataType);
// Not the last packet..
// not the last packet..
fRxHeader.fIsLastPckt = 0;
return NET_PACKET_ERROR;
}
fCurrentCycleOffset = fTxHeader.fCycle - rx_head->fCycle;
if (fCurrentCycleOffset < fMaxCycleOffset) {
if (fCurrentCycleOffset < fMaxCycleOffset && !fSynched) {
jack_info("Synching with latency = %d", fCurrentCycleOffset);
return 0;
} else {
if (fCurrentCycleOffset == fMaxCycleOffset) {
// when the sync offset is reached
fSynched = true;
} else if (abs(fCurrentCycleOffset - fMaxCycleOffset) >= NETWORK_RESYNCH_LATENCY) {
jack_info("Resync connection...");
fSynched = false;
}
rx_bytes = Recv(rx_head->fPacketSize, 0);
fRxHeader.fIsLastPckt = rx_head->fIsLastPckt;
return rx_bytes;
......@@ -732,7 +739,7 @@ namespace Jack
}
while (strcmp(host_params.fPacketType, fParams.fPacketType) && (GetPacketType(&host_params) != SLAVE_SETUP) && (--try_count > 0));
// Time out failure..
// time out failure..
if (try_count == 0) {
jack_error("Time out error in connect");
return NET_CONNECT_ERROR;
......@@ -873,7 +880,7 @@ namespace Jack
if (rx_head->fDataType != 's') {
jack_error("Wrong packet type : %c", rx_head->fDataType);
// Not the last packet...
// not the last packet...
fRxHeader.fIsLastPckt = 0;
return NET_PACKET_ERROR;
}
......
......@@ -32,12 +32,13 @@ namespace Jack
#define SLAVE_SETUP_RETRY 5
#define MANAGER_INIT_TIMEOUT 2000000 // in usec
#define MASTER_INIT_TIMEOUT 1000000 * 10 // in usec
#define SLAVE_INIT_TIMEOUT 1000000 * 10 // in usec
#define PACKET_TIMEOUT 500000 // in usec
#define MANAGER_INIT_TIMEOUT 1000000 * 2 // in usec
#define MASTER_INIT_TIMEOUT 1000000 * 10 // in usec
#define SLAVE_INIT_TIMEOUT 1000000 * 10 // in usec
#define PACKET_TIMEOUT 500000 // in usec
#define NETWORK_MAX_LATENCY 20
#define NETWORK_MAX_LATENCY 20 // maximun possile latency in network master/slave loop
#define NETWORK_RESYNCH_LATENCY 3 // number of cycles offset before a resync is done....
/**
\Brief This class describes the basic Net Interface, used by both master and slave.
......@@ -137,6 +138,7 @@ namespace Jack
bool fRunning;
int fCurrentCycleOffset;
int fMaxCycleOffset;
bool fSynched;
bool Init();
bool SetParams();
......@@ -161,10 +163,19 @@ namespace Jack
public:
JackNetMasterInterface() : JackNetInterface(), fRunning(false), fCurrentCycleOffset(0), fMaxCycleOffset(0)
JackNetMasterInterface()
: JackNetInterface(),
fRunning(false),
fCurrentCycleOffset(0),
fMaxCycleOffset(0),
fSynched(false)
{}
JackNetMasterInterface(session_params_t& params, JackNetSocket& socket, const char* multicast_ip)
: JackNetInterface(params, socket, multicast_ip), fRunning(false), fCurrentCycleOffset(0), fMaxCycleOffset(0)
: JackNetInterface(params, socket, multicast_ip),
fRunning(false),
fCurrentCycleOffset(0),
fMaxCycleOffset(0),
fSynched(false)
{}
virtual~JackNetMasterInterface()
......
......@@ -524,7 +524,7 @@ namespace Jack
return res;
case NET_PACKET_ERROR:
// Since sync packet is incorrect, don't decode it and continue with data
// Since sync packet is incorrect, don't decode it and continue with data
break;
default:
......
......@@ -680,7 +680,7 @@ namespace Jack
Cleanup();
}
if (port_num > 0) {
if (port_num > 0) {
int sub_period_bytes_size;
......@@ -937,7 +937,6 @@ namespace Jack
#endif
NetIntAudioBuffer::NetIntAudioBuffer(session_params_t* params, uint32_t nports, char* net_buffer)
: NetAudioBuffer(params, nports, net_buffer)
{
......
......@@ -38,8 +38,8 @@ using namespace std;
#endif
#endif
#define MASTER_PROTOCOL 6
#define SLAVE_PROTOCOL 6
#define MASTER_PROTOCOL 6
#define SLAVE_PROTOCOL 6
#define NET_PACKET_ERROR -2
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment