diag: trace RTC synchronization and WSS clock state

This commit is contained in:
chenjintao
2026-10-26 11:55:40 +08:00
parent b2c78208bf
commit c53a117368
14 changed files with 439 additions and 4 deletions
+1
View File
@@ -12,6 +12,7 @@ MAKEFILE_PATH :=$(subst $(strip \),/,$(abspath $(lastword $(MAKEFILE_LIST))))
SRC_FILES+= \
quec_kernel_shim_api.c \
ql_user_api_map.c \
talkingq_time_diag.c \
#-------------------------------------------------------------------------------
@@ -30,6 +30,7 @@ WHEN WHO WHAT, WHERE, WHY
#include "ql_keypad.h"
#include "ql_rtc.h"
#include "ql_time.h"
#include "../../../ql-config/config/talkingq_time_diag.h"
#include "ql_power.h"
#include "ql_nw.h"
#include "ql_platform.h"
@@ -103,6 +104,7 @@ ql_open_api_list vUserAPITable[] __attribute__((used, section("DDR_USER_API_TABL
{
{0x60BCEA5A, (void*)ql_user_api_map_test},
{0xFFFFFFFF, (void*)quec_kernel_api_test},
{TALKINGQ_TIME_DIAG_API_HASH, (void *)talkingq_time_diag_snapshot_v1},
#ifdef QL_MBEDTLS
/************************************************************************************************
@@ -0,0 +1,80 @@
#include <stdio.h>
#include <string.h>
#include "ql_type.h"
#include "quec_cust_feature.h"
#include "pmic.h"
#include "pmic_rtc.h"
#include "quec_rtc.h"
#include "ql_rtos.h"
#include "../../../ql-config/config/talkingq_time_diag.h"
/* SDK globals are linked by name, never by firmware-specific RAM addresses. */
extern unsigned char m_rtc_app_sys_keeping_synced;
extern PMIC_RTC_OFFSET_STORAGE m_pmic_rtc_offset_storage_type;
#ifdef NTP
extern int get_ntp_time_type(void);
extern int GetNTPStatus(void);
extern int talkingq_ntp_diag_ready(void);
#endif
#ifdef QUEC_GNSS_NTP
extern int quec_get_rtc_status(void);
extern int quec_get_nw_status(void);
extern char *get_ntp_server_ip(void);
extern char ntp_sync_cnt;
extern char ntp_dns_gain;
#endif
int talkingq_time_diag_snapshot_v1(talkingq_time_diag_snapshot *out, unsigned int size)
{
if (out == NULL || size != sizeof(*out)) return -1;
memset(out, 0, sizeof(*out));
out->abi_version = TALKINGQ_TIME_DIAG_ABI_VERSION;
out->sample_ticks = ql_rtos_get_systicks();
out->ntp_type = out->ntp_status = out->ntp_ready = -1;
out->gnss_rtc_status = out->gnss_cid = -1;
out->ntp_triggers = out->ntp_dns_attempted = -1;
out->rtc_initialized = pmic_rtc_INIT_FLAG_GET() ? 1U : 0U;
if (!out->rtc_initialized) return 0;
/* Read raw RTC storage, not PMIC_RTC_GetTime_Count(): that getter can
* enable APP-follow-SYS and would disturb the boot state under diagnosis. */
out->app_follows_sys = m_rtc_app_sys_keeping_synced;
out->app_ever_configured = pmic_userdata_get_app_rtc_ever_configed() ? 1U : 0U;
out->offset_storage = (int)m_pmic_rtc_offset_storage_type;
out->sys_offset = PM812_RTC_GET_32B_SYS_OFFSET();
out->app_offset = PM812_RTC_GET_32B_APP_OFFSET();
out->counter = PM812_RTC_GET_32B_COUNTER();
out->network_tz_minutes = GetTimeZone();
out->rtc_tz_hours = PMIC_RTC_GetTimezone();
out->rtc_source = (int)quec_get_rtc_source();
#ifdef NTP
out->ntp_type = get_ntp_time_type();
out->ntp_status = GetNTPStatus();
out->ntp_ready = talkingq_ntp_diag_ready();
#endif
#ifdef QUEC_GNSS_NTP
out->gnss_rtc_status = quec_get_rtc_status();
out->gnss_cid = quec_get_nw_status();
out->ntp_triggers = (unsigned char)ntp_sync_cnt;
out->ntp_dns_attempted = (unsigned char)ntp_dns_gain;
snprintf(out->ntp_server, sizeof(out->ntp_server), "%.31s", get_ntp_server_ip());
#endif
return 0;
}
void talkingq_time_diag_trace(const char *phase)
{
talkingq_time_diag_snapshot s;
if (talkingq_time_diag_snapshot_v1(&s, sizeof(s)) != 0) return;
printf("[TIME-DIAG] kernel phase=%s build=%s %s rtc_init=%u "
"counter=%lu sys_offset=%lu app_offset=%lu follows_sys=%u app_ever=%u "
"storage=%d\r\n",
phase, __DATE__, __TIME__, s.rtc_initialized,
(unsigned long)s.counter, (unsigned long)s.sys_offset,
(unsigned long)s.app_offset, s.app_follows_sys, s.app_ever_configured,
s.offset_storage);
printf("[TIME-DIAG] kernel phase=%s ticks=%u net_tz_min=%d rtc_tz_hour=%d source=%d "
"ntp_type=%d ntp_status=%d ntp_ready=%d gnss_rtc=%d triggers=%d\r\n",
phase, s.sample_ticks, s.network_tz_minutes, s.rtc_tz_hours, s.rtc_source,
s.ntp_type, s.ntp_status, s.ntp_ready, s.gnss_rtc_status, s.ntp_triggers);
}