/* * Представление версии работающей прошивки, даты сборки и идентификатора исходников. Данные * переводятся в формат, доступный потребителям библиотеки; build ID описывает сборку и не * заменяет контрольную сумму образа. */ #ifndef FIRMWARE_INFO_H #define FIRMWARE_INFO_H #include #include /* 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