#include "Utils.h" #include #include void crash(const char* const message) { tt_app_alertdialog_start("RadioSet has crashed!", message, nullptr, 0); } void crashassert(bool assertion, const char* const message) { if (!assertion) { crash(message); } } void hexdump(Str& out, const uint8_t* data, size_t size) { out.clear(); for (size_t i = 0; i < size; ++i) { out.appendf("%02X ", data[i]); } } bool isPrintable(const uint8_t* data, size_t size) { for (size_t i = 0; i < (size - 1); ++i) { if (!isprint(data[i])) { return false; } } return true; } char *const toString(Modulation m) { switch (m) { case MODULATION_NONE: return "None"; case MODULATION_LORA: return "LoRa"; case MODULATION_FSK: return "FSK"; case MODULATION_LRFHSS: return "LR-FHSS"; default: break; } crash("Unknown modulation passed."); return "Unknown"; } char *const toString(RadioParameter p) { switch (p) { case RADIO_POWER: return "Power"; case RADIO_BOOSTEDGAIN: return "RX Boosted Gain"; case RADIO_FREQUENCY: return "Center Frequency"; case RADIO_BANDWIDTH: return "Bandwidth"; case RADIO_SPREADFACTOR: return "Spread Factor"; case RADIO_CODINGRATE: return "Coding Rate"; case RADIO_SYNCWORD: return "Sync Word"; case RADIO_PREAMBLES: return "Preamble Length"; case RADIO_FREQDIV: return "Frequency Deviation"; case RADIO_DATARATE: return "Data Rate"; case RADIO_ADDRWIDTH: return "Address Width"; case RADIO_NARROWGRID: return "Narrow Grid"; default: break; } crash("Unknown parameter passed."); return "Unknown"; } void clownvomit(lv_obj_t *obj) { static auto rng = []() { static int color = 0xCCC0FE; const int a = 4711; const int m = 0x10001; color = (a * color) % m; return color; }; const int darken = 0x0E0E0E; const int lighten = 0xFEFEFE; lv_obj_set_style_bg_color(obj, lv_color_hex(rng() & darken), 0); uint32_t i; for(i = 0; i < lv_obj_get_child_count(obj); i++) { auto light = lv_color_lighten(lv_color_hex(rng()), 100); auto dark = lv_color_darken(lv_color_hex(rng()), 100); lv_obj_t * child = lv_obj_get_child(obj, i); lv_obj_set_style_bg_color(child, dark, 0); lv_obj_set_style_border_color(child, light, 0); lv_obj_set_style_border_width(child, 1, 0); clownvomit(child); } }