uart_monitor.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. #ifndef _UART_MONITOR_H_
  2. #define _UART_MONITOR_H_
  3. #ifdef _UART_MONITOR_C_
  4. #define _UART_MONITOR_EXT
  5. #else
  6. #define _UART_MONITOR_EXT extern
  7. #endif
  8. #include "typedefine.h"
  9. /* ========================================================================== */
  10. /* ========================== Definitions & Macros ========================== */
  11. /* ========================================================================== */
  12. #define UART_DEF_TIMEOUT_MS 1000
  13. #define UART_DEF_CMD_LEN 0
  14. #define INSERT_BUFFER_SIZE 16
  15. #define INSERT_BUFFER_HEADER_LEN 7
  16. #define UART_CMD_LENGTH 22
  17. #define TX_BUFFER_SIZE 150
  18. #define RX_BUFFER_SIZE 24
  19. #define MSG_QUEUE_SIZE 10
  20. #define PARA_TABLE_SIZE 22
  21. #define PARA_BUFFER_SIZE 40
  22. #define LOW_WORD(var) ((UWORD *)(&var)) /* little-endian on arm */
  23. #define HIGH_WORD(var) ((UWORD *)(&var) + 1)
  24. /* ------------------------ data monitor application ------------------------ */
  25. #define CHANNEL_NUM 6 /* 使用的通道数 */
  26. #define CHANNEL_1 2 /* 每通道占2字节 */
  27. #define CHANNEL_2 4
  28. #define CHANNEL_3 6
  29. #define CHANNEL_4 8
  30. #define CHANNEL_5 10
  31. #define CHANNEL_6 12
  32. #define TEMP_BUFFER_LEN CHANNEL_6
  33. #if TEMP_BUFFER_LEN == CHANNEL_6
  34. #define S_FRAME_SIZE 124
  35. #elif TEMP_BUFFER_LEN == CHANNEL_5
  36. #define S_FRAME_SIZE 104
  37. #elif TEMP_BUFFER_LEN == CHANNEL_4
  38. #define S_FRAME_SIZE 84
  39. #elif TEMP_BUFFER_LEN == CHANNEL_3
  40. #define S_FRAME_SIZE 64
  41. #else
  42. #error Must Specify Channel Num
  43. #endif
  44. /* ---------------- Define USART Driver configuration objects --------------- */
  45. #define UART_APPL_CONFIG_DEFAULT \
  46. { \
  47. UART_MODE_LEN, 1000, UART_CMD_LENGTH, NULL \
  48. }
  49. #define UART_MsgQ_CONFIG_DEFAULT \
  50. { \
  51. UART_stMsgQueue, UART_stMsgQueue, FALSE, FALSE \
  52. }
  53. #define UART_DRIVER_CONFIG_DEFAULT \
  54. { \
  55. UART_MODE_LEN, UART_DEF_TIMEOUT_MS, UART_DEF_CMD_LEN, NULL \
  56. }
  57. /* ========================================================================== */
  58. /* ====================== TypeDefs & Structure Defines ====================== */
  59. /* ========================================================================== */
  60. /* ---------------------------- USART error type ---------------------------- */
  61. typedef enum UART_ERR
  62. {
  63. UART_ERR_OK, /* No error */
  64. UART_ERR_BUSY, /* Read or Write process is in busy. */
  65. UART_ERR_NO_BUFFER, /* No buffer room for data received */
  66. UART_ERR_TIMEOUT, /* Timeout when read */
  67. UART_ERR_UNKNOWN_CMD, /* Not in use */
  68. UART_ERR_INVALID_CMD, /* Not in use */
  69. UART_ERR_CANCEL, /* Not in use */
  70. UART_ERR_PARA /* Provide function with invalid argument */
  71. } UART_ERR_Type;
  72. /* -------------------------- USART work mode type -------------------------- */
  73. typedef enum UART_WorkMode
  74. {
  75. UART_MODE_TIME, /* Time interval framing mode */
  76. UART_MODE_LEN, /* Fixed length framing mode */
  77. UART_MODE_CHAR /* Fixed chars framing mode */
  78. } UART_WorkMode_Type;
  79. /* ------------------- Callback function type definitions ------------------- */
  80. typedef void (*CB_ERR)(UART_ERR_Type);
  81. typedef void (*CB_DONE_READ)(UART_ERR_Type, ULONG);
  82. typedef void (*CB_DONE_WRITE)(UART_ERR_Type);
  83. /* ------------------------- HAL configuration type ------------------------- */
  84. typedef struct UART_CONFIG
  85. {
  86. UART_WorkMode_Type enWorkMode;
  87. UWORD uwTimeout; // unit:count
  88. UBYTE ubLength; // unit:bytes
  89. UBYTE *pChar;
  90. } UART_CONFIG_Type;
  91. /*1. When enWorkMode=USART_MODE_TIME, uwTimeout indicates time-interval between frames.
  92. 2. When enWorkMode=USART_MODE_LEN, uwTimeout indicates timeout value, ubLength indicates command frame length, pChar is NULL.
  93. 3. When enWorkMode=USART_MODE_CHAR,uwTimeout indicates timeout value, ubLength indicates valid length in char-array pointed by pChar. */
  94. typedef enum MsgType
  95. {
  96. UART_NULL = 0, // NULL message will not be processed
  97. UART_SEND_STATUS = 1, // send out Application status
  98. UART_SEND_PARA = 2 // send out Parameter value
  99. } UART_MsgType;
  100. typedef struct MSG
  101. {
  102. UART_MsgType enType;
  103. UBYTE *pBuf;
  104. UWORD uwNumBytes;
  105. } UART_MSG;
  106. typedef struct MsgQNode
  107. {
  108. UART_MSG stMsg;
  109. struct MsgQNode *pNext;
  110. } UART_MsgQNodeType;
  111. typedef struct MsgQType
  112. {
  113. UART_MsgQNodeType *pSave;
  114. UART_MsgQNodeType *pUse;
  115. BOOL bValid;
  116. BOOL bHandling;
  117. } UART_MsgQType;
  118. typedef struct ParaData
  119. {
  120. BOOL bParaStart;
  121. BOOL bWriteBusy;
  122. } UART_ParaData_Flag;
  123. typedef struct DataBuff
  124. {
  125. UBYTE *pBuf;
  126. ULONG NumBytes;
  127. } DataBuff_Type;
  128. /* data structure used for Read */
  129. typedef struct READ
  130. {
  131. BOOL m_ReadBusy;
  132. ULONG m_BuffSize;
  133. DataBuff_Type m_DataBuff;
  134. CB_DONE_READ m_fpDone;
  135. } READ_Type;
  136. static READ_Type USART_Read = {FALSE, 0, {NULL, 0}, NULL};
  137. typedef struct WRITE
  138. {
  139. BOOL m_WriteBusy;
  140. DataBuff_Type m_DataBuff;
  141. CB_DONE_WRITE m_fpDone;
  142. } WRITE_Type;
  143. static WRITE_Type USART_Write = {FALSE, {NULL, 0}, NULL};
  144. /************************************************************************
  145. Exported Variables:
  146. *************************************************************************/
  147. #ifdef _UART_MONITOR_C_
  148. _UART_MONITOR_EXT UWORD placeholder[4] = {0xFFFF};
  149. _UART_MONITOR_EXT ULONG dummy32 = 0x00000000;
  150. _UART_MONITOR_EXT UBYTE UART_ubParaBuffer[PARA_BUFFER_SIZE] = {0};
  151. _UART_MONITOR_EXT UBYTE UART_ubReadBuffer[RX_BUFFER_SIZE];
  152. _UART_MONITOR_EXT UBYTE *uart_pReadBuffer = UART_ubReadBuffer;
  153. _UART_MONITOR_EXT UBYTE UART_ubWriteBuffer1[TX_BUFFER_SIZE] = {0x55, 0xAA, 0x55, 0xAA};
  154. _UART_MONITOR_EXT UBYTE UART_ubWriteBuffer2[TX_BUFFER_SIZE] = {0x55, 0xAA, 0x55, 0xAA};
  155. _UART_MONITOR_EXT UBYTE *UART_pWriteBuffer = UART_ubWriteBuffer1;
  156. _UART_MONITOR_EXT UWORD UART_uwWriteIndex = 4;
  157. _UART_MONITOR_EXT UWORD volatile UART_uwRxNum = 0;
  158. _UART_MONITOR_EXT UART_CONFIG_Type UART_stConfigLEN = UART_APPL_CONFIG_DEFAULT;
  159. _UART_MONITOR_EXT BOOL UART_bMonSwitch = FALSE; // control monitor function whether of not write data out.
  160. _UART_MONITOR_EXT UWORD *UART_pMonAddr[6]; // the address of the variable which user want to monitor.
  161. _UART_MONITOR_EXT UBYTE UART_ubInsertBuf[INSERT_BUFFER_SIZE] = {0x55, 0xAA, 0x55,
  162. 0xFF}; // the data in insertBuffer will be inserted into writeBuffer when enabled
  163. _UART_MONITOR_EXT volatile BOOL UART_bInsertPendTx = FALSE; // flag indicate whether insert buffer is pending to be transmitted.
  164. _UART_MONITOR_EXT UART_ParaData_Flag UART_stParaStatus = {FALSE};
  165. _UART_MONITOR_EXT UART_MsgQNodeType UART_stMsgQueue[MSG_QUEUE_SIZE]; // message queue
  166. _UART_MONITOR_EXT UART_MsgQType UART_stMsgQ = UART_MsgQ_CONFIG_DEFAULT;
  167. _UART_MONITOR_EXT volatile UART_CONFIG_Type UART_Config = UART_DRIVER_CONFIG_DEFAULT; // define configure object and assign default value.
  168. _UART_MONITOR_EXT UWORD UART_uwTimeoutCtr = 0;
  169. _UART_MONITOR_EXT volatile CB_ERR UART_fpError = NULL;
  170. UBYTE uart_ReadBuffer2[RX_BUFFER_SIZE]; // cancel static just for debug
  171. static UBYTE *uart_pReadBuffer2 = uart_ReadBuffer2;
  172. UWORD volatile uart_DataNum2 = 0;
  173. UWORD dummy = 0;
  174. BOOL uart_frameStartFlag = FALSE;
  175. BOOL UART_blCommErrFlag = FALSE;
  176. UBYTE uart_frameType = 0x00;
  177. UBYTE uart_frameLength = 0;
  178. UWORD uart_receivedNum = 0;
  179. _UART_MONITOR_EXT SWORD uart_slSpdRefRpm = 0;
  180. _UART_MONITOR_EXT SWORD uart_swTorqRefNm = 0;
  181. #else
  182. _UART_MONITOR_EXT UBYTE *UART_pWriteBuffer;
  183. _UART_MONITOR_EXT volatile BOOL UART_bInsertPendTx;
  184. _UART_MONITOR_EXT BOOL UART_bMonSwitch ;
  185. _UART_MONITOR_EXT UART_ParaData_Flag UART_stParaStatus;
  186. _UART_MONITOR_EXT SWORD uart_slSpdRefRpm;
  187. _UART_MONITOR_EXT SWORD uart_swTorqRefNm;
  188. #endif
  189. /************************************************************************
  190. Local Variables:
  191. *************************************************************************/
  192. /************************************************************************
  193. Ram Allocation:
  194. *************************************************************************/
  195. /************************************************************************
  196. Exported Function Call Prototypes:
  197. *************************************************************************/
  198. _UART_MONITOR_EXT void uart_voMonitorInit(void);
  199. _UART_MONITOR_EXT void uart_voMainDec(void); // used in main.c for checking RxData and insertQueue
  200. _UART_MONITOR_EXT void uart_voAppMonitor(void); // used to send monitor data out
  201. _UART_MONITOR_EXT void uart_voApplTimer(void);
  202. _UART_MONITOR_EXT UART_MSG UART_stMsgFetched;
  203. _UART_MONITOR_EXT void uart_voDriTimer(void);
  204. _UART_MONITOR_EXT void ReadFrame_Poll2();
  205. _UART_MONITOR_EXT void uart_voSwanInit(void);
  206. _UART_MONITOR_EXT void uart_voApplMain(void);
  207. void uart_TxCompleteCallback();
  208. void uart_TxErrorCallback();
  209. /************************************************************************
  210. Local Function Call Prototypes:
  211. *************************************************************************/
  212. void uart_voHandleParaCmd(void);
  213. void uart_voDecode(void);
  214. void CBError_monitor(UART_ERR_Type _err);
  215. void uart_voCBDoneRead(UART_ERR_Type _err, ULONG _NumBytes);
  216. UBYTE uart_ubCheckXOR(UBYTE *Buf, UBYTE CNT);
  217. void uart_voPostMsg(UART_MSG _msg);
  218. void uart_Read_Poll2(ULONG _NumBytes, UBYTE *_Buffer, CB_DONE_READ _fpCBDone);
  219. void CBDoneRead2(UART_ERR_Type _err, ULONG _NumBytes);
  220. void CBError_Swan(UART_ERR_Type _err);
  221. void uart_Write_Poll2(ULONG _NumBytes, const UBYTE *_Buffer);
  222. void HAL_CancelRead_Poll2(void);
  223. BOOL SwanDecoder(UBYTE *ptubBuffer, UWORD Num, UBYTE **ptptubACKbuffer, UWORD *ACKnum);
  224. #endif
  225. /************************************************************************
  226. Copyright (c) 2019 Welling Motor Technology(Shanghai) Co. Ltd.
  227. All rights reserved.
  228. *************************************************************************
  229. End of this File (EOF)!
  230. Do not put anything after this part!
  231. *************************************************************************/