Files
espcpputils/src/espstrutils.cpp

122 lines
3.4 KiB
C++
Raw Normal View History

2021-04-07 22:22:55 +02:00
#include "espstrutils.h"
2021-08-09 16:38:13 +02:00
#include "sdkconfig.h"
#define LOG_LOCAL_LEVEL CONFIG_ESPCPPUTILS_LOG_LOCAL_LEVEL
2021-09-08 01:48:20 +02:00
#include <assert.h>
// esp-idf includes
#include <esp_log.h>
2021-09-08 01:48:20 +02:00
#include <sodium/utils.h>
// 3rdparty lib includes
#include <fmt/core.h>
// local includes
#include "futurecpp.h"
2021-07-15 17:04:27 +02:00
2021-04-07 22:22:55 +02:00
namespace espcpputils {
namespace {
constexpr const char * const TAG = "ESPCPPUTILS";
}
2021-04-07 22:22:55 +02:00
std::string toString(sntp_sync_mode_t val)
{
switch (val)
{
case SNTP_SYNC_MODE_IMMED: return "IMMED";
case SNTP_SYNC_MODE_SMOOTH: return "SMOOTH";
default:
ESP_LOGW(TAG, "unknown sntp_sync_mode_t(%i)", std::to_underlying(val));
return fmt::format("Unknown sntp_sync_mode_t({})", std::to_underlying(val));
2021-04-07 22:22:55 +02:00
}
}
std::string toString(sntp_sync_status_t val)
{
switch (val)
{
case SNTP_SYNC_STATUS_RESET: return "RESET";
case SNTP_SYNC_STATUS_COMPLETED: return "COMPLETED";
case SNTP_SYNC_STATUS_IN_PROGRESS: return "IN_PROGRESS";
default:
ESP_LOGW(TAG, "unknown sntp_sync_status_t(%i)", std::to_underlying(val));
return fmt::format("Unknown sntp_sync_status_t({})", std::to_underlying(val));
}
}
std::string toString(esp_log_level_t val)
{
switch (val)
{
case ESP_LOG_NONE: return "NONE";
case ESP_LOG_ERROR: return "ERROR";
case ESP_LOG_WARN: return "WARN";
case ESP_LOG_INFO: return "INFO";
case ESP_LOG_DEBUG: return "DEBUG";
case ESP_LOG_VERBOSE: return "VERBOSE";
default:
ESP_LOGW(TAG, "unknown esp_log_level_t(%i)", std::to_underlying(val));
return fmt::format("Unknown esp_log_level_t({})", std::to_underlying(val));
}
}
std::string toString(esp_reset_reason_t val)
{
switch (val)
{
case ESP_RST_UNKNOWN: return "UNKNOWN";
case ESP_RST_POWERON: return "POWERON";
case ESP_RST_EXT: return "EXT";
case ESP_RST_SW: return "SW";
case ESP_RST_PANIC: return "PANIC";
case ESP_RST_INT_WDT: return "INT_WDT";
case ESP_RST_TASK_WDT: return "TASK_WDT";
case ESP_RST_WDT: return "WDT";
case ESP_RST_DEEPSLEEP: return "DEEPSLEEP";
case ESP_RST_BROWNOUT: return "BROWNOUT";
case ESP_RST_SDIO: return "SDIO";
default:
ESP_LOGW(TAG, "unknown esp_reset_reason_t(%i)", std::to_underlying(val));
return fmt::format("Unknown esp_reset_reason_t({})", std::to_underlying(val));
}
}
2021-09-08 01:48:20 +02:00
std::string toHexString(std::basic_string_view<unsigned char> buf)
{
std::string hex(buf.size() * 2 + 1, {});
assert(hex.size() == buf.size() * 2 + 1);
2021-09-16 17:43:46 +02:00
sodium_bin2hex(hex.data(), hex.size(), buf.data(), buf.size());
2021-09-08 01:48:20 +02:00
hex.resize(hex.size() - 1);
assert(hex.size() == buf.size() * 2);
return hex;
}
2021-11-04 01:41:02 +01:00
tl::expected<std::basic_string_view<unsigned char>, std::string> fromHexString(std::string_view str)
{
const auto binMaxLen = (str.size()+1)/2;
uint8_t binBuf[binMaxLen];
size_t binLen;
if (const auto result = sodium_hex2bin(binBuf, binMaxLen, str.data(), str.size(), NULL, &binLen, NULL); result != 0)
{
ESP_LOGW(TAG, "sodium_hex2bin() failed with %i", result);
return tl::make_unexpected(fmt::format("sodium_hex2bin() failed with {}", result));
}
if (binLen != str.size() / 2)
{
ESP_LOGW(TAG, "invalid hex");
return tl::make_unexpected("invalid hex");
}
const std::basic_string_view<unsigned char> bin{binBuf, binLen};
return bin;
}
2021-04-07 22:22:55 +02:00
} // namespace espcpputils