Data Logger

Format-agnostic telemetry data logger for flight/sensor applications. Sensor readings are captured as datapoint and serialised through a pluggable formatter backend (vtable pattern).

Built-in Formatters

Two formatters are provided out of the box:

  • CSV (CONFIG_DATA_LOGGER_CSV) — one header row then one data row per datapoint.

  • InfluxDB Line Protocol (CONFIG_DATA_LOGGER_INFLUX) — one line per datapoint, no header row.

Example Usage

static struct data_logger logger;

data_logger_init(&logger, "flight");
data_logger_start(&logger);

struct datapoint dp = {
    .timestamp_ns = k_ticks_to_ns_floor64(k_uptime_ticks()),
    .type         = AURORA_DATA_BARO,
    .channel_count = 2,
    .channels = {
        { .val1 = 23, .val2 = 500000 },  /* temperature: 23.5 °C */
        { .val1 = 101325, .val2 = 0 },   /* pressure: 101325 Pa  */
    },
};

data_logger_write(&logger, &dp);
data_logger_flush(&logger);
data_logger_close(&logger);

Shell Commands

Enabling CONFIG_DATA_LOGGER_SHELL registers the data_logger command group. All commands operate on loggers registered through data_logger_init() logger names tab-complete.

Command

Description

data_logger list

List every registered logger with its formatter and current state (running, stopped or closed).

data_logger start <name>

Start a logger. Writes the formatter header if applicable.

data_logger stop <name>

Stop a logger. Subsequent writes are dropped until restarted.

data_logger status <name>

Show the state of a single logger.

data_logger flush <name>

Flush buffered data to the backing storage.

API Reference

enum aurora_data

Sensor group identifier.

Always add new entries before AURORA_DATA_COUNT so that the count stays accurate and array-based tables remain valid.

Values:

enumerator AURORA_DATA_BARO

Barometer: [0] temperature, [1] pressure

enumerator AURORA_DATA_IMU_ACCEL

Accelerometer: [0] x, [1] y, [2] z

enumerator AURORA_DATA_IMU_GYRO

Gyroscope: [0] x, [1] y, [2] z

enumerator AURORA_DATA_IMU_MAG

Magnetometer: [0] x, [1] y, [2] z

enumerator AURORA_DATA_SM_KINEMATICS

SM inputs: [0] accel, [1] accel_vert, [2] velocity

enumerator AURORA_DATA_SM_POSE

SM inputs: [0] orientation, [1] altitude

enumerator AURORA_DATA_COUNT

Sentinel — do not use as a type

typedef void (*data_logger_cb_t)(struct data_logger *logger, void *user_data)

Callback type for data_logger_foreach.

Param logger:

Registered logger instance.

Param user_data:

Opaque context passed through from the caller.

int data_logger_init(struct data_logger *logger, const char *filename)

Initialise a logger.

The output file is placed at CONFIG_DATA_LOGGER_BASE_PATH/[ filename ].file_ext, where file_ext comes from the active formatter. Calls fmt->init then fmt->write_header. On any failure the logger is left in an invalid state and should not be used.

Parameters:
  • logger – Caller-allocated logger instance.

  • filename – Base filename (without extension).

Return values:

0 – on success, negative errno on failure.

void data_logger_set_default(struct data_logger *logger)

Set the default logger used by data_logger_log.

Parameters:

logger – Initialised logger instance (NULL to clear).

int data_logger_log(const struct datapoint *dp)

Log a datapoint to the default logger.

Uses the logger previously registered with data_logger_set_default. Returns -ENODEV if no default logger has been set.

Parameters:

dp – Datapoint to write.

Return values:

0 – on success, negative errno on failure.

int data_logger_write(struct data_logger *logger, const struct datapoint *dp)

Serialise and store one datapoint to a specific logger.

Parameters:
  • logger – Initialised logger instance.

  • dp – Datapoint to write.

Return values:

0 – on success, negative errno on failure.

int data_logger_flush(struct data_logger *logger)

Flush buffered data to the underlying storage.

Parameters:

logger – Initialised logger instance.

Return values:

0 – on success, negative errno on failure.

int data_logger_close(struct data_logger *logger)

Finalise the output file and release formatter resources.

After this call logger is reset and must be re-initialised before use.

Parameters:

logger – Initialised logger instance.

Return values:

0 – on success, negative errno on failure.

int data_logger_stop(struct data_logger *logger)

Temporary stop the data logger and flush the fs caches.

After this call logger is stopped and must be re-started before use.

Parameters:

logger – Initialised logger instance.

Return values:

0 – on success, negative errno on failure.

int data_logger_start(struct data_logger *logger)

Restart the data logger.

After this call logger is started and running.

Parameters:

logger – Initialized but stopped logger instance.

Return values:

0 – on success, negative errno on failure.

const char *data_logger_type_name(enum aurora_data type)

Return the human-readable name for an aurora_data value.

Parameters:

type – Sensor group identifier.

Returns:

Null-terminated ASCII string, or "unknown" for out-of-range values.

void data_logger_foreach(data_logger_cb_t cb, void *user_data)

Iterate over all registered data loggers.

Parameters:
  • cb – Callback invoked for each registered logger.

  • user_data – Opaque pointer forwarded to cb.

struct data_logger *data_logger_get(const char *name)

Look up a registered data logger by name.

Parameters:

name – Logger name (as passed to data_logger_init).

Returns:

Pointer to the logger, or NULL if not found.

DP_MAX_CHANNELS

Maximum number of sensor channels carried by a single datapoint.

DATA_LOGGER_NAME_MAX

Maximum length of a data logger name (including NUL).

struct datapoint
#include <data_logger.h>

Flat telemetry data point.

Carries a timestamp, sensor-group type, the number of valid channels, and up to DP_MAX_CHANNELS raw Zephyr sensor_value readings.

struct data_logger_formatter
#include <data_logger.h>

Formatter vtable.

Implement all mandatory callbacks and export a const struct data_logger_formatter to create a new backend.

Every callback receives the logger instance so it can reach its opaque context via logger->ctx. Return 0 on success, negative errno on failure.

struct data_logger_state
#include <data_logger.h>

Formatter state.

struct data_logger
#include <data_logger.h>

Logger instance (caller-allocated, typically stack or static).