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/
40 * @brief Get the device type for the given logical address.
41 * @param address The address to get the type for.
42 * @return The type, or CEC_DEVICE_TYPE_RESERVED if unknown.
44 static cec_device_type
GetType(const cec_logical_address address
)
48 case CECDEVICE_AUDIOSYSTEM
:
49 return CEC_DEVICE_TYPE_AUDIO_SYSTEM
;
50 case CECDEVICE_PLAYBACKDEVICE1
:
51 case CECDEVICE_PLAYBACKDEVICE2
:
52 case CECDEVICE_PLAYBACKDEVICE3
:
53 return CEC_DEVICE_TYPE_PLAYBACK_DEVICE
;
54 case CECDEVICE_RECORDINGDEVICE1
:
55 case CECDEVICE_RECORDINGDEVICE2
:
56 case CECDEVICE_RECORDINGDEVICE3
:
57 return CEC_DEVICE_TYPE_RECORDING_DEVICE
;
58 case CECDEVICE_TUNER1
:
59 case CECDEVICE_TUNER2
:
60 case CECDEVICE_TUNER3
:
61 case CECDEVICE_TUNER4
:
62 return CEC_DEVICE_TYPE_TUNER
;
64 return CEC_DEVICE_TYPE_TV
;
66 return CEC_DEVICE_TYPE_RESERVED
;
71 * @brief Get the ackmask for all devices of the same type as the given logical address.
72 * @param address The address to get the ackmask for.
73 * @return The ackmask for this type.
75 static uint16_t GetMaskForType(cec_logical_address address
)
77 return GetMaskForType(GetType(address
));
81 * @brief Get the ackmask for all devices of the given type.
82 * @param type The type to get the ackmask for.
83 * @return The ackmask for this type, or 0 of no types match.
85 static uint16_t GetMaskForType(const cec_device_type type
)
89 case CEC_DEVICE_TYPE_AUDIO_SYSTEM
:
91 cec_logical_addresses addr
;
93 addr
.Set(CECDEVICE_AUDIOSYSTEM
);
94 return addr
.AckMask();
96 case CEC_DEVICE_TYPE_PLAYBACK_DEVICE
:
98 cec_logical_addresses addr
;
100 addr
.Set(CECDEVICE_PLAYBACKDEVICE1
);
101 addr
.Set(CECDEVICE_PLAYBACKDEVICE2
);
102 addr
.Set(CECDEVICE_PLAYBACKDEVICE3
);
103 return addr
.AckMask();
105 case CEC_DEVICE_TYPE_RECORDING_DEVICE
:
107 cec_logical_addresses addr
;
109 addr
.Set(CECDEVICE_RECORDINGDEVICE1
);
110 addr
.Set(CECDEVICE_RECORDINGDEVICE2
);
111 addr
.Set(CECDEVICE_RECORDINGDEVICE3
);
112 return addr
.AckMask();
114 case CEC_DEVICE_TYPE_TUNER
:
116 cec_logical_addresses addr
;
118 addr
.Set(CECDEVICE_TUNER1
);
119 addr
.Set(CECDEVICE_TUNER2
);
120 addr
.Set(CECDEVICE_TUNER3
);
121 addr
.Set(CECDEVICE_TUNER4
);
122 return addr
.AckMask();
124 case CEC_DEVICE_TYPE_TV
:
126 cec_logical_addresses addr
;
128 addr
.Set(CECDEVICE_TV
);
129 return addr
.AckMask();
136 static const char *ToString(const cec_device_type type
)
140 case CEC_DEVICE_TYPE_AUDIO_SYSTEM
:
141 return "audio system";
142 case CEC_DEVICE_TYPE_PLAYBACK_DEVICE
:
143 return "playback device";
144 case CEC_DEVICE_TYPE_RECORDING_DEVICE
:
145 return "recording device";
146 case CEC_DEVICE_TYPE_RESERVED
:
148 case CEC_DEVICE_TYPE_TUNER
:
150 case CEC_DEVICE_TYPE_TV
:
157 static const char *ToString(const cec_menu_state state
)
161 case CEC_MENU_STATE_ACTIVATED
:
163 case CEC_MENU_STATE_DEACTIVATED
:
164 return "deactivated";
170 static const char *ToString(const cec_version version
)
174 case CEC_VERSION_1_2
:
176 case CEC_VERSION_1_2A
:
178 case CEC_VERSION_1_3
:
180 case CEC_VERSION_1_3A
:
182 case CEC_VERSION_1_4
:
189 static const char *ToString(const cec_power_status status
)
193 case CEC_POWER_STATUS_ON
:
195 case CEC_POWER_STATUS_STANDBY
:
197 case CEC_POWER_STATUS_IN_TRANSITION_ON_TO_STANDBY
:
198 return "in transition from on to standby";
199 case CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON
:
200 return "in transition from standby to on";
206 static const char *ToString(const cec_logical_address address
)
210 case CECDEVICE_AUDIOSYSTEM
:
212 case CECDEVICE_BROADCAST
:
214 case CECDEVICE_FREEUSE
:
216 case CECDEVICE_PLAYBACKDEVICE1
:
218 case CECDEVICE_PLAYBACKDEVICE2
:
220 case CECDEVICE_PLAYBACKDEVICE3
:
222 case CECDEVICE_RECORDINGDEVICE1
:
224 case CECDEVICE_RECORDINGDEVICE2
:
226 case CECDEVICE_RECORDINGDEVICE3
:
228 case CECDEVICE_RESERVED1
:
230 case CECDEVICE_RESERVED2
:
232 case CECDEVICE_TUNER1
:
234 case CECDEVICE_TUNER2
:
236 case CECDEVICE_TUNER3
:
238 case CECDEVICE_TUNER4
:
247 static const char *ToString(const cec_deck_control_mode mode
)
251 case CEC_DECK_CONTROL_MODE_SKIP_FORWARD_WIND
:
252 return "skip forward wind";
253 case CEC_DECK_CONTROL_MODE_EJECT
:
255 case CEC_DECK_CONTROL_MODE_SKIP_REVERSE_REWIND
:
256 return "reverse rewind";
257 case CEC_DECK_CONTROL_MODE_STOP
:
264 static const char *ToString(const cec_deck_info status
)
268 case CEC_DECK_INFO_PLAY
:
270 case CEC_DECK_INFO_RECORD
:
272 case CEC_DECK_INFO_PLAY_REVERSE
:
273 return "play reverse";
274 case CEC_DECK_INFO_STILL
:
276 case CEC_DECK_INFO_SLOW
:
278 case CEC_DECK_INFO_SLOW_REVERSE
:
279 return "slow reverse";
280 case CEC_DECK_INFO_FAST_FORWARD
:
281 return "fast forward";
282 case CEC_DECK_INFO_FAST_REVERSE
:
283 return "fast reverse";
284 case CEC_DECK_INFO_NO_MEDIA
:
286 case CEC_DECK_INFO_STOP
:
288 case CEC_DECK_INFO_SKIP_FORWARD_WIND
:
289 return "info skip forward wind";
290 case CEC_DECK_INFO_SKIP_REVERSE_REWIND
:
291 return "info skip reverse rewind";
292 case CEC_DECK_INFO_INDEX_SEARCH_FORWARD
:
293 return "info index search forward";
294 case CEC_DECK_INFO_INDEX_SEARCH_REVERSE
:
295 return "info index search reverse";
296 case CEC_DECK_INFO_OTHER_STATUS
:
298 case CEC_DECK_INFO_OTHER_STATUS_LG
:
305 static const char *ToString(const cec_opcode opcode
)
309 case CEC_OPCODE_ACTIVE_SOURCE
:
310 return "active source";
311 case CEC_OPCODE_IMAGE_VIEW_ON
:
312 return "image view on";
313 case CEC_OPCODE_TEXT_VIEW_ON
:
314 return "text view on";
315 case CEC_OPCODE_INACTIVE_SOURCE
:
316 return "inactive source";
317 case CEC_OPCODE_REQUEST_ACTIVE_SOURCE
:
318 return "request active source";
319 case CEC_OPCODE_ROUTING_CHANGE
:
320 return "routing change";
321 case CEC_OPCODE_ROUTING_INFORMATION
:
322 return "routing information";
323 case CEC_OPCODE_SET_STREAM_PATH
:
324 return "set stream path";
325 case CEC_OPCODE_STANDBY
:
327 case CEC_OPCODE_RECORD_OFF
:
329 case CEC_OPCODE_RECORD_ON
:
331 case CEC_OPCODE_RECORD_STATUS
:
332 return "record status";
333 case CEC_OPCODE_RECORD_TV_SCREEN
:
334 return "record tv screen";
335 case CEC_OPCODE_CLEAR_ANALOGUE_TIMER
:
336 return "clear analogue timer";
337 case CEC_OPCODE_CLEAR_DIGITAL_TIMER
:
338 return "clear digital timer";
339 case CEC_OPCODE_CLEAR_EXTERNAL_TIMER
:
340 return "clear external timer";
341 case CEC_OPCODE_SET_ANALOGUE_TIMER
:
342 return "set analogue timer";
343 case CEC_OPCODE_SET_DIGITAL_TIMER
:
344 return "set digital timer";
345 case CEC_OPCODE_SET_EXTERNAL_TIMER
:
346 return "set external timer";
347 case CEC_OPCODE_SET_TIMER_PROGRAM_TITLE
:
348 return "set timer program title";
349 case CEC_OPCODE_TIMER_CLEARED_STATUS
:
350 return "timer cleared status";
351 case CEC_OPCODE_TIMER_STATUS
:
352 return "timer status";
353 case CEC_OPCODE_CEC_VERSION
:
354 return "cec version";
355 case CEC_OPCODE_GET_CEC_VERSION
:
356 return "get cec version";
357 case CEC_OPCODE_GIVE_PHYSICAL_ADDRESS
:
358 return "give physical address";
359 case CEC_OPCODE_GET_MENU_LANGUAGE
:
360 return "get menu language";
361 case CEC_OPCODE_REPORT_PHYSICAL_ADDRESS
:
362 return "report physical address";
363 case CEC_OPCODE_SET_MENU_LANGUAGE
:
364 return "set menu language";
365 case CEC_OPCODE_DECK_CONTROL
:
366 return "deck control";
367 case CEC_OPCODE_DECK_STATUS
:
368 return "deck status";
369 case CEC_OPCODE_GIVE_DECK_STATUS
:
370 return "give deck status";
371 case CEC_OPCODE_PLAY
:
373 case CEC_OPCODE_GIVE_TUNER_DEVICE_STATUS
:
374 return "give tuner status";
375 case CEC_OPCODE_SELECT_ANALOGUE_SERVICE
:
376 return "select analogue service";
377 case CEC_OPCODE_SELECT_DIGITAL_SERVICE
:
378 return "set digital service";
379 case CEC_OPCODE_TUNER_DEVICE_STATUS
:
380 return "tuner device status";
381 case CEC_OPCODE_TUNER_STEP_DECREMENT
:
382 return "tuner step decrement";
383 case CEC_OPCODE_TUNER_STEP_INCREMENT
:
384 return "tuner step increment";
385 case CEC_OPCODE_DEVICE_VENDOR_ID
:
386 return "device vendor id";
387 case CEC_OPCODE_GIVE_DEVICE_VENDOR_ID
:
388 return "give device vendor id";
389 case CEC_OPCODE_VENDOR_COMMAND
:
390 return "vendor command";
391 case CEC_OPCODE_VENDOR_COMMAND_WITH_ID
:
392 return "vendor command with id";
393 case CEC_OPCODE_VENDOR_REMOTE_BUTTON_DOWN
:
394 return "vendor remote button down";
395 case CEC_OPCODE_VENDOR_REMOTE_BUTTON_UP
:
396 return "vendor remote button up";
397 case CEC_OPCODE_SET_OSD_STRING
:
398 return "set osd string";
399 case CEC_OPCODE_GIVE_OSD_NAME
:
400 return "give osd name";
401 case CEC_OPCODE_SET_OSD_NAME
:
402 return "set osd name";
403 case CEC_OPCODE_MENU_REQUEST
:
404 return "menu request";
405 case CEC_OPCODE_MENU_STATUS
:
406 return "menu status";
407 case CEC_OPCODE_USER_CONTROL_PRESSED
:
408 return "user control pressed";
409 case CEC_OPCODE_USER_CONTROL_RELEASE
:
410 return "user control release";
411 case CEC_OPCODE_GIVE_DEVICE_POWER_STATUS
:
412 return "give device power status";
413 case CEC_OPCODE_REPORT_POWER_STATUS
:
414 return "report power status";
415 case CEC_OPCODE_FEATURE_ABORT
:
416 return "feature abort";
417 case CEC_OPCODE_ABORT
:
419 case CEC_OPCODE_GIVE_AUDIO_STATUS
:
420 return "give audio status";
421 case CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS
:
422 return "give audio mode status";
423 case CEC_OPCODE_REPORT_AUDIO_STATUS
:
424 return "report audio status";
425 case CEC_OPCODE_SET_SYSTEM_AUDIO_MODE
:
426 return "set system audio mode";
427 case CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST
:
428 return "system audio mode request";
429 case CEC_OPCODE_SYSTEM_AUDIO_MODE_STATUS
:
430 return "system audio mode status";
431 case CEC_OPCODE_SET_AUDIO_RATE
:
432 return "set audio rate";
433 case CEC_OPCODE_START_ARC
:
435 case CEC_OPCODE_REPORT_ARC_STARTED
:
436 return "report ARC started";
437 case CEC_OPCODE_REPORT_ARC_ENDED
:
438 return "report ARC ended";
439 case CEC_OPCODE_REQUEST_ARC_START
:
440 return "request ARC start";
441 case CEC_OPCODE_REQUEST_ARC_END
:
442 return "request ARC end";
443 case CEC_OPCODE_END_ARC
:
447 case CEC_OPCODE_NONE
:
454 static const char *ToString(const cec_system_audio_status mode
)
458 case CEC_SYSTEM_AUDIO_STATUS_ON
:
460 case CEC_SYSTEM_AUDIO_STATUS_OFF
:
467 static const char *ToString(const cec_audio_status
UNUSED(status
))
469 // TODO this is a mask
473 static const char *ToString(const cec_vendor_id vendor
)
477 case CEC_VENDOR_SAMSUNG
:
481 case CEC_VENDOR_PANASONIC
:
483 case CEC_VENDOR_PIONEER
:
485 case CEC_VENDOR_ONKYO
:
487 case CEC_VENDOR_YAMAHA
:
489 case CEC_VENDOR_PHILIPS
:
491 case CEC_VENDOR_SONY
:
493 case CEC_VENDOR_TOSHIBA
:
495 case CEC_VENDOR_AKAI
:
499 case CEC_VENDOR_BENQ
:
501 case CEC_VENDOR_DAEWOO
:
503 case CEC_VENDOR_GRUNDIG
:
505 case CEC_VENDOR_MEDION
:
507 case CEC_VENDOR_SHARP
:
509 case CEC_VENDOR_VIZIO
:
511 case CEC_VENDOR_BROADCOM
:
513 case CEC_VENDOR_LOEWE
:
520 static const char *ToString(const cec_client_version version
)
524 case CEC_CLIENT_VERSION_PRE_1_5
:
526 case CEC_CLIENT_VERSION_1_5_0
:
528 case CEC_CLIENT_VERSION_1_5_1
:
530 case CEC_CLIENT_VERSION_1_5_2
:
532 case CEC_CLIENT_VERSION_1_5_3
:
534 case CEC_CLIENT_VERSION_1_6_0
:
536 case CEC_CLIENT_VERSION_1_6_1
:
538 case CEC_CLIENT_VERSION_1_6_2
:
540 case CEC_CLIENT_VERSION_1_6_3
:
542 case CEC_CLIENT_VERSION_1_7_0
:
544 case CEC_CLIENT_VERSION_1_7_1
:
546 case CEC_CLIENT_VERSION_1_7_2
:
548 case CEC_CLIENT_VERSION_1_8_0
:
550 case CEC_CLIENT_VERSION_1_8_1
:
552 case CEC_CLIENT_VERSION_1_8_2
:
554 case CEC_CLIENT_VERSION_1_9_0
:
556 case CEC_CLIENT_VERSION_1_99_0
:
558 case CEC_CLIENT_VERSION_2_0_0
:
560 case CEC_CLIENT_VERSION_2_0_1
:
562 case CEC_CLIENT_VERSION_2_0_2
:
564 case CEC_CLIENT_VERSION_2_0_3
:
571 static const char *ToString(const cec_server_version version
)
575 case CEC_SERVER_VERSION_PRE_1_5
:
577 case CEC_SERVER_VERSION_1_5_0
:
579 case CEC_SERVER_VERSION_1_5_1
:
581 case CEC_SERVER_VERSION_1_5_2
:
583 case CEC_SERVER_VERSION_1_5_3
:
585 case CEC_SERVER_VERSION_1_6_0
:
587 case CEC_SERVER_VERSION_1_6_1
:
589 case CEC_SERVER_VERSION_1_6_2
:
591 case CEC_SERVER_VERSION_1_6_3
:
593 case CEC_SERVER_VERSION_1_7_0
:
595 case CEC_SERVER_VERSION_1_7_1
:
597 case CEC_SERVER_VERSION_1_7_2
:
599 case CEC_SERVER_VERSION_1_8_0
:
601 case CEC_SERVER_VERSION_1_8_1
:
603 case CEC_SERVER_VERSION_1_8_2
:
605 case CEC_SERVER_VERSION_1_9_0
:
607 case CEC_SERVER_VERSION_1_99_0
:
609 case CEC_SERVER_VERSION_2_0_0
:
611 case CEC_SERVER_VERSION_2_0_1
:
613 case CEC_SERVER_VERSION_2_0_2
:
615 case CEC_SERVER_VERSION_2_0_3
:
622 static const char *ToString(const cec_abort_reason reason
)
626 case CEC_ABORT_REASON_UNRECOGNIZED_OPCODE
:
627 return "unrecognised opcode";
628 case CEC_ABORT_REASON_NOT_IN_CORRECT_MODE_TO_RESPOND
:
629 return "not in correct mode to respond";
630 case CEC_ABORT_REASON_CANNOT_PROVIDE_SOURCE
:
631 return "cannot provide source";
632 case CEC_ABORT_REASON_INVALID_OPERAND
:
633 return "invalid operand";
634 case CEC_ABORT_REASON_REFUSED
:
641 static const char *ToString(const cec_user_control_code key
)
645 case CEC_USER_CONTROL_CODE_SELECT
:
647 case CEC_USER_CONTROL_CODE_UP
:
649 case CEC_USER_CONTROL_CODE_DOWN
:
651 case CEC_USER_CONTROL_CODE_LEFT
:
653 case CEC_USER_CONTROL_CODE_RIGHT
:
655 case CEC_USER_CONTROL_CODE_RIGHT_UP
:
657 case CEC_USER_CONTROL_CODE_RIGHT_DOWN
:
659 case CEC_USER_CONTROL_CODE_LEFT_UP
:
661 case CEC_USER_CONTROL_CODE_LEFT_DOWN
:
663 case CEC_USER_CONTROL_CODE_ROOT_MENU
:
665 case CEC_USER_CONTROL_CODE_SETUP_MENU
:
667 case CEC_USER_CONTROL_CODE_CONTENTS_MENU
:
668 return "contents menu";
669 case CEC_USER_CONTROL_CODE_FAVORITE_MENU
:
670 return "favourite menu";
671 case CEC_USER_CONTROL_CODE_EXIT
:
673 case CEC_USER_CONTROL_CODE_NUMBER0
:
675 case CEC_USER_CONTROL_CODE_NUMBER1
:
677 case CEC_USER_CONTROL_CODE_NUMBER2
:
679 case CEC_USER_CONTROL_CODE_NUMBER3
:
681 case CEC_USER_CONTROL_CODE_NUMBER4
:
683 case CEC_USER_CONTROL_CODE_NUMBER5
:
685 case CEC_USER_CONTROL_CODE_NUMBER6
:
687 case CEC_USER_CONTROL_CODE_NUMBER7
:
689 case CEC_USER_CONTROL_CODE_NUMBER8
:
691 case CEC_USER_CONTROL_CODE_NUMBER9
:
693 case CEC_USER_CONTROL_CODE_DOT
:
695 case CEC_USER_CONTROL_CODE_ENTER
:
697 case CEC_USER_CONTROL_CODE_CLEAR
:
699 case CEC_USER_CONTROL_CODE_NEXT_FAVORITE
:
700 return "next favourite";
701 case CEC_USER_CONTROL_CODE_CHANNEL_UP
:
703 case CEC_USER_CONTROL_CODE_CHANNEL_DOWN
:
704 return "channel down";
705 case CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL
:
706 return "previous channel";
707 case CEC_USER_CONTROL_CODE_SOUND_SELECT
:
708 return "sound select";
709 case CEC_USER_CONTROL_CODE_INPUT_SELECT
:
710 return "input select";
711 case CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION
:
712 return "display information";
713 case CEC_USER_CONTROL_CODE_HELP
:
715 case CEC_USER_CONTROL_CODE_PAGE_UP
:
717 case CEC_USER_CONTROL_CODE_PAGE_DOWN
:
719 case CEC_USER_CONTROL_CODE_POWER
:
721 case CEC_USER_CONTROL_CODE_VOLUME_UP
:
723 case CEC_USER_CONTROL_CODE_VOLUME_DOWN
:
724 return "volume down";
725 case CEC_USER_CONTROL_CODE_MUTE
:
727 case CEC_USER_CONTROL_CODE_PLAY
:
729 case CEC_USER_CONTROL_CODE_STOP
:
731 case CEC_USER_CONTROL_CODE_PAUSE
:
733 case CEC_USER_CONTROL_CODE_RECORD
:
735 case CEC_USER_CONTROL_CODE_REWIND
:
737 case CEC_USER_CONTROL_CODE_FAST_FORWARD
:
738 return "Fast forward";
739 case CEC_USER_CONTROL_CODE_EJECT
:
741 case CEC_USER_CONTROL_CODE_FORWARD
:
743 case CEC_USER_CONTROL_CODE_BACKWARD
:
745 case CEC_USER_CONTROL_CODE_STOP_RECORD
:
746 return "stop record";
747 case CEC_USER_CONTROL_CODE_PAUSE_RECORD
:
748 return "pause record";
749 case CEC_USER_CONTROL_CODE_ANGLE
:
751 case CEC_USER_CONTROL_CODE_SUB_PICTURE
:
752 return "sub picture";
753 case CEC_USER_CONTROL_CODE_VIDEO_ON_DEMAND
:
754 return "video on demand";
755 case CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE
:
756 return "electronic program guide";
757 case CEC_USER_CONTROL_CODE_TIMER_PROGRAMMING
:
758 return "timer programming";
759 case CEC_USER_CONTROL_CODE_INITIAL_CONFIGURATION
:
760 return "initial configuration";
761 case CEC_USER_CONTROL_CODE_PLAY_FUNCTION
:
762 return "play (function)";
763 case CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION
:
764 return "pause play (function)";
765 case CEC_USER_CONTROL_CODE_RECORD_FUNCTION
:
766 return "record (function)";
767 case CEC_USER_CONTROL_CODE_PAUSE_RECORD_FUNCTION
:
768 return "pause record (function)";
769 case CEC_USER_CONTROL_CODE_STOP_FUNCTION
:
770 return "stop (function)";
771 case CEC_USER_CONTROL_CODE_MUTE_FUNCTION
:
772 return "mute (function)";
773 case CEC_USER_CONTROL_CODE_RESTORE_VOLUME_FUNCTION
:
774 return "restore volume";
775 case CEC_USER_CONTROL_CODE_TUNE_FUNCTION
:
777 case CEC_USER_CONTROL_CODE_SELECT_MEDIA_FUNCTION
:
778 return "select media";
779 case CEC_USER_CONTROL_CODE_SELECT_AV_INPUT_FUNCTION
:
780 return "select AV input";
781 case CEC_USER_CONTROL_CODE_SELECT_AUDIO_INPUT_FUNCTION
:
782 return "select audio input";
783 case CEC_USER_CONTROL_CODE_POWER_TOGGLE_FUNCTION
:
784 return "power toggle";
785 case CEC_USER_CONTROL_CODE_POWER_OFF_FUNCTION
:
787 case CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION
:
789 case CEC_USER_CONTROL_CODE_F1_BLUE
:
791 case CEC_USER_CONTROL_CODE_F2_RED
:
793 case CEC_USER_CONTROL_CODE_F3_GREEN
:
795 case CEC_USER_CONTROL_CODE_F4_YELLOW
:
796 return "F4 (yellow)";
797 case CEC_USER_CONTROL_CODE_F5
:
799 case CEC_USER_CONTROL_CODE_DATA
:
801 case CEC_USER_CONTROL_CODE_AN_RETURN
:
802 return "return (Samsung)";
803 case CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST
:
804 return "channels list (Samsung)";
810 static const char *ToString(const cec_adapter_type type
)
814 case ADAPTERTYPE_P8_EXTERNAL
:
815 return "Pulse-Eight USB-CEC Adapter";
816 case ADAPTERTYPE_P8_DAUGHTERBOARD
:
817 return "Pulse-Eight USB-CEC Daughterboard";
818 case ADAPTERTYPE_RPI
:
819 return "Raspberry Pi";
820 case ADAPTERTYPE_TDA995x
:
827 static bool PhysicalAddressIsIncluded(uint16_t iParent
, uint16_t iChild
)
829 for (int iPtr
= 3; iPtr
>= 0; iPtr
--)
831 if (((iParent
>> 4*iPtr
) & 0xF) > 0 &&
832 ((iParent
>> 4*iPtr
) & 0xF) != ((iChild
>> 4*iPtr
) & 0xF))