mirror of
https://github.com/liquidraver/ZephCore.git
synced 2026-10-15 20:49:53 +00:00
- gps: servers honour gps_enabled at boot (was lost on reboot; zc.gps_set upgrades older prefs to on once); sleep lock only while acquiring; gps off works on boards without a power line (UART sleep); UI toggles and fixes handled on the main thread; configure only after a good init; observer parks its GPS; one interval clamp (clampGpsInterval); one nav-mode knob (room servers on Air530Z now stationary); GNSS UARTE from DT - gps: split into ZephyrGPSManager / gps_power / gps_module_cfg (+gps_internal.h); dead driver branches, gps_get_diag, sats_* removed - clock: ZephyrRTCClock writes the hardware RTC itself (clkreboot now resets it); MESH_EVENT_RTC_SAVE gone - power: one power-off path (zephcore_power_off, ZephyrBoard::powerOff), poweroff/shutdown CLI, get pwrmgt.*, crash record kept across reboot, battery reading cached 10 s, fuel gauge on the current API - telemetry: upstream SensorManager + CayenneLPP (rounded to nearest), one builder for all roles; per-sensor channels, MCU temp always, guest gating and inverse mask on servers; sensor list/get/set work; BME280/BMP280 also probed at 0x77 - CLI: gps in upstream's form, get gps detail, gps sync
48 lines
1.1 KiB
C++
48 lines
1.1 KiB
C++
/*
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#include "ZephyrRTCClock.h"
|
|
#include "ZephyrRTCDiscover.h"
|
|
#include <zephyr/kernel.h>
|
|
#include <zephyr/devicetree.h>
|
|
|
|
namespace mesh {
|
|
|
|
#if DT_HAS_COMPAT_STATUS_OKAY(zephcore_rtc_i2c)
|
|
/* One clock per build. The work reads the time when it runs, so any number
|
|
* of sets before it runs are one write, of the latest time. */
|
|
static ZephyrRTCClock *s_saved_clock;
|
|
|
|
static void rtc_save_work_fn(struct k_work *work)
|
|
{
|
|
ARG_UNUSED(work);
|
|
zephcore_rtc_save(s_saved_clock->getCurrentTime());
|
|
}
|
|
|
|
static K_WORK_DEFINE(s_rtc_save_work, rtc_save_work_fn);
|
|
#endif
|
|
|
|
uint32_t ZephyrRTCClock::getCurrentTime()
|
|
{
|
|
uint32_t uptime_sec = (uint32_t)(k_uptime_get() / 1000);
|
|
return epoch_offset + uptime_sec;
|
|
}
|
|
|
|
void ZephyrRTCClock::seedCurrentTime(uint32_t time)
|
|
{
|
|
uint32_t uptime_sec = (uint32_t)(k_uptime_get() / 1000);
|
|
epoch_offset = time - uptime_sec;
|
|
}
|
|
|
|
void ZephyrRTCClock::setCurrentTime(uint32_t time)
|
|
{
|
|
seedCurrentTime(time);
|
|
#if DT_HAS_COMPAT_STATUS_OKAY(zephcore_rtc_i2c)
|
|
s_saved_clock = this;
|
|
k_work_submit(&s_rtc_save_work);
|
|
#endif
|
|
}
|
|
|
|
} /* namespace mesh */
|