107 lines
2.7 KiB
C++

#include "Utils.h"
#include <ctype.h>
#include <tt_app_alertdialog.h>
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);
}
}