12 return "IMU ISM330DHCX";
14 return "high-g H3LIS100DL";
18 return "ethernet W5500";
20 return "radio SX1262";
22 return "GPS MAX-M10S";
41 return "NOT CONFIGURED";
43 return "NOT IMPLEMENTED";
66 if (t->len + 1 >= t->cap) {
71 int n = vsnprintf(t->buf + t->len, t->cap - t->len, fmt, ap);
75 if (t->len >= t->cap) {
83 memset(
r, 0,
sizeof(*
r));
85 text_t t = {
r->text,
sizeof(
r->text), 0};
86 put(&t,
"STAR flight computer self-test, t = %lu.%lu s\n",
87 (
unsigned long)(now_ms / 1000U),
88 (
unsigned long)(now_ms % 1000U / 100U));
91 r->required_failed = 1;
92 put(&t,
" self-test did not run (bad config)\n");
100 (uint16_t)(
r->result_bits | (1U << d->
device_id));
102 r->required_failed++;
104 r->optional_failed++;
112 put(&t,
" diag 0x%lx",
119 while (t.len > 0 && t.buf[t.len - 1] ==
' ') {
120 t.buf[--t.len] =
'\0';
129 put(&t,
" %-18s %u.%02u V %s\n",
"battery",
battery.mv / 1000U,
136 if (
r->required_failed || battery_bad) {
143 put(&t,
" %-18s %s (%u required, %u optional failed)\n",
"verdict",
145 (
unsigned)
r->optional_failed);
const char * battery_state_name(battery_state_t state)
static const char * result_name(self_test_result_t r)
const char * boot_verdict_name(boot_verdict_t v)
static const char * device_name(uint16_t id)
static void put(text_t *t, const char *fmt,...)
void boot_report_build(boot_report_t *r, const self_test_status_t *s, battery_t battery, uint32_t now_ms)
*brief user defined string literal for JSON values *sa std::size_t n
@ SELF_TEST_DEVICE_ETHERNET
@ SELF_TEST_DEVICE_HIGH_G
@ SELF_TEST_DEVICE_BAROMETER
#define SELF_TEST_MAX_DEVICES
@ SELF_TEST_NOT_CONFIGURED
@ SELF_TEST_NOT_IMPLEMENTED
self_test_result_t result
self_test_device_status_t devices[SELF_TEST_MAX_DEVICES]
static self_test_battery_t battery(void *context, uint32_t now_ms, uint32_t budget_ms)