RequestArcAction.java revision b509c2ecd99619248b7a07fb0fa978bb27f25cc3
167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang/* 267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * Copyright (C) 2014 The Android Open Source Project 367ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * 467ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * Licensed under the Apache License, Version 2.0 (the "License"); 567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * you may not use this file except in compliance with the License. 667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * You may obtain a copy of the License at 767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * 867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * http://www.apache.org/licenses/LICENSE-2.0 967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * 1067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * Unless required by applicable law or agreed to in writing, software 1167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * distributed under the License is distributed on an "AS IS" BASIS, 1267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1367ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * See the License for the specific language governing permissions and 1467ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * limitations under the License. 1567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang */ 1667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 1767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jangpackage com.android.server.hdmi; 1867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 1961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jangimport android.hardware.hdmi.HdmiDeviceInfo; 20c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim 2167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jangimport android.util.Slog; 2267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 2367ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang/** 2467ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * Base feature action class for <Request ARC Initiation>/<Request ARC Termination>. 2567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang */ 26b509c2ecd99619248b7a07fb0fa978bb27f25cc3Jungshik Jangabstract class RequestArcAction extends HdmiCecFeatureAction { 2767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang private static final String TAG = "RequestArcAction"; 2867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 2967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang // State in which waits for ARC response. 3067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang protected static final int STATE_WATING_FOR_REQUEST_ARC_REQUEST_RESPONSE = 1; 3167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 3267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang // Logical address of AV Receiver. 3367ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang protected final int mAvrAddress; 3467ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 3567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang /** 3667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @Constructor 3767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * 3879c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang * @param source {@link HdmiCecLocalDevice} instance 3967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @param avrAddress address of AV receiver. It should be AUDIO_SYSTEM type 4067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * @throw IllegalArugmentException if device type of sourceAddress and avrAddress 4167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang * is invalid 4267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang */ 4379c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang RequestArcAction(HdmiCecLocalDevice source, int avrAddress) { 4479c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang super(source); 4561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang HdmiUtils.verifyAddressType(getSourceAddress(), HdmiDeviceInfo.DEVICE_TV); 4661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang HdmiUtils.verifyAddressType(avrAddress, HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM); 4767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang mAvrAddress = avrAddress; 4867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 4967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 5067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang @Override 5167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang boolean processCommand(HdmiCecMessage cmd) { 5263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo if (mState != STATE_WATING_FOR_REQUEST_ARC_REQUEST_RESPONSE 5363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo || !HdmiUtils.checkCommandSource(cmd, mAvrAddress, TAG)) { 5467ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang return false; 5567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 5667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang int opcode = cmd.getOpcode(); 5767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang switch (opcode) { 5867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang // Handles only <Feature Abort> here and, both <Initiate ARC> and <Terminate ARC> 5967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang // are handled in HdmiControlService itself because both can be 6067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang // received wihtout <Request ARC Initiation> or <Request ARC Termination>. 61c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim case Constants.MESSAGE_FEATURE_ABORT: 6267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang disableArcTransmission(); 6367ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang finish(); 6467ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang return true; 6567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang default: 6667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang Slog.w(TAG, "Unsupported opcode:" + cmd.toString()); 6767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 6867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang return false; 6967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 7067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 7167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang protected final void disableArcTransmission() { 7267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang // Start Set ARC Transmission State action. 7379c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang SetArcTransmissionStateAction action = new SetArcTransmissionStateAction(localDevice(), 7479c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang mAvrAddress, false); 7579c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang addAndStartAction(action); 7667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 7767ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang 7867ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang @Override 7967ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang final void handleTimerEvent(int state) { 8067ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang if (mState != state || state != STATE_WATING_FOR_REQUEST_ARC_REQUEST_RESPONSE) { 8167ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang return; 8267ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 8367ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang disableArcTransmission(); 84358164c09e367199cd3d4af6381a9f342ac9f0efJungshik Jang finish(); 8567ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang } 8667ea521d14f366fe5aac09e512865d31bfa0ee53Jungshik Jang} 87