acid-drop- Hacking the planet from a LilyGo T-Deck using custom firmware |
git clone git://git.acid.vegas/acid-drop.git |
Log | Files | Refs | Archive | README | LICENSE |
lv_math.h (4117B)
1 /** 2 * @file lv_math.h 3 * 4 */ 5 6 #ifndef LV_MATH_H 7 #define LV_MATH_H 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 /********************* 14 * INCLUDES 15 *********************/ 16 #include "../lv_conf_internal.h" 17 #include <stdint.h> 18 19 /********************* 20 * DEFINES 21 *********************/ 22 #define LV_TRIGO_SIN_MAX 32767 23 #define LV_TRIGO_SHIFT 15 /**< >> LV_TRIGO_SHIFT to normalize*/ 24 25 #define LV_BEZIER_VAL_MAX 1024 /**< Max time in Bezier functions (not [0..1] to use integers)*/ 26 #define LV_BEZIER_VAL_SHIFT 10 /**< log2(LV_BEZIER_VAL_MAX): used to normalize up scaled values*/ 27 28 /********************** 29 * TYPEDEFS 30 **********************/ 31 32 typedef struct { 33 uint16_t i; 34 uint16_t f; 35 } lv_sqrt_res_t; 36 37 /********************** 38 * GLOBAL PROTOTYPES 39 **********************/ 40 41 //! @cond Doxygen_Suppress 42 /** 43 * Return with sinus of an angle 44 * @param angle 45 * @return sinus of 'angle'. sin(-90) = -32767, sin(90) = 32767 46 */ 47 LV_ATTRIBUTE_FAST_MEM int16_t lv_trigo_sin(int16_t angle); 48 49 static inline LV_ATTRIBUTE_FAST_MEM int16_t lv_trigo_cos(int16_t angle) 50 { 51 return lv_trigo_sin(angle + 90); 52 } 53 54 //! @endcond 55 56 /** 57 * Calculate a value of a Cubic Bezier function. 58 * @param t time in range of [0..LV_BEZIER_VAL_MAX] 59 * @param u0 start values in range of [0..LV_BEZIER_VAL_MAX] 60 * @param u1 control value 1 values in range of [0..LV_BEZIER_VAL_MAX] 61 * @param u2 control value 2 in range of [0..LV_BEZIER_VAL_MAX] 62 * @param u3 end values in range of [0..LV_BEZIER_VAL_MAX] 63 * @return the value calculated from the given parameters in range of [0..LV_BEZIER_VAL_MAX] 64 */ 65 uint32_t lv_bezier3(uint32_t t, uint32_t u0, uint32_t u1, uint32_t u2, uint32_t u3); 66 67 /** 68 * Calculate the atan2 of a vector. 69 * @param x 70 * @param y 71 * @return the angle in degree calculated from the given parameters in range of [0..360] 72 */ 73 uint16_t lv_atan2(int x, int y); 74 75 //! @cond Doxygen_Suppress 76 77 /** 78 * Get the square root of a number 79 * @param x integer which square root should be calculated 80 * @param q store the result here. q->i: integer part, q->f: fractional part in 1/256 unit 81 * @param mask optional to skip some iterations if the magnitude of the root is known. 82 * Set to 0x8000 by default. 83 * If root < 16: mask = 0x80 84 * If root < 256: mask = 0x800 85 * Else: mask = 0x8000 86 */ 87 LV_ATTRIBUTE_FAST_MEM void lv_sqrt(uint32_t x, lv_sqrt_res_t * q, uint32_t mask); 88 89 //! @endcond 90 91 /** 92 * Calculate the integer exponents. 93 * @param base 94 * @param power 95 * @return base raised to the power exponent 96 */ 97 int64_t lv_pow(int64_t base, int8_t exp); 98 99 /** 100 * Get the mapped of a number given an input and output range 101 * @param x integer which mapped value should be calculated 102 * @param min_in min input range 103 * @param max_in max input range 104 * @param min_out max output range 105 * @param max_out max output range 106 * @return the mapped number 107 */ 108 int32_t lv_map(int32_t x, int32_t min_in, int32_t max_in, int32_t min_out, int32_t max_out); 109 110 /** 111 * Get a pseudo random number in the given range 112 * @param min the minimum value 113 * @param max the maximum value 114 * @return return the random number. min <= return_value <= max 115 */ 116 uint32_t lv_rand(uint32_t min, uint32_t max); 117 118 /********************** 119 * MACROS 120 **********************/ 121 #define LV_MIN(a, b) ((a) < (b) ? (a) : (b)) 122 #define LV_MIN3(a, b, c) (LV_MIN(LV_MIN(a,b), c)) 123 #define LV_MIN4(a, b, c, d) (LV_MIN(LV_MIN(a,b), LV_MIN(c,d))) 124 125 #define LV_MAX(a, b) ((a) > (b) ? (a) : (b)) 126 #define LV_MAX3(a, b, c) (LV_MAX(LV_MAX(a,b), c)) 127 #define LV_MAX4(a, b, c, d) (LV_MAX(LV_MAX(a,b), LV_MAX(c,d))) 128 129 #define LV_CLAMP(min, val, max) (LV_MAX(min, (LV_MIN(val, max)))) 130 131 #define LV_ABS(x) ((x) > 0 ? (x) : (-(x))) 132 #define LV_UDIV255(x) (((x) * 0x8081U) >> 0x17) 133 134 #define LV_IS_SIGNED(t) (((t)(-1)) < ((t)0)) 135 #define LV_UMAX_OF(t) (((0x1ULL << ((sizeof(t) * 8ULL) - 1ULL)) - 1ULL) | (0xFULL << ((sizeof(t) * 8ULL) - 4ULL))) 136 #define LV_SMAX_OF(t) (((0x1ULL << ((sizeof(t) * 8ULL) - 1ULL)) - 1ULL) | (0x7ULL << ((sizeof(t) * 8ULL) - 4ULL))) 137 #define LV_MAX_OF(t) ((unsigned long)(LV_IS_SIGNED(t) ? LV_SMAX_OF(t) : LV_UMAX_OF(t))) 138 139 #ifdef __cplusplus 140 } /*extern "C"*/ 141 #endif 142 143 #endif