Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions src/utility.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
#include <errno.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#include "utility.h"
Expand All @@ -23,3 +26,28 @@ float poly_battery_level(const double terms[], const size_t numterms, uint16_t v
percent = 0;
return percent;
}

size_t hexdump(char* out, size_t out_size, unsigned char* data, size_t data_size)
{
size_t i;
size_t used_buf = 0;
int rc;
for (i = 0; i < data_size; ++i) {
if (used_buf >= out_size) {
return 0;
}
rc = snprintf(out + used_buf, out_size - used_buf, "0x%02X ", data[i]);
if (rc < 0) {
#ifdef _WIN32
printf("hexdump formatting failed\n");
#elif __APPLE__
printf("%s\n", strerror(errno));
#else //__linux__
printf("%s\n", strerror_l(errno, NULL));
#endif
} else {
used_buf += rc;
}
}
return i;
}
11 changes: 11 additions & 0 deletions src/utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,14 @@ int map(int x, int in_min, int in_max, int out_min, int out_max);
* @return battery level in percent
*/
float poly_battery_level(const double terms[], const size_t numterms, uint16_t voltage);

/**
* @brief Helper function used during debugging for printing out binary data
*
* @param out buffer to write output example char tmp[128];
* @param out_size sizeof(out)
* @param data data to be represented as hex string
* @param data_size sizeof(data) or sizeof(*data);
* @return 0 on failure or filled size of out
*/
size_t hexdump(char* out, size_t out_size, unsigned char* data, size_t data_size);