long message does not work

This commit is contained in:
hg
2015-05-09 23:15:45 +02:00
parent f9df2439a8
commit 79cc72826c
5 changed files with 67 additions and 49 deletions

View File

@ -169,10 +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;
static int16_t expectedChars = -1;
static uint8_t state = 0;
Serial << "r1" << endl;
if (err) {
Serial << "r1" << endl;
if (m_responseCallback != 0) {
m_responseCallback->sendError(1, m_token);
}
@ -181,8 +184,10 @@ void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
m_expectResponse = false;
m_responseCallback = 0;
} else {
Serial << "r2" << endl;
switch (state) {
case 0:
Serial << "r3" << endl;
m_recvBufLen = 0;
if (in == 0xe5) {
state = 2;
@ -196,22 +201,29 @@ void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
}
break;
case 1:
Serial << "r4" << endl;
expectedChars = (int16_t)in;
expectedChars += 4;
state = 2;
break;
case 2:
Serial << "r5" << endl;
expectedChars--;
break;
}
if (m_recvBufLen >= RECEIVE_BUFFER_SIZE)
if (m_recvBufLen >= RECEIVE_BUFFER_SIZE) {
Serial << "r6, " << m_recvBufLen << ", " << RECEIVE_BUFFER_SIZE << endl;
fatal(FATAL_BUFFER_OVERFLOW + 1);
}
Serial << "r7" << endl;
m_recvBuffer[m_recvBufLen] = in;
m_recvBufLen++;
Serial << "r8" << endl;
if (expectedChars == 0) {
Serial << "r9" << endl;
if (m_responseCallback != 0) {
m_responseCallback->sendResponse(m_recvBuffer, m_recvBufLen, m_token);
}
@ -221,6 +233,8 @@ void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
m_responseCallback = 0;
}
}
Serial << "resp out" << endl;
}
void MeterBusMaster::sample() {
@ -243,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();
@ -269,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);