diff options
author | Matthias P. Braendli (think) <matthias@mpb.li> | 2013-11-08 14:43:19 +0100 |
---|---|---|
committer | Matthias P. Braendli (think) <matthias@mpb.li> | 2013-11-08 14:43:19 +0100 |
commit | c5306f81a9d3b87df7e16c852f2505ac913193ca (patch) | |
tree | 40716835305aa871cae5a5b3c805f0c673f47108 /src/dabOutput/dabOutputSimul.cpp | |
parent | 573c7b63092618ecae86847d9d0a143801db0780 (diff) | |
download | dabmux-c5306f81a9d3b87df7e16c852f2505ac913193ca.tar.gz dabmux-c5306f81a9d3b87df7e16c852f2505ac913193ca.tar.bz2 dabmux-c5306f81a9d3b87df7e16c852f2505ac913193ca.zip |
make dabOutput more object-oriented
Diffstat (limited to 'src/dabOutput/dabOutputSimul.cpp')
-rw-r--r-- | src/dabOutput/dabOutputSimul.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
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 <cstring> +#include <cstdio> +#include <fcntl.h> +#include <limits.h> +#ifdef _WIN32 +# include <io.h> +# ifdef __MINGW32__ +# define FS_DECLARE_CFG_ARRAYS +# include <winioctl.h> +# endif +# include <sdci.h> +#else +# include <unistd.h> +# include <sys/time.h> +# 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; +} |