Mercurial > hg > beaglert
view include/NetworkSend.h @ 233:18d03901f866 mergingClockSync
Turned gShouldStop into int
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Sun, 10 Apr 2016 03:20:52 +0200 |
parents | c42a6b4dc2d4 |
children | e4392164b458 |
line wrap: on
line source
//scope.cpp #ifndef SCOPE_H_ #define SCOPE_H_ #ifdef USE_JUCE #include <JuceHeader.h> #else #include <BeagleRT.h> #include <rtdk.h> #include <cmath> #include <UdpClient.h> #include <vector> #include <string> extern int gShouldStop; #endif /* USE_JUCE */ #define NETWORK_AUDIO_BUFFER_SIZE 302 #define UDP_BUFFER_HEADER_CHANNEL_INDEX 0 #define UDP_BUFFER_HEADER_TIMESTAMP_INDEX 1 #define UDP_BUFFER_HEADER_LENGTH 2 struct NetworkBuffer{ int channelNumber; int numBuffers; int writeBuffer; int readBuffer; int writePointer; float** buffers; bool* doneOnTime; bool* readyToBeSent; bool enabled; int sampleCount; static const int bufferLength=NETWORK_AUDIO_BUFFER_SIZE; static const int headerLength=UDP_BUFFER_HEADER_LENGTH; static const int headerChannelIndex=UDP_BUFFER_HEADER_CHANNEL_INDEX; static const int headerTimestampIndex=UDP_BUFFER_HEADER_TIMESTAMP_INDEX; }; #ifdef USE_JUCE class NetworkSend: public Thread { #else class NetworkSend { #endif /* USE_JUCE */ float sampleRate; #ifdef USE_JUCE DatagramSocket udpClient; int sleepTimeMs; String remoteHostname; int remotePortNumber; #else UdpClient udpClient; bool isThreadRunning(); static int sleepTimeMs; static bool threadShouldExit(); static bool threadIsExiting; static bool threadRunning; static bool staticConstructed; static void staticConstructor(); static AuxiliaryTask sendDataTask; //TODO: allow different AuxiliaryTasks for different priorities (e.g.: audio vs scope) static std::vector<NetworkSend *> objAddrs; #endif /* USE_JUCE */ void dealloc(); public: NetworkBuffer channel; #ifdef USE_JUCE NetworkSend(const String &threadName); #else NetworkSend(); #endif ~NetworkSend(); void setup(float aSampleRate, int blockSize, int aChannelNumber, int aPort, const char *aServer); void cleanup(); void sendData(); void log(float value); void setPort(int aPort); void setServer(const char* aServer); void setChannelNumber(int aChannelNumber); int getChannelNumber(); int getTimestamp(); #ifdef USE_JUCE void run(); #else static int getNumInstances(); static void sendAllData(); static void startThread(); static void stopThread(); static void run(); #endif /* USE_JUCE */ }; #ifdef USE_JUCE #else /** * An array of NetworkSend objects with some default parameters * * All sending on the same port (defaults to 9999) * All sending to the same server (defaults to 127.0.0.1) */ class Scope { std::vector<NetworkSend> channels; void deallocate(); public: Scope(int aNumChannels); ~Scope(); void log(int channel, float value); void setup(); void setup(float sampleRate, int aPort, const char* aServer); void sendData(); void setPort(int port); void setPort(int channel, int port); int getNumChannels(); }; #endif /* USE_JUCE */ #endif /* SCOPE_H */