3 * This file is part of the libCEC(R) library.
5 * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved.
6 * libCEC(R) is an original work, containing original code.
8 * libCEC(R) is a trademark of Pulse-Eight Limited.
10 * This program is dual-licensed; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 * Alternatively, you can license this library under a commercial license,
26 * please contact Pulse-Eight Licensing for more information.
28 * For more information contact:
29 * Pulse-Eight Licensing <license@pulse-eight.com>
30 * http://www.pulse-eight.com/
31 * http://www.pulse-eight.net/
34 #include "../platform/util/StdString.h"
38 typedef enum cec_adapter_message_state
40 ADAPTER_MESSAGE_STATE_UNKNOWN
= 0, /**< the initial state */
41 ADAPTER_MESSAGE_STATE_WAITING_TO_BE_SENT
, /**< waiting in the send queue of the adapter, or timed out */
42 ADAPTER_MESSAGE_STATE_SENT
, /**< sent and waiting on an ACK */
43 ADAPTER_MESSAGE_STATE_SENT_NOT_ACKED
, /**< sent, but failed to ACK */
44 ADAPTER_MESSAGE_STATE_SENT_ACKED
, /**< sent, and ACK received */
45 ADAPTER_MESSAGE_STATE_INCOMING
, /**< received from another device */
46 ADAPTER_MESSAGE_STATE_ERROR
/**< an error occured */
47 } cec_adapter_message_state
;
49 class IAdapterCommunication
53 * @brief Open a connection to the CEC adapter
54 * @param iTimeoutMs Connection timeout in ms
55 * @return True when connected, false otherwise
57 virtual bool Open(uint32_t iTimeoutMs
= 10000) = 0;
60 * @brief Close an open connection
62 virtual void Close(void) = 0;
65 * @return True when the connection is open, false otherwise
67 virtual bool IsOpen(void) = 0;
70 * @return The last error message, or an empty string if there was none
72 virtual CStdString
GetError(void) const = 0;
75 * @brief Reads one cec_command from the adapter
76 * @param command The command that will be read (output)
77 * @param iTimeout The read timeout
78 * @return True when a command has been read, false otherwise.
80 virtual bool Read(cec_command
&command
, uint32_t iTimeout
) = 0;
83 * @brief Write a cec_command to the adapter
84 * @param data The command to write
85 * @param iMaxTries The maximum number of tries
86 * @param iLineTimeout The line timeout for the first try
87 * @param iRetryLineTimeout The line timeout for each next try
88 * @return The last state of the transmitted command
90 virtual cec_adapter_message_state
Write(const cec_command
&data
, uint8_t iMaxTries
, uint8_t iLineTimeout
= 3, uint8_t iRetryLineTimeout
= 3) = 0;
93 * @brief Change the current line timeout on the CEC bus
94 * @param iTimeout The new timeout
95 * @return True when set, false otherwise
97 virtual bool SetLineTimeout(uint8_t iTimeout
) = 0;
100 * @brief Put the device in bootloader mode (which will disrupt CEC communication when it succeeds)
101 * @return True when the bootloader command has been sent, false otherwise.
103 virtual bool StartBootloader(void) = 0;
106 * @brief Change the ACK-mask of the device, the mask for logical addresses to which the CEC device should ACK
107 * @param iMask The new mask
108 * @return True when set, false otherwise.
110 virtual bool SetAckMask(uint16_t iMask
) = 0;
113 * @brief Check whether the CEC adapter responds
114 * @return True when the ping was sent and acked, false otherwise.
116 virtual bool PingAdapter(void) = 0;
119 * @return The firmware version of this CEC adapter.
121 virtual uint16_t GetFirmwareVersion(void) = 0;
124 * @return True when the control mode has been set, false otherwise.
126 virtual bool SetControlledMode(bool controlled
) = 0;