1*cb5466b0SMatthias Ringwald /*! 2*cb5466b0SMatthias Ringwald * \file utilities.h 3*cb5466b0SMatthias Ringwald * 4*cb5466b0SMatthias Ringwald * \brief Helper functions implementation 5*cb5466b0SMatthias Ringwald * 6*cb5466b0SMatthias Ringwald * \copyright Revised BSD License, see section \ref LICENSE. 7*cb5466b0SMatthias Ringwald * 8*cb5466b0SMatthias Ringwald * \code 9*cb5466b0SMatthias Ringwald * ______ _ 10*cb5466b0SMatthias Ringwald * / _____) _ | | 11*cb5466b0SMatthias Ringwald * ( (____ _____ ____ _| |_ _____ ____| |__ 12*cb5466b0SMatthias Ringwald * \____ \| ___ | (_ _) ___ |/ ___) _ \ 13*cb5466b0SMatthias Ringwald * _____) ) ____| | | || |_| ____( (___| | | | 14*cb5466b0SMatthias Ringwald * (______/|_____)_|_|_| \__)_____)\____)_| |_| 15*cb5466b0SMatthias Ringwald * (C)2013-2017 Semtech 16*cb5466b0SMatthias Ringwald * 17*cb5466b0SMatthias Ringwald * \endcode 18*cb5466b0SMatthias Ringwald * 19*cb5466b0SMatthias Ringwald * \author Miguel Luis ( Semtech ) 20*cb5466b0SMatthias Ringwald * 21*cb5466b0SMatthias Ringwald * \author Gregory Cristian ( Semtech ) 22*cb5466b0SMatthias Ringwald */ 23*cb5466b0SMatthias Ringwald #ifndef __UTILITIES_H__ 24*cb5466b0SMatthias Ringwald #define __UTILITIES_H__ 25*cb5466b0SMatthias Ringwald 26*cb5466b0SMatthias Ringwald #include <stdint.h> 27*cb5466b0SMatthias Ringwald 28*cb5466b0SMatthias Ringwald /*! 29*cb5466b0SMatthias Ringwald * Generic definition 30*cb5466b0SMatthias Ringwald */ 31*cb5466b0SMatthias Ringwald #ifndef SUCCESS 32*cb5466b0SMatthias Ringwald #define SUCCESS 1 33*cb5466b0SMatthias Ringwald #endif 34*cb5466b0SMatthias Ringwald 35*cb5466b0SMatthias Ringwald #ifndef FAIL 36*cb5466b0SMatthias Ringwald #define FAIL 0 37*cb5466b0SMatthias Ringwald #endif 38*cb5466b0SMatthias Ringwald 39*cb5466b0SMatthias Ringwald /*! 40*cb5466b0SMatthias Ringwald * \brief Returns the minimum value between a and b 41*cb5466b0SMatthias Ringwald * 42*cb5466b0SMatthias Ringwald * \param [IN] a 1st value 43*cb5466b0SMatthias Ringwald * \param [IN] b 2nd value 44*cb5466b0SMatthias Ringwald * \retval minValue Minimum value 45*cb5466b0SMatthias Ringwald */ 46*cb5466b0SMatthias Ringwald #define MIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) 47*cb5466b0SMatthias Ringwald 48*cb5466b0SMatthias Ringwald /*! 49*cb5466b0SMatthias Ringwald * \brief Returns the maximum value between a and b 50*cb5466b0SMatthias Ringwald * 51*cb5466b0SMatthias Ringwald * \param [IN] a 1st value 52*cb5466b0SMatthias Ringwald * \param [IN] b 2nd value 53*cb5466b0SMatthias Ringwald * \retval maxValue Maximum value 54*cb5466b0SMatthias Ringwald */ 55*cb5466b0SMatthias Ringwald #define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) 56*cb5466b0SMatthias Ringwald 57*cb5466b0SMatthias Ringwald /*! 58*cb5466b0SMatthias Ringwald * \brief Returns 2 raised to the power of n 59*cb5466b0SMatthias Ringwald * 60*cb5466b0SMatthias Ringwald * \param [IN] n power value 61*cb5466b0SMatthias Ringwald * \retval result of raising 2 to the power n 62*cb5466b0SMatthias Ringwald */ 63*cb5466b0SMatthias Ringwald #define POW2( n ) ( 1 << n ) 64*cb5466b0SMatthias Ringwald 65*cb5466b0SMatthias Ringwald /*! 66*cb5466b0SMatthias Ringwald * \brief Initializes the pseudo random generator initial value 67*cb5466b0SMatthias Ringwald * 68*cb5466b0SMatthias Ringwald * \param [IN] seed Pseudo random generator initial value 69*cb5466b0SMatthias Ringwald */ 70*cb5466b0SMatthias Ringwald void srand1( uint32_t seed ); 71*cb5466b0SMatthias Ringwald 72*cb5466b0SMatthias Ringwald /*! 73*cb5466b0SMatthias Ringwald * \brief Computes a random number between min and max 74*cb5466b0SMatthias Ringwald * 75*cb5466b0SMatthias Ringwald * \param [IN] min range minimum value 76*cb5466b0SMatthias Ringwald * \param [IN] max range maximum value 77*cb5466b0SMatthias Ringwald * \retval random random value in range min..max 78*cb5466b0SMatthias Ringwald */ 79*cb5466b0SMatthias Ringwald int32_t randr( int32_t min, int32_t max ); 80*cb5466b0SMatthias Ringwald 81*cb5466b0SMatthias Ringwald /*! 82*cb5466b0SMatthias Ringwald * \brief Copies size elements of src array to dst array 83*cb5466b0SMatthias Ringwald * 84*cb5466b0SMatthias Ringwald * \remark STM32 Standard memcpy function only works on pointers that are aligned 85*cb5466b0SMatthias Ringwald * 86*cb5466b0SMatthias Ringwald * \param [OUT] dst Destination array 87*cb5466b0SMatthias Ringwald * \param [IN] src Source array 88*cb5466b0SMatthias Ringwald * \param [IN] size Number of bytes to be copied 89*cb5466b0SMatthias Ringwald */ 90*cb5466b0SMatthias Ringwald void memcpy1( uint8_t *dst, const uint8_t *src, uint16_t size ); 91*cb5466b0SMatthias Ringwald 92*cb5466b0SMatthias Ringwald /*! 93*cb5466b0SMatthias Ringwald * \brief Copies size elements of src array to dst array reversing the byte order 94*cb5466b0SMatthias Ringwald * 95*cb5466b0SMatthias Ringwald * \param [OUT] dst Destination array 96*cb5466b0SMatthias Ringwald * \param [IN] src Source array 97*cb5466b0SMatthias Ringwald * \param [IN] size Number of bytes to be copied 98*cb5466b0SMatthias Ringwald */ 99*cb5466b0SMatthias Ringwald void memcpyr( uint8_t *dst, const uint8_t *src, uint16_t size ); 100*cb5466b0SMatthias Ringwald 101*cb5466b0SMatthias Ringwald /*! 102*cb5466b0SMatthias Ringwald * \brief Set size elements of dst array with value 103*cb5466b0SMatthias Ringwald * 104*cb5466b0SMatthias Ringwald * \remark STM32 Standard memset function only works on pointers that are aligned 105*cb5466b0SMatthias Ringwald * 106*cb5466b0SMatthias Ringwald * \param [OUT] dst Destination array 107*cb5466b0SMatthias Ringwald * \param [IN] value Default value 108*cb5466b0SMatthias Ringwald * \param [IN] size Number of bytes to be copied 109*cb5466b0SMatthias Ringwald */ 110*cb5466b0SMatthias Ringwald void memset1( uint8_t *dst, uint8_t value, uint16_t size ); 111*cb5466b0SMatthias Ringwald 112*cb5466b0SMatthias Ringwald /*! 113*cb5466b0SMatthias Ringwald * \brief Converts a nibble to an hexadecimal character 114*cb5466b0SMatthias Ringwald * 115*cb5466b0SMatthias Ringwald * \param [IN] a Nibble to be converted 116*cb5466b0SMatthias Ringwald * \retval hexChar Converted hexadecimal character 117*cb5466b0SMatthias Ringwald */ 118*cb5466b0SMatthias Ringwald int8_t Nibble2HexChar( uint8_t a ); 119*cb5466b0SMatthias Ringwald 120*cb5466b0SMatthias Ringwald #endif // __UTILITIES_H__ 121