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 <bjarkix123@gmail.com>
This commit is contained in:
Bjarki Arge Andreasen 2023-10-03 17:09:15 +02:00 committed by Chris Friedt
parent 2a81c22489
commit 03d2671ddd
2 changed files with 63 additions and 0 deletions

View file

@ -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"

View file

@ -6,8 +6,14 @@
#include "gnss_dump.h"
#include <zephyr/kernel.h>
#include <zephyr/logging/log.h>
#include <string.h>
#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