Commit | Line | Data |
---|---|---|
acec5f48 LOK |
1 | #pragma once |
2 | /* | |
3 | * This file is part of the libCEC(R) library. | |
4 | * | |
16f47961 | 5 | * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. |
acec5f48 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 | ||
34 | #ifndef CECTYPES_H_ | |
35 | #define CECTYPES_H_ | |
36 | ||
37 | #include <stdint.h> | |
38 | #include <string.h> | |
acec5f48 | 39 | |
761ccce0 | 40 | #if defined(_WIN32) || defined(_WIN64) |
77398db9 | 41 | #define CEC_CDECL __cdecl |
761ccce0 | 42 | #else |
77398db9 | 43 | #define CEC_CDECL |
761ccce0 LOK |
44 | #endif |
45 | ||
acec5f48 LOK |
46 | #if !defined(DECLSPEC) |
47 | #if defined(_WIN32) || defined(_WIN64) | |
48 | #include <windows.h> | |
49 | #if defined DLL_EXPORT | |
50 | #define DECLSPEC __declspec(dllexport) | |
51 | #else | |
52 | #define DECLSPEC __declspec(dllimport) | |
53 | #endif | |
54 | #else | |
55 | #define DECLSPEC | |
56 | #endif | |
57 | #endif | |
58 | ||
cb915777 LOK |
59 | #ifdef __cplusplus |
60 | extern "C" { | |
61 | namespace CEC { | |
62 | #endif | |
63 | ||
96692e30 LOK |
64 | /*! |
65 | * default physical address 1.0.0.0, HDMI port 1 | |
66 | */ | |
5ae8fa48 | 67 | #define CEC_DEFAULT_PHYSICAL_ADDRESS 0x1000 |
96692e30 LOK |
68 | /*! |
69 | * default HDMI port to which the adapter is connected, port 1 | |
70 | */ | |
16b1e052 | 71 | #define CEC_DEFAULT_HDMI_PORT 1 |
96692e30 LOK |
72 | /*! |
73 | * default logical address of the device to which the adapter is connected, TV | |
74 | */ | |
d2f1c157 | 75 | #define CEC_DEFAULT_BASE_DEVICE 0 |
96692e30 LOK |
76 | |
77 | /*! | |
78 | * timeout in milliseconds to send a key release event after receiving a key press | |
79 | */ | |
5ae8fa48 | 80 | #define CEC_BUTTON_TIMEOUT 500 |
96692e30 | 81 | |
dbf90acf LOK |
82 | /*! |
83 | * don't send the same key twice within this timeout in milliseconds | |
84 | */ | |
f4d62a65 | 85 | #define CEC_DOUBLE_TAP_TIMEOUT_MS 250 |
dbf90acf | 86 | |
96692e30 LOK |
87 | /*! |
88 | * don't query the power state for the same device within this timeout in milliseconds | |
89 | */ | |
2efa39b7 | 90 | #define CEC_POWER_STATE_REFRESH_TIME 30000 |
96692e30 LOK |
91 | |
92 | /*! | |
93 | * unknown firmware version value | |
94 | */ | |
1fc16cfd | 95 | #define CEC_FW_VERSION_UNKNOWN 0xFFFF |
96692e30 LOK |
96 | |
97 | /*! | |
98 | * unknown build date value | |
99 | */ | |
d2d1660c | 100 | #define CEC_FW_BUILD_UNKNOWN 0 |
96692e30 LOK |
101 | |
102 | /*! | |
103 | * maximum number of retries when opening a connection | |
104 | */ | |
3b5e433a | 105 | #define CEC_CONNECT_TRIES 3 |
64ec6e79 | 106 | |
96692e30 LOK |
107 | /*! |
108 | * physical address of the TV | |
109 | */ | |
b32ffd87 | 110 | #define CEC_PHYSICAL_ADDRESS_TV 0 |
96692e30 LOK |
111 | |
112 | /*! | |
113 | * minimum physical address for the adapter | |
114 | */ | |
d2d1660c | 115 | #define CEC_MIN_PHYSICAL_ADDRESS 0x1000 |
96692e30 LOK |
116 | |
117 | /*! | |
118 | * maximum physical address for the adapter | |
119 | */ | |
b32ffd87 | 120 | #define CEC_MAX_PHYSICAL_ADDRESS 0xFFFE |
96692e30 LOK |
121 | |
122 | /*! | |
123 | * invalid physical address value | |
124 | */ | |
b32ffd87 | 125 | #define CEC_INVALID_PHYSICAL_ADDRESS 0xFFFF |
5ae8fa48 | 126 | |
96692e30 LOK |
127 | /*! |
128 | * minimum vendor ID value | |
129 | */ | |
64ec6e79 | 130 | #define CEC_MIN_VENDORID 1 |
96692e30 LOK |
131 | |
132 | /*! | |
133 | * maximum vendor ID value | |
134 | */ | |
64ec6e79 | 135 | #define CEC_MAX_VENDORID 0xFFFFFE |
96692e30 LOK |
136 | |
137 | /*! | |
138 | * invalid vendor ID value | |
139 | */ | |
64ec6e79 LOK |
140 | #define CEC_INVALID_VENDORID 0xFFFFFF |
141 | ||
96692e30 LOK |
142 | /*! |
143 | * minimum HDMI port number value | |
144 | */ | |
64ec6e79 | 145 | #define CEC_MIN_HDMI_PORTNUMBER 1 |
96692e30 LOK |
146 | |
147 | /*! | |
148 | * maximum HDMI port number value | |
149 | */ | |
64ec6e79 | 150 | #define CEC_MAX_HDMI_PORTNUMBER 15 |
96692e30 LOK |
151 | |
152 | /*! | |
153 | * invalid HDMI port number value | |
154 | */ | |
d2d1660c | 155 | #define CEC_HDMI_PORTNUMBER_NONE 0 |
64ec6e79 | 156 | |
96692e30 LOK |
157 | /*! |
158 | * default value for settings "use tv menu language" | |
159 | */ | |
7f274e72 | 160 | #define CEC_DEFAULT_SETTING_USE_TV_MENU_LANGUAGE 1 |
96692e30 LOK |
161 | |
162 | /*! | |
163 | * default value for settings "activate source" | |
164 | */ | |
7f274e72 | 165 | #define CEC_DEFAULT_SETTING_ACTIVATE_SOURCE 1 |
96692e30 LOK |
166 | |
167 | /*! | |
168 | * default value for settings "power off on shutdown" | |
169 | */ | |
7f274e72 | 170 | #define CEC_DEFAULT_SETTING_POWER_OFF_SHUTDOWN 1 |
96692e30 LOK |
171 | |
172 | /*! | |
173 | * default value for settings "power off when activating the screensaver" | |
174 | */ | |
7f274e72 | 175 | #define CEC_DEFAULT_SETTING_POWER_OFF_SCREENSAVER 1 |
96692e30 | 176 | |
d18ea27b JM |
177 | /*! |
178 | * default value for settings "wake up when deactivating the screensaver" | |
179 | */ | |
180 | #define CEC_DEFAULT_SETTING_POWER_ON_SCREENSAVER 1 | |
181 | ||
96692e30 LOK |
182 | /*! |
183 | * default value for settings "power off on standby" | |
184 | */ | |
7f274e72 | 185 | #define CEC_DEFAULT_SETTING_POWER_OFF_ON_STANDBY 1 |
96692e30 LOK |
186 | |
187 | /*! | |
188 | * default value for settings "shutdown on standby" | |
189 | */ | |
7f274e72 | 190 | #define CEC_DEFAULT_SETTING_SHUTDOWN_ON_STANDBY 0 |
96692e30 LOK |
191 | |
192 | /*! | |
193 | * default value for settings "send inactive source when stopping" | |
194 | */ | |
7f274e72 | 195 | #define CEC_DEFAULT_SETTING_SEND_INACTIVE_SOURCE 1 |
96692e30 LOK |
196 | |
197 | /*! | |
198 | * default value for settings "power off devices when going to standby" | |
199 | */ | |
b98fc43d | 200 | #define CEC_DEFAULT_SETTING_POWER_OFF_DEVICES_STANDBY 1 |
96692e30 LOK |
201 | |
202 | /*! | |
203 | * default value for settings "device menu language" | |
204 | */ | |
7f274e72 | 205 | #define CEC_DEFAULT_DEVICE_LANGUAGE "eng" |
96692e30 LOK |
206 | |
207 | /*! | |
208 | * default value for settings "autodetect physical address" | |
209 | */ | |
20be20ea | 210 | #define CEC_DEFAULT_SETTING_AUTODETECT_ADDRESS 0 |
96692e30 LOK |
211 | |
212 | /*! | |
213 | * default value for settings "get settings from ROM" | |
214 | */ | |
64ec6e79 | 215 | #define CEC_DEFAULT_SETTING_GET_SETTINGS_FROM_ROM 0 |
96692e30 LOK |
216 | |
217 | /*! | |
218 | * default value for settings "libCEC CEC version" | |
219 | */ | |
2b44051c | 220 | #define CEC_DEFAULT_SETTING_CEC_VERSION 0x05 |
224ea877 | 221 | |
96692e30 LOK |
222 | /*! |
223 | * wait this amount of milliseconds before retrying to send a failed message | |
224 | */ | |
4478bc79 | 225 | #define CEC_DEFAULT_TRANSMIT_RETRY_WAIT 500 |
96692e30 LOK |
226 | |
227 | /*! | |
228 | * transmission fails when not acked within this amount of milliseconds after sending the initial packet | |
229 | */ | |
4478bc79 | 230 | #define CEC_DEFAULT_TRANSMIT_TIMEOUT 1000 |
96692e30 LOK |
231 | |
232 | /*! | |
233 | * wait this amount of milliseconds for an ack | |
234 | */ | |
d2d1660c | 235 | #define CEC_DEFAULT_TRANSMIT_WAIT 1000 |
96692e30 LOK |
236 | |
237 | /*! | |
238 | * default number of retries | |
239 | */ | |
4478bc79 | 240 | #define CEC_DEFAULT_TRANSMIT_RETRIES 1 |
ae693aaa | 241 | |
96692e30 LOK |
242 | /*! |
243 | * default connection timeout in milliseconds | |
244 | */ | |
b32ffd87 | 245 | #define CEC_DEFAULT_CONNECT_TIMEOUT 10000 |
96692e30 LOK |
246 | |
247 | /*! | |
248 | * wait this amount of milliseconds before retrying when failing to connect | |
249 | */ | |
b32ffd87 | 250 | #define CEC_DEFAULT_CONNECT_RETRY_WAIT 1000 |
96692e30 LOK |
251 | |
252 | /*! | |
253 | * default serial baudrate | |
254 | */ | |
b32ffd87 | 255 | #define CEC_SERIAL_DEFAULT_BAUDRATE 38400 |
96692e30 LOK |
256 | |
257 | /*! | |
258 | * maximum time to wait when clearing input | |
259 | */ | |
b32ffd87 LOK |
260 | #define CEC_CLEAR_INPUT_DEFAULT_WAIT 1000 |
261 | ||
96692e30 LOK |
262 | /*! |
263 | * wait this amount of milliseconds before retrying when libCEC failed to make itself the active source | |
264 | */ | |
b8599733 | 265 | #define CEC_ACTIVE_SOURCE_SWITCH_RETRY_TIME_MS 1000 |
96692e30 LOK |
266 | |
267 | /*! | |
268 | * don't forward any power off command to the client application for this amount of milliseconds after sending a power off command | |
269 | */ | |
55c18d43 | 270 | #define CEC_FORWARD_STANDBY_MIN_INTERVAL 10000 |
aa4c0d34 | 271 | |
ac3f9901 LOK |
272 | /*! |
273 | * default timeout in milliseconds for combo keys | |
274 | */ | |
275 | #define CEC_DEFAULT_COMBO_TIMEOUT_MS 1000 | |
276 | ||
96692e30 LOK |
277 | /*! |
278 | * the virtual device path to use for the Raspberry Pi's CEC wire | |
279 | */ | |
2b44051c | 280 | #define CEC_RPI_VIRTUAL_PATH "Raspberry Pi" |
96692e30 LOK |
281 | |
282 | /*! | |
283 | * the name of the virtual COM port to use for the Raspberry Pi's CEC wire | |
284 | */ | |
2b44051c LOK |
285 | #define CEC_RPI_VIRTUAL_COM "RPI" |
286 | ||
90b7066f LOK |
287 | /*! |
288 | * the path to use for the TDA995x's CEC wire | |
289 | */ | |
51b611bc | 290 | #define CEC_TDA995x_PATH "/dev/hdmicec" |
90b7066f LOK |
291 | |
292 | /*! | |
293 | * the name of the virtual COM port to use for the TDA995x's CEC wire | |
294 | */ | |
51b611bc | 295 | #define CEC_TDA995x_VIRTUAL_COM "CuBox" |
4d3a7562 | 296 | |
96692e30 LOK |
297 | /*! |
298 | * Mimimum client version | |
299 | */ | |
300 | #define CEC_MIN_LIB_VERSION 2 | |
301 | ||
302 | /*! | |
303 | * libCEC's major version number | |
304 | */ | |
305 | #define CEC_LIB_VERSION_MAJOR 2 | |
306 | ||
307 | /*! | |
308 | * libCEC's major version number as string | |
309 | */ | |
310 | #define CEC_LIB_VERSION_MAJOR_STR "2" | |
311 | ||
312 | /*! | |
313 | * libCEC's minor version number | |
314 | */ | |
9b56a19a | 315 | #define CEC_LIB_VERSION_MINOR 1 |
96692e30 LOK |
316 | |
317 | #define MSGSTART 0xFF | |
318 | #define MSGEND 0xFE | |
319 | #define MSGESC 0xFD | |
320 | #define ESCOFFSET 3 | |
5ae8fa48 | 321 | |
ac3f9901 LOK |
322 | // defines to make compile time checks for certain features easy |
323 | #define CEC_FEATURE_CONFIGURABLE_COMBO_KEY 1 | |
5ae8fa48 | 324 | |
c727331e | 325 | typedef enum cec_abort_reason |
acec5f48 | 326 | { |
96692e30 LOK |
327 | CEC_ABORT_REASON_UNRECOGNIZED_OPCODE = 0,//!< CEC_ABORT_REASON_UNRECOGNIZED_OPCODE |
328 | CEC_ABORT_REASON_NOT_IN_CORRECT_MODE_TO_RESPOND = 1,//!< CEC_ABORT_REASON_NOT_IN_CORRECT_MODE_TO_RESPOND | |
329 | CEC_ABORT_REASON_CANNOT_PROVIDE_SOURCE = 2,//!< CEC_ABORT_REASON_CANNOT_PROVIDE_SOURCE | |
330 | CEC_ABORT_REASON_INVALID_OPERAND = 3,//!< CEC_ABORT_REASON_INVALID_OPERAND | |
331 | CEC_ABORT_REASON_REFUSED = 4 //!< CEC_ABORT_REASON_REFUSED | |
c727331e | 332 | } cec_abort_reason; |
acec5f48 | 333 | |
c727331e | 334 | typedef enum cec_analogue_broadcast_type |
acec5f48 | 335 | { |
5ae8fa48 LOK |
336 | CEC_ANALOGUE_BROADCAST_TYPE_CABLE = 0x00, |
337 | CEC_ANALOGUE_BROADCAST_TYPE_SATELLITE = 0x01, | |
acec5f48 | 338 | CEC_ANALOGUE_BROADCAST_TYPE_TERRESTIAL = 0x02 |
c727331e | 339 | } cec_analogue_broadcast_type; |
acec5f48 | 340 | |
c727331e | 341 | typedef enum cec_audio_rate |
acec5f48 | 342 | { |
5ae8fa48 LOK |
343 | CEC_AUDIO_RATE_RATE_CONTROL_OFF = 0, |
344 | CEC_AUDIO_RATE_STANDARD_RATE_100 = 1, | |
345 | CEC_AUDIO_RATE_FAST_RATE_MAX_101 = 2, | |
346 | CEC_AUDIO_RATE_SLOW_RATE_MIN_99 = 3, | |
acec5f48 LOK |
347 | CEC_AUDIO_RATE_STANDARD_RATE_100_0 = 4, |
348 | CEC_AUDIO_RATE_FAST_RATE_MAX_100_1 = 5, | |
5ae8fa48 | 349 | CEC_AUDIO_RATE_SLOW_RATE_MIN_99_9 = 6 |
c727331e | 350 | } cec_audio_rate; |
acec5f48 | 351 | |
e5e86c76 | 352 | typedef enum cec_audio_status |
acec5f48 | 353 | { |
5ae8fa48 LOK |
354 | CEC_AUDIO_MUTE_STATUS_MASK = 0x80, |
355 | CEC_AUDIO_VOLUME_STATUS_MASK = 0x7F, | |
356 | CEC_AUDIO_VOLUME_MIN = 0x00, | |
357 | CEC_AUDIO_VOLUME_MAX = 0x64, | |
acec5f48 | 358 | CEC_AUDIO_VOLUME_STATUS_UNKNOWN = 0x7F |
e5e86c76 | 359 | } cec_audio_status; |
acec5f48 | 360 | |
c727331e | 361 | typedef enum cec_boolean |
acec5f48 LOK |
362 | { |
363 | CEC_FALSE = 0, | |
5ae8fa48 | 364 | CEC_TRUE = 1 |
c727331e | 365 | } cec_boolean; |
acec5f48 | 366 | |
6a1c0009 | 367 | typedef enum cec_version |
acec5f48 | 368 | { |
6a1c0009 LOK |
369 | CEC_VERSION_UNKNOWN = 0x00, |
370 | CEC_VERSION_1_2 = 0x01, | |
371 | CEC_VERSION_1_2A = 0x02, | |
372 | CEC_VERSION_1_3 = 0x03, | |
c4098482 LOK |
373 | CEC_VERSION_1_3A = 0x04, |
374 | CEC_VERSION_1_4 = 0x05 | |
6a1c0009 | 375 | } cec_version; |
acec5f48 | 376 | |
c727331e | 377 | typedef enum cec_channel_identifier |
acec5f48 LOK |
378 | { |
379 | CEC_CHANNEL_NUMBER_FORMAT_MASK = 0xFC000000, | |
5ae8fa48 LOK |
380 | CEC_1_PART_CHANNEL_NUMBER = 0x04000000, |
381 | CEC_2_PART_CHANNEL_NUMBER = 0x08000000, | |
382 | CEC_MAJOR_CHANNEL_NUMBER_MASK = 0x3FF0000, | |
383 | CEC_MINOR_CHANNEL_NUMBER_MASK = 0xFFFF | |
c727331e | 384 | } cec_channel_identifier; |
acec5f48 | 385 | |
8ac9c610 | 386 | typedef enum cec_deck_control_mode |
acec5f48 | 387 | { |
5ae8fa48 | 388 | CEC_DECK_CONTROL_MODE_SKIP_FORWARD_WIND = 1, |
a9232a79 | 389 | CEC_DECK_CONTROL_MODE_SKIP_REVERSE_REWIND = 2, |
5ae8fa48 LOK |
390 | CEC_DECK_CONTROL_MODE_STOP = 3, |
391 | CEC_DECK_CONTROL_MODE_EJECT = 4 | |
8ac9c610 | 392 | } cec_deck_control_mode; |
acec5f48 | 393 | |
8ac9c610 | 394 | typedef enum cec_deck_info |
acec5f48 | 395 | { |
5ae8fa48 LOK |
396 | CEC_DECK_INFO_PLAY = 0x11, |
397 | CEC_DECK_INFO_RECORD = 0x12, | |
398 | CEC_DECK_INFO_PLAY_REVERSE = 0x13, | |
399 | CEC_DECK_INFO_STILL = 0x14, | |
400 | CEC_DECK_INFO_SLOW = 0x15, | |
401 | CEC_DECK_INFO_SLOW_REVERSE = 0x16, | |
402 | CEC_DECK_INFO_FAST_FORWARD = 0x17, | |
403 | CEC_DECK_INFO_FAST_REVERSE = 0x18, | |
404 | CEC_DECK_INFO_NO_MEDIA = 0x19, | |
405 | CEC_DECK_INFO_STOP = 0x1A, | |
406 | CEC_DECK_INFO_SKIP_FORWARD_WIND = 0x1B, | |
407 | CEC_DECK_INFO_SKIP_REVERSE_REWIND = 0x1C, | |
acec5f48 LOK |
408 | CEC_DECK_INFO_INDEX_SEARCH_FORWARD = 0x1D, |
409 | CEC_DECK_INFO_INDEX_SEARCH_REVERSE = 0x1E, | |
8d915412 LOK |
410 | CEC_DECK_INFO_OTHER_STATUS = 0x1F, |
411 | CEC_DECK_INFO_OTHER_STATUS_LG = 0x20 | |
8ac9c610 | 412 | } cec_deck_info; |
acec5f48 | 413 | |
f8513317 | 414 | typedef enum cec_device_type |
acec5f48 | 415 | { |
5ae8fa48 | 416 | CEC_DEVICE_TYPE_TV = 0, |
acec5f48 | 417 | CEC_DEVICE_TYPE_RECORDING_DEVICE = 1, |
5ae8fa48 LOK |
418 | CEC_DEVICE_TYPE_RESERVED = 2, |
419 | CEC_DEVICE_TYPE_TUNER = 3, | |
420 | CEC_DEVICE_TYPE_PLAYBACK_DEVICE = 4, | |
421 | CEC_DEVICE_TYPE_AUDIO_SYSTEM = 5 | |
f8513317 LOK |
422 | } cec_device_type; |
423 | ||
1969b140 | 424 | typedef enum cec_display_control |
acec5f48 LOK |
425 | { |
426 | CEC_DISPLAY_CONTROL_DISPLAY_FOR_DEFAULT_TIME = 0x00, | |
5ae8fa48 LOK |
427 | CEC_DISPLAY_CONTROL_DISPLAY_UNTIL_CLEARED = 0x40, |
428 | CEC_DISPLAY_CONTROL_CLEAR_PREVIOUS_MESSAGE = 0x80, | |
429 | CEC_DISPLAY_CONTROL_RESERVED_FOR_FUTURE_USE = 0xC0 | |
1969b140 | 430 | } cec_display_control; |
acec5f48 | 431 | |
c727331e | 432 | typedef enum cec_external_source_specifier |
acec5f48 | 433 | { |
5ae8fa48 | 434 | CEC_EXTERNAL_SOURCE_SPECIFIER_EXTERNAL_PLUG = 4, |
acec5f48 | 435 | CEC_EXTERNAL_SOURCE_SPECIFIER_EXTERNAL_PHYSICAL_ADDRESS = 5 |
c727331e | 436 | } cec_external_source_specifier; |
acec5f48 | 437 | |
c727331e | 438 | typedef enum cec_menu_request_type |
acec5f48 | 439 | { |
5ae8fa48 | 440 | CEC_MENU_REQUEST_TYPE_ACTIVATE = 0, |
acec5f48 | 441 | CEC_MENU_REQUEST_TYPE_DEACTIVATE = 1, |
5ae8fa48 | 442 | CEC_MENU_REQUEST_TYPE_QUERY = 2 |
c727331e | 443 | } cec_menu_request_type; |
acec5f48 | 444 | |
c727331e | 445 | typedef enum cec_menu_state |
acec5f48 | 446 | { |
5ae8fa48 | 447 | CEC_MENU_STATE_ACTIVATED = 0, |
acec5f48 | 448 | CEC_MENU_STATE_DEACTIVATED = 1 |
c727331e | 449 | } cec_menu_state; |
acec5f48 | 450 | |
c727331e | 451 | typedef enum cec_play_mode |
acec5f48 | 452 | { |
5ae8fa48 LOK |
453 | CEC_PLAY_MODE_PLAY_FORWARD = 0x24, |
454 | CEC_PLAY_MODE_PLAY_REVERSE = 0x20, | |
455 | CEC_PLAY_MODE_PLAY_STILL = 0x25, | |
456 | CEC_PLAY_MODE_FAST_FORWARD_MIN_SPEED = 0x05, | |
acec5f48 | 457 | CEC_PLAY_MODE_FAST_FORWARD_MEDIUM_SPEED = 0x06, |
5ae8fa48 LOK |
458 | CEC_PLAY_MODE_FAST_FORWARD_MAX_SPEED = 0x07, |
459 | CEC_PLAY_MODE_FAST_REVERSE_MIN_SPEED = 0x09, | |
acec5f48 | 460 | CEC_PLAY_MODE_FAST_REVERSE_MEDIUM_SPEED = 0x0A, |
5ae8fa48 LOK |
461 | CEC_PLAY_MODE_FAST_REVERSE_MAX_SPEED = 0x0B, |
462 | CEC_PLAY_MODE_SLOW_FORWARD_MIN_SPEED = 0x15, | |
acec5f48 | 463 | CEC_PLAY_MODE_SLOW_FORWARD_MEDIUM_SPEED = 0x16, |
5ae8fa48 LOK |
464 | CEC_PLAY_MODE_SLOW_FORWARD_MAX_SPEED = 0x17, |
465 | CEC_PLAY_MODE_SLOW_REVERSE_MIN_SPEED = 0x19, | |
acec5f48 | 466 | CEC_PLAY_MODE_SLOW_REVERSE_MEDIUM_SPEED = 0x1A, |
5ae8fa48 | 467 | CEC_PLAY_MODE_SLOW_REVERSE_MAX_SPEED = 0x1B |
c727331e | 468 | } cec_play_mode; |
acec5f48 | 469 | |
e55f3f70 | 470 | typedef enum cec_power_status |
acec5f48 | 471 | { |
5ae8fa48 LOK |
472 | CEC_POWER_STATUS_ON = 0x00, |
473 | CEC_POWER_STATUS_STANDBY = 0x01, | |
acec5f48 | 474 | CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON = 0x02, |
e55f3f70 | 475 | CEC_POWER_STATUS_IN_TRANSITION_ON_TO_STANDBY = 0x03, |
5ae8fa48 | 476 | CEC_POWER_STATUS_UNKNOWN = 0x99 |
e55f3f70 | 477 | } cec_power_status; |
acec5f48 | 478 | |
c727331e | 479 | typedef enum cec_record_source_type |
acec5f48 | 480 | { |
5ae8fa48 LOK |
481 | CEC_RECORD_SOURCE_TYPE_OWN_SOURCE = 1, |
482 | CEC_RECORD_SOURCE_TYPE_DIGITAL_SERVICE = 2, | |
483 | CEC_RECORD_SOURCE_TYPE_ANALOGUE_SERVICE = 3, | |
484 | CEC_RECORD_SOURCE_TYPE_EXTERNAL_PLUS = 4, | |
acec5f48 | 485 | CEC_RECORD_SOURCE_TYPE_EXTERNAL_PHYSICAL_ADDRESS = 5 |
c727331e | 486 | } cec_record_source_type; |
acec5f48 | 487 | |
c727331e | 488 | typedef enum cec_record_status_info |
acec5f48 | 489 | { |
5ae8fa48 LOK |
490 | CEC_RECORD_STATUS_INFO_RECORDING_CURRENTLY_SELECTED_SOURCE = 0x01, |
491 | CEC_RECORD_STATUS_INFO_RECORDING_DIGITAL_SERVICE = 0x02, | |
492 | CEC_RECORD_STATUS_INFO_RECORDING_ANALOGUE_SERVICE = 0x03, | |
493 | CEC_RECORD_STATUS_INFO_RECORDING_EXTERNAL_INPUT = 0x04, | |
494 | CEC_RECORD_STATUS_INFO_NO_RECORDING_UNABLE_TO_RECORD_DIGITAL_SERVICE = 0x05, | |
acec5f48 LOK |
495 | CEC_RECORD_STATUS_INFO_NO_RECORDING_UNABLE_TO_RECORD_ANALOGUE_SERVICE = 0x06, |
496 | CEC_RECORD_STATUS_INFO_NO_RECORDING_UNABLE_TO_SELECT_REQUIRED_SERVICE = 0x07, | |
5ae8fa48 LOK |
497 | CEC_RECORD_STATUS_INFO_NO_RECORDING_INVALID_EXTERNAL_PLUG_NUMBER = 0x09, |
498 | CEC_RECORD_STATUS_INFO_NO_RECORDING_INVALID_EXTERNAL_ADDRESS = 0x0A, | |
499 | CEC_RECORD_STATUS_INFO_NO_RECORDING_CA_SYSTEM_NOT_SUPPORTED = 0x0B, | |
500 | CEC_RECORD_STATUS_INFO_NO_RECORDING_NO_OR_INSUFFICIENT_ENTITLEMENTS = 0x0C, | |
501 | CEC_RECORD_STATUS_INFO_NO_RECORDING_NOT_ALLOWED_TO_COPY_SOURCE = 0x0D, | |
502 | CEC_RECORD_STATUS_INFO_NO_RECORDING_NO_FURTHER_COPIES_ALLOWED = 0x0E, | |
503 | CEC_RECORD_STATUS_INFO_NO_RECORDING_NO_MEDIA = 0x10, | |
504 | CEC_RECORD_STATUS_INFO_NO_RECORDING_PLAYING = 0x11, | |
505 | CEC_RECORD_STATUS_INFO_NO_RECORDING_ALREADY_RECORDING = 0x12, | |
506 | CEC_RECORD_STATUS_INFO_NO_RECORDING_MEDIA_PROTECTED = 0x13, | |
507 | CEC_RECORD_STATUS_INFO_NO_RECORDING_NO_SOURCE_SIGNAL = 0x14, | |
508 | CEC_RECORD_STATUS_INFO_NO_RECORDING_MEDIA_PROBLEM = 0x15, | |
509 | CEC_RECORD_STATUS_INFO_NO_RECORDING_NOT_ENOUGH_SPACE_AVAILABLE = 0x16, | |
510 | CEC_RECORD_STATUS_INFO_NO_RECORDING_PARENTAL_LOCK_ON = 0x17, | |
511 | CEC_RECORD_STATUS_INFO_RECORDING_TERMINATED_NORMALLY = 0x1A, | |
512 | CEC_RECORD_STATUS_INFO_RECORDING_HAS_ALREADY_TERMINATED = 0x1B, | |
513 | CEC_RECORD_STATUS_INFO_NO_RECORDING_OTHER_REASON = 0x1F | |
c727331e | 514 | } cec_record_status_info; |
acec5f48 | 515 | |
c727331e | 516 | typedef enum cec_recording_sequence |
acec5f48 | 517 | { |
5ae8fa48 LOK |
518 | CEC_RECORDING_SEQUENCE_SUNDAY = 0x01, |
519 | CEC_RECORDING_SEQUENCE_MONDAY = 0x02, | |
520 | CEC_RECORDING_SEQUENCE_TUESDAY = 0x04, | |
acec5f48 | 521 | CEC_RECORDING_SEQUENCE_WEDNESDAY = 0x08, |
5ae8fa48 LOK |
522 | CEC_RECORDING_SEQUENCE_THURSDAY = 0x10, |
523 | CEC_RECORDING_SEQUENCE_FRIDAY = 0x20, | |
524 | CEC_RECORDING_SEQUENCE_SATURDAY = 0x40, | |
acec5f48 | 525 | CEC_RECORDING_SEQUENCE_ONCE_ONLY = 0x00 |
c727331e | 526 | } cec_recording_sequence; |
acec5f48 | 527 | |
c727331e | 528 | typedef enum cec_status_request |
acec5f48 | 529 | { |
5ae8fa48 LOK |
530 | CEC_STATUS_REQUEST_ON = 1, |
531 | CEC_STATUS_REQUEST_OFF = 2, | |
acec5f48 | 532 | CEC_STATUS_REQUEST_ONCE = 3 |
c727331e | 533 | } cec_status_request; |
acec5f48 | 534 | |
e5e86c76 | 535 | typedef enum cec_system_audio_status |
acec5f48 LOK |
536 | { |
537 | CEC_SYSTEM_AUDIO_STATUS_OFF = 0, | |
5ae8fa48 | 538 | CEC_SYSTEM_AUDIO_STATUS_ON = 1 |
e5e86c76 | 539 | } cec_system_audio_status; |
acec5f48 | 540 | |
c727331e | 541 | typedef enum cec_timer_cleared_status_data |
acec5f48 | 542 | { |
5ae8fa48 LOK |
543 | CEC_TIMER_CLEARED_STATUS_DATA_TIMER_NOT_CLEARED_RECORDING = 0x00, |
544 | CEC_TIMER_CLEARED_STATUS_DATA_TIMER_NOT_CLEARED_NO_MATCHING = 0x01, | |
acec5f48 | 545 | CEC_TIMER_CLEARED_STATUS_DATA_TIMER_NOT_CLEARED_NO_INF0_AVAILABLE = 0x02, |
5ae8fa48 | 546 | CEC_TIMER_CLEARED_STATUS_DATA_TIMER_CLEARED = 0x80 |
c727331e | 547 | } cec_timer_cleared_status_data; |
acec5f48 | 548 | |
c727331e | 549 | typedef enum cec_timer_overlap_warning |
acec5f48 | 550 | { |
5ae8fa48 | 551 | CEC_TIMER_OVERLAP_WARNING_NO_OVERLAP = 0, |
acec5f48 | 552 | CEC_TIMER_OVERLAP_WARNING_TIMER_BLOCKS_OVERLAP = 1 |
c727331e | 553 | } cec_timer_overlap_warning; |
acec5f48 | 554 | |
c727331e | 555 | typedef enum cec_media_info |
acec5f48 LOK |
556 | { |
557 | CEC_MEDIA_INFO_MEDIA_PRESENT_AND_NOT_PROTECTED = 0x00, | |
5ae8fa48 LOK |
558 | CEC_MEDIA_INFO_MEDIA_PRESENT_BUT_PROTECTED = 0x01, |
559 | CEC_MEDIA_INFO_MEDIA_NOT_PRESENT = 0x02, | |
560 | CEC_MEDIA_INFO_FUTURE_USE = 0x03 | |
c727331e | 561 | } cec_media_info; |
acec5f48 | 562 | |
c727331e | 563 | typedef enum cec_programmed_indicator |
acec5f48 LOK |
564 | { |
565 | CEC_PROGRAMMED_INDICATOR_NOT_PROGRAMMED = 0, | |
5ae8fa48 | 566 | CEC_PROGRAMMED_INDICATOR_PROGRAMMED = 1 |
c727331e | 567 | } cec_programmed_indicator; |
acec5f48 | 568 | |
c727331e | 569 | typedef enum cec_programmed_info |
acec5f48 | 570 | { |
5ae8fa48 LOK |
571 | CEC_PROGRAMMED_INFO_FUTURE_USE = 0x0, |
572 | CEC_PROGRAMMED_INFO_ENOUGH_SPACE_AVAILABLE_FOR_RECORDING = 0x08, | |
acec5f48 | 573 | CEC_PROGRAMMED_INFO_NOT_ENOUGH_SPACE_AVAILABLE_FOR_RECORDING = 0x09, |
5ae8fa48 LOK |
574 | CEC_PROGRAMMED_INFO_MAY_NOT_BE_ENOUGH_SPACE_AVAILABLE = 0x0B, |
575 | CEC_PROGRAMMED_INFO_NO_MEDIA_INFO_AVAILABLE = 0x0A | |
c727331e | 576 | } cec_programmed_info; |
acec5f48 | 577 | |
c727331e | 578 | typedef enum cec_not_programmed_error_info |
acec5f48 | 579 | { |
5ae8fa48 LOK |
580 | CEC_NOT_PROGRAMMED_ERROR_INFO_FUTURE_USE = 0x0, |
581 | CEC_NOT_PROGRAMMED_ERROR_INFO_NO_FREE_TIMER_AVAILABLE = 0x01, | |
582 | CEC_NOT_PROGRAMMED_ERROR_INFO_DATE_OUT_OF_RANGE = 0x02, | |
583 | CEC_NOT_PROGRAMMED_ERROR_INFO_RECORDING_SEQUENCE_ERROR = 0x03, | |
584 | CEC_NOT_PROGRAMMED_ERROR_INFO_INVALID_EXTERNAL_PLUG_NUMBER = 0x04, | |
585 | CEC_NOT_PROGRAMMED_ERROR_INFO_INVALID_EXTERNAL_PHYSICAL_ADDRESS = 0x05, | |
586 | CEC_NOT_PROGRAMMED_ERROR_INFO_CA_SYSTEM_NOT_SUPPORTED = 0x06, | |
acec5f48 | 587 | CEC_NOT_PROGRAMMED_ERROR_INFO_NO_OR_INSUFFICIENT_CA_ENTITLEMENTS = 0x07, |
5ae8fa48 LOK |
588 | CEC_NOT_PROGRAMMED_ERROR_INFO_DOES_NOT_SUPPORT_RESOLUTION = 0x08, |
589 | CEC_NOT_PROGRAMMED_ERROR_INFO_PARENTAL_LOCK_ON = 0x09, | |
590 | CEC_NOT_PROGRAMMED_ERROR_INFO_CLOCK_FAILURE = 0x0A, | |
591 | CEC_NOT_PROGRAMMED_ERROR_INFO_RESERVED_FOR_FUTURE_USE_START = 0x0B, | |
592 | CEC_NOT_PROGRAMMED_ERROR_INFO_RESERVED_FOR_FUTURE_USE_END = 0x0D, | |
593 | CEC_NOT_PROGRAMMED_ERROR_INFO_DUPLICATE_ALREADY_PROGRAMMED = 0x0E | |
c727331e | 594 | } cec_not_programmed_error_info; |
acec5f48 | 595 | |
c727331e | 596 | typedef enum cec_recording_flag |
acec5f48 LOK |
597 | { |
598 | CEC_RECORDING_FLAG_NOT_BEING_USED_FOR_RECORDING = 0, | |
5ae8fa48 | 599 | CEC_RECORDING_FLAG_BEING_USED_FOR_RECORDING = 1 |
c727331e | 600 | } cec_recording_flag; |
acec5f48 | 601 | |
c727331e | 602 | typedef enum cec_tuner_display_info |
acec5f48 | 603 | { |
5ae8fa48 LOK |
604 | CEC_TUNER_DISPLAY_INFO_DISPLAYING_DIGITAL_TUNER = 0, |
605 | CEC_TUNER_DISPLAY_INFO_NOT_DISPLAYING_TUNER = 1, | |
acec5f48 | 606 | CEC_TUNER_DISPLAY_INFO_DISPLAYING_ANALOGUE_TUNER = 2 |
c727331e | 607 | } cec_tuner_display_info; |
acec5f48 | 608 | |
c727331e | 609 | typedef enum cec_broadcast_system |
acec5f48 | 610 | { |
5ae8fa48 LOK |
611 | CEC_BROADCAST_SYSTEM_PAL_B_G = 0, |
612 | CEC_BROADCAST_SYSTEM_SECAM_L1 = 1, | |
613 | CEC_BROADCAST_SYSTEM_PAL_M = 2, | |
614 | CEC_BROADCAST_SYSTEM_NTSC_M = 3, | |
615 | CEC_BROADCAST_SYSTEM_PAL_I = 4, | |
616 | CEC_BROADCAST_SYSTEM_SECAM_DK = 5, | |
617 | CEC_BROADCAST_SYSTEM_SECAM_B_G = 6, | |
618 | CEC_BROADCAST_SYSTEM_SECAM_L2 = 7, | |
619 | CEC_BROADCAST_SYSTEM_PAL_DK = 8, | |
acec5f48 | 620 | CEC_BROADCAST_SYSTEM_OTHER_SYSTEM = 30 |
c727331e | 621 | } cec_broadcast_system; |
acec5f48 LOK |
622 | |
623 | typedef enum cec_user_control_code | |
624 | { | |
5ae8fa48 LOK |
625 | CEC_USER_CONTROL_CODE_SELECT = 0x00, |
626 | CEC_USER_CONTROL_CODE_UP = 0x01, | |
627 | CEC_USER_CONTROL_CODE_DOWN = 0x02, | |
628 | CEC_USER_CONTROL_CODE_LEFT = 0x03, | |
629 | CEC_USER_CONTROL_CODE_RIGHT = 0x04, | |
630 | CEC_USER_CONTROL_CODE_RIGHT_UP = 0x05, | |
631 | CEC_USER_CONTROL_CODE_RIGHT_DOWN = 0x06, | |
632 | CEC_USER_CONTROL_CODE_LEFT_UP = 0x07, | |
633 | CEC_USER_CONTROL_CODE_LEFT_DOWN = 0x08, | |
634 | CEC_USER_CONTROL_CODE_ROOT_MENU = 0x09, | |
635 | CEC_USER_CONTROL_CODE_SETUP_MENU = 0x0A, | |
636 | CEC_USER_CONTROL_CODE_CONTENTS_MENU = 0x0B, | |
637 | CEC_USER_CONTROL_CODE_FAVORITE_MENU = 0x0C, | |
638 | CEC_USER_CONTROL_CODE_EXIT = 0x0D, | |
639 | CEC_USER_CONTROL_CODE_NUMBER0 = 0x20, | |
640 | CEC_USER_CONTROL_CODE_NUMBER1 = 0x21, | |
641 | CEC_USER_CONTROL_CODE_NUMBER2 = 0x22, | |
642 | CEC_USER_CONTROL_CODE_NUMBER3 = 0x23, | |
643 | CEC_USER_CONTROL_CODE_NUMBER4 = 0x24, | |
644 | CEC_USER_CONTROL_CODE_NUMBER5 = 0x25, | |
645 | CEC_USER_CONTROL_CODE_NUMBER6 = 0x26, | |
646 | CEC_USER_CONTROL_CODE_NUMBER7 = 0x27, | |
647 | CEC_USER_CONTROL_CODE_NUMBER8 = 0x28, | |
648 | CEC_USER_CONTROL_CODE_NUMBER9 = 0x29, | |
649 | CEC_USER_CONTROL_CODE_DOT = 0x2A, | |
650 | CEC_USER_CONTROL_CODE_ENTER = 0x2B, | |
651 | CEC_USER_CONTROL_CODE_CLEAR = 0x2C, | |
652 | CEC_USER_CONTROL_CODE_NEXT_FAVORITE = 0x2F, | |
653 | CEC_USER_CONTROL_CODE_CHANNEL_UP = 0x30, | |
654 | CEC_USER_CONTROL_CODE_CHANNEL_DOWN = 0x31, | |
655 | CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL = 0x32, | |
656 | CEC_USER_CONTROL_CODE_SOUND_SELECT = 0x33, | |
657 | CEC_USER_CONTROL_CODE_INPUT_SELECT = 0x34, | |
658 | CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION = 0x35, | |
659 | CEC_USER_CONTROL_CODE_HELP = 0x36, | |
660 | CEC_USER_CONTROL_CODE_PAGE_UP = 0x37, | |
661 | CEC_USER_CONTROL_CODE_PAGE_DOWN = 0x38, | |
662 | CEC_USER_CONTROL_CODE_POWER = 0x40, | |
663 | CEC_USER_CONTROL_CODE_VOLUME_UP = 0x41, | |
664 | CEC_USER_CONTROL_CODE_VOLUME_DOWN = 0x42, | |
665 | CEC_USER_CONTROL_CODE_MUTE = 0x43, | |
666 | CEC_USER_CONTROL_CODE_PLAY = 0x44, | |
667 | CEC_USER_CONTROL_CODE_STOP = 0x45, | |
668 | CEC_USER_CONTROL_CODE_PAUSE = 0x46, | |
669 | CEC_USER_CONTROL_CODE_RECORD = 0x47, | |
670 | CEC_USER_CONTROL_CODE_REWIND = 0x48, | |
671 | CEC_USER_CONTROL_CODE_FAST_FORWARD = 0x49, | |
672 | CEC_USER_CONTROL_CODE_EJECT = 0x4A, | |
673 | CEC_USER_CONTROL_CODE_FORWARD = 0x4B, | |
674 | CEC_USER_CONTROL_CODE_BACKWARD = 0x4C, | |
675 | CEC_USER_CONTROL_CODE_STOP_RECORD = 0x4D, | |
676 | CEC_USER_CONTROL_CODE_PAUSE_RECORD = 0x4E, | |
677 | CEC_USER_CONTROL_CODE_ANGLE = 0x50, | |
678 | CEC_USER_CONTROL_CODE_SUB_PICTURE = 0x51, | |
679 | CEC_USER_CONTROL_CODE_VIDEO_ON_DEMAND = 0x52, | |
680 | CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE = 0x53, | |
681 | CEC_USER_CONTROL_CODE_TIMER_PROGRAMMING = 0x54, | |
682 | CEC_USER_CONTROL_CODE_INITIAL_CONFIGURATION = 0x55, | |
683 | CEC_USER_CONTROL_CODE_PLAY_FUNCTION = 0x60, | |
684 | CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION = 0x61, | |
685 | CEC_USER_CONTROL_CODE_RECORD_FUNCTION = 0x62, | |
686 | CEC_USER_CONTROL_CODE_PAUSE_RECORD_FUNCTION = 0x63, | |
687 | CEC_USER_CONTROL_CODE_STOP_FUNCTION = 0x64, | |
688 | CEC_USER_CONTROL_CODE_MUTE_FUNCTION = 0x65, | |
689 | CEC_USER_CONTROL_CODE_RESTORE_VOLUME_FUNCTION = 0x66, | |
690 | CEC_USER_CONTROL_CODE_TUNE_FUNCTION = 0x67, | |
691 | CEC_USER_CONTROL_CODE_SELECT_MEDIA_FUNCTION = 0x68, | |
692 | CEC_USER_CONTROL_CODE_SELECT_AV_INPUT_FUNCTION = 0x69, | |
acec5f48 | 693 | CEC_USER_CONTROL_CODE_SELECT_AUDIO_INPUT_FUNCTION = 0x6A, |
5ae8fa48 LOK |
694 | CEC_USER_CONTROL_CODE_POWER_TOGGLE_FUNCTION = 0x6B, |
695 | CEC_USER_CONTROL_CODE_POWER_OFF_FUNCTION = 0x6C, | |
696 | CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION = 0x6D, | |
697 | CEC_USER_CONTROL_CODE_F1_BLUE = 0x71, | |
698 | CEC_USER_CONTROL_CODE_F2_RED = 0X72, | |
699 | CEC_USER_CONTROL_CODE_F3_GREEN = 0x73, | |
700 | CEC_USER_CONTROL_CODE_F4_YELLOW = 0x74, | |
701 | CEC_USER_CONTROL_CODE_F5 = 0x75, | |
702 | CEC_USER_CONTROL_CODE_DATA = 0x76, | |
b60a3d77 | 703 | CEC_USER_CONTROL_CODE_AN_RETURN = 0x91, |
340ce76c LOK |
704 | CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST = 0x96, |
705 | CEC_USER_CONTROL_CODE_MAX = 0x96, | |
ac3f9901 | 706 | CEC_USER_CONTROL_CODE_UNKNOWN = 0xFF |
acec5f48 LOK |
707 | } cec_user_control_code; |
708 | ||
709 | typedef enum cec_logical_address | |
710 | { | |
5ae8fa48 LOK |
711 | CECDEVICE_UNKNOWN = -1, //not a valid logical address |
712 | CECDEVICE_TV = 0, | |
713 | CECDEVICE_RECORDINGDEVICE1 = 1, | |
714 | CECDEVICE_RECORDINGDEVICE2 = 2, | |
715 | CECDEVICE_TUNER1 = 3, | |
716 | CECDEVICE_PLAYBACKDEVICE1 = 4, | |
717 | CECDEVICE_AUDIOSYSTEM = 5, | |
718 | CECDEVICE_TUNER2 = 6, | |
719 | CECDEVICE_TUNER3 = 7, | |
720 | CECDEVICE_PLAYBACKDEVICE2 = 8, | |
721 | CECDEVICE_RECORDINGDEVICE3 = 9, | |
722 | CECDEVICE_TUNER4 = 10, | |
723 | CECDEVICE_PLAYBACKDEVICE3 = 11, | |
724 | CECDEVICE_RESERVED1 = 12, | |
725 | CECDEVICE_RESERVED2 = 13, | |
726 | CECDEVICE_FREEUSE = 14, | |
727 | CECDEVICE_UNREGISTERED = 15, | |
728 | CECDEVICE_BROADCAST = 15 | |
acec5f48 LOK |
729 | } cec_logical_address; |
730 | ||
731 | typedef enum cec_opcode | |
732 | { | |
5ae8fa48 LOK |
733 | CEC_OPCODE_ACTIVE_SOURCE = 0x82, |
734 | CEC_OPCODE_IMAGE_VIEW_ON = 0x04, | |
735 | CEC_OPCODE_TEXT_VIEW_ON = 0x0D, | |
736 | CEC_OPCODE_INACTIVE_SOURCE = 0x9D, | |
737 | CEC_OPCODE_REQUEST_ACTIVE_SOURCE = 0x85, | |
738 | CEC_OPCODE_ROUTING_CHANGE = 0x80, | |
739 | CEC_OPCODE_ROUTING_INFORMATION = 0x81, | |
740 | CEC_OPCODE_SET_STREAM_PATH = 0x86, | |
741 | CEC_OPCODE_STANDBY = 0x36, | |
742 | CEC_OPCODE_RECORD_OFF = 0x0B, | |
743 | CEC_OPCODE_RECORD_ON = 0x09, | |
744 | CEC_OPCODE_RECORD_STATUS = 0x0A, | |
745 | CEC_OPCODE_RECORD_TV_SCREEN = 0x0F, | |
746 | CEC_OPCODE_CLEAR_ANALOGUE_TIMER = 0x33, | |
747 | CEC_OPCODE_CLEAR_DIGITAL_TIMER = 0x99, | |
748 | CEC_OPCODE_CLEAR_EXTERNAL_TIMER = 0xA1, | |
749 | CEC_OPCODE_SET_ANALOGUE_TIMER = 0x34, | |
750 | CEC_OPCODE_SET_DIGITAL_TIMER = 0x97, | |
751 | CEC_OPCODE_SET_EXTERNAL_TIMER = 0xA2, | |
752 | CEC_OPCODE_SET_TIMER_PROGRAM_TITLE = 0x67, | |
753 | CEC_OPCODE_TIMER_CLEARED_STATUS = 0x43, | |
754 | CEC_OPCODE_TIMER_STATUS = 0x35, | |
755 | CEC_OPCODE_CEC_VERSION = 0x9E, | |
756 | CEC_OPCODE_GET_CEC_VERSION = 0x9F, | |
757 | CEC_OPCODE_GIVE_PHYSICAL_ADDRESS = 0x83, | |
758 | CEC_OPCODE_GET_MENU_LANGUAGE = 0x91, | |
759 | CEC_OPCODE_REPORT_PHYSICAL_ADDRESS = 0x84, | |
760 | CEC_OPCODE_SET_MENU_LANGUAGE = 0x32, | |
761 | CEC_OPCODE_DECK_CONTROL = 0x42, | |
762 | CEC_OPCODE_DECK_STATUS = 0x1B, | |
763 | CEC_OPCODE_GIVE_DECK_STATUS = 0x1A, | |
764 | CEC_OPCODE_PLAY = 0x41, | |
765 | CEC_OPCODE_GIVE_TUNER_DEVICE_STATUS = 0x08, | |
766 | CEC_OPCODE_SELECT_ANALOGUE_SERVICE = 0x92, | |
767 | CEC_OPCODE_SELECT_DIGITAL_SERVICE = 0x93, | |
768 | CEC_OPCODE_TUNER_DEVICE_STATUS = 0x07, | |
769 | CEC_OPCODE_TUNER_STEP_DECREMENT = 0x06, | |
770 | CEC_OPCODE_TUNER_STEP_INCREMENT = 0x05, | |
771 | CEC_OPCODE_DEVICE_VENDOR_ID = 0x87, | |
772 | CEC_OPCODE_GIVE_DEVICE_VENDOR_ID = 0x8C, | |
773 | CEC_OPCODE_VENDOR_COMMAND = 0x89, | |
774 | CEC_OPCODE_VENDOR_COMMAND_WITH_ID = 0xA0, | |
775 | CEC_OPCODE_VENDOR_REMOTE_BUTTON_DOWN = 0x8A, | |
776 | CEC_OPCODE_VENDOR_REMOTE_BUTTON_UP = 0x8B, | |
777 | CEC_OPCODE_SET_OSD_STRING = 0x64, | |
778 | CEC_OPCODE_GIVE_OSD_NAME = 0x46, | |
779 | CEC_OPCODE_SET_OSD_NAME = 0x47, | |
780 | CEC_OPCODE_MENU_REQUEST = 0x8D, | |
781 | CEC_OPCODE_MENU_STATUS = 0x8E, | |
782 | CEC_OPCODE_USER_CONTROL_PRESSED = 0x44, | |
783 | CEC_OPCODE_USER_CONTROL_RELEASE = 0x45, | |
784 | CEC_OPCODE_GIVE_DEVICE_POWER_STATUS = 0x8F, | |
785 | CEC_OPCODE_REPORT_POWER_STATUS = 0x90, | |
786 | CEC_OPCODE_FEATURE_ABORT = 0x00, | |
787 | CEC_OPCODE_ABORT = 0xFF, | |
788 | CEC_OPCODE_GIVE_AUDIO_STATUS = 0x71, | |
acec5f48 | 789 | CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS = 0x7D, |
5ae8fa48 LOK |
790 | CEC_OPCODE_REPORT_AUDIO_STATUS = 0x7A, |
791 | CEC_OPCODE_SET_SYSTEM_AUDIO_MODE = 0x72, | |
792 | CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST = 0x70, | |
793 | CEC_OPCODE_SYSTEM_AUDIO_MODE_STATUS = 0x7E, | |
794 | CEC_OPCODE_SET_AUDIO_RATE = 0x9A, | |
38ba806c LOK |
795 | |
796 | /* CEC 1.4 */ | |
797 | CEC_OPCODE_START_ARC = 0xC0, | |
798 | CEC_OPCODE_REPORT_ARC_STARTED = 0xC1, | |
799 | CEC_OPCODE_REPORT_ARC_ENDED = 0xC2, | |
800 | CEC_OPCODE_REQUEST_ARC_START = 0xC3, | |
801 | CEC_OPCODE_REQUEST_ARC_END = 0xC4, | |
802 | CEC_OPCODE_END_ARC = 0xC5, | |
803 | CEC_OPCODE_CDC = 0xF8, | |
5ae8fa48 LOK |
804 | /* when this opcode is set, no opcode will be sent to the device. this is one of the reserved numbers */ |
805 | CEC_OPCODE_NONE = 0xFD | |
acec5f48 LOK |
806 | } cec_opcode; |
807 | ||
808 | typedef enum cec_log_level | |
809 | { | |
941c58b9 LOK |
810 | CEC_LOG_ERROR = 1, |
811 | CEC_LOG_WARNING = 2, | |
812 | CEC_LOG_NOTICE = 4, | |
813 | CEC_LOG_TRAFFIC = 8, | |
814 | CEC_LOG_DEBUG = 16, | |
815 | CEC_LOG_ALL = 31 | |
acec5f48 LOK |
816 | } cec_log_level; |
817 | ||
f8ae3295 LOK |
818 | typedef enum cec_bus_device_status |
819 | { | |
820 | CEC_DEVICE_STATUS_UNKNOWN, | |
821 | CEC_DEVICE_STATUS_PRESENT, | |
822 | CEC_DEVICE_STATUS_NOT_PRESENT, | |
823 | CEC_DEVICE_STATUS_HANDLED_BY_LIBCEC | |
824 | } cec_bus_device_status; | |
825 | ||
5ae8fa48 LOK |
826 | typedef enum cec_vendor_id |
827 | { | |
a87be483 | 828 | CEC_VENDOR_TOSHIBA = 0x000039, |
1a87cacc | 829 | CEC_VENDOR_SAMSUNG = 0x0000F0, |
a5a5f6f5 | 830 | CEC_VENDOR_DENON = 0x0005CD, |
461f1270 | 831 | CEC_VENDOR_MARANTZ = 0x000678, |
a87be483 | 832 | CEC_VENDOR_LOEWE = 0x000982, |
1a87cacc | 833 | CEC_VENDOR_ONKYO = 0x0009B0, |
a87be483 | 834 | CEC_VENDOR_MEDION = 0x000CB8, |
a6aecece | 835 | CEC_VENDOR_TOSHIBA2 = 0x000CE7, |
23d38eec LOK |
836 | CEC_VENDOR_AKAI = 0x0020C7, |
837 | CEC_VENDOR_AOC = 0x002467, | |
a87be483 LOK |
838 | CEC_VENDOR_PANASONIC = 0x008045, |
839 | CEC_VENDOR_PHILIPS = 0x00903E, | |
23d38eec | 840 | CEC_VENDOR_DAEWOO = 0x009053, |
a87be483 | 841 | CEC_VENDOR_YAMAHA = 0x00A0DE, |
23d38eec | 842 | CEC_VENDOR_GRUNDIG = 0x00D0D5, |
a87be483 LOK |
843 | CEC_VENDOR_PIONEER = 0x00E036, |
844 | CEC_VENDOR_LG = 0x00E091, | |
23d38eec | 845 | CEC_VENDOR_SHARP = 0x08001F, |
a87be483 | 846 | CEC_VENDOR_SONY = 0x080046, |
2b44051c | 847 | CEC_VENDOR_BROADCOM = 0x18C086, |
a87be483 LOK |
848 | CEC_VENDOR_VIZIO = 0x6B746D, |
849 | CEC_VENDOR_BENQ = 0x8065E9, | |
ac03cf27 | 850 | CEC_VENDOR_HARMAN_KARDON = 0x9C645E, |
5ae8fa48 LOK |
851 | CEC_VENDOR_UNKNOWN = 0 |
852 | } cec_vendor_id; | |
853 | ||
2d418322 LOK |
854 | typedef enum cec_adapter_type |
855 | { | |
856 | ADAPTERTYPE_UNKNOWN = 0, | |
857 | ADAPTERTYPE_P8_EXTERNAL = 0x1, | |
858 | ADAPTERTYPE_P8_DAUGHTERBOARD = 0x2, | |
4d3a7562 | 859 | ADAPTERTYPE_RPI = 0x100, |
51b611bc | 860 | ADAPTERTYPE_TDA995x = 0x200 |
2d418322 LOK |
861 | } cec_adapter_type; |
862 | ||
5ae8fa48 LOK |
863 | typedef struct cec_menu_language |
864 | { | |
b453e1b8 | 865 | char language[4]; /**< the iso language code. @bug the language code is only 3 chars long, not 4. will be changed in v2.0, because changing it now would break backwards compat */ |
8d901fdb | 866 | cec_logical_address device; /**< the logical address of the device */ |
5ae8fa48 LOK |
867 | } cec_menu_language; |
868 | ||
ed21be2a LOK |
869 | typedef struct cec_osd_name |
870 | { | |
8d901fdb LOK |
871 | char name[14]; /**< the name of the device */ |
872 | cec_logical_address device; /**< the logical address of the device */ | |
ed21be2a LOK |
873 | } cec_osd_name; |
874 | ||
5ae8fa48 LOK |
875 | typedef struct cec_log_message |
876 | { | |
8d901fdb LOK |
877 | char message[1024]; /**< the actual message */ |
878 | cec_log_level level; /**< log level of the message */ | |
879 | int64_t time; /**< the timestamp of this message */ | |
5ae8fa48 LOK |
880 | } cec_log_message; |
881 | ||
882 | typedef struct cec_keypress | |
883 | { | |
8d901fdb LOK |
884 | cec_user_control_code keycode; /**< the keycode */ |
885 | unsigned int duration; /**< the duration of the keypress */ | |
5ae8fa48 LOK |
886 | } cec_keypress; |
887 | ||
888 | typedef struct cec_adapter | |
889 | { | |
8d901fdb LOK |
890 | char path[1024]; /**< the path to the com port */ |
891 | char comm[1024]; /**< the name of the com port */ | |
5ae8fa48 LOK |
892 | } cec_adapter; |
893 | ||
e7fd53c8 LOK |
894 | typedef struct cec_adapter_descriptor |
895 | { | |
896 | char strComPath[1024]; /**< the path to the com port */ | |
897 | char strComName[1024]; /**< the name of the com port */ | |
898 | uint16_t iVendorId; | |
899 | uint16_t iProductId; | |
900 | uint16_t iFirmwareVersion; | |
901 | uint16_t iPhysicalAddress; | |
902 | uint32_t iFirmwareBuildDate; | |
903 | cec_adapter_type adapterType; | |
904 | } cec_adapter_descriptor; | |
905 | ||
acec5f48 LOK |
906 | typedef struct cec_datapacket |
907 | { | |
8d901fdb LOK |
908 | uint8_t data[100]; /**< the actual data */ |
909 | uint8_t size; /**< the size of the data */ | |
acec5f48 LOK |
910 | |
911 | #ifdef __cplusplus | |
60a245d1 LOK |
912 | cec_datapacket &operator =(const struct cec_datapacket &packet) |
913 | { | |
ab1469a0 | 914 | Clear(); |
60a245d1 | 915 | for (uint8_t iPtr = 0; iPtr < packet.size; iPtr++) |
ab1469a0 | 916 | PushBack(packet[iPtr]); |
60a245d1 LOK |
917 | |
918 | return *this; | |
919 | } | |
920 | ||
6b4d1b3a LOK |
921 | bool operator ==(const struct cec_datapacket& packet) const |
922 | { | |
923 | if (size != packet.size) | |
924 | return false; | |
925 | for (uint8_t iPtr = 0; iPtr < size; iPtr++) | |
926 | if (packet.data[iPtr] != data[iPtr]) | |
927 | return false; | |
928 | return true; | |
929 | } | |
930 | ||
f1f91c81 LOK |
931 | bool IsEmpty(void) const { return size == 0; } /**< @return True when this packet is empty, false otherwise. */ |
932 | bool IsFull(void) const { return size == 100; } /**< @return True when this packet is false, false otherwise. */ | |
933 | ||
934 | /*! | |
935 | * @brief Get the byte at the requested position. | |
936 | * @param pos The position. | |
937 | * @return The byte, or 0 when out of bounds. | |
938 | */ | |
acec5f48 | 939 | uint8_t operator[](uint8_t pos) const { return pos < size ? data[pos] : 0; } |
f1f91c81 LOK |
940 | /*! |
941 | * @brief Get the byte at the requested position. | |
942 | * @param pos The position. | |
943 | * @return The byte, or 0 when out of bounds. | |
944 | */ | |
ab1469a0 | 945 | uint8_t At(uint8_t pos) const { return pos < size ? data[pos] : 0; } |
acec5f48 | 946 | |
f1f91c81 LOK |
947 | /*! |
948 | * @brief Shift the contents of this packet. | |
949 | * @param iShiftBy The number of positions to shift. | |
950 | */ | |
ab1469a0 | 951 | void Shift(uint8_t iShiftBy) |
acec5f48 LOK |
952 | { |
953 | if (iShiftBy >= size) | |
954 | { | |
ab1469a0 | 955 | Clear(); |
acec5f48 LOK |
956 | } |
957 | else | |
958 | { | |
959 | for (uint8_t iPtr = 0; iPtr < size; iPtr++) | |
960 | data[iPtr] = (iPtr + iShiftBy < size) ? data[iPtr + iShiftBy] : 0; | |
961 | size = (uint8_t) (size - iShiftBy); | |
962 | } | |
963 | } | |
964 | ||
f1f91c81 LOK |
965 | /*! |
966 | * @brief Push a byte to the end of this packet. | |
967 | * @param add The byte to add. | |
968 | */ | |
ab1469a0 | 969 | void PushBack(uint8_t add) |
acec5f48 LOK |
970 | { |
971 | if (size < 100) | |
972 | data[size++] = add; | |
973 | } | |
974 | ||
f1f91c81 LOK |
975 | /*! |
976 | * @brief Clear this packet. | |
977 | */ | |
ab1469a0 | 978 | void Clear(void) |
acec5f48 LOK |
979 | { |
980 | memset(data, 0, sizeof(data)); | |
981 | size = 0; | |
982 | } | |
983 | #endif | |
984 | ||
985 | } cec_datapacket; | |
986 | ||
acec5f48 LOK |
987 | typedef struct cec_command |
988 | { | |
8d901fdb LOK |
989 | cec_logical_address initiator; /**< the logical address of the initiator of this message */ |
990 | cec_logical_address destination; /**< the logical address of the destination of this message */ | |
991 | int8_t ack; /**< 1 when the ACK bit is set, 0 otherwise */ | |
992 | int8_t eom; /**< 1 when the EOM bit is set, 0 otherwise */ | |
993 | cec_opcode opcode; /**< the opcode of this message */ | |
994 | cec_datapacket parameters; /**< the parameters attached to this message */ | |
995 | int8_t opcode_set; /**< 1 when an opcode is set, 0 otherwise (POLL message) */ | |
996 | int32_t transmit_timeout; /**< the timeout to use in ms */ | |
acec5f48 LOK |
997 | |
998 | #ifdef __cplusplus | |
2d4e263c LOK |
999 | cec_command(void) |
1000 | { | |
1001 | Clear(); | |
1002 | } | |
a928fcdc | 1003 | |
60a245d1 LOK |
1004 | cec_command &operator =(const struct cec_command &command) |
1005 | { | |
1006 | initiator = command.initiator; | |
1007 | destination = command.destination; | |
1008 | ack = command.ack; | |
1009 | eom = command.eom; | |
1010 | opcode = command.opcode; | |
1011 | opcode_set = command.opcode_set; | |
1012 | transmit_timeout = command.transmit_timeout; | |
1013 | parameters = command.parameters; | |
1014 | ||
1015 | return *this; | |
1016 | } | |
1017 | ||
f1f91c81 LOK |
1018 | /*! |
1019 | * @brief Formats a cec_command. | |
1020 | * @param command The command to format. | |
1021 | * @param initiator The logical address of the initiator. | |
1022 | * @param destination The logical addres of the destination. | |
1023 | * @param opcode The opcode of the command. | |
1024 | * @param timeout The transmission timeout. | |
1025 | */ | |
ae693aaa | 1026 | static void Format(cec_command &command, cec_logical_address initiator, cec_logical_address destination, cec_opcode opcode, int32_t timeout = CEC_DEFAULT_TRANSMIT_TIMEOUT) |
acec5f48 | 1027 | { |
ab1469a0 | 1028 | command.Clear(); |
caaf64d7 LOK |
1029 | command.initiator = initiator; |
1030 | command.destination = destination; | |
1031 | command.transmit_timeout = timeout; | |
57f45e6c LOK |
1032 | if (opcode != CEC_OPCODE_NONE) |
1033 | { | |
1034 | command.opcode = opcode; | |
1035 | command.opcode_set = 1; | |
1036 | } | |
acec5f48 LOK |
1037 | } |
1038 | ||
f1f91c81 LOK |
1039 | /*! |
1040 | * @brief Push a byte to the back of this command. | |
1041 | * @param data The byte to push. | |
1042 | */ | |
ab1469a0 | 1043 | void PushBack(uint8_t data) |
acec5f48 | 1044 | { |
b2da2768 LOK |
1045 | if (initiator == CECDEVICE_UNKNOWN && destination == CECDEVICE_UNKNOWN) |
1046 | { | |
1047 | initiator = (cec_logical_address) (data >> 4); | |
1048 | destination = (cec_logical_address) (data & 0xF); | |
1049 | } | |
1050 | else if (!opcode_set) | |
acec5f48 | 1051 | { |
02ee2c68 | 1052 | opcode_set = 1; |
acec5f48 LOK |
1053 | opcode = (cec_opcode) data; |
1054 | } | |
1055 | else | |
ab1469a0 | 1056 | parameters.PushBack(data); |
acec5f48 LOK |
1057 | } |
1058 | ||
f1f91c81 LOK |
1059 | /*! |
1060 | * @brief Clear this command, resetting everything to the default values. | |
1061 | */ | |
ab1469a0 | 1062 | void Clear(void) |
acec5f48 | 1063 | { |
1f0e9e0f LOK |
1064 | initiator = CECDEVICE_UNKNOWN; |
1065 | destination = CECDEVICE_UNKNOWN; | |
1066 | ack = 0; | |
1067 | eom = 0; | |
1068 | opcode_set = 0; | |
1069 | opcode = CEC_OPCODE_FEATURE_ABORT; | |
ae693aaa | 1070 | transmit_timeout = CEC_DEFAULT_TRANSMIT_TIMEOUT; |
ab1469a0 | 1071 | parameters.Clear(); |
acec5f48 | 1072 | }; |
24d82513 LOK |
1073 | |
1074 | static cec_opcode GetResponseOpcode(cec_opcode opcode) | |
1075 | { | |
1076 | switch (opcode) | |
1077 | { | |
1078 | case CEC_OPCODE_REQUEST_ACTIVE_SOURCE: | |
1079 | return CEC_OPCODE_ACTIVE_SOURCE; | |
1080 | case CEC_OPCODE_GET_CEC_VERSION: | |
1081 | return CEC_OPCODE_CEC_VERSION; | |
1082 | case CEC_OPCODE_GIVE_PHYSICAL_ADDRESS: | |
1083 | return CEC_OPCODE_REPORT_PHYSICAL_ADDRESS; | |
1084 | case CEC_OPCODE_GET_MENU_LANGUAGE: | |
1085 | return CEC_OPCODE_SET_MENU_LANGUAGE; | |
1086 | case CEC_OPCODE_GIVE_DECK_STATUS: | |
1087 | return CEC_OPCODE_DECK_STATUS; | |
1088 | case CEC_OPCODE_GIVE_TUNER_DEVICE_STATUS: | |
1089 | return CEC_OPCODE_TUNER_DEVICE_STATUS; | |
1090 | case CEC_OPCODE_GIVE_DEVICE_VENDOR_ID: | |
1091 | return CEC_OPCODE_DEVICE_VENDOR_ID; | |
1092 | case CEC_OPCODE_GIVE_OSD_NAME: | |
4fde2fd0 | 1093 | return CEC_OPCODE_SET_OSD_NAME; |
24d82513 LOK |
1094 | case CEC_OPCODE_MENU_REQUEST: |
1095 | return CEC_OPCODE_MENU_STATUS; | |
1096 | case CEC_OPCODE_GIVE_DEVICE_POWER_STATUS: | |
1097 | return CEC_OPCODE_REPORT_POWER_STATUS; | |
1098 | case CEC_OPCODE_GIVE_AUDIO_STATUS: | |
1099 | return CEC_OPCODE_REPORT_AUDIO_STATUS; | |
1100 | case CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS: | |
1101 | return CEC_OPCODE_SYSTEM_AUDIO_MODE_STATUS; | |
1102 | case CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST: | |
1103 | return CEC_OPCODE_SET_SYSTEM_AUDIO_MODE; | |
1104 | default: | |
1105 | break; | |
1106 | } | |
1107 | ||
4fde2fd0 | 1108 | return CEC_OPCODE_NONE; |
24d82513 | 1109 | } |
0b7822f9 LOK |
1110 | |
1111 | void PushArray(size_t len, uint8_t *data) | |
1112 | { | |
1113 | for (size_t iPtr = 0; iPtr < len; iPtr++) | |
1114 | PushBack(data[iPtr]); | |
1115 | } | |
acec5f48 LOK |
1116 | #endif |
1117 | } cec_command; | |
1118 | ||
5ae8fa48 | 1119 | typedef struct cec_device_type_list |
acec5f48 | 1120 | { |
8d901fdb | 1121 | cec_device_type types[5]; /**< the list of device types */ |
0500da96 | 1122 | |
5ae8fa48 | 1123 | #ifdef __cplusplus |
f1f91c81 LOK |
1124 | /*! |
1125 | * @brief Clear this list. | |
1126 | */ | |
c23380e7 | 1127 | void Clear(void) |
5ae8fa48 LOK |
1128 | { |
1129 | for (unsigned int iPtr = 0; iPtr < 5; iPtr++) | |
1130 | types[iPtr] = CEC_DEVICE_TYPE_RESERVED; | |
1131 | } | |
eafd9bed | 1132 | |
f1f91c81 LOK |
1133 | /*! |
1134 | * @brief Add a type to this list. | |
1135 | * @param type The type to add. | |
1136 | */ | |
c23380e7 | 1137 | void Add(const cec_device_type type) |
5ae8fa48 LOK |
1138 | { |
1139 | for (unsigned int iPtr = 0; iPtr < 5; iPtr++) | |
1140 | { | |
1141 | if (types[iPtr] == CEC_DEVICE_TYPE_RESERVED) | |
1142 | { | |
1143 | types[iPtr] = type; | |
1144 | break; | |
1145 | } | |
1146 | } | |
1147 | } | |
1148 | ||
f1f91c81 LOK |
1149 | /*! |
1150 | * @brief Check whether a type is set in this list. | |
1151 | * @param type The type to check. | |
1152 | * @return True when set, false otherwise. | |
1153 | */ | |
c30acafa | 1154 | bool IsSet(cec_device_type type) |
5ae8fa48 LOK |
1155 | { |
1156 | bool bReturn(false); | |
1157 | for (unsigned int iPtr = 0; !bReturn && iPtr < 5; iPtr++) | |
1158 | { | |
1159 | if (types[iPtr] == type) | |
1160 | bReturn = true; | |
1161 | } | |
1162 | return bReturn; | |
1163 | } | |
1164 | ||
f1f91c81 LOK |
1165 | /*! |
1166 | * @return True when this list is empty, false otherwise. | |
1167 | */ | |
7c5c5bf4 | 1168 | bool IsEmpty() const |
5ae8fa48 LOK |
1169 | { |
1170 | bool bReturn(true); | |
1171 | for (unsigned int iPtr = 0; bReturn && iPtr < 5; iPtr++) | |
1172 | { | |
1173 | if (types[iPtr] != CEC_DEVICE_TYPE_RESERVED) | |
1174 | bReturn = false; | |
1175 | } | |
1176 | return bReturn; | |
1177 | } | |
1178 | ||
f1f91c81 LOK |
1179 | /*! |
1180 | * @brief Get the type at the requested position. | |
1181 | * @param pos The position. | |
1182 | * @return The type, or CEC_DEVICE_TYPE_RESERVED when out of bounds. | |
1183 | */ | |
5ae8fa48 | 1184 | cec_device_type operator[](uint8_t pos) const { return pos < 5 ? types[pos] : CEC_DEVICE_TYPE_RESERVED; } |
f1f91c81 | 1185 | |
30b4aac0 LOK |
1186 | bool operator==(const cec_device_type_list &other) const |
1187 | { | |
1188 | bool bEqual(true); | |
1189 | for (uint8_t iPtr = 0; iPtr < 5; iPtr++) | |
1190 | bEqual &= (types[iPtr] == other[iPtr]); | |
1191 | return bEqual; | |
1192 | } | |
1193 | ||
1194 | bool operator!=(const cec_device_type_list &other) const | |
1195 | { | |
1196 | return !(*this == other); | |
1197 | } | |
5ae8fa48 LOK |
1198 | #endif |
1199 | } cec_device_type_list; | |
1200 | ||
1201 | typedef struct cec_logical_addresses | |
1202 | { | |
8d901fdb LOK |
1203 | cec_logical_address primary; /**< the primary logical address to use */ |
1204 | int addresses[16]; /**< the list of addresses */ | |
5ae8fa48 LOK |
1205 | |
1206 | #ifdef __cplusplus | |
f1f91c81 LOK |
1207 | /*! |
1208 | * @brief Clear this list. | |
1209 | */ | |
5ae8fa48 LOK |
1210 | void Clear(void) |
1211 | { | |
004b8382 | 1212 | primary = CECDEVICE_UNREGISTERED; |
5ae8fa48 LOK |
1213 | for (unsigned int iPtr = 0; iPtr < 16; iPtr++) |
1214 | addresses[iPtr] = 0; | |
1215 | } | |
1216 | ||
f1f91c81 LOK |
1217 | /*! |
1218 | * @return True when empty, false otherwise. | |
1219 | */ | |
5ae8fa48 LOK |
1220 | bool IsEmpty(void) const |
1221 | { | |
004b8382 | 1222 | return primary == CECDEVICE_UNREGISTERED; |
5ae8fa48 LOK |
1223 | } |
1224 | ||
f1f91c81 LOK |
1225 | /*! |
1226 | * @brief Calculate the ack-mask for this list, the mask to use when determining whether to send an ack message or not. | |
1227 | * @return The ack-mask. | |
1228 | */ | |
5ae8fa48 LOK |
1229 | uint16_t AckMask(void) const |
1230 | { | |
1231 | uint16_t mask = 0; | |
1232 | for (unsigned int iPtr = 0; iPtr < 16; iPtr++) | |
1233 | if (addresses[iPtr] == 1) | |
1234 | mask |= 0x1 << iPtr; | |
1235 | return mask; | |
1236 | } | |
1237 | ||
f1f91c81 LOK |
1238 | /*! |
1239 | * @brief Mark a logical address as 'set' | |
1240 | * @param address The logical address to add to this list. | |
1241 | */ | |
5ae8fa48 LOK |
1242 | void Set(cec_logical_address address) |
1243 | { | |
004b8382 | 1244 | if (primary == CECDEVICE_UNREGISTERED) |
5ae8fa48 LOK |
1245 | primary = address; |
1246 | ||
1247 | addresses[(int) address] = 1; | |
1248 | } | |
1249 | ||
f1f91c81 LOK |
1250 | /*! |
1251 | * @brief Mark a logical address as 'unset' | |
1252 | * @param address The logical address to remove from this list. | |
1253 | */ | |
004b8382 | 1254 | void Unset(const cec_logical_address address) |
5ae8fa48 LOK |
1255 | { |
1256 | if (primary == address) | |
004b8382 | 1257 | primary = CECDEVICE_UNREGISTERED; |
5ae8fa48 LOK |
1258 | |
1259 | addresses[(int) address] = 0; | |
1260 | } | |
1261 | ||
f1f91c81 LOK |
1262 | /*! |
1263 | * @brief Check whether an address is set in this list. | |
1264 | * @param address The address to check. | |
1265 | * @return True when set, false otherwise. | |
1266 | */ | |
c30acafa | 1267 | bool IsSet(cec_logical_address address) const { return addresses[(int) address] == 1; } |
f1f91c81 LOK |
1268 | |
1269 | /*! | |
1270 | * @brief Check whether an address is set in this list. | |
1271 | * @param pos The address to check. | |
1272 | * @return True when set, false otherwise. | |
1273 | */ | |
5ae8fa48 | 1274 | bool operator[](uint8_t pos) const { return pos < 16 ? IsSet((cec_logical_address) pos) : false; } |
30b4aac0 LOK |
1275 | |
1276 | bool operator==(const cec_logical_addresses &other) const | |
1277 | { | |
1278 | bool bEqual(true); | |
1279 | for (uint8_t iPtr = 0; iPtr < 16; iPtr++) | |
1280 | bEqual &= ((addresses[(int)iPtr] == 1) == other[iPtr]); | |
1281 | return bEqual; | |
1282 | } | |
1283 | ||
1284 | bool operator!=(const cec_logical_addresses &other) const | |
1285 | { | |
1286 | return !(*this == other); | |
1287 | } | |
5ae8fa48 LOK |
1288 | #endif |
1289 | } cec_logical_addresses; | |
acec5f48 | 1290 | |
5ee37222 MK |
1291 | typedef enum libcec_alert |
1292 | { | |
b1c47f9d | 1293 | CEC_ALERT_SERVICE_DEVICE, |
7068f331 LOK |
1294 | CEC_ALERT_CONNECTION_LOST, |
1295 | CEC_ALERT_PERMISSION_ERROR, | |
7e312a79 | 1296 | CEC_ALERT_PORT_BUSY, |
237d091c LOK |
1297 | CEC_ALERT_PHYSICAL_ADDRESS_ERROR, |
1298 | CEC_ALERT_TV_POLL_FAILED | |
5ee37222 MK |
1299 | } libcec_alert; |
1300 | ||
1301 | typedef enum libcec_parameter_type | |
1302 | { | |
5daed059 LOK |
1303 | CEC_PARAMETER_TYPE_STRING, |
1304 | CEC_PARAMETER_TYPE_UNKOWN | |
5ee37222 MK |
1305 | } libcec_parameter_type; |
1306 | ||
dbe84b6e | 1307 | typedef struct libcec_parameter |
5ee37222 | 1308 | { |
8d901fdb LOK |
1309 | libcec_parameter_type paramType; /**< the type of this parameter */ |
1310 | void* paramData; /**< the value of this parameter */ | |
dbe84b6e | 1311 | } libcec_parameter; |
5ee37222 | 1312 | |
dbe84b6e | 1313 | typedef struct libcec_configuration libcec_configuration; |
32403cc3 | 1314 | |
3ad0aa0a LOK |
1315 | typedef int (CEC_CDECL* CBCecLogMessageType)(void*, const cec_log_message); |
1316 | typedef int (CEC_CDECL* CBCecKeyPressType)(void*, const cec_keypress); | |
1317 | typedef int (CEC_CDECL* CBCecCommandType)(void*, const cec_command); | |
1318 | typedef int (CEC_CDECL* CBCecConfigurationChangedType)(void*, const libcec_configuration); | |
1319 | typedef int (CEC_CDECL* CBCecAlertType)(void*, const libcec_alert, const libcec_parameter); | |
1320 | typedef int (CEC_CDECL* CBCecMenuStateChangedType)(void*, const cec_menu_state); | |
1321 | typedef void (CEC_CDECL* CBCecSourceActivatedType)(void*, const cec_logical_address, const uint8_t); | |
c3039d2e LOK |
1322 | |
1323 | typedef struct ICECCallbacks | |
fa4798bd LOK |
1324 | { |
1325 | /*! | |
1326 | * @brief Transfer a log message from libCEC to the client. | |
1327 | * @param message The message to transfer. | |
1328 | * @return 1 when ok, 0 otherwise. | |
1329 | */ | |
c3039d2e | 1330 | CBCecLogMessageType CBCecLogMessage; |
fa4798bd LOK |
1331 | |
1332 | /*! | |
1333 | * @brief Transfer a keypress from libCEC to the client. | |
1334 | * @param key The keypress to transfer. | |
1335 | * @return 1 when ok, 0 otherwise. | |
1336 | */ | |
c3039d2e | 1337 | CBCecKeyPressType CBCecKeyPress; |
fa4798bd LOK |
1338 | |
1339 | /*! | |
1340 | * @brief Transfer a CEC command from libCEC to the client. | |
1341 | * @param command The command to transfer. | |
1342 | * @return 1 when ok, 0 otherwise. | |
1343 | */ | |
c3039d2e | 1344 | CBCecCommandType CBCecCommand; |
32403cc3 LOK |
1345 | |
1346 | /*! | |
1347 | * @brief Transfer a changed configuration from libCEC to the client | |
1348 | * @param configuration The configuration to transfer | |
1349 | * @return 1 when ok, 0 otherwise | |
1350 | */ | |
1351 | CBCecConfigurationChangedType CBCecConfigurationChanged; | |
5ee37222 MK |
1352 | |
1353 | /*! | |
8d901fdb LOK |
1354 | * @brief Transfer a libcec alert message from libCEC to the client |
1355 | * @param alert The alert type transfer. | |
1356 | * @param data Misc. additional information. | |
5ee37222 MK |
1357 | * @return 1 when ok, 0 otherwise |
1358 | */ | |
1359 | CBCecAlertType CBCecAlert; | |
e1804a4e LOK |
1360 | |
1361 | /*! | |
c3ce6b47 LOK |
1362 | * @brief Transfer a menu state change to the client. |
1363 | * Transfer a menu state change to the client. If the command returns 1, then the change will be processed by | |
e1804a4e | 1364 | * the busdevice. If 0, then the state of the busdevice won't be changed, and will always be kept 'activated', |
6ad51ff5 | 1365 | * @warning CEC does not allow the player to suppress the menu state change on the TV, so the menu on the TV will always be displayed, whatever the return value of this method is. |
e1804a4e LOK |
1366 | * so keypresses are always routed. |
1367 | * @param newVal The new value. | |
6ad51ff5 | 1368 | * @return 1 when libCEC should use this new value, 0 otherwise. |
e1804a4e | 1369 | */ |
c3ce6b47 | 1370 | CBCecMenuStateChangedType CBCecMenuStateChanged; |
e1804a4e | 1371 | |
29d5198c LOK |
1372 | /*! |
1373 | * @brief Called when a source that's handled by this client is activated. | |
1374 | * @param logicalAddress The address that was just activated. | |
1375 | * @param bActivated 1 when activated, 0 when deactivated. | |
1376 | */ | |
1377 | CBCecSourceActivatedType CBCecSourceActivated; | |
1378 | ||
e1804a4e | 1379 | #ifdef __cplusplus |
2d4e263c LOK |
1380 | ICECCallbacks(void) { Clear(); } |
1381 | ~ICECCallbacks(void) { Clear(); }; | |
e1804a4e LOK |
1382 | |
1383 | void Clear(void) | |
1384 | { | |
1385 | CBCecLogMessage = NULL; | |
1386 | CBCecKeyPress = NULL; | |
1387 | CBCecCommand = NULL; | |
1388 | CBCecConfigurationChanged = NULL; | |
1389 | CBCecAlert = NULL; | |
c3ce6b47 | 1390 | CBCecMenuStateChanged = NULL; |
29d5198c | 1391 | CBCecSourceActivated = NULL; |
e1804a4e LOK |
1392 | } |
1393 | #endif | |
c3039d2e | 1394 | } ICECCallbacks; |
fa4798bd | 1395 | |
caca2d81 LOK |
1396 | typedef enum cec_client_version |
1397 | { | |
1398 | CEC_CLIENT_VERSION_PRE_1_5 = 0, | |
41e3372a | 1399 | CEC_CLIENT_VERSION_1_5_0 = 0x1500, |
2e82cff0 | 1400 | CEC_CLIENT_VERSION_1_5_1 = 0x1501, |
dd18e809 LOK |
1401 | CEC_CLIENT_VERSION_1_5_2 = 0x1502, |
1402 | CEC_CLIENT_VERSION_1_5_3 = 0x1503, | |
e4a7396c | 1403 | CEC_CLIENT_VERSION_1_6_0 = 0x1600, |
3ef17606 | 1404 | CEC_CLIENT_VERSION_1_6_1 = 0x1601, |
5f2f3609 | 1405 | CEC_CLIENT_VERSION_1_6_2 = 0x1602, |
0a61dc24 | 1406 | CEC_CLIENT_VERSION_1_6_3 = 0x1603, |
92eea1e7 | 1407 | CEC_CLIENT_VERSION_1_7_0 = 0x1700, |
2b44051c LOK |
1408 | CEC_CLIENT_VERSION_1_7_1 = 0x1701, |
1409 | CEC_CLIENT_VERSION_1_7_2 = 0x1702, | |
7e316a2f | 1410 | CEC_CLIENT_VERSION_1_8_0 = 0x1800, |
2d418322 | 1411 | CEC_CLIENT_VERSION_1_8_1 = 0x1801, |
1664420d | 1412 | CEC_CLIENT_VERSION_1_8_2 = 0x1802, |
f81c0652 LOK |
1413 | CEC_CLIENT_VERSION_1_9_0 = 0x1900, |
1414 | CEC_CLIENT_VERSION_1_99_0 = 0x1990, | |
999665e3 | 1415 | CEC_CLIENT_VERSION_2_0_0 = 0x2000, |
20fd14a9 | 1416 | CEC_CLIENT_VERSION_2_0_1 = 0x2001, |
784a6a79 | 1417 | CEC_CLIENT_VERSION_2_0_2 = 0x2002, |
83715833 | 1418 | CEC_CLIENT_VERSION_2_0_3 = 0x2003, |
0c271bd0 | 1419 | CEC_CLIENT_VERSION_2_0_4 = 0x2004, |
ac3f9901 | 1420 | CEC_CLIENT_VERSION_2_0_5 = 0x2005, |
9b56a19a | 1421 | CEC_CLIENT_VERSION_2_1_0 = 0x2100, |
331d659e | 1422 | CEC_CLIENT_VERSION_2_1_1 = 0x2101, |
b53bfc2d LOK |
1423 | CEC_CLIENT_VERSION_2_1_2 = 0x2102, |
1424 | CEC_CLIENT_VERSION_2_1_3 = 0x2103, | |
1425 | CEC_CLIENT_VERSION_CURRENT = 0x2103 | |
caca2d81 LOK |
1426 | } cec_client_version; |
1427 | ||
3efda01a LOK |
1428 | typedef enum cec_server_version |
1429 | { | |
1430 | CEC_SERVER_VERSION_PRE_1_5 = 0, | |
41e3372a | 1431 | CEC_SERVER_VERSION_1_5_0 = 0x1500, |
2e82cff0 | 1432 | CEC_SERVER_VERSION_1_5_1 = 0x1501, |
dd18e809 | 1433 | CEC_SERVER_VERSION_1_5_2 = 0x1502, |
e69d8f19 | 1434 | CEC_SERVER_VERSION_1_5_3 = 0x1503, |
e4a7396c | 1435 | CEC_SERVER_VERSION_1_6_0 = 0x1600, |
0b714871 | 1436 | CEC_SERVER_VERSION_1_6_1 = 0x1601, |
5f2f3609 | 1437 | CEC_SERVER_VERSION_1_6_2 = 0x1602, |
0a61dc24 | 1438 | CEC_SERVER_VERSION_1_6_3 = 0x1603, |
92eea1e7 | 1439 | CEC_SERVER_VERSION_1_7_0 = 0x1700, |
2b44051c LOK |
1440 | CEC_SERVER_VERSION_1_7_1 = 0x1701, |
1441 | CEC_SERVER_VERSION_1_7_2 = 0x1702, | |
7e316a2f | 1442 | CEC_SERVER_VERSION_1_8_0 = 0x1800, |
2d418322 | 1443 | CEC_SERVER_VERSION_1_8_1 = 0x1801, |
1664420d | 1444 | CEC_SERVER_VERSION_1_8_2 = 0x1802, |
f81c0652 LOK |
1445 | CEC_SERVER_VERSION_1_9_0 = 0x1900, |
1446 | CEC_SERVER_VERSION_1_99_0 = 0x1990, | |
999665e3 | 1447 | CEC_SERVER_VERSION_2_0_0 = 0x2000, |
20fd14a9 | 1448 | CEC_SERVER_VERSION_2_0_1 = 0x2001, |
784a6a79 | 1449 | CEC_SERVER_VERSION_2_0_2 = 0x2002, |
83715833 | 1450 | CEC_SERVER_VERSION_2_0_3 = 0x2003, |
0c271bd0 | 1451 | CEC_SERVER_VERSION_2_0_4 = 0x2004, |
ac3f9901 | 1452 | CEC_SERVER_VERSION_2_0_5 = 0x2005, |
9b56a19a | 1453 | CEC_SERVER_VERSION_2_1_0 = 0x2100, |
331d659e | 1454 | CEC_SERVER_VERSION_2_1_1 = 0x2101, |
b53bfc2d LOK |
1455 | CEC_SERVER_VERSION_2_1_2 = 0x2102, |
1456 | CEC_SERVER_VERSION_2_1_3 = 0x2103, | |
1457 | CEC_SERVER_VERSION_CURRENT = 0x2103 | |
3efda01a LOK |
1458 | } cec_server_version; |
1459 | ||
dbe84b6e | 1460 | struct libcec_configuration |
caca2d81 | 1461 | { |
3efda01a | 1462 | uint32_t clientVersion; /*!< the version of the client that is connecting */ |
f81c0652 LOK |
1463 | char strDeviceName[13]; /*!< the device name to use on the CEC bus */ |
1464 | cec_device_type_list deviceTypes; /*!< the device type(s) to use on the CEC bus for libCEC */ | |
20be20ea | 1465 | uint8_t bAutodetectAddress; /*!< (read only) set to 1 by libCEC when the physical address was autodetected */ |
f81c0652 LOK |
1466 | uint16_t iPhysicalAddress; /*!< the physical address of the CEC adapter */ |
1467 | cec_logical_address baseDevice; /*!< the logical address of the device to which the adapter is connected. only used when iPhysicalAddress = 0 or when the adapter doesn't support autodetection */ | |
1468 | uint8_t iHDMIPort; /*!< the HDMI port to which the adapter is connected. only used when iPhysicalAddress = 0 or when the adapter doesn't support autodetection */ | |
3efda01a | 1469 | uint64_t tvVendor; /*!< override the vendor ID of the TV. leave this untouched to autodetect */ |
f81c0652 LOK |
1470 | cec_logical_addresses wakeDevices; /*!< list of devices to wake when initialising libCEC or when calling PowerOnDevices() without any parameter. */ |
1471 | cec_logical_addresses powerOffDevices; /*!< list of devices to power off when calling StandbyDevices() without any parameter. */ | |
224ea877 | 1472 | |
c9549d35 | 1473 | uint32_t serverVersion; /*!< the version number of the server. read-only */ |
3efda01a | 1474 | |
224ea877 | 1475 | // player specific settings |
d068b3d4 LOK |
1476 | uint8_t bGetSettingsFromROM; /*!< true to get the settings from the ROM (if set, and a v2 ROM is present), false to use these settings. */ |
1477 | uint8_t bUseTVMenuLanguage; /*!< use the menu language of the TV in the player application */ | |
ca27e6cf | 1478 | uint8_t bActivateSource; /*!< make libCEC the active source on the bus when starting the player application */ |
d068b3d4 | 1479 | uint8_t bPowerOffScreensaver; /*!< put devices in standby mode when activating the screensaver */ |
d18ea27b | 1480 | uint8_t bPowerOnScreensaver; /*!< wake devices when deactivating the screensaver */ |
fa4b80df | 1481 | uint8_t bPowerOffOnStandby; /*!< put this PC in standby mode when the TV is switched off. only used when bShutdownOnStandby = 0 */ |
41e3372a | 1482 | uint8_t bSendInactiveSource; /*!< send an 'inactive source' message when stopping the player. added in 1.5.1 */ |
caca2d81 | 1483 | |
d068b3d4 LOK |
1484 | void * callbackParam; /*!< the object to pass along with a call of the callback methods. NULL to ignore */ |
1485 | ICECCallbacks * callbacks; /*!< the callback methods to use. set this to NULL when not using callbacks */ | |
caca2d81 | 1486 | |
20be20ea LOK |
1487 | cec_logical_addresses logicalAddresses; /*!< (read-only) the current logical addresses. added in 1.5.3 */ |
1488 | uint16_t iFirmwareVersion; /*!< (read-only) the firmware version of the adapter. added in 1.6.0 */ | |
b98fc43d | 1489 | uint8_t bPowerOffDevicesOnStandby; /*!< put devices in standby when the PC/player is put in standby. added in 1.6.0 */ |
fa4b80df | 1490 | uint8_t bShutdownOnStandby; /*!< shutdown this PC when the TV is switched off. only used when bPowerOffOnStandby = 0. added in 1.6.0 */ |
7f274e72 | 1491 | char strDeviceLanguage[3]; /*!< the menu language used by the client. 3 character ISO 639-2 country code. see http://http://www.loc.gov/standards/iso639-2/ added in 1.6.2 */ |
20be20ea | 1492 | uint32_t iFirmwareBuildDate; /*!< (read-only) the build date of the firmware, in seconds since epoch. if not available, this value will be set to 0. added in 1.6.2 */ |
5f2f3609 | 1493 | uint8_t bMonitorOnly; /*!< won't allocate a CCECClient when starting the connection when set (same as monitor mode). added in 1.6.3 */ |
2b44051c | 1494 | cec_version cecVersion; /*!< CEC spec version to use by libCEC. defaults to v1.4. added in 1.8.0 */ |
2d418322 | 1495 | cec_adapter_type adapterType; /*!< type of the CEC adapter that we're connected to. added in 1.8.2 */ |
f4b44425 | 1496 | uint8_t iDoubleTapTimeoutMs; /*!< prevent double taps withing this timeout. defaults to 200ms. added in 2.0.0 */ |
ac3f9901 LOK |
1497 | cec_user_control_code comboKey; /*!< key code that initiates combo keys. defaults to CEC_USER_CONTROL_CODE_F1_BLUE. CEC_USER_CONTROL_CODE_UNKNOWN to disable. added in 2.0.5 */ |
1498 | uint32_t iComboKeyTimeoutMs; /*!< timeout until the combo key is sent as normal keypress */ | |
dd18e809 | 1499 | |
caca2d81 | 1500 | #ifdef __cplusplus |
2d4e263c LOK |
1501 | libcec_configuration(void) { Clear(); } |
1502 | ~libcec_configuration(void) { Clear(); } | |
e1804a4e | 1503 | |
b9dd18f9 LOK |
1504 | bool operator==(const libcec_configuration &other) const |
1505 | { | |
89be86b1 LOK |
1506 | return ( clientVersion == other.clientVersion && |
1507 | !strncmp(strDeviceName, other.strDeviceName, 13) && | |
1508 | deviceTypes == other.deviceTypes && | |
1509 | bAutodetectAddress == other.bAutodetectAddress && | |
1510 | iPhysicalAddress == other.iPhysicalAddress && | |
1511 | baseDevice == other.baseDevice && | |
1512 | iHDMIPort == other.iHDMIPort && | |
1513 | tvVendor == other.tvVendor && | |
1514 | wakeDevices == other.wakeDevices && | |
1515 | powerOffDevices == other.powerOffDevices && | |
1516 | serverVersion == other.serverVersion && | |
1517 | bGetSettingsFromROM == other.bGetSettingsFromROM && | |
1518 | bUseTVMenuLanguage == other.bUseTVMenuLanguage && | |
1519 | bActivateSource == other.bActivateSource && | |
1520 | bPowerOffScreensaver == other.bPowerOffScreensaver && | |
1521 | bPowerOffOnStandby == other.bPowerOffOnStandby && | |
1522 | bSendInactiveSource == other.bSendInactiveSource && | |
1523 | logicalAddresses == other.logicalAddresses && | |
1524 | iFirmwareVersion == other.iFirmwareVersion && | |
1525 | bPowerOffDevicesOnStandby == other.bPowerOffDevicesOnStandby && | |
1526 | bShutdownOnStandby == other.bShutdownOnStandby && | |
1527 | !strncmp(strDeviceLanguage, other.strDeviceLanguage, 3) && | |
1528 | iFirmwareBuildDate == other.iFirmwareBuildDate && | |
1529 | bMonitorOnly == other.bMonitorOnly && | |
1530 | cecVersion == other.cecVersion && | |
f4b44425 | 1531 | adapterType == other.adapterType && |
ac3f9901 | 1532 | iDoubleTapTimeoutMs == other.iDoubleTapTimeoutMs && |
d18ea27b JM |
1533 | (other.clientVersion <= CEC_CLIENT_VERSION_2_0_4 || comboKey == other.comboKey) && |
1534 | (other.clientVersion <= CEC_CLIENT_VERSION_2_0_4 || iComboKeyTimeoutMs == other.iComboKeyTimeoutMs) && | |
1535 | (other.clientVersion < CEC_CLIENT_VERSION_2_1_0 || bPowerOnScreensaver == other.bPowerOnScreensaver)); | |
b9dd18f9 LOK |
1536 | } |
1537 | ||
1538 | bool operator!=(const libcec_configuration &other) const | |
1539 | { | |
1540 | return !(*this == other); | |
1541 | } | |
1542 | ||
f1f91c81 LOK |
1543 | /*! |
1544 | * @brief Reset this configution struct to the default values. | |
1545 | */ | |
caca2d81 LOK |
1546 | void Clear(void) |
1547 | { | |
d2d1660c | 1548 | iPhysicalAddress = CEC_PHYSICAL_ADDRESS_TV; |
7f274e72 LOK |
1549 | baseDevice = (cec_logical_address)CEC_DEFAULT_BASE_DEVICE; |
1550 | iHDMIPort = CEC_DEFAULT_HDMI_PORT; | |
1551 | tvVendor = (uint64_t)CEC_VENDOR_UNKNOWN; | |
ac3f9901 LOK |
1552 | clientVersion = (uint32_t)CEC_CLIENT_VERSION_CURRENT; |
1553 | serverVersion = (uint32_t)CEC_SERVER_VERSION_CURRENT; | |
20be20ea | 1554 | bAutodetectAddress = 0; |
64ec6e79 | 1555 | bGetSettingsFromROM = CEC_DEFAULT_SETTING_GET_SETTINGS_FROM_ROM; |
7f274e72 LOK |
1556 | bUseTVMenuLanguage = CEC_DEFAULT_SETTING_USE_TV_MENU_LANGUAGE; |
1557 | bActivateSource = CEC_DEFAULT_SETTING_ACTIVATE_SOURCE; | |
1558 | bPowerOffScreensaver = CEC_DEFAULT_SETTING_POWER_OFF_SCREENSAVER; | |
d18ea27b | 1559 | bPowerOnScreensaver = CEC_DEFAULT_SETTING_POWER_ON_SCREENSAVER; |
7f274e72 LOK |
1560 | bPowerOffOnStandby = CEC_DEFAULT_SETTING_POWER_OFF_ON_STANDBY; |
1561 | bShutdownOnStandby = CEC_DEFAULT_SETTING_SHUTDOWN_ON_STANDBY; | |
1562 | bSendInactiveSource = CEC_DEFAULT_SETTING_SEND_INACTIVE_SOURCE; | |
1563 | iFirmwareVersion = CEC_FW_VERSION_UNKNOWN; | |
1564 | bPowerOffDevicesOnStandby = CEC_DEFAULT_SETTING_POWER_OFF_DEVICES_STANDBY; | |
1565 | memcpy(strDeviceLanguage, CEC_DEFAULT_DEVICE_LANGUAGE, 3); | |
d2d1660c | 1566 | iFirmwareBuildDate = CEC_FW_BUILD_UNKNOWN; |
5f2f3609 | 1567 | bMonitorOnly = 0; |
2b44051c | 1568 | cecVersion = (cec_version)CEC_DEFAULT_SETTING_CEC_VERSION; |
2d418322 | 1569 | adapterType = ADAPTERTYPE_UNKNOWN; |
f4b44425 | 1570 | iDoubleTapTimeoutMs = CEC_DOUBLE_TAP_TIMEOUT_MS; |
ac3f9901 LOK |
1571 | comboKey = CEC_USER_CONTROL_CODE_STOP; |
1572 | iComboKeyTimeoutMs = CEC_DEFAULT_COMBO_TIMEOUT_MS; | |
7f274e72 | 1573 | |
caca2d81 | 1574 | memset(strDeviceName, 0, 13); |
2d4e263c | 1575 | deviceTypes.Clear(); |
7f274e72 | 1576 | logicalAddresses.Clear(); |
d068b3d4 | 1577 | wakeDevices.Clear(); |
ca27e6cf | 1578 | powerOffDevices.Clear(); |
224ea877 | 1579 | |
ca27e6cf LOK |
1580 | #if CEC_DEFAULT_SETTING_POWER_OFF_SHUTDOWN == 1 |
1581 | powerOffDevices.Set(CECDEVICE_BROADCAST); | |
1582 | #endif | |
41e3372a LOK |
1583 | #if CEC_DEFAULT_SETTING_ACTIVATE_SOURCE == 1 |
1584 | wakeDevices.Set(CECDEVICE_TV); | |
1585 | #endif | |
224ea877 | 1586 | |
7f274e72 LOK |
1587 | callbackParam = NULL; |
1588 | callbacks = NULL; | |
caca2d81 LOK |
1589 | } |
1590 | #endif | |
dbe84b6e | 1591 | }; |
caca2d81 | 1592 | |
acec5f48 LOK |
1593 | #ifdef __cplusplus |
1594 | }; | |
1595 | }; | |
1596 | #endif | |
1597 | ||
1598 | #endif /* CECTYPES_H_ */ |