49 lines
1.3 KiB
C
49 lines
1.3 KiB
C
#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
|