#include #include #include "dataserver_utils.h" /*simple hex dump, small data only*/ int d2s(char *s, int ls, uint8_t *buf, size_t size) { int i = 0; char tmp[8]; int ret; int off = 0; s[0] = '\0'; /** * format: [19 20 21 22/. !"] */ for (; i < size; i++) { if ((i + 1) < size) ret = snprintf(tmp, sizeof(tmp), "%.2x ", buf[i]); else ret = snprintf(tmp, sizeof(tmp), "%.2x", buf[i]); if ((off + ret + 1) <= ls) { memcpy(s + off, tmp, ret + 1); off += ret; } } for (i = 0; i < size; i++) { uint8_t c = buf[i]; if (c < 0x20 || c >= 0x7f) c = '.'; ret = snprintf(tmp, sizeof(tmp), "%c", c); if ((off + ret + 1) <= ls) { memcpy(s + off, tmp, ret + 1); off += ret; } } return 0; } int ds_get_timespec_timeout(int timeout_ms, struct timespec *ts) { struct timespec ots; int left, diff; clock_gettime(CLOCK_MONOTONIC, &ots); ts->tv_sec = ots.tv_sec + timeout_ms / 1000; ts->tv_nsec = ots.tv_nsec; left = timeout_ms % 1000; left *= 1000000; diff = 1000000000 - ots.tv_nsec; if (diff <= left) { ts->tv_sec++; ts->tv_nsec = left-diff; } else { ts->tv_nsec += left; } return 0; }