You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
4.1 KiB
164 lines
4.1 KiB
#include "front_end_controler.h"
|
|
|
|
|
|
#define TAG "FronEndControler"
|
|
|
|
Task_t usartRxtask;
|
|
Task_t eventProcesstask;
|
|
|
|
|
|
static process_state_t processerstate;
|
|
static tjc_packet_t* eventpacket;
|
|
static UART_HandleTypeDef* tjcUart;//前端数据串口接收
|
|
|
|
frontend_t frontend;
|
|
|
|
//临时函数
|
|
void task_init(){
|
|
static uint8_t rxbuf[128];
|
|
tjcUart = &huart4;
|
|
|
|
|
|
tjcUart->USR_UartITRxing = 1;
|
|
tjcUart->USR_UartITRxBuf = rxbuf;
|
|
tjcUart->USR_UartITRxBufSize = 128;
|
|
tjcUart->USR_UartITRxOff = 0;
|
|
|
|
HAL_UART_Receive_IT(tjcUart, &tjcUart->USR_UartITRxBufCache, 1);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define UART_RX_OVERTIME 5//接收最大时间
|
|
|
|
|
|
/*
|
|
* @brief: 串口数据打包
|
|
*
|
|
*/
|
|
void processRxpacket(uint8_t* data, size_t len ){
|
|
if(!(data[len - 1] == 0xFF && data[len - 2] && data[len - 3])){//接收到帧尾数据
|
|
ZLOGI(TAG,"RX invalid packet");
|
|
processerstate = error;
|
|
}
|
|
else{
|
|
uint8_t packetType = data[0];
|
|
static tjc_packet_t packet;
|
|
packet.datalen = len;
|
|
memset(packet.data, 0, sizeof(packet.data));
|
|
memcpy(packet.data, data, len);
|
|
ZLOGI(TAG, "packet information: %s\n", packet.data);
|
|
|
|
eventpacket = &packet;
|
|
processerstate = sucess;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
* @brief: 串口数据接收
|
|
*
|
|
*/
|
|
void uartRxTask(void){
|
|
static uint8_t processbuf[128];
|
|
int32_t rxsize = 0;
|
|
//ZLOGI("main","test3\n");
|
|
if (tjcUart->USR_UartITRxOff != 0 && haspassedms(tjcUart->USR_UartITLastRxTicket) > UART_RX_OVERTIME)
|
|
{
|
|
HAL_Delay(1);//延时1毫秒以后串口发送的数据没问题
|
|
if (tjcUart->USR_UartITRxOff != 0 && haspassedms(tjcUart->USR_UartITLastRxTicket) > UART_RX_OVERTIME)
|
|
{
|
|
memcpy(processbuf, tjcUart->USR_UartITRxBuf, tjcUart->USR_UartITRxOff );
|
|
rxsize = tjcUart->USR_UartITRxOff;
|
|
tjcUart->USR_UartITRxOff = 0;
|
|
}
|
|
}
|
|
|
|
if(rxsize != 0)
|
|
{
|
|
processRxpacket(processbuf, rxsize);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
* @brief:前端事件处理
|
|
*
|
|
*/
|
|
tjc_event_t event_cache;
|
|
tjc_event_t input_file_event_cache;
|
|
bool input_file_event_cache_state;
|
|
|
|
void eventProcessTask(void){
|
|
static tjc_packet_t packet;
|
|
packet = *(eventpacket);
|
|
|
|
if(processerstate != sucess)
|
|
return ;
|
|
|
|
|
|
memset(&event_cache, 0, sizeof(event_cache));
|
|
uint8_t packetType = packet.data[0];
|
|
if (packetType == tjc_button_event){
|
|
|
|
event_cache.event_id = packet.data[0];
|
|
event_cache.pid = packet.data[1];
|
|
event_cache.bid = packet.data[2];
|
|
event_cache.date.button_event.val = packet.data[3];
|
|
callUsrEventCb(&event_cache);
|
|
}else if (packetType == tjc_inputfield_content_change_event1){
|
|
event_cache.event_id = packet.data[0];
|
|
event_cache.pid = packet.data[1];
|
|
event_cache.bid = packet.data[2];
|
|
// const char* strbegin = (const char*)&packet.data[3];
|
|
// strbegin = zcpystr(event_cache.date.inputfiled_content.text, strbegin, sizeof(event_cache.d.inputfield_content.text));
|
|
callUsrEventCb(&event_cache);
|
|
input_file_event_cache = event_cache;//文本修改事件需要刷新页面
|
|
input_file_event_cache_state = true;
|
|
}else if (tjc_sys_event_page_id == packetType){
|
|
event_cache.event_id = packet.data[0];
|
|
event_cache.pid = packet.data[1];
|
|
event_cache.bid = packet.data[2];
|
|
|
|
callUsrEventCb(&event_cache);
|
|
}
|
|
processerstate = ending;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Front_initialize(void){
|
|
Task_init(&usartRxtask);
|
|
Task_init(&eventProcesstask);
|
|
}
|
|
|
|
void Front_startSchedule(void)
|
|
{
|
|
//uart_start注册数据处理
|
|
Task_start(uartRxTask,&usartRxtask);
|
|
Task_start(eventProcessTask,&eventProcesstask);
|
|
}
|
|
|
|
|
|
|
|
//注册函数无法传递页面id信息
|
|
//所以多加了一个isbelongpage参数同步对应页面函数
|
|
void regOnUsrEventCb(FunctionCB cb, uint8_t page){
|
|
frontend.m_cb[frontend.m_ncb] = cb;
|
|
frontend.isbelongpage[frontend.m_ncb] = page;
|
|
frontend.m_ncb++;
|
|
|
|
}
|
|
|
|
void callUsrEventCb(tjc_event_t* event){
|
|
for (int32_t i = 0; i < frontend.m_ncb; i++) {
|
|
frontend.m_cb[i](event,frontend.isbelongpage[i]);
|
|
}
|
|
}
|