uart_monitor.h 11 KB

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