cec: added GetPortName() to CUSBCECAdapterCommunication
[deb_libcec.git] / src / lib / adapter / AdapterCommunication.h
CommitLineData
abbca718
LOK
1#pragma once
2/*
3 * This file is part of the libCEC(R) library.
4 *
b492c10e 5 * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved.
abbca718
LOK
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
ba65909d 34#include "../platform/util/StdString.h"
ef7696f5 35
abbca718
LOK
36namespace CEC
37{
7bb4ed43
LOK
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;
ef7696f5 48
b1f94db1
LOK
49 struct IAdapterCommunicationCallback
50 {
51 public:
52 /*!
53 * @brief Callback method for IAdapterCommunication, called when a new cec_command is received
54 * @param command The command that has been received
55 * @return True when it was handled by this listener, false otherwise.
56 */
57 virtual bool OnCommandReceived(const cec_command &command) = 0;
58 };
59
60 struct IAdapterCommunication
abbca718
LOK
61 {
62 public:
7bb4ed43
LOK
63 /*!
64 * @brief Open a connection to the CEC adapter
b1f94db1 65 * @param cb 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
7bb4ed43
LOK
66 * @param iTimeoutMs Connection timeout in ms
67 * @return True when connected, false otherwise
68 */
b1f94db1 69 virtual bool Open(IAdapterCommunicationCallback *cb, uint32_t iTimeoutMs = 10000) = 0;
7bb4ed43
LOK
70
71 /*!
72 * @brief Close an open connection
73 */
74 virtual void Close(void) = 0;
75
76 /*!
77 * @return True when the connection is open, false otherwise
78 */
79 virtual bool IsOpen(void) = 0;
80
81 /*!
82 * @return The last error message, or an empty string if there was none
83 */
84 virtual CStdString GetError(void) const = 0;
85
86 /*!
87 * @brief Reads one cec_command from the adapter
88 * @param command The command that will be read (output)
89 * @param iTimeout The read timeout
90 * @return True when a command has been read, false otherwise.
91 */
92 virtual bool Read(cec_command &command, uint32_t iTimeout) = 0;
ef7696f5 93
7bb4ed43
LOK
94 /*!
95 * @brief Write a cec_command to the adapter
96 * @param data The command to write
97 * @param iMaxTries The maximum number of tries
98 * @param iLineTimeout The line timeout for the first try
99 * @param iRetryLineTimeout The line timeout for each next try
100 * @return The last state of the transmitted command
101 */
102 virtual cec_adapter_message_state Write(const cec_command &data, uint8_t iMaxTries, uint8_t iLineTimeout = 3, uint8_t iRetryLineTimeout = 3) = 0;
ef7696f5 103
7bb4ed43
LOK
104 /*!
105 * @brief Change the current line timeout on the CEC bus
106 * @param iTimeout The new timeout
107 * @return True when set, false otherwise
108 */
109 virtual bool SetLineTimeout(uint8_t iTimeout) = 0;
ef7696f5 110
7bb4ed43
LOK
111 /*!
112 * @brief Put the device in bootloader mode (which will disrupt CEC communication when it succeeds)
113 * @return True when the bootloader command has been sent, false otherwise.
114 */
115 virtual bool StartBootloader(void) = 0;
ef7696f5 116
7bb4ed43
LOK
117 /*!
118 * @brief Change the ACK-mask of the device, the mask for logical addresses to which the CEC device should ACK
119 * @param iMask The new mask
120 * @return True when set, false otherwise.
121 */
122 virtual bool SetAckMask(uint16_t iMask) = 0;
6729ac71 123
7bb4ed43
LOK
124 /*!
125 * @brief Check whether the CEC adapter responds
126 * @return True when the ping was sent and acked, false otherwise.
127 */
128 virtual bool PingAdapter(void) = 0;
ef7696f5 129
7bb4ed43
LOK
130 /*!
131 * @return The firmware version of this CEC adapter.
132 */
133 virtual uint16_t GetFirmwareVersion(void) = 0;
b057edad
BL
134
135 /*!
136 * @return True when the control mode has been set, false otherwise.
137 */
138 virtual bool SetControlledMode(bool controlled) = 0;
224ea877
LOK
139
140 /*!
141 * @brief Persist the given configuration in adapter (if supported)
142 * @brief The configuration to store.
143 * @return True when the configuration was persisted, false otherwise.
144 */
145 virtual bool PersistConfiguration(libcec_configuration *configuration) = 0;
cba904a6
LOK
146
147 /*!
148 * @return The name of the port
149 */
150 virtual CStdString GetPortName(void) = 0;
abbca718
LOK
151 };
152};