69 lines
2.5 KiB
C
69 lines
2.5 KiB
C
/*
|
|
* Представление версии работающей прошивки, даты сборки и идентификатора исходников. Данные
|
|
* переводятся в формат, доступный потребителям библиотеки; build ID описывает сборку и не
|
|
* заменяет контрольную сумму образа.
|
|
*/
|
|
|
|
#ifndef FIRMWARE_INFO_H
|
|
#define FIRMWARE_INFO_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
/* Least-width octet storage preserves STM ABI, and compiles on C28x where
|
|
* CHAR_BIT=16 and uint8_t does not exist. Values sent on wire are masked to 8 bits. */
|
|
typedef uint_least8_t firmware_info_octet;
|
|
|
|
#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;
|
|
firmware_info_octet month;
|
|
firmware_info_octet day;
|
|
firmware_info_octet hour;
|
|
firmware_info_octet minute;
|
|
firmware_info_octet 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;
|
|
|
|
/* Compatibility names for climate firmware; same layout and wire contract. */
|
|
typedef firmware_info_t FirmwareInfo;
|
|
typedef firmware_info_status_t FirmwareInfoStatus;
|
|
#define FIRMWARE_INFO_REG_COUNT FIRMWARE_INFO_REGISTER_COUNT
|
|
#define FIRMWARE_INFO_BUILD_ID_CHARS FIRMWARE_INFO_BUILD_ID_SIZE
|
|
#define FirmwareInfo_Validate firmware_info_validate
|
|
#define FirmwareInfo_ToRegisters firmware_info_to_registers
|
|
#define FirmwareInfo_ParseBuildStamp firmware_info_parse_build_stamp
|
|
#define FirmwareInfo_SetBuildId firmware_info_set_build_id
|
|
|
|
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, firmware_info_octet *payload, size_t size);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|