aboutsummaryrefslogtreecommitdiffstats
path: root/src/dabOutput/dabOutputSimul.cpp
diff options
context:
space:
mode:
authorMatthias P. Braendli (think) <matthias@mpb.li>2013-11-08 14:43:19 +0100
committerMatthias P. Braendli (think) <matthias@mpb.li>2013-11-08 14:43:19 +0100
commitc5306f81a9d3b87df7e16c852f2505ac913193ca (patch)
tree40716835305aa871cae5a5b3c805f0c673f47108 /src/dabOutput/dabOutputSimul.cpp
parent573c7b63092618ecae86847d9d0a143801db0780 (diff)
downloaddabmux-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.cpp70
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;
+}