started implementing get&hex

This commit is contained in:
john30
2014-12-03 23:03:20 +01:00
parent 09b2d969be
commit 8b9d935cbf
2 changed files with 69 additions and 63 deletions
+42 -39
View File
@@ -21,6 +21,7 @@
#include "logger.h" #include "logger.h"
#include "appl.h" #include "appl.h"
#include <dirent.h> #include <dirent.h>
#include <iomanip>
using namespace std; using namespace std;
@@ -50,6 +51,9 @@ BaseLoop::BaseLoop()
L.log(bas, event, " cycle DB: %d ", m_commands->sizeCycDB()); L.log(bas, event, " cycle DB: %d ", m_commands->sizeCycDB());
L.log(bas, event, " polling DB: %d ", m_commands->sizePollDB());*/ L.log(bas, event, " polling DB: %d ", m_commands->sizePollDB());*/
m_ownAddress = A.getOptVal<int>("address") & 0xff;
bool answer = A.getOptVal<bool>("answer");
const bool logRaw = A.getOptVal<bool>("lograwdata"); const bool logRaw = A.getOptVal<bool>("lograwdata");
const bool dumpRaw = A.getOptVal<bool>("dump"); const bool dumpRaw = A.getOptVal<bool>("dump");
@@ -64,7 +68,7 @@ BaseLoop::BaseLoop()
L.log(bus, error, "can't open %s", A.getOptVal<const char*>("device")); L.log(bus, error, "can't open %s", A.getOptVal<const char*>("device"));
// create BusHandler // create BusHandler
m_busHandler = new BusHandler(m_port, m_messages, SYN, SYN); // TODO m_busHandler = new BusHandler(m_port, m_messages, answer ? m_ownAddress : SYN, answer ? (m_ownAddress+5)&0xff : SYN);
m_busHandler->start("bushandler"); m_busHandler->start("bushandler");
// create network // create network
@@ -172,7 +176,6 @@ string BaseLoop::decodeMessage(const string& data)
{ {
ostringstream result; ostringstream result;
string cycdata, polldata; string cycdata, polldata;
Message* message;
// prepare data // prepare data
string token; string token;
@@ -196,6 +199,8 @@ string BaseLoop::decodeMessage(const string& data)
break; break;
} }
{
Message* message;
if (cmd.size() == 2) if (cmd.size() == 2)
message = m_messages->find("", cmd[1], false); message = m_messages->find("", cmd[1], false);
else else
@@ -221,35 +226,30 @@ string BaseLoop::decodeMessage(const string& data)
break; break;
}*/ }*/
/*string busCommand(A.getOptVal<const char*>("address")); SymbolString master;
busCommand += m_commands->getBusCommand(index); istringstream input;
transform(busCommand.begin(), busCommand.end(), busCommand.begin(), ::tolower); message->prepareMaster(m_ownAddress, master, input);
m_busHandler-> L.log(bas, trace, " msg: %s", master.getDataStr().c_str());
BusMessage* message = new BusMessage(busCommand, false, false);
L.log(bas, trace, " msg: %s", busCommand.c_str());
// send message // send message
m_busloop->addMessage(message); SymbolString slave;
message->waitSignal(); result_t ret = m_busHandler->sendAndWait(master, slave);
if (!message->isErrorResult()) { if (ret == RESULT_OK)
// decode data // decode data
Command* command = new Command(index, (*m_commands)[index], message->getMessageStr()); // TODO use getCommand()+getResult() ret = message->decode(master, slave, result);
// return result if (ret != RESULT_OK) {
result << command->calcResult(cmd); L.log(bas, error, " %s", getResultCode(ret));
result << getResultCode(ret);
delete command;
} else {
L.log(bas, error, " %s", message->getResultCodeCStr());
result << message->getResultCodeCStr();
} }
else
delete message;*/ result << result.str(); // TODO reduce to requested variable only
} else { } else {
result << "ebus command not found"; result << "ebus command not found";
} }
}
break; break;
/*case ct_set: /*case ct_set:
@@ -335,35 +335,38 @@ string BaseLoop::decodeMessage(const string& data)
break;*/ break;*/
/*case ct_hex: case ct_hex:
if (cmd.size() != 2) { if (cmd.size() != 2) {
result << "usage: 'hex value' (value: ZZPBSBNNDx)"; result << "usage: 'hex value' (value: ZZPBSBNNDx)";
break; break;
} }
{ {
string busCommand(A.getOptVal<const char*>("address"));
cmd[1].erase(remove_if(cmd[1].begin(), cmd[1].end(), ::isspace), cmd[1].end()); cmd[1].erase(remove_if(cmd[1].begin(), cmd[1].end(), ::isspace), cmd[1].end());
busCommand += cmd[1]; string src;
transform(busCommand.begin(), busCommand.end(), busCommand.begin(), ::tolower); ostringstream msg;
msg << hex << setw(2) << setfill('0') << static_cast<unsigned>(m_ownAddress);
msg << cmd[1];
SymbolString master(cmd[1]);
L.log(bas, trace, " msg: %s", master.getDataStr().c_str());
BusMessage* message = new BusMessage(busCommand, false, false);
L.log(bas, trace, " msg: %s", busCommand.c_str());
// send message // send message
m_busloop->addMessage(message); SymbolString slave;
message->waitSignal(); result_t ret = m_busHandler->sendAndWait(master, slave);
if (message->isErrorResult()) { if (ret == RESULT_OK)
L.log(bas, error, " %s", message->getResultCodeCStr()); // decode data
result << message->getResultCodeCStr(); result << slave.getDataStr(); // TODO find suitable message?, message->decode(master, slave, result);
} else {
result << message->getMessageStr(); // TODO use getCommand()+getResult() if (ret != RESULT_OK) {
L.log(bas, error, " %s", getResultCode(ret));
result << getResultCode(ret);
}
else
result << result.str(); // TODO reduce to requested variable only
} }
delete message; break;
}
break;*/
/*case ct_scan: /*case ct_scan:
if (cmd.size() == 1) { if (cmd.size() == 1) {
+3
View File
@@ -92,6 +92,9 @@ private:
/** the @a MessageMap instance. */ /** the @a MessageMap instance. */
MessageMap* m_messages; MessageMap* m_messages;
/** the own master address for sending on the bus. */
unsigned char m_ownAddress;
/** the @a Port instance. */ /** the @a Port instance. */
Port* m_port; Port* m_port;