- CAdapterCommunication(CCECProcessor *processor);
- virtual ~CAdapterCommunication();
-
- bool Open(const char *strPort, uint16_t iBaudRate = 38400, uint32_t iTimeoutMs = 10000);
- bool Read(CCECAdapterMessage &msg, uint32_t iTimeout = 1000);
- bool Write(CCECAdapterMessage *data);
- bool PingAdapter(void);
- void Close(void);
- bool IsOpen(void);
- std::string GetError(void) const;
-
- void *Process(void);
-
- bool SetLineTimeout(uint8_t iTimeout);
- bool StartBootloader(void);
-
- private:
- void SendMessageToAdapter(CCECAdapterMessage *msg);
- void WriteNextCommand(void);
- void AddData(uint8_t *data, uint8_t iLen);
- bool ReadFromDevice(uint32_t iTimeout);
-
- PLATFORM::CSerialPort * m_port;
- CCECProcessor * m_processor;
- PLATFORM::SyncedBuffer<uint8_t> m_inBuffer;
- PLATFORM::SyncedBuffer<CCECAdapterMessage *> m_outBuffer;
- PLATFORM::CMutex m_mutex;
- PLATFORM::CCondition m_rcvCondition;
- uint8_t m_iLineTimeout;
+ /*!
+ * @param callback The callback struct. if set to NULL, the Read() method has to be used to read commands. if set, OnCommandReceived() will be called for each command that was received
+ */
+ IAdapterCommunication(IAdapterCommunicationCallback *callback) :
+ m_callback(callback) {}
+ virtual ~IAdapterCommunication(void) {}
+
+ /*!
+ * @brief Open a connection to the CEC adapter
+ * @param iTimeoutMs Connection timeout in ms
+ * @param bSkipChecks Skips all initial checks of the adapter, and starts the reader/writer threads directly after connecting.
+ * @param bStartListening Start a listener thread when true. False to just open a connection, read the device info, and close the connection.
+ * @return True when connected, false otherwise
+ */
+ virtual bool Open(uint32_t iTimeoutMs = CEC_DEFAULT_CONNECT_TIMEOUT, bool bSkipChecks = false, bool bStartListening = true) = 0;
+
+ /*!
+ * @brief Close an open connection
+ */
+ virtual void Close(void) = 0;
+
+ /*!
+ * @return True when the connection is open, false otherwise
+ */
+ virtual bool IsOpen(void) = 0;
+
+ /*!
+ * @return The last error message, or an empty string if there was none
+ */
+ virtual CStdString GetError(void) const = 0;
+
+ /*!
+ * @brief Write a cec_command to the adapter
+ * @param data The command to write
+ * @param bRetry The command can be retried
+ * @param iLineTimeout The line timeout to be used
+ * @return The last state of the transmitted command
+ */
+ virtual cec_adapter_message_state Write(const cec_command &data, bool &bRetry, uint8_t iLineTimeout = 3) = 0;
+
+ /*!
+ * @brief Change the current line timeout on the CEC bus
+ * @param iTimeout The new timeout
+ * @return True when set, false otherwise
+ */
+ virtual bool SetLineTimeout(uint8_t iTimeout) = 0;
+
+ /*!
+ * @brief Put the device in bootloader mode (which will disrupt CEC communication when it succeeds)
+ * @return True when the bootloader command has been sent, false otherwise.
+ */
+ virtual bool StartBootloader(void) = 0;
+
+ /*!
+ * @brief Change the ACK-mask of the device, the mask for logical addresses to which the CEC device should ACK
+ * @param iMask The new mask
+ * @return True when set, false otherwise.
+ */
+ virtual bool SetAckMask(uint16_t iMask) = 0;
+ virtual uint16_t GetAckMask(void) = 0;
+
+ /*!
+ * @brief Check whether the CEC adapter responds
+ * @return True when the ping was sent and acked, false otherwise.
+ */
+ virtual bool PingAdapter(void) = 0;
+
+ /*!
+ * @return The firmware version of this CEC adapter, or 0 if it's unknown.
+ */
+ virtual uint16_t GetFirmwareVersion(void) = 0;
+
+ /*!
+ * @return The build date in seconds since epoch, or 0 when no (valid) reply was received.
+ */
+ virtual uint32_t GetFirmwareBuildDate(void) = 0;
+
+ /*!
+ * @return True when this adapter is using the latest firmware build, or when the latest firmware build for this adapter type is unknown. False otherwise.
+ */
+ virtual bool IsRunningLatestFirmware(void) = 0;
+
+ /*!
+ * @return True when the control mode has been set, false otherwise.
+ */
+ virtual bool SetControlledMode(bool controlled) = 0;
+
+ /*!
+ * @brief Persist the given configuration in adapter (if supported)
+ * @brief The configuration to store.
+ * @return True when the configuration was persisted, false otherwise.
+ */
+ virtual bool PersistConfiguration(const libcec_configuration &configuration) = 0;
+
+ /*!
+ * @brief Get the persisted configuration from the adapter (if supported)
+ * @param configuration The updated configuration.
+ * @return True when the configuration was updated, false otherwise.
+ */
+ virtual bool GetConfiguration(libcec_configuration &configuration) = 0;
+
+ /*!
+ * @return The name of the port
+ */
+ virtual CStdString GetPortName(void) = 0;
+
+ /*!
+ * @return The physical address, if the adapter supports this. 0 otherwise.
+ */
+ virtual uint16_t GetPhysicalAddress(void) = 0;
+
+ IAdapterCommunicationCallback *m_callback;