Files
banban/ql-application/threadx/interface/custom_app/time_diag.c
T

85 lines
3.4 KiB
C

#include <stdio.h>
#include <string.h>
#include "ql_func.h"
#include "ql_rtc.h"
#include "ql_rtos.h"
#include "ql_dev.h"
#include "build_macro.h"
#include "time_diag.h"
#include "../../../../ql-config/config/talkingq_time_diag.h"
void talkingq_time_diag_log(const char *phase)
{
talkingq_time_diag_snapshot_fn snapshot;
talkingq_time_diag_snapshot s;
int ret;
snapshot = m_get_api_ptr ? (talkingq_time_diag_snapshot_fn)
m_get_api_ptr(TALKINGQ_TIME_DIAG_API_NAME) : NULL;
if (!snapshot) {
printf("[TIME-DIAG] phase=%s ticks=%lu kernel_diag=unavailable "
"need_matching_diagnostic_kernel=1\r\n", phase,
(unsigned long)ql_rtos_get_systicks());
return;
}
memset(&s, 0, sizeof(s));
ret = snapshot(&s, sizeof(s));
if (ret != 0 || s.abi_version != TALKINGQ_TIME_DIAG_ABI_VERSION) {
printf("[TIME-DIAG] phase=%s kernel_diag=abi_mismatch rc=%d abi=%u\r\n",
phase, ret, s.abi_version);
return;
}
printf("[TIME-DIAG] phase=%s ticks=%u abi=%u rtc_init=%u "
"counter=%lu sys_offset=%lu app_offset=%lu "
"sys_raw=%lu app_raw=%lu follows_sys=%u app_ever=%u storage=%d\r\n",
phase, s.sample_ticks, s.abi_version, s.rtc_initialized,
(unsigned long)s.counter, (unsigned long)s.sys_offset,
(unsigned long)s.app_offset,
(unsigned long)(s.counter + s.sys_offset),
(unsigned long)(s.counter + s.app_offset),
s.app_follows_sys, s.app_ever_configured, s.offset_storage);
printf("[TIME-DIAG] 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 cid=%d "
"triggers=%d dns_attempted=%d ntp_ip=%.31s\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.gnss_cid,
s.ntp_triggers, s.ntp_dns_attempted, s.ntp_server);
}
void talkingq_time_diag_boot(void)
{
char firmware[128] = {0};
int ret = ql_dev_get_firmware_version(firmware, sizeof(firmware));
firmware[sizeof(firmware) - 1] = '\0';
printf("[TIME-DIAG] boot app_ver=%s app_build=%s app_rev=%s "
"diag_build=%s %s firmware_rc=%d firmware=%s\r\n",
CUSTOM_APP_BUILD_VER, CUSTOM_APP_BUILD_TIME, CUSTOM_APP_BUILD_REV,
__DATE__, __TIME__, ret, firmware);
talkingq_time_diag_log("boot-before-nitz");
}
time_t talkingq_time_diag_wss_time(void)
{
time_t original;
time_t with_pointer;
time_t pointer_value = 1;
ql_rtc_time_t rtc;
int rtc_ret;
/* Capture raw flags first. Do not replace or correct the existing gate. */
talkingq_time_diag_log("wss-before-time-read");
original = time(NULL);
with_pointer = time(&pointer_value);
memset(&rtc, 0, sizeof(rtc));
rtc_ret = ql_rtc_get_time(&rtc);
printf("[TIME-DIAG] phase=wss-precheck ticks=%lu time_null=%ld "
"time_ptr_return=%ld time_ptr_value=%ld rtc_rc=%d "
"app_calendar=%04d-%02d-%02dT%02d:%02d:%02d min_epoch=1704067200 valid=%d\r\n",
(unsigned long)ql_rtos_get_systicks(), (long)original,
(long)with_pointer, (long)pointer_value, rtc_ret,
rtc.tm_year, rtc.tm_mon, rtc.tm_mday, rtc.tm_hour, rtc.tm_min, rtc.tm_sec,
original >= 1704067200);
talkingq_time_diag_log("wss-after-time-read");
return original;
}