cec: clean ups and only include what we need from lib/platform.
authorLars Op den Kamp <lars@opdenkamp.eu>
Sat, 28 Jan 2012 12:02:01 +0000 (13:02 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Sun, 29 Jan 2012 16:39:32 +0000 (17:39 +0100)
26 files changed:
project/libcec.vcxproj
project/libcec.vcxproj.filters
src/lib/CECProcessor.cpp
src/lib/CECProcessor.h
src/lib/LibCEC.cpp
src/lib/LibCEC.h
src/lib/adapter/AdapterCommunication.cpp
src/lib/adapter/AdapterCommunication.h
src/lib/adapter/AdapterDetection.cpp
src/lib/adapter/AdapterMessage.h
src/lib/devices/CECBusDevice.cpp
src/lib/devices/CECBusDevice.h
src/lib/implementations/CECCommandHandler.h
src/lib/platform/os.h
src/lib/platform/posix/os-socket.h [new file with mode: 0644]
src/lib/platform/posix/os-types.h
src/lib/platform/posix/serialport.cpp
src/lib/platform/sockets/serialport.h [moved from src/lib/platform/serialport/serialport.h with 83% similarity]
src/lib/platform/sockets/socket.h [new file with mode: 0644]
src/lib/platform/threads/mutex.h
src/lib/platform/util/StdString.h [moved from src/lib/platform/StdString.h with 100% similarity]
src/lib/platform/util/baudrate.h [moved from src/lib/platform/serialport/baudrate.h with 100% similarity]
src/lib/platform/util/buffer.h [moved from src/lib/platform/buffer.h with 98% similarity]
src/lib/platform/util/timeutils.h [moved from src/lib/platform/timeutils.h with 98% similarity]
src/lib/platform/windows/os-types.h
src/lib/platform/windows/serialport.cpp

index 70231936e635ddb4fdff6cb64fa7d799f6416519..e0770b44b2fcf4d2b1907f578c9a4a303ca8ac14 100644 (file)
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
+
index 37a07ba87a43669e843baf5efa837f20562876b5..5a9f4328a6765bf6a8f40c2132a303b170aca34a 100644 (file)
   <ItemGroup>
     <ResourceCompile Include="libcec.rc" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
+
index 8c808ae8b390cb20e4461e466d20038d9944a1e3..6a8afd9009aee7e5b677bc74aeb93f88592b73fd 100644 (file)
@@ -41,6 +41,7 @@
 #include "devices/CECTV.h"
 #include "implementations/CECCommandHandler.h"
 #include "LibCEC.h"
+#include "platform/util/timeutils.h"
 
 using namespace CEC;
 using namespace std;
index 140911a7022a828628171e67574febac6703706d..2c0f287c07c03ce37b5c39e16e18cb77aa915f39 100644 (file)
@@ -34,7 +34,7 @@
 #include <string>
 #include <cectypes.h>
 #include "adapter/AdapterCommunication.h"
-#include "platform/os.h"
+#include "platform/util/buffer.h"
 
 class CSerialPort;
 
index 1dd336621ded1c6af8abc99ba8896feb8e87c2e6..9534fe94031ede2d5b5f0bd9a54ca8a0c42517c0 100644 (file)
@@ -36,7 +36,8 @@
 #include "adapter/AdapterDetection.h"
 #include "CECProcessor.h"
 #include "devices/CECBusDevice.h"
-#include "platform/timeutils.h"
+#include "platform/util/timeutils.h"
+#include "platform/util/StdString.h"
 
 using namespace std;
 using namespace CEC;
index 752bae6933f919957ceb2df060d3d0a02ede24ab..bb21f0248e2f0c00f0a81f39f49452c0b76b6949 100644 (file)
@@ -33,7 +33,7 @@
 
 #include <string>
 #include <cec.h>
-#include "platform/os.h"
+#include "platform/util/buffer.h"
 
 namespace CEC
 {
index 2bbcb0153ba0ec798fe76ff7ee0786abb3760f58..ff69a7f4a73f2aeb6a10cf43bb9a888e21190330 100644 (file)
@@ -34,7 +34,8 @@
 
 #include "AdapterMessage.h"
 #include "../CECProcessor.h"
-#include "../platform/serialport/serialport.h"
+#include "../platform/sockets/serialport.h"
+#include "../platform/util/timeutils.h"
 #include "../LibCEC.h"
 
 using namespace std;
@@ -234,9 +235,11 @@ bool CAdapterCommunication::Read(CCECAdapterMessage &msg, uint32_t iTimeout)
   return bGotFullMessage;
 }
 
-std::string CAdapterCommunication::GetError(void) const
+CStdString CAdapterCommunication::GetError(void) const
 {
-  return m_port->GetError();
+  CStdString strError;
+  strError = m_port->GetError();
+  return strError;
 }
 
 bool CAdapterCommunication::StartBootloader(void)
index f7979548c6b41cdf4aadcffab64af7cd855320ab..76b51df108c799953ddf327eac236249ad36ff4b 100644 (file)
@@ -32,7 +32,9 @@
  */
 
 #include <cectypes.h>
-#include "../platform/os.h"
+#include "../platform/threads/threads.h"
+#include "../platform/util/buffer.h"
+#include "../platform/util/StdString.h"
 
 namespace PLATFORM
 {
@@ -55,7 +57,7 @@ namespace CEC
     bool Write(CCECAdapterMessage *data);
     void Close(void);
     bool IsOpen(void);
-    std::string GetError(void) const;
+    CStdString GetError(void) const;
 
     void *Process(void);
 
index 596bfd88d9e1328175dd45875c9991f14e0d645b..2ed9e497459595bcfab81a138cd9ac8c22aeb7ea 100644 (file)
@@ -31,7 +31,7 @@
  */
 
 #include "AdapterDetection.h"
-#include "../platform/os.h"
+#include "../platform/util/StdString.h"
 
 #if defined(__APPLE__)
 #include <dirent.h>
index ad81878ece635fb178957bfae38c93bde196ff54..4c8b35cf40bf7e1916c51942714ca97adbaa0b3f 100644 (file)
@@ -31,6 +31,8 @@
  *     http://www.pulse-eight.net/
  */
 
+#include "platform/util/StdString.h"
+
 namespace CEC
 {
   typedef enum cec_adapter_message_state
index 48b75d7dda6ad936424c1801817a73c94e453f6f..be9e8875f614164be47b0585479f2ed6d549167b 100644 (file)
@@ -37,6 +37,7 @@
 #include "../implementations/SLCommandHandler.h"
 #include "../implementations/VLCommandHandler.h"
 #include "../LibCEC.h"
+#include "../platform/util/timeutils.h"
 
 using namespace CEC;
 using namespace PLATFORM;
index ba686322ca3fe9dab6c87b3817b3afa1f1306477..b6f1a7d50bc2e07aec547df2f54617f1e40c3ddc 100644 (file)
@@ -33,7 +33,8 @@
 
 #include <cectypes.h>
 #include <set>
-#include "../platform/os.h"
+#include "../platform/threads/mutex.h"
+#include "../platform/util/StdString.h"
 
 namespace CEC
 {
index f1e0924e9db5ebd0caa7ee2a71e3f21f8c91633d..97518b35d3de862d91152cbf5dfba9f43fae61be 100644 (file)
@@ -33,7 +33,8 @@
 
 #include <cectypes.h>
 #include <vector>
-#include "../platform/os.h"
+#include "../platform/threads/mutex.h"
+#include "../platform/util/StdString.h"
 
 namespace CEC
 {
index fbe090342986ce0e7bc67fd5ad3099ce33994df6..8f88607f6ba8c3ce95ddbc2a53e799dd14b5cbf7 100644 (file)
  *     http://www.pulse-eight.net/
  */
 
-#if defined(_WIN32) || defined(_WIN64)
-#ifndef __WINDOWS__
-#define __WINDOWS__
-#endif
+#if (defined(_WIN32) || defined(_WIN64))
 #include "windows/os-types.h"
-#include "windows/os-threads.h"
 #else
 #include "posix/os-types.h"
-#include "posix/os-threads.h"
 #endif
-
-#include "timeutils.h"
-#include "threads/threads.h"
-#include "buffer.h"
-#include "StdString.h"
diff --git a/src/lib/platform/posix/os-socket.h b/src/lib/platform/posix/os-socket.h
new file mode 100644 (file)
index 0000000..3cea52b
--- /dev/null
@@ -0,0 +1,159 @@
+#pragma once
+/*
+ * 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.
+ *
+ * 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       <license@pulse-eight.com>
+ *     http://www.pulse-eight.com/
+ *     http://www.pulse-eight.net/
+ */
+
+
+#include "../os.h"
+#include "../util/timeutils.h"
+#include <stdio.h>
+#include <fcntl.h>
+
+namespace PLATFORM
+{
+  inline void SocketClose(socket_t socket)
+  {
+    if (socket != INVALID_SOCKET)
+      close(socket);
+  }
+
+  inline void SocketSetBlocking(socket_t socket, bool bSetTo)
+  {
+//    return bSetTo ?
+//            fcntl(socket, F_SETFL, fcntl(socket, F_GETFL) & ~O_NONBLOCK) == 0 :
+//            fcntl(socket, F_SETFL, fcntl(socket, F_GETFL) | O_NONBLOCK) == 0;
+    fcntl(socket, F_SETFL, bSetTo ? FNDELAY : 0);
+  }
+
+  inline int64_t SocketWrite(socket_t socket, int *iError, uint8_t* data, uint32_t len)
+  {
+    fd_set port;
+
+    if (socket == -1)
+    {
+      *iError = EINVAL;
+      return -1;
+    }
+
+    int64_t iBytesWritten = 0;
+    struct timeval *tv;
+
+    while (iBytesWritten < len)
+    {
+      FD_ZERO(&port);
+      FD_SET(socket, &port);
+      int returnv = select(socket + 1, NULL, &port, NULL, tv);
+      if (returnv < 0)
+      {
+        *iError = errno;
+        return -1;
+      }
+      else if (returnv == 0)
+      {
+        *iError = ETIMEDOUT;
+        return -1;
+      }
+
+      returnv = write(socket, data + iBytesWritten, len - iBytesWritten);
+      if (returnv == -1)
+      {
+        *iError = errno;
+        return -1;
+      }
+      iBytesWritten += returnv;
+    }
+
+    return iBytesWritten;
+  }
+
+  inline int32_t SocketRead(socket_t socket, int *iError, uint8_t* data, uint32_t len, uint64_t iTimeoutMs /*= 0*/)
+  {
+    fd_set port;
+    struct timeval timeout, *tv;
+    int64_t iNow(0), iTarget(0);
+    int32_t iBytesRead = 0;
+    *iError = 0;
+
+    if (socket == -1)
+    {
+      *iError = EINVAL;
+      return -1;
+    }
+
+    if (iTimeoutMs > 0)
+    {
+      iNow    = GetTimeMs();
+      iTarget = iNow + (int64_t) iTimeoutMs;
+    }
+
+    while (iBytesRead < (int32_t) len && (iTimeoutMs == 0 || iTarget > iNow))
+    {
+      if (iTimeoutMs == 0)
+      {
+        tv = NULL;
+      }
+      else
+      {
+        timeout.tv_sec  = ((long int)iTarget - (long int)iNow) / (long int)1000.;
+        timeout.tv_usec = ((long int)iTarget - (long int)iNow) % (long int)1000.;
+        tv = &timeout;
+      }
+
+      FD_ZERO(&port);
+      FD_SET(socket, &port);
+      int32_t returnv = select(socket + 1, &port, NULL, NULL, tv);
+
+      if (returnv == -1)
+      {
+        *iError = errno;
+        return -1;
+      }
+      else if (returnv == 0)
+      {
+        break; //nothing to read
+      }
+
+      returnv = read(socket, data + iBytesRead, len - iBytesRead);
+      if (returnv == -1)
+      {
+        *iError = errno;
+        return -1;
+      }
+
+      iBytesRead += returnv;
+
+      if (iTimeoutMs > 0)
+        iNow = GetTimeMs();
+    }
+
+    return iBytesRead;
+  }
+}
index 99bacb3a0ee868683384ab5e72843824516037cb..521c89a0aa710d75b4668c5871b0d363a87e00a3 100644 (file)
@@ -33,3 +33,7 @@
 #define LIBTYPE
 #define DECLSPEC
 
+typedef int socket_t;
+#define INVALID_SOCKET (-1)
+#define SOCKET_ERROR   (-1)
+
index ec8a5c1d48e2f4ea14160ab5bd51719de318a81b..71405d474c3a6734a80095705aad3d4f57982dc0 100644 (file)
  *     http://www.pulse-eight.net/
  */
 
+#include "../os.h"
 #include <stdio.h>
 #include <fcntl.h>
-#include "../serialport/serialport.h"
-#include "../serialport/baudrate.h"
-#include "../timeutils.h"
+#include "../sockets/serialport.h"
+#include "../util/baudrate.h"
 
 #if defined(__APPLE__)
 #ifndef XCASE
@@ -52,191 +52,45 @@ using namespace PLATFORM;
 
 CSerialPort::CSerialPort()
 {
-  m_fd = -1;
   m_tostdout = false;
 }
 
-CSerialPort::~CSerialPort()
-{
-  Close();
-}
-
-int64_t CSerialPort::Write(uint8_t* data, uint32_t len)
-{
-  fd_set port;
-
-  CLockObject lock(m_mutex);
-  if (m_fd == -1)
-  {
-    m_error = "port closed";
-    return -1;
-  }
-
-  int64_t byteswritten = 0;
-  struct timeval *tv;
-//TODO
-//  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 < len)
-  {
-    FD_ZERO(&port);
-    FD_SET(m_fd, &port);
-    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 + byteswritten, len - byteswritten);
-    if (returnv == -1)
-    {
-      m_error = strerror(errno);
-      return -1;
-    }
-    byteswritten += returnv;
-  }
-
-  //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", data[i]);
-
-    printf("\n");
-  }
-
-  return byteswritten;
-}
-
-int32_t CSerialPort::Read(uint8_t* data, uint32_t len, uint64_t iTimeoutMs /*= 0*/)
-{
-  fd_set port;
-  struct timeval timeout, *tv;
-  int64_t now(0), target(0);
-  int32_t bytesread = 0;
-
-  CLockObject lock(m_mutex);
-  if (m_fd == -1)
-  {
-    m_error = "port closed";
-    return -1;
-  }
-
-  if (iTimeoutMs > 0)
-  {
-    now    = GetTimeMs();
-    target = now + (int64_t) iTimeoutMs;
-  }
-
-  while (bytesread < (int32_t) len && (iTimeoutMs == 0 || target > now))
-  {
-    if (iTimeoutMs == 0)
-    {
-      tv = NULL;
-    }
-    else
-    {
-      timeout.tv_sec  = ((long int)target - (long int)now) / (long int)1000.;
-      timeout.tv_usec = ((long int)target - (long int)now) % (long int)1000.;
-      tv = &timeout;
-    }
-
-    FD_ZERO(&port);
-    FD_SET(m_fd, &port);
-    int32_t returnv = select(m_fd + 1, &port, NULL, NULL, tv);
-
-    if (returnv == -1)
-    {
-      m_error = strerror(errno);
-      return -1;
-    }
-    else if (returnv == 0)
-    {
-      break; //nothing to read
-    }
-
-    returnv = read(m_fd, data + bytesread, len - bytesread);
-    if (returnv == -1)
-    {
-      m_error = strerror(errno);
-      return -1;
-    }
-
-    bytesread += returnv;
-
-    if (iTimeoutMs > 0)
-      now = GetTimeMs();
-  }
-
-  //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", data[i]);
-
-    printf("\n");
-  }
-
-  return bytesread;
-}
-
 //setting all this stuff up is a pain in the ass
 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);
   CLockObject lock(m_mutex);
 
   if (databits < 5 || databits > 8)
   {
-    m_error = "Databits has to be between 5 and 8";
+    m_strError = "Databits has to be between 5 and 8";
     return false;
   }
 
   if (stopbits != 1 && stopbits != 2)
   {
-    m_error = "Stopbits has to be 1 or 2";
+    m_strError = "Stopbits has to be 1 or 2";
     return false;
   }
 
   if (parity != PAR_NONE && parity != PAR_EVEN && parity != PAR_ODD)
   {
-    m_error = "Parity has to be none, even or odd";
+    m_strError = "Parity has to be none, even or odd";
     return false;
   }
 
-  m_fd = open(name.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
+  m_socket = open(name.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
 
-  if (m_fd == -1)
+  if (m_socket == INVALID_SOCKET)
   {
-    m_error = strerror(errno);
+    m_strError = strerror(errno);
     return false;
   }
 
-  fcntl(m_fd, F_SETFL, 0);
+  SocketSetBlocking(m_socket, false);
 
   if (!SetBaudRate(baudrate))
-  {
     return false;
-  }
 
   m_options.c_cflag |= (CLOCAL | CREAD);
   m_options.c_cflag &= ~HUPCL;
@@ -277,30 +131,17 @@ bool CSerialPort::Open(string name, uint32_t baudrate, uint8_t databits /* = 8 *
   m_options.c_iflag &= ~(IXON | IXOFF | IXANY | BRKINT | INLCR | IGNCR | ICRNL | IUCLC | IMAXBEL);
   m_options.c_oflag &= ~(OPOST | ONLCR | OCRNL);
 
-  if (tcsetattr(m_fd, TCSANOW, &m_options) != 0)
+  if (tcsetattr(m_socket, TCSANOW, &m_options) != 0)
   {
-    m_error = strerror(errno);
+    m_strError = strerror(errno);
     return false;
   }
   
-  //non-blocking port
-  fcntl(m_fd, F_SETFL, FNDELAY);
+  SocketSetBlocking(m_socket, true);
 
   return true;
 }
 
-void CSerialPort::Close()
-{
-  CLockObject lock(m_mutex);
-  if (m_fd != -1)
-  {
-    close(m_fd);
-    m_fd = -1;
-    m_name = "";
-    m_error = "";
-  }
-}
-
 bool CSerialPort::SetBaudRate(uint32_t baudrate)
 {
   int rate = IntToBaudrate(baudrate);
@@ -308,34 +149,28 @@ bool CSerialPort::SetBaudRate(uint32_t baudrate)
   {
     char buff[255];
     sprintf(buff, "%i is not a valid baudrate", baudrate);
-    m_error = buff;
+    m_strError = buff;
     return false;
   }
   
   //get the current port attributes
-  if (tcgetattr(m_fd, &m_options) != 0)
+  if (tcgetattr(m_socket, &m_options) != 0)
   {
-    m_error = strerror(errno);
+    m_strError = strerror(errno);
     return false;
   }
 
   if (cfsetispeed(&m_options, rate) != 0)
   {
-    m_error = strerror(errno);
+    m_strError = strerror(errno);
     return false;
   }
   
   if (cfsetospeed(&m_options, rate) != 0)
   {
-    m_error = strerror(errno);
+    m_strError = strerror(errno);
     return false;
   }
 
   return true;
 }
-
-bool CSerialPort::IsOpen()
-{
-  CLockObject lock(m_mutex);
-  return m_fd != -1;
-}
similarity index 83%
rename from src/lib/platform/serialport/serialport.h
rename to src/lib/platform/sockets/serialport.h
index 3710bfecd52fb0579ad83810a875c6e4513cdfb4..bef3a806abd9ac8a6849c03891ddfff749e77429 100644 (file)
  */
 
 #include "../os.h"
+#include "../util/buffer.h"
+
 #include <string>
 #include <stdint.h>
 
-#ifndef __WINDOWS__
+#if !defined(__WINDOWS__)
 #include <termios.h>
+#include "socket.h"
 #endif
 
 namespace PLATFORM
@@ -45,28 +48,25 @@ namespace PLATFORM
   #define PAR_EVEN 1
   #define PAR_ODD  2
 
-  class CSerialPort
+  class CSerialPort : public CSocket
   {
     public:
-      CSerialPort();
-      virtual ~CSerialPort();
+      CSerialPort(void);
+      virtual ~CSerialPort(void) {};
 
       bool Open(std::string name, uint32_t baudrate, uint8_t databits = 8, uint8_t stopbits = 1, uint8_t parity = PAR_NONE);
-      bool IsOpen();
-      void Close();
-
-      int64_t Write(uint8_t* data, uint32_t len);
-      int32_t Read(uint8_t* data, uint32_t len, uint64_t iTimeoutMs = 0);
 
-      std::string GetError() { return m_error; }
-      std::string GetName() { return m_name; }
+      CStdString GetName(void) const
+      {
+        CStdString strName;
+        strName = m_name;
+        return strName;
+      }
 
   private:
       bool SetBaudRate(uint32_t baudrate);
 
-      std::string  m_error;
       std::string  m_name;
-      CMutex       m_mutex;
       bool         m_tostdout;
 
   #ifdef __WINDOWS__
@@ -83,7 +83,6 @@ namespace PLATFORM
       HANDLE                m_ovHandle;
   #else
       struct termios     m_options;
-      int                m_fd;
   #endif
   };
 };
diff --git a/src/lib/platform/sockets/socket.h b/src/lib/platform/sockets/socket.h
new file mode 100644 (file)
index 0000000..aa3625a
--- /dev/null
@@ -0,0 +1,102 @@
+#pragma once
+/*
+ * 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.
+ *
+ * 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       <license@pulse-eight.com>
+ *     http://www.pulse-eight.com/
+ *     http://www.pulse-eight.net/
+ */
+
+#include "../threads/mutex.h"
+#include "../util/StdString.h"
+
+#if defined(__WINDOWS__)
+#include "../windows/os-socket.h"
+#else
+#include "../posix/os-socket.h"
+#endif
+
+// Common socket operations
+
+namespace PLATFORM
+{
+  class CSocket : public PreventCopy
+  {
+    public:
+      CSocket(void) :
+        m_socket(INVALID_SOCKET) {};
+      virtual ~CSocket(void)
+      {
+        Close();
+      }
+
+      virtual bool IsOpen(void)
+      {
+        CLockObject lock(m_mutex);
+        return m_socket != INVALID_SOCKET &&
+            m_socket != SOCKET_ERROR;
+      }
+
+      virtual void Close(void)
+      {
+        CLockObject lock(m_mutex);
+        SocketClose(m_socket);
+        m_socket = INVALID_SOCKET;
+        m_strError = "";
+      }
+
+      int64_t Write(uint8_t* data, uint32_t len)
+      {
+        CLockObject lock(m_mutex);
+        int iError(0);
+        int64_t iReturn = SocketWrite(m_socket, &iError, data, len);
+        m_strError = strerror(iError);
+        return iReturn;
+      }
+
+      int32_t Read(uint8_t* data, uint32_t len, uint64_t iTimeoutMs = 0)
+      {
+        CLockObject lock(m_mutex);
+        int iError(0);
+        int32_t iReturn = SocketRead(m_socket, &iError, data, len, iTimeoutMs);
+        m_strError = strerror(iError);
+        return iReturn;
+      }
+
+      virtual CStdString GetError(void) const
+      {
+        CStdString strReturn;
+        strReturn = m_strError;
+        return strReturn;
+      }
+
+    protected:
+      socket_t   m_socket;
+      CStdString m_strError;
+      CMutex     m_mutex;
+  };
+};
index 2c2b5c569819a669353712c1968cfa14bab9cbae..38055f9bf8cbbb19a9632972e83029a186d9716b 100644 (file)
  *     http://www.pulse-eight.net/
  */
 
+#include "../os.h"
+
+#if defined(__WINDOWS__)
+#include "../windows/os-threads.h"
+#else
+#include "../posix/os-threads.h"
+#endif
+
 namespace PLATFORM
 {
   class PreventCopy
similarity index 98%
rename from src/lib/platform/buffer.h
rename to src/lib/platform/util/buffer.h
index 227b7565edcd7a438991d12b6355301336df65f9..1c12e86dd05b6ec961f5521f1252ddec0712be58 100644 (file)
@@ -31,7 +31,7 @@
  *     http://www.pulse-eight.net/
  */
 
-#include "os.h"
+#include "../threads/mutex.h"
 #include <queue>
 
 namespace PLATFORM
similarity index 98%
rename from src/lib/platform/timeutils.h
rename to src/lib/platform/util/timeutils.h
index b2f613add0d85657015a72ab667f46360c9699a4..12c2145844489ab3ab84f4f84af30814d81fbc7c 100644 (file)
@@ -31,7 +31,8 @@
  *     http://www.pulse-eight.net/
  */
 
-#include <stdint.h>
+#include "../os.h"
+
 #if defined(__APPLE__)
 #include <mach/mach_time.h>
 #include <CoreVideo/CVHostTime.h>
@@ -41,8 +42,6 @@
 #include <sys/time.h>
 #endif
 
-#include "os.h"
-
 namespace PLATFORM
 {
   #if defined(__WINDOWS__)
index 3943510fbad76ec8e55097d411d770b88044a331..ea00eaec441c618922c8a6eea6ed0fc6f7ec7d61 100644 (file)
  *     http://www.pulse-eight.net/
  */
 
+#if !defined(__WINDOWS__)
+#define __WINDOWS__
+#endif
+
 #pragma warning(disable:4005) // Disable "warning C4005: '_WINSOCKAPI_' : macro redefinition"
 #include <winsock2.h>
 #pragma warning(default:4005)
index 8e513fc7f1c6c87f607603786a16ddbf79552090..22c65d76e6a4162d3bb7f026450afcb6b83a9afb 100644 (file)
@@ -30,9 +30,9 @@
  *     http://www.pulse-eight.net/
  */
 
-#include "../serialport/serialport.h"
-#include "../serialport/baudrate.h"
-#include "../timeutils.h"
+#include "../sockets/serialport.h"
+#include "../util/baudrate.h"
+#include "../util/timeutils.h"
 
 using namespace std;
 using namespace PLATFORM;