mirror of
https://github.com/liquidraver/ZephCore.git
synced 2026-09-01 20:09:17 +00:00
fixed apc text on screen
This commit is contained in:
@@ -68,6 +68,8 @@ WEAK void ui_set_radio_stats(uint32_t packets_rx, uint32_t packets_tx,
|
||||
ARG_UNUSED(packets_rx); ARG_UNUSED(packets_tx); ARG_UNUSED(packets_err);
|
||||
}
|
||||
|
||||
WEAK void ui_refresh_display(void) { }
|
||||
|
||||
WEAK void ui_set_gps_data(bool has_fix, uint8_t sats,
|
||||
int32_t lat_mdeg, int32_t lon_mdeg, int32_t alt_mm)
|
||||
{
|
||||
|
||||
@@ -99,6 +99,12 @@ void ui_set_radio_runtime(int8_t effective_tx_power, bool apc_enabled,
|
||||
void ui_set_radio_stats(uint32_t packets_rx, uint32_t packets_tx,
|
||||
uint32_t packets_err);
|
||||
|
||||
/**
|
||||
* Request an immediate display redraw for the current UI state.
|
||||
* No-op on headless builds.
|
||||
*/
|
||||
void ui_refresh_display(void);
|
||||
|
||||
/**
|
||||
* Update GPS data for display.
|
||||
*/
|
||||
|
||||
@@ -141,6 +141,7 @@ K_TIMER_DEFINE(housekeeping_timer, housekeeping_timer_fn, NULL);
|
||||
/* Forward declarations */
|
||||
#ifdef ZEPHCORE_LORA
|
||||
static RepeaterMesh *repeater_mesh_ptr;
|
||||
static void refresh_repeater_ui_radio_state(bool redraw);
|
||||
#endif
|
||||
|
||||
/* Print string to USB serial */
|
||||
@@ -233,6 +234,7 @@ static void process_cli_commands(void)
|
||||
while (repeater_mesh_ptr && k_msgq_get(&cli_cmd_queue, &c, K_NO_WAIT) == 0) {
|
||||
cli_reply_buf[0] = '\0';
|
||||
repeater_mesh_ptr->handleCommand(0, c.buf, cli_reply_buf);
|
||||
refresh_repeater_ui_radio_state(true);
|
||||
if (cli_reply_buf[0] != '\0') {
|
||||
cli_print("\r\n -> ");
|
||||
cli_print(cli_reply_buf);
|
||||
@@ -358,6 +360,55 @@ static mesh::SimpleMeshTables mesh_tables;
|
||||
|
||||
/* RepeaterMesh requires: board, radio, ms_clock, rng, rtc, tables */
|
||||
static RepeaterMesh repeater_mesh(zephyr_board, lora_radio, ms_clock, zephyr_rng, rtc_clock, mesh_tables);
|
||||
|
||||
static void refresh_repeater_ui_radio_state(bool redraw)
|
||||
{
|
||||
if (!repeater_mesh_ptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
ui_set_radio_params(
|
||||
lora_radio.getActiveFrequencyHz(),
|
||||
lora_radio.getActiveSpreadingFactor(),
|
||||
lora_radio.getActiveBandwidthKHzX10(),
|
||||
lora_radio.getActiveCodingRate(),
|
||||
lora_radio.getConfiguredTxPower(),
|
||||
lora_radio.getNoiseFloor());
|
||||
|
||||
bool apc_enabled = false;
|
||||
int8_t apc_reduction = 0;
|
||||
int16_t apc_margin_x10 = 0;
|
||||
uint8_t apc_target = repeater_mesh_ptr->getNodePrefs()->apc_margin;
|
||||
|
||||
#ifdef CONFIG_ZEPHCORE_APC
|
||||
apc_enabled = repeater_mesh_ptr->isAPCEnabled();
|
||||
apc_reduction = repeater_mesh_ptr->getAPCReduction();
|
||||
apc_margin_x10 = (int16_t)(repeater_mesh_ptr->getAPCMargin() * 10.0f);
|
||||
apc_target = repeater_mesh_ptr->getAPCTargetMargin();
|
||||
#endif
|
||||
|
||||
ui_set_radio_runtime(
|
||||
lora_radio.getEffectiveTxPower(),
|
||||
apc_enabled,
|
||||
apc_reduction,
|
||||
apc_margin_x10,
|
||||
apc_target,
|
||||
lora_radio.getActiveSyncWord(),
|
||||
lora_radio.getActivePreambleLength(),
|
||||
lora_radio.isRxDutyCycleEnabled(),
|
||||
lora_radio.isRadioReady(),
|
||||
lora_radio.isInRecvMode(),
|
||||
lora_radio.isTxActive());
|
||||
|
||||
ui_set_radio_stats(
|
||||
lora_radio.getPacketsRecv(),
|
||||
lora_radio.getPacketsSent(),
|
||||
lora_radio.getPacketsRecvErrors());
|
||||
|
||||
if (redraw) {
|
||||
ui_refresh_display();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Repeater event loop */
|
||||
@@ -425,17 +476,9 @@ static void repeater_event_loop(void)
|
||||
ui_set_clock(rtc_clock.getCurrentTime());
|
||||
|
||||
#ifdef ZEPHCORE_LORA
|
||||
/* Refresh radio params (noise floor changes from calibration) */
|
||||
if (repeater_mesh_ptr) {
|
||||
NodePrefs *p = repeater_mesh_ptr->getNodePrefs();
|
||||
ui_set_radio_params(
|
||||
(uint32_t)(p->freq * 1000000.0f + 0.5f),
|
||||
p->sf,
|
||||
(uint16_t)(p->bw * 10.0f + 0.5f),
|
||||
p->cr,
|
||||
p->tx_power_dbm,
|
||||
lora_radio.getNoiseFloor());
|
||||
}
|
||||
/* Refresh live radio/APC state (noise floor, TX power
|
||||
* reduction, RX/TX mode, packet counters). */
|
||||
refresh_repeater_ui_radio_state(true);
|
||||
|
||||
/* Battery is now refreshed lazily from ui_pages_render() with
|
||||
* a 30 s freshness guard — no periodic ADC fire here. */
|
||||
@@ -588,13 +631,7 @@ int main(void)
|
||||
|
||||
/* Feed initial UI state from loaded prefs */
|
||||
ui_set_node_name(prefs->node_name);
|
||||
ui_set_radio_params(
|
||||
(uint32_t)(prefs->freq * 1000000.0f + 0.5f), /* MHz → Hz */
|
||||
prefs->sf,
|
||||
(uint16_t)(prefs->bw * 10.0f + 0.5f), /* kHz → 0.1 kHz */
|
||||
prefs->cr,
|
||||
prefs->tx_power_dbm,
|
||||
lora_radio.getNoiseFloor());
|
||||
refresh_repeater_ui_radio_state(false);
|
||||
ui_set_battery_provider(get_battery_mv);
|
||||
ui_set_battery(zephyr_board.getBattMilliVolts(), 0);
|
||||
ui_set_gps_available(gps_is_available());
|
||||
|
||||
Reference in New Issue
Block a user