158 lines
3.2 KiB
C
158 lines
3.2 KiB
C
#include "bsp_air.h"
|
||
#include "bsp_spi.h"
|
||
#include "stdio.h"
|
||
|
||
static air_staus_struct air_staus;
|
||
|
||
void set_single_air_staus(air_num_enum air_num,air_run_action_enum air_run_action)
|
||
{
|
||
switch((uint8_t)air_num)
|
||
{
|
||
case AIR_1:
|
||
air_staus.value1 = air_run_action;
|
||
break;
|
||
case AIR_2:
|
||
air_staus.value2 = air_run_action;
|
||
break;
|
||
case AIR_3:
|
||
air_staus.value3 = air_run_action;
|
||
break;
|
||
case AIR_4:
|
||
air_staus.value4 = air_run_action;
|
||
break;
|
||
case AIR_5:
|
||
air_staus.value5 = air_run_action;
|
||
break;
|
||
case AIR_6:
|
||
air_staus.value6 = air_run_action;
|
||
break;
|
||
case AIR_7:
|
||
air_staus.value7 = air_run_action;
|
||
break;
|
||
case AIR_8:
|
||
air_staus.value8 = air_run_action;
|
||
break;
|
||
case AIR_9:
|
||
air_staus.value9 = air_run_action;
|
||
break;
|
||
case AIR_10:
|
||
air_staus.value10 = air_run_action;
|
||
break;
|
||
}
|
||
}
|
||
|
||
void set_all_air_staus(air_run_action_enum air_run_action)
|
||
{
|
||
for(air_num_enum air_num = AIR_1; air_num < AIR_MAX_NUM; air_num++)
|
||
{
|
||
set_single_air_staus(air_num,air_run_action);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
static uint16_t CalChecksum(uint8_t * data, uint16_t len)
|
||
{
|
||
uint16_t sum = 0;
|
||
for(int i = 0; i < len; ++i)
|
||
{
|
||
sum += data[i];
|
||
}
|
||
return sum;
|
||
}
|
||
|
||
|
||
/*´ò°üÒ»Ö¡*/
|
||
static uint8_t creat_air_frame(uint8_t device_id, uint8_t message_type, uint8_t error_flag, air_staus_struct air_staus, air_spi_frame_struct *tx_frame)
|
||
{
|
||
tx_frame->device_id = device_id;
|
||
tx_frame->message_type = message_type;
|
||
tx_frame->error_flag = error_flag;
|
||
tx_frame->value_1 = air_staus.value1;
|
||
tx_frame->value_2 = air_staus.value2;
|
||
tx_frame->value_3 = air_staus.value3;
|
||
tx_frame->value_4 = air_staus.value4;
|
||
tx_frame->value_5 = air_staus.value5;
|
||
tx_frame->value_6 = air_staus.value6;
|
||
tx_frame->value_7 = air_staus.value7;
|
||
tx_frame->value_8 = air_staus.value8;
|
||
tx_frame->value_9 = air_staus.value9;
|
||
tx_frame->value_10 = air_staus.value10;
|
||
|
||
tx_frame->check_sum = CalChecksum((uint8_t *)tx_frame,sizeof(air_spi_frame_struct) - 1);
|
||
return 1;
|
||
}
|
||
|
||
/*·¢ËͲ¢½ÓÊÜ*/
|
||
static uint8_t air_frame_rev(air_spi_frame_struct *tx_frame, air_spi_frame_struct *rx_frame)
|
||
{
|
||
if(spi_tx_rx_buffer((uint8_t*)tx_frame,(uint8_t *)rx_frame,sizeof(air_spi_frame_struct)))
|
||
{
|
||
if(rx_frame->device_id != 0x01)
|
||
{
|
||
return 0;
|
||
}
|
||
if(rx_frame->message_type != 0x01)
|
||
{
|
||
return 0;
|
||
}
|
||
if(rx_frame->check_sum != CalChecksum((uint8_t *)rx_frame, sizeof(air_spi_frame_struct) - 1))
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
return 1;
|
||
}
|
||
|
||
/*´íÎóÂë´¦Àí*/
|
||
static void air_frame_error_handle(uint8_t error_flag)
|
||
{
|
||
if(error_flag & AIR_PUMP_ERROR)
|
||
{
|
||
printf("...");
|
||
}
|
||
if(error_flag & VALUE_JAM)
|
||
{
|
||
printf("...");
|
||
}
|
||
if(error_flag & OVER_VOLTAGE_ALARM)
|
||
{
|
||
printf("...");
|
||
}
|
||
}
|
||
|
||
//100msµ÷ÓÃÒ»´Î
|
||
void air_handle(void)
|
||
{
|
||
static air_spi_frame_struct tx_frame;
|
||
static air_spi_frame_struct rx_frame;
|
||
static uint8_t out_time_cnt;
|
||
creat_air_frame(0x01,0x00,0x00, air_staus, &tx_frame);
|
||
if(air_frame_rev(&tx_frame, &rx_frame))
|
||
{
|
||
if(rx_frame.error_flag == 0)
|
||
{
|
||
out_time_cnt = 0;
|
||
}
|
||
else
|
||
{
|
||
air_frame_error_handle(rx_frame.error_flag);
|
||
out_time_cnt++;
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
out_time_cnt++;
|
||
}
|
||
|
||
if(out_time_cnt >= 30)
|
||
{
|
||
printf("ͨÐų¬Ê±");
|
||
spi1_init();
|
||
out_time_cnt = 0;
|
||
}
|
||
|
||
}
|
||
|