long message does not work
This commit is contained in:
@ -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);
|
||||
|
Reference in New Issue
Block a user