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
:
497 case CEC_VENDOR_AKAI
:
501 case CEC_VENDOR_BENQ
:
503 case CEC_VENDOR_DAEWOO
:
505 case CEC_VENDOR_GRUNDIG
:
507 case CEC_VENDOR_MEDION
:
509 case CEC_VENDOR_SHARP
:
511 case CEC_VENDOR_VIZIO
:
513 case CEC_VENDOR_BROADCOM
:
515 case CEC_VENDOR_LOEWE
:
517 case CEC_VENDOR_DENON
:
524 static const char *ToString(const cec_client_version version
)
528 case CEC_CLIENT_VERSION_PRE_1_5
:
530 case CEC_CLIENT_VERSION_1_5_0
:
532 case CEC_CLIENT_VERSION_1_5_1
:
534 case CEC_CLIENT_VERSION_1_5_2
:
536 case CEC_CLIENT_VERSION_1_5_3
:
538 case CEC_CLIENT_VERSION_1_6_0
:
540 case CEC_CLIENT_VERSION_1_6_1
:
542 case CEC_CLIENT_VERSION_1_6_2
:
544 case CEC_CLIENT_VERSION_1_6_3
:
546 case CEC_CLIENT_VERSION_1_7_0
:
548 case CEC_CLIENT_VERSION_1_7_1
:
550 case CEC_CLIENT_VERSION_1_7_2
:
552 case CEC_CLIENT_VERSION_1_8_0
:
554 case CEC_CLIENT_VERSION_1_8_1
:
556 case CEC_CLIENT_VERSION_1_8_2
:
558 case CEC_CLIENT_VERSION_1_9_0
:
560 case CEC_CLIENT_VERSION_1_99_0
:
562 case CEC_CLIENT_VERSION_2_0_0
:
564 case CEC_CLIENT_VERSION_2_0_1
:
566 case CEC_CLIENT_VERSION_2_0_2
:
568 case CEC_CLIENT_VERSION_2_0_3
:
570 case CEC_CLIENT_VERSION_2_0_4
:
572 case CEC_CLIENT_VERSION_2_0_5
:
574 case CEC_CLIENT_VERSION_2_1_0
:
576 case CEC_CLIENT_VERSION_2_1_1
:
583 static const char *ToString(const cec_server_version version
)
587 case CEC_SERVER_VERSION_PRE_1_5
:
589 case CEC_SERVER_VERSION_1_5_0
:
591 case CEC_SERVER_VERSION_1_5_1
:
593 case CEC_SERVER_VERSION_1_5_2
:
595 case CEC_SERVER_VERSION_1_5_3
:
597 case CEC_SERVER_VERSION_1_6_0
:
599 case CEC_SERVER_VERSION_1_6_1
:
601 case CEC_SERVER_VERSION_1_6_2
:
603 case CEC_SERVER_VERSION_1_6_3
:
605 case CEC_SERVER_VERSION_1_7_0
:
607 case CEC_SERVER_VERSION_1_7_1
:
609 case CEC_SERVER_VERSION_1_7_2
:
611 case CEC_SERVER_VERSION_1_8_0
:
613 case CEC_SERVER_VERSION_1_8_1
:
615 case CEC_SERVER_VERSION_1_8_2
:
617 case CEC_SERVER_VERSION_1_9_0
:
619 case CEC_SERVER_VERSION_1_99_0
:
621 case CEC_SERVER_VERSION_2_0_0
:
623 case CEC_SERVER_VERSION_2_0_1
:
625 case CEC_SERVER_VERSION_2_0_2
:
627 case CEC_SERVER_VERSION_2_0_3
:
629 case CEC_SERVER_VERSION_2_0_4
:
631 case CEC_SERVER_VERSION_2_0_5
:
633 case CEC_SERVER_VERSION_2_1_0
:
635 case CEC_SERVER_VERSION_2_1_1
:
642 static const char *ToString(const cec_abort_reason reason
)
646 case CEC_ABORT_REASON_UNRECOGNIZED_OPCODE
:
647 return "unrecognised opcode";
648 case CEC_ABORT_REASON_NOT_IN_CORRECT_MODE_TO_RESPOND
:
649 return "not in correct mode to respond";
650 case CEC_ABORT_REASON_CANNOT_PROVIDE_SOURCE
:
651 return "cannot provide source";
652 case CEC_ABORT_REASON_INVALID_OPERAND
:
653 return "invalid operand";
654 case CEC_ABORT_REASON_REFUSED
:
661 static const char *ToString(const cec_user_control_code key
)
665 case CEC_USER_CONTROL_CODE_SELECT
:
667 case CEC_USER_CONTROL_CODE_UP
:
669 case CEC_USER_CONTROL_CODE_DOWN
:
671 case CEC_USER_CONTROL_CODE_LEFT
:
673 case CEC_USER_CONTROL_CODE_RIGHT
:
675 case CEC_USER_CONTROL_CODE_RIGHT_UP
:
677 case CEC_USER_CONTROL_CODE_RIGHT_DOWN
:
679 case CEC_USER_CONTROL_CODE_LEFT_UP
:
681 case CEC_USER_CONTROL_CODE_LEFT_DOWN
:
683 case CEC_USER_CONTROL_CODE_ROOT_MENU
:
685 case CEC_USER_CONTROL_CODE_SETUP_MENU
:
687 case CEC_USER_CONTROL_CODE_CONTENTS_MENU
:
688 return "contents menu";
689 case CEC_USER_CONTROL_CODE_FAVORITE_MENU
:
690 return "favourite menu";
691 case CEC_USER_CONTROL_CODE_EXIT
:
693 case CEC_USER_CONTROL_CODE_NUMBER0
:
695 case CEC_USER_CONTROL_CODE_NUMBER1
:
697 case CEC_USER_CONTROL_CODE_NUMBER2
:
699 case CEC_USER_CONTROL_CODE_NUMBER3
:
701 case CEC_USER_CONTROL_CODE_NUMBER4
:
703 case CEC_USER_CONTROL_CODE_NUMBER5
:
705 case CEC_USER_CONTROL_CODE_NUMBER6
:
707 case CEC_USER_CONTROL_CODE_NUMBER7
:
709 case CEC_USER_CONTROL_CODE_NUMBER8
:
711 case CEC_USER_CONTROL_CODE_NUMBER9
:
713 case CEC_USER_CONTROL_CODE_DOT
:
715 case CEC_USER_CONTROL_CODE_ENTER
:
717 case CEC_USER_CONTROL_CODE_CLEAR
:
719 case CEC_USER_CONTROL_CODE_NEXT_FAVORITE
:
720 return "next favourite";
721 case CEC_USER_CONTROL_CODE_CHANNEL_UP
:
723 case CEC_USER_CONTROL_CODE_CHANNEL_DOWN
:
724 return "channel down";
725 case CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL
:
726 return "previous channel";
727 case CEC_USER_CONTROL_CODE_SOUND_SELECT
:
728 return "sound select";
729 case CEC_USER_CONTROL_CODE_INPUT_SELECT
:
730 return "input select";
731 case CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION
:
732 return "display information";
733 case CEC_USER_CONTROL_CODE_HELP
:
735 case CEC_USER_CONTROL_CODE_PAGE_UP
:
737 case CEC_USER_CONTROL_CODE_PAGE_DOWN
:
739 case CEC_USER_CONTROL_CODE_POWER
:
741 case CEC_USER_CONTROL_CODE_VOLUME_UP
:
743 case CEC_USER_CONTROL_CODE_VOLUME_DOWN
:
744 return "volume down";
745 case CEC_USER_CONTROL_CODE_MUTE
:
747 case CEC_USER_CONTROL_CODE_PLAY
:
749 case CEC_USER_CONTROL_CODE_STOP
:
751 case CEC_USER_CONTROL_CODE_PAUSE
:
753 case CEC_USER_CONTROL_CODE_RECORD
:
755 case CEC_USER_CONTROL_CODE_REWIND
:
757 case CEC_USER_CONTROL_CODE_FAST_FORWARD
:
758 return "Fast forward";
759 case CEC_USER_CONTROL_CODE_EJECT
:
761 case CEC_USER_CONTROL_CODE_FORWARD
:
763 case CEC_USER_CONTROL_CODE_BACKWARD
:
765 case CEC_USER_CONTROL_CODE_STOP_RECORD
:
766 return "stop record";
767 case CEC_USER_CONTROL_CODE_PAUSE_RECORD
:
768 return "pause record";
769 case CEC_USER_CONTROL_CODE_ANGLE
:
771 case CEC_USER_CONTROL_CODE_SUB_PICTURE
:
772 return "sub picture";
773 case CEC_USER_CONTROL_CODE_VIDEO_ON_DEMAND
:
774 return "video on demand";
775 case CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE
:
776 return "electronic program guide";
777 case CEC_USER_CONTROL_CODE_TIMER_PROGRAMMING
:
778 return "timer programming";
779 case CEC_USER_CONTROL_CODE_INITIAL_CONFIGURATION
:
780 return "initial configuration";
781 case CEC_USER_CONTROL_CODE_PLAY_FUNCTION
:
782 return "play (function)";
783 case CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION
:
784 return "pause play (function)";
785 case CEC_USER_CONTROL_CODE_RECORD_FUNCTION
:
786 return "record (function)";
787 case CEC_USER_CONTROL_CODE_PAUSE_RECORD_FUNCTION
:
788 return "pause record (function)";
789 case CEC_USER_CONTROL_CODE_STOP_FUNCTION
:
790 return "stop (function)";
791 case CEC_USER_CONTROL_CODE_MUTE_FUNCTION
:
792 return "mute (function)";
793 case CEC_USER_CONTROL_CODE_RESTORE_VOLUME_FUNCTION
:
794 return "restore volume";
795 case CEC_USER_CONTROL_CODE_TUNE_FUNCTION
:
797 case CEC_USER_CONTROL_CODE_SELECT_MEDIA_FUNCTION
:
798 return "select media";
799 case CEC_USER_CONTROL_CODE_SELECT_AV_INPUT_FUNCTION
:
800 return "select AV input";
801 case CEC_USER_CONTROL_CODE_SELECT_AUDIO_INPUT_FUNCTION
:
802 return "select audio input";
803 case CEC_USER_CONTROL_CODE_POWER_TOGGLE_FUNCTION
:
804 return "power toggle";
805 case CEC_USER_CONTROL_CODE_POWER_OFF_FUNCTION
:
807 case CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION
:
809 case CEC_USER_CONTROL_CODE_F1_BLUE
:
811 case CEC_USER_CONTROL_CODE_F2_RED
:
813 case CEC_USER_CONTROL_CODE_F3_GREEN
:
815 case CEC_USER_CONTROL_CODE_F4_YELLOW
:
816 return "F4 (yellow)";
817 case CEC_USER_CONTROL_CODE_F5
:
819 case CEC_USER_CONTROL_CODE_DATA
:
821 case CEC_USER_CONTROL_CODE_AN_RETURN
:
822 return "return (Samsung)";
823 case CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST
:
824 return "channels list (Samsung)";
830 static const char *ToString(const cec_adapter_type type
)
834 case ADAPTERTYPE_P8_EXTERNAL
:
835 return "Pulse-Eight USB-CEC Adapter";
836 case ADAPTERTYPE_P8_DAUGHTERBOARD
:
837 return "Pulse-Eight USB-CEC Daughterboard";
838 case ADAPTERTYPE_RPI
:
839 return "Raspberry Pi";
840 case ADAPTERTYPE_TDA995x
:
847 static bool PhysicalAddressIsIncluded(uint16_t iParent
, uint16_t iChild
)
849 for (int iPtr
= 3; iPtr
>= 0; iPtr
--)
851 if (((iParent
>> 4*iPtr
) & 0xF) > 0 &&
852 ((iParent
>> 4*iPtr
) & 0xF) != ((iChild
>> 4*iPtr
) & 0xF))
858 static CStdString
ToString(const cec_command
& command
)
861 dataStr
.Format(">> %1x%1x", command
.initiator
, command
.destination
);
862 if (command
.opcode_set
== 1)
863 dataStr
.AppendFormat(":%02x", command
.opcode
);
864 for (uint8_t iPtr
= 0; iPtr
< command
.parameters
.size
; iPtr
++)
865 dataStr
.AppendFormat(":%02x", (unsigned int)command
.parameters
[iPtr
]);