cec: moved the timed ping to a separate thread. bugzid: 654
[deb_libcec.git] / src / lib / adapter / USBCECAdapterCommunication.h
index 4e7944eb5eb04964ed8c4f071b5d16cc41e1e30d..4ca8e87e1810c794c088dc4a15a7c053422e129c 100644 (file)
@@ -45,23 +45,7 @@ namespace PLATFORM
 namespace CEC
 {
   class CCECProcessor;
-
-  class CUSBCECAdapterProcessor: public PLATFORM::CThread
-  {
-  public:
-    CUSBCECAdapterProcessor(IAdapterCommunicationCallback *cb) :
-      m_callback(cb) {};
-    virtual ~CUSBCECAdapterProcessor(void)
-    {
-      StopThread();
-    }
-
-    void *Process(void);
-    void AddCommand(cec_command command);
-  private:
-    IAdapterCommunicationCallback *     m_callback;
-    PLATFORM::SyncedBuffer<cec_command> m_inBuffer;
-  };
+  class CAdapterPingThread;
 
   class CUSBCECAdapterCommunication : public IAdapterCommunication, private PLATFORM::CThread
   {
@@ -123,7 +107,6 @@ namespace CEC
     bool Read(CCECAdapterMessage &msg, uint32_t iTimeout = 1000);
     bool ParseMessage(const CCECAdapterMessage &msg);
     void SendMessageToAdapter(CCECAdapterMessage *msg);
-    void WriteNextCommand(void);
     void AddData(uint8_t *data, size_t iLen);
     bool ReadFromDevice(uint32_t iTimeout, size_t iSize = 256);
     bool WaitForAck(CCECAdapterMessage &message);
@@ -131,7 +114,6 @@ namespace CEC
     PLATFORM::ISocket *                          m_port;
     CCECProcessor *                              m_processor;
     PLATFORM::SyncedBuffer<CCECAdapterMessage *> m_inBuffer;
-    PLATFORM::SyncedBuffer<CCECAdapterMessage *> m_outBuffer;
     PLATFORM::CMutex                             m_mutex;
     PLATFORM::CCondition<volatile bool>          m_rcvCondition;
     volatile bool                                m_bHasData;
@@ -143,8 +125,22 @@ namespace CEC
     bool                                         m_bNextIsEscaped;
     bool                                         m_bGotStart;
     IAdapterCommunicationCallback *              m_callback;
-    CUSBCECAdapterProcessor *                    m_messageProcessor;
     bool                                         m_bInitialised;
     bool                                         m_bWaitingForAck[15];
+    CAdapterPingThread *                         m_pingThread;
+  };
+
+  class CAdapterPingThread : public PLATFORM::CThread
+  {
+  public:
+    CAdapterPingThread(CUSBCECAdapterCommunication *com, uint32_t iTimeout) :
+        m_com(com),
+        m_timeout(iTimeout){}
+    virtual ~CAdapterPingThread(void) {}
+
+    virtual void* Process(void);
+  private:
+    CUSBCECAdapterCommunication *m_com;
+    PLATFORM::CTimeout           m_timeout;
   };
 };