178 lines
7.2 KiB
C
178 lines
7.2 KiB
C
/**
|
|
* @file
|
|
* @copyright InSolem SARL reserves all rights even in the event of industrial
|
|
* property rights. We reserve all rights of disposal such as
|
|
* copying and passing on to third parties.
|
|
*
|
|
* @version $Revision: #1 $
|
|
* @change $Change: 17569 $
|
|
* @date $Date: 2022/06/08 $
|
|
* @authors $Author: qbourdon $
|
|
*
|
|
* @brief Utility functions for Insolem's projects.
|
|
*/
|
|
|
|
#ifndef INCLUDED_INS_UTILS_H
|
|
#define INCLUDED_INS_UTILS_H
|
|
/******************************************************************************
|
|
* Include-Files
|
|
******************************************************************************/
|
|
#include "nms_types.h"
|
|
|
|
/******************************************************************************
|
|
* Constants and Macros
|
|
******************************************************************************/
|
|
#define NMS_MIN(a,b) ((a >= b) ? b : a)
|
|
#define NMS_MAX(a,b) ((a >= b) ? a : b)
|
|
|
|
/******************************************************************************
|
|
* Type Declarations
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
* Global Variable Declarations
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
* Function Declarations
|
|
******************************************************************************/
|
|
/**
|
|
* @brief This function sets data bytes to memory block.
|
|
*
|
|
* @param[out] dest_pv Pointer to the block of memory to fill.
|
|
* @param val_u8 Byte to be set for initialization.
|
|
* @param len_u32 Length (in bytes !).
|
|
*
|
|
* @note This function fulfills the same task as the library function
|
|
* memset(). This function should be used because at some libraries and
|
|
* compilers the behavior is partly unpredictable.
|
|
*/
|
|
void NmsMemSet(void * dest_pv, uint8 val_u8, uint32 len_u32);
|
|
|
|
|
|
/**
|
|
* @brief This function copies data bytes from memory block to another.
|
|
*
|
|
* @param[out] dest_pv Pointer to the block of memory to fill.
|
|
* @param[in] src_pv Pointer to the source of data to be copied.
|
|
* @param len_u32 Length (in bytes !).
|
|
*
|
|
* @note This function fulfills the same task as the library function
|
|
* memcpy(). This function should be used because at some libraries and
|
|
* compilers the behavior is partly unpredictable.
|
|
*/
|
|
void NmsMemCpy(void * dest_pv, const void * src_pv, uint32 len_u32);
|
|
|
|
|
|
/**
|
|
* @brief This function compares data bytes from memory blocks.
|
|
*
|
|
* @param[in] src1_pv Pointer to first memory block to compare.
|
|
* @param[in] src2_pv Pointer to second memory block to compare.
|
|
* @param len_u32 Length (in bytes !).
|
|
*
|
|
* @return True if the buffers are identical. False if not.
|
|
*
|
|
* @note This function fulfills the same task as the library function
|
|
* memcmp(). This function should be used because at some libraries and
|
|
* compilers the behavior is partly unpredictable.
|
|
*/
|
|
bool NmsMemCmp(const void * src1_pv, const void * src2_pv, uint32 len_u32);
|
|
|
|
|
|
/**
|
|
* @brief This function reverses data bytes from memory block to another.
|
|
*
|
|
* @param[out] dest_pv Pointer to the block of memory to fill.
|
|
* @param[in] src_pv Pointer to the source of data to be reversed.
|
|
* @param len_u32 Length in bytes .
|
|
*/
|
|
void NmsMemRvs(void * dest_pv, const void * src_pv, uint32 len_u32);
|
|
|
|
|
|
/**
|
|
* @brief This function returns the bit at the position "pos_u8" from the
|
|
* value "value_u64".
|
|
*
|
|
* @param value_u64 Value where bits are stored.
|
|
* @param pos_u8 Position of the bit to return (0 to 63 --> first bit = index 0).
|
|
*
|
|
* @return True: bit set (1), False: bit reset (0).
|
|
*
|
|
* @note uint64 is used to make this function work with all integer types
|
|
* (from uint8 to uint64). A void* could have been used but that
|
|
* requires to transmit the variable type as argument.
|
|
*
|
|
* @note If called to read a bit out of range (e.g. 10th bit of an uint8,
|
|
* or 65th bit of an uint64), the function will return "false".
|
|
*/
|
|
bool NmsMemGetBit(uint64 value_u64, uint8 pos_u8);
|
|
|
|
|
|
/**
|
|
* @brief This function sets or resets the bit at the position "pos_u8" in
|
|
* the value "value_u64".
|
|
*
|
|
* @param value_u64 Value where bits are stored.
|
|
* @param bit_b Value of the bit to set. 1 or 0.
|
|
* @param pos_u8 Position of the bit to write (0 to 63 --> first bit = index 0).
|
|
*
|
|
* @return Updated value.
|
|
*
|
|
* @note uint64 is used to make this function work with all integer types
|
|
* (from uint8 to uint64). A void* could have been used but that
|
|
* requires to transmit the variable type as argument.
|
|
*
|
|
* @note If called to set or reset a bit out of range (e.g. 10th bit of an uint8,
|
|
* or 65th bit of an uint64), the function will return a copy of value_u64.
|
|
*/
|
|
uint64 NmsMemSetBit(uint64 value_u64, bool bit_b, uint8 pos_u8);
|
|
|
|
|
|
/**
|
|
* @brief Helper function to convert an array of bytes to a unsigned int value.
|
|
* Byte at index in the array [0] is the most significant byte (big-endian).
|
|
* This function is independant from the target's memory endianness.
|
|
*
|
|
* @param bytes_tu8 Array of bytes.
|
|
* @param nb_u8 Nb of bytes to consider or length of the array, max 8 bytes.
|
|
*
|
|
* @return The unsigned integer represented by the bytes array.
|
|
*/
|
|
uint64 NmsBytesToUint(const uint8 bytes_tu8[], uint8 nb_u8);
|
|
|
|
|
|
/**
|
|
* @brief Helper function to convert an integer value into an array of bytes representing it.
|
|
* Byte at index [0] in the array is the most significant byte (big-endian).
|
|
* This function is independant from the target's memory endianness.
|
|
*
|
|
* @param value_u64 Integer value for which to get the byte representation.
|
|
* @param bytes_tu8 Array of bytes, must be long enougth to store the number of bytes specified.
|
|
* @param nb_u8 Nb of bytes in the number, max 8 bytes.
|
|
*/
|
|
void NmsUintToBytes(uint64 value_u64, uint8 bytes_tu8[], uint8 nb_u8);
|
|
|
|
|
|
/**
|
|
* @brief This function converts integer to ascii string.
|
|
*
|
|
* @param num_i64 Number to be converted to a string.
|
|
* str_tc Array in memory where to store the resulting
|
|
* null-terminated string. Pointer full of null-terminated
|
|
* string in case of overflow.
|
|
* base_u8 Numerical base used to represent the value as a string,
|
|
* between 2 and 36, where 10 means decimal base,
|
|
* 16 hexadecimal, 8 octal, and 2 binary.
|
|
* len_u32 Size of the destination string to prevent overflow.
|
|
*
|
|
* @return Size of the final converted string, including the null-terminated
|
|
* string, limited by the length. Value is 0 in case of overflow.
|
|
*
|
|
* @note itoa() is a non-standard function. Negative value are only handled
|
|
* for base 10.
|
|
*/
|
|
uint32 NmsItoa(sint64 num_i64, char str_tc[], uint8 base_u8, uint32 len_u32);
|
|
|
|
#endif /* INCLUDED_INS_UTILS_H */
|