DcSwitchAsyncChannel.java revision a8467dd0c524787104b1ccdddc5e8af10ba729ed
1/*
2* Copyright (C) 2011-2014 MediaTek Inc.
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8*     http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16
17package com.android.internal.telephony.dataconnection;
18
19import com.android.internal.util.AsyncChannel;
20import com.android.internal.util.Protocol;
21import com.android.internal.telephony.PhoneConstants;
22
23import android.os.Message;
24import android.util.Log;
25
26public class DcSwitchAsyncChannel extends AsyncChannel {
27    private static final boolean DBG = true;
28    private static final boolean VDBG = false;
29    private static final String LOG_TAG = "DcSwitchAsyncChannel";
30
31    private int tagId = 0;
32    private DcSwitchState mDcSwitchState;
33
34    // ***** Event codes for driving the state machine
35    private static final int BASE = Protocol.BASE_DATA_CONNECTION_TRACKER + 0x00002000;
36    static final int REQ_CONNECT = BASE + 0;
37    static final int RSP_CONNECT = BASE + 1;
38    static final int REQ_DISCONNECT = BASE + 2;
39    static final int RSP_DISCONNECT = BASE + 3;
40    static final int REQ_IS_IDLE_STATE = BASE + 4;
41    static final int RSP_IS_IDLE_STATE = BASE + 5;
42    static final int REQ_IS_IDLE_OR_DEACTING_STATE = BASE + 6;
43    static final int RSP_IS_IDLE_OR_DEACTING_STATE = BASE + 7;
44
45    private static final int CMD_TO_STRING_COUNT = RSP_IS_IDLE_OR_DEACTING_STATE - BASE + 1;
46    private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT];
47    static {
48        sCmdToString[REQ_CONNECT - BASE] = "REQ_CONNECT";
49        sCmdToString[RSP_CONNECT - BASE] = "RSP_CONNECT";
50        sCmdToString[REQ_DISCONNECT - BASE] = "REQ_DISCONNECT";
51        sCmdToString[RSP_DISCONNECT - BASE] = "RSP_DISCONNECT";
52        sCmdToString[REQ_IS_IDLE_STATE - BASE] = "REQ_IS_IDLE_STATE";
53        sCmdToString[RSP_IS_IDLE_STATE - BASE] = "RSP_IS_IDLE_STATE";
54        sCmdToString[REQ_IS_IDLE_OR_DEACTING_STATE - BASE] = "REQ_IS_IDLE_OR_DEACTING_STATE";
55        sCmdToString[RSP_IS_IDLE_OR_DEACTING_STATE - BASE] = "RSP_IS_IDLE_OR_DEACTING_STATE";
56    }
57
58    protected static String cmdToString(int cmd) {
59        cmd -= BASE;
60        if ((cmd >= 0) && (cmd < sCmdToString.length)) {
61            return sCmdToString[cmd];
62        } else {
63            return AsyncChannel.cmdToString(cmd + BASE);
64        }
65    }
66
67    public DcSwitchAsyncChannel(DcSwitchState dcSwitchState, int id) {
68        mDcSwitchState = dcSwitchState;
69        tagId = id;
70    }
71
72    public void reqConnect(String type) {
73        sendMessage(REQ_CONNECT, type);
74        if (DBG) log("reqConnect");
75    }
76
77    public int rspConnect(Message response) {
78        int retVal = response.arg1;
79        if (DBG) log("rspConnect=" + retVal);
80        return retVal;
81    }
82
83    public int connectSync(String type) {
84        Message response = sendMessageSynchronously(REQ_CONNECT, type);
85        if ((response != null) && (response.what == RSP_CONNECT)) {
86            return rspConnect(response);
87        } else {
88            log("rspConnect error response=" + response);
89            return PhoneConstants.APN_REQUEST_FAILED;
90        }
91    }
92
93    public void reqDisconnect(String type) {
94        sendMessage(REQ_DISCONNECT, type);
95        if (DBG) log("reqDisconnect");
96    }
97
98    public int rspDisconnect(Message response) {
99        int retVal = response.arg1;
100        if (DBG) log("rspDisconnect=" + retVal);
101        return retVal;
102    }
103
104    public int disconnectSync(String type) {
105        Message response = sendMessageSynchronously(REQ_DISCONNECT, type);
106        if ((response != null) && (response.what == RSP_DISCONNECT)) {
107            return rspDisconnect(response);
108        } else {
109            log("rspDisconnect error response=" + response);
110            return PhoneConstants.APN_REQUEST_FAILED;
111        }
112    }
113
114    public void reqIsIdle() {
115        sendMessage(REQ_IS_IDLE_STATE);
116        if (DBG) log("reqIsIdle");
117    }
118
119    public boolean rspIsIdle(Message response) {
120        boolean retVal = response.arg1 == 1;
121        if (DBG) log("rspIsIdle=" + retVal);
122        return retVal;
123    }
124
125    public boolean isIdleSync() {
126        Message response = sendMessageSynchronously(REQ_IS_IDLE_STATE);
127        if ((response != null) && (response.what == RSP_IS_IDLE_STATE)) {
128            return rspIsIdle(response);
129        } else {
130            log("rspIsIndle error response=" + response);
131            return false;
132        }
133    }
134
135    public void reqIsIdleOrDeacting() {
136        sendMessage(REQ_IS_IDLE_OR_DEACTING_STATE);
137        if (DBG) log("reqIsIdleOrDeacting");
138    }
139
140    public boolean rspIsIdleOrDeacting(Message response) {
141        boolean retVal = response.arg1 == 1;
142        if (DBG) log("rspIsIdleOrDeacting=" + retVal);
143        return retVal;
144    }
145
146    public boolean isIdleOrDeactingSync() {
147        Message response = sendMessageSynchronously(REQ_IS_IDLE_OR_DEACTING_STATE);
148        if ((response != null) && (response.what == RSP_IS_IDLE_OR_DEACTING_STATE)) {
149            return rspIsIdleOrDeacting(response);
150        } else {
151            log("rspIsIndleOrDeacting error response=" + response);
152            return false;
153        }
154    }
155
156    @Override
157    public String toString() {
158        return mDcSwitchState.getName();
159    }
160
161    private void log(String s) {
162        Log.d(LOG_TAG, "[DcSwitchAsyncChannel-" + tagId + "]: " + s);
163    }
164}
165