From c5306f81a9d3b87df7e16c852f2505ac913193ca Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli (think)" Date: Fri, 8 Nov 2013 14:43:19 +0100 Subject: make dabOutput more object-oriented --- src/dabOutput/dabOutputSimul.cpp | 70 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/dabOutput/dabOutputSimul.cpp (limited to 'src/dabOutput/dabOutputSimul.cpp') diff --git a/src/dabOutput/dabOutputSimul.cpp b/src/dabOutput/dabOutputSimul.cpp new file mode 100644 index 0000000..e53b4ba --- /dev/null +++ b/src/dabOutput/dabOutputSimul.cpp @@ -0,0 +1,70 @@ +#include "dabOutput.h" +#include +#include +#include +#include +#ifdef _WIN32 +# include +# ifdef __MINGW32__ +# define FS_DECLARE_CFG_ARRAYS +# include +# endif +# include +#else +# include +# include +# ifndef O_BINARY +# define O_BINARY 0 +# endif // O_BINARY +#endif + + +int DabOutputSimul::Open(const char* name) +{ +#ifdef _WIN32 + startTime_ = GetTickCount(); +#else + gettimeofday(&startTime_, NULL); +#endif + + return 0; +} + +int DabOutputSimul::Write(void* buffer, int size) +{ + unsigned long current; + unsigned long start; + unsigned long waiting; + +#ifdef _WIN32 + current = GetTickCount(); + start = this->startTime_; + if (current < start) { + waiting = start - current + 24; + Sleep(waiting); + } else { + waiting = 24 - (current - start); + if ((current - start) < 24) { + Sleep(waiting); + } + } + this->startTime_ += 24; +#else + timeval curTime; + gettimeofday(&curTime, NULL); + current = (1000000ul * curTime.tv_sec) + curTime.tv_usec; + start = (1000000ul * this->startTime_.tv_sec) + this->startTime_.tv_usec; + waiting = 24000ul - (current - start); + if ((current - start) < 24000ul) { + usleep(waiting); + } + + this->startTime_.tv_usec += 24000; + if (this->startTime_.tv_usec >= 1000000) { + this->startTime_.tv_usec -= 1000000; + ++this->startTime_.tv_sec; + } +#endif + + return size; +} -- cgit v1.2.3