2024-07-13 02:22:47 +00:00
|
|
|
|
/*
|
|
|
|
|
* communication_protocol.c
|
|
|
|
|
*
|
|
|
|
|
* Created on: 2024<EFBFBD><EFBFBD>5<EFBFBD><EFBFBD>18<EFBFBD><EFBFBD>
|
|
|
|
|
* Author: 34509
|
|
|
|
|
*/
|
|
|
|
|
|
2024-07-13 03:43:10 +00:00
|
|
|
|
#include <communication_protocol.h>
|
2024-07-15 09:22:55 +00:00
|
|
|
|
#include "uart_dev.h"
|
|
|
|
|
#include "inflash.h"
|
2024-07-13 02:22:47 +00:00
|
|
|
|
|
2024-07-15 09:22:55 +00:00
|
|
|
|
SL_Mppt_Scan_Broadcast_pack g_Scan_Broadcast_pack = {
|
|
|
|
|
.start_Flag = "SL",
|
|
|
|
|
.address = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
|
|
|
|
.function_Code = SL_Function_Code_Broadcast_Scan,
|
|
|
|
|
.check_Bit_H = 0x36,
|
|
|
|
|
.check_Bit_L = 0xE6,
|
|
|
|
|
.end_Flag = 0x16,
|
|
|
|
|
};
|
2024-07-13 02:22:47 +00:00
|
|
|
|
|
2024-07-15 09:22:55 +00:00
|
|
|
|
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
static uint8_t uart_buff[50]={0x00};
|
2024-07-13 02:22:47 +00:00
|
|
|
|
|
|
|
|
|
|
2024-07-15 09:22:55 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief У<EFBFBD><EFBFBD><EFBFBD>㷨
|
|
|
|
|
* @param
|
|
|
|
|
* @retval
|
|
|
|
|
*/
|
|
|
|
|
uint16_t CheckFunc(uint8_t *arr_buff, uint8_t len)
|
|
|
|
|
{
|
|
|
|
|
uint16_t crc = 0xFFFF;
|
|
|
|
|
uint16_t i, j;
|
|
|
|
|
for (j = 0; j < len; ++j) {
|
|
|
|
|
crc = crc ^ (*arr_buff++);
|
|
|
|
|
for (i = 0; i < 8; ++i) {
|
|
|
|
|
if ((crc&0x0001) > 0) {
|
|
|
|
|
crc = crc >> 1;
|
|
|
|
|
crc = crc ^ 0xa001;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
crc = crc >> 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return crc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>485<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>æ
|
|
|
|
|
* @param
|
|
|
|
|
* @retval 1 <EFBFBD><EFBFBD>æ
|
|
|
|
|
* 0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
uint8_t Check_485_bus_busy(device_handle device)
|
|
|
|
|
{
|
|
|
|
|
uart_device_info *device_info = (uart_device_info *)device;
|
|
|
|
|
if((!device) || (!device_info->init))
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
USART_ITConfig(device_info->uart_index, USART_IT_RXNE, ENABLE);
|
|
|
|
|
|
|
|
|
|
uint16_t num_ago = ring_queue_length(device);
|
|
|
|
|
Delay_Ms(2);
|
|
|
|
|
uint16_t num_now = ring_queue_length(device);
|
|
|
|
|
|
|
|
|
|
USART_ITConfig(device_info->uart_index, USART_IT_RXNE, DISABLE);
|
|
|
|
|
|
|
|
|
|
if (num_now == num_ago) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>־"SL"
|
|
|
|
|
* @param start_buff <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>־
|
|
|
|
|
* @retval 1 ƥ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
* 0 ƥ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
static int Match_Startflag(uint8_t start_buff[2])
|
|
|
|
|
{
|
|
|
|
|
if ((start_buff[0] == g_slConfigInfo.start_Flag[0]) && \
|
|
|
|
|
(start_buff[1] == g_slConfigInfo.start_Flag[1])) {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param uart_handle <EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param buff <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param buff_size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @retval
|
|
|
|
|
*/
|
|
|
|
|
static int uart_read_climate_pack(device_handle uart_handle,uint8_t *buff, uint32_t buff_size)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
* @param
|
|
|
|
|
* @retval
|
|
|
|
|
*/
|
|
|
|
|
void FRT_MsgHandler(device_handle device, uint8_t *pMsg, uint32_t MsgLen)
|
|
|
|
|
{
|
|
|
|
|
SL_Mppt_Recv_pack *pack = (SL_Mppt_Recv_pack *)pMsg;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param
|
|
|
|
|
* @retval
|
|
|
|
|
*/
|
|
|
|
|
void read_and_process_uart_data(device_handle device)
|
|
|
|
|
{
|
|
|
|
|
// printf("ring_queue_length = %d \n", ring_queue_length(device));
|
|
|
|
|
if (ring_queue_length(device) > 10) {
|
|
|
|
|
memset(uart_buff, 0, sizeof(uart_buff));
|
|
|
|
|
int ret = uart_read_climate_pack(device, uart_buff, sizeof(uart_buff));
|
|
|
|
|
if(ret > 0){
|
|
|
|
|
FRT_MsgHandler(device, uart_buff, ret);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|