diff --git a/src/ebusd/Makefile.am b/src/ebusd/Makefile.am index e05c74d1..b99b0495 100644 --- a/src/ebusd/Makefile.am +++ b/src/ebusd/Makefile.am @@ -6,9 +6,7 @@ AM_CXXFLAGS = -fpic \ bin_PROGRAMS = ebusd -ebusd_SOURCES = dump.cpp \ - dump.h \ - busloop.cpp \ +ebusd_SOURCES = busloop.cpp \ busloop.h \ network.cpp \ network.h \ diff --git a/src/ebusd/busloop.cpp b/src/ebusd/busloop.cpp index e7870858..ddba6485 100644 --- a/src/ebusd/busloop.cpp +++ b/src/ebusd/busloop.cpp @@ -20,6 +20,7 @@ #include "busloop.h" #include "logger.h" #include "appl.h" +#include #include extern Logger& L; @@ -78,8 +79,9 @@ BusLoop::BusLoop(Commands* commands) if (m_port->isOpen() == false) L.log(bus, error, "can't open %s", A.getOptVal("device")); - m_dump = new Dump(A.getOptVal("dumpfile"), A.getOptVal("dumpsize")); - m_dumpState = A.getOptVal("dump"); + m_dumpFile = A.getOptVal("dumpfile"); + m_dumpSize = A.getOptVal("dumpsize"); + m_dumping = A.getOptVal("dump"); m_logRawData = A.getOptVal("lograwdata"); @@ -100,7 +102,6 @@ BusLoop::~BusLoop() m_port->close(); delete m_port; - delete m_dump; } void* BusLoop::run() @@ -234,6 +235,29 @@ void* BusLoop::run() return NULL; } +int BusLoop::writeDumpFile(const char* byte) +{ + int ret = 0; + + std::ofstream fs(m_dumpFile.c_str(), std::ios::out | std::ios::binary | std::ios::app); + + if (fs == 0) + return -1; + + fs.write(byte, 1); + + if (fs.tellp() >= m_dumpSize * 1024) { + std::string oldfile; + oldfile += m_dumpFile; + oldfile += ".old"; + ret = rename(m_dumpFile.c_str(), oldfile.c_str()); + } + + fs.close(); + + return ret; +} + unsigned char BusLoop::fetchByte() { unsigned char byte; @@ -241,8 +265,8 @@ unsigned char BusLoop::fetchByte() // fetch byte byte = m_port->byte(); - if (m_dumpState == true) - m_dump->write((const char*) &byte); + if (m_dumping == true) + writeDumpFile((const char*) &byte); if (m_logRawData == true) L.log(bus, event, "%02x", byte); diff --git a/src/ebusd/busloop.h b/src/ebusd/busloop.h index be0f6e04..d03bc06a 100644 --- a/src/ebusd/busloop.h +++ b/src/ebusd/busloop.h @@ -22,7 +22,6 @@ #include "commands.h" #include "port.h" -#include "dump.h" #include "wqueue.h" #include "thread.h" #include "symbol.h" @@ -31,7 +30,7 @@ /** the maximum time [us] allowed for retrieving a byte from an addressed slave */ #define RECV_TIMEOUT 10000 -enum MessageType { invalid, broadcast, masterMaster, masterSlave }; +enum CommandType { invalid, broadcast, masterMaster, masterSlave }; class BusMessage { @@ -40,7 +39,7 @@ public: BusMessage(const std::string command, const bool poll, const bool scan); ~BusMessage(); - MessageType getType() const { return m_type; } + CommandType getType() const { return m_type; } bool isPoll() const { return m_poll; } bool isScan() const { return m_scan; } @@ -58,7 +57,7 @@ public: void sendSignal() { pthread_cond_signal(&m_cond); } private: - MessageType m_type; + CommandType m_type; bool m_poll; bool m_scan; SymbolString m_command; @@ -82,19 +81,37 @@ public: void addMessage(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 ; } - void reload(Commands* commands) { m_commands = commands; } void scan(const bool full=false) { m_scan = true; m_scanFull = full; m_scanIndex = 0; } + void raw() { m_logRawData == true ? m_logRawData = false : m_logRawData = true ; } + + /** + * @brief set the name of dump file. + * @param name the file name of dump file. + */ + void setDumpFile(const std::string& dumpFile) { m_dumpFile = dumpFile; } + + /** + * @brief set the max size of dump file. + * @param size the max. size of the dump file, before switching. + */ + void setDumpSize(const long dumpSize) { m_dumpSize = dumpSize; } + + void dump() { m_dumping == true ? m_dumping = false : m_dumping = true ; } + private: Commands* m_commands; Port* m_port; - Dump* m_dump; - bool m_dumpState; + /** the name of dump file*/ + std::string m_dumpFile; + + /** max. size of dump file */ + long m_dumpSize; + + bool m_dumping; bool m_logRawData; @@ -118,6 +135,13 @@ private: bool m_scanFull; size_t m_scanIndex; + /** + * @brief write byte to dump file. + * @param byte to write + * @return -1 if dump file cannot opened or renaming of dump file failed. + */ + int writeDumpFile(const char* byte); + unsigned char fetchByte(); void collectCycData(const int numRecv); void analyseCycData(); diff --git a/src/ebusd/dump.cpp b/src/ebusd/dump.cpp deleted file mode 100644 index 5219c709..00000000 --- a/src/ebusd/dump.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) Roland Jax 2012-2014 - * - * This file is part of ebusd. - * - * ebusd is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ebusd is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with ebusd. If not, see http://www.gnu.org/licenses/. - */ - -#include "dump.h" -#include -#include - -int Dump::write(const char* byte) -{ - int ret = 0; - - std::ofstream fs(m_name.c_str(), std::ios::out | std::ios::binary | std::ios::app); - - if (fs == 0) - return -1; - - fs.write(byte, 1); - - if (fs.tellp() >= m_size * 1024) { - std::string oldfile; - oldfile += m_name; - oldfile += ".old"; - ret = rename(m_name.c_str(), oldfile.c_str()); - } - - fs.close(); - - return ret; -} - diff --git a/src/ebusd/dump.h b/src/ebusd/dump.h deleted file mode 100644 index 812b9002..00000000 --- a/src/ebusd/dump.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) Roland Jax 2012-2014 - * - * This file is part of ebusd. - * - * ebusd is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ebusd is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with ebusd. If not, see http://www.gnu.org/licenses/. - */ - -#ifndef DUMP_H_ -#define DUMP_H_ - -#include - -/** - * @brief class for writing raw bytes to binary file. - */ -class Dump -{ - -public: - /** - * @brief create a new instance to write dump files. - * @param name the file name of dump file. - * @param size the max. size of the dump file, before switching. - */ - Dump(std::string name, long size) - : m_name(name), m_size(size) {} - - /** - * @brief write byte to dump file. - * @param byte to write - * @return -1 if dump file cannot opened or renaming of dump file failed. - */ - int write(const char* byte); - - /** - * @brief set the name of dump file. - * @param name the file name of dump file. - */ - void setName(const std::string& name) { m_name = name; } - - /** - * @brief set the max size of dump file. - * @param size the max. size of the dump file, before switching. - */ - void setSize(const long size) { m_size = size; } - -private: - /** the name of dump file*/ - std::string m_name; - - /** max. size of dump file */ - long m_size; - -}; - -#endif // DUMP_H_