don't crash on exit in cectray by preventing a new action from being started
[deb_libcec.git] / src / lib / adapter / Pulse-Eight / USBCECAdapterCommands.h
1 #pragma once
2 /*
3 * This file is part of the libCEC(R) library.
4 *
5 * libCEC(R) is Copyright (C) 2011-2013 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 "lib/platform/threads/mutex.h"
35 #include "USBCECAdapterMessage.h"
36
37 namespace CEC
38 {
39 class CUSBCECAdapterCommunication;
40
41 class CUSBCECAdapterCommands
42 {
43 public:
44 CUSBCECAdapterCommands(CUSBCECAdapterCommunication *comm);
45
46 /*!
47 * @brief Request the firmware version from the adapter.
48 * @return The firmware version, or 1 (default) if it couldn't be retrieved.
49 */
50 uint16_t RequestFirmwareVersion(void);
51
52 /*!
53 * @return The firmware version of the adapter, retrieved when the connection is opened.
54 */
55 uint16_t GetFirmwareVersion(void) const { return m_persistedConfiguration.iFirmwareVersion; };
56
57 /*!
58 * @brief Update the current configuration in the adapter. Does not do an eeprom update.
59 * @attention Not all settings are persisted at this time.
60 * @param configuration The configuration to persist.
61 * @return True when something changed, false otherwise.
62 */
63 bool PersistConfiguration(const libcec_configuration &configuration);
64
65 /*!
66 * @brief Get the persisted configuration from the EEPROM.
67 * @param configuration The persisted configuration.
68 * @return True when retrieved, false otherwise.
69 */
70 bool GetConfiguration(libcec_configuration &configuration);
71
72 /*!
73 * @brief Send a ping command to the adapter.
74 * @return True when acked by the adapter, false otherwise.
75 */
76 bool PingAdapter(void);
77
78 /*!
79 * @brief Change the ackmask of the adapter.
80 * @param iMask The new mask.
81 * @return True when the change was acked by the adapter, false otherwise.
82 */
83 bool SetAckMask(uint16_t iMask);
84
85 /*!
86 * @brief Put the adapter in bootloader mode.
87 * @attention The connection needs to be closed after this call, since the adapter will no longer be available.
88 * @return True when the command was sent, false otherwise.
89 */
90 bool StartBootloader(void);
91
92 /*!
93 * @brief Change the current CEC line timeout.
94 * @param iTimeout The new timeout.
95 * @return True when the change was acked by the adapter, false otherwise.
96 */
97 bool SetLineTimeout(uint8_t iTimeout);
98
99 /*!
100 * @brief Put the adapter in controlled or autonomous mode.
101 * @param controlled True to switch to controlled mode, false to switch to auto mode.
102 * @return True when acked by the controller, false otherwise.
103 */
104 bool SetControlledMode(bool controlled);
105
106 /*!
107 * @brief Request the firmware build date from the device.
108 * @return The build date in seconds since epoch, or 0 when no (valid) reply was received.
109 */
110 uint32_t RequestBuildDate(void);
111
112 /*!
113 * @return The persisted build date.
114 */
115 uint32_t GetPersistedBuildDate(void) const { return m_iBuildDate; };
116
117 /*!
118 * @brief Request the adapter type.
119 * @return The type
120 */
121 p8_cec_adapter_type RequestAdapterType(void);
122
123 /*!
124 * @return The persisted build date.
125 */
126 p8_cec_adapter_type GetPersistedAdapterType(void) const { return m_adapterType; };
127
128 /*!
129 * @brief Persist the current settings in the EEPROM
130 * @return True when persisted, false otherwise.
131 */
132 bool WriteEEPROM(void);
133
134 void SetActiveSource(bool bSetTo, bool bClientUnregistered);
135
136 private:
137 /*!
138 * @brief Reads all settings from the eeprom.
139 * @return True when read, false otherwise.
140 */
141 bool RequestSettings(void);
142
143 /*!
144 * @brief Request a setting value from the adapter.
145 * @param msgCode The setting to retrieve.
146 * @return The response from the adapter.
147 */
148 cec_datapacket RequestSetting(cec_adapter_messagecode msgCode);
149
150 /*!
151 * @brief Change the value of the "auto enabled" setting.
152 * @param enabled The new value.
153 * @return True when changed and set, false otherwise.
154 */
155 bool SetSettingAutoEnabled(bool enabled);
156
157 /*!
158 * @brief Request the value of the "auto enabled" setting from the adapter.
159 * @return True when retrieved, false otherwise.
160 */
161 bool RequestSettingAutoEnabled(void);
162
163 /*!
164 * @brief Change the value of the "device type" setting, used when the device is in autonomous mode.
165 * @param type The new value.
166 * @return True when changed and set, false otherwise.
167 */
168 bool SetSettingDeviceType(cec_device_type type);
169
170 /*!
171 * @brief Request the value of the "device type" setting from the adapter.
172 * @return True when retrieved, false otherwise.
173 */
174 bool RequestSettingDeviceType(void);
175
176 /*!
177 * @brief Change the value of the "default logical address" setting, used when the device is in autonomous mode.
178 * @param address The new value.
179 * @return True when changed and set, false otherwise.
180 */
181 bool SetSettingDefaultLogicalAddress(cec_logical_address address);
182
183 /*!
184 * @brief Request the value of the "default logical address" setting from the adapter.
185 * @return True when retrieved, false otherwise.
186 */
187 bool RequestSettingDefaultLogicalAddress(void);
188
189 /*!
190 * @brief Change the value of the "logical address mask" setting, used when the device is in autonomous mode.
191 * @param iMask The new value.
192 * @return True when changed and set, false otherwise.
193 */
194 bool SetSettingLogicalAddressMask(uint16_t iMask);
195
196 /*!
197 * @brief Request the value of the "logical address mask" setting from the adapter.
198 * @return True when retrieved, false otherwise.
199 */
200 bool RequestSettingLogicalAddressMask(void);
201
202 /*!
203 * @brief Change the value of the "physical address" setting, used when the device is in autonomous mode.
204 * @param iPhysicalAddress The new value.
205 * @return True when changed and set, false otherwise.
206 */
207 bool SetSettingPhysicalAddress(uint16_t iPhysicalAddress);
208
209 /*!
210 * @brief Request the value of the "physical address" setting from the adapter.
211 * @return True when retrieved, false otherwise.
212 */
213 bool RequestSettingPhysicalAddress(void);
214
215 /*!
216 * @brief Change the value of the "CEC version" setting, used when the device is in autonomous mode.
217 * @param version The new value.
218 * @return True when changed and set, false otherwise.
219 */
220 bool SetSettingCECVersion(cec_version version);
221
222 /*!
223 * @brief Request the value of the "CEC version" setting from the adapter.
224 * @return True when retrieved, false otherwise.
225 */
226 bool RequestSettingCECVersion(void);
227
228 /*!
229 * @brief Change the value of the "OSD name" setting, used when the device is in autonomous mode.
230 * @param strOSDName The new value.
231 * @return True when set, false otherwise.
232 */
233 bool SetSettingOSDName(const char *strOSDName);
234
235 /*!
236 * @brief Request the value of the "OSD name" setting from the adapter.
237 * @return True when retrieved, false otherwise.
238 */
239 bool RequestSettingOSDName(void);
240
241 CUSBCECAdapterCommunication *m_comm; /**< the communication handler */
242 bool m_bSettingsRetrieved; /**< true when the settings were read from the eeprom, false otherwise */
243 bool m_bSettingAutoEnabled; /**< the value of the auto-enabled setting */
244 cec_version m_settingCecVersion; /**< the value of the cec version setting */
245 uint16_t m_iSettingLAMask; /**< the value of the LA mask setting */
246 bool m_bNeedsWrite; /**< true when we sent changed settings to the adapter that have not been persisted */
247 libcec_configuration m_persistedConfiguration; /**< the configuration that is persisted in the eeprom */
248 uint32_t m_iBuildDate; /**< the build date of the firmware */
249 bool m_bControlledMode; /**< current value of the controlled mode feature */
250 p8_cec_adapter_type m_adapterType; /**< the type of the adapter that we're connected to */
251 PLATFORM::CMutex m_mutex;
252 };
253 }