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 "../../include/cectypes.h"
42 * @brief Get the device type for the given logical address.
43 * @param address The address to get the type for.
44 * @return The type, or CEC_DEVICE_TYPE_RESERVED if unknown.
46 static cec_device_type
GetType(const cec_logical_address address
)
50 case CECDEVICE_AUDIOSYSTEM
:
51 return CEC_DEVICE_TYPE_AUDIO_SYSTEM
;
52 case CECDEVICE_PLAYBACKDEVICE1
:
53 case CECDEVICE_PLAYBACKDEVICE2
:
54 case CECDEVICE_PLAYBACKDEVICE3
:
55 return CEC_DEVICE_TYPE_PLAYBACK_DEVICE
;
56 case CECDEVICE_RECORDINGDEVICE1
:
57 case CECDEVICE_RECORDINGDEVICE2
:
58 case CECDEVICE_RECORDINGDEVICE3
:
59 return CEC_DEVICE_TYPE_RECORDING_DEVICE
;
60 case CECDEVICE_TUNER1
:
61 case CECDEVICE_TUNER2
:
62 case CECDEVICE_TUNER3
:
63 case CECDEVICE_TUNER4
:
64 return CEC_DEVICE_TYPE_TUNER
;
66 return CEC_DEVICE_TYPE_TV
;
68 return CEC_DEVICE_TYPE_RESERVED
;
73 * @brief Get the ackmask for all devices of the same type as the given logical address.
74 * @param address The address to get the ackmask for.
75 * @return The ackmask for this type.
77 static uint16_t GetMaskForType(cec_logical_address address
)
79 return GetMaskForType(GetType(address
));
83 * @brief Get the ackmask for all devices of the given type.
84 * @param type The type to get the ackmask for.
85 * @return The ackmask for this type, or 0 of no types match.
87 static uint16_t GetMaskForType(const cec_device_type type
)
91 case CEC_DEVICE_TYPE_AUDIO_SYSTEM
:
93 cec_logical_addresses addr
;
95 addr
.Set(CECDEVICE_AUDIOSYSTEM
);
96 return addr
.AckMask();
98 case CEC_DEVICE_TYPE_PLAYBACK_DEVICE
:
100 cec_logical_addresses addr
;
102 addr
.Set(CECDEVICE_PLAYBACKDEVICE1
);
103 addr
.Set(CECDEVICE_PLAYBACKDEVICE2
);
104 addr
.Set(CECDEVICE_PLAYBACKDEVICE3
);
105 return addr
.AckMask();
107 case CEC_DEVICE_TYPE_RECORDING_DEVICE
:
109 cec_logical_addresses addr
;
111 addr
.Set(CECDEVICE_RECORDINGDEVICE1
);
112 addr
.Set(CECDEVICE_RECORDINGDEVICE2
);
113 addr
.Set(CECDEVICE_RECORDINGDEVICE3
);
114 return addr
.AckMask();
116 case CEC_DEVICE_TYPE_TUNER
:
118 cec_logical_addresses addr
;
120 addr
.Set(CECDEVICE_TUNER1
);
121 addr
.Set(CECDEVICE_TUNER2
);
122 addr
.Set(CECDEVICE_TUNER3
);
123 addr
.Set(CECDEVICE_TUNER4
);
124 return addr
.AckMask();
126 case CEC_DEVICE_TYPE_TV
:
128 cec_logical_addresses addr
;
130 addr
.Set(CECDEVICE_TV
);
131 return addr
.AckMask();
138 static const char *ToString(const cec_device_type type
)
142 case CEC_DEVICE_TYPE_AUDIO_SYSTEM
:
143 return "audio system";
144 case CEC_DEVICE_TYPE_PLAYBACK_DEVICE
:
145 return "playback device";
146 case CEC_DEVICE_TYPE_RECORDING_DEVICE
:
147 return "recording device";
148 case CEC_DEVICE_TYPE_RESERVED
:
150 case CEC_DEVICE_TYPE_TUNER
:
152 case CEC_DEVICE_TYPE_TV
:
159 static const char *ToString(const cec_menu_state state
)
163 case CEC_MENU_STATE_ACTIVATED
:
165 case CEC_MENU_STATE_DEACTIVATED
:
166 return "deactivated";
172 static const char *ToString(const cec_version version
)
176 case CEC_VERSION_1_2
:
178 case CEC_VERSION_1_2A
:
180 case CEC_VERSION_1_3
:
182 case CEC_VERSION_1_3A
:
184 case CEC_VERSION_1_4
:
191 static const char *ToString(const cec_power_status status
)
195 case CEC_POWER_STATUS_ON
:
197 case CEC_POWER_STATUS_STANDBY
:
199 case CEC_POWER_STATUS_IN_TRANSITION_ON_TO_STANDBY
:
200 return "in transition from on to standby";
201 case CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON
:
202 return "in transition from standby to on";
208 static const char *ToString(const cec_logical_address address
)
212 case CECDEVICE_AUDIOSYSTEM
:
214 case CECDEVICE_BROADCAST
:
216 case CECDEVICE_FREEUSE
:
218 case CECDEVICE_PLAYBACKDEVICE1
:
220 case CECDEVICE_PLAYBACKDEVICE2
:
222 case CECDEVICE_PLAYBACKDEVICE3
:
224 case CECDEVICE_RECORDINGDEVICE1
:
226 case CECDEVICE_RECORDINGDEVICE2
:
228 case CECDEVICE_RECORDINGDEVICE3
:
230 case CECDEVICE_RESERVED1
:
232 case CECDEVICE_RESERVED2
:
234 case CECDEVICE_TUNER1
:
236 case CECDEVICE_TUNER2
:
238 case CECDEVICE_TUNER3
:
240 case CECDEVICE_TUNER4
:
249 static const char *ToString(const cec_deck_control_mode mode
)
253 case CEC_DECK_CONTROL_MODE_SKIP_FORWARD_WIND
:
254 return "skip forward wind";
255 case CEC_DECK_CONTROL_MODE_EJECT
:
257 case CEC_DECK_CONTROL_MODE_SKIP_REVERSE_REWIND
:
258 return "reverse rewind";
259 case CEC_DECK_CONTROL_MODE_STOP
:
266 static const char *ToString(const cec_deck_info status
)
270 case CEC_DECK_INFO_PLAY
:
272 case CEC_DECK_INFO_RECORD
:
274 case CEC_DECK_INFO_PLAY_REVERSE
:
275 return "play reverse";
276 case CEC_DECK_INFO_STILL
:
278 case CEC_DECK_INFO_SLOW
:
280 case CEC_DECK_INFO_SLOW_REVERSE
:
281 return "slow reverse";
282 case CEC_DECK_INFO_FAST_FORWARD
:
283 return "fast forward";
284 case CEC_DECK_INFO_FAST_REVERSE
:
285 return "fast reverse";
286 case CEC_DECK_INFO_NO_MEDIA
:
288 case CEC_DECK_INFO_STOP
:
290 case CEC_DECK_INFO_SKIP_FORWARD_WIND
:
291 return "info skip forward wind";
292 case CEC_DECK_INFO_SKIP_REVERSE_REWIND
:
293 return "info skip reverse rewind";
294 case CEC_DECK_INFO_INDEX_SEARCH_FORWARD
:
295 return "info index search forward";
296 case CEC_DECK_INFO_INDEX_SEARCH_REVERSE
:
297 return "info index search reverse";
298 case CEC_DECK_INFO_OTHER_STATUS
:
300 case CEC_DECK_INFO_OTHER_STATUS_LG
:
307 static const char *ToString(const cec_opcode opcode
)
311 case CEC_OPCODE_ACTIVE_SOURCE
:
312 return "active source";
313 case CEC_OPCODE_IMAGE_VIEW_ON
:
314 return "image view on";
315 case CEC_OPCODE_TEXT_VIEW_ON
:
316 return "text view on";
317 case CEC_OPCODE_INACTIVE_SOURCE
:
318 return "inactive source";
319 case CEC_OPCODE_REQUEST_ACTIVE_SOURCE
:
320 return "request active source";
321 case CEC_OPCODE_ROUTING_CHANGE
:
322 return "routing change";
323 case CEC_OPCODE_ROUTING_INFORMATION
:
324 return "routing information";
325 case CEC_OPCODE_SET_STREAM_PATH
:
326 return "set stream path";
327 case CEC_OPCODE_STANDBY
:
329 case CEC_OPCODE_RECORD_OFF
:
331 case CEC_OPCODE_RECORD_ON
:
333 case CEC_OPCODE_RECORD_STATUS
:
334 return "record status";
335 case CEC_OPCODE_RECORD_TV_SCREEN
:
336 return "record tv screen";
337 case CEC_OPCODE_CLEAR_ANALOGUE_TIMER
:
338 return "clear analogue timer";
339 case CEC_OPCODE_CLEAR_DIGITAL_TIMER
:
340 return "clear digital timer";
341 case CEC_OPCODE_CLEAR_EXTERNAL_TIMER
:
342 return "clear external timer";
343 case CEC_OPCODE_SET_ANALOGUE_TIMER
:
344 return "set analogue timer";
345 case CEC_OPCODE_SET_DIGITAL_TIMER
:
346 return "set digital timer";
347 case CEC_OPCODE_SET_EXTERNAL_TIMER
:
348 return "set external timer";
349 case CEC_OPCODE_SET_TIMER_PROGRAM_TITLE
:
350 return "set timer program title";
351 case CEC_OPCODE_TIMER_CLEARED_STATUS
:
352 return "timer cleared status";
353 case CEC_OPCODE_TIMER_STATUS
:
354 return "timer status";
355 case CEC_OPCODE_CEC_VERSION
:
356 return "cec version";
357 case CEC_OPCODE_GET_CEC_VERSION
:
358 return "get cec version";
359 case CEC_OPCODE_GIVE_PHYSICAL_ADDRESS
:
360 return "give physical address";
361 case CEC_OPCODE_GET_MENU_LANGUAGE
:
362 return "get menu language";
363 case CEC_OPCODE_REPORT_PHYSICAL_ADDRESS
:
364 return "report physical address";
365 case CEC_OPCODE_SET_MENU_LANGUAGE
:
366 return "set menu language";
367 case CEC_OPCODE_DECK_CONTROL
:
368 return "deck control";
369 case CEC_OPCODE_DECK_STATUS
:
370 return "deck status";
371 case CEC_OPCODE_GIVE_DECK_STATUS
:
372 return "give deck status";
373 case CEC_OPCODE_PLAY
:
375 case CEC_OPCODE_GIVE_TUNER_DEVICE_STATUS
:
376 return "give tuner status";
377 case CEC_OPCODE_SELECT_ANALOGUE_SERVICE
:
378 return "select analogue service";
379 case CEC_OPCODE_SELECT_DIGITAL_SERVICE
:
380 return "set digital service";
381 case CEC_OPCODE_TUNER_DEVICE_STATUS
:
382 return "tuner device status";
383 case CEC_OPCODE_TUNER_STEP_DECREMENT
:
384 return "tuner step decrement";
385 case CEC_OPCODE_TUNER_STEP_INCREMENT
:
386 return "tuner step increment";
387 case CEC_OPCODE_DEVICE_VENDOR_ID
:
388 return "device vendor id";
389 case CEC_OPCODE_GIVE_DEVICE_VENDOR_ID
:
390 return "give device vendor id";
391 case CEC_OPCODE_VENDOR_COMMAND
:
392 return "vendor command";
393 case CEC_OPCODE_VENDOR_COMMAND_WITH_ID
:
394 return "vendor command with id";
395 case CEC_OPCODE_VENDOR_REMOTE_BUTTON_DOWN
:
396 return "vendor remote button down";
397 case CEC_OPCODE_VENDOR_REMOTE_BUTTON_UP
:
398 return "vendor remote button up";
399 case CEC_OPCODE_SET_OSD_STRING
:
400 return "set osd string";
401 case CEC_OPCODE_GIVE_OSD_NAME
:
402 return "give osd name";
403 case CEC_OPCODE_SET_OSD_NAME
:
404 return "set osd name";
405 case CEC_OPCODE_MENU_REQUEST
:
406 return "menu request";
407 case CEC_OPCODE_MENU_STATUS
:
408 return "menu status";
409 case CEC_OPCODE_USER_CONTROL_PRESSED
:
410 return "user control pressed";
411 case CEC_OPCODE_USER_CONTROL_RELEASE
:
412 return "user control release";
413 case CEC_OPCODE_GIVE_DEVICE_POWER_STATUS
:
414 return "give device power status";
415 case CEC_OPCODE_REPORT_POWER_STATUS
:
416 return "report power status";
417 case CEC_OPCODE_FEATURE_ABORT
:
418 return "feature abort";
419 case CEC_OPCODE_ABORT
:
421 case CEC_OPCODE_GIVE_AUDIO_STATUS
:
422 return "give audio status";
423 case CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS
:
424 return "give audio mode status";
425 case CEC_OPCODE_REPORT_AUDIO_STATUS
:
426 return "report audio status";
427 case CEC_OPCODE_SET_SYSTEM_AUDIO_MODE
:
428 return "set system audio mode";
429 case CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST
:
430 return "system audio mode request";
431 case CEC_OPCODE_SYSTEM_AUDIO_MODE_STATUS
:
432 return "system audio mode status";
433 case CEC_OPCODE_SET_AUDIO_RATE
:
434 return "set audio rate";
435 case CEC_OPCODE_START_ARC
:
437 case CEC_OPCODE_REPORT_ARC_STARTED
:
438 return "report ARC started";
439 case CEC_OPCODE_REPORT_ARC_ENDED
:
440 return "report ARC ended";
441 case CEC_OPCODE_REQUEST_ARC_START
:
442 return "request ARC start";
443 case CEC_OPCODE_REQUEST_ARC_END
:
444 return "request ARC end";
445 case CEC_OPCODE_END_ARC
:
449 case CEC_OPCODE_NONE
:
456 static const char *ToString(const cec_system_audio_status mode
)
460 case CEC_SYSTEM_AUDIO_STATUS_ON
:
462 case CEC_SYSTEM_AUDIO_STATUS_OFF
:
469 static const char *ToString(const cec_audio_status
UNUSED(status
))
471 // TODO this is a mask
475 static const char *ToString(const cec_vendor_id vendor
)
479 case CEC_VENDOR_SAMSUNG
:
483 case CEC_VENDOR_PANASONIC
:
485 case CEC_VENDOR_PIONEER
:
487 case CEC_VENDOR_ONKYO
:
489 case CEC_VENDOR_YAMAHA
:
491 case CEC_VENDOR_PHILIPS
:
493 case CEC_VENDOR_SONY
:
495 case CEC_VENDOR_TOSHIBA
:
502 static const char *ToString(const cec_client_version version
)
506 case CEC_CLIENT_VERSION_PRE_1_5
:
508 case CEC_CLIENT_VERSION_1_5_0
:
510 case CEC_CLIENT_VERSION_1_5_1
:
512 case CEC_CLIENT_VERSION_1_5_2
:
514 case CEC_CLIENT_VERSION_1_5_3
:
516 case CEC_CLIENT_VERSION_1_6_0
:
518 case CEC_CLIENT_VERSION_1_6_1
:
520 case CEC_CLIENT_VERSION_1_6_2
:
522 case CEC_CLIENT_VERSION_1_6_3
:
529 static const char *ToString(const cec_server_version version
)
533 case CEC_SERVER_VERSION_PRE_1_5
:
535 case CEC_SERVER_VERSION_1_5_0
:
537 case CEC_SERVER_VERSION_1_5_1
:
539 case CEC_SERVER_VERSION_1_5_2
:
541 case CEC_SERVER_VERSION_1_5_3
:
543 case CEC_SERVER_VERSION_1_6_0
:
545 case CEC_SERVER_VERSION_1_6_1
:
547 case CEC_SERVER_VERSION_1_6_2
:
549 case CEC_SERVER_VERSION_1_6_3
: