diff options
author | Wink Saville <wink@google.com> | 2012-07-11 15:41:29 -0700 |
---|---|---|
committer | Wink Saville <wink@google.com> | 2012-07-11 15:41:29 -0700 |
commit | 0825495a331bb44df395a0cdb79fab85e68db5d5 (patch) | |
tree | 1d22c162b785b6e6663419f28d2c4d7afd97086d /mockril | |
parent | f4ba68aa88637e9df034fce94971535852cc0a7b (diff) | |
download | frameworks_opt_telephony-0825495a331bb44df395a0cdb79fab85e68db5d5.zip frameworks_opt_telephony-0825495a331bb44df395a0cdb79fab85e68db5d5.tar.gz frameworks_opt_telephony-0825495a331bb44df395a0cdb79fab85e68db5d5.tar.bz2 |
Create telephony-common
telephony-common was created by moving some of
frameworks/base/telephony
to:
frameworks/opt/telephony
Change-Id: I32cbb5eec1fa239c1587e055c8f7ef4fc48fb62c
Diffstat (limited to 'mockril')
-rw-r--r-- | mockril/Android.mk | 30 | ||||
-rw-r--r-- | mockril/src/com/android/internal/telephony/mockril/MockRilController.java | 217 |
2 files changed, 247 insertions, 0 deletions
diff --git a/mockril/Android.mk b/mockril/Android.mk new file mode 100644 index 0000000..95ae84c --- /dev/null +++ b/mockril/Android.mk @@ -0,0 +1,30 @@ +# +# Copyright (C) 2010 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# + +LOCAL_PATH:=$(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +LOCAL_JAVA_LIBRARIES := core framework + +LOCAL_STATIC_JAVA_LIBRARIES := librilproto-java + +LOCAL_MODULE := mockrilcontroller + +include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/mockril/src/com/android/internal/telephony/mockril/MockRilController.java b/mockril/src/com/android/internal/telephony/mockril/MockRilController.java new file mode 100644 index 0000000..0e75c72 --- /dev/null +++ b/mockril/src/com/android/internal/telephony/mockril/MockRilController.java @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2010, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.telephony.mockril; + +import android.os.Bundle; +import android.util.Log; + +import com.android.internal.communication.MsgHeader; +import com.android.internal.communication.Msg; +import com.android.internal.telephony.RilChannel; +import com.android.internal.telephony.ril_proto.RilCtrlCmds; +import com.android.internal.telephony.ril_proto.RilCmds; +import com.google.protobuf.micro.MessageMicro; + +import java.io.IOException; + +/** + * Contain a list of commands to control Mock RIL. Before using these commands the devices + * needs to be set with Mock RIL. Refer to hardware/ril/mockril/README.txt for details. + * + */ +public class MockRilController { + private static final String TAG = "MockRILController"; + private RilChannel mRilChannel = null; + private Msg mMessage = null; + + public MockRilController() throws IOException { + mRilChannel = RilChannel.makeRilChannel(); + } + + /** + * Close the channel after the communication is done. + * This method has to be called after the test is finished. + */ + public void closeChannel() { + mRilChannel.close(); + } + + /** + * Send commands and return true on success + * @param cmd for MsgHeader + * @param token for MsgHeader + * @param status for MsgHeader + * @param pbData for Msg data + * @return true if command is sent successfully, false if it fails + */ + private boolean sendCtrlCommand(int cmd, long token, int status, MessageMicro pbData) { + try { + Msg.send(mRilChannel, cmd, token, status, pbData); + } catch (IOException e) { + Log.v(TAG, "send command : %d failed: " + e.getStackTrace()); + return false; + } + return true; + } + + /** + * Get control response + * @return Msg if response is received, else return null. + */ + private Msg getCtrlResponse() { + Msg response = null; + try { + response = Msg.recv(mRilChannel); + } catch (IOException e) { + Log.v(TAG, "receive response for getRadioState() error: " + e.getStackTrace()); + return null; + } + return response; + } + + /** + * @return the radio state if it is valid, otherwise return -1 + */ + public int getRadioState() { + if (!sendCtrlCommand(RilCtrlCmds.CTRL_CMD_GET_RADIO_STATE, 0, 0, null)) { + return -1; + } + Msg response = getCtrlResponse(); + if (response == null) { + Log.v(TAG, "failed to get response"); + return -1; + } + response.printHeader(TAG); + RilCtrlCmds.CtrlRspRadioState resp = + response.getDataAs(RilCtrlCmds.CtrlRspRadioState.class); + int state = resp.getState(); + if ((state >= RilCmds.RADIOSTATE_OFF) && (state <= RilCmds.RADIOSTATE_NV_READY)) + return state; + else + return -1; + } + + /** + * Set the radio state of mock ril to the given state + * @param state for given radio state + * @return true if the state is set successful, false if it fails + */ + public boolean setRadioState(int state) { + RilCtrlCmds.CtrlReqRadioState req = new RilCtrlCmds.CtrlReqRadioState(); + if (state < 0 || state > RilCmds.RADIOSTATE_NV_READY) { + Log.v(TAG, "the give radio state is not valid."); + return false; + } + req.setState(state); + if (!sendCtrlCommand(RilCtrlCmds.CTRL_CMD_SET_RADIO_STATE, 0, 0, req)) { + Log.v(TAG, "send set radio state request failed."); + return false; + } + Msg response = getCtrlResponse(); + if (response == null) { + Log.v(TAG, "failed to get response for setRadioState"); + return false; + } + response.printHeader(TAG); + RilCtrlCmds.CtrlRspRadioState resp = + response.getDataAs(RilCtrlCmds.CtrlRspRadioState.class); + int curstate = resp.getState(); + return curstate == state; + } + + /** + * Start an incoming call for the given phone number + * + * @param phoneNumber is the number to show as incoming call + * @return true if the incoming call is started successfully, false if it fails. + */ + public boolean startIncomingCall(String phoneNumber) { + RilCtrlCmds.CtrlReqSetMTCall req = new RilCtrlCmds.CtrlReqSetMTCall(); + + req.setPhoneNumber(phoneNumber); + if (!sendCtrlCommand(RilCtrlCmds.CTRL_CMD_SET_MT_CALL, 0, 0, req)) { + Log.v(TAG, "send CMD_SET_MT_CALL request failed"); + return false; + } + return true; + } + + /** + * Hang up a connection remotelly for the given call fail cause + * + * @param connectionID is the connection to be hung up + * @param failCause is the call fail cause defined in ril.h + * @return true if the hangup is successful, false if it fails + */ + public boolean hangupRemote(int connectionId, int failCause) { + RilCtrlCmds.CtrlHangupConnRemote req = new RilCtrlCmds.CtrlHangupConnRemote(); + req.setConnectionId(connectionId); + req.setCallFailCause(failCause); + + if (!sendCtrlCommand(RilCtrlCmds.CTRL_CMD_HANGUP_CONN_REMOTE, 0, 0, req)) { + Log.v(TAG, "send CTRL_CMD_HANGUP_CONN_REMOTE request failed"); + return false; + } + return true; + } + + /** + * Set call transition flag to the Mock Ril + * + * @param flag is a boolean value for the call transiton flag + * true: call transition: dialing->alert, alert->active is controlled + * false: call transition is automatically handled by Mock Ril + * @return true if the request is successful, false if it failed to set the flag + */ + public boolean setCallTransitionFlag(boolean flag) { + RilCtrlCmds.CtrlSetCallTransitionFlag req = new RilCtrlCmds.CtrlSetCallTransitionFlag(); + + req.setFlag(flag); + + if (!sendCtrlCommand(RilCtrlCmds.CTRL_CMD_SET_CALL_TRANSITION_FLAG, 0, 0, req)) { + Log.v(TAG, "send CTRL_CMD_SET_CALL_TRANSITION_FLAG request failed"); + return false; + } + return true; + } + + /** + * Set the dialing call to alert if the call transition flag is true + * + * @return true if the call transition is successful, false if it fails + */ + public boolean setDialCallToAlert() { + if (!sendCtrlCommand(RilCtrlCmds.CTRL_CMD_SET_CALL_ALERT, 0, 0, null)) { + Log.v(TAG, "send CTRL_CMD_SET_CALL_ALERT request failed"); + return false; + } + return true; + } + + /** + * Set the alert call to active if the call transition flag is true + * + * @return true if the call transition is successful, false if it fails + */ + public boolean setAlertCallToActive() { + if (!sendCtrlCommand(RilCtrlCmds.CTRL_CMD_SET_CALL_ACTIVE, 0, 0, null)) { + Log.v(TAG, "send CTRL_CMD_SET_CALL_ACTIVE request failed"); + return false; + } + return true; + } +} |