14f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim/* 24f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * Copyright (C) 2014 The Android Open Source Project 34f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * 44f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * Licensed under the Apache License, Version 2.0 (the "License"); 54f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * you may not use this file except in compliance with the License. 64f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * You may obtain a copy of the License at 74f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * 84f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * http://www.apache.org/licenses/LICENSE-2.0 94f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * 104f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * Unless required by applicable law or agreed to in writing, software 114f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * distributed under the License is distributed on an "AS IS" BASIS, 124f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * See the License for the specific language governing permissions and 144f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * limitations under the License. 154f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim */ 164f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 17c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kimpackage com.android.server.hdmi; 184f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 19c70d2295dd3fb87ce8c81c704688d1ad05043b4dJinsuk Kimimport libcore.util.EmptyArray; 20c70d2295dd3fb87ce8c81c704688d1ad05043b4dJinsuk Kim 214f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kimimport java.util.Arrays; 224f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 234f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim/** 244f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * A class to encapsulate HDMI-CEC message used for the devices connected via 254f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * HDMI cable to communicate with one another. A message is defined by its 264f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * source and destination address, command (or opcode), and optional parameters. 274f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim */ 288e93c84739902f5adaa499b474f39e3c4807bc1cJungshik Jangpublic final class HdmiCecMessage { 29c70d2295dd3fb87ce8c81c704688d1ad05043b4dJinsuk Kim public static final byte[] EMPTY_PARAM = EmptyArray.BYTE; 30c70d2295dd3fb87ce8c81c704688d1ad05043b4dJinsuk Kim 314f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim private final int mSource; 324f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim private final int mDestination; 334f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 344f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim private final int mOpcode; 354f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim private final byte[] mParams; 364f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 374f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim /** 384f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * Constructor. 394f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim */ 404f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim public HdmiCecMessage(int source, int destination, int opcode, byte[] params) { 414f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim mSource = source; 424f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim mDestination = destination; 43a8fd44b74b8822426cdc0e45351899c95bf30e16Jinsuk Kim mOpcode = opcode & 0xFF; 444f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim mParams = Arrays.copyOf(params, params.length); 454f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim } 464f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 474f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim /** 484f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * Return the source address field of the message. It is the logical address 494f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * of the device which generated the message. 504f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * 514f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * @return source address 524f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim */ 534f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim public int getSource() { 544f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim return mSource; 554f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim } 564f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 574f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim /** 584f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * Return the destination address field of the message. It is the logical address 594f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * of the device to which the message is sent. 604f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * 614f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * @return destination address 624f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim */ 634f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim public int getDestination() { 644f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim return mDestination; 654f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim } 664f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 674f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim /** 684f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * Return the opcode field of the message. It is the type of the message that 694f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * tells the destination device what to do. 704f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * 714f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * @return opcode 724f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim */ 734f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim public int getOpcode() { 744f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim return mOpcode; 754f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim } 764f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 774f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim /** 784f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * Return the parameter field of the message. The contents of parameter varies 794f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * from opcode to opcode, and is used together with opcode to describe 804f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * the action for the destination device to take. 814f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * 824f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim * @return parameter 834f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim */ 844f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim public byte[] getParams() { 854f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim return mParams; 864f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim } 874f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 884f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim @Override 894f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim public String toString() { 904f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim StringBuffer s = new StringBuffer(); 9161ced38d61926bc28638d805436086db22b642c3Yuncheol Heo s.append(String.format("<%s> src: %d, dst: %d", 9261ced38d61926bc28638d805436086db22b642c3Yuncheol Heo opcodeToString(mOpcode), mSource, mDestination)); 9361ced38d61926bc28638d805436086db22b642c3Yuncheol Heo if (mParams.length > 0) { 9461ced38d61926bc28638d805436086db22b642c3Yuncheol Heo s.append(", params:"); 9561ced38d61926bc28638d805436086db22b642c3Yuncheol Heo for (byte data : mParams) { 9661ced38d61926bc28638d805436086db22b642c3Yuncheol Heo s.append(String.format(" %02X", data)); 9761ced38d61926bc28638d805436086db22b642c3Yuncheol Heo } 984f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim } 994f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim return s.toString(); 1004f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim } 10161ced38d61926bc28638d805436086db22b642c3Yuncheol Heo 10261ced38d61926bc28638d805436086db22b642c3Yuncheol Heo private static String opcodeToString(int opcode) { 10361ced38d61926bc28638d805436086db22b642c3Yuncheol Heo switch (opcode) { 104c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim case Constants.MESSAGE_FEATURE_ABORT: 10561ced38d61926bc28638d805436086db22b642c3Yuncheol Heo return "Feature Abort"; 106c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_IMAGE_VIEW_ON: 107c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Image View On"; 108c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_TUNER_STEP_INCREMENT: 109c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Tuner Step Increment"; 110c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_TUNER_STEP_DECREMENT: 111c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Tuner Step Decrement"; 112c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_TUNER_DEVICE_STATUS: 113c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Tuner Device Staus"; 114c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_GIVE_TUNER_DEVICE_STATUS: 115c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Give Tuner Device Status"; 116c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_RECORD_ON: 117c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Record On"; 118c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_RECORD_STATUS: 119c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Record Status"; 120c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_RECORD_OFF: 121c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Record Off"; 122c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim case Constants.MESSAGE_TEXT_VIEW_ON: 12361ced38d61926bc28638d805436086db22b642c3Yuncheol Heo return "Text View On"; 124c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_RECORD_TV_SCREEN: 125c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Record Tv Screen"; 126c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_GIVE_DECK_STATUS: 127c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Give Deck Status"; 128c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_DECK_STATUS: 129c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Deck Status"; 130c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SET_MENU_LANGUAGE: 131c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Set Menu Language"; 132c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_CLEAR_ANALOG_TIMER: 133c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Clear Analog Timer"; 134c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SET_ANALOG_TIMER: 135c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Set Analog Timer"; 136c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_TIMER_STATUS: 137c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Timer Status"; 138c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_STANDBY: 139c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Standby"; 140c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_PLAY: 141c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Play"; 142c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_DECK_CONTROL: 143c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Deck Control"; 144c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_TIMER_CLEARED_STATUS: 145c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Timer Cleared Status"; 146c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_USER_CONTROL_PRESSED: 147c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "User Control Pressed"; 148c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_USER_CONTROL_RELEASED: 149c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "User Control Release"; 150c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_GIVE_OSD_NAME: 151c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Give Osd Name"; 152c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SET_OSD_NAME: 153c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Set Osd Name"; 154c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SET_OSD_STRING: 155c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Set Osd String"; 156c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SET_TIMER_PROGRAM_TITLE: 157c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Set Timer Program Title"; 158c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST: 159c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "System Audio Mode Request"; 160c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_GIVE_AUDIO_STATUS: 161c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Give Audio Status"; 162c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SET_SYSTEM_AUDIO_MODE: 163473119fdc36340f833e4b755ae7f50a6914e0a24Jungshik Jang return "Set System Audio Mode"; 164c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_REPORT_AUDIO_STATUS: 165c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Report Audio Status"; 166c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_GIVE_SYSTEM_AUDIO_MODE_STATUS: 167c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Give System Audio Mode Status"; 168c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SYSTEM_AUDIO_MODE_STATUS: 169c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "System Audio Mode Status"; 170c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_ROUTING_CHANGE: 171c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Routing Change"; 172c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_ROUTING_INFORMATION: 173c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Routing Information"; 174c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim case Constants.MESSAGE_ACTIVE_SOURCE: 17561ced38d61926bc28638d805436086db22b642c3Yuncheol Heo return "Active Source"; 176c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_GIVE_PHYSICAL_ADDRESS: 177c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Give Physical Address"; 178c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_REPORT_PHYSICAL_ADDRESS: 179c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Report Physical Address"; 180c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_REQUEST_ACTIVE_SOURCE: 181c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Request Active Source"; 182c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SET_STREAM_PATH: 183c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Set Stream Path"; 184c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_DEVICE_VENDOR_ID: 185c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Device Vendor Id"; 186c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_VENDOR_COMMAND: 187c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Vendor Commandn"; 188c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_VENDOR_REMOTE_BUTTON_DOWN: 189c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Vendor Remote Button Down"; 190c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_VENDOR_REMOTE_BUTTON_UP: 191c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Vendor Remote Button Up"; 192c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_GIVE_DEVICE_VENDOR_ID: 193c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Give Device Vendor Id"; 194c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_MENU_REQUEST: 195c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Menu REquest"; 196c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_MENU_STATUS: 197c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Menu Status"; 198c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim case Constants.MESSAGE_GIVE_DEVICE_POWER_STATUS: 19961ced38d61926bc28638d805436086db22b642c3Yuncheol Heo return "Give Device Power Status"; 200c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_REPORT_POWER_STATUS: 201c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Report Power Status"; 202c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_GET_MENU_LANGUAGE: 203c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Get Menu Language"; 204c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SELECT_ANALOG_SERVICE: 205c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Select Analog Service"; 206c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SELECT_DIGITAL_SERVICE: 207c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Select Digital Service"; 208c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SET_DIGITAL_TIMER: 209c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Set Digital Timer"; 210c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_CLEAR_DIGITAL_TIMER: 211c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Clear Digital Timer"; 212c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SET_AUDIO_RATE: 213c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Set Audio Rate"; 214c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_INACTIVE_SOURCE: 215c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "InActive Source"; 216c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_CEC_VERSION: 217c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Cec Version"; 218c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_GET_CEC_VERSION: 219c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Get Cec Version"; 220119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim case Constants.MESSAGE_VENDOR_COMMAND_WITH_ID: 221c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Vendor Command With Id"; 222c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_CLEAR_EXTERNAL_TIMER: 223c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Clear External Timer"; 224c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_SET_EXTERNAL_TIMER: 225c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Set External Timer"; 226c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_REPORT_SHORT_AUDIO_DESCRIPTOR: 227c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Repot Short Audio Descriptor"; 228c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_REQUEST_SHORT_AUDIO_DESCRIPTOR: 229c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Request Short Audio Descriptor"; 230c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_INITIATE_ARC: 231c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Initiate ARC"; 232c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_REPORT_ARC_INITIATED: 233c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Report ARC Initiated"; 234c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_REPORT_ARC_TERMINATED: 235c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Report ARC Terminated"; 236c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_REQUEST_ARC_INITIATION: 237c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Request ARC Initiation"; 238c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_REQUEST_ARC_TERMINATION: 239c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Request ARC Termination"; 240c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_TERMINATE_ARC: 241c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Terminate ARC"; 242c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_CDC_MESSAGE: 243c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Cdc Message"; 244c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang case Constants.MESSAGE_ABORT: 245c94ac5cffc982898bc4f7a5d97d8fad5520ff444Jungshik Jang return "Abort"; 24661ced38d61926bc28638d805436086db22b642c3Yuncheol Heo default: 24761ced38d61926bc28638d805436086db22b642c3Yuncheol Heo return String.format("Opcode: %02X", opcode); 24861ced38d61926bc28638d805436086db22b642c3Yuncheol Heo } 24961ced38d61926bc28638d805436086db22b642c3Yuncheol Heo } 2504f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim} 2514f512fb451c8ddcea852645c5c24314c20c0974bJinsuk Kim 252