Files
2026-08-24 10:03:24 +08:00

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;
}