/******************************************************************************* * File Name : DBG.c * Description : * Created on : 2018Äê7ÔÂ23ÈÕ * Author : ¶Å¼ü *******************************************************************************/ /******************************************************************************* * Include Files * *******************************************************************************/ #include "stdio.h" #include "stdarg.h" #include "string.h" //#include "AppConfig.h" #include "HIDO_VLQueue.h" #include "HIDO_Input.h" #include "HIDO_Timer.h" #include "HIDO_Util.h" #include "Uart.h" #include "DBG.h" //#include "RTC.h" //#include "stm32f4xx_hal.h" #include "Usart.h" /******************************************************************************* * Macro * *******************************************************************************/ #define OUTPUT_BUF_SIZE 512 #define DBG_UART_RX_BUF_SIZE 128 #define DBG_UART_TX_BUF_SIZE 128 #define DBG_UART_TX_QUEUE_MEMBER_CNT 64 /******************************************************************************* * Local Variable * *******************************************************************************/ static HIDO_InputStruct l_stSerialInput = { 0 }; static HIDO_UINT8 l_au8DBGUartRxBuf[DBG_UART_RX_BUF_SIZE]; #if DBG_TX_DMA static HIDO_UINT8 l_au8DBGUartTxBuf[DBG_UART_TX_BUF_SIZE]; #endif static HIDO_UINT8 l_u8DBGFlag = DBG_FLAG_ON; static E_DBGMode l_eDBGMode = DBG_MODE_CHARGE; //static E_DBGMode l_eDBGMode = DBG_MODE_SHELL; /******************************************************************************* * Local Function Declaration * *******************************************************************************/ static HIDO_INT32 DBG_SerialGetChar(HIDO_UINT8 *_pu8Char); static HIDO_INT32 DBG_SerialPutString(const char *_pcString); static HIDO_INT32 DBG_SerialPutChar(HIDO_UINT8 _u8Char); /******************************************************************************* * Local Function * *******************************************************************************/ /******************************************************************************* * Function Name : DBG_SerialGetChar * Description : * Input : * Output : * Return : * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ static HIDO_INT32 DBG_SerialGetChar(HIDO_UINT8 *_pu8Char) { return Uart_GetChar(UART_ID_DBG_GPS, _pu8Char); } /******************************************************************************* * Function Name : DBG_SerialPrintf * Description : * Input : * Output : * Return : * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ static HIDO_INT32 DBG_SerialPrintf(const HIDO_CHAR *_pcFmt, ...) { if(DBG_GetMode() != DBG_MODE_SHELL) { return HIDO_OK; } va_list ap; HIDO_CHAR acOutputBuf[OUTPUT_BUF_SIZE]; va_start(ap, _pcFmt); vsnprintf(acOutputBuf, sizeof(acOutputBuf), _pcFmt, ap); va_end(ap); return Uart_Send(UART_ID_DBG_GPS, (HIDO_UINT8 *) acOutputBuf, strlen(acOutputBuf)); } /******************************************************************************* * Function Name : DBG_SerialPutString * Description : * Input : _pcString Êä³ö×Ö·û´® * Output : * Return : HIDO_OK ³É¹¦ * HIDO_ERR ʧ°Ü * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ static HIDO_INT32 DBG_SerialPutString(const char *_pcString) { if(DBG_GetMode() != DBG_MODE_SHELL) { return HIDO_OK; } HIDO_INT32 s32Ret = 0; s32Ret = Uart_Send(UART_ID_DBG_GPS, (HIDO_UINT8 *) _pcString, strlen(_pcString)); return s32Ret; } /******************************************************************************* * Function Name : DBG_SerialPutChar * Description : DBGÊä³öÒ»¸ö×Ö·û * Input : _u8Char Êä³ö×Ö·û * Output : * Return : HIDO_OK ³É¹¦ * HIDO_ERR ʧ°Ü * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ static HIDO_INT32 DBG_SerialPutChar(HIDO_UINT8 _u8Char) { if(DBG_GetMode() != DBG_MODE_SHELL) { return HIDO_OK; } HIDO_INT32 s32Ret = 0; s32Ret = Uart_Send(UART_ID_DBG_GPS, &_u8Char, 1); return s32Ret; } /******************************************************************************* * Global Function * *******************************************************************************/ /******************************************************************************* * Function Name : HIDO_Debug * Description : * Input : * Output : * Return : * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ HIDO_INT32 HIDO_Debug(const HIDO_CHAR *_pcFmt, ...) { if(DBG_GetMode() != DBG_MODE_SHELL) { return HIDO_OK; } va_list ap; HIDO_CHAR acOutputBuf[OUTPUT_BUF_SIZE]; HIDO_UINT32 u32Len = 0; va_start(ap, _pcFmt); u32Len = vsnprintf(acOutputBuf, sizeof(acOutputBuf), _pcFmt, ap); va_end(ap); if(u32Len > (sizeof(acOutputBuf) - 1)) { u32Len = sizeof(acOutputBuf) - 1; } Uart_Send(UART_ID_DBG_GPS, (HIDO_UINT8 *) acOutputBuf, u32Len); return HIDO_OK; } HIDO_INT32 HIDO_Debug2(const HIDO_CHAR *_pcFmt, ...) { if(DBG_GetMode() != DBG_MODE_SHELL) { return HIDO_OK; } va_list ap; HIDO_CHAR acOutputBuf[OUTPUT_BUF_SIZE]; HIDO_UINT32 u32Len = 0; va_start(ap, _pcFmt); u32Len = vsnprintf(acOutputBuf, sizeof(acOutputBuf), _pcFmt, ap); va_end(ap); if(u32Len > (sizeof(acOutputBuf) - 1)) { u32Len = sizeof(acOutputBuf) - 1; } Uart_Send(UART_ID_DBG_GPS, (HIDO_UINT8 *) acOutputBuf, u32Len); return HIDO_OK; } /******************************************************************************* * Function Name : HIDO_Debug * Description : * Input : * Output : * Return : * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ HIDO_INT32 HIDO_DebugEx(const HIDO_CHAR *_pcFmt, ...) { if(DBG_GetMode() != DBG_MODE_SHELL) { return HIDO_OK; } va_list ap; HIDO_CHAR acOutputBuf[OUTPUT_BUF_SIZE]; HIDO_UINT32 u32Len = 0; // ST_RTCDateTime stRTCDateTime; /* Êä³öÈÕÖ¾¸ñʽ */ // RTC_GetDateTime(&stRTCDateTime); // u32Len = HIDO_UtilSnprintf(acOutputBuf, sizeof(acOutputBuf), "%04u-%02u-%02u %02u:%02u:%02u.%03u ", // stRTCDateTime.m_u16Year, stRTCDateTime.m_u8Month, stRTCDateTime.m_u8Day, stRTCDateTime.m_u8Hour, // stRTCDateTime.m_u8Min, stRTCDateTime.m_u8Sec, HAL_GetTick() % 1000); // Uart_Send(UART_ID_DBG_GPS, (HIDO_UINT8 *) acOutputBuf, u32Len); va_start(ap, _pcFmt); u32Len = vsnprintf(acOutputBuf, sizeof(acOutputBuf), _pcFmt, ap); va_end(ap); if(u32Len > (sizeof(acOutputBuf) - 1)) { u32Len = sizeof(acOutputBuf) - 1; } Uart_Send(UART_ID_DBG_GPS, (HIDO_UINT8 *) acOutputBuf, u32Len); return HIDO_OK; } /******************************************************************************* * Function Name : HIDO_DebugHex * Description : * Input : * Output : * Return : * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ HIDO_INT32 HIDO_DebugHex(const HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len) { if(DBG_GetMode() != DBG_MODE_SHELL) { return HIDO_OK; } HIDO_UINT32 u32Len = 0; HIDO_CHAR acOutputBuf[64]; if(l_u8DBGFlag != DBG_FLAG_ON) { return HIDO_OK; } do { if(_u32Len > 16) { u32Len = 16; } else { u32Len = _u32Len; } memset(acOutputBuf, 0, sizeof(acOutputBuf)); HIDO_UtilByteArrayToHexString(_pu8Data, u32Len, acOutputBuf, sizeof(acOutputBuf), HIDO_TRUE); strcat(acOutputBuf, "\r\n"); Uart_Send(UART_ID_DBG_GPS, (HIDO_UINT8 *) acOutputBuf, strlen(acOutputBuf)); _u32Len -= u32Len; _pu8Data += u32Len; } while(_u32Len != 0); return HIDO_OK; } /******************************************************************************* * Function Name : HIDO_DebugString * Description : * Input : * Output : * Return : * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ HIDO_INT32 HIDO_DebugString(const HIDO_CHAR *_pu8String, HIDO_UINT32 _u32StringLen) { if(DBG_GetMode() != DBG_MODE_SHELL) { return HIDO_OK; } #if 0 HIDO_CHAR acOutputBuf[64]; HIDO_UINT32 u32Len = 0; ST_RTCDateTime stRTCDateTime; /* Êä³öÈÕÖ¾¸ñʽ */ RTC_GetDateTime(&stRTCDateTime); u32Len = HIDO_UtilSnprintf(acOutputBuf, sizeof(acOutputBuf), "%04u-%02u-%02u %02u:%02u:%02u.%03u ", stRTCDateTime.m_u16Year, stRTCDateTime.m_u8Month, stRTCDateTime.m_u8Day, stRTCDateTime.m_u8Hour, stRTCDateTime.m_u8Min, stRTCDateTime.m_u8Sec, HAL_GetTick() % 1000); Uart_Send(UART_ID_DBG_GPS, (HIDO_UINT8 *) acOutputBuf, u32Len); #endif return Uart_Send(UART_ID_DBG_GPS, (HIDO_UINT8 *) _pu8String, _u32StringLen); } /******************************************************************************* * Function Name : DBG_SetDebugFlag * Description : * Input : * Output : * Return : * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ HIDO_VOID DBG_SetDebugFlag(HIDO_UINT8 _u8Flag) { l_u8DBGFlag = _u8Flag; } /******************************************************************************* * Function Name : DBG_SetMode * Description : * Input : * Output : * Return : * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ HIDO_INT32 DBG_SetMode(E_DBGMode _eMode) { l_eDBGMode = _eMode; return HIDO_OK; } /******************************************************************************* * Function Name : DBG_SetDebugFlag * Description : * Input : * Output : * Return : * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ E_DBGMode DBG_GetMode(void) { if(Get5VState() == 0) { return DBG_MODE_GPS; } return l_eDBGMode; } //#ifdef __APP_CODE__ /******************************************************************************* * Function Name : DBG_Init * Description : µ÷ÊÔ´òÓ¡ÂÖѯ * Input : None * Output : None * Return : None * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ uint8_t chargedbg_flag; HIDO_VOID DBG_Poll(void) { if(DBG_GetMode() == DBG_MODE_SHELL) { HIDO_InputPoll(); } else if(DBG_GetMode() == DBG_MODE_GPS) { GPS_Poll(); } else if(DBG_GetMode() == DBG_MODE_CHARGE) { static HIDO_UINT32 l_u32ModeTick = 0;; HIDO_UINT8 u8RecvChar = 0; while (Uart_GetChar(UART_ID_DBG_GPS, &u8RecvChar) == HIDO_OK) { if(u8RecvChar == 0x03) { if(l_u32ModeTick != 0) { if(HIDO_TimerGetTick() - l_u32ModeTick > 200) { chargedbg_flag = 1; DBG_SetMode(DBG_MODE_SHELL); } } else { l_u32ModeTick = HIDO_TimerGetTick(); } } else { l_u32ModeTick = 0; } UsartParseDataHandler(u8RecvChar); } } } //#endif /******************************************************************************* * Function Name : DBG_Init * Description : µ÷ÊÔ´òÓ¡³õʼ»¯ * Input : None * Output : None * Return : None * Author : ¶Å¼ü * Modified Date: : 2018Äê7ÔÂ23ÈÕ *******************************************************************************/ HIDO_VOID DBG_Init(void) { ST_UartInit stUartInit; // µ÷ÊÔ´®¿ÚÂß¼­Éϵijõʼ»¯£¬²¢²»ÊÇÕæÕýÒâÒåµÄÓ²¼þ³õʼ»¯£¬ÎªÁËÊÊÅäUART.c½Ó¿Ú stUartInit.m_eRxMode = UART_RX_MODE_DMA; //ûÓоßÌåÒâÒ壬¾ÍΤÁËÊÊÅä½Ó¿Ú stUartInit.m_eTxMode = UART_TX_MODE_POLL; //ûÓоßÌåÒâÒ壬¾ÍΤÁËÊÊÅä½Ó¿Ú stUartInit.m_pu8RxBuf = l_au8DBGUartRxBuf; stUartInit.m_u32RxBufSize = DBG_UART_RX_BUF_SIZE; stUartInit.m_pu8TxBuf = HIDO_NULL; stUartInit.m_u32TxBufSize = 0; stUartInit.m_u32TxQueueMemberCnt = 0; stUartInit.m_u32BaudRate = 115200; if(Uart_Init(UART_ID_DBG_GPS, &stUartInit) != HIDO_OK) { return; } l_stSerialInput.m_fnPrintf = DBG_SerialPrintf; l_stSerialInput.m_fnGetc = DBG_SerialGetChar; l_stSerialInput.m_fnPutc = DBG_SerialPutChar; l_stSerialInput.m_fnPuts = DBG_SerialPutString; HIDO_InputRegister(&l_stSerialInput); Shell_Init(); }