303 lines
4.5 KiB
C
303 lines
4.5 KiB
C
#include "display_task.h"
|
|
|
|
#include "common.h"
|
|
|
|
Parser_t parser;
|
|
Packer_t packer;
|
|
|
|
|
|
void dispaly_encode_thread(void);
|
|
|
|
|
|
void display_parse_thread(void);
|
|
|
|
|
|
|
|
void StartDisplayTask(void const * argument)
|
|
{
|
|
|
|
Parser_init(&parser);
|
|
Packer_init(&packer);
|
|
|
|
|
|
for(;;)
|
|
{
|
|
osDelay(10);
|
|
|
|
dispaly_encode_thread();
|
|
display_parse_thread();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//接收,发送,解析,都在这里进行
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//100Hz运行
|
|
void dispaly_encode_thread(void)
|
|
{
|
|
static uint8_t tick_count = 0;
|
|
|
|
//50Hz
|
|
if(!(tick_count % 2))//tick 被2整除的时候
|
|
{
|
|
//发送各种控制状态信息
|
|
uint8_t buff2send[50];
|
|
uint16_t len = 0;
|
|
|
|
|
|
buff2send[len++] = charger.working;
|
|
buff2send[len++] = charger.mode;
|
|
buff2send[len++] = charger.step;
|
|
|
|
|
|
|
|
size_t size = Packer_pack(&packer,0x0F, buff2send, len);
|
|
|
|
//uart send
|
|
UART_TX_FIFO_write(&ui_tx, packer.buff, size);
|
|
}
|
|
|
|
//20Hz
|
|
if(!(tick_count % 5))
|
|
{
|
|
//HUB状态
|
|
|
|
uint8_t buff2send[50];
|
|
uint16_t len = 0;
|
|
|
|
for(int i = 0;i<BAT_MAX_CHANNEL;i++)
|
|
{
|
|
int16_t temp = charger.battery[i].cur_voltage * 100;
|
|
|
|
buff2send[len++] = temp >> 8;
|
|
buff2send[len++] = temp;
|
|
}
|
|
|
|
//size_t size = Packer_pack(&packer,0x50 + charger.hub.number, buff2send, len);
|
|
|
|
//uart send
|
|
//UART_TX_FIFO_write(&ui_tx, packer.buff, size);
|
|
|
|
|
|
|
|
}
|
|
|
|
//10Hz
|
|
if(!(tick_count % 10))
|
|
{
|
|
//发送单节电池电压,
|
|
|
|
uint8_t buff2send[50];
|
|
uint16_t len = 0;
|
|
|
|
for(int i = 0;i<BAT_MAX_CHANNEL;i++)
|
|
{
|
|
int16_t temp = charger.battery[i].cur_voltage * 100;
|
|
|
|
buff2send[len++] = temp >> 8;
|
|
buff2send[len++] = temp;
|
|
}
|
|
|
|
size_t size = Packer_pack(&packer,0x10, buff2send, len);
|
|
|
|
//uart send
|
|
UART_TX_FIFO_write(&ui_tx, packer.buff, size);
|
|
|
|
}
|
|
|
|
//5Hz
|
|
if(!(tick_count % 20))
|
|
{
|
|
//发送总电压,总电流,电池电压,继电器状态,电流控制的PWM
|
|
uint8_t buff2send[50];
|
|
uint16_t len = 0;
|
|
|
|
|
|
int16_t temp = charger.power.pwr_voltage * 100;
|
|
|
|
buff2send[len++] = temp >> 8;
|
|
buff2send[len++] = temp;
|
|
|
|
temp = charger.power.bat_current * 100;
|
|
|
|
buff2send[len++] = temp >> 8;
|
|
buff2send[len++] = temp;
|
|
|
|
temp = charger.power.bat_voltage * 100;
|
|
|
|
buff2send[len++] = temp >> 8;
|
|
buff2send[len++] = temp;
|
|
|
|
uint16_t pwm = charger.relay.state();
|
|
|
|
buff2send[len++] = pwm >> 8;
|
|
buff2send[len++] = pwm;
|
|
|
|
pwm = charger.power.state();
|
|
|
|
buff2send[len++] = pwm >> 8;
|
|
buff2send[len++] = pwm;
|
|
|
|
|
|
size_t size = Packer_pack(&packer,0x11, buff2send, len);
|
|
|
|
//uart send
|
|
UART_TX_FIFO_write(&ui_tx, packer.buff, size);
|
|
}
|
|
|
|
//2Hz
|
|
if(!(tick_count % 50))
|
|
{
|
|
|
|
}
|
|
|
|
//1Hz
|
|
if(!(tick_count % 100))
|
|
{
|
|
//发送温度
|
|
uint8_t buff2send[50];
|
|
uint16_t len = 0;
|
|
|
|
|
|
int16_t temp = charger.fan.temperature * 10;
|
|
|
|
buff2send[len++] = temp >> 8;
|
|
buff2send[len++] = temp;
|
|
|
|
uint16_t ctrl = charger.fan.state();
|
|
|
|
buff2send[len++] = ctrl >> 8;
|
|
buff2send[len++] = ctrl;
|
|
|
|
|
|
size_t size = Packer_pack(&packer,0x01, buff2send, len);
|
|
|
|
//uart send
|
|
UART_TX_FIFO_write(&ui_tx, packer.buff, size);
|
|
}
|
|
|
|
|
|
|
|
tick_count++;
|
|
}
|
|
|
|
|
|
|
|
void display_parse_thread(void)
|
|
{
|
|
//int Parser_char(Parser_t *parser, uint8_t c);
|
|
|
|
uint8_t buff[256];
|
|
size_t len = UART_RX_FIFO_read(&ui_rx, buff, sizeof(buff));
|
|
if (len)
|
|
{
|
|
for(int i = 0;i < len;i++)
|
|
{
|
|
int rst = Parser_char(&parser, buff[i]);
|
|
|
|
switch(rst)
|
|
{
|
|
case 0xFF://test
|
|
{
|
|
|
|
switch(parser.buff[0])
|
|
{
|
|
case 1:{//风扇打开/关闭
|
|
uint16_t pwm = (uint16_t)(parser.buff[1] << 8) + parser.buff[2];
|
|
charger.fan.set(pwm);
|
|
}break;
|
|
case 2:{//继电器打开/关闭
|
|
uint16_t pwm = (uint16_t)(parser.buff[1] << 8) + parser.buff[2];
|
|
charger.relay.set(pwm);
|
|
}break;
|
|
case 3:{//电流控制
|
|
uint16_t pwm = (uint16_t)(parser.buff[1] << 8) + parser.buff[2];
|
|
charger.power.set_current(pwm);
|
|
}break;
|
|
}
|
|
}break;
|
|
case 1://停止所有工作
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}break;
|
|
case 2://开始存储
|
|
{
|
|
|
|
|
|
BAT_TYPE_t info;
|
|
|
|
info.count = 2;
|
|
info.max_voltage = 4.2;
|
|
info.min_voltage = 3.3;
|
|
info.name = "lipo";
|
|
|
|
info.tar_current = 10;
|
|
info.tar_single = 4.2;
|
|
info.tar_voltage = 7.8;
|
|
info.type = 0;
|
|
|
|
|
|
//硬件初始化
|
|
|
|
|
|
|
|
//流程初始化
|
|
charger.working = 1;
|
|
charger.mode = 1;
|
|
charger.step = 1;
|
|
|
|
|
|
//转跳到充电工作模式
|
|
|
|
}break;
|
|
case 3://开始平衡
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}break;
|
|
case 4://开始自定义
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}break;
|
|
default:
|
|
{
|
|
|
|
}break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|