class BusCommand renamed to BusMessage.

This commit is contained in:
Roland Jax
2014-11-19 22:33:59 +01:00
parent 108842b4b5
commit 2fe5b8cdc7
5 changed files with 104 additions and 104 deletions
+41 -41
View File
@@ -145,30 +145,30 @@ std::string BaseLoop::decodeMessage(const std::string& data)
break;
}
std::string ebusCommand(A.getOptVal<const char*>("address"));
ebusCommand += m_commands->getEbusCommand(index);
std::transform(ebusCommand.begin(), ebusCommand.end(), ebusCommand.begin(), tolower);
std::string busCommand(A.getOptVal<const char*>("address"));
busCommand += m_commands->getBusCommand(index);
std::transform(busCommand.begin(), busCommand.end(), busCommand.begin(), tolower);
BusCommand* busCommand = new BusCommand(ebusCommand, false, false);
L.log(bas, trace, " msg: %s", ebusCommand.c_str());
// send busCommand
m_busloop->addBusCommand(busCommand);
busCommand->waitSignal();
BusMessage* message = new BusMessage(busCommand, false, false);
L.log(bas, trace, " msg: %s", busCommand.c_str());
// send message
m_busloop->addBusMessage(message);
message->waitSignal();
if (!busCommand->isErrorResult()) {
if (!message->isErrorResult()) {
// decode data
Command* command = new Command(index, (*m_commands)[index], busCommand->getMessageStr()); // TODO use getCommand()+getResult()
Command* command = new Command(index, (*m_commands)[index], message->getMessageStr()); // TODO use getCommand()+getResult()
// return result
result << command->calcResult(cmd);
delete command;
} else {
L.log(bas, error, " %s", busCommand->getResultCodeCStr());
result << busCommand->getResultCodeCStr();
L.log(bas, error, " %s", message->getResultCodeCStr());
result << message->getResultCodeCStr();
}
delete busCommand;
delete message;
} else {
result << "ebus command not found";
@@ -186,43 +186,43 @@ std::string BaseLoop::decodeMessage(const std::string& data)
if (index >= 0) {
std::string ebusCommand(A.getOptVal<const char*>("address"));
ebusCommand += m_commands->getEbusCommand(index);
std::string busCommand(A.getOptVal<const char*>("address"));
busCommand += m_commands->getBusCommand(index);
// encode data
Command* command = new Command(index, (*m_commands)[index], cmd[3]);
std::string value = command->calcData();
if (value[0] != '-') {
ebusCommand += value;
busCommand += value;
} else {
L.log(bas, error, " %s", value.c_str());
delete command;
break;
}
std::transform(ebusCommand.begin(), ebusCommand.end(), ebusCommand.begin(), tolower);
std::transform(busCommand.begin(), busCommand.end(), busCommand.begin(), tolower);
BusCommand* busCommand = new BusCommand(ebusCommand, false, false);
L.log(bas, event, " msg: %s", ebusCommand.c_str());
// send busCommand
m_busloop->addBusCommand(busCommand);
busCommand->waitSignal();
BusMessage* message = new BusMessage(busCommand, false, false);
L.log(bas, event, " msg: %s", busCommand.c_str());
// send message
m_busloop->addBusMessage(message);
message->waitSignal();
if (!busCommand->isErrorResult()) {
if (!message->isErrorResult()) {
// decode result
if (busCommand->getType()==broadcast)
if (message->getType()==broadcast)
result << "done";
else if (busCommand->getMessageStr().substr(busCommand->getMessageStr().length()-8) == "00000000") // TODO use getResult()
else if (message->getMessageStr().substr(message->getMessageStr().length()-8) == "00000000") // TODO use getResult()
result << "done";
else
result << "error";
} else {
L.log(bas, error, " %s", busCommand->getResultCodeCStr());
result << busCommand->getResultCodeCStr();
L.log(bas, error, " %s", message->getResultCodeCStr());
result << message->getResultCodeCStr();
}
delete busCommand;
delete message;
delete command;
} else {
@@ -266,25 +266,25 @@ std::string BaseLoop::decodeMessage(const std::string& data)
}
{
std::string ebusCommand(A.getOptVal<const char*>("address"));
std::string busCommand(A.getOptVal<const char*>("address"));
cmd[1].erase(std::remove_if(cmd[1].begin(), cmd[1].end(), isspace), cmd[1].end());
ebusCommand += cmd[1];
std::transform(ebusCommand.begin(), ebusCommand.end(), ebusCommand.begin(), tolower);
busCommand += cmd[1];
std::transform(busCommand.begin(), busCommand.end(), busCommand.begin(), tolower);
BusCommand* busCommand = new BusCommand(ebusCommand, false, false);
L.log(bas, trace, " msg: %s", ebusCommand.c_str());
// send busCommand
m_busloop->addBusCommand(busCommand);
busCommand->waitSignal();
BusMessage* message = new BusMessage(busCommand, false, false);
L.log(bas, trace, " msg: %s", busCommand.c_str());
// send message
m_busloop->addBusMessage(message);
message->waitSignal();
if (busCommand->isErrorResult()) {
L.log(bas, error, " %s", busCommand->getResultCodeCStr());
result << busCommand->getResultCodeCStr();
if (message->isErrorResult()) {
L.log(bas, error, " %s", message->getResultCodeCStr());
result << message->getResultCodeCStr();
} else {
result << busCommand->getMessageStr(); // TODO use getCommand()+getResult()
result << message->getMessageStr(); // TODO use getCommand()+getResult()
}
delete busCommand;
delete message;
}
break;
+48 -48
View File
@@ -25,8 +25,8 @@
extern Logger& L;
extern Appl& A;
BusCommand::BusCommand(const std::string commandStr, const bool poll, const bool scan)
: m_poll(poll), m_scan(scan), m_command(commandStr), m_result(), m_resultCode(RESULT_OK)
BusMessage::BusMessage(const std::string command, const bool poll, const bool scan)
: m_poll(poll), m_scan(scan), m_command(command), m_result(), m_resultCode(RESULT_OK)
{
unsigned char dstAddress = m_command[1];
@@ -41,13 +41,13 @@ BusCommand::BusCommand(const std::string commandStr, const bool poll, const bool
pthread_cond_init(&m_cond, NULL);
}
BusCommand::~BusCommand()
BusMessage::~BusMessage()
{
pthread_mutex_destroy(&m_mutex);
pthread_cond_destroy(&m_cond);
}
const std::string BusCommand::getMessageStr()
const std::string BusMessage::getMessageStr()
{
std::string result;
@@ -126,9 +126,9 @@ void* BusLoop::run()
// add new polling command to send
if (pollDelta >= m_pollInterval) {
if (m_scan == true)
addScanCommand();
addScanMessage();
else
addPollCommand();
addPollMessage();
time(&pollStart);
}
@@ -146,43 +146,43 @@ void* BusLoop::run()
collectCycData(numBytes);
// send command
if (m_sstr.size() == 0 && m_lockCounter == 0 && m_sendBuffer.size() > 0) {
if (m_sstr.size() == 0 && m_lockCounter == 0 && m_busQueue.size() > 0) {
// acquire Bus
int busResult = acquireBus();
// send bus command
if (busResult == RESULT_BUS_ACQUIRED) {
BusCommand* busCommand = sendCommand();
L.log(bus, trace, " %s", busCommand->getMessageStr().c_str());
BusMessage* message = sendCommand();
L.log(bus, trace, " %s", message->getMessageStr().c_str());
if (busCommand->isErrorResult() == true) {
if (message->isErrorResult() == true) {
if (sendRetries < m_sendRetries) {
sendRetries++;
L.log(bus, trace, " send retry %d", sendRetries);
busCommand->setResult(std::string(), RESULT_OK);
message->setResult(std::string(), RESULT_OK);
}
else {
sendRetries = 0;
L.log(bus, event, " send retry failed", sendRetries);
if (busCommand->isPoll() == true)
delete m_sendBuffer.remove();
if (message->isPoll() == true)
delete m_busQueue.remove();
else
busCommand->sendSignal();
message->sendSignal();
}
}
else {
sendRetries = 0;
if (busCommand->isPoll() == true) {
if (busCommand->isScan() == true)
m_commands->storeScanData(busCommand->getMessageStr().c_str());
if (message->isPoll() == true) {
if (message->isScan() == true)
m_commands->storeScanData(message->getMessageStr().c_str());
else
m_commands->storePollData(busCommand->getMessageStr().c_str()); // TODO use getResult()
delete busCommand;
m_commands->storePollData(message->getMessageStr().c_str()); // TODO use getResult()
delete message;
}
else
busCommand->sendSignal();
message->sendSignal();
}
lockRetries = 0;
@@ -195,11 +195,11 @@ void* BusLoop::run()
lockRetries = 0;
L.log(bus, event, " lock bus failed");
BusCommand* busCommand = m_sendBuffer.remove();
if (busCommand->isPoll() == true)
delete busCommand;
BusMessage* message = m_busQueue.remove();
if (message->isPoll() == true)
delete message;
else
busCommand->sendSignal();
message->sendSignal();
}
else {
lockRetries++;
@@ -319,7 +319,7 @@ void BusLoop::analyseCycData()
skipfirst = true;
}
void BusLoop::addPollCommand()
void BusLoop::addPollMessage()
{
int index = m_commands->nextPollCommand();
if (index < 0) {
@@ -333,14 +333,14 @@ void BusLoop::addPollCommand()
tmp += (*m_commands)[index][2];
L.log(bus, event, " polling [%4d] %s", index, tmp.c_str());
std::string ebusCommand(A.getOptVal<const char*>("address"));
ebusCommand += m_commands->getEbusCommand(index);
std::transform(ebusCommand.begin(), ebusCommand.end(), ebusCommand.begin(), tolower);
std::string busCommand(A.getOptVal<const char*>("address"));
busCommand += m_commands->getBusCommand(index);
std::transform(busCommand.begin(), busCommand.end(), busCommand.begin(), tolower);
BusCommand* busCommand = new BusCommand(ebusCommand, true, false);
L.log(bus, trace, " msg: %s", ebusCommand.c_str());
BusMessage* message = new BusMessage(busCommand, true, false);
L.log(bus, trace, " msg: %s", busCommand.c_str());
addBusCommand(busCommand);
addBusMessage(message);
}
}
@@ -349,7 +349,7 @@ int BusLoop::acquireBus()
unsigned char recvByte, sendByte;
ssize_t numRecv, numSend;
sendByte = m_sendBuffer.next()->getCommand()[0];
sendByte = m_busQueue.next()->getCommand()[0];
// send QQ
numSend = m_port->send(&sendByte);
@@ -401,17 +401,17 @@ int BusLoop::acquireBus()
return RESULT_ERR_EXTRA_DATA;
}
BusCommand* BusLoop::sendCommand()
BusMessage* BusLoop::sendCommand()
{
unsigned char recvByte;
std::string result;
SymbolString slaveData;
int retval = RESULT_OK;
BusCommand* busCommand = m_sendBuffer.next();
BusMessage* message = m_busQueue.next();
// send ZZ PB SB NN Dx CRC
SymbolString command = busCommand->getCommand();
SymbolString command = message->getCommand();
for (size_t i = 1; i < command.size(); i++) {
retval = sendByte(command[i]);
if (retval < 0)
@@ -419,7 +419,7 @@ BusCommand* BusLoop::sendCommand()
}
// BC -> send SYN
if (busCommand->getType() == broadcast) {
if (message->getType() == broadcast) {
sendByte(SYN);
goto on_exit;
}
@@ -454,7 +454,7 @@ BusCommand* BusLoop::sendCommand()
}
// MM -> send SYN
if (busCommand->getType() == masterMaster) {
if (message->getType() == masterMaster) {
sendByte(SYN);
goto on_exit;
}
@@ -504,12 +504,12 @@ on_exit:
while (m_port->size() != 0)
recvByte = fetchByte();
busCommand->setResult(slaveData, retval);
message->setResult(slaveData, retval);
if (retval == RESULT_OK)
return m_sendBuffer.remove();
return m_busQueue.remove();
else
return busCommand;
return message;
}
@@ -637,9 +637,9 @@ void BusLoop::collectSlave()
}
}
void BusLoop::addScanCommand()
void BusLoop::addScanMessage()
{
std::string ebusCommand(A.getOptVal<const char*>("address"));
std::string busCommand(A.getOptVal<const char*>("address"));
std::stringstream sstr;
if (m_scanFull == true) {
@@ -665,16 +665,16 @@ void BusLoop::addScanCommand()
else {
m_scanIndex++;
ebusCommand += sstr.str();
ebusCommand += "070400";
std::transform(ebusCommand.begin(), ebusCommand.end(), ebusCommand.begin(), tolower);
busCommand += sstr.str();
busCommand += "070400";
std::transform(busCommand.begin(), busCommand.end(), busCommand.begin(), tolower);
L.log(bus, event, " scanning address %s", sstr.str().c_str());
BusCommand* busCommand = new BusCommand(ebusCommand, true, true);
L.log(bus, trace, " msg: %s", ebusCommand.c_str());
BusMessage* message = new BusMessage(busCommand, true, true);
L.log(bus, trace, " msg: %s", busCommand.c_str());
addBusCommand(busCommand);
addBusMessage(message);
}
}
+11 -11
View File
@@ -31,16 +31,16 @@
/** the maximum time [us] allowed for retrieving a byte from an addressed slave */
#define RECV_TIMEOUT 10000
enum CommandType { invalid, broadcast, masterMaster, masterSlave };
enum MessageType { invalid, broadcast, masterMaster, masterSlave };
class BusCommand
class BusMessage
{
public:
BusCommand(const std::string command, const bool poll, const bool scan);
~BusCommand();
BusMessage(const std::string command, const bool poll, const bool scan);
~BusMessage();
CommandType getType() const { return m_type; }
MessageType getType() const { return m_type; }
bool isPoll() const { return m_poll; }
bool isScan() const { return m_scan; }
@@ -58,7 +58,7 @@ public:
void sendSignal() { pthread_cond_signal(&m_cond); }
private:
CommandType m_type;
MessageType m_type;
bool m_poll;
bool m_scan;
SymbolString m_command;
@@ -80,7 +80,7 @@ public:
void* run();
void stop() { m_stop = true; }
void addBusCommand(BusCommand* busCommand) { m_sendBuffer.add(busCommand); }
void addBusMessage(BusMessage* message) { m_busQueue.add(message); }
void dump() { m_dumpState == true ? m_dumpState = false : m_dumpState = true ; }
void raw() { m_logRawData == true ? m_logRawData = false : m_logRawData = true ; }
@@ -103,7 +103,7 @@ private:
int m_lockCounter;
bool m_priorRetry;
WQueue<BusCommand*> m_sendBuffer;
WQueue<BusMessage*> m_busQueue;
SymbolString m_sstr;
double m_pollInterval;
@@ -121,14 +121,14 @@ private:
unsigned char fetchByte();
void collectCycData(const int numRecv);
void analyseCycData();
void addPollCommand();
void addPollMessage();
int acquireBus();
BusCommand* sendCommand();
BusMessage* sendCommand();
int sendByte(const unsigned char sendByte);
int recvSlaveAck(unsigned char& recvByte);
int recvSlaveData(SymbolString& result);
void collectSlave();
void addScanCommand();
void addScanMessage();
};
+3 -3
View File
@@ -123,7 +123,7 @@ int Commands::findCommand(const std::string& data) const
return -1;
}
std::string Commands::getEbusCommand(const int index) const
std::string Commands::getBusCommand(const int index) const
{
cmd_t command = m_cmdDB.at(index);
std::string cmd;
@@ -159,7 +159,7 @@ int Commands::storeCycData(const std::string& data) const
// walk through commands
for (; iter != m_cycDB.end(); iter++) {
std::string command = getEbusCommand(iter->first);
std::string command = getBusCommand(iter->first);
// skip wrong search string length
if (command.length() > search.length())
@@ -212,7 +212,7 @@ void Commands::storePollData(const std::string& data) const
// walk through commands
for (; iter != m_pollDB.end(); iter++) {
std::string command = getEbusCommand(iter->first);
std::string command = getBusCommand(iter->first);
// skip wrong search string length
if (command.length() > search.length())
+1 -1
View File
@@ -52,7 +52,7 @@ public:
int findCommand(const std::string& data) const;
std::string getCmdType(const int index) const { return std::string(m_cmdDB.at(index)[0]); }
std::string getEbusCommand(const int index) const;
std::string getBusCommand(const int index) const;
int storeCycData(const std::string& data) const;
std::string getCycData(int index) const;