response delay
This commit is contained in:
@ -187,7 +187,8 @@ void MeterBusClient::handleFrame() {
|
||||
|
||||
|
||||
typedef enum {
|
||||
STATE_START, STATE_IDLE, STATE_SHORT_FRAME, STATE_LONG_CTRL_FRAME, STATE_HANDLE, STATE_INVALID, STATE_DONE
|
||||
STATE_START, STATE_IDLE, STATE_SHORT_FRAME, STATE_LONG_CTRL_FRAME, STATE_HANDLE, STATE_INVALID, STATE_DONE,
|
||||
STATE_DELAYED_HANDLE, STATE_DELAY
|
||||
} e_meterBusClientState;
|
||||
|
||||
typedef enum {
|
||||
@ -200,6 +201,7 @@ void MeterBusClient::exec() {
|
||||
static e_meterBusClientState state = STATE_IDLE;
|
||||
static e_meterBusClientSubState subState = SUBSTATE_LENGTH;
|
||||
static unsigned char userDataCnt = 0;
|
||||
static unsigned long receivedDoneTimestamp;
|
||||
|
||||
int chi = Serial3.read();
|
||||
char ch = (char) chi;
|
||||
@ -315,6 +317,17 @@ void MeterBusClient::exec() {
|
||||
break;
|
||||
|
||||
case STATE_HANDLE:
|
||||
state = STATE_DELAY;
|
||||
receivedDoneTimestamp = millis();
|
||||
break;
|
||||
|
||||
case STATE_DELAY:
|
||||
if ((receivedDoneTimestamp + RESPONSE_DELAY) < millis()) {
|
||||
state = STATE_DELAYED_HANDLE;
|
||||
}
|
||||
break;
|
||||
|
||||
case STATE_DELAYED_HANDLE:
|
||||
if (m_frame.valid) {
|
||||
handleFrame();
|
||||
} else {
|
||||
|
@ -15,6 +15,10 @@
|
||||
#include "Resources.h"
|
||||
#include "Thermometer.h"
|
||||
|
||||
|
||||
const unsigned long RESPONSE_DELAY = 50;
|
||||
|
||||
|
||||
class MeterBusClient;
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user