📄 probe_rs232.c
字号:
/*
*********************************************************************************************************
* ProbeRS232_Task()
*
* Description : The task which parses the received packet, forms a response, and begins transmission.
*
* Argument(s) : p_arg The argument passed to 'ProbeRS232_Task()' by 'ProbeRS232_OS_Task()'.
*
* Return(s) : none.
*
* Caller(s) : ProbeRS232_OS_Task().
*
* Note(s) : none.
*********************************************************************************************************
*/
#if (PROBE_RS232_PARSE_TASK == DEF_TRUE)
void ProbeRS232_Task (void *p_arg)
{
CPU_INT16U len;
(void)p_arg;
while (DEF_TRUE) {
ProbeRS232_OS_Pend(); /* Wait for a packet to be received. */
len = ProbeRS232_ParseRxPkt(); /* Parse packet and formulate a response. */
if (len > 0) { /* If we have a response. */
ProbeRS232_TxLen = len;
ProbeRS232_TxStart();
}
}
}
#endif
/*
*********************************************************************************************************
*********************************************************************************************************
* RX & TX HANDLERS
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* ProbeRS232_RxHandler()
*
* Description : Handle a received byte.
*
* Argument(s) : rx_data Received data byte.
*
* Return(s) : none.
*
* Caller(s) : Rx ISR.
*
* Note(s) : none.
*********************************************************************************************************
*/
void ProbeRS232_RxHandler (CPU_INT08U rx_data)
{
#if (PROBE_COM_STAT_EN == DEF_ENABLED)
ProbeRS232_RxCtr++;
#endif
switch (ProbeRS232_RxState) {
case PROBE_RS232_RX_STATE_SD0: /* Rx'd the start 1st start delimiter (SD0). */
if (rx_data == PROBE_RS232_PROTOCOL_RX_SD0) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD1;
ProbeRS232_RxBufClr();
}
break;
case PROBE_RS232_RX_STATE_SD1: /* Rx'd the start 2nd start delimiter (SD1). */
if (rx_data == PROBE_RS232_PROTOCOL_RX_SD1) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD2;
} else {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
}
break;
case PROBE_RS232_RX_STATE_SD2: /* Rx'd the start 3rd start delimiter (SD2). */
if (rx_data == PROBE_RS232_PROTOCOL_RX_SD2) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD3;
} else {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
}
break;
case PROBE_RS232_RX_STATE_SD3: /* Rx'd the start 4th start delimiter (SD3). */
if (rx_data == PROBE_RS232_PROTOCOL_RX_SD3) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_LEN1;
} else {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
}
break;
case PROBE_RS232_RX_STATE_LEN1: /* Rx'd the 1st len byte. */
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
ProbeRS232_RxChkSum = rx_data;
#endif
ProbeRS232_RxRemainLen = rx_data;
ProbeRS232_RxState = PROBE_RS232_RX_STATE_LEN2;
break;
case PROBE_RS232_RX_STATE_LEN2: /* Rx'd the 2nd len byte. */
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
ProbeRS232_RxChkSum += rx_data;
#endif
ProbeRS232_RxRemainLen |= rx_data << 8;
/* Chk len. */
if ((ProbeRS232_RxRemainLen == 0) || (ProbeRS232_RxRemainLen > PROBE_RS232_RX_BUF_SIZE)) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
} else {
ProbeRS232_RxLen = ProbeRS232_RxRemainLen;
ProbeRS232_RxState = PROBE_RS232_RX_STATE_PAD1;
}
break;
case PROBE_RS232_RX_STATE_PAD1: /* Rx'd the 1st padding byte. */
ProbeRS232_RxState = PROBE_RS232_RX_STATE_PAD2;
break;
case PROBE_RS232_RX_STATE_PAD2: /* Rx'd the 2nd padding byte. */
ProbeRS232_RxState = PROBE_RS232_RX_STATE_DATA;
break;
case PROBE_RS232_RX_STATE_DATA: /* Rx'd data. */
ProbeRS232_RxStoINT8U(rx_data);
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
ProbeRS232_RxChkSum += rx_data;
#endif
if (--ProbeRS232_RxRemainLen == 0) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_CHKSUM;
}
break;
case PROBE_RS232_RX_STATE_CHKSUM: /* Rx'd the checksum. */
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
ProbeRS232_RxChkSum += rx_data;
if ((ProbeRS232_RxChkSum & 0xFF) == 0x00) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_ED;
} else {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
}
#else
ProbeRS232_RxState = PROBE_RS232_RX_STATE_ED;
#endif
break;
case PROBE_RS232_RX_STATE_ED: /* Rx'd the end delimiter. */
if (rx_data == PROBE_RS232_PROTOCOL_RX_ED) {
ProbeRS232_RxPkt(); /* Parse rx'd pkt. */
}
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
break;
default:
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
break;
}
}
/*
*********************************************************************************************************
* ProbeRS232_TxHandler()
*
* Description : Handle a byte transmission.
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Caller(s) : Tx ISR.
*
* Note(s) : none.
*********************************************************************************************************
*/
void ProbeRS232_TxHandler (void)
{
CPU_INT08U tx_data;
#if (PROBE_COM_STAT_EN == DEF_ENABLED)
if ((ProbeRS232_TxState != PROBE_RS232_TX_STATE_SD0) ||
(ProbeRS232_TxLen > 0 )) {
ProbeRS232_TxCtr++;
}
#endif
switch (ProbeRS232_TxState) {
case PROBE_RS232_TX_STATE_SD0:
if (ProbeRS232_TxLen > 0) { /* If pkt is waiting to be sent ... */
ProbeRS232_Tx1(PROBE_RS232_PROTOCOL_TX_SD0); /* ... tx start 1st start delimiter (SD0). */
ProbeRS232_TxActiveFlag = DEF_TRUE;
ProbeRS232_TxState = PROBE_RS232_TX_STATE_SD1;
ProbeRS232_TxBufRdIx = 0;
} else { /* If no pkt is waiting to be sent ... */
ProbeRS232_TxActiveFlag = DEF_FALSE;
ProbeRS232_TxIntDis(); /* ... dis tx int's. */
}
break;
case PROBE_RS232_TX_STATE_SD1: /* Tx start 2nd start delimiter (SD1). */
ProbeRS232_Tx1(PROBE_RS232_PROTOCOL_TX_SD1);
ProbeRS232_TxState = PROBE_RS232_TX_STATE_SD2;
break;
case PROBE_RS232_TX_STATE_SD2: /* Tx start 3rd start delimiter (SD2). */
ProbeRS232_Tx1(PROBE_RS232_PROTOCOL_TX_SD2);
ProbeRS232_TxState = PROBE_RS232_TX_STATE_SD3;
break;
case PROBE_RS232_TX_STATE_SD3: /* Tx start 4th start delimiter (SD3). */
ProbeRS232_Tx1(PROBE_RS232_PROTOCOL_TX_SD3);
ProbeRS232_TxState = PROBE_RS232_TX_STATE_LEN1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -