X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/d172c17ca459379d99ab4cf7ce8fbe097918a6b6..de867f502fd3611678d3ed26f69eb6b141f542fc:/client/util.c?ds=sidebyside diff --git a/client/util.c b/client/util.c index e80f5cc9..81b2d844 100644 --- a/client/util.c +++ b/client/util.c @@ -8,15 +8,26 @@ // utilities //----------------------------------------------------------------------------- -#include +#if !defined(_WIN32) +#define _POSIX_C_SOURCE 199309L // need nanosleep() +#endif + #include "util.h" + +#include +#include +#include +#include +#include +#include +#include "data.h" + #define MAX_BIN_BREAK_LENGTH (3072+384+1) #ifndef _WIN32 #include #include - int ukbhit(void) { int cnt = 0; @@ -42,6 +53,7 @@ int ukbhit(void) } #else + #include int ukbhit(void) { return kbhit(); @@ -591,3 +603,38 @@ void clean_ascii(unsigned char *buf, size_t len) { buf[i] = '.'; } } + + +// Timer functions +#if !defined (_WIN32) +#include + +static void nsleep(uint64_t n) { + struct timespec timeout; + timeout.tv_sec = n/1000000000; + timeout.tv_nsec = n%1000000000; + while (nanosleep(&timeout, &timeout) && errno == EINTR); +} + +void msleep(uint32_t n) { + nsleep(1000000 * n); +} + +#endif // _WIN32 + +// a milliseconds timer for performance measurement +uint64_t msclock() { +#if defined(_WIN32) +#include + struct _timeb t; + if (_ftime_s(&t)) { + return 0; + } else { + return 1000 * t.time + t.millitm; + } +#else + struct timespec t; + clock_gettime(CLOCK_MONOTONIC, &t); + return (t.tv_sec * 1000 + t.tv_nsec / 1000000); +#endif +}