annotate core/ClockSyncThread.cpp @ 151:e9c9404e3d1f ClockSync

Pff partially working. No PID. When setting the audio clock on the bbb to 44098 the master and slave clock keep diverging instead of converging ...
author Giulio Moro <giuliomoro@yahoo.it>
date Tue, 22 Sep 2015 04:10:07 +0100
parents 134bff10e561
children 8f98b32d0e23
rev   line source
giuliomoro@135 1 #include "ClockSyncThread.h"
giuliomoro@135 2 #ifdef USE_JUCE
giuliomoro@135 3 #else //declare static members TODO: rather refactor this similar to other threads so that only run and clockSyncTask are static
giuliomoro@135 4 myClock_t ClockSyncThread::lastTime; // Used for clock synchronization
giuliomoro@135 5 bool ClockSyncThread::listening;
giuliomoro@135 6 ClockSync ClockSyncThread::clockSync;
giuliomoro@135 7 VirtualClock* ClockSyncThread::virtualClock;
giuliomoro@135 8 bool ClockSyncThread::threadIsExiting;
giuliomoro@135 9 AuxiliaryTask ClockSyncThread::clockSyncTask;
giuliomoro@135 10 #endif
giuliomoro@135 11 #ifdef USE_JUCE
giuliomoro@135 12 ClockSyncThread::ClockSyncThread(const String &threadName) :
giuliomoro@135 13 Thread(threadName)
giuliomoro@135 14 #else
giuliomoro@135 15 ClockSyncThread::ClockSyncThread()
giuliomoro@135 16 #endif /* USE_JUCE */
giuliomoro@135 17 {
giuliomoro@135 18 };
giuliomoro@135 19 ClockSyncThread::~ClockSyncThread(){
giuliomoro@135 20 #ifdef USE_JUCE
giuliomoro@135 21 stopThread(1000);
giuliomoro@135 22 #else
giuliomoro@135 23 stopThread();
giuliomoro@135 24 #endif /* USE_JUCE */
giuliomoro@135 25 }
giuliomoro@135 26 void ClockSyncThread::init(bool isSlave, int aPort, VirtualClock &aVirtualClock){
giuliomoro@135 27 setVirtualClock(aVirtualClock);
giuliomoro@135 28 listening=false;
giuliomoro@135 29 clockSync.init(isSlave, aPort, *virtualClock);
giuliomoro@135 30 #ifdef USE_JUCE
giuliomoro@135 31 startThread(5);
giuliomoro@135 32 #else
giuliomoro@135 33 threadIsExiting=false;
giuliomoro@139 34 clockSyncTask=BeagleRT_createAuxiliaryTask(&ClockSyncThread::run,60, "clockSyncTask");
giuliomoro@135 35 //TODO: the thread cannot be started here at the moment because init() is called in setup(), where tasks cannot be scheduled
giuliomoro@135 36 #endif /* USE_JUCE */
giuliomoro@135 37 }
giuliomoro@135 38
giuliomoro@135 39 #ifdef USE_JUCE
giuliomoro@135 40 #else
giuliomoro@135 41 void ClockSyncThread::startThread(){
giuliomoro@135 42 BeagleRT_scheduleAuxiliaryTask(clockSyncTask);
giuliomoro@135 43 }
giuliomoro@135 44 void ClockSyncThread::stopThread(){
giuliomoro@135 45 threadIsExiting=true;
giuliomoro@135 46 }
giuliomoro@135 47 bool ClockSyncThread::threadShouldExit(){
giuliomoro@135 48 return(gShouldStop || threadIsExiting );
giuliomoro@135 49 }
giuliomoro@135 50 #endif /* USE_JUCE */
giuliomoro@135 51
giuliomoro@135 52 void ClockSyncThread::setVirtualClock(VirtualClock &aVirtualClock){
giuliomoro@135 53 virtualClock=&aVirtualClock;
giuliomoro@135 54 };
giuliomoro@149 55 #ifndef USE_JUCE
giuliomoro@149 56 extern I2c_Codec* gAudioCodec;
giuliomoro@149 57 #endif
giuliomoro@135 58 void ClockSyncThread::run(){
giuliomoro@149 59 printf("variable=[");
giuliomoro@135 60 while(!threadShouldExit()){
giuliomoro@149 61 static int count = 0;
giuliomoro@135 62 clockSync.sendReceiveLoop();
giuliomoro@149 63 #ifndef USE_JUCE
giuliomoro@149 64 // if (count == 300){
giuliomoro@149 65 // printf("0 0 0\n");
giuliomoro@149 66 // gAudioCodec->setAudioSamplingRate(44101);
giuliomoro@149 67 // }
giuliomoro@149 68 #endif
giuliomoro@149 69 count++;
giuliomoro@135 70 // double now=virtualClock->getNow();
giuliomoro@139 71 // printf("th(end+1)=%f;\n", now);
giuliomoro@135 72 // printf("act(end+1)=%lld;\n", Clock::getTimeUs());
giuliomoro@135 73 }
giuliomoro@141 74 printf("];\n");
giuliomoro@141 75 // printf("Thread is not running \n");
giuliomoro@135 76 }