X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Flinux%2Fserialport.cpp;h=f0408574dad1670238a571ab0dcadfb8acedcff3;hb=ef79edcce663c6156731ad73d63acbe0c6be85b9;hp=e362396e6cd471d41d4d562658fbc8adc5c54ec0;hpb=5a1e87c8d9a1d8a6b8dbf8b7d1738395fdb6b856;p=deb_libcec.git
diff --git a/src/lib/platform/linux/serialport.cpp b/src/lib/platform/linux/serialport.cpp
index e362396..f040857 100644
--- a/src/lib/platform/linux/serialport.cpp
+++ b/src/lib/platform/linux/serialport.cpp
@@ -1,19 +1,33 @@
/*
- * boblight
- * Copyright (C) Bob 2009
- *
- * boblight 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
+ * This file is part of the libCEC(R) library.
+ *
+ * libCEC(R) is Copyright (C) 2011 Pulse-Eight Limited. All rights reserved.
+ * libCEC(R) is an original work, containing original code.
+ *
+ * libCEC(R) is a trademark of Pulse-Eight Limited.
+ *
+ * This program is dual-licensed; 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 2 of the License, or
* (at your option) any later version.
- *
- * boblight 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 this program. If not, see .
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *
+ * Alternatively, you can license this library under a commercial license,
+ * please contact Pulse-Eight Licensing for more information.
+ *
+ * For more information contact:
+ * Pulse-Eight Licensing
+ * http://www.pulse-eight.com/
+ * http://www.pulse-eight.net/
*/
#include
@@ -39,6 +53,7 @@ using namespace CEC;
CSerialPort::CSerialPort()
{
m_fd = -1;
+ m_tostdout = false;
}
CSerialPort::~CSerialPort()
@@ -46,7 +61,7 @@ CSerialPort::~CSerialPort()
Close();
}
-int8_t CSerialPort::Write(CCECAdapterMessagePtr data)
+int8_t CSerialPort::Write(CCECAdapterMessage *data)
{
fd_set port;
@@ -59,16 +74,33 @@ int8_t CSerialPort::Write(CCECAdapterMessagePtr data)
int32_t byteswritten = 0;
+ struct timeval timeout, *tv;
+ if (data->transmit_timeout <= 0)
+ {
+ tv = NULL;
+ }
+ else
+ {
+ timeout.tv_sec = (long int)data->transmit_timeout / (long int)1000.;
+ timeout.tv_usec = (long int)data->transmit_timeout % (long int)1000.;
+ tv = &timeout;
+ }
+
while (byteswritten < (int32_t) data->size())
{
FD_ZERO(&port);
FD_SET(m_fd, &port);
- int returnv = select(m_fd + 1, NULL, &port, NULL, NULL);
- if (returnv == -1)
+ int returnv = select(m_fd + 1, NULL, &port, NULL, tv);
+ if (returnv < 0)
{
m_error = strerror(errno);
return -1;
}
+ else if (returnv == 0)
+ {
+ m_error = "timeout";
+ return -1;
+ }
returnv = write(m_fd, data->packet.data + byteswritten, data->size() - byteswritten);
if (returnv == -1)
@@ -80,14 +112,14 @@ int8_t CSerialPort::Write(CCECAdapterMessagePtr data)
}
//print what's written to stdout for debugging
-// if (m_tostdout)
-// {
-// printf("%s write:", m_name.c_str());
-// for (int i = 0; i < byteswritten; i++)
-// printf(" %02x", (unsigned int)data[i]);
-//
-// printf("\n");
-// }
+ if (m_tostdout)
+ {
+ printf("%s write:", m_name.c_str());
+ for (int i = 0; i < byteswritten; i++)
+ printf(" %02x", data->at(i));
+
+ printf("\n");
+ }
return byteswritten;
}
@@ -153,14 +185,14 @@ int32_t CSerialPort::Read(uint8_t* data, uint32_t len, uint64_t iTimeoutMs /*= 0
}
//print what's read to stdout for debugging
-// if (m_tostdout && bytesread > 0)
-// {
-// printf("%s read:", m_name.c_str());
-// for (int i = 0; i < bytesread; i++)
-// printf(" %02x", (unsigned int)data[i]);
-//
-// printf("\n");
-// }
+ if (m_tostdout && bytesread > 0)
+ {
+ printf("%s read:", m_name.c_str());
+ for (int i = 0; i < bytesread; i++)
+ printf(" %02x", data[i]);
+
+ printf("\n");
+ }
return bytesread;
}