gateway/Software/src/communication_protocol.c

130 lines
2.8 KiB
C
Raw Normal View History

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);
}
}
}