/*
* 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
{
/*!
* @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.
/*!
* @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.
// 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);
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);
// 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 ¶m);
- virtual void AddLog(const cec_log_message &message);
- virtual void AddKey(void);
+ virtual void Alert(const libcec_alert type, const libcec_parameter ¶m) { 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:
/*!
* @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.
*/
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.
*/
virtual bool AutodetectPhysicalAddress(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 */
+ /*!
+ * @brief Replaces all device types in m_configuration by types that are supported by the command handler of the TV
+ */
+ virtual void SetSupportedDeviceTypes(void);
+
+ 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 ¶m);
+ 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);
+
+ 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 */
};
}