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

11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
  1. #include "front_end_controler.h"
  2. #define TAG "FronEndControler"
  3. Task_t usartRxtask;
  4. Task_t eventProcesstask;
  5. static process_state_t processerstate;
  6. static tjc_packet_t* eventpacket;
  7. static UART_HandleTypeDef* tjcUart;//ǰ�����ݴ��ڽ���
  8. frontend_t frontend;
  9. //��ʱ����
  10. void task_init(){
  11. static uint8_t rxbuf[128];
  12. tjcUart = &huart4;
  13. tjcUart->USR_UartITRxing = 1;
  14. tjcUart->USR_UartITRxBuf = rxbuf;
  15. tjcUart->USR_UartITRxBufSize = 128;
  16. tjcUart->USR_UartITRxOff = 0;
  17. HAL_UART_Receive_IT(tjcUart, &tjcUart->USR_UartITRxBufCache, 1);
  18. }
  19. #define UART_RX_OVERTIME 5//��������ʱ��
  20. /*
  21. * @brief: ݴ
  22. *
  23. */
  24. void processRxpacket(uint8_t* data, size_t len ){
  25. if(!(data[len - 1] == 0xFF && data[len - 2] && data[len - 3])){//���յ�֡β����
  26. ZLOGI(TAG,"RX invalid packet");
  27. processerstate = error;
  28. }
  29. else{
  30. uint8_t packetType = data[0];
  31. static tjc_packet_t packet;
  32. packet.datalen = len;
  33. memset(packet.data, 0, sizeof(packet.data));
  34. memcpy(packet.data, data, len);
  35. ZLOGI(TAG, "packet information: %s\n", packet.data);
  36. eventpacket = &packet;
  37. processerstate = sucess;
  38. }
  39. }
  40. /*
  41. * @brief: ݽ
  42. *
  43. */
  44. void uartRxTask(void){
  45. static uint8_t processbuf[128];
  46. int32_t rxsize = 0;
  47. //ZLOGI("main","test3\n");
  48. if (tjcUart->USR_UartITRxOff != 0 && haspassedms(tjcUart->USR_UartITLastRxTicket) > UART_RX_OVERTIME)
  49. {
  50. HAL_Delay(1);//��ʱ1�����Ժ󴮿ڷ��͵�����û����
  51. if (tjcUart->USR_UartITRxOff != 0 && haspassedms(tjcUart->USR_UartITLastRxTicket) > UART_RX_OVERTIME)
  52. {
  53. memcpy(processbuf, tjcUart->USR_UartITRxBuf, tjcUart->USR_UartITRxOff );
  54. rxsize = tjcUart->USR_UartITRxOff;
  55. tjcUart->USR_UartITRxOff = 0;
  56. }
  57. }
  58. if(rxsize != 0)
  59. {
  60. processRxpacket(processbuf, rxsize);
  61. }
  62. }
  63. /*
  64. * @brief:ǰ¼
  65. *
  66. */
  67. tjc_event_t event_cache;
  68. tjc_event_t input_file_event_cache;
  69. bool input_file_event_cache_state;
  70. void eventProcessTask(void){
  71. static tjc_packet_t packet;
  72. packet = *(eventpacket);
  73. if(processerstate != sucess)
  74. return ;
  75. memset(&event_cache, 0, sizeof(event_cache));
  76. uint8_t packetType = packet.data[0];
  77. if (packetType == tjc_button_event){
  78. event_cache.event_id = packet.data[0];
  79. event_cache.pid = packet.data[1];
  80. event_cache.bid = packet.data[2];
  81. event_cache.date.button_event.val = packet.data[3];
  82. callUsrEventCb(&event_cache);
  83. }else if (packetType == tjc_inputfield_content_change_event1){
  84. event_cache.event_id = packet.data[0];
  85. event_cache.pid = packet.data[1];
  86. event_cache.bid = packet.data[2];
  87. // const char* strbegin = (const char*)&packet.data[3];
  88. // strbegin = zcpystr(event_cache.date.inputfiled_content.text, strbegin, sizeof(event_cache.d.inputfield_content.text));
  89. callUsrEventCb(&event_cache);
  90. input_file_event_cache = event_cache;//�ı��޸��¼���Ҫˢ��ҳ��
  91. input_file_event_cache_state = true;
  92. }else if (tjc_sys_event_page_id == packetType){
  93. event_cache.event_id = packet.data[0];
  94. event_cache.pid = packet.data[1];
  95. event_cache.bid = packet.data[2];
  96. callUsrEventCb(&event_cache);
  97. }
  98. processerstate = ending;
  99. }
  100. void Front_initialize(void){
  101. Task_init(&usartRxtask);
  102. Task_init(&eventProcesstask);
  103. }
  104. void Front_startSchedule(void)
  105. {
  106. //uart_startע�����ݴ���
  107. Task_start(uartRxTask,&usartRxtask);
  108. Task_start(eventProcessTask,&eventProcesstask);
  109. }
  110. //ע�ắ���޷�����ҳ��id��Ϣ
  111. //���Զ�����һ��isbelongpage����ͬ����Ӧҳ�溯��
  112. void regOnUsrEventCb(FunctionCB cb, uint8_t page){
  113. frontend.m_cb[frontend.m_ncb] = cb;
  114. frontend.isbelongpage[frontend.m_ncb] = page;
  115. frontend.m_ncb++;
  116. }
  117. void callUsrEventCb(tjc_event_t* event){
  118. for (int32_t i = 0; i < frontend.m_ncb; i++) {
  119. frontend.m_cb[i](event,frontend.isbelongpage[i]);
  120. }
  121. }