3 * This file is part of the libCEC(R) library.
5 * libCEC(R) is Copyright (C) 2011-2013 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 "lib/platform/util/StdString.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
:
496 case CEC_VENDOR_TOSHIBA2
:
498 case CEC_VENDOR_AKAI
:
502 case CEC_VENDOR_BENQ
:
504 case CEC_VENDOR_DAEWOO
:
506 case CEC_VENDOR_GRUNDIG
:
508 case CEC_VENDOR_MEDION
:
510 case CEC_VENDOR_SHARP
:
512 case CEC_VENDOR_VIZIO
:
514 case CEC_VENDOR_BROADCOM
:
516 case CEC_VENDOR_LOEWE
:
518 case CEC_VENDOR_DENON
:
520 case CEC_VENDOR_MARANTZ
:
522 case CEC_VENDOR_HARMAN_KARDON
:
523 return "Harman/Kardon";
524 case CEC_VENDOR_PULSE_EIGHT
:
525 return "Pulse Eight";
531 static const char *ToString(const cec_client_version version
)
535 case CEC_CLIENT_VERSION_PRE_1_5
:
537 case CEC_CLIENT_VERSION_1_5_0
:
539 case CEC_CLIENT_VERSION_1_5_1
:
541 case CEC_CLIENT_VERSION_1_5_2
:
543 case CEC_CLIENT_VERSION_1_5_3
:
545 case CEC_CLIENT_VERSION_1_6_0
:
547 case CEC_CLIENT_VERSION_1_6_1
:
549 case CEC_CLIENT_VERSION_1_6_2
:
551 case CEC_CLIENT_VERSION_1_6_3
:
553 case CEC_CLIENT_VERSION_1_7_0
:
555 case CEC_CLIENT_VERSION_1_7_1
:
557 case CEC_CLIENT_VERSION_1_7_2
:
559 case CEC_CLIENT_VERSION_1_8_0
:
561 case CEC_CLIENT_VERSION_1_8_1
:
563 case CEC_CLIENT_VERSION_1_8_2
:
565 case CEC_CLIENT_VERSION_1_9_0
:
567 case CEC_CLIENT_VERSION_1_99_0
:
569 case CEC_CLIENT_VERSION_2_0_0
:
571 case CEC_CLIENT_VERSION_2_0_1
:
573 case CEC_CLIENT_VERSION_2_0_2
:
575 case CEC_CLIENT_VERSION_2_0_3
:
577 case CEC_CLIENT_VERSION_2_0_4
:
579 case CEC_CLIENT_VERSION_2_0_5
:
581 case CEC_CLIENT_VERSION_2_1_0
:
583 case CEC_CLIENT_VERSION_2_1_1
:
585 case CEC_CLIENT_VERSION_2_1_2
:
587 case CEC_CLIENT_VERSION_2_1_3
:
594 static const char *ToString(const cec_server_version version
)
598 case CEC_SERVER_VERSION_PRE_1_5
:
600 case CEC_SERVER_VERSION_1_5_0
:
602 case CEC_SERVER_VERSION_1_5_1
:
604 case CEC_SERVER_VERSION_1_5_2
:
606 case CEC_SERVER_VERSION_1_5_3
:
608 case CEC_SERVER_VERSION_1_6_0
:
610 case CEC_SERVER_VERSION_1_6_1
:
612 case CEC_SERVER_VERSION_1_6_2
:
614 case CEC_SERVER_VERSION_1_6_3
:
616 case CEC_SERVER_VERSION_1_7_0
:
618 case CEC_SERVER_VERSION_1_7_1
:
620 case CEC_SERVER_VERSION_1_7_2
:
622 case CEC_SERVER_VERSION_1_8_0
:
624 case CEC_SERVER_VERSION_1_8_1
:
626 case CEC_SERVER_VERSION_1_8_2
:
628 case CEC_SERVER_VERSION_1_9_0
:
630 case CEC_SERVER_VERSION_1_99_0
:
632 case CEC_SERVER_VERSION_2_0_0
:
634 case CEC_SERVER_VERSION_2_0_1
:
636 case CEC_SERVER_VERSION_2_0_2
:
638 case CEC_SERVER_VERSION_2_0_3
:
640 case CEC_SERVER_VERSION_2_0_4
:
642 case CEC_SERVER_VERSION_2_0_5
:
644 case CEC_SERVER_VERSION_2_1_0
:
646 case CEC_SERVER_VERSION_2_1_1
:
648 case CEC_SERVER_VERSION_2_1_2
:
650 case CEC_SERVER_VERSION_2_1_3
:
657 static const char *ToString(const cec_abort_reason reason
)
661 case CEC_ABORT_REASON_UNRECOGNIZED_OPCODE
:
662 return "unrecognised opcode";
663 case CEC_ABORT_REASON_NOT_IN_CORRECT_MODE_TO_RESPOND
:
664 return "not in correct mode to respond";
665 case CEC_ABORT_REASON_CANNOT_PROVIDE_SOURCE
:
666 return "cannot provide source";
667 case CEC_ABORT_REASON_INVALID_OPERAND
:
668 return "invalid operand";
669 case CEC_ABORT_REASON_REFUSED
:
676 static const char *ToString(const cec_user_control_code key
)
680 case CEC_USER_CONTROL_CODE_SELECT
:
682 case CEC_USER_CONTROL_CODE_UP
:
684 case CEC_USER_CONTROL_CODE_DOWN
:
686 case CEC_USER_CONTROL_CODE_LEFT
:
688 case CEC_USER_CONTROL_CODE_RIGHT
:
690 case CEC_USER_CONTROL_CODE_RIGHT_UP
:
692 case CEC_USER_CONTROL_CODE_RIGHT_DOWN
:
694 case CEC_USER_CONTROL_CODE_LEFT_UP
:
696 case CEC_USER_CONTROL_CODE_LEFT_DOWN
:
698 case CEC_USER_CONTROL_CODE_ROOT_MENU
:
700 case CEC_USER_CONTROL_CODE_SETUP_MENU
:
702 case CEC_USER_CONTROL_CODE_CONTENTS_MENU
:
703 return "contents menu";
704 case CEC_USER_CONTROL_CODE_FAVORITE_MENU
:
705 return "favourite menu";
706 case CEC_USER_CONTROL_CODE_EXIT
:
708 case CEC_USER_CONTROL_CODE_NUMBER0
:
710 case CEC_USER_CONTROL_CODE_NUMBER1
:
712 case CEC_USER_CONTROL_CODE_NUMBER2
:
714 case CEC_USER_CONTROL_CODE_NUMBER3
:
716 case CEC_USER_CONTROL_CODE_NUMBER4
:
718 case CEC_USER_CONTROL_CODE_NUMBER5
:
720 case CEC_USER_CONTROL_CODE_NUMBER6
:
722 case CEC_USER_CONTROL_CODE_NUMBER7
:
724 case CEC_USER_CONTROL_CODE_NUMBER8
:
726 case CEC_USER_CONTROL_CODE_NUMBER9
:
728 case CEC_USER_CONTROL_CODE_DOT
:
730 case CEC_USER_CONTROL_CODE_ENTER
:
732 case CEC_USER_CONTROL_CODE_CLEAR
:
734 case CEC_USER_CONTROL_CODE_NEXT_FAVORITE
:
735 return "next favourite";
736 case CEC_USER_CONTROL_CODE_CHANNEL_UP
:
738 case CEC_USER_CONTROL_CODE_CHANNEL_DOWN
:
739 return "channel down";
740 case CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL
:
741 return "previous channel";
742 case CEC_USER_CONTROL_CODE_SOUND_SELECT
:
743 return "sound select";
744 case CEC_USER_CONTROL_CODE_INPUT_SELECT
:
745 return "input select";
746 case CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION
:
747 return "display information";
748 case CEC_USER_CONTROL_CODE_HELP
:
750 case CEC_USER_CONTROL_CODE_PAGE_UP
:
752 case CEC_USER_CONTROL_CODE_PAGE_DOWN
:
754 case CEC_USER_CONTROL_CODE_POWER
:
756 case CEC_USER_CONTROL_CODE_VOLUME_UP
:
758 case CEC_USER_CONTROL_CODE_VOLUME_DOWN
:
759 return "volume down";
760 case CEC_USER_CONTROL_CODE_MUTE
:
762 case CEC_USER_CONTROL_CODE_PLAY
:
764 case CEC_USER_CONTROL_CODE_STOP
:
766 case CEC_USER_CONTROL_CODE_PAUSE
:
768 case CEC_USER_CONTROL_CODE_RECORD
:
770 case CEC_USER_CONTROL_CODE_REWIND
:
772 case CEC_USER_CONTROL_CODE_FAST_FORWARD
:
773 return "Fast forward";
774 case CEC_USER_CONTROL_CODE_EJECT
:
776 case CEC_USER_CONTROL_CODE_FORWARD
:
778 case CEC_USER_CONTROL_CODE_BACKWARD
:
780 case CEC_USER_CONTROL_CODE_STOP_RECORD
:
781 return "stop record";
782 case CEC_USER_CONTROL_CODE_PAUSE_RECORD
:
783 return "pause record";
784 case CEC_USER_CONTROL_CODE_ANGLE
:
786 case CEC_USER_CONTROL_CODE_SUB_PICTURE
:
787 return "sub picture";
788 case CEC_USER_CONTROL_CODE_VIDEO_ON_DEMAND
:
789 return "video on demand";
790 case CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE
:
791 return "electronic program guide";
792 case CEC_USER_CONTROL_CODE_TIMER_PROGRAMMING
:
793 return "timer programming";
794 case CEC_USER_CONTROL_CODE_INITIAL_CONFIGURATION
:
795 return "initial configuration";
796 case CEC_USER_CONTROL_CODE_PLAY_FUNCTION
:
797 return "play (function)";
798 case CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION
:
799 return "pause play (function)";
800 case CEC_USER_CONTROL_CODE_RECORD_FUNCTION
:
801 return "record (function)";
802 case CEC_USER_CONTROL_CODE_PAUSE_RECORD_FUNCTION
:
803 return "pause record (function)";
804 case CEC_USER_CONTROL_CODE_STOP_FUNCTION
:
805 return "stop (function)";
806 case CEC_USER_CONTROL_CODE_MUTE_FUNCTION
:
807 return "mute (function)";
808 case CEC_USER_CONTROL_CODE_RESTORE_VOLUME_FUNCTION
:
809 return "restore volume";
810 case CEC_USER_CONTROL_CODE_TUNE_FUNCTION
:
812 case CEC_USER_CONTROL_CODE_SELECT_MEDIA_FUNCTION
:
813 return "select media";
814 case CEC_USER_CONTROL_CODE_SELECT_AV_INPUT_FUNCTION
:
815 return "select AV input";
816 case CEC_USER_CONTROL_CODE_SELECT_AUDIO_INPUT_FUNCTION
:
817 return "select audio input";
818 case CEC_USER_CONTROL_CODE_POWER_TOGGLE_FUNCTION
:
819 return "power toggle";
820 case CEC_USER_CONTROL_CODE_POWER_OFF_FUNCTION
:
822 case CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION
:
824 case CEC_USER_CONTROL_CODE_F1_BLUE
:
826 case CEC_USER_CONTROL_CODE_F2_RED
:
828 case CEC_USER_CONTROL_CODE_F3_GREEN
:
830 case CEC_USER_CONTROL_CODE_F4_YELLOW
:
831 return "F4 (yellow)";
832 case CEC_USER_CONTROL_CODE_F5
:
834 case CEC_USER_CONTROL_CODE_DATA
:
836 case CEC_USER_CONTROL_CODE_AN_RETURN
:
837 return "return (Samsung)";
838 case CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST
:
839 return "channels list (Samsung)";
845 static const char *ToString(const cec_adapter_type type
)
849 case ADAPTERTYPE_P8_EXTERNAL
:
850 return "Pulse-Eight USB-CEC Adapter";
851 case ADAPTERTYPE_P8_DAUGHTERBOARD
:
852 return "Pulse-Eight USB-CEC Daughterboard";
853 case ADAPTERTYPE_RPI
:
854 return "Raspberry Pi";
855 case ADAPTERTYPE_TDA995x
:
862 static bool PhysicalAddressIsIncluded(uint16_t iParent
, uint16_t iChild
)
864 for (int iPtr
= 3; iPtr
>= 0; iPtr
--)
866 if (((iParent
>> 4*iPtr
) & 0xF) > 0 &&
867 ((iParent
>> 4*iPtr
) & 0xF) != ((iChild
>> 4*iPtr
) & 0xF))
873 static CStdString
ToString(const cec_command
& command
)
876 dataStr
.Format(">> %1x%1x", command
.initiator
, command
.destination
);
877 if (command
.opcode_set
== 1)
878 dataStr
.AppendFormat(":%02x", command
.opcode
);
879 for (uint8_t iPtr
= 0; iPtr
< command
.parameters
.size
; iPtr
++)
880 dataStr
.AppendFormat(":%02x", (unsigned int)command
.parameters
[iPtr
]);