HdmiCecMessageBuilder.java revision 187d01765b935d07936f74343b4f4af590c239a1
1a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang/* 2a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Copyright (C) 2014 The Android Open Source Project 3a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 4a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Licensed under the Apache License, Version 2.0 (the "License"); 5a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * you may not use this file except in compliance with the License. 6a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * You may obtain a copy of the License at 7a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 8a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * http://www.apache.org/licenses/LICENSE-2.0 9a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 10a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Unless required by applicable law or agreed to in writing, software 11a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * distributed under the License is distributed on an "AS IS" BASIS, 12a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * See the License for the specific language governing permissions and 14a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * limitations under the License. 15a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 16a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 17a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jangpackage com.android.server.hdmi; 18a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 19a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jangimport android.hardware.hdmi.HdmiCec; 20a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jangimport android.hardware.hdmi.HdmiCecMessage; 21a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 22a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jangimport java.io.UnsupportedEncodingException; 234085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jangimport java.util.Arrays; 24a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 25a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang/** 26a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * A helper class to build {@link HdmiCecMessage} from various cec commands. 27a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 28a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jangpublic class HdmiCecMessageBuilder { 29a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang private static final int OSD_NAME_MAX_LENGTH = 13; 30a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 31a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang private HdmiCecMessageBuilder() {} 32a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 33a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang /** 344085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang * Build {@link HdmiCecMessage} from raw data. 354085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang * 364085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang * @param src source address of command 374085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang * @param dest destination address of command 384085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang * @param body body of message. It includes opcode. 394085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang * @return newly created {@link HdmiCecMessage} 404085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang */ 414085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang static HdmiCecMessage of(int src, int dest, byte[] body) { 424085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang byte opcode = body[0]; 434085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang byte params[] = Arrays.copyOfRange(body, 1, body.length); 444085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang return new HdmiCecMessage(src, dest, opcode, params); 454085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang } 464085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang 474085d0ef62554c7e139b82bca0f97161bb159f8cJungshik Jang /** 48a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Build <Feature Abort> command. <Feature Abort> consists of 49a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 1 byte original opcode and 1 byte reason fields with basic fields. 50a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 51a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param src source address of command 52a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param dest destination address of command 53a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param originalOpcode original opcode causing feature abort 54a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param reason reason of feature abort 55a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @return newly created {@link HdmiCecMessage} 56a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 57a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang static HdmiCecMessage buildFeatureAbortCommand(int src, int dest, int originalOpcode, 58a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang int reason) { 59a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang byte[] params = new byte[] { 60a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) originalOpcode, 61a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) reason, 62a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang }; 63a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_FEATURE_ABORT, params); 64a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 65a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 66a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang /** 67cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang * Build <Give Physical Address> command. 68cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang * 69cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang * @param src source address of command 70cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang * @param dest destination address of command 71cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang * @return newly created {@link HdmiCecMessage} 72cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang */ 73cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang static HdmiCecMessage buildGivePhysicalAddress(int src, int dest) { 74cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_PHYSICAL_ADDRESS); 75cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang } 76cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang 77cc5ef8c918e96516a5c51cc40735a1b8a24d8497Jungshik Jang /** 78be9cd8eb3fe64a572f9c7dfc41f04defd46a752dJungshik Jang * Build <Give Osd Name> command. 79a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 80a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param src source address of command 81a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param dest destination address of command 82a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @return newly created {@link HdmiCecMessage} 83a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 84be9cd8eb3fe64a572f9c7dfc41f04defd46a752dJungshik Jang static HdmiCecMessage buildGiveOsdNameCommand(int src, int dest) { 85be9cd8eb3fe64a572f9c7dfc41f04defd46a752dJungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_OSD_NAME); 86a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 87a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 88a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang /** 89a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Build <Give Vendor Id Command> command. 90a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 91a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param src source address of command 92a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param dest destination address of command 93a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @return newly created {@link HdmiCecMessage} 94a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 95a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang static HdmiCecMessage buildGiveDeviceVendorIdCommand(int src, int dest) { 96a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_DEVICE_VENDOR_ID); 97a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 98a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 99a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang /** 100a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Build <Set Menu Language > command. 101a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 102a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * <p>This is a broadcast message sent to all devices on the bus. 103a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 104a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param src source address of command 105a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param language 3-letter ISO639-2 based language code 106a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @return newly created {@link HdmiCecMessage} if language is valid. 107a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Otherwise, return null 108a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 109a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang static HdmiCecMessage buildSetMenuLanguageCommand(int src, String language) { 110a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang if (language.length() != 3) { 111a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return null; 112a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 113a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang // Hdmi CEC uses lower-cased ISO 639-2 (3 letters code). 114a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang String normalized = language.toLowerCase(); 115a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang byte[] params = new byte[] { 116a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) normalized.charAt(0), 117a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) normalized.charAt(1), 118a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) normalized.charAt(2), 119a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang }; 120a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang // <Set Menu Language> is broadcast message. 121a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_SET_MENU_LANGUAGE, 122a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang params); 123a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 124a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 125a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang /** 126a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Build <Set Osd Name > command. 127a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 128a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param src source address of command 129a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param name display (OSD) name of device 130a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @return newly created {@link HdmiCecMessage} if valid name. Otherwise, 131a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * return null 132a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 133a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang static HdmiCecMessage buildSetOsdNameCommand(int src, int dest, String name) { 134a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang int length = Math.min(name.length(), OSD_NAME_MAX_LENGTH); 135a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang byte[] params; 136a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang try { 137a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang params = name.substring(0, length).getBytes("US-ASCII"); 138a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } catch (UnsupportedEncodingException e) { 139a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return null; 140a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 141a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_SET_OSD_NAME, params); 142a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 143a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 144a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang /** 145a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Build <Report Physical Address> command. It has two bytes physical 146a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * address and one byte device type as parameter. 147a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 148a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * <p>This is a broadcast message sent to all devices on the bus. 149a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 150a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param src source address of command 151a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param address physical address of device 152a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param deviceType type of device 153a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @return newly created {@link HdmiCecMessage} 154a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 155a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang static HdmiCecMessage buildReportPhysicalAddressCommand(int src, int address, int deviceType) { 156a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang byte[] params = new byte[] { 157a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang // Two bytes for physical address 158a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) ((address >> 8) & 0xFF), 159a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) (address & 0xFF), 160a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang // One byte device type 161a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) deviceType 162a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang }; 163a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang // <Report Physical Address> is broadcast message. 164a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_REPORT_PHYSICAL_ADDRESS, 165a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang params); 166a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 167a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 168a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang /** 169a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Build <Device Vendor Id> command. It has three bytes vendor id as 170a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * parameter. 171a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 172a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * <p>This is a broadcast message sent to all devices on the bus. 173a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 174a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param src source address of command 175a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param vendorId device's vendor id 176a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @return newly created {@link HdmiCecMessage} 177a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 178a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang static HdmiCecMessage buildDeviceVendorIdCommand(int src, int vendorId) { 179a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang byte[] params = new byte[] { 180a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) ((vendorId >> 16) & 0xFF), 181a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) ((vendorId >> 8) & 0xFF), 182a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) (vendorId & 0xFF) 183a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang }; 184a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang // <Device Vendor Id> is broadcast message. 185a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_DEVICE_VENDOR_ID, 186a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang params); 187a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 188a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 189a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang /** 190a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Build <Device Vendor Id> command. It has one byte cec version as parameter. 191a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 192a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param src source address of command 193a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param dest destination address of command 194a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param version version of cec. Use 0x04 for "Version 1.3a" and 0x05 for 195a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * "Version 1.4 or 1.4a or 1.4b 196a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @return newly created {@link HdmiCecMessage} 197a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 198a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang static HdmiCecMessage buildCecVersion(int src, int dest, int version) { 199a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang byte[] params = new byte[] { 200a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang (byte) version 201a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang }; 202a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_CEC_VERSION, params); 203a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 204a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 205a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang /** 20667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * Build <Request Arc Initiation> 20767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * 20867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @param src source address of command 20967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @param dest destination address of command 21067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @return newly created {@link HdmiCecMessage} 21167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang */ 21267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang static HdmiCecMessage buildRequestArcInitiation(int src, int dest) { 21367ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_REQUEST_ARC_INITIATION); 21467ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 21567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 21667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang /** 21767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * Build <Request Arc Termination> 21867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * 21967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @param src source address of command 22067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @param dest destination address of command 22167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @return newly created {@link HdmiCecMessage} 22267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang */ 22367ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang static HdmiCecMessage buildRequestArcTermination(int src, int dest) { 22467ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_REQUEST_ARC_TERMINATION); 22567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 22667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 22767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang /** 22867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * Build <Report Arc Initiated> 22967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * 23067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @param src source address of command 23167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @param dest destination address of command 23267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @return newly created {@link HdmiCecMessage} 23367ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang */ 23467ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang static HdmiCecMessage buildReportArcInitiated(int src, int dest) { 23567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_REPORT_ARC_INITIATED); 23667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 23767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 23867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang /** 23967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * Build <Report Arc Terminated> 24067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * 24167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @param src source address of command 24267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @param dest destination address of command 24367ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @return newly created {@link HdmiCecMessage} 24467ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang */ 24567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang static HdmiCecMessage buildReportArcTerminated(int src, int dest) { 24667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_REPORT_ARC_TERMINATED); 24767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 24867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 24967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang /** 25078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * Build <Text View On> command. 25178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * 25278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @param src source address of command 25378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @param dest destination address of command 25478d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @return newly created {@link HdmiCecMessage} 25578d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim */ 25678d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim static HdmiCecMessage buildTextViewOn(int src, int dest) { 25778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim return buildCommand(src, dest, HdmiCec.MESSAGE_TEXT_VIEW_ON); 25878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 25978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 26078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim /** 26178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * Build <Active Source> command. 26278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * 26378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @param src source address of command 26478d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @param physicalAddress physical address of the device to become active 26578d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @return newly created {@link HdmiCecMessage} 26678d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim */ 26778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim static HdmiCecMessage buildActiveSource(int src, int physicalAddress) { 26878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_ACTIVE_SOURCE, 26978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim physicalAddressToParam(physicalAddress)); 27078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 27178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 27278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim /** 273a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * Build <Set Stream Path> command. 274a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * 275a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * <p>This is a broadcast message sent to all devices on the bus. 276a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * 277a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * @param src source address of command 278a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * @param streamPath physical address of the device to start streaming 279a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * @return newly created {@link HdmiCecMessage} 280a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim */ 281a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim static HdmiCecMessage buildSetStreamPath(int src, int streamPath) { 282a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_SET_STREAM_PATH, 283a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim physicalAddressToParam(streamPath)); 284a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim } 285a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim 286a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim /** 287a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * Build <Routing Change> command. 288a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * 289a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * <p>This is a broadcast message sent to all devices on the bus. 290a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * 291a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * @param src source address of command 292a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * @param oldPath physical address of the currently active routing path 293a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * @param newPath physical address of the new active routing path 294a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim * @return newly created {@link HdmiCecMessage} 295a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim */ 296a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim static HdmiCecMessage buildRoutingChange(int src, int oldPath, int newPath) { 297a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim byte[] param = new byte[] { 298a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim (byte) ((oldPath >> 8) & 0xFF), (byte) (oldPath & 0xFF), 299a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim (byte) ((newPath >> 8) & 0xFF), (byte) (newPath & 0xFF) 300a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim }; 301a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_ROUTING_CHANGE, param); 302a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim } 303a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim 304a6ce7708d6124224399241503fadcafe0c4684d4Jinsuk Kim /** 30578d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * Build <Give Device Power Status> command. 30678d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * 30778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @param src source address of command 30878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @param dest destination address of command 30978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @return newly created {@link HdmiCecMessage} 31078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim */ 31178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim static HdmiCecMessage buildGiveDevicePowerStatus(int src, int dest) { 31278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_DEVICE_POWER_STATUS); 31378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 31478d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 31578d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim /** 31663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * Build <System Audio Mode Request> command. 31763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * 31863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param src source address of command 31963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param avr destination address of command, it should be AVR 32063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param avrPhysicalAddress physical address of AVR 32163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param enableSystemAudio whether to enable System Audio Mode or not 32263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @return newly created {@link HdmiCecMessage} 32363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo */ 32463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo static HdmiCecMessage buildSystemAudioModeRequest(int src, int avr, int avrPhysicalAddress, 32563a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo boolean enableSystemAudio) { 32663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo if (enableSystemAudio) { 32763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo return buildCommand(src, avr, HdmiCec.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST, 32863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo physicalAddressToParam(avrPhysicalAddress)); 32963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } else { 33063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo return buildCommand(src, avr, HdmiCec.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST); 33163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 33263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 33363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo 33463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo /** 33563a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * Build <Give Audio Status> command. 33663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * 33763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param src source address of command 33863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param dest destination address of command 33963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @return newly created {@link HdmiCecMessage} 34063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo */ 34163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo static HdmiCecMessage buildGiveAudioStatus(int src, int dest) { 34263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_AUDIO_STATUS); 34363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 34463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo 34563a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo /** 34663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * Build <User Control Pressed> command. 34763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * 34863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param src source address of command 34963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param dest destination address of command 35063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param uiCommand keycode that user pressed 35163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @return newly created {@link HdmiCecMessage} 35263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo */ 35363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo static HdmiCecMessage buildUserControlPressed(int src, int dest, int uiCommand) { 354cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim return buildUserControlPressed(src, dest, new byte[] { (byte) uiCommand }); 355cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim } 356cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim 357cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim /** 358cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim * Build <User Control Pressed> command. 359cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim * 360cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim * @param src source address of command 361cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim * @param dest destination address of command 362cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim * @param commandParam uiCommand and the additional parameter 363cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim * @return newly created {@link HdmiCecMessage} 364cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim */ 365cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim static HdmiCecMessage buildUserControlPressed(int src, int dest, byte[] commandParam) { 366cd97baf4d08f9a23797eb6a8eb0d57bba1086becJinsuk Kim return buildCommand(src, dest, HdmiCec.MESSAGE_USER_CONTROL_PRESSED, commandParam); 36763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 36863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo 36963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo /** 37063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * Build <User Control Released> command. 37163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * 37263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param src source address of command 37363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param dest destination address of command 37463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @return newly created {@link HdmiCecMessage} 37563a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo */ 37663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo static HdmiCecMessage buildUserControlReleased(int src, int dest) { 37763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo return buildCommand(src, dest, HdmiCec.MESSAGE_USER_CONTROL_RELEASED); 37863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 37963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo 380187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang /** 381187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang * Build <Give System Audio Mode Status> command. 382187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang * 383187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang * @param src source address of command 384187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang * @param dest destination address of command 385187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang * @return newly created {@link HdmiCecMessage} 386187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang */ 387187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang static HdmiCecMessage buildGiveSystemAudioModeStatus(int src, int dest) { 388187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_SYSTEM_AUDIO_MODE_STATUS); 389187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang } 390187d01765b935d07936f74343b4f4af590c239a1Jungshik Jang 39163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo /***** Please ADD new buildXXX() methods above. ******/ 39263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo 39363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo /** 394a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Build a {@link HdmiCecMessage} without extra parameter. 395a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 396a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param src source address of command 397a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param dest destination address of command 398a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param opcode opcode for a message 399a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @return newly created {@link HdmiCecMessage} 400a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 401a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang private static HdmiCecMessage buildCommand(int src, int dest, int opcode) { 402a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return new HdmiCecMessage(src, dest, opcode, HdmiCecMessage.EMPTY_PARAM); 403a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 404a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang 405a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang /** 406a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * Build a {@link HdmiCecMessage} with given values. 407a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * 408a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param src source address of command 409a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param dest destination address of command 410a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param opcode opcode for a message 411a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @param params extra parameters for command 412a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang * @return newly created {@link HdmiCecMessage} 413a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang */ 414a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang private static HdmiCecMessage buildCommand(int src, int dest, int opcode, byte[] params) { 415a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang return new HdmiCecMessage(src, dest, opcode, params); 416a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang } 41778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 41878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim private static byte[] physicalAddressToParam(int physicalAddress) { 41978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim return new byte[] { 42078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim (byte) (physicalAddress >> 8), 42178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim (byte) (physicalAddress & 0xFF) 42278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim }; 42378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 424a1fa91fe263c483cf13066e2847a440de2cd52a5Jungshik Jang} 425