/*******************************************************************************
|
* 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 256
|
#define DBG_UART_TX_BUF_SIZE (1024*2)
|
#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, _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, (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, (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, &_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, (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, (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, (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, (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, (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, (HIDO_UINT8 *) acOutputBuf, u32Len);
|
#endif
|
return Uart_Send(UART_ID_DBG, (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)
|
{
|
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_CHARGE)
|
{
|
static HIDO_UINT32 l_u32ModeTick = 0;;
|
HIDO_UINT8 u8RecvChar = 0;
|
// UART_HandleTypeDef *pstUartHandle = HIDO_NULL;
|
while (Uart_GetChar(UART_ID_DBG, &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);
|
// HAL_UART_Transmit(pstUartHandle, &u8RecvChar, 1, 1000);
|
}
|
}
|
}
|
//#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 stInit;
|
//
|
// memset(&stInit, 0, sizeof(stInit));
|
// stInit.m_eRxMode = UART_RX_MODE_DMA;
|
//#if DBG_TX_DMA
|
// stInit.m_eTxMode = UART_TX_MODE_DMA;
|
//#else
|
// stInit.m_eTxMode = UART_TX_MODE_POLL;
|
//#endif
|
// stInit.m_pu8RxBuf = l_au8DBGUartRxBuf;
|
// stInit.m_u32RxBufSize = DBG_UART_RX_BUF_SIZE;
|
//#if DBG_TX_DMA
|
// stInit.m_pu8TxBuf = l_au8DBGUartTxBuf;
|
//#endif
|
// stInit.m_u32TxBufSize = DBG_UART_TX_BUF_SIZE;
|
// stInit.m_u32TxQueueMemberCnt = DBG_UART_TX_QUEUE_MEMBER_CNT;
|
// Uart_Init(UART_ID_DBG, &stInit);
|
|
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);
|
}
|