send buffer handling and token stuff
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user