X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Flinux%2Fserialport.cpp;h=3a274fec12f35f88e9f1ec3e07b439a324fa3aa7;hb=a96eb42e890b2fb1224190f3b2bd1a1be55d848a;hp=1877b0eec97c04a9813eb03351a04af427626163;hpb=b1f5095277970600e999f0ba268b1ea11e778614;p=deb_libcec.git
diff --git a/src/lib/platform/linux/serialport.cpp b/src/lib/platform/linux/serialport.cpp
index 1877b0e..3a274fe 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
@@ -22,6 +36,17 @@
#include "../baudrate.h"
#include "../timeutils.h"
+#if defined(__APPLE__)
+#ifndef XCASE
+#define XCASE 0
+#endif
+#ifndef OLCUC
+#define OLCUC 0
+#endif
+#ifndef IUCLC
+#define IUCLC 0
+#endif
+#endif
using namespace std;
using namespace CEC;
@@ -35,7 +60,7 @@ CSerialPort::~CSerialPort()
Close();
}
-int CSerialPort::Write(uint8_t* data, int len)
+int8_t CSerialPort::Write(CCECAdapterMessage *data)
{
fd_set port;
@@ -46,9 +71,9 @@ int CSerialPort::Write(uint8_t* data, int len)
return -1;
}
- int byteswritten = 0;
+ int32_t byteswritten = 0;
- while (byteswritten < len)
+ while (byteswritten < (int32_t) data->size())
{
FD_ZERO(&port);
FD_SET(m_fd, &port);
@@ -59,7 +84,7 @@ int CSerialPort::Write(uint8_t* data, int len)
return -1;
}
- returnv = write(m_fd, data + byteswritten, len - byteswritten);
+ returnv = write(m_fd, data->packet.data + byteswritten, data->size() - byteswritten);
if (returnv == -1)
{
m_error = strerror(errno);
@@ -74,19 +99,19 @@ int CSerialPort::Write(uint8_t* data, int len)
// printf("%s write:", m_name.c_str());
// for (int i = 0; i < byteswritten; i++)
// printf(" %02x", (unsigned int)data[i]);
-
+//
// printf("\n");
// }
return byteswritten;
}
-int CSerialPort::Read(uint8_t* data, int len, int iTimeoutMs /*= -1*/)
+int32_t CSerialPort::Read(uint8_t* data, uint32_t len, uint64_t iTimeoutMs /*= 0*/)
{
fd_set port;
struct timeval timeout, *tv;
- int64_t now, target;
- int bytesread = 0;
+ int64_t now(0), target(0);
+ int32_t bytesread = 0;
CLockObject lock(&m_mutex);
if (m_fd == -1)
@@ -95,15 +120,15 @@ int CSerialPort::Read(uint8_t* data, int len, int iTimeoutMs /*= -1*/)
return -1;
}
- if (iTimeoutMs >= 0)
+ if (iTimeoutMs > 0)
{
now = GetTimeMs();
target = now + (int64_t) iTimeoutMs;
}
- while (bytesread < len && (iTimeoutMs < 0 || target > now))
+ while (bytesread < (int32_t) len && (iTimeoutMs == 0 || target > now))
{
- if (iTimeoutMs < 0)
+ if (iTimeoutMs == 0)
{
tv = NULL;
}
@@ -116,7 +141,7 @@ int CSerialPort::Read(uint8_t* data, int len, int iTimeoutMs /*= -1*/)
FD_ZERO(&port);
FD_SET(m_fd, &port);
- int returnv = select(m_fd + 1, &port, NULL, NULL, tv);
+ int32_t returnv = select(m_fd + 1, &port, NULL, NULL, tv);
if (returnv == -1)
{
@@ -155,7 +180,7 @@ int CSerialPort::Read(uint8_t* data, int len, int iTimeoutMs /*= -1*/)
}
//setting all this stuff up is a pain in the ass
-bool CSerialPort::Open(string name, int baudrate, int databits/* = 8*/, int stopbits/* = 1*/, int parity/* = PAR_NONE*/)
+bool CSerialPort::Open(string name, uint32_t baudrate, uint8_t databits /* = 8 */, uint8_t stopbits /* = 1 */, uint8_t parity /* = PAR_NONE */)
{
m_name = name;
m_error = strerror(errno);
@@ -257,7 +282,7 @@ void CSerialPort::Close()
}
}
-bool CSerialPort::SetBaudRate(int baudrate)
+bool CSerialPort::SetBaudRate(uint32_t baudrate)
{
int rate = IntToBaudrate(baudrate);
if (rate == -1)