added set
This commit is contained in:
+28
-44
@@ -199,6 +199,7 @@ string BaseLoop::decodeMessage(const string& data)
|
|||||||
string token;
|
string token;
|
||||||
istringstream stream(data);
|
istringstream stream(data);
|
||||||
vector<string> cmd;
|
vector<string> cmd;
|
||||||
|
Message* message;
|
||||||
|
|
||||||
while (getline(stream, token, ' ') != 0)
|
while (getline(stream, token, ' ') != 0)
|
||||||
cmd.push_back(token);
|
cmd.push_back(token);
|
||||||
@@ -217,8 +218,6 @@ 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
|
||||||
@@ -252,16 +251,16 @@ string BaseLoop::decodeMessage(const string& data)
|
|||||||
result << getResultCode(ret);
|
result << getResultCode(ret);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
L.log(bas, trace, " msg: %s", master.getDataStr().c_str());
|
L.log(bas, event, " msg: %s", master.getDataStr().c_str());
|
||||||
|
|
||||||
// send message
|
// send message
|
||||||
SymbolString slave;
|
SymbolString slave;
|
||||||
ret = m_busHandler->sendAndWait(master, slave);
|
ret = m_busHandler->sendAndWait(master, slave);
|
||||||
|
|
||||||
if (ret == RESULT_OK)
|
if (ret == RESULT_OK) {
|
||||||
// decode data
|
// TODO reduce to requested variable only
|
||||||
ret = message->decode(pt_slaveData, slave, result);// TODO reduce to requested variable only
|
ret = message->decode(pt_slaveData, slave, result); // decode data
|
||||||
|
}
|
||||||
if (ret != RESULT_OK) {
|
if (ret != RESULT_OK) {
|
||||||
L.log(bas, error, " %s", getResultCode(ret));
|
L.log(bas, error, " %s", getResultCode(ret));
|
||||||
result << getResultCode(ret);
|
result << getResultCode(ret);
|
||||||
@@ -270,63 +269,48 @@ string BaseLoop::decodeMessage(const string& data)
|
|||||||
} else {
|
} else {
|
||||||
result << "ebus command not found";
|
result << "ebus command not found";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*case ct_set:
|
case ct_set:
|
||||||
if (cmd.size() != 4) {
|
if (cmd.size() != 4) {
|
||||||
result << "usage: 'set class cmd value'";
|
result << "usage: 'set class cmd value'";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
index = m_commands->findCommand(data.substr(0, data.find(cmd[3])-1));
|
message = m_messages->find(cmd[1], cmd[2], true);
|
||||||
|
|
||||||
if (index >= 0) {
|
if (message != NULL) {
|
||||||
|
|
||||||
string busCommand(A.getOptVal<const char*>("address"));
|
SymbolString master;
|
||||||
busCommand += m_commands->getBusCommand(index);
|
istringstream input(cmd[3]);
|
||||||
|
result_t ret = message->prepareMaster(m_ownAddress, master, input);
|
||||||
// encode data
|
if (ret != RESULT_OK) {
|
||||||
Command* command = new Command(index, (*m_commands)[index], cmd[3]);
|
L.log(bas, error, " prepare message: %s", getResultCode(ret));
|
||||||
string value = command->calcData();
|
result << getResultCode(ret);
|
||||||
if (value[0] != '-') {
|
|
||||||
busCommand += value;
|
|
||||||
} else {
|
|
||||||
L.log(bas, error, " %s", value.c_str());
|
|
||||||
delete command;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
L.log(bas, event, " msg: %s", master.getDataStr().c_str());
|
||||||
|
|
||||||
transform(busCommand.begin(), busCommand.end(), busCommand.begin(), ::tolower);
|
|
||||||
|
|
||||||
BusMessage* message = new BusMessage(busCommand, false, false);
|
|
||||||
L.log(bas, event, " msg: %s", busCommand.c_str());
|
|
||||||
// send message
|
// send message
|
||||||
m_busloop->addMessage(message);
|
SymbolString slave;
|
||||||
message->waitSignal();
|
ret = m_busHandler->sendAndWait(master, slave);
|
||||||
|
|
||||||
if (!message->isErrorResult()) {
|
if (ret == RESULT_OK) {
|
||||||
// decode result
|
if (master[1] == BROADCAST || isMaster(master[1]))
|
||||||
if (message->getType()==broadcast)
|
|
||||||
result << "done";
|
|
||||||
else if (message->getMessageStr().substr(message->getMessageStr().length()-8) == "00000000") // TODO use getResult()
|
|
||||||
result << "done";
|
result << "done";
|
||||||
else
|
else
|
||||||
result << "error";
|
ret = message->decode(pt_slaveData, slave, result); // decode data
|
||||||
|
}
|
||||||
} else {
|
if (ret != RESULT_OK) {
|
||||||
L.log(bas, error, " %s", message->getResultCodeCStr());
|
L.log(bas, error, " %s", getResultCode(ret));
|
||||||
result << message->getResultCodeCStr();
|
result << getResultCode(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete message;
|
|
||||||
delete command;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
result << "ebus command not found";
|
result << "ebus command not found";
|
||||||
}
|
}
|
||||||
|
|
||||||
break;*/
|
break;
|
||||||
|
|
||||||
/*case ct_cyc:
|
/*case ct_cyc:
|
||||||
if (cmd.size() < 3 || cmd.size() > 4) {
|
if (cmd.size() < 3 || cmd.size() > 4) {
|
||||||
@@ -369,7 +353,7 @@ string BaseLoop::decodeMessage(const string& data)
|
|||||||
msg << hex << setw(2) << setfill('0') << static_cast<unsigned>(m_ownAddress);
|
msg << hex << setw(2) << setfill('0') << static_cast<unsigned>(m_ownAddress);
|
||||||
msg << cmd[1];
|
msg << cmd[1];
|
||||||
SymbolString master(msg.str());
|
SymbolString master(msg.str());
|
||||||
L.log(bas, trace, " msg: %s", master.getDataStr().c_str());
|
L.log(bas, event, " msg: %s", master.getDataStr().c_str());
|
||||||
|
|
||||||
// send message
|
// send message
|
||||||
SymbolString slave;
|
SymbolString slave;
|
||||||
@@ -377,7 +361,7 @@ string BaseLoop::decodeMessage(const string& data)
|
|||||||
|
|
||||||
if (ret == RESULT_OK)
|
if (ret == RESULT_OK)
|
||||||
// decode data
|
// decode data
|
||||||
result << slave.getDataStr(); // TODO find suitable message?, message->decode(master, slave, result);
|
result << slave.getDataStr();
|
||||||
|
|
||||||
if (ret != RESULT_OK) {
|
if (ret != RESULT_OK) {
|
||||||
L.log(bas, error, " %s", getResultCode(ret));
|
L.log(bas, error, " %s", getResultCode(ret));
|
||||||
|
|||||||
Reference in New Issue
Block a user