fixd dump to file with direct buffer, moved more complex method implementation from .h to .cpp file

This commit is contained in:
john30
2014-12-10 20:46:19 +01:00
parent fa61067a0f
commit 98a4be5f84
2 changed files with 35 additions and 14 deletions
+33
View File
@@ -281,6 +281,39 @@ Port::Port(const string deviceName, const bool noDeviceCheck,
setDumpRaw(dumpRaw); // open fstream if necessary 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 Port::byte()
{ {
unsigned char byte = m_device->getByte(); unsigned char byte = m_device->getByte();
+2 -14
View File
@@ -240,13 +240,7 @@ public:
* @param nbytes number of bytes to send. * @param nbytes number of bytes to send.
* @return number of written bytes or -1 if an error has occured. * @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 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;
}
/** /**
* @brief recv read bytes from opened file descriptor. * @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). * @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. * @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 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;
}
/** /**
* @brief fetch first byte from receive buffer. * @brief fetch first byte from receive buffer.