diff --git a/src/lib/ebus/port.cpp b/src/lib/ebus/port.cpp index abccd666..df169e45 100644 --- a/src/lib/ebus/port.cpp +++ b/src/lib/ebus/port.cpp @@ -281,6 +281,39 @@ Port::Port(const string deviceName, const bool noDeviceCheck, setDumpRaw(dumpRaw); // open fstream if necessary } +ssize_t Port::send(const unsigned char* buffer, size_t nbytes) +{ + ssize_t ret = m_device->sendBytes(buffer, nbytes); + if (ret>0 && m_logRaw == true && m_logRawFunc != NULL) + (*m_logRawFunc)(buffer[0], false); + return ret; +} + +ssize_t Port::recv(const long timeout, size_t maxCount, unsigned char* buffer) +{ + ssize_t ret = m_device->recvBytes(timeout, maxCount, buffer); + if (buffer && ret > 0) { + if (m_logRaw == true && m_logRawFunc != NULL) { + for (size_t pos = 0; pos < ret; pos++) + (*m_logRawFunc)(buffer[pos], true); + } + + if (m_dumpRaw == true && m_dumpRawStream.is_open() == true) { + m_dumpRawStream.write((char*)buffer, ret); + + if (m_dumpRawStream.tellp() >= m_dumpRawMaxSize * 1024) { + string oldfile = m_dumpRawFile + ".old"; + if (rename(m_dumpRawFile.c_str(), oldfile.c_str()) == 0) { + m_dumpRawStream.close(); + m_dumpRawStream.open(m_dumpRawFile.c_str(), ios::out | ios::binary | ios::app); + } + } + } + } + + return ret; +} + unsigned char Port::byte() { unsigned char byte = m_device->getByte(); diff --git a/src/lib/ebus/port.h b/src/lib/ebus/port.h index abd2d55d..8d17f2b1 100644 --- a/src/lib/ebus/port.h +++ b/src/lib/ebus/port.h @@ -240,13 +240,7 @@ public: * @param nbytes number of bytes to send. * @return number of written bytes or -1 if an error has occured. */ - ssize_t send(const unsigned char* buffer, size_t nbytes = MAX_WRITE_SIZE) - { - ssize_t ret = m_device->sendBytes(buffer, nbytes); - if (ret>0 && m_logRaw == true && m_logRawFunc != NULL) - (*m_logRawFunc)(buffer[0], false); - return ret; - } + ssize_t send(const unsigned char* buffer, size_t nbytes = MAX_WRITE_SIZE); /** * @brief recv read bytes from opened file descriptor. @@ -255,13 +249,7 @@ public: * @param buffer optional direct buffer to write to (instead of queuing the data). * @return number of read bytes (never 0) or a negative result_t code. */ - ssize_t recv(const long timeout, size_t maxCount = MAX_READ_SIZE, unsigned char* buffer=NULL) - { - ssize_t ret = m_device->recvBytes(timeout, maxCount, buffer); - if (buffer && ret>0 && m_logRaw == true && m_logRawFunc != NULL) - (*m_logRawFunc)(buffer[0], true); - return ret; - } + ssize_t recv(const long timeout, size_t maxCount = MAX_READ_SIZE, unsigned char* buffer = NULL); /** * @brief fetch first byte from receive buffer.