win32: serial socket timeouts. bugzid: 654
[deb_libcec.git] / src / lib / adapter / USBCECAdapterCommunication.h
index f4fab4b4771dd6c16469727288c7c5c0543a03df..227a7e2625c3753a05a3034510d896e103aaa93e 100644 (file)
@@ -31,7 +31,7 @@
  *     http://www.pulse-eight.net/
  */
 
-#include <cectypes.h>
+#include "../../../include/cectypes.h"
 #include "../platform/threads/threads.h"
 #include "../platform/util/buffer.h"
 #include "AdapterCommunication.h"
@@ -50,9 +50,9 @@ namespace CEC
   {
   public:
     CUSBCECAdapterCommunication(CCECProcessor *processor, const char *strPort, uint16_t iBaudRate = 38400);
-    virtual ~CUSBCECAdapterCommunication();
+    virtual ~CUSBCECAdapterCommunication() {};
 
-    virtual bool Open(IAdapterCommunicationCallback *cb, uint32_t iTimeoutMs = 10000);
+    virtual bool Open(IAdapterCommunicationCallback *cb, uint32_t iTimeoutMs = 10000, bool bSkipChecks = false, bool bStartListening = true);
     virtual void Close(void);
     virtual bool IsOpen(void);
     virtual CStdString GetError(void) const;
@@ -66,9 +66,41 @@ namespace CEC
     virtual bool PingAdapter(void);
     virtual uint16_t GetFirmwareVersion(void);
     virtual bool SetControlledMode(bool controlled);
+    virtual bool PersistConfiguration(libcec_configuration *configuration);
+    virtual bool GetConfiguration(libcec_configuration *configuration);
+    virtual CStdString GetPortName(void);
+    virtual uint16_t GetPhysicalAddress(void) { return 0; }
 
     void *Process(void);
   private:
+    bool SendCommand(cec_adapter_messagecode msgCode, CCECAdapterMessage &params, bool bExpectAck = true, bool bIsTransmission = false, bool bSendDirectly = true, bool bIsRetry = false);
+    cec_datapacket GetSetting(cec_adapter_messagecode msgCode, uint8_t iResponseLength);
+
+    bool SetSettingAutoEnabled(bool enabled);
+    bool GetSettingAutoEnabled(bool &enabled);
+
+    bool SetSettingDeviceType(cec_device_type type);
+    bool GetSettingDeviceType(cec_device_type &type);
+
+    bool SetSettingDefaultLogicalAddress(cec_logical_address address);
+    bool GetSettingDefaultLogicalAddress(cec_logical_address &address);
+
+    bool SetSettingLogicalAddressMask(uint16_t iMask);
+    bool GetSettingLogicalAddressMask(uint16_t &iMask);
+
+    bool SetSettingPhysicalAddress(uint16_t iPhysicalAddress);
+    bool GetSettingPhysicalAddress(uint16_t &iPhysicalAddress);
+
+    bool SetSettingCECVersion(cec_version version);
+    bool GetSettingCECVersion(cec_version &version);
+
+    bool SetSettingOSDName(const char *strOSDName);
+    bool GetSettingOSDName(CStdString &strOSDName);
+
+    bool WriteEEPROM(void);
+
+    bool SetAckMaskInternal(uint16_t iMask, bool bWriteDirectly = false);
+
     bool CheckAdapter(uint32_t iTimeoutMs = 10000);
     bool Write(CCECAdapterMessage *data);
     bool Read(CCECAdapterMessage &msg, uint32_t iTimeout = 1000);
@@ -84,14 +116,17 @@ namespace CEC
     PLATFORM::SyncedBuffer<CCECAdapterMessage *> m_inBuffer;
     PLATFORM::SyncedBuffer<CCECAdapterMessage *> m_outBuffer;
     PLATFORM::CMutex                             m_mutex;
-    PLATFORM::CCondition                         m_rcvCondition;
+    PLATFORM::CCondition<volatile bool>          m_rcvCondition;
+    volatile bool                                m_bHasData;
     uint8_t                                      m_iLineTimeout;
     uint16_t                                     m_iFirmwareVersion;
     cec_command                                  m_currentframe;
-    cec_logical_address                          m_lastInitiator;
+    cec_logical_address                          m_lastDestination;
     CCECAdapterMessage                           m_currentAdapterMessage;
     bool                                         m_bNextIsEscaped;
     bool                                         m_bGotStart;
     IAdapterCommunicationCallback *              m_callback;
+    bool                                         m_bInitialised;
+    bool                                         m_bWaitingForAck[15];
   };
 };