74 lines
1.3 KiB
C
74 lines
1.3 KiB
C
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#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;
|
|
}
|
|
|
|
|