Add reusable firmware info module

This commit is contained in:
2026-08-30 07:01:35 +03:00
parent 05863db2a2
commit 9ce32b56d4
14 changed files with 331 additions and 1 deletions

View File

@@ -0,0 +1,48 @@
#ifndef FIRMWARE_INFO_H
#define FIRMWARE_INFO_H
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define FIRMWARE_INFO_CONTRACT_VERSION 1U
#define FIRMWARE_INFO_REGISTER_COUNT 12U
#define FIRMWARE_INFO_PAYLOAD_SIZE (FIRMWARE_INFO_REGISTER_COUNT * 2U)
#define FIRMWARE_INFO_BUILD_ID_SIZE 8U
typedef struct {
uint16_t major;
uint16_t minor;
uint16_t patch;
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
char build_id[FIRMWARE_INFO_BUILD_ID_SIZE + 1U];
} firmware_info_t;
typedef enum {
FIRMWARE_INFO_OK = 0,
FIRMWARE_INFO_INVALID_ARGUMENT,
FIRMWARE_INFO_OUT_OF_RANGE
} firmware_info_status_t;
firmware_info_status_t firmware_info_validate(const firmware_info_t *info);
firmware_info_status_t firmware_info_parse_build_stamp(
const char *date_text, const char *time_text, firmware_info_t *info);
firmware_info_status_t firmware_info_set_build_id(
firmware_info_t *info, const char *build_id);
firmware_info_status_t firmware_info_to_registers(
const firmware_info_t *info, uint16_t *registers, size_t count);
firmware_info_status_t firmware_info_to_le_bytes(
const firmware_info_t *info, uint8_t *payload, size_t size);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,18 @@
#ifndef FIRMWARE_INFO_PORT_H
#define FIRMWARE_INFO_PORT_H
#include "firmware_info.h"
/* Include-path selects one MCU project configuration named firmware_info_config.h. */
#include "firmware_info_config.h"
#ifndef FIRMWARE_VERSION_PATCH
#define FIRMWARE_VERSION_PATCH 0U
#endif
#ifndef FIRMWARE_BUILD_ID
#define FIRMWARE_BUILD_ID "LOCALDEV"
#endif
firmware_info_status_t firmware_info_port_describe(firmware_info_t *info);
#endif