36a9bb1d434356bd304afc86119f35347e6af0c4
[deb_libcec.git] / src / lib / adapter / AdapterCommunication.h
1 #pragma once
2 /*
3 * This file is part of the libCEC(R) library.
4 *
5 * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved.
6 * libCEC(R) is an original work, containing original code.
7 *
8 * libCEC(R) is a trademark of Pulse-Eight Limited.
9 *
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.
14 *
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.
19 *
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.
23 *
24 *
25 * Alternatively, you can license this library under a commercial license,
26 * please contact Pulse-Eight Licensing for more information.
27 *
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/
32 */
33
34 #include "../platform/util/StdString.h"
35
36 namespace CEC
37 {
38 typedef enum cec_adapter_message_state
39 {
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;
48
49 class IAdapterCommunication
50 {
51 public:
52 /*!
53 * @brief Open a connection to the CEC adapter
54 * @param iTimeoutMs Connection timeout in ms
55 * @return True when connected, false otherwise
56 */
57 virtual bool Open(uint32_t iTimeoutMs = 10000) = 0;
58
59 /*!
60 * @brief Close an open connection
61 */
62 virtual void Close(void) = 0;
63
64 /*!
65 * @return True when the connection is open, false otherwise
66 */
67 virtual bool IsOpen(void) = 0;
68
69 /*!
70 * @return The last error message, or an empty string if there was none
71 */
72 virtual CStdString GetError(void) const = 0;
73
74 /*!
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.
79 */
80 virtual bool Read(cec_command &command, uint32_t iTimeout) = 0;
81
82 /*!
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
89 */
90 virtual cec_adapter_message_state Write(const cec_command &data, uint8_t iMaxTries, uint8_t iLineTimeout = 3, uint8_t iRetryLineTimeout = 3) = 0;
91
92 /*!
93 * @brief Change the current line timeout on the CEC bus
94 * @param iTimeout The new timeout
95 * @return True when set, false otherwise
96 */
97 virtual bool SetLineTimeout(uint8_t iTimeout) = 0;
98
99 /*!
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.
102 */
103 virtual bool StartBootloader(void) = 0;
104
105 /*!
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.
109 */
110 virtual bool SetAckMask(uint16_t iMask) = 0;
111
112 /*!
113 * @brief Check whether the CEC adapter responds
114 * @return True when the ping was sent and acked, false otherwise.
115 */
116 virtual bool PingAdapter(void) = 0;
117
118 /*!
119 * @return The firmware version of this CEC adapter.
120 */
121 virtual uint16_t GetFirmwareVersion(void) = 0;
122
123 /*!
124 * @return True when the control mode has been set, false otherwise.
125 */
126 virtual bool SetControlledMode(bool controlled) = 0;
127 };
128 };