| #pragma once |
| |
| #include <stdint.h> |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif |
| |
| /** |
| * @brief If expr is non zero, return with that value. |
| */ |
| #ifndef RETURN_IF_IERROR |
| #define RETURN_IF_IERROR(expr) \ |
| do \ |
| { \ |
| int __status = (expr); \ |
| if (__status != 0) \ |
| { \ |
| return __status; \ |
| } \ |
| } while (0) |
| #endif |
| |
| /** |
| * @brief RDE BEJ decoding errors. |
| */ |
| enum BejError |
| { |
| bejErrorNoError = 0, |
| bejErrorUnknown, |
| bejErrorInvalidSize, |
| bejErrorNotSuppoted, |
| bejErrorUnknownProperty, |
| bejErrorInvalidSchemaType, |
| bejErrorInvalidPropertyOffset, |
| bejErrorNullParameter, |
| }; |
| |
| /** |
| * @brief BEJ schema classes. |
| */ |
| enum BejSchemaClass |
| { |
| bejMajorSchemaClass = 0, |
| bejEventSchemaClass = 1, |
| bejAnnotationSchemaClass = 2, |
| bejCollectionMemberTypeSchemaClass = 3, |
| bejErrorSchemaClass = 4, |
| }; |
| |
| /** |
| * @brief BEJ data types supported in BEJ version 0xF1F0F000. |
| */ |
| enum BejPrincipalDataType |
| { |
| bejSet = 0, |
| bejArray = 1, |
| bejNull = 2, |
| bejInteger = 3, |
| bejEnum = 4, |
| bejString = 5, |
| bejReal = 6, |
| bejBoolean = 7, |
| bejBytestring = 8, |
| bejChoice = 9, |
| bejPropertyAnnotation = 10, |
| bejPrincipalDataReserved1 = 11, |
| bejPrincipalDataReserved2 = 12, |
| bejPrincipalDataReserved3 = 13, |
| bejResourceLink = 14, |
| bejResourceLinkExpansion = 15, |
| }; |
| |
| /** |
| * @brief Format BEJ tuple. |
| */ |
| struct BejTupleF |
| { |
| uint8_t deferredBinding : 1; |
| uint8_t readOnlyProperty : 1; |
| uint8_t nullableProperty : 1; |
| uint8_t reserved : 1; |
| enum BejPrincipalDataType principalDataType : 4; |
| } __attribute__((__packed__)); |
| |
| /** |
| * @brief Sequence Number BEJ tuple. |
| */ |
| struct BejTupleS |
| { |
| uint8_t schema; |
| // Dictionaries contain 16bit sequence numbers. So allocating 16bits for |
| // the sequence number here. |
| uint16_t sequenceNumber; |
| }; |
| |
| /** |
| * @brief Represent offsets of Format, Value Length and Value of a SFLV |
| * tuple. |
| */ |
| struct BejSFLVOffset |
| { |
| uint32_t formatOffset; |
| uint32_t valueLenNnintOffset; |
| uint32_t valueOffset; |
| }; |
| |
| /** |
| * @brief Fields in Bej Real data type. |
| */ |
| struct BejReal |
| { |
| // Number bytes in exp. |
| uint8_t expLen; |
| int64_t whole; |
| uint64_t zeroCount; |
| uint64_t fract; |
| int64_t exp; |
| }; |
| |
| /** |
| * @brief SFLV BEJ tuple infomation. |
| */ |
| struct BejSFLV |
| { |
| struct BejTupleS tupleS; |
| struct BejTupleF format; |
| // Value portion size in bytes. |
| uint32_t valueLength; |
| // Value end-offset with respect to the begining of the encoded stream. |
| uint32_t valueEndOffset; |
| // Pointer to the value. |
| const uint8_t* value; |
| }; |
| |
| /** |
| * @brief bejEncoding PLDM data type header. |
| */ |
| struct BejPldmBlockHeader |
| { |
| uint32_t bejVersion; |
| uint16_t reserved; |
| uint8_t schemaClass; |
| } __attribute__((__packed__)); |
| |
| enum RdeOperationInitType |
| { |
| rdeOpInitOperationHead = 0, |
| rdeOpInitOperationRead = 1, |
| rdeOpInitOperationCreate = 2, |
| rdeOpInitOperationDelete = 3, |
| rdeOpInitOperationUpdate = 4, |
| rdeOpInitOperationReplace = 5, |
| rdeOpInitOperationAction = 6, |
| }; |
| |
| enum RdeMultiReceiveTransferFlag |
| { |
| rdeMRecFlagStart = 0, |
| rdeMRecFlagMiddle = 1, |
| rdeMRecFlagEnd = 2, |
| rdeMRecFlagStartAndEnd = 3, |
| }; |
| |
| struct RdeOperationInitReqHeader |
| { |
| uint32_t resourceID; |
| uint16_t operationID; |
| uint8_t operationType; |
| |
| // OperationFlags bits |
| uint8_t locatorValid : 1; |
| uint8_t containsRequestPayload : 1; |
| uint8_t containsCustomRequestParameters : 1; |
| |
| uint8_t reserved : 5; |
| uint32_t sendDataTransferHandle; |
| uint8_t operationLocatorLength; |
| uint32_t requestPayloadLength; |
| } __attribute__((__packed__)); |
| |
| struct MultipartReceiveResHeader |
| { |
| uint8_t completionCode; |
| uint8_t transferFlag; |
| uint32_t nextDataTransferHandle; |
| uint32_t dataLengthBytes; |
| } __attribute__((__packed__)); |
| |
| /** |
| * @brief Get the unsigned integer value from provided bytes. |
| * |
| * @param[in] bytes - valid pointer to a byte stream in little-endian |
| * format. |
| * @param[in] numOfBytes - number of bytes belongs to the value. Maximum |
| * number of bytes supported is 8. If numOfBytes > 8, the result is |
| * undefined. |
| * @return unsigend 64bit representation of the value. |
| */ |
| uint64_t rdeGetUnsignedInteger(const uint8_t* bytes, uint8_t numOfBytes); |
| |
| /** |
| * @brief Get the value from nnint type. |
| * |
| * @param[in] nnint - nnint should be pointing to a valid nnint. |
| * @return unsigend 64bit representation of the value. |
| */ |
| uint64_t rdeGetNnint(const uint8_t* nnint); |
| |
| /** |
| * @brief Get the size of the complete nnint. |
| * |
| * @param[in] nnint - pointer to a valid nnint. |
| * @return size of the complete nnint. |
| */ |
| uint8_t rdeGetNnintSize(const uint8_t* nnint); |
| |
| #ifdef __cplusplus |
| } |
| #endif |