response delay

This commit is contained in:
hg
2014-03-09 21:12:17 +01:00
parent ec6b7c0647
commit 26b47b1159
2 changed files with 18 additions and 1 deletions

View File

@ -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 {

View File

@ -15,6 +15,10 @@
#include "Resources.h"
#include "Thermometer.h"
const unsigned long RESPONSE_DELAY = 50;
class MeterBusClient;