UmberHubManager/api/lib/BrainStem2/aUEI.h

171 lines
5.1 KiB
C

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* */
/* file: aUEI.h */
/* */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* */
/* description: UEI processing utilities. */
/* */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* */
/* Copyright (c) 2018 Acroname Inc. - All Rights Reserved */
/* */
/* This file is part of the BrainStem release. See the license.txt */
/* file included with this package or go to */
/* https://acroname.com/software/brainstem-development-kit */
/* for full license details. */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef _aUEI_H_
#define _aUEI_H_
#include "aDefs.h"
#include "aPacket.h"
/////////////////////////////////////////////////////////////////////
/// UEI Utilities.
/** \defgroup aUEI UEI Utilities
* \ref aUEI "aUEI.h" Provides structs and utilities for working with UEIs.
*/
/// Typedef Enum #dataType
/**
* UEI datatype
*/
typedef enum {
aUEI_VOID = 0, ///< Void datatype.
aUEI_BYTE = 1, ///< Char datatype.
aUEI_SHORT = 2, ///< Short datatype.
aUEI_INT = 4, ///< Int datatype.
aUEI_BYTES = 5, ///< Bytes datatype
} dataType;
/// Typedef Struct #uei
/**
* UEI data struct.
*/
typedef struct {
uint8_t module; ///< Module address.
uint8_t command; ///< Command code.
uint8_t option; ///< option code & UEI operation.
uint8_t specifier; ///< Entity index & response specifier.
union {
uint8_t byteVal; ///< Char value union member.
uint16_t shortVal; ///< Short value union member.
uint32_t intVal; ///< Int value union member.
struct {
uint8_t* bufPtr;
uint8_t sequenceNumber;
bool continueBit;
size_t bufLength;
size_t* unloadedLength;
} bytes;
} v;
dataType type; ///< Union dataType.
} uei;
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/// Retrieve a short from a UEI.
/**
* \param p Pointer to byte array containing short.
* \return uint16_t The short value.
*/
aLIBEXPORT uint16_t aUEI_RetrieveShort(const uint8_t* p);
/// Store a short in a UEI.
/**
* \param p Pointer to uei shortVal.
* \param v Short value to store.
*/
void aUEI_StoreShort(uint8_t* p, uint16_t v);
/// Retrieve an Int from a UEI.
/**
* \param p Pointer to byte array containing the Int.
* \return uint32_t The integer value.
*/
aLIBEXPORT uint32_t aUEI_RetrieveInt(const uint8_t* p);
/// Store an Int in a UEI.
/**
* \param p Pointer to the IntVal of a UEI.
* \param v The value to store.
*/
void aUEI_StoreInt(uint8_t* p, uint32_t v);
/// Modifies a buffer of sequential ints from a starting location.
/// This conversion is done in place. This is a destructive action.
/**
* \param buf Pointer to byte array containing the Ints.
* \param len Number of sequential Ints to convert.
*/
aLIBEXPORT void aUEI_ModifyIntBuffer(uint32_t* buf, const size_t len);
/// Retrieve sequence number from a BrainStem Packet
/**
* \param packet Pointer to a BrainStem packet.
* \return uint8_t The sequence number.
*/
aLIBEXPORT uint8_t aUEI_getBytesSequence(const aPacket* packet);
/// Retrieve continue bit from a BrainStem Packet
/**
* \param packet Pointer to a BrainStem packet.
* \return bool The value if continue is set or not.
*/
aLIBEXPORT bool aUEI_getBytesContinue(const aPacket* packet);
/// Determine if packet is a full UEI Bytes packet
/**
* \param packet Pointer to a BrainStem packet.
* \return bool If the packet is considered full
*/
aLIBEXPORT bool aUEI_getBytesFullPacket(const aPacket* packet);
/// Determines if a BrainStem packet is a UEI payload
/**
* \param packet Pointer to a BrainStem packet.
* \return bool The value if the payload is UEI or not
*/
aLIBEXPORT bool aUEI_isUEIPayload(const aPacket* packet);
/// Determines if a BrainStem packet is NOT a UEI payload
/**
* \param packet Pointer to a BrainStem packet.
* \return bool The value if the payload is UEI or not
*/
aLIBEXPORT bool aUEI_isNotUEIPayload(const aPacket* packet);
/// Determines if a BrainStem packet is a stream payload
/**
* \param packet Pointer to a BrainStem packet.
* \return bool The value if the payload is a stream payload or not
*/
aLIBEXPORT bool aUEI_isStreamPacket(const aPacket* packet);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif // _aReflex_H_