Mercurial > hg > beaglert
diff core/NetworkSend.cpp @ 120:cdd441a304a9 scope-refactoring
Added read to interleaved buffer
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Fri, 21 Aug 2015 15:52:37 +0100 |
parents | c692827083e1 |
children | cce58e6ec2a2 |
line wrap: on
line diff
--- a/core/NetworkSend.cpp Fri Aug 21 15:21:34 2015 +0100 +++ b/core/NetworkSend.cpp Fri Aug 21 15:52:37 2015 +0100 @@ -47,7 +47,6 @@ void NetworkSend::setup(float aSampleRate){ setup(aSampleRate, 0, 9999, "192.168.7.1");//channelNumber=0 } - void NetworkSend::setup(float aSampleRate, int aChannelNumber, int aPort, const char *aServer){ staticConstructor(); //FIXME: ideally this should be in the constructor, but this is not currently possible //because of limitations in BeagleRT_createAuxiliaryTask() @@ -59,7 +58,7 @@ setChannelNumber(aChannelNumber); setPort(aPort); setServer(aServer); - printf("Channel %d is sending messages to : %s:%d at %fHz\n", getChannelNumber(), aServer, aPort, aSampleRate); + printf("Channel %d is sending messages to: %s:%d at %fHz\n", getChannelNumber(), aServer, aPort, aSampleRate); } void NetworkSend::log(float value){ //TODO: add a vectorized version of this method @@ -72,7 +71,12 @@ channel.activeBuffer=!channel.activeBuffer; //switch buffer channel.doneOnTime=false; BeagleRT_scheduleAuxiliaryTask(NetworkSend::sendDataTask); //send the buffer - //TODO: maybe we should have transmitAudioTask running in a loop instead of scheduling it multiple times? + // TODO: maybe we should have transmitAudioTask running in a loop instead of scheduling it multiple times? + // The current solution allows to minimize latency when a single channel is used, as there is no inherent + // rt_task_sleep in the thread, as we are signaling it every time. + // Although, there is a possible race condition: if the auxiliaryTask is scheduled by channel 0, + // it might still be executing when channel 1 schedules it. But if the AuxTask has already skipped + // over channel 1, then we are at risk that channel 1 never gets sent. } if(channel.index==channel.headerLength){ channel.buffers[channel.activeBuffer][0] = (float)channel.channelNumber; //TODO: this could actually be done just once in setup() @@ -138,8 +142,9 @@ channels[n].setPort(port); } } -void Scope::setPort(int channel, int port){ - channels[channel].setPort(port); +void Scope::setPort(int channel, int aPort){ + channels[channel].setPort(aPort); + printf("Channel %d is now sending to port %d\n", channel, aPort); } int Scope::getNumChannels(){