#ifndef __COMMON_H
#define __COMMON_H

#include "stm32f4xx_hal.h"
#include "rtthread.h"
#include "stm32f4xx_it.h"
#include "stm32f4xx_hal_uart.h"
#include "stdbool.h"

#define _1_HZ_ 1000
#define _2_HZ_ 500
#define _3_HZ_ 300
#define _4_HZ_ 250
#define _5_HZ_ 200
#define _6_HZ_ 166
#define _7_HZ_ 143
#define _8_HZ_ 125
#define _9_HZ_ 115
#define _10_HZ_ 100
#define _11_HZ_ 91
#define _12_HZ_ 83
#define _13_HZ_ 75
#define _14_HZ_ 67
#define _15_HZ_ 60
#define _16_HZ_ 53
#define _17_HZ_ 47
#define _18_HZ_ 41
#define _19_HZ_ 37
#define _20_HZ_ 50
#define _40_HZ_ 25
#define _31_HZ_ 33
#define _32_HZ_ 32
#define _33_HZ_ 31
#define _50_HZ_ 20
#define _100_HZ_ 10
#define _200_HZ_ 5
#define _300_HZ_ 3 
#define _500_HZ_ 2
#define _1000_HZ_ 12

typedef enum
{
    COMP_NOEXIST = 0,
    COMP_NORMAL = 1,
    COMP_LOST = 2,
    COMP_CLOSED = 3,
    COMP_RECON = 4
} comp_status;

typedef struct
{
    uint32_t recv_time;
    int error_time;
    comp_status connect_status;
    bool boot_flag;
} Connect_check;

void Check_dev_link(Connect_check *dev, uint16_t ms, char *p, uint16_t size);
bool Check_Timer_Ready(uint32_t *time, uint16_t HZ);

int findStrInArray(uint8_t *array, int aLen, const char *str);
void buf2int(int *tint, unsigned char *buf);
void short2buf(unsigned char *buf, short *tshort);
void u16t_buf_sort(uint16_t *arr, uint16_t length);
void char_to_hex_string(unsigned char *cdata, short lenc, char *sbuf, short lens, char *ES);
char *itoa(int num, char *str, int radix);
char *Int2String(int num, char *str, uint8_t size);
int16_t math_cons_i16( int16_t value, int16_t min, int16_t max );
bool StrArrayNull( uint8_t *array, int aLen );
void buf_sort(float *arr, uint32_t length);
uint32_t cycle_check_ms(uint32_t *time);
#endif