// // Created by yelv1 on 24-12-31. // #ifndef RS485_PROTOCOL_H #define RS485_PROTOCOL_H #include "gd32e23x.h" #include "systick.h" #include "gd32e23x_libopt.h" #include "board_config.h" #include "usart.h" #include "fwdgt.h" #include #include #include #include #include "ultrasonic_analog.h" /******************************************************************************/ #define PROTOCOL_PACKAGE_HEADER 0xD5 #define PROTOCOL_BOARD_TYPE 0x04 #define PROTOCOL_PACKAGE_LENGTH 0x02 #define MAX_SERIAL_CMD_SIZE 16 #define MAX_SERIAL_CMD_COUNT 8 /******************************************************************************/ typedef enum { VALIDATION_SUCCESS = 0, VALIDATION_CRC_ERROR = 1, VALIDATION_HEADER_ERROR = 2, VALIDATION_TYPE_ERROR = 4, VALIDATION_LENGTH_ERROR = 8 } validation_result_t; typedef enum { PS_LEN, PS_TYPE, PS_PAYLOAD, PS_CRC, PS_NULL }packet_state_t; /******************************************************************************/ // void process_command(uint8_t* cmd, size_t length); bool code_seen(char code); float code_value(void); uint8_t calculate_crc(uint8_t data[], uint8_t data_length); validation_result_t validate_package_crc(uint8_t* data, uint8_t data_length); validation_result_t validate_package_header(uint8_t* data); validation_result_t validate_package_type(uint8_t* data); validation_result_t validate_data_length(uint8_t* data); void gd60914_tempture_report(void); void ultrasonic_distance_report(void); void start_communication(void); void get_command(void); void prcess_command(void); #endif //RS485_PROTOCOL_H