#ifndef FIRMWARE_INFO_H #define FIRMWARE_INFO_H #include #include #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