cec: drop shared_ptr and use a normal pointer. removed boost dependency
[deb_libcec.git] / src / lib / AdapterCommunication.h
index 2ec6e3b60c3481597f22b6f4894dc6ec6f16bbca..31de379e1350ac131529590e095ae2dd7bac2ee6 100644 (file)
@@ -34,9 +34,8 @@
 #include <cectypes.h>
 #include "platform/threads.h"
 #include "util/buffer.h"
+#include "util/StdString.h"
 #include <string>
-#include <boost/enable_shared_from_this.hpp>
-#include <boost/shared_ptr.hpp>
 
 namespace CEC
 {
@@ -50,17 +49,20 @@ namespace CEC
   } cec_adapter_message_state;
 
 
-  class CCECAdapterMessage : public boost::enable_shared_from_this<CCECAdapterMessage>
+  class CCECAdapterMessage
   {
   public:
     CCECAdapterMessage(void) { clear(); }
     CCECAdapterMessage(const cec_command &command);
+    CCECAdapterMessage &operator =(const CCECAdapterMessage &msg);
+    CStdString ToString(void) const;
+    CStdString MessageCodeAsString(void) const;
 
     bool                    empty(void) const             { return packet.empty(); }
     uint8_t                 operator[](uint8_t pos) const { return packet[pos]; }
     uint8_t                 at(uint8_t pos) const         { return packet[pos]; }
     uint8_t                 size(void) const              { return packet.size; }
-    void                    clear(void)                   { state = ADAPTER_MESSAGE_STATE_UNKNOWN; packet.clear(); }
+    void                    clear(void)                   { state = ADAPTER_MESSAGE_STATE_UNKNOWN; transmit_timeout = 0; packet.clear(); }
     void                    shift(uint8_t iShiftBy)       { packet.shift(iShiftBy); }
     void                    push_back(uint8_t add)        { packet.push_back(add); }
     cec_adapter_messagecode message(void) const           { return packet.size >= 1 ? (cec_adapter_messagecode) (packet.at(0) & ~(MSGCODE_FRAME_EOM | MSGCODE_FRAME_ACK))  : MSGCODE_NOTHING; }
@@ -68,17 +70,15 @@ namespace CEC
     bool                    ack(void) const               { return packet.size >= 1 ? (packet.at(0) & MSGCODE_FRAME_ACK) != 0 : false; }
     cec_logical_address     initiator(void) const         { return packet.size >= 2 ? (cec_logical_address) (packet.at(1) >> 4)  : CECDEVICE_UNKNOWN; };
     cec_logical_address     destination(void) const       { return packet.size >= 2 ? (cec_logical_address) (packet.at(1) & 0xF) : CECDEVICE_UNKNOWN; };
+    bool                    is_error(void) const;
     void                    push_escaped(int16_t byte);
 
     cec_datapacket            packet;
     cec_adapter_message_state state;
+    int32_t                   transmit_timeout;
     CMutex                    mutex;
     CCondition                condition;
-
-  private:
-    CCECAdapterMessage &operator =(const CCECAdapterMessage &msg);
   };
-  typedef boost::shared_ptr<CCECAdapterMessage> CCECAdapterMessagePtr;
 
   class CSerialPort;
   class CLibCEC;
@@ -91,7 +91,7 @@ namespace CEC
 
     bool Open(const char *strPort, uint16_t iBaudRate = 38400, uint32_t iTimeoutMs = 10000);
     bool Read(CCECAdapterMessage &msg, uint32_t iTimeout = 1000);
-    bool Write(CCECAdapterMessagePtr data);
+    bool Write(CCECAdapterMessage *data);
     bool PingAdapter(void);
     void Close(void);
     bool IsOpen(void) const;
@@ -100,7 +100,6 @@ namespace CEC
     void *Process(void);
 
     bool StartBootloader(void);
-    bool SetAckMask(uint16_t iMask);
 
   private:
     void WriteNextCommand(void);
@@ -110,7 +109,7 @@ namespace CEC
     CSerialPort *                    m_port;
     CLibCEC *                        m_controller;
     CecBuffer<uint8_t>               m_inBuffer;
-    CecBuffer<CCECAdapterMessagePtr> m_outBuffer;
+    CecBuffer<CCECAdapterMessage *>  m_outBuffer;
     CMutex                           m_mutex;
     CCondition                       m_rcvCondition;
     CCondition                       m_startCondition;