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_SEND_RETRY_MAX 3
|
||||
#define ETH_FIRST_REG_DELAY (1 * 1000)
|
||||
#define ETH_SEND_NO_DATA_MAX 10
|
||||
|
||||
typedef enum {
|
||||
ETH_IDEL,
|
||||
@@ -29,7 +28,6 @@ typedef struct {
|
||||
uint32_t LinkWaitCnt;
|
||||
uint32_t RecvTimeoutCnt;
|
||||
uint8_t SendRetryCnt;
|
||||
uint8_t SendNoDataCnt;
|
||||
bool FirstRegFlag;
|
||||
|
||||
GateWayPara GateWay;
|
||||
|
||||
@@ -93,7 +93,6 @@ void EthLoopHandler(void)
|
||||
|
||||
case ETH_RESET:
|
||||
ETH_DBG_LOG("ETH Reset!\r\n");
|
||||
Eth.SendNoDataCnt = 0;
|
||||
ETH_RESET_CLR();
|
||||
rt_thread_delay(10);
|
||||
ETH_RESET_SET();
|
||||
@@ -176,16 +175,6 @@ void EthLoopHandler(void)
|
||||
break;
|
||||
|
||||
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);
|
||||
EthRevTimeOutCnt = 0;
|
||||
EthUartSend((uint8_t *)CommUnitSendASCII, Eth.TxLen * 2);
|
||||
@@ -239,7 +228,6 @@ void EthLoopHandler(void)
|
||||
|
||||
case ETH_OFF:
|
||||
ETH_DBG_LOG("ETH Power Off!\r\n");
|
||||
Eth.SendNoDataCnt = 0;
|
||||
Eth.Status = ETH_IDEL;
|
||||
Eth.ResetDelayCnt = ETH_RESET_DELAY_TIME_MAX;
|
||||
break;
|
||||
@@ -299,7 +287,6 @@ static void EthRev_Thread_Entry(void *parameter)
|
||||
memset(HexData, 0x00, EthRxLen / 2);
|
||||
uint8_t ret = AsciiToHex(RxBuffTemp, HexData, EthRxLen);
|
||||
if(ret > 0 && HexData[0] == 0x7A) {
|
||||
Eth.SendNoDataCnt = 0;
|
||||
if(GateWay->ConfigPara.Much == CH_ETH)
|
||||
GateWay->MuchRevCallBack(GateWay, HexData, ret);
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user