backwards compatibility for older client versions and the new double tap timeout...
[deb_libcec.git] / src / lib / CECClient.h
index 87a4b7fbaf071d9067ea897dc1ca8f9ac1fb7233..3ef0453ccae8a1b916881cf6e5b22bcbc6ae1c5e 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * This file is part of the libCEC(R) library.
  *
- * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited.  All rights reserved.
+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited.  All rights reserved.
  * libCEC(R) is an original work, containing original code.
  *
  * libCEC(R) is a trademark of Pulse-Eight Limited.
  *     http://www.pulse-eight.net/
  */
 
-#include "../../include/cectypes.h"
+#include <string>
 #include "platform/threads/mutex.h"
 #include "platform/util/buffer.h"
 
-#include "devices/CECBusDevice.h"
-
 namespace CEC
 {
   class CCECProcessor;
+  class CCECBusDevice;
+  class CCECPlaybackDevice;
 
   class CCECClient
   {
@@ -97,7 +97,7 @@ namespace CEC
     /*!
      * @return A string that describes this client.
      */
-    virtual CStdString GetConnectionInfo(void);
+    virtual std::string GetConnectionInfo(void);
 
     /*!
      * @return The current value of the TV vendor override setting.
@@ -107,7 +107,7 @@ namespace CEC
     /*!
      * @return The current value of the OSD name setting.
      */
-    virtual CStdString GetOSDName(void);
+    virtual std::string GetOSDName(void);
 
     /*!
      * @return Get the current value of the wake device setting.
@@ -127,10 +127,7 @@ namespace CEC
     // client-specific part of ICECAdapter
     virtual bool                  EnableCallbacks(void *cbParam, ICECCallbacks *callbacks);
     virtual bool                  PingAdapter(void);
-    virtual bool                  GetNextLogMessage(cec_log_message *message); /**< @deprecated will be removed in v2.0 */
-    virtual bool                  GetNextKeypress(cec_keypress *key);          /**< @deprecated will be removed in v2.0 */
-    virtual bool                  GetNextCommand(cec_command *command);        /**< @deprecated will be removed in v2.0 */
-    virtual bool                  Transmit(const cec_command &data);
+    virtual bool                  Transmit(const cec_command &data, bool bIsReply);
     virtual bool                  SetLogicalAddress(const cec_logical_address iLogicalAddress);
     virtual bool                  SetPhysicalAddress(const uint16_t iPhysicalAddress);
     virtual bool                  SetHDMIPort(const cec_logical_address iBaseDevice, const uint8_t iPort, bool bForce = false);
@@ -155,6 +152,10 @@ namespace CEC
     virtual uint8_t               SendVolumeUp(bool bSendRelease = true);
     virtual uint8_t               SendVolumeDown(bool bSendRelease = true);
     virtual uint8_t               SendMuteAudio(void);
+    virtual uint8_t               AudioToggleMute(void);
+    virtual uint8_t               AudioMute(void);
+    virtual uint8_t               AudioUnmute(void);
+    virtual uint8_t               AudioStatus(void);
     virtual bool                  SendKeypress(const cec_logical_address iDestination, const cec_user_control_code key, bool bWait = true);
     virtual bool                  SendKeyRelease(const cec_logical_address iDestination, bool bWait = true);
     virtual cec_osd_name          GetDeviceOSDName(const cec_logical_address iAddress);
@@ -176,12 +177,14 @@ namespace CEC
     // callbacks
     virtual void                  AddCommand(const cec_command &command);
     virtual int                   MenuStateChanged(const cec_menu_state newState);
-    virtual void                  Alert(const libcec_alert type, const libcec_parameter &param);
-    virtual void                  AddLog(const cec_log_message &message);
-    virtual void                  AddKey(void);
+    virtual void                  Alert(const libcec_alert type, const libcec_parameter &param) { CallbackAlert(type, param); }
+    virtual void                  AddLog(const cec_log_message &message) { CallbackAddLog(message); }
+    virtual void                  AddKey(bool bSendComboKey = false);
     virtual void                  AddKey(const cec_keypress &key);
     virtual void                  SetCurrentButton(const cec_user_control_code iButtonCode);
     virtual void                  CheckKeypressTimeout(void);
+    virtual void                  SourceActivated(const cec_logical_address logicalAddress);
+    virtual void                  SourceDeactivated(const cec_logical_address logicalAddress);
 
   protected:
     /*!
@@ -217,7 +220,7 @@ namespace CEC
      * @brief Change the OSD name of the primary device that this client is controlling.
      * @param strDeviceName The new value.
      */
-    virtual void SetOSDName(const CStdString &strDeviceName);
+    virtual void SetOSDName(const std::string &strDeviceName);
 
     /*!
      * @brief Change the value of the devices to wake.
@@ -280,12 +283,6 @@ namespace CEC
      */
     virtual bool SetDevicePhysicalAddress(const uint16_t iPhysicalAddress);
 
-    /*!
-     * @brief Called when the configuration changed and needs to be sent back to the client.
-     * @param config The new configuration.
-     */
-    virtual void ConfigurationChanged(const libcec_configuration &config);
-
     /*!
      * @brief Try to autodetect the physical address.
      * @return True when autodetected (and set in m_configuration), false otherwise.
@@ -297,16 +294,26 @@ namespace CEC
      */
     virtual void SetSupportedDeviceTypes(void);
 
-    CCECProcessor *                         m_processor;      /**< a pointer to the processor */
-    libcec_configuration                    m_configuration;  /**< the configuration of this client */
-    bool                                    m_bInitialised;   /**< true when initialised, false otherwise */
-    bool                                    m_bRegistered;    /**< true when registered in the processor, false otherwise */
-    PLATFORM::CMutex                        m_mutex;          /**< mutex for changes to this instance */
-    PLATFORM::CMutex                        m_logMutex;       /**< mutex that is held when sending a log message back to the client */
-    cec_user_control_code                   m_iCurrentButton; /**< the control code of the button that's currently held down (if any) */
-    int64_t                                 m_buttontime;     /**< the timestamp when the button was pressed (in seconds since epoch), or 0 if none was pressed. */
-    PLATFORM::SyncedBuffer<cec_log_message> m_logBuffer;      /**< @deprecated will be removed in v2.0. buffer for log messages */
-    PLATFORM::SyncedBuffer<cec_keypress>    m_keyBuffer;      /**< @deprecated will be removed in v2.0. buffer for keypresses */
-    PLATFORM::SyncedBuffer<cec_command>     m_commandBuffer;  /**< @deprecated will be removed in v2.0. buffer for commands */
+    virtual void CallbackAddCommand(const cec_command &command);
+    virtual void CallbackAddKey(const cec_keypress &key);
+    virtual void CallbackAddLog(const cec_log_message &message);
+    virtual void CallbackAlert(const libcec_alert type, const libcec_parameter &param);
+    virtual void CallbackConfigurationChanged(const libcec_configuration &config);
+    virtual int  CallbackMenuStateChanged(const cec_menu_state newState);
+    virtual void CallbackSourceActivated(bool bActivated, const cec_logical_address logicalAddress);
+
+    uint32_t DoubleTapTimeoutMS(void);
+
+    CCECProcessor *       m_processor;                         /**< a pointer to the processor */
+    libcec_configuration  m_configuration;                     /**< the configuration of this client */
+    bool                  m_bInitialised;                      /**< true when initialised, false otherwise */
+    bool                  m_bRegistered;                       /**< true when registered in the processor, false otherwise */
+    PLATFORM::CMutex      m_mutex;                             /**< mutex for changes to this instance */
+    PLATFORM::CMutex      m_cbMutex;                           /**< mutex that is held when doing anything with callbacks */
+    cec_user_control_code m_iCurrentButton;                    /**< the control code of the button that's currently held down (if any) */
+    int64_t               m_buttontime;                        /**< the timestamp when the button was pressed (in seconds since epoch), or 0 if none was pressed. */
+    int64_t               m_iPreventForwardingPowerOffCommand; /**< prevent forwarding standby commands until this time */
+    int64_t               m_iLastKeypressTime;                 /**< last time a key press was sent to the client */
+    cec_keypress          m_lastKeypress;                      /**< the last key press that was sent to the client */
   };
 }