From 03d2671ddd6fa0b3b48309072db929de3edd25d9 Mon Sep 17 00:00:00 2001 From: Bjarki Arge Andreasen Date: Tue, 3 Oct 2023 17:09:15 +0200 Subject: [PATCH] drivers: gnss: Add GNSS dump to log feature This commit adds dumping of GNSS data and satellites to the log if CONFIG_GNSS_DUMP_TO_LOG is selected Signed-off-by: Bjarki Arge Andreasen --- drivers/gnss/Kconfig | 16 ++++++++++++++ drivers/gnss/gnss_dump.c | 47 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/drivers/gnss/Kconfig b/drivers/gnss/Kconfig index beed7ca523e..2bde6428bec 100644 --- a/drivers/gnss/Kconfig +++ b/drivers/gnss/Kconfig @@ -20,6 +20,22 @@ config GNSS_DUMP help Enable GNSS dump library +config GNSS_DUMP_TO_LOG + bool "Dump GNSS events to log" + select GNSS_DUMP + help + Enable GNSS dump to log. + +if GNSS_DUMP_TO_LOG + +config GNSS_DUMP_TO_LOG_BUF_SIZE + int "GNSS log dump buffer size" + default 128 + help + Size of GNSS log dump buffer + +endif + module = GNSS module-str = gnss source "subsys/logging/Kconfig.template.log_config" diff --git a/drivers/gnss/gnss_dump.c b/drivers/gnss/gnss_dump.c index b70a271e2fa..1946d65ea2e 100644 --- a/drivers/gnss/gnss_dump.c +++ b/drivers/gnss/gnss_dump.c @@ -6,8 +6,14 @@ #include "gnss_dump.h" #include +#include + #include +#if CONFIG_GNSS_DUMP_TO_LOG +static char dump_buf[CONFIG_GNSS_DUMP_TO_LOG_BUF_SIZE]; +#endif /* CONFIG_GNSS_DUMP_TO_LOG */ + static const char *gnss_fix_status_to_str(enum gnss_fix_status fix_status) { switch (fix_status) { @@ -132,3 +138,44 @@ int gnss_dump_satellite(char *str, uint16_t strsize, const struct gnss_satellite return (strsize < ret) ? -ENOMEM : 0; } #endif + +#if CONFIG_GNSS_DUMP_TO_LOG +static void gnss_dump_data_to_log(const struct device *dev, const struct gnss_data *data) +{ + if (gnss_dump_info(dump_buf, sizeof(dump_buf), &data->info) < 0) { + return; + } + + LOG_PRINTK("%s: %s\r\n", dev->name, dump_buf); + + if (gnss_dump_nav_data(dump_buf, sizeof(dump_buf), &data->nav_data) < 0) { + return; + } + + LOG_PRINTK("%s: %s\r\n", dev->name, dump_buf); + + if (gnss_dump_time(dump_buf, sizeof(dump_buf), &data->utc) < 0) { + return; + } + + LOG_PRINTK("%s: %s\r\n", dev->name, dump_buf); +} + +GNSS_DATA_CALLBACK_DEFINE(NULL, gnss_dump_data_to_log); +#endif + +#if defined(CONFIG_GNSS_DUMP_TO_LOG) && defined(CONFIG_GNSS_SATELLITES) +static void gnss_dump_satellites_to_log(const struct device *dev, + const struct gnss_satellite *satellites, uint16_t size) +{ + for (uint16_t i = 0; i < size; i++) { + if (gnss_dump_satellite(dump_buf, sizeof(dump_buf), &satellites[i]) < 0) { + return; + } + + LOG_PRINTK("%s: %s\r\n", dev->name, dump_buf); + } +} + +GNSS_SATELLITES_CALLBACK_DEFINE(NULL, gnss_dump_satellites_to_log); +#endif