class CYCData: findData() added; various cleanup
This commit is contained in:
+1
-1
@@ -91,7 +91,7 @@ std::string BaseLoop::decodeMessage(const std::string& data)
|
|||||||
|
|
||||||
std::string type = m_commands->getType(index);
|
std::string type = m_commands->getType(index);
|
||||||
std::string cmd(A.getParam<const char*>("p_address"));
|
std::string cmd(A.getParam<const char*>("p_address"));
|
||||||
cmd += m_commands->getCommand(index);
|
cmd += m_commands->getEbusCommand(index);
|
||||||
std::transform(cmd.begin(), cmd.end(), cmd.begin(), tolower);
|
std::transform(cmd.begin(), cmd.end(), cmd.begin(), tolower);
|
||||||
|
|
||||||
L.log(bas, trace, " type: %s msg: %s", type.c_str(), cmd.c_str());
|
L.log(bas, trace, " type: %s msg: %s", type.c_str(), cmd.c_str());
|
||||||
|
|||||||
+66
-18
@@ -19,9 +19,23 @@
|
|||||||
|
|
||||||
#include "cycdata.h"
|
#include "cycdata.h"
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
extern LogInstance& L;
|
extern LogInstance& L;
|
||||||
|
|
||||||
|
CYCData::CYCData(EBusLoop* ebusloop, Commands* commands)
|
||||||
|
: m_ebusloop(ebusloop), m_commands(commands), m_stop(false)
|
||||||
|
{
|
||||||
|
for (size_t index = 0; index < commands->size(); index++) {
|
||||||
|
if (strcasecmp((*m_commands)[index][0].c_str(),"cyc") == 0) {
|
||||||
|
Command* cmd = new Command(index, (*m_commands)[index]);
|
||||||
|
m_cycDB.insert(pair_t(index, cmd));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
CYCData::~CYCData()
|
CYCData::~CYCData()
|
||||||
{
|
{
|
||||||
for (mapCI_t iter = m_cycDB.begin(); iter != m_cycDB.end(); ++iter)
|
for (mapCI_t iter = m_cycDB.begin(); iter != m_cycDB.end(); ++iter)
|
||||||
@@ -37,8 +51,8 @@ void* CYCData::run()
|
|||||||
|
|
||||||
if (skipfirst == true) {
|
if (skipfirst == true) {
|
||||||
L.log(cyc, trace, "%s", data.c_str());
|
L.log(cyc, trace, "%s", data.c_str());
|
||||||
|
|
||||||
int index = m_commands->findData(data);
|
int index = findData(data);
|
||||||
|
|
||||||
if (index >= 0) {
|
if (index >= 0) {
|
||||||
std::string tmp;
|
std::string tmp;
|
||||||
@@ -61,22 +75,6 @@ void* CYCData::run()
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CYCData::storeData(int index, std::string data)
|
|
||||||
{
|
|
||||||
mapCI_t iter = m_cycDB.find(index);
|
|
||||||
|
|
||||||
if (iter != m_cycDB.end()) {
|
|
||||||
iter->second->setData(data);
|
|
||||||
L.log(cyc, debug, " [%d] %s -> replaced", index, data.c_str());
|
|
||||||
} else {
|
|
||||||
Command* cmd = new Command(index, (*m_commands)[index], data);
|
|
||||||
m_cycDB.insert(pair_t(index, cmd));
|
|
||||||
L.log(cyc, debug, " [%d] %s -> inserted", index, data.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
L.log(cyc, debug, " cycDB entries: %d", m_cycDB.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string CYCData::getData(int index)
|
std::string CYCData::getData(int index)
|
||||||
{
|
{
|
||||||
mapCI_t iter = m_cycDB.find(index);
|
mapCI_t iter = m_cycDB.find(index);
|
||||||
@@ -86,3 +84,53 @@ std::string CYCData::getData(int index)
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CYCData::findData(const std::string& data) const
|
||||||
|
{
|
||||||
|
// no commands definend
|
||||||
|
if (m_cycDB.size() == 0)
|
||||||
|
return -2;
|
||||||
|
|
||||||
|
// skip to small search string length
|
||||||
|
if (data.length() < 10)
|
||||||
|
return -3;
|
||||||
|
|
||||||
|
// preapre string for searching command
|
||||||
|
std::string search(data.substr(2, 8 + atoi(data.substr(8,2).c_str()) * 2));
|
||||||
|
|
||||||
|
std::size_t index;
|
||||||
|
mapCI_t i = m_cycDB.begin();
|
||||||
|
|
||||||
|
// walk through commands
|
||||||
|
for (index = 0; i != m_cycDB.end(); i++, index++) {
|
||||||
|
cmd_t cmd = i->second->getCommand();
|
||||||
|
// prepare string for defined command
|
||||||
|
std::string command(cmd[5]);
|
||||||
|
command += cmd[6];
|
||||||
|
std::stringstream sstr;
|
||||||
|
sstr << std::setw(2) << std::hex << std::setfill('0') << cmd[7];
|
||||||
|
command += sstr.str();
|
||||||
|
command += cmd[8];
|
||||||
|
|
||||||
|
// skip wrong search string length
|
||||||
|
if (command.length() > search.length())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (strcasecmp(command.c_str(), search.substr(0,command.length()).c_str()) == 0)
|
||||||
|
return i->first;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// command not found
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CYCData::storeData(int index, std::string data)
|
||||||
|
{
|
||||||
|
mapCI_t iter = m_cycDB.find(index);
|
||||||
|
|
||||||
|
if (iter != m_cycDB.end()) {
|
||||||
|
iter->second->setData(data);
|
||||||
|
L.log(cyc, debug, " [%d] data saved", index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -35,8 +35,7 @@ class CYCData : public Thread
|
|||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CYCData(EBusLoop* ebusloop, Commands* commands)
|
CYCData(EBusLoop* ebusloop, Commands* commands);
|
||||||
: m_ebusloop(ebusloop), m_commands(commands), m_stop(false) {}
|
|
||||||
~CYCData();
|
~CYCData();
|
||||||
|
|
||||||
void* run();
|
void* run();
|
||||||
@@ -50,7 +49,9 @@ private:
|
|||||||
map_t m_cycDB;
|
map_t m_cycDB;
|
||||||
bool m_stop;
|
bool m_stop;
|
||||||
|
|
||||||
|
int findData(const std::string& data) const;
|
||||||
void storeData(int index, std::string data);
|
void storeData(int index, std::string data);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CYCDATA_H_
|
#endif // CYCDATA_H_
|
||||||
|
|||||||
+1
-1
@@ -65,7 +65,7 @@ void* EBusLoop::run()
|
|||||||
// new cyc message arrived
|
// new cyc message arrived
|
||||||
if (busResult == 2) {
|
if (busResult == 2) {
|
||||||
std::string data = m_bus->getCycData();
|
std::string data = m_bus->getCycData();
|
||||||
//~ L.log(bus, trace, "%s", data.c_str());
|
L.log(bus, debug, "%s", data.c_str());
|
||||||
m_cycBuffer.add(data);
|
m_cycBuffer.add(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -82,7 +82,7 @@ void define_args()
|
|||||||
A.addItem("p_dump", Appl::Param(false), "D", "dump",
|
A.addItem("p_dump", Appl::Param(false), "D", "dump",
|
||||||
"\tenable dump", Appl::type_bool, Appl::opt_none);
|
"\tenable dump", Appl::type_bool, Appl::opt_none);
|
||||||
|
|
||||||
A.addItem("p_dumpfile", Appl::Param("/tmp/dump_ebusd.bin"), "", "dumpfile",
|
A.addItem("p_dumpfile", Appl::Param("/tmp/dump_ebus.bin"), "", "dumpfile",
|
||||||
"\tdump file name (/tmp/dump_ebusd.bin)", Appl::type_string, Appl::opt_mandatory);
|
"\tdump file name (/tmp/dump_ebusd.bin)", Appl::type_string, Appl::opt_mandatory);
|
||||||
|
|
||||||
A.addItem("p_dumpsize", Appl::Param(100), "", "dumpsize",
|
A.addItem("p_dumpsize", Appl::Param(100), "", "dumpsize",
|
||||||
|
|||||||
@@ -24,8 +24,6 @@ static void* runThread(void* arg)
|
|||||||
return ((Thread *)arg)->run();
|
return ((Thread *)arg)->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
Thread::Thread() : m_threadid(0), m_running(false), m_detached(false) {}
|
|
||||||
|
|
||||||
Thread::~Thread()
|
Thread::~Thread()
|
||||||
{
|
{
|
||||||
if (m_running == true && m_detached == false)
|
if (m_running == true && m_detached == false)
|
||||||
@@ -78,7 +76,3 @@ int Thread::detach()
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_t Thread::self()
|
|
||||||
{
|
|
||||||
return m_threadid;
|
|
||||||
}
|
|
||||||
|
|||||||
+2
-2
@@ -26,13 +26,13 @@ class Thread
|
|||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Thread();
|
Thread() : m_threadid(0), m_running(false), m_detached(false) {}
|
||||||
virtual ~Thread();
|
virtual ~Thread();
|
||||||
|
|
||||||
int start(const char* name);
|
int start(const char* name);
|
||||||
int join();
|
int join();
|
||||||
int detach();
|
int detach();
|
||||||
pthread_t self();
|
pthread_t self() {return m_threadid; }
|
||||||
|
|
||||||
virtual void* run() = 0;
|
virtual void* run() = 0;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user