Mercurial > hg > beaglert
diff include/ClockSync.h @ 135:e77e2e712fbc ClockSync
To work with the ClockSync plugin
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Sat, 12 Sep 2015 20:05:55 +0100 |
parents | |
children | 44d07fa9bd03 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/ClockSync.h Sat Sep 12 20:05:55 2015 +0100 @@ -0,0 +1,81 @@ +#ifndef CLOCK_SYNC_H_INCLUDED +#define CLOCK_SYNC_H_INCLUDED +#include "stats.hpp" +#include "UdpServer.h" +#include "UdpClient.h" +#include "Clock.h" +#include "VirtualClock.h" + +enum ptpMessageConsts{ + kSyncMessageLength=sizeof(myClock_t)+sizeof(int) +}; +enum ptpMessageType{ + kSync=0, + kFollowUp=1, + kDelayReq=2, + kDelayResp=3, + kNone=4 +}; + +enum ptpStatus{ + kSyncSent, + kFollowUpSent, + kDelayReqSent, + kDelayRespSent +}; + +class ClockSync{ +private: + MovingAverage<double> movingAverage; + UdpServer server; + UdpClient client; + bool slave; + int bufferLength; + int clockSyncType; + int expectedClockSyncType; + myClock_t clockSyncTimestamp; + myClock_t localTimestamp; + myClock_t T1; + myClock_t T1p; + myClock_t T2; + myClock_t T2p; + int receiveLoopSleepUs; + int receiveLoopTimeout; + char buffer[kSyncMessageLength]; + VirtualClock *virtualClock; +public: + ClockSync(){}; + ClockSync(bool thisIsSlave, int aPort, VirtualClock &aVirtualClock); + void init(bool thisIsSlave, int aPort, VirtualClock &aVirtualClock); + void* getBuffer(); + bool isSlave(); + bool isMaster(); + int getType(); + myClock_t getTimestamp(); + void setVirtualClock(VirtualClock &aVirtualClock); + void setPort(int aPort); + void setType(int clockSyncType); + void setTimestamp(myClock_t timestamp); + void print(); + /** + * sends a clockSync without blocking, checks results and returns the timestamp + * immediately after the clockSync has been sent or -1 if there was an error or timeout expired. + */ + myClock_t send(); + /** + * receives a clockSync without blocking, checks results and returns the timestamp + * immediately after the clockSync has been received, or -1 if there was an error + * or 0 if timeout expired. + */ + myClock_t receive(); + int masterSendSync(); + int receiveLoop(); + int slaveHandleMessage(); + int masterHandleMessage(); + int sendReceiveLoop(); + operator void*(){ + return getBuffer(); + } +}; + +#endif /* CLOCK_SYNC_H_INCLUDED */ \ No newline at end of file