uart_tasks.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * uart_tasks.h
  3. *
  4. * Created on: Aug 14, 2024
  5. * Author: jakubski
  6. */
  7. #ifndef INC_UART_TASKS_H_
  8. #define INC_UART_TASKS_H_
  9. #include "FreeRTOS.h"
  10. #include "FreeRTOSConfig.h"
  11. #include "task.h"
  12. #include "message_buffer.h"
  13. #include "main.h"
  14. #include "serial_protocol.h"
  15. #define UART8_RX_BUFF_SIZE 256
  16. #define UART8_TX_BUFF_SIZE 256
  17. #define INPUT_DATA_BUFF_SIZE UART8_RX_BUFF_SIZE
  18. #define OUTPUT_DATA_BUFF_SIZE 128
  19. struct _SerialProtocolFrameHeader {
  20. uint16_t frameId;
  21. SerialProtocolCommands frameCommand;
  22. SerialProtocolRespStatus respStatus;
  23. uint16_t frameDataLength;
  24. portBASE_TYPE isResponseFrame;
  25. };
  26. typedef struct _SerialProtocolFrameHeader SerialProtocolFrameHeader;
  27. struct _SerialProtocolFrameData {
  28. SerialProtocolFrameHeader frameHeader;
  29. uint8_t dataBuffer[INPUT_DATA_BUFF_SIZE];
  30. };
  31. typedef struct _SerialProtocolFrameData SerialProtocolFrameData;
  32. typedef void (*ProcessDataCallbackFunc) (void* arg, SerialProtocolFrameData* spFrameData);
  33. struct _UartTaskData {
  34. uint8_t* uartRxBuffer;
  35. uint16_t uartRxBufferLen;
  36. uint16_t uartRxBufferPos;
  37. uint8_t* uartTxBuffer;
  38. uint16_t uartTxBufferLen;
  39. uint8_t* frameData;
  40. uint16_t frameDataLen;
  41. uint16_t frameBytesCount;
  42. osThreadId_t uartRecieveTaskHandle;
  43. osThreadId_t uartTransmitTaskHandle;
  44. osMutexId_t rxDataBufferMutex;
  45. #if 0
  46. osMessageQueueId_t processDataQueue;
  47. #endif
  48. MessageBufferHandle_t processRxDataMsgBuffer;
  49. ProcessDataCallbackFunc processDataCb;
  50. osMessageQueueId_t *sendCmdToSlaveQueue;
  51. UART_HandleTypeDef* huart;
  52. uint8_t uartNumber;
  53. };
  54. typedef struct _UartTaskData UartTaskData;
  55. void Uart8TasksInit (void);
  56. void Uart8ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData);
  57. void UartRxTask (void* argument);
  58. void UartTxTask (void* argument);
  59. void HandleUartRxCallback (UartTaskData* uartTaskData, UART_HandleTypeDef* huart, uint16_t Size);
  60. void MeasurmentsReqSchedulerTaskInit(void);
  61. void MeasurmentsReqSchedulerTask(void* argument);
  62. #endif /* INC_UART_TASKS_H_ */