123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- #ifndef _UART_MONITOR_H_
- #define _UART_MONITOR_H_
- #ifdef _UART_MONITOR_C_
- #define _UART_MONITOR_EXT
- #else
- #define _UART_MONITOR_EXT extern
- #endif
- #include "typedefine.h"
- typedef _Bool BOOL;
- #define CRC_CCITT
- /* ========================================================================== */
- /* ========================== Definitions & Macros ========================== */
- /* ========================================================================== */
- #define UART_DEF_TIMEOUT_MS 1000
- #define UART_DEF_CMD_LEN 0
- #define INSERT_BUFFER_SIZE 16
- #define INSERT_BUFFER_HEADER_LEN 7
- #define UART_CMD_LENGTH 22
- #define TX_BUFFER_SIZE 150
- #define RX_BUFFER_SIZE 24
- #define MSG_QUEUE_SIZE 10
- #define PARA_TABLE_SIZE 22
- #define PARA_BUFFER_SIZE 40
- #define LOW_WORD(var) ((UWORD *)(&var)) /* little-endian on arm */
- #define HIGH_WORD(var) ((UWORD *)(&var) + 1)
- /* ------------------------ data monitor application ------------------------ */
- #define CHANNEL_NUM 6 /* 使用的通�� */
- #define CHANNEL_1 2 /* æ¯�通é�“å�?2å—节 */
- #define CHANNEL_2 4
- #define CHANNEL_3 6
- #define CHANNEL_4 8
- #define CHANNEL_5 10
- #define CHANNEL_6 12
- #define TEMP_BUFFER_LEN CHANNEL_6
- #if TEMP_BUFFER_LEN == CHANNEL_6
- #define S_FRAME_SIZE 124
- #elif TEMP_BUFFER_LEN == CHANNEL_5
- #define S_FRAME_SIZE 104
- #elif TEMP_BUFFER_LEN == CHANNEL_4
- #define S_FRAME_SIZE 84
- #elif TEMP_BUFFER_LEN == CHANNEL_3
- #define S_FRAME_SIZE 64
- #else
- #error Must Specify Channel Num
- #endif
- /* ---------------- Define USART Driver configuration objects --------------- */
- #define UART_APPL_CONFIG_DEFAULT \
- { \
- UART_MODE_LEN, 1000, UART_CMD_LENGTH, NULL \
- }
- #define UART_MsgQ_CONFIG_DEFAULT \
- { \
- UART_stMsgQueue, UART_stMsgQueue, FALSE, FALSE \
- }
- #define UART_DRIVER_CONFIG_DEFAULT \
- { \
- UART_MODE_LEN, UART_DEF_TIMEOUT_MS, UART_DEF_CMD_LEN, NULL \
- }
- /* ========================================================================== */
- /* ====================== TypeDefs & Structure Defines ====================== */
- /* ========================================================================== */
- /* ---------------------------- USART error type ---------------------------- */
- typedef enum UART_ERR
- {
- UART_ERR_OK, /* No error */
- // UART_ERR_BUSY, /* Read or Write process is in busy. */
- UART_ERR_NO_BUFFER, /* No buffer room for data received */
- UART_ERR_TIMEOUT, /* Timeout when read */
- UART_ERR_UNKNOWN_CMD, /* Not in use */
- // UART_ERR_INVALID_CMD, /* Not in use */
- // UART_ERR_CANCEL, /* Not in use */
- // UART_ERR_PARA /* Provide function with invalid argument */
- } UART_ERR_Type;
- /* -------------------------- USART work mode type -------------------------- */
- typedef enum UART_WorkMode
- {
- UART_MODE_TIME, /* Time interval framing mode */
- UART_MODE_LEN, /* Fixed length framing mode */
- UART_MODE_CHAR /* Fixed chars framing mode */
- } UART_WorkMode_Type;
- /* ------------------- Callback function type definitions ------------------- */
- typedef void (*CB_ERROR)(UART_ERR_Type);
- typedef void (*CB_DONE_READ)(UART_ERR_Type, ULONG);
- typedef void (*CB_DONE_WRITE)(UART_ERR_Type);
- /* ------------------------- HAL configuration type ------------------------- */
- typedef struct UART_CONFIG
- {
- UART_WorkMode_Type enWorkMode;
- UWORD uwTimeout; // unit:count
- UBYTE ubLength; // unit:bytes
- UBYTE *pChar;
- } UART_CONFIG_Type;
- /*1. When enWorkMode=USART_MODE_TIME, uwTimeout indicates time-interval between frames.
- 2. When enWorkMode=USART_MODE_LEN, uwTimeout indicates timeout value, ubLength indicates command frame length, pChar is NULL.
- 3. When enWorkMode=USART_MODE_CHAR,uwTimeout indicates timeout value, ubLength indicates valid length in char-array pointed by pChar. */
- typedef enum MsgType
- {
- UART_NULL = 0, // NULL message will not be processed
- UART_SEND_STATUS = 1, // send out Application status
- UART_SEND_PARA = 2 // send out Parameter value
- } UART_MsgType;
- typedef struct Msg
- {
- UART_MsgType enType;
- UBYTE *pBuf;
- UWORD uwNumBytes;
- } UART_MSG;
- typedef struct MsgQNode
- {
- UART_MSG stMsg;
- struct MsgQNode *pNext;
- } UART_MsgQNodeType;
- typedef struct MsgQType
- {
- UART_MsgQNodeType *pSave;
- UART_MsgQNodeType *pUse;
- BOOL bValid;
- BOOL bHandling;
- } UART_MsgQType;
- typedef struct ParaData
- {
- BOOL bParaStart;
- BOOL bWriteBusy;
- } UART_ParaData_Flag;
- typedef struct DataBuff
- {
- UBYTE *pBuf;
- ULONG NumBytes;
- } DataBuff_Type;
- /* data structure used for Read */
- typedef struct READ
- {
- BOOL m_ReadBusy;
- ULONG m_BuffSize;
- DataBuff_Type m_DataBuff;
- CB_DONE_READ m_fpDone;
- } READ_Type;
- static READ_Type USART_Read = {FALSE, 0, {NULL, 0}, NULL};
- typedef struct WRITE
- {
- BOOL m_WriteBusy;
- DataBuff_Type m_DataBuff;
- CB_DONE_WRITE m_fpDone;
- } WRITE_Type;
- static WRITE_Type USART_Write = {FALSE, {NULL, 0}, NULL};
- /************************************************************************
- Exported Variables:
- *************************************************************************/
- #ifdef _UART_MONITOR_C_
- _UART_MONITOR_EXT UWORD placeholder[4] = {0xFFFF};
- _UART_MONITOR_EXT ULONG dummy32 = 0x00000000;
- _UART_MONITOR_EXT UBYTE UART_ubParaBuffer[PARA_BUFFER_SIZE] = {0};
- _UART_MONITOR_EXT UBYTE UART_ubReadBuffer[RX_BUFFER_SIZE];
- _UART_MONITOR_EXT UBYTE *uart_pReadBuffer = UART_ubReadBuffer;
- _UART_MONITOR_EXT UBYTE UART_ubWriteBuffer1[TX_BUFFER_SIZE] = {0x55, 0xAA, 0x55, 0xAA};
- _UART_MONITOR_EXT UBYTE UART_ubWriteBuffer2[TX_BUFFER_SIZE] = {0x55, 0xAA, 0x55, 0xAA};
- _UART_MONITOR_EXT UBYTE *UART_pWriteBuffer = UART_ubWriteBuffer1;
- _UART_MONITOR_EXT UWORD UART_uwWriteIndex = 4;
- _UART_MONITOR_EXT UWORD volatile UART_uwRxNum = 0;
- _UART_MONITOR_EXT UART_CONFIG_Type UART_stConfigLEN = UART_APPL_CONFIG_DEFAULT;
- _UART_MONITOR_EXT BOOL UART_bMonSwitch = FALSE; // control monitor function whether of not write data out.
- _UART_MONITOR_EXT UWORD *UART_pMonAddr[6]; // the address of the variable which user want to monitor.
- _UART_MONITOR_EXT UBYTE UART_ubInsertBuf[INSERT_BUFFER_SIZE] = {0x55, 0xAA, 0x55,
- 0xFF}; // the data in insertBuffer will be inserted into writeBuffer when enabled
- _UART_MONITOR_EXT volatile BOOL UART_bInsertPendTx = FALSE; // flag indicate whether insert buffer is pending to be transmitted.
- _UART_MONITOR_EXT UART_ParaData_Flag UART_stParaStatus = {FALSE};
- _UART_MONITOR_EXT UART_MsgQNodeType UART_stMsgQueue[MSG_QUEUE_SIZE]; // message queue
- _UART_MONITOR_EXT UART_MsgQType UART_stMsgQ = UART_MsgQ_CONFIG_DEFAULT;
- _UART_MONITOR_EXT volatile UART_CONFIG_Type UART_Config = UART_DRIVER_CONFIG_DEFAULT; // define configure object and assign default value.
- _UART_MONITOR_EXT UWORD UART_uwTimeoutCtr = 0;
- _UART_MONITOR_EXT volatile CB_ERROR UART_fpError = NULL;
- UBYTE uart_ReadBuffer2[RX_BUFFER_SIZE]; // cancel static just for debug
- static UBYTE *uart_pReadBuffer2 = uart_ReadBuffer2;
- UWORD volatile uart_DataNum2 = 0;
- UWORD dummy = 0;
- BOOL uart_frameStartFlag = FALSE;
- BOOL UART_blCommErrFlag = FALSE;
- UBYTE uart_frameType = 0x00;
- UBYTE uart_frameLength = 0;
- UWORD uart_receivedNum = 0;
- _UART_MONITOR_EXT SWORD uart_slSpdRefRpm = 0;
- _UART_MONITOR_EXT SWORD uart_swTorqRefNm = 0;
- #else
- _UART_MONITOR_EXT UBYTE *UART_pWriteBuffer;
- _UART_MONITOR_EXT volatile BOOL UART_bInsertPendTx;
- _UART_MONITOR_EXT BOOL UART_bMonSwitch ;
- _UART_MONITOR_EXT UART_ParaData_Flag UART_stParaStatus;
- _UART_MONITOR_EXT SWORD uart_slSpdRefRpm;
- _UART_MONITOR_EXT SWORD uart_swTorqRefNm;
- #endif
- /************************************************************************
- Local Variables:
- *************************************************************************/
- /************************************************************************
- Ram Allocation:
- *************************************************************************/
- /************************************************************************
- Exported Function Call Prototypes:
- *************************************************************************/
- _UART_MONITOR_EXT void uart_voMonitorInit(void);
- _UART_MONITOR_EXT void uart_voMainDec(void); // used in main.c for checking RxData and insertQueue
- _UART_MONITOR_EXT void uart_voAppMonitor(void); // used to send monitor data out
- _UART_MONITOR_EXT void uart_voApplTimer(void);
- _UART_MONITOR_EXT UART_MSG UART_stMsgFetched;
- _UART_MONITOR_EXT void uart_voDriTimer(void);
- _UART_MONITOR_EXT void ReadFrame_Poll2();
- _UART_MONITOR_EXT void uart_voSwanInit(void);
- _UART_MONITOR_EXT void uart_voApplMain(void);
- void uart_TxCompleteCallback();
- void uart_TxErrorCallback();
- _UART_MONITOR_EXT UWORD uart_uwCRCCcitt(UBYTE *ptubBuf, UWORD length);
- /************************************************************************
- Local Function Call Prototypes:
- *************************************************************************/
- void uart_voHandleParaCmd(void);
- void uart_voDecode(void);
- void CBError_monitor(UART_ERR_Type _err);
- void uart_voCBDoneRead(UART_ERR_Type _err, ULONG _NumBytes);
- UBYTE uart_ubCheckXOR(UBYTE *Buf, UBYTE CNT);
- void uart_voPostMsg(UART_MSG _msg);
- void uart_Read_Poll2(ULONG _NumBytes, UBYTE *_Buffer, CB_DONE_READ _fpCBDone);
- void CBDoneRead2(UART_ERR_Type _err, ULONG _NumBytes);
- void CBError_Swan(UART_ERR_Type _err);
- void uart_Write_Poll2(ULONG _NumBytes, const UBYTE *_Buffer);
- void HAL_CancelRead_Poll2(void);
- BOOL SwanDecoder(UBYTE *ptubBuffer, UWORD Num, UBYTE **ptptubACKbuffer, UWORD *ACKnum);
- #endif
- /************************************************************************
- Copyright (c) 2019 Welling Motor Technology(Shanghai) Co. Ltd.
- All rights reserved.
- *************************************************************************
- End of this File (EOF)!
- Do not put anything after this part!
- *************************************************************************/
|