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.
|
|
#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]); } }
|