send buffer handling and token stuff

This commit is contained in:
hg
2015-05-09 20:26:31 +02:00
parent 9c4bf9db30
commit f9df2439a8
7 changed files with 76 additions and 51 deletions

View File

@ -99,12 +99,12 @@ String SendOctets::exec(String params) {
if (err) {
return "error";
} else {
m_meterBusMaster->sendBufferReady(sendBufLen, this);
m_meterBusMaster->sendBufferReady(sendBufLen, 1, this);
return "success";
}
}
void SendOctets::sendResponse(uint8_t *responseBuffer, uint16_t responseBufferLength) {
void SendOctets::sendResponse(uint8_t *responseBuffer, uint16_t responseBufferLength, uint8_t token) {
Print *out = m_server;
out->print("SO RESP: ");
uint16_t i = 0;
@ -122,7 +122,7 @@ void SendOctets::sendResponse(uint8_t *responseBuffer, uint16_t responseBufferLe
out->println("");
}
void SendOctets::sendError(uint8_t code) {
void SendOctets::sendError(uint8_t code, uint8_t token) {
switch (code) {
case 1:
m_server->println("SO RESP: no resp.");
@ -139,8 +139,8 @@ void SendOctets::sendError(uint8_t code) {
MeterBusMaster::MeterBusMaster() : m_sendOctets(this), m_measureCurrent(this),
m_calibrationSupport(this),
m_cmdReadyToSend(false), m_cmdReadyFromRecv(false), m_expectResponse(false),
m_sendBufLen(0), m_recvBufLen(0), m_retransmitCount(0), m_responseCallback(0),
m_sampling(true), m_calibration(false) {
m_sendBufLen(0), m_recvBufLen(0), m_retransmitCount(0), m_token(0),
m_responseCallback(0), m_sampling(true), m_calibration(false) {
pinMode(RX_EN_PIN, OUTPUT);
digitalWrite(RX_EN_PIN, RX_DISABLE);
Serial3.begin(2400);
@ -160,11 +160,12 @@ uint8_t *MeterBusMaster::getSendBuffer() {
return m_expectResponse ? 0 : m_sendBuffer;
}
void MeterBusMaster::sendBufferReady(uint16_t sendBufLen, ResponseCallback *responseCallback) {
void MeterBusMaster::sendBufferReady(uint16_t sendBufLen, uint8_t token, ResponseCallback *responseCallback) {
m_cmdReadyToSend = true;
m_retransmitCount = 0;
m_sendBufLen = sendBufLen;
m_responseCallback = responseCallback;
m_token = token;
}
void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
@ -173,7 +174,7 @@ void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
if (err) {
if (m_responseCallback != 0) {
m_responseCallback->sendError(1);
m_responseCallback->sendError(1, m_token);
}
expectedChars = 0;
state = 0;
@ -212,9 +213,10 @@ void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
if (expectedChars == 0) {
if (m_responseCallback != 0) {
m_responseCallback->sendResponse(m_recvBuffer, m_recvBufLen);
m_responseCallback->sendResponse(m_recvBuffer, m_recvBufLen, m_token);
}
m_expectResponse = false;
m_token = 0;
state = 0;
m_responseCallback = 0;
}