revert(eth): 回退SendNoDataCnt无应答兜底复位逻辑
ETH为裸ASCII透传, 普通数据上传服务器不回复0x7A帧, SendNoDataCnt只增不清, 连续上传11次误触发ETH_RESET硬件复位, 导致TCP连接被重置, 服务器误判网关掉线。 回退上一版新增的SendNoDataCnt全部代码: - 移除ETH_SEND_NO_DATA_MAX宏和SendNoDataCnt字段 - 移除SEND_DATA中的计数+复位判断 - 移除ETH_RESET/ETH_OFF/接收线程中的清零 保留物理断线清除MuchRegFlag的两处正确修改
This commit is contained in:
@@ -10,7 +10,6 @@
|
|||||||
#define ETH_RECV_TIMEOUT_MAX (10 * 1000)
|
#define ETH_RECV_TIMEOUT_MAX (10 * 1000)
|
||||||
#define ETH_SEND_RETRY_MAX 3
|
#define ETH_SEND_RETRY_MAX 3
|
||||||
#define ETH_FIRST_REG_DELAY (1 * 1000)
|
#define ETH_FIRST_REG_DELAY (1 * 1000)
|
||||||
#define ETH_SEND_NO_DATA_MAX 10
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ETH_IDEL,
|
ETH_IDEL,
|
||||||
@@ -29,7 +28,6 @@ typedef struct {
|
|||||||
uint32_t LinkWaitCnt;
|
uint32_t LinkWaitCnt;
|
||||||
uint32_t RecvTimeoutCnt;
|
uint32_t RecvTimeoutCnt;
|
||||||
uint8_t SendRetryCnt;
|
uint8_t SendRetryCnt;
|
||||||
uint8_t SendNoDataCnt;
|
|
||||||
bool FirstRegFlag;
|
bool FirstRegFlag;
|
||||||
|
|
||||||
GateWayPara GateWay;
|
GateWayPara GateWay;
|
||||||
|
|||||||
@@ -93,7 +93,6 @@ void EthLoopHandler(void)
|
|||||||
|
|
||||||
case ETH_RESET:
|
case ETH_RESET:
|
||||||
ETH_DBG_LOG("ETH Reset!\r\n");
|
ETH_DBG_LOG("ETH Reset!\r\n");
|
||||||
Eth.SendNoDataCnt = 0;
|
|
||||||
ETH_RESET_CLR();
|
ETH_RESET_CLR();
|
||||||
rt_thread_delay(10);
|
rt_thread_delay(10);
|
||||||
ETH_RESET_SET();
|
ETH_RESET_SET();
|
||||||
@@ -176,16 +175,6 @@ void EthLoopHandler(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ETH_SEND_DATA:
|
case ETH_SEND_DATA:
|
||||||
if(Eth.GateWay->ConfigPara.Much == CH_ETH) {
|
|
||||||
Eth.SendNoDataCnt++;
|
|
||||||
if(Eth.SendNoDataCnt > ETH_SEND_NO_DATA_MAX) {
|
|
||||||
ETH_DBG_LOG("ETH has no receive data for a long time, Reset!\r\n");
|
|
||||||
Eth.SendNoDataCnt = 0;
|
|
||||||
Eth.GateWay->MuchRegFlag = false;
|
|
||||||
Eth.Status = ETH_RESET;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
HexToAscii(Eth.TxBuff, CommUnitSendASCII, Eth.TxLen);
|
HexToAscii(Eth.TxBuff, CommUnitSendASCII, Eth.TxLen);
|
||||||
EthRevTimeOutCnt = 0;
|
EthRevTimeOutCnt = 0;
|
||||||
EthUartSend((uint8_t *)CommUnitSendASCII, Eth.TxLen * 2);
|
EthUartSend((uint8_t *)CommUnitSendASCII, Eth.TxLen * 2);
|
||||||
@@ -239,7 +228,6 @@ void EthLoopHandler(void)
|
|||||||
|
|
||||||
case ETH_OFF:
|
case ETH_OFF:
|
||||||
ETH_DBG_LOG("ETH Power Off!\r\n");
|
ETH_DBG_LOG("ETH Power Off!\r\n");
|
||||||
Eth.SendNoDataCnt = 0;
|
|
||||||
Eth.Status = ETH_IDEL;
|
Eth.Status = ETH_IDEL;
|
||||||
Eth.ResetDelayCnt = ETH_RESET_DELAY_TIME_MAX;
|
Eth.ResetDelayCnt = ETH_RESET_DELAY_TIME_MAX;
|
||||||
break;
|
break;
|
||||||
@@ -299,7 +287,6 @@ static void EthRev_Thread_Entry(void *parameter)
|
|||||||
memset(HexData, 0x00, EthRxLen / 2);
|
memset(HexData, 0x00, EthRxLen / 2);
|
||||||
uint8_t ret = AsciiToHex(RxBuffTemp, HexData, EthRxLen);
|
uint8_t ret = AsciiToHex(RxBuffTemp, HexData, EthRxLen);
|
||||||
if(ret > 0 && HexData[0] == 0x7A) {
|
if(ret > 0 && HexData[0] == 0x7A) {
|
||||||
Eth.SendNoDataCnt = 0;
|
|
||||||
if(GateWay->ConfigPara.Much == CH_ETH)
|
if(GateWay->ConfigPara.Much == CH_ETH)
|
||||||
GateWay->MuchRevCallBack(GateWay, HexData, ret);
|
GateWay->MuchRevCallBack(GateWay, HexData, ret);
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user