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 |
|---|---|
|
List every registered logger with its formatter and current state
( |
|
Start a logger. Writes the formatter header if applicable. |
|
Stop a logger. Subsequent writes are dropped until restarted. |
|
Show the state of a single logger. |
|
Flush buffered data to the backing storage. |
API Reference¶
-
enum aurora_data¶
Sensor group identifier.
Always add new entries before
AURORA_DATA_COUNTso 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
-
enumerator AURORA_DATA_BARO¶
-
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. Callsfmt->initthenfmt->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
loggeris 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
loggeris 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
loggeris 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_valuereadings.
-
struct data_logger_formatter¶
- #include <data_logger.h>
Formatter vtable.
Implement all mandatory callbacks and export a
conststructdata_logger_formatterto 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).