xref: /btstack/chipset/sx128x/SMTC_Drivers/utilities.h (revision cb5466b0821ff1cc151be285948f59ccf7756451)
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