works better now

This commit is contained in:
hg
2015-05-09 23:48:09 +02:00
parent 79cc72826c
commit 424d9d2a6e
3 changed files with 30 additions and 28 deletions

View File

@ -169,13 +169,13 @@ void MeterBusMaster::sendBufferReady(uint16_t sendBufLen, uint8_t token, Respons
}
void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
Serial << "resp in, err: " << err << endl;
//Serial << "resp in, err: " << err << endl;
static int16_t expectedChars = -1;
static uint8_t state = 0;
Serial << "r1" << endl;
//Serial << "r1" << endl;
if (err) {
Serial << "r1" << endl;
//Serial << "r1" << endl;
if (m_responseCallback != 0) {
m_responseCallback->sendError(1, m_token);
}
@ -184,10 +184,10 @@ void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
m_expectResponse = false;
m_responseCallback = 0;
} else {
Serial << "r2" << endl;
//Serial << "r2" << endl;
switch (state) {
case 0:
Serial << "r3" << endl;
//Serial << "r3" << endl;
m_recvBufLen = 0;
if (in == 0xe5) {
state = 2;
@ -201,29 +201,29 @@ void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
}
break;
case 1:
Serial << "r4" << endl;
//Serial << "r4" << endl;
expectedChars = (int16_t)in;
expectedChars += 4;
state = 2;
break;
case 2:
Serial << "r5" << endl;
//Serial << "r5" << endl;
expectedChars--;
break;
}
if (m_recvBufLen >= RECEIVE_BUFFER_SIZE) {
Serial << "r6, " << m_recvBufLen << ", " << RECEIVE_BUFFER_SIZE << endl;
//Serial << "r6, " << m_recvBufLen << ", " << RECEIVE_BUFFER_SIZE << endl;
fatal(FATAL_BUFFER_OVERFLOW + 1);
}
Serial << "r7" << endl;
//Serial << "r7" << endl;
m_recvBuffer[m_recvBufLen] = in;
m_recvBufLen++;
Serial << "r8" << endl;
//Serial << "r8" << endl;
if (expectedChars == 0) {
Serial << "r9" << endl;
//Serial << "r9" << endl;
if (m_responseCallback != 0) {
m_responseCallback->sendResponse(m_recvBuffer, m_recvBufLen, m_token);
}
@ -234,7 +234,7 @@ void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
}
}
Serial << "resp out" << endl;
//Serial << "resp out" << endl;
}
void MeterBusMaster::sample() {
@ -257,7 +257,7 @@ void MeterBusMaster::exec() {
if (m_cmdReadyToSend) {
sample();
Serial << "MeterBusMaster: sending " << m_sendBufLen << " octets." << endl;
//Serial << "MeterBusMaster: sending " << m_sendBufLen << " octets." << endl;
Serial3.write(m_sendBuffer, m_sendBufLen);
Serial3.flush();
hold();
@ -283,7 +283,7 @@ void MeterBusMaster::exec() {
int serialInChar = Serial3.read();
if (serialInChar != -1) {
Serial << "Got: " << _HEX(serialInChar) << endl;
//Serial << "Got: " << _HEX(serialInChar) << endl;
}
if ((serialInChar != -1) && m_expectResponse) {
prepareResponse(false, (uint8_t)serialInChar);