📄 probe_com.c
字号:
static CPU_INT16U ProbeCom_CmdMultipleRd (CPU_INT08U *prx_buf,
CPU_INT08U *ptx_buf,
CPU_INT16U rx_pkt_size,
CPU_INT16U tx_buf_size);
#if (PROBE_COM_SUPPORT_WR == DEF_TRUE)
static CPU_INT16U ProbeCom_CmdSimpleWr (CPU_INT08U *prx_buf,
CPU_INT08U *ptx_buf,
CPU_INT16U rx_pkt_size,
CPU_INT16U tx_buf_size);
static CPU_INT16U ProbeCom_CmdMultipleWr (CPU_INT08U *prx_buf,
CPU_INT08U *ptx_buf,
CPU_INT16U rx_pkt_size,
CPU_INT16U tx_buf_size);
#endif
#if (PROBE_COM_SUPPORT_STR == DEF_TRUE)
static CPU_INT16U ProbeCom_CmdStrRd (CPU_INT08U *prx_buf,
CPU_INT08U *ptx_buf,
CPU_INT16U rx_pkt_size,
CPU_INT16U tx_buf_size);
static CPU_INT16U ProbeCom_CmdStrWr (CPU_INT08U *prx_buf,
CPU_INT08U *ptx_buf,
CPU_INT16U rx_pkt_size,
CPU_INT16U tx_buf_size);
#endif
#if (PROBE_COM_SUPPORT_TELEMETRY == DEF_TRUE)
static CPU_INT16U ProbeCom_CmdTelemetryGet(CPU_INT08U *prx_buf,
CPU_INT08U *ptx_buf,
CPU_INT16U rx_pkt_size,
CPU_INT16U tx_buf_size);
#endif
/* ------------------- RD FROM RX PKT ----------------- */
static CPU_INT08U ProbeCom_GetINT8U (CPU_INT08U **pbuf);
static CPU_INT16U ProbeCom_GetINT16U (CPU_INT08U **pbuf);
static CPU_INT32U ProbeCom_GetINT32U (CPU_INT08U **pbuf);
/* -------------------- WR TO TX BUF ----------------- */
static void ProbeCom_StoINT8U (CPU_INT08U **pbuf,
CPU_INT08U data);
static void ProbeCom_StoINT16U (CPU_INT08U **pbuf,
CPU_INT16U data);
#if (PROBE_COM_SUPPORT_TELEMETRY == DEF_TRUE)
static void ProbeCom_StoINT32U (CPU_INT08U **pbuf,
CPU_INT32U data);
#endif
/* -------------- DETERMINE PKT MODIFIER -------------- */
#if (PROBE_COM_SUPPORT_STR == DEF_TRUE)
static CPU_BOOLEAN ProbeCom_StrRdy (void);
#endif
#if (PROBE_COM_SUPPORT_TELEMETRY == DEF_TRUE)
static CPU_BOOLEAN ProbeCom_TelemetryRdy (void);
static void ProbeCom_TelemetryInit (void);
#endif
/*
*********************************************************************************************************
* LOCAL CONFIGURATION ERRORS
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*********************************************************************************************************
** GLOBAL FUNCTIONS
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* ProbeCom_Init()
*
* Description : Initialize the module.
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
void ProbeCom_Init (void)
{
#if (PROBE_COM_SUPPORT_STR == DEF_TRUE)
ProbeCom_StrBufWrIx = 0;
ProbeCom_StrBufRdIx = 0;
ProbeCom_OS_Init();
#endif
#if (PROBE_COM_SUPPORT_TELEMETRY == DEF_TRUE)
ProbeCom_TelemetryInit();
#endif
#if (PROBE_COM_STAT_EN == DEF_ENABLED)
ProbeCom_RxPktCtr = 0;
ProbeCom_TxPktCtr = 0;
ProbeCom_TxSymCtr = 0;
ProbeCom_TxSymByteCtr = 0;
ProbeCom_ErrPktCtr = 0;
#if (PROBE_COM_SUPPORT_STR == DEF_TRUE)
ProbeCom_TxStrCtr = 0;
#endif
#if (PROBE_COM_SUPPORT_WR == DEF_TRUE)
ProbeCom_RxSymCtr = 0;
ProbeCom_RxSymByteCtr = 0;
#endif
#endif
ProbeCom_EndiannessTest = 0x12345678L;
ProbeCom_InfoHndlr = (PROBE_COM_INFO_HDNLR_FNCT)0;
#if (PROBE_COM_SUPPORT_STR == DEF_TRUE)
ProbeCom_StrHndlr = (PROBE_COM_STR_HDNLR_FNCT )0;
#endif
}
/*
*********************************************************************************************************
* ProbeCom_ParseRxPkt()
*
* Description : Parse a packet & formulate a response.
*
* Argument(s) : prx_pkt Pointer to the receive packet buffer
*
* ptx_pkt Pointer to the transmit packet buffer
*
* rx_pkt_size Size of the received packet
*
* tx_pkt_size Size of the transmit packet buffer
*
* Return(s) : The number of bytes in the data segment of the packet to transmit in response.
*
* Caller(s) : Tasks/receive handlers in communications-specific drivers, e.g., probe_rs232,
* probe_usb, probe_tcpip, etc.).
*
* Note(s) : none.
*********************************************************************************************************
*/
CPU_INT16U ProbeCom_ParseRxPkt (void *prx_pkt,
void *ptx_pkt,
CPU_INT16U rx_pkt_size,
CPU_INT16U tx_buf_size)
{
CPU_INT16U tx_buf_wr;
CPU_INT16U format;
CPU_INT08U *prx_pkt_08;
CPU_INT08U *ptx_pkt_08;
if (rx_pkt_size < 2) {
return (0);
}
prx_pkt_08 = (CPU_INT08U *)prx_pkt;
ptx_pkt_08 = (CPU_INT08U *)ptx_pkt;
format = (prx_pkt_08[1] << 8) + prx_pkt_08[0];
prx_pkt_08 += 2;
#if (PROBE_COM_STAT_EN == DEF_ENABLED)
ProbeCom_RxPktCtr++;
ProbeCom_TxPktCtr++;
#endif
switch (format) {
case PROBE_COM_FMT_RX_QUERY:
tx_buf_wr = ProbeCom_CmdQuery( prx_pkt_08, ptx_pkt_08, rx_pkt_size, tx_buf_size);
break;
case PROBE_COM_FMT_RX_INFO:
tx_buf_wr = ProbeCom_CmdInfo( prx_pkt_08, ptx_pkt_08, rx_pkt_size, tx_buf_size);
break;
case PROBE_COM_FMT_RX_SIMPLE_RD:
tx_buf_wr = ProbeCom_CmdSimpleRd( prx_pkt_08, ptx_pkt_08, rx_pkt_size, tx_buf_size);
break;
case PROBE_COM_FMT_RX_MULTIPLE_RD:
tx_buf_wr = ProbeCom_CmdMultipleRd( prx_pkt_08, ptx_pkt_08, rx_pkt_size, tx_buf_size);
break;
#if (PROBE_COM_SUPPORT_WR == DEF_TRUE)
case PROBE_COM_FMT_RX_SIMPLE_WR:
tx_buf_wr = ProbeCom_CmdSimpleWr( prx_pkt_08, ptx_pkt_08, rx_pkt_size, tx_buf_size);
break;
case PROBE_COM_FMT_RX_MULTIPLE_WR:
tx_buf_wr = ProbeCom_CmdMultipleWr( prx_pkt_08, ptx_pkt_08, rx_pkt_size, tx_buf_size);
break;
#endif
#if (PROBE_COM_SUPPORT_STR == DEF_TRUE)
case PROBE_COM_FMT_RX_STR_RD:
tx_buf_wr = ProbeCom_CmdStrRd( prx_pkt_08, ptx_pkt_08, rx_pkt_size, tx_buf_size);
break;
case PROBE_COM_FMT_RX_STR_WR:
tx_buf_wr = ProbeCom_CmdStrWr( prx_pkt_08, ptx_pkt_08, rx_pkt_size, tx_buf_size);
break;
#endif
#if (PROBE_COM_SUPPORT_TELEMETRY == DEF_TRUE)
case PROBE_COM_FMT_RX_TELEMETRY_GET:
tx_buf_wr = ProbeCom_CmdTelemetryGet(prx_pkt_08, ptx_pkt_08, rx_pkt_size, tx_buf_size);
break;
#endif
default:
tx_buf_wr = ProbeCom_CmdErr ( ptx_pkt_08, PROBE_COM_STATUS_UNKNOWN_REQUEST);
break;
}
return (tx_buf_wr);
}
/*
*********************************************************************************************************
* ProbeCom_InfoHndlrSet()
*
* Description : Set the handler that will be invoked when an info packet is received.
*
* Argument(s) : hndlr The handler that will be invoked.
*
* Return(s) : none.
*
* Caller(s) : Application or communications-specific driver.
*
* Note(s) : none.
*********************************************************************************************************
*/
void ProbeCom_InfoHndlrSet (PROBE_COM_INFO_HDNLR_FNCT hndlr)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
CPU_SR cpu_sr;
#endif
CPU_CRITICAL_ENTER();
ProbeCom_InfoHndlr = hndlr;
CPU_CRITICAL_EXIT();
}
/*
*********************************************************************************************************
* ProbeCom_StrHndlrSet()
*
* Description : Set the handler that will be invoked when an string write packet is received.
*
* Argument(s) : hndlr The handler that will be invoked.
*
* Return(s) : none.
*
* Caller(s) : Application or communications-specific driver.
*
* Note(s) : none.
*********************************************************************************************************
*/
#if (PROBE_COM_SUPPORT_STR == DEF_TRUE)
void ProbeCom_StrHndlrSet (PROBE_COM_STR_HDNLR_FNCT hndlr)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
CPU_SR cpu_sr;
#endif
CPU_CRITICAL_ENTER();
ProbeCom_StrHndlr = hndlr;
CPU_CRITICAL_EXIT();
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -