#ifndef PLATFORM_H #define PLATFORM_H #ifdef __cplusplus extern "C" { #endif #include #include #include "base.h" #include "pdr.h" #include "pldm_types.h" /* Maximum size for request */ #define PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES 19 #define PLDM_GET_STATE_SENSOR_READINGS_REQ_BYTES 4 #define PLDM_GET_NUMERIC_EFFECTER_VALUE_REQ_BYTES 2 #define PLDM_GET_SENSOR_READING_REQ_BYTES 3 #define PLDM_SET_EVENT_RECEIVER_REQ_BYTES 5 /* Response lengths are inclusive of completion code */ #define PLDM_SET_STATE_EFFECTER_STATES_RESP_BYTES 1 #define PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES 1 #define PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES 4 #define PLDM_GET_PDR_REQ_BYTES 13 #define PLDM_SET_EVENT_RECEIVER_RESP_BYTES 1 /* Platform event supported request */ #define PLDM_EVENT_MESSAGE_BUFFER_SIZE_REQ_BYTES 2 #define PLDM_EVENT_MESSAGE_BUFFER_SIZE_RESP_BYTES 3 #define PLDM_EVENT_MESSAGE_SUPPORTED_REQ_BYTES 1 #define PLDM_EVENT_MESSAGE_SUPPORTED_MIN_RESP_BYTES 4 #define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES 8 #define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES 4 #define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_RESP_BYTES 14 #define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_CHECKSUM_BYTES 4 /* Minimum response length */ #define PLDM_GET_PDR_MIN_RESP_BYTES 12 #define PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES 5 #define PLDM_GET_SENSOR_READING_MIN_RESP_BYTES 8 #define PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES 2 #define PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES 41 /* Minimum length for PLDM PlatformEventMessage request */ #define PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES 3 #define PLDM_PLATFORM_EVENT_MESSAGE_STATE_SENSOR_STATE_REQ_BYTES 6 #define PLDM_PLATFORM_EVENT_MESSAGE_RESP_BYTES 2 #define PLDM_PLATFORM_EVENT_MESSAGE_FORMAT_VERSION 1 #define PLDM_PLATFORM_EVENT_MESSAGE_EVENT_ID 2 #define PLDM_PLATFORM_EVENT_MESSAGE_TRANFER_HANDLE 4 /* Minumum length of senson event data */ #define PLDM_MSG_POLL_EVENT_LENGTH 7 /* Minumum length of senson event data */ #define PLDM_SENSOR_EVENT_DATA_MIN_LENGTH 5 #define PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH 2 #define PLDM_SENSOR_EVENT_STATE_SENSOR_STATE_DATA_LENGTH 3 #define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH 4 #define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH 7 #define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_8BIT_DATA_LENGTH 4 #define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_16BIT_DATA_LENGTH 5 #define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_32BIT_DATA_LENGTH 7 /* Minimum length of data for pldmPDRRepositoryChgEvent */ #define PLDM_PDR_REPOSITORY_CHG_EVENT_MIN_LENGTH 2 #define PLDM_PDR_REPOSITORY_CHANGE_RECORD_MIN_LENGTH 2 /* Minimum length of numeric sensor PDR */ #define PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH 57 #define PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH 3 #define PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH 9 #define PLDM_PDR_NUMERIC_SENSOR_PDR_MIN_LENGTH \ (PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH + \ PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH + \ PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH) #define PLDM_INVALID_EFFECTER_ID 0xFFFF #define PLDM_TID_RESERVED 0xFF /* DSP0248 Table1 PLDM monitoring and control data types */ #define PLDM_STR_UTF_8_MAX_LEN 256 #define PLDM_STR_UTF_16_MAX_LEN 256 enum pldm_effecter_data_size { PLDM_EFFECTER_DATA_SIZE_UINT8, PLDM_EFFECTER_DATA_SIZE_SINT8, PLDM_EFFECTER_DATA_SIZE_UINT16, PLDM_EFFECTER_DATA_SIZE_SINT16, PLDM_EFFECTER_DATA_SIZE_UINT32, PLDM_EFFECTER_DATA_SIZE_SINT32 }; enum pldm_range_field_format { PLDM_RANGE_FIELD_FORMAT_UINT8, PLDM_RANGE_FIELD_FORMAT_SINT8, PLDM_RANGE_FIELD_FORMAT_UINT16, PLDM_RANGE_FIELD_FORMAT_SINT16, PLDM_RANGE_FIELD_FORMAT_UINT32, PLDM_RANGE_FIELD_FORMAT_SINT32, PLDM_RANGE_FIELD_FORMAT_REAL32 }; #define PLDM_RANGE_FIELD_FORMAT_MAX PLDM_RANGE_FIELD_FORMAT_REAL32 enum set_request { PLDM_NO_CHANGE = 0x00, PLDM_REQUEST_SET = 0x01 }; enum effecter_state { PLDM_INVALID_VALUE = 0xFF }; enum pldm_sensor_present_state { PLDM_SENSOR_UNKNOWN = 0x0, PLDM_SENSOR_NORMAL = 0x01, PLDM_SENSOR_WARNING = 0x02, PLDM_SENSOR_CRITICAL = 0x03, PLDM_SENSOR_FATAL = 0x04, PLDM_SENSOR_LOWERWARNING = 0x05, PLDM_SENSOR_LOWERCRITICAL = 0x06, PLDM_SENSOR_LOWERFATAL = 0x07, PLDM_SENSOR_UPPERWARNING = 0x08, PLDM_SENSOR_UPPERCRITICAL = 0x09, PLDM_SENSOR_UPPERFATAL = 0x0a }; enum pldm_sensor_event_message_enable { PLDM_NO_EVENT_GENERATION, PLDM_EVENTS_DISABLED, PLDM_EVENTS_ENABLED, PLDM_OP_EVENTS_ONLY_ENABLED, PLDM_STATE_EVENTS_ONLY_ENABLED }; enum pldm_effecter_oper_state { EFFECTER_OPER_STATE_ENABLED_UPDATEPENDING, EFFECTER_OPER_STATE_ENABLED_NOUPDATEPENDING, EFFECTER_OPER_STATE_DISABLED, EFFECTER_OPER_STATE_UNAVAILABLE, EFFECTER_OPER_STATE_STATUSUNKNOWN, EFFECTER_OPER_STATE_FAILED, EFFECTER_OPER_STATE_INITIALIZING, EFFECTER_OPER_STATE_SHUTTINGDOWN, EFFECTER_OPER_STATE_INTEST }; enum pldm_platform_commands { PLDM_SET_EVENT_RECEIVER = 0x04, PLDM_PLATFORM_EVENT_MESSAGE = 0x0A, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE = 0x0B, PLDM_EVENT_MESSAGE_SUPPORTED = 0x0C, PLDM_EVENT_MESSAGE_BUFFER_SIZE = 0x0D, PLDM_GET_SENSOR_READING = 0x11, PLDM_GET_STATE_SENSOR_READINGS = 0x21, PLDM_SET_NUMERIC_EFFECTER_VALUE = 0x31, PLDM_GET_NUMERIC_EFFECTER_VALUE = 0x32, PLDM_SET_STATE_EFFECTER_STATES = 0x39, PLDM_GET_PDR_REPOSITORY_INFO = 0x50, PLDM_GET_PDR = 0x51, }; /** @brief PLDM PDR types */ enum pldm_pdr_types { PLDM_TERMINUS_LOCATOR_PDR = 1, PLDM_NUMERIC_SENSOR_PDR = 2, PLDM_NUMERIC_SENSOR_INITIALIZATION_PDR = 3, PLDM_STATE_SENSOR_PDR = 4, PLDM_STATE_SENSOR_INITIALIZATION_PDR = 5, PLDM_SENSOR_AUXILIARY_NAMES_PDR = 6, PLDM_OEM_UNIT_PDR = 7, PLDM_OEM_STATE_SET_PDR = 8, PLDM_NUMERIC_EFFECTER_PDR = 9, PLDM_NUMERIC_EFFECTER_INITIALIZATION_PDR = 10, PLDM_STATE_EFFECTER_PDR = 11, PLDM_STATE_EFFECTER_INITIALIZATION_PDR = 12, PLDM_EFFECTER_AUXILIARY_NAMES_PDR = 13, PLDM_EFFECTER_OEM_SEMANTIC_PDR = 14, PLDM_PDR_ENTITY_ASSOCIATION = 15, PLDM_ENTITY_AUXILIARY_NAMES_PDR = 16, PLDM_OEM_ENTITY_ID_PDR = 17, PLDM_INTERRUPT_ASSOCIATION_PDR = 18, PLDM_EVENT_LOG_PDR = 19, PLDM_PDR_FRU_RECORD_SET = 20, PLDM_COMPACT_NUMERIC_SENSOR_PDR = 21, PLDM_OEM_DEVICE_PDR = 126, PLDM_OEM_PDR = 127, }; /** @brief PLDM effecter initialization schemes */ enum pldm_effecter_init { PLDM_NO_INIT, PLDM_USE_INIT_PDR, PLDM_ENABLE_EFFECTER, PLDM_DISABLE_EFECTER }; /** @brief PLDM Platform M&C completion codes */ enum pldm_platform_completion_codes { PLDM_PLATFORM_INVALID_SENSOR_ID = 0x80, PLDM_PLATFORM_REARM_UNAVAILABLE_IN_PRESENT_STATE = 0x81, PLDM_PLATFORM_INVALID_EFFECTER_ID = 0x80, PLDM_PLATFORM_INVALID_STATE_VALUE = 0x81, PLDM_PLATFORM_INVALID_DATA_TRANSFER_HANDLE = 0x80, PLDM_PLATFORM_INVALID_TRANSFER_OPERATION_FLAG = 0x81, PLDM_PLATFORM_INVALID_RECORD_HANDLE = 0x82, PLDM_PLATFORM_INVALID_RECORD_CHANGE_NUMBER = 0x83, PLDM_PLATFORM_TRANSFER_TIMEOUT = 0x84, PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE = 0x82, PLDM_PLATFORM_INVALID_PROTOCOL_TYPE = 0x80, PLDM_PLATFORM_ENABLE_METHOD_NOT_SUPPORTED = 0x81, PLDM_PLATFORM_HEARTBEAT_FREQUENCY_TOO_HIGH = 0x82, }; /** @brief PLDM Event types */ enum pldm_event_types { PLDM_SENSOR_EVENT = 0x00, PLDM_EFFECTER_EVENT = 0x01, PLDM_REDFISH_TASK_EXECUTED_EVENT = 0x02, PLDM_REDFISH_MESSAGE_EVENT = 0x03, PLDM_PDR_REPOSITORY_CHG_EVENT = 0x04, PLDM_MESSAGE_POLL_EVENT = 0x05, PLDM_HEARTBEAT_TIMER_ELAPSED_EVENT = 0x06 }; /** @brief PLDM sensorEventClass states */ enum sensor_event_class_states { PLDM_SENSOR_OP_STATE, PLDM_STATE_SENSOR_STATE, PLDM_NUMERIC_SENSOR_STATE }; /** @brief PLDM sensor supported states */ enum pldm_sensor_operational_state { PLDM_SENSOR_ENABLED, PLDM_SENSOR_DISABLED, PLDM_SENSOR_UNAVAILABLE, PLDM_SENSOR_STATUSUNKOWN, PLDM_SENSOR_FAILED, PLDM_SENSOR_INITIALIZING, PLDM_SENSOR_SHUTTINGDOWN, PLDM_SENSOR_INTEST }; /** @brief PLDM pldmPDRRepositoryChgEvent class eventData format */ enum pldm_pdr_repository_chg_event_data_format { REFRESH_ENTIRE_REPOSITORY, FORMAT_IS_PDR_TYPES, FORMAT_IS_PDR_HANDLES }; /** @brief PLDM pldmPDRRepositoryChgEvent class changeRecord format * eventDataOperation */ enum pldm_pdr_repository_chg_event_change_record_event_data_operation { PLDM_REFRESH_ALL_RECORDS, PLDM_RECORDS_DELETED, PLDM_RECORDS_ADDED, PLDM_RECORDS_MODIFIED }; /** @brief PLDM NumericSensorStatePresentReading data type */ enum pldm_sensor_readings_data_type { PLDM_SENSOR_DATA_SIZE_UINT8, PLDM_SENSOR_DATA_SIZE_SINT8, PLDM_SENSOR_DATA_SIZE_UINT16, PLDM_SENSOR_DATA_SIZE_SINT16, PLDM_SENSOR_DATA_SIZE_UINT32, PLDM_SENSOR_DATA_SIZE_SINT32 }; #define PLDM_SENSOR_DATA_SIZE_MAX PLDM_SENSOR_DATA_SIZE_SINT32 /** @brief PLDM PlatformEventMessage response status */ enum pldm_platform_event_status { PLDM_EVENT_NO_LOGGING = 0x00, PLDM_EVENT_LOGGING_DISABLED = 0x01, PLDM_EVENT_LOG_FULL = 0x02, PLDM_EVENT_ACCEPTED_FOR_LOGGING = 0x03, PLDM_EVENT_LOGGED = 0x04, PLDM_EVENT_LOGGING_REJECTED = 0x05 }; /** @brief PLDM Terminus Locator PDR validity */ enum pldm_terminus_locator_pdr_validity { PLDM_TL_PDR_NOT_VALID, PLDM_TL_PDR_VALID }; /** @brief PLDM Terminus Locator type */ enum pldm_terminus_locator_type { PLDM_TERMINUS_LOCATOR_TYPE_UID, PLDM_TERMINUS_LOCATOR_TYPE_MCTP_EID, PLDM_TERMINUS_LOCATOR_TYPE_SMBUS_RELATIVE, PLDM_TERMINUS_LOCATOR_TYPE_SYS_SW }; /** @brief PLDM event message global enable for * SetEventReceiver command */ enum pldm_event_message_global_enable { PLDM_EVENT_MESSAGE_GLOBAL_DISABLE, PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC, PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_POLLING, PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC_KEEP_ALIVE }; /** @brief PLDM DSP0248 1.2.1 table 74 sensorUnits enumeration */ enum pldm_sensor_units { PLDM_SENSOR_UNIT_NONE = 0x00, PLDM_SENSOR_UNIT_UNSPECIFIED, PLDM_SENSOR_UNIT_DEGRESS_C, PLDM_SENSOR_UNIT_DEGRESS_F, PLDM_SENSOR_UNIT_KELVINS, PLDM_SENSOR_UNIT_VOLTS, PLDM_SENSOR_UNIT_AMPS, PLDM_SENSOR_UNIT_WATTS, PLDM_SENSOR_UNIT_JOULES, PLDM_SENSOR_UNIT_COULOMBS, PLDM_SENSOR_UNIT_VA, PLDM_SENSOR_UNIT_NITS, PLDM_SENSOR_UNIT_LUMENS, PLDM_SENSOR_UNIT_LUX, PLDM_SENSOR_UNIT_CANDELAS, PLDM_SENSOR_UNIT_KPA, PLDM_SENSOR_UNIT_PSI, PLDM_SENSOR_UNIT_NEWTONS, PLDM_SENSOR_UNIT_CFM, PLDM_SENSOR_UNIT_RPM, PLDM_SENSOR_UNIT_HERTZ, PLDM_SENSOR_UNIT_SECONDS, PLDM_SENSOR_UNIT_MINUTES, PLDM_SENSOR_UNIT_HOURS, PLDM_SENSOR_UNIT_DAYS, PLDM_SENSOR_UNIT_WEEKS, PLDM_SENSOR_UNIT_MILS, PLDM_SENSOR_UNIT_INCHES, PLDM_SENSOR_UNIT_FEET, PLDM_SENSOR_UNIT_CUBIC_INCHES, PLDM_SENSOR_UNIT_CUBIC_FEET, PLDM_SENSOR_UNIT_METERS, PLDM_SENSOR_UNIT_CUBIC_CENTERMETERS, PLDM_SENSOR_UNIT_CUBIC_METERS, PLDM_SENSOR_UNIT_LITERS, PLDM_SENSOR_UNIT_FLUID_OUNCES, PLDM_SENSOR_UNIT_RADIANS, PLDM_SENSOR_UNIT_STERADIANS, PLDM_SENSOR_UNIT_REVOLUTIONS, PLDM_SENSOR_UNIT_CYCLES, PLDM_SENSOR_UNIT_GRAVITIES, PLDM_SENSOR_UNIT_OUNCES, PLDM_SENSOR_UNIT_POUNDS, PLDM_SENSOR_UNIT_FOOT_POUNDS, PLDM_SENSOR_UNIT_OUNCE_INCHES, PLDM_SENSOR_UNIT_GUESS, PLDM_SENSOR_UNIT_GILBERTS, PLDM_SENSOR_UNIT_HENRIES, PLDM_SENSOR_UNIT_FARADS, PLDM_SENSOR_UNIT_OHMS, PLDM_SENSOR_UNIT_SIEMENS, PLDM_SENSOR_UNIT_MOLES, PLDM_SENSOR_UNIT_BECQUERELS, PLDM_SENSOR_UNIT_PPM, PLDM_SENSOR_UNIT_DECIBELS, PLDM_SENSOR_UNIT_DBA, PLDM_SENSOR_UNIT_DBC, PLDM_SENSOR_UNIT_GRAYS, PLDM_SENSOR_UNIT_SIEVERTS, PLDM_SENSOR_UNIT_COLOR_TEMPERATURE_DEGRESS_K, PLDM_SENSOR_UNIT_BITS, PLDM_SENSOR_UNIT_BYTES, PLDM_SENSOR_UNIT_WORDS, PLDM_SENSOR_UNIT_DOUBLE_WORDS, PLDM_SENSOR_UNIT_QUAD_WORDS, PLDM_SENSOR_UNIT_PERCENTAGE, PLDM_SENSOR_UNIT_PASCALS, PLDM_SENSOR_UNIT_COUNTS, PLDM_SENSOR_UNIT_GRAMS, PLDM_SENSOR_UNIT_NEWTON_METERS, PLDM_SENSOR_UNIT_HITS, PLDM_SENSOR_UNIT_MISSES, PLDM_SENSOR_UNIT_RETRIES, PLDM_SENSOR_UNIT_OVERRUNS_OVERFLOWS, PLDM_SENSOR_UNIT_UNDERRUNS, PLDM_SENSOR_UNIT_COLLISIONS, PLDM_SENSOR_UNIT_PACKETS, PLDM_SENSOR_UNIT_MESSAGES, PLDM_SENSOR_UNIT_CHARATERS, PLDM_SENSOR_UNIT_ERRORS, PLDM_SENSOR_UNIT_CORRECTED_ERRORS, PLDM_SENSOR_UNIT_UNCORRECTABLE_ERRORS, PLDM_SENSOR_UNIT_SQUARE_MILS, PLDM_SENSOR_UNIT_SQUARE_INCHES, PLDM_SENSOR_UNIT_SQUARE_FEET, PLDM_SENSOR_UNIT_SQUARE_CENTIMETERS, PLDM_SENSOR_UNIT_SQUARE_METERS, PLDM_SENSOR_UNIT_OEMUNIT = 255 }; enum pldm_occurrence_rate { PLDM_RATE_UNIT_NONE = 0x0, PLDM_RATE_UNIT_PER_MICRO_SECOND, PLDM_RATE_UNIT_PER_MILLI_SECOND, PLDM_RATE_UNIT_PER_SECOND, PLDM_RATE_UNIT_PER_MINUTE, PLDM_RATE_UNIT_PER_HOUR, PLDM_RATE_UNIT_PER_DAY, PLDM_RATE_UNIT_PER_WEEK, PLDM_RATE_UNIT_PER_MONTH, PLDM_RATE_UNIT_PER_YEAR }; /** @brief PLDM respository state */ enum pldm_repository_state { PLDM_AVAILABLE, PLDM_UPDATE_IN_PROGRESS, PLDM_FAILED }; /** @brief PLDM respository data transfer handler timeout */ enum pldm_repository_data_transfer_handler_timeout { PLDM_NO_TIMEOUT, PLDM_DEFALUT_MINIMUM_TIMEOUT }; /** @brief PLDM event message type */ enum pldm_event_message_type { PLDM_MESSAGE_TYPE_NOT_CONFIGURED = 0x00, PLDM_MESSAGE_TYPE_ASYNCHRONOUS = 0x01, PLDM_MESSAGE_TYPE_SYNCHRONOUS = 0x02, PLDM_MESSAGE_TYPE_ASYNCHRONOUS_WITH_HEARTBEAT = 0x03 }; /** @struct pldm_pdr_hdr * * Structure representing PLDM common PDR header */ struct pldm_pdr_hdr { uint32_t record_handle; uint8_t version; uint8_t type; uint16_t record_change_num; uint16_t length; } __attribute__((packed)); /** @struct pldm_terminus_locator_pdr * * Structure representing PLDM terminus locator PDR */ struct pldm_terminus_locator_pdr { struct pldm_pdr_hdr hdr; uint16_t terminus_handle; uint8_t validity; uint8_t tid; uint16_t container_id; uint8_t terminus_locator_type; uint8_t terminus_locator_value_size; uint8_t terminus_locator_value[1]; } __attribute__((packed)); /** @struct pldm_sensor_auxiliary_names_pdr * * Structure representing PLDM Sensor Auxiliary Names PDR */ struct pldm_sensor_auxiliary_names_pdr { struct pldm_pdr_hdr hdr; uint16_t terminus_handle; uint16_t sensor_id; uint8_t sensor_count; uint8_t names[1]; } __attribute__((packed)); /** @struct pldm_terminus_locator_type_mctp_eid * * Structure representing terminus locator value for * terminus locator type MCTP_EID */ struct pldm_terminus_locator_type_mctp_eid { uint8_t eid; } __attribute__((packed)); /** @struct pldm_pdr_entity_association * * Structure representing PLDM Entity Association PDR */ struct pldm_pdr_entity_association { uint16_t container_id; uint8_t association_type; pldm_entity container; uint8_t num_children; pldm_entity children[1]; } __attribute__((packed)); /** @struct pldm_pdr_fru_record_set * * Structure representing PLDM FRU record set PDR */ struct pldm_pdr_fru_record_set { uint16_t terminus_handle; uint16_t fru_rsi; uint16_t entity_type; uint16_t entity_instance_num; uint16_t container_id; } __attribute__((packed)); /** @struct pldm_state_sensor_pdr * * Structure representing PLDM state sensor PDR */ struct pldm_state_sensor_pdr { struct pldm_pdr_hdr hdr; uint16_t terminus_handle; uint16_t sensor_id; uint16_t entity_type; uint16_t entity_instance; uint16_t container_id; uint8_t sensor_init; bool8_t sensor_auxiliary_names_pdr; uint8_t composite_sensor_count; uint8_t possible_states[1]; } __attribute__((packed)); /** @struct state_sensor_possible_states * * Structure representing state enums for state sensor */ struct state_sensor_possible_states { uint16_t state_set_id; uint8_t possible_states_size; bitfield8_t states[1]; } __attribute__((packed)); /** @struct pldm_state_effecter_pdr * * Structure representing PLDM state effecter PDR */ struct pldm_state_effecter_pdr { struct pldm_pdr_hdr hdr; uint16_t terminus_handle; uint16_t effecter_id; uint16_t entity_type; uint16_t entity_instance; uint16_t container_id; uint16_t effecter_semantic_id; uint8_t effecter_init; bool8_t has_description_pdr; uint8_t composite_effecter_count; uint8_t possible_states[1]; } __attribute__((packed)); /** @struct pldm_compact_numeric_sensor_pdr * * Structure representing PLDM compact numeric sensor PDR */ struct pldm_compact_numeric_sensor_pdr { struct pldm_pdr_hdr hdr; uint16_t terminus_handle; uint16_t sensor_id; uint16_t entity_type; uint16_t entity_instance; uint16_t container_id; uint8_t sensor_name_length; uint8_t base_unit; int8_t unit_modifier; uint8_t occurrence_rate; bitfield8_t range_field_support; int32_t warning_high; int32_t warning_low; int32_t critical_high; int32_t critical_low; int32_t fatal_high; int32_t fatal_low; uint8_t sensor_name[1]; } __attribute__((packed)); /** @brief Encode PLDM state sensor PDR * * @param[in/out] sensor Structure to encode. All members of * sensor, except those mentioned in the @note below, should be initialized by * the caller. * @param[in] allocation_size Size of sensor allocation in bytes * @param[in] possible_states Possible sensor states * @param[in] possible_states_size Size of possible sensor states in bytes * @param[out] actual_size Size of sensor PDR. Set to 0 on error. * @return int pldm_completion_codes * PLDM_SUCCESS/PLDM_ERROR/PLDM_ERROR_INVALID_LENGTH * * @note The sensor parameter will be encoded in place. * @note Caller is responsible for allocation of the sensor parameter. Caller * must allocate enough space for the base structure and the * sensor->possible_states array, otherwise the function will fail. * @note sensor->hdr.length, .type, and .version will be set appropriately. */ int encode_state_sensor_pdr( struct pldm_state_sensor_pdr *sensor, size_t allocation_size, const struct state_sensor_possible_states *possible_states, size_t possible_states_size, size_t *actual_size); /** @union union_effecter_data_size * * The bit width and format of reading and threshold values that the effecter * returns. * Refer to: DSP0248_1.2.0: 28.11 Table 87 */ typedef union { uint8_t value_u8; int8_t value_s8; uint16_t value_u16; int16_t value_s16; uint32_t value_u32; int32_t value_s32; } union_effecter_data_size; /** @union union_range_field_format * * Indicates the format used for the nominalValue, normalMax, and normalMin * fields. * Refer to: DSP0248_1.2.0: 28.11 Table 87 */ typedef union { uint8_t value_u8; int8_t value_s8; uint16_t value_u16; int16_t value_s16; uint32_t value_u32; int32_t value_s32; real32_t value_f32; } union_range_field_format; /** @struct pldm_numeric_effecter_value_pdr * * Structure representing PLDM numeric effecter value PDR */ struct pldm_numeric_effecter_value_pdr { struct pldm_pdr_hdr hdr; uint16_t terminus_handle; uint16_t effecter_id; uint16_t entity_type; uint16_t entity_instance; uint16_t container_id; uint16_t effecter_semantic_id; uint8_t effecter_init; bool8_t effecter_auxiliary_names; uint8_t base_unit; int8_t unit_modifier; uint8_t rate_unit; uint8_t base_oem_unit_handle; uint8_t aux_unit; int8_t aux_unit_modifier; uint8_t aux_rate_unit; uint8_t aux_oem_unit_handle; bool8_t is_linear; uint8_t effecter_data_size; real32_t resolution; real32_t offset; uint16_t accuracy; uint8_t plus_tolerance; uint8_t minus_tolerance; real32_t state_transition_interval; real32_t transition_interval; union_effecter_data_size max_settable; union_effecter_data_size min_settable; uint8_t range_field_format; bitfield8_t range_field_support; union_range_field_format nominal_value; union_range_field_format normal_max; union_range_field_format normal_min; union_range_field_format rated_max; union_range_field_format rated_min; } __attribute__((packed)); /** @union union_sensor_data_size * * The bit width and format of reading and threshold values that the sensor * returns. * Refer to: DSP0248_1.2.0: 28.4 Table 78 */ typedef union { uint8_t value_u8; int8_t value_s8; uint16_t value_u16; int16_t value_s16; uint32_t value_u32; int32_t value_s32; } union_sensor_data_size; /** @struct pldm_value_pdr_hdr * * Structure representing PLDM PDR header for unpacked value * Refer to: DSP0248_1.2.0: 28.1 Table 75 */ struct pldm_value_pdr_hdr { uint32_t record_handle; uint8_t version; uint8_t type; uint16_t record_change_num; uint16_t length; }; /** @struct pldm_numeric_sensor_value_pdr * * Structure representing PLDM Numeric Sensor PDR for unpacked value * Refer to: DSP0248_1.2.0: 28.4 Table 78 */ struct pldm_numeric_sensor_value_pdr { struct pldm_value_pdr_hdr hdr; uint16_t terminus_handle; uint16_t sensor_id; uint16_t entity_type; uint16_t entity_instance_num; uint16_t container_id; uint8_t sensor_init; bool8_t sensor_auxiliary_names_pdr; uint8_t base_unit; int8_t unit_modifier; uint8_t rate_unit; uint8_t base_oem_unit_handle; uint8_t aux_unit; int8_t aux_unit_modifier; uint8_t aux_rate_unit; uint8_t rel; uint8_t aux_oem_unit_handle; bool8_t is_linear; uint8_t sensor_data_size; real32_t resolution; real32_t offset; uint16_t accuracy; uint8_t plus_tolerance; uint8_t minus_tolerance; union_sensor_data_size hysteresis; bitfield8_t supported_thresholds; bitfield8_t threshold_and_hysteresis_volatility; real32_t state_transition_interval; real32_t update_interval; union_sensor_data_size max_readable; union_sensor_data_size min_readable; uint8_t range_field_format; bitfield8_t range_field_support; union_range_field_format nominal_value; union_range_field_format normal_max; union_range_field_format normal_min; union_range_field_format warning_high; union_range_field_format warning_low; union_range_field_format critical_high; union_range_field_format critical_low; union_range_field_format fatal_high; union_range_field_format fatal_low; }; /** @struct state_effecter_possible_states * * Structure representing state enums for state effecter */ struct state_effecter_possible_states { uint16_t state_set_id; uint8_t possible_states_size; bitfield8_t states[1]; } __attribute__((packed)); /** @struct pldm_effecter_aux_name_pdr * * Structure representing PLDM aux name numeric effecter value PDR */ struct pldm_effecter_aux_name_pdr { struct pldm_pdr_hdr hdr; uint16_t terminus_handle; uint16_t effecter_id; uint8_t effecter_count; uint8_t effecter_names[1]; } __attribute__((packed)); /** @brief Encode PLDM state effecter PDR * * @param[in/out] effecter Structure to encode. All members of * effecter, except those mentioned in * the @note below, should be initialized * by the caller. * @param[in] allocation_size Size of effecter allocation in bytes * @param[in] possible_states Possible effecter states * @param[in] possible_states_size Size of possible effecter states in * bytes * @param[out] actual_size Size of effecter PDR. Set to 0 on * error. * @return int pldm_completion_codes * PLDM_SUCCESS/PLDM_ERROR/PLDM_ERROR_INVALID_LENGTH * * @note The effecter parameter will be encoded in place. * @note Caller is responsible for allocation of the effecter parameter. Caller * must allocate enough space for the base structure and the * effecter->possible_states array, otherwise the function will fail. * @note effecter->hdr.length, .type, and .version will be set appropriately. */ int encode_state_effecter_pdr( struct pldm_state_effecter_pdr *effecter, size_t allocation_size, const struct state_effecter_possible_states *possible_states, size_t possible_states_size, size_t *actual_size); /** @struct set_effecter_state_field * * Structure representing a stateField in SetStateEffecterStates command */ typedef struct state_field_for_state_effecter_set { uint8_t set_request; //!< Whether to change the state uint8_t effecter_state; //!< Expected state of the effecter } __attribute__((packed)) set_effecter_state_field; /** @struct get_sensor_readings_field * * Structure representing a stateField in GetStateSensorReadings command */ typedef struct state_field_for_get_state_sensor_readings { uint8_t sensor_op_state; //!< The state of the sensor itself uint8_t present_state; //!< Return a state value uint8_t previous_state; //!< The state that the presentState was entered //! from. This must be different from the //! present state uint8_t event_state; //!< Return a state value from a PLDM State Set //! that is associated with the sensor } __attribute__((packed)) get_sensor_state_field; /** @struct PLDM_SetStateEffecterStates_Request * * Structure representing PLDM set state effecter states request. */ struct pldm_set_state_effecter_states_req { uint16_t effecter_id; uint8_t comp_effecter_count; set_effecter_state_field field[8]; } __attribute__((packed)); /** @struct pldm_get_pdr_repository_info_resp * * Structure representing GetPDRRepositoryInfo response packet */ struct pldm_pdr_repository_info_resp { uint8_t completion_code; uint8_t repository_state; uint8_t update_time[PLDM_TIMESTAMP104_SIZE]; uint8_t oem_update_time[PLDM_TIMESTAMP104_SIZE]; uint32_t record_count; uint32_t repository_size; uint32_t largest_record_size; uint8_t data_transfer_handle_timeout; } __attribute__((packed)); /** @struct pldm_get_pdr_resp * * structure representing GetPDR response packet * transfer CRC is not part of the structure and will be * added at the end of last packet in multipart transfer */ struct pldm_get_pdr_resp { uint8_t completion_code; uint32_t next_record_handle; uint32_t next_data_transfer_handle; uint8_t transfer_flag; uint16_t response_count; uint8_t record_data[1]; } __attribute__((packed)); /** @struct pldm_get_pdr_req * * structure representing GetPDR request packet */ struct pldm_get_pdr_req { uint32_t record_handle; uint32_t data_transfer_handle; uint8_t transfer_op_flag; uint16_t request_count; uint16_t record_change_number; } __attribute__((packed)); /** @struct pldm_set_event_receiver_req * * Structure representing SetEventReceiver command. * This structure applies only for MCTP as a transport type. */ struct pldm_set_event_receiver_req { uint8_t event_message_global_enable; uint8_t transport_protocol_type; uint8_t event_receiver_address_info; uint16_t heartbeat_timer; } __attribute__((packed)); /** @struct pldm_event_message_buffer_size_req * * Structure representing EventMessageBufferSizes command request data */ struct pldm_event_message_buffer_size_req { uint16_t event_receiver_max_buffer_size; } __attribute__((packed)); /** @struct pldm_event_message_buffer_size_resp * * Structure representing EventMessageBufferSizes command response data */ struct pldm_event_message_buffer_size_resp { uint8_t completion_code; uint16_t terminus_max_buffer_size; } __attribute__((packed)); /** @struct pldm_platform_event_message_supported_req * * structure representing PlatformEventMessageSupported command request data */ struct pldm_event_message_supported_req { uint8_t format_version; } __attribute__((packed)); /** @struct pldm_event_message_supported_response * * structure representing EventMessageSupported command response data */ struct pldm_event_message_supported_resp { uint8_t completion_code; uint8_t synchrony_configuration; bitfield8_t synchrony_configuration_supported; uint8_t number_event_class_returned; uint8_t event_class[1]; } __attribute__((packed)); /** @struct pldm_set_numeric_effecter_value_req * * structure representing SetNumericEffecterValue request packet */ struct pldm_set_numeric_effecter_value_req { uint16_t effecter_id; uint8_t effecter_data_size; uint8_t effecter_value[1]; } __attribute__((packed)); /** @struct pldm_get_state_sensor_readings_req * * Structure representing PLDM get state sensor readings request. */ struct pldm_get_state_sensor_readings_req { uint16_t sensor_id; bitfield8_t sensor_rearm; uint8_t reserved; } __attribute__((packed)); /** @struct pldm_get_state_sensor_readings_resp * * Structure representing PLDM get state sensor readings response. */ struct pldm_get_state_sensor_readings_resp { uint8_t completion_code; uint8_t comp_sensor_count; get_sensor_state_field field[1]; } __attribute__((packed)); /** @struct pldm_sensor_event * * structure representing sensorEventClass */ struct pldm_sensor_event_data { uint16_t sensor_id; uint8_t sensor_event_class_type; uint8_t event_class[1]; } __attribute__((packed)); /** @struct pldm_state_sensor_state * * structure representing sensorEventClass for stateSensorState */ struct pldm_sensor_event_state_sensor_state { uint8_t sensor_offset; uint8_t event_state; uint8_t previous_event_state; } __attribute__((packed)); /** @struct pldm_sensor_event_numeric_sensor_state * * structure representing sensorEventClass for stateSensorState */ struct pldm_sensor_event_numeric_sensor_state { uint8_t event_state; uint8_t previous_event_state; uint8_t sensor_data_size; uint8_t present_reading[1]; } __attribute__((packed)); /** @struct pldm_sensor_event_sensor_op_state * * structure representing sensorEventClass for SensorOpState */ struct pldm_sensor_event_sensor_op_state { uint8_t present_op_state; uint8_t previous_op_state; } __attribute__((packed)); /** @struct pldm_platform_event_message_req * * structure representing PlatformEventMessage command request data */ struct pldm_platform_event_message_req { uint8_t format_version; uint8_t tid; uint8_t event_class; uint8_t event_data[1]; } __attribute__((packed)); /** @struct pldm_poll_for_platform_event_message_req * * structure representing PollForPlatformEventMessage command request data */ struct pldm_poll_for_platform_event_message_req { uint8_t format_version; uint8_t transfer_operation_flag; uint32_t data_transfer_handle; uint16_t event_id_to_acknowledge; }; /** @struct pldm_poll_for_platform_event_message_min_resp * * structure representing PollForPlatformEventMessage command response data */ struct pldm_poll_for_platform_event_message_min_resp { uint8_t completion_code; uint8_t tid; uint16_t event_id; }; /** @struct pldm_platform_event_message_response * * structure representing PlatformEventMessage command response data */ struct pldm_platform_event_message_resp { uint8_t completion_code; uint8_t platform_event_status; } __attribute__((packed)); /** @struct pldm_pdr_repository_chg_event_data * * structure representing pldmPDRRepositoryChgEvent class eventData */ struct pldm_pdr_repository_chg_event_data { uint8_t event_data_format; uint8_t number_of_change_records; uint8_t change_records[1]; } __attribute__((packed)); /** @struct pldm_pdr_repository_chg_event_change_record_data * * structure representing pldmPDRRepositoryChgEvent class eventData's change * record data */ struct pldm_pdr_repository_change_record_data { uint8_t event_data_operation; uint8_t number_of_change_entries; uint32_t change_entry[1]; } __attribute__((packed)); /** @struct pldm_get_numeric_effecter_value_req * * structure representing GetNumericEffecterValue request packet */ struct pldm_get_numeric_effecter_value_req { uint16_t effecter_id; } __attribute__((packed)); /** @struct pldm_get_numeric_effecter_value_resp * * structure representing GetNumericEffecterValue response packet */ struct pldm_get_numeric_effecter_value_resp { uint8_t completion_code; uint8_t effecter_data_size; uint8_t effecter_oper_state; uint8_t pending_and_present_values[1]; } __attribute__((packed)); /** @struct pldm_get_sensor_reading_req * * Structure representing PLDM get sensor reading request */ struct pldm_get_sensor_reading_req { uint16_t sensor_id; bool8_t rearm_event_state; } __attribute__((packed)); /** @struct pldm_get_sensor_reading_resp * * Structure representing PLDM get sensor reading response */ struct pldm_get_sensor_reading_resp { uint8_t completion_code; uint8_t sensor_data_size; uint8_t sensor_operational_state; uint8_t sensor_event_message_enable; uint8_t present_state; uint8_t previous_state; uint8_t event_state; uint8_t present_reading[1]; } __attribute__((packed)); /* Responder */ /* SetNumericEffecterValue */ /** @brief Decode SetNumericEffecterValue request data * * @param[in] msg - Request message * @param[in] payload_length - Length of request message payload * @param[out] effecter_id - used to identify and access the effecter * @param[out] effecter_data_size - The bit width and format of the setting * value for the effecter. * value:{uint8,sint8,uint16,sint16,uint32,sint32} * @param[out] effecter_value - The setting value of numeric effecter being * requested. * @return pldm_completion_codes */ int decode_set_numeric_effecter_value_req(const struct pldm_msg *msg, size_t payload_length, uint16_t *effecter_id, uint8_t *effecter_data_size, uint8_t effecter_value[4]); /** @brief Create a PLDM response message for SetNumericEffecterValue * * @param[in] instance_id - Message's instance id * @param[in] completion_code - PLDM completion code * @param[out] msg - Message will be written to this * @param[in] payload_length - Length of request message payload * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.body.payload' */ int encode_set_numeric_effecter_value_resp(uint8_t instance_id, uint8_t completion_code, struct pldm_msg *msg, size_t payload_length); /* SetStateEffecterStates */ /** @brief Create a PLDM response message for SetStateEffecterStates * * @param[in] instance_id - Message's instance id * @param[in] completion_code - PLDM completion code * @param[out] msg - Message will be written to this * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.body.payload' */ int encode_set_state_effecter_states_resp(uint8_t instance_id, uint8_t completion_code, struct pldm_msg *msg); /** @brief Decode SetStateEffecterStates request data * * @param[in] msg - Request message * @param[in] payload_length - Length of request message payload * @param[out] effecter_id - used to identify and access the effecter * @param[out] comp_effecter_count - number of individual sets of effecter * information. Upto eight sets of state effecter info can be accessed * for a given effecter. * @param[out] field - each unit is an instance of the stateFileld structure * that is used to set the requested state for a particular effecter * within the state effecter. This field holds the starting address of * the stateField values. The user is responsible to allocate the * memory prior to calling this command. Since the state field count is * not known in advance, the user should allocate the maximum size * always, which is 8 in number. * @return pldm_completion_codes */ int decode_set_state_effecter_states_req(const struct pldm_msg *msg, size_t payload_length, uint16_t *effecter_id, uint8_t *comp_effecter_count, set_effecter_state_field *field); /* GetPDR */ /** @brief Create a PLDM response message for GetPDR * * @param[in] instance_id - Message's instance id * @param[in] completion_code - PLDM completion code * @param[in] next_record_hndl - The recordHandle for the PDR that is next in * the PDR Repository * @param[in] next_data_transfer_hndl - A handle that identifies the next * portion of the PDR data to be transferred, if any * @param[in] transfer_flag - Indicates the portion of PDR data being * transferred * @param[in] resp_cnt - The number of recordData bytes returned in this * response * @param[in] record_data - PDR data bytes of length resp_cnt * @param[in] transfer_crc - A CRC-8 for the overall PDR. This is present only * in the last part of a PDR being transferred * @param[out] msg - Message will be written to this * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_get_pdr_resp(uint8_t instance_id, uint8_t completion_code, uint32_t next_record_hndl, uint32_t next_data_transfer_hndl, uint8_t transfer_flag, uint16_t resp_cnt, const uint8_t *record_data, uint8_t transfer_crc, struct pldm_msg *msg); /** @brief Decode GetPDR request data * * @param[in] msg - Request message * @param[in] payload_length - Length of request message payload * @param[out] record_hndl - The recordHandle value for the PDR to be retrieved * @param[out] data_transfer_hndl - Handle used to identify a particular * multipart PDR data transfer operation * @param[out] transfer_op_flag - Flag to indicate the first or subsequent * portion of transfer * @param[out] request_cnt - The maximum number of record bytes requested * @param[out] record_chg_num - Used to determine whether the PDR has changed * while PDR transfer is going on * @return pldm_completion_codes */ int decode_get_pdr_req(const struct pldm_msg *msg, size_t payload_length, uint32_t *record_hndl, uint32_t *data_transfer_hndl, uint8_t *transfer_op_flag, uint16_t *request_cnt, uint16_t *record_chg_num); /* GetStateSensorReadings */ /** @brief Decode GetStateSensorReadings request data * * @param[in] msg - Request message * @param[in] payload_length - Length of request message payload * @param[out] sensor_id - used to identify and access the simple or composite * sensor * @param[out] sensor_rearm - Each bit location in this field corresponds to a * particular sensor within the state sensor, where bit [0] corresponds * to the first state sensor (sensor offset 0) and bit [7] corresponds * to the eighth sensor (sensor offset 7), sequentially. * @param[out] reserved - value: 0x00 * @return pldm_completion_codes */ int decode_get_state_sensor_readings_req(const struct pldm_msg *msg, size_t payload_length, uint16_t *sensor_id, bitfield8_t *sensor_rearm, uint8_t *reserved); /** @brief Encode GetStateSensorReadings response data * * @param[in] instance_id - Message's instance id * @param[in] completion_code - PLDM completion code * @param[out] comp_sensor_count - The number of individual sets of sensor * information that this command accesses * @param[out] field - Each stateField is an instance of a stateField structure * that is used to return the present operational state setting and the * present state and event state for a particular set of sensor * information contained within the state sensor * @param[out] msg - Message will be written to this * @return pldm_completion_codes */ int encode_get_state_sensor_readings_resp(uint8_t instance_id, uint8_t completion_code, uint8_t comp_sensor_count, get_sensor_state_field *field, struct pldm_msg *msg); /* GetNumericEffecterValue */ /** @brief Decode GetNumericEffecterValue request data * * @param[in] msg - Request message * @param[in] payload_length - Length of request message payload * @param[out] effecter_id - used to identify and access the effecter * @return pldm_completion_codes */ int decode_get_numeric_effecter_value_req(const struct pldm_msg *msg, size_t payload_length, uint16_t *effecter_id); /** @brief Create a PLDM response message for GetNumericEffecterValue * * @param[in] instance_id - Message's instance id * @param[in] completion_code - PLDM completion code * @param[in] effecter_data_size - The bit width and format of the setting * value for the effecter. * value:{uint8,sint8,uint16,sint16,uint32,sint32} * @param[in] effecter_oper_state - The state of the effecter itself * @param[in] pending_value - The pending numeric value setting of the * effecter. The effecterDataSize field indicates the number of * bits used for this field * @param[in] present_value - The present numeric value setting of the * effecter. The effecterDataSize indicates the number of bits * used for this field * @param[out] msg - Message will be written to this * @param[in] payload_length - Length of request message payload * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_get_numeric_effecter_value_resp( uint8_t instance_id, uint8_t completion_code, uint8_t effecter_data_size, uint8_t effecter_oper_state, const uint8_t *pending_value, const uint8_t *present_value, struct pldm_msg *msg, size_t payload_length); /* GetSensorReading */ /** @brief Decode GetSensorReading request data * * @param[in] msg - Request message * @param[in] payload_length - Length of request message payload * @param[out] sensor_id - A handle that is used to identify and access * the sensor * @param[out] rearm_event_state - true = manually re-arm EventState after * responding to this request, false = no manual re-arm * @return pldm_completion_codes */ int decode_get_sensor_reading_req(const struct pldm_msg *msg, size_t payload_length, uint16_t *sensor_id, bool8_t *rearm_event_state); /** @brief Encode GetSensorReading response data * * @param[in] instance_id - Message's instance id * @param[in] completion_code - PLDM completion code * @param[out] sensor_data_size - The bit width and format of reading and * threshold values * @param[out] sensor_operational_state - The state of the sensor itself * @param[out] sensor_event_message_enable - value: { noEventGeneration, * eventsDisabled, eventsEnabled, opEventsOnlyEnabled, * stateEventsOnlyEnabled } * @param[out] present_state - The most recently assessed state value monitored * by the sensor * @param[out] previous_state - The state that the presentState was entered * from * @param[out] event_state - Indicates which threshold crossing assertion * events have been detected * @param[out] present_reading - The present value indicated by the sensor * @param[out] msg - Message will be written to this * @param[in] payload_length - Length of request message payload * @return pldm_completion_codes */ int encode_get_sensor_reading_resp(uint8_t instance_id, uint8_t completion_code, uint8_t sensor_data_size, uint8_t sensor_operational_state, uint8_t sensor_event_message_enable, uint8_t present_state, uint8_t previous_state, uint8_t event_state, const uint8_t *present_reading, struct pldm_msg *msg, size_t payload_length); /* Requester */ /*GetPDRRepositoryInfo*/ /** @brief Encode GetPDRRepositoryInfo response data * * @param[in] instance_id - Message's instance id * @param[in] completion_code - PLDM completion code * @param[in] repository_state - PLDM repository state * @param[in] update_time - When the standard PDR repository data was * originally created * @param[in] oem_update_time - when OEM PDRs in the PDR Repository were * originally created * @param[in] record_count - Total number of PDRs in this repository * @param[in] repository_size - Size of the PDR Repository in bytes * @param[in] largest_record_size - Size of the largest record in the PDR * Repository in bytes * @param[in] data_transfer_handle_timeout - Data transmission timeout * @param[out] msg - Message will be written to this * @return pldm_completion_codes */ int encode_get_pdr_repository_info_resp( uint8_t instance_id, uint8_t completion_code, uint8_t repository_state, const uint8_t *update_time, const uint8_t *oem_update_time, uint32_t record_count, uint32_t repository_size, uint32_t largest_record_size, uint8_t data_transfer_handle_timeout, struct pldm_msg *msg); /** @brief Decode GetPDRRepositoryInfo response data * * @param[in] msg - Response message * @param[in] payload_length - Length of response message payload * @param[out] completion_code - PLDM completion code * @param[out] repository_state - PLDM repository state * @param[out] update_time - When the standard PDR repository data was * originally created * @param[out] oem_update_time - when OEM PDRs in the PDR Repository were * originally created * @param[out] record_count - Total number of PDRs in this repository * @param[out] repository_size - Size of the PDR Repository in bytes * @param[out] largest_record_size - Size of the largest record in the PDR * Repository in bytes * @param[out] data_transfer_handle_timeout - Data transmission timeout * @return pldm_completion_codes */ int decode_get_pdr_repository_info_resp( const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code, uint8_t *repository_state, uint8_t *update_time, uint8_t *oem_update_time, uint32_t *record_count, uint32_t *repository_size, uint32_t *largest_record_size, uint8_t *data_transfer_handle_timeout); /* GetPDR */ /** @brief Create a PLDM request message for GetPDR * * @param[in] instance_id - Message's instance id * @param[in] record_hndl - The recordHandle value for the PDR to be retrieved * @param[in] data_transfer_hndl - Handle used to identify a particular * multipart PDR data transfer operation * @param[in] transfer_op_flag - Flag to indicate the first or subsequent * portion of transfer * @param[in] request_cnt - The maximum number of record bytes requested * @param[in] record_chg_num - Used to determine whether the PDR has changed * while PDR transfer is going on * @param[out] msg - Message will be written to this * @param[in] payload_length - Length of request message payload * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_get_pdr_req(uint8_t instance_id, uint32_t record_hndl, uint32_t data_transfer_hndl, uint8_t transfer_op_flag, uint16_t request_cnt, uint16_t record_chg_num, struct pldm_msg *msg, size_t payload_length); /** @brief Decode GetPDR response data * * Note: * * If the return value is not PLDM_SUCCESS, it represents a * transport layer error. * * If the completion_code value is not PLDM_SUCCESS, it represents a * protocol layer error and all the out-parameters are invalid. * * @param[in] msg - Request message * @param[in] payload_length - Length of request message payload * @param[out] completion_code - PLDM completion code * @param[out] next_record_hndl - The recordHandle for the PDR that is next in * the PDR Repository * @param[out] next_data_transfer_hndl - A handle that identifies the next * portion of the PDR data to be transferred, if any * @param[out] transfer_flag - Indicates the portion of PDR data being * transferred * @param[out] resp_cnt - The number of recordData bytes returned in this * response * @param[out] record_data - PDR data bytes of length resp_cnt, or NULL to * skip the copy and place the actual length in resp_cnt. * @param[in] record_data_length - Length of record_data * @param[out] transfer_crc - A CRC-8 for the overall PDR. This is present only * in the last part of a PDR being transferred * @return pldm_completion_codes */ int decode_get_pdr_resp(const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code, uint32_t *next_record_hndl, uint32_t *next_data_transfer_hndl, uint8_t *transfer_flag, uint16_t *resp_cnt, uint8_t *record_data, size_t record_data_length, uint8_t *transfer_crc); /* SetStateEffecterStates */ /** @brief Create a PLDM request message for SetStateEffecterStates * * @param[in] instance_id - Message's instance id * @param[in] effecter_id - used to identify and access the effecter * @param[in] comp_effecter_count - number of individual sets of effecter * information. Upto eight sets of state effecter info can be accessed * for a given effecter. * @param[in] field - each unit is an instance of the stateField structure * that is used to set the requested state for a particular effecter * within the state effecter. This field holds the starting address of * the stateField values. The user is responsible to allocate the * memory prior to calling this command. The user has to allocate the * field parameter as sizeof(set_effecter_state_field) * * comp_effecter_count * @param[out] msg - Message will be written to this * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_set_state_effecter_states_req(uint8_t instance_id, uint16_t effecter_id, uint8_t comp_effecter_count, set_effecter_state_field *field, struct pldm_msg *msg); /** @brief Decode SetStateEffecterStates response data * * Note: * * If the return value is not PLDM_SUCCESS, it represents a * transport layer error. * * If the completion_code value is not PLDM_SUCCESS, it represents a * protocol layer error and all the out-parameters are invalid. * * @param[in] msg - Request message * @param[in] payload_length - Length of response message payload * @param[out] completion_code - PLDM completion code * @return pldm_completion_codes */ int decode_set_state_effecter_states_resp(const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code); /* SetNumericEffecterValue */ /** @brief Create a PLDM request message for SetNumericEffecterValue * * @param[in] instance_id - Message's instance id * @param[in] effecter_id - used to identify and access the effecter * @param[in] effecter_data_size - The bit width and format of the setting * value for the effecter. * value:{uint8,sint8,uint16,sint16,uint32,sint32} * @param[in] effecter_value - The setting value of numeric effecter being * requested. * @param[in] payload_length - Length of request message payload * @param[out] msg - Message will be written to this * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_set_numeric_effecter_value_req(uint8_t instance_id, uint16_t effecter_id, uint8_t effecter_data_size, const uint8_t *effecter_value, struct pldm_msg *msg, size_t payload_length); /** @brief Decode SetNumericEffecterValue response data * @param[in] msg - Request message * @param[in] payload_length - Length of response message payload * @param[out] completion_code - PLDM completion code * @return pldm_completion_codes */ int decode_set_numeric_effecter_value_resp(const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code); /** @brief Create a PLDM request message for GetStateSensorReadings * * @param[in] instance_id - Message's instance id * @param[in] sensor_id - used to identify and access the simple or composite * sensor * @param[in] sensorRearm - Each bit location in this field corresponds to a * particular sensor within the state sensor, where bit [0] corresponds * to the first state sensor (sensor offset 0) and bit [7] corresponds * to the eighth sensor (sensor offset 7), sequentially * @param[in] reserved - value: 0x00 * @param[out] msg - Message will be written to this * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_get_state_sensor_readings_req(uint8_t instance_id, uint16_t sensor_id, bitfield8_t sensor_rearm, uint8_t reserved, struct pldm_msg *msg); /** @brief Decode GetStateSensorReadings response data * * @param[in] msg - Request message * @param[in] payload_length - Length of response message payload * @param[out] completion_code - PLDM completion code * @param[in,out] comp_sensor_count - The number of individual sets of sensor * information that this command accesses * @param[out] field - Each stateField is an instance of a stateField structure * that is used to return the present operational state setting and the * present state and event state for a particular set of sensor * information contained within the state sensor * @return pldm_completion_codes */ int decode_get_state_sensor_readings_resp(const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code, uint8_t *comp_sensor_count, get_sensor_state_field *field); /* PlatformEventMessage */ /** @brief Decode PlatformEventMessage request data * @param[in] msg - Request message * @param[in] payload_length - Length of response message payload * @param[out] format_version - Version of the event format * @param[out] tid - Terminus ID for the terminus that originated the event * message * @param[out] event_class - The class of event being sent * @param[out] event_data_offset - Offset where the event data should be read * from pldm msg * @return pldm_completion_codes */ int decode_platform_event_message_req(const struct pldm_msg *msg, size_t payload_length, uint8_t *format_version, uint8_t *tid, uint8_t *event_class, size_t *event_data_offset); /** @brief Decode PollForEventMessage request data * @param[in] msg - Request message * @param[in] payload_length - Length of response message payload * @param[out] format_version - Version of the event format * @param[out] transfer_operation_flag - The transfer operation flag * @param[out] data_transfer_handle - The data transfer handle * @param[out] event_id_to_acknowledge - The class of event being sent * from pldm msg * @return pldm_completion_codes */ int decode_poll_for_platform_event_message_req( const struct pldm_msg *msg, size_t payload_length, uint8_t *format_version, uint8_t *transfer_operation_flag, uint32_t *data_transfer_handle, uint16_t *event_id_to_acknowledge); /** @brief Encode PlatformEventMessage response data * @param[in] instance_id - Message's instance id * @param[in] completion_code - PLDM completion code * @param[in] platform_event_status - Response status of the event message * command * @param[out] msg - Message will be written to this * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_platform_event_message_resp(uint8_t instance_id, uint8_t completion_code, uint8_t platform_event_status, struct pldm_msg *msg); /** @brief Encode PollForPlatformEventMessage response data * @param[in] instance_id - Message's instance id * @param[in] completion_code - PLDM completion code * @param[in] tid - Terminus ID * @param[in] event_id - The event id * @param[in] next_data_transfer_handle - The next data transfer handle * @param[in] transfer_flag - The transfer flag * @param[in] event_class - The event class * @param[in] event_data_size - The event data size * @param[in] event_data - The event data * @param[in] checksum - The checksum * @param[out] msg - Message will be written to this * @param[in] payload_length - Length of Response message payload * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_poll_for_platform_event_message_resp( uint8_t instance_id, uint8_t completion_code, uint8_t tid, uint16_t event_id, uint32_t next_data_transfer_handle, uint8_t transfer_flag, uint8_t event_class, uint32_t event_data_size, uint8_t *event_data, uint32_t checksum, struct pldm_msg *msg, size_t payload_length); /** @brief Encode PlatformEventMessage request data * @param[in] instance_id - Message's instance id * @param[in] format_version - Version of the event format * @param[in] tid - Terminus ID for the terminus that originated the event * message * @param[in] event_class - The class of event being sent * @param[in] event_data - the event data should be read from pldm msg * @param[in] event_data_length - Length of the event data * @param[out] msg - Request message * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_platform_event_message_req( uint8_t instance_id, uint8_t format_version, uint8_t tid, uint8_t event_class, const uint8_t *event_data, size_t event_data_length, struct pldm_msg *msg, size_t payload_length); /** @brief Encode PollForPlatformEventMessage request data * @param[in] instance_id - Message's instance id * @param[in] format_version - Version of the event format * @param[in] transfer_operation_flag - Tranfer operation * @param[in] data_transfer_handle - The data transfer handle * @param[in] event_id_to_acknowledge - the event data to acknowleadge * @param[out] msg - Request message * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_poll_for_platform_event_message_req(uint8_t instance_id, uint8_t format_version, uint8_t transfer_operation_flag, uint32_t data_transfer_handle, uint16_t event_id_to_acknowledge, struct pldm_msg *msg, size_t payload_length); /** @brief Decode PollForPlatformEventMessage response data * @param[in] msg - Request message * @param[in] payload_length - Length of Response message payload * @param[out] completion_code - the completion code * @param[out] tid - the tid * @param[out] event_id - The event id * @param[out] next_data_transfer_handle - The next data transfer handle * @param[out] transfer_flag - The transfer flag * @param[out] event_class - The event class * @param[out] event_data_size - The event data size * @param[out] event_data - The event data. The event_data pointer points into * msg.payload and therefore has the same lifetime as msg.payload. * @param[out] event_data_integrity_checksum - The checksum * command * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int decode_poll_for_platform_event_message_resp( const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code, uint8_t *tid, uint16_t *event_id, uint32_t *next_data_transfer_handle, uint8_t *transfer_flag, uint8_t *event_class, uint32_t *event_data_size, void **event_data, uint32_t *event_data_integrity_checksum); /** @brief Decode PlatformEventMessage response data * @param[in] msg - Request message * @param[in] payload_length - Length of Response message payload * @param[out] completion_code - PLDM completion code * @param[out] platform_event_status - Response status of the event message * command * @return pldm_completion_codes */ int decode_platform_event_message_resp(const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code, uint8_t *platform_event_status); /** @brief Decode EventMessageBufferSize response data * @param[in] msg - Request message * @param[in] payload_length - Length of Response message payload * @param[out] completion_code - PLDM completion code * @return pldm_completion_codes */ int decode_event_message_buffer_size_resp(const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code, uint16_t *terminus_max_buffer_size); /** @brief Encode EventMessageBufferSize request data * @param[in] instance_id - Message's instance id * @param[in] event_receiver_max_buffer_size - Max buffer size * @param[out] msg - Request message * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_event_message_buffer_size_req(uint8_t instance_id, uint16_t event_receiver_max_buffer_size, struct pldm_msg *msg); /** @brief Encode EventMessageSupported request data * * @param[in] instance_id - Message's instance id * @param[in] format_version - Version of the event format * @param[out] msg - Request message * * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_event_message_supported_req(uint8_t instance_id, uint8_t format_version, struct pldm_msg *msg); /** @brief Decode EventMessageSupported response data * * @param[in] msg - Request message * @param[in] payload_length - Length of Response message payload * @param[out] completion_code - PLDM completion code * @param[out] synchrony_config - the synchrony configuration * @param[out] synchrony_config_support - the synchrony configuration support * @param[out] number_event_class_returned - PLDM completion code * @param[out] event_class - the event classes * @param[in] event_class_count - the event class count * * @return pldm_completion_codes */ int decode_event_message_supported_resp(const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code, uint8_t *synchrony_config, bitfield8_t *synchrony_config_support, uint8_t *number_event_class_returned, uint8_t *event_class, uint8_t event_class_count); /** @brief Decode sensorEventData response data * * @param[in] event_data - event data from the response message * @param[in] event_data_length - length of the event data * @param[out] sensor_id - sensorID value of the sensor * @param[out] sensor_event_class_type - Type of sensor event class * @param[out] event_class_data_offset - Offset where the event class data * should be read from event data * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'event_data' */ int decode_sensor_event_data(const uint8_t *event_data, size_t event_data_length, uint16_t *sensor_id, uint8_t *sensor_event_class_type, size_t *event_class_data_offset); /** @brief Decode sensorOpState response data * * @param[in] sensor_data - sensor_data for sensorEventClass = sensorOpState * @param[in] sensor_data_length - Length of sensor_data * @param[out] present_op_state - The sensorOperationalState value from the * state change that triggered the event message * @param[out] previous_op_state - The sensorOperationalState value for the * state from which the present state was entered * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'sensor_data' */ int decode_sensor_op_data(const uint8_t *sensor_data, size_t sensor_data_length, uint8_t *present_op_state, uint8_t *previous_op_state); /** @brief Decode stateSensorState response data * * @param[in] sensor_data - sensor_data for sensorEventClass = stateSensorState * @param[in] sensor_data_length - Length of sensor_data * @param[out] sensor_offset - Identifies which state sensor within a composite * state sensor the event is being returned for * @param[out] event_state - The event state value from the state change that * triggered the event message * @param[out] previous_event_state - The event state value for the state from * which the present event state was entered * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'sensor_data' */ int decode_state_sensor_data(const uint8_t *sensor_data, size_t sensor_data_length, uint8_t *sensor_offset, uint8_t *event_state, uint8_t *previous_event_state); /** @brief Decode numericSensorState response data * * @param[in] sensor_data - sensor_data for sensorEventClass = * numericSensorState * @param[in] sensor_data_length - Length of sensor_data * @param[out] event_state - The eventState value from the state change that * triggered the event message * @param[out] previous_event_state - The eventState value for the state from * which the present state was entered * @param[out] sensor_data_size - The bit width and format of reading and * threshold values that the sensor returns * @param[out] present_reading - The present value indicated by the sensor * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'sensor_data' */ int decode_numeric_sensor_data(const uint8_t *sensor_data, size_t sensor_data_length, uint8_t *event_state, uint8_t *previous_event_state, uint8_t *sensor_data_size, uint32_t *present_reading); /** @brief Decode Numeric Sensor Pdr data * * @param[in] pdr_data - pdr data for numeric sensor * @param[in] pdr_data_length - Length of pdr data * @param[out] pdr_value - unpacked numeric sensor PDR struct */ int decode_numeric_sensor_pdr_data( const void *pdr_data, size_t pdr_data_length, struct pldm_numeric_sensor_value_pdr *pdr_value); /* GetNumericEffecterValue */ /** @brief Create a PLDM request message for GetNumericEffecterValue * * @param[in] instance_id - Message's instance id * @param[in] effecter_id - used to identify and access the effecter * @param[out] msg - Message will be written to this * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_get_numeric_effecter_value_req(uint8_t instance_id, uint16_t effecter_id, struct pldm_msg *msg); /** @brief Create a PLDM response message for GetNumericEffecterValue * * @param[in] msg - Request message * @param[in] payload_length - Length of request message payload * @param[out] completion_code - PLDM completion code * @param[out] effecter_data_size - The bit width and format of the setting * value for the effecter. * value:{uint8,sint8,uint16,sint16,uint32,sint32} * @param[out] effecter_oper_state - The state of the effecter itself * @param[out] pending_value - The pending numeric value setting of the * effecter. The effecterDataSize field indicates the number of * bits used for this field * @param[out] present_value - The present numeric value setting of the * effecter. The effecterDataSize indicates the number of bits * used for this field * @return pldm_completion_codes */ int decode_get_numeric_effecter_value_resp(const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code, uint8_t *effecter_data_size, uint8_t *effecter_oper_state, uint8_t *pending_value, uint8_t *present_value); /** @brief Decode pldmPDRRepositoryChgEvent response data * * @param[in] event_data - eventData for pldmPDRRepositoryChgEvent * @param[in] event_data_size - Length of event_data * @param[out] event_data_format - This field indicates if the changedRecords * are of PDR Types or PDR Record Handles * @param[out] number_of_change_records - The number of changeRecords following * this field * @param[out] change_record_data_offset - Identifies where changeRecord data * is located within event_data * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'event_data' */ int decode_pldm_pdr_repository_chg_event_data( const uint8_t *event_data, size_t event_data_size, uint8_t *event_data_format, uint8_t *number_of_change_records, size_t *change_record_data_offset); /** @brief Decode pldmMessagePollEvent event data type * * @param[in] event_data - event data from the response message * @param[in] event_data_length - length of the event data * @param[out] format_version - Version of the event format * @param[out] event_id - The event id * @param[out] data_transfer_handle - The data transfer handle * should be read from event data * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'event_data' */ int decode_pldm_message_poll_event_data(const uint8_t *event_data, size_t event_data_length, uint8_t *format_version, uint16_t *event_id, uint32_t *data_transfer_handle); /** @brief Encode pldmMessagePollEvent event data type * * @param[in] format_version - Version of the event format * @param[in] event_id - The event id * @param[in] data_transfer_handle - The data transfer handle * @param[out] event_data - event data to the response message * @param[in] event_data_length - length of the event data * @return pldm_completion_codes * @note The caller is responsible for allocating and deallocating the * event_data */ int encode_pldm_message_poll_event_data(uint8_t format_version, uint16_t event_id, uint32_t data_transfer_handle, uint8_t *event_data, size_t event_data_length); /** @brief Encode PLDM PDR Repository Change eventData * @param[in] event_data_format - Format of this event data (e.g. * FORMAT_IS_PDR_HANDLES) * @param[in] number_of_change_records - Number of changeRecords in this * eventData * @param[in] event_data_operations - Array of eventDataOperations * (e.g. RECORDS_ADDED) for each changeRecord in this eventData. This array * should contain number_of_change_records elements. * @param[in] numbers_of_change_entries - Array of numbers of changeEntrys * for each changeRecord in this eventData. This array should contain * number_of_change_records elements. * @param[in] change_entries - 2-dimensional array of arrays of changeEntrys, * one array per changeRecord in this eventData. The toplevel array should * contain number_of_change_records elements. Each subarray [i] should * contain numbers_of_change_entries[i] elements. * @param[in] event_data - The eventData will be encoded into this. This entire * structure must be max_change_records_size long. It must be large enough * to accomodate the data to be encoded. The caller is responsible for * allocating and deallocating it, including the variable-size * 'event_data.change_records' field. If this parameter is NULL, * PLDM_SUCCESS will be returned and actual_change_records_size will be set * to reflect the required size of the structure. * @param[out] actual_change_records_size - The actual number of meaningful * encoded bytes in event_data. The caller can over-allocate memory and use * this output to determine the real size of the structure. * @param[in] max_change_records_size - The size of event_data in bytes. If the * encoded message would be larger than this value, an error is returned. * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'event_data.change_records' */ int encode_pldm_pdr_repository_chg_event_data( uint8_t event_data_format, uint8_t number_of_change_records, const uint8_t *event_data_operations, const uint8_t *numbers_of_change_entries, const uint32_t *const *change_entries, struct pldm_pdr_repository_chg_event_data *event_data, size_t *actual_change_records_size, size_t max_change_records_size); /** @brief Encode event data for a PLDM Sensor Event * * @param[out] event_data The object to store the encoded event in * @param[in] event_data_size Size of the allocation for event_data * @param[in] sensor_id Sensor ID * @param[in] sensor_event_class Sensor event class * @param[in] sensor_offset Offset * @param[in] event_state Event state * @param[in] previous_event_state Previous event state * @param[out] actual_event_data_size The real size in bytes of the event_data * @return int pldm_completion_codes PLDM_SUCCESS/PLDM_ERROR_INVALID_LENGTH * @note If event_data is NULL, then *actual_event_data_size will be set to * reflect the size of the event data, and PLDM_SUCCESS will be returned. * @note The caller is responsible for allocating and deallocating the * event_data */ int encode_sensor_event_data(struct pldm_sensor_event_data *event_data, size_t event_data_size, uint16_t sensor_id, enum sensor_event_class_states sensor_event_class, uint8_t sensor_offset, uint8_t event_state, uint8_t previous_event_state, size_t *actual_event_data_size); /** @brief Decode PldmPDRRepositoryChangeRecord response data * * @param[in] change_record_data - changeRecordData for * pldmPDRRepositoryChgEvent * @param[in] change_record_data_size - Length of change_record_data * @param[out] event_data_operation - This field indicates the changeEntries * operation types * @param[out] number_of_change_entries - The number of changeEntries following * this field * @param[out] change_entry_data_offset - Identifies where changeEntries data * is located within change_record_data * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'change_record_data' */ int decode_pldm_pdr_repository_change_record_data( const uint8_t *change_record_data, size_t change_record_data_size, uint8_t *event_data_operation, uint8_t *number_of_change_entries, size_t *change_entry_data_offset); /* GetSensorReading */ /** @brief Encode GetSensorReading request data * * @param[in] instance_id - Message's instance id * @param[in] sensor_id - A handle that is used to identify and access the * sensor * @param[in] rearm_event_state - true = manually re-arm EventState after * responding to this request, false = no manual re-arm * @param[out] msg - Message will be written to this * @return pldm_completion_codes * @note Caller is responsible for memory alloc and dealloc of param * 'msg.payload' */ int encode_get_sensor_reading_req(uint8_t instance_id, uint16_t sensor_id, bool8_t rearm_event_state, struct pldm_msg *msg); /** @brief Decode GetSensorReading response data * * @param[in] msg - Request message * @param[in] payload_length - Length of response message payload * @param[out] completion_code - PLDM completion code * @param[out] sensor_data_size - The bit width and format of reading and * threshold values * @param[out] sensor_operational_state - The state of the sensor itself * @param[out] sensor_event_message_enable - value: { noEventGeneration, * eventsDisabled, eventsEnabled, opEventsOnlyEnabled, * stateEventsOnlyEnabled } * @param[out] present_state - The most recently assessed state value monitored * by the sensor * @param[out] previous_state - The state that the presentState was entered * from * @param[out] event_state - Indicates which threshold crossing assertion * events have been detected * @param[out] present_reading - The present value indicated by the sensor * @return pldm_completion_codes */ int decode_get_sensor_reading_resp( const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code, uint8_t *sensor_data_size, uint8_t *sensor_operational_state, uint8_t *sensor_event_message_enable, uint8_t *present_state, uint8_t *previous_state, uint8_t *event_state, uint8_t *present_reading); /** @brief Encode the SetEventReceiver request message * * @param[in] instance_id - Message's instance id * @param[in] event_message_global_enable - This value is used to enable or * disable event message generation from the terminus value: { * disable, enableAsync, enablePolling, enableAsyncKeepAlive } * @param[in] transport_protocol_type - This value is provided in the request * to help the responder verify that the content of the * eventReceiverAddressInfo field used in this request is correct for * the messaging protocol supported by the terminus. * @param[in] event_receiver_address_info - this value is a medium and * protocol-specific address that the responder should use when * transmitting event messages using the indicated protocol * @param[in] heartbeat_timer - Amount of time in seconds after each elapsing * of which the terminus shall emit a heartbeat event to the receiver * @param[out] msg - Argument to capture the Message * @return pldm_completion_codes */ int encode_set_event_receiver_req(uint8_t instance_id, uint8_t event_message_global_enable, uint8_t transport_protocol_type, uint8_t event_receiver_address_info, uint16_t heartbeat_timer, struct pldm_msg *msg); /** @brief Decode the SetEventReceiver response message * * @param[in] msg - Request message * @param[in] payload_length - Length of response message payload * @param[out] completion_code - PLDM completion code * @return pldm_completion_codes */ int decode_set_event_receiver_resp(const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code); /** @brief Decode the SetEventReceiver request message * * @param[in] msg - Request message * @param[in] payload_length - Length of request message payload * @param[out] event_message_global_enable - This value is used to enable or * disable event message generation from the terminus value: { * disable, enableAsync, enablePolling, enableAsyncKeepAlive } * @param[out] transport_protocol_type - This value is provided in the request * to help the responder verify that the content of the * eventReceiverAddressInfo field used in this request is correct for * the messaging protocol supported by the terminus. * @param[out] event_receiver_address_info - This value is a medium and * protocol-specific address that the responder should use when * transmitting event messages using the indicated protocol * @param[out] heartbeat_timer - Amount of time in seconds after each elapsing * of which the terminus shall emit a heartbeat event to the receiver * @return pldm_completion_codes */ int decode_set_event_receiver_req(const struct pldm_msg *msg, size_t payload_length, uint8_t *event_message_global_enable, uint8_t *transport_protocol_type, uint8_t *event_receiver_address_info, uint16_t *heartbeat_timer); /** @brief Encode the SetEventReceiver response message * * @param[in] instance_id - Message's instance id * @param[in] completion_code - PLDM completion code * @param[out] msg - Argument to capture the Message * @return pldm_completion_codes */ int encode_set_event_receiver_resp(uint8_t instance_id, uint8_t completion_code, struct pldm_msg *msg); #ifdef __cplusplus } #endif #endif /* PLATFORM_H */