1 /*
2  * Copyright (C) 2007 The Android Open Source Project
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 
17 package com.android.internal.telephony;
18 
19 import com.android.internal.telephony.RILConstants;
20 
21 import android.telephony.Rlog;
22 
23 /**
24  * {@hide}
25  */
26 public class CommandException extends RuntimeException {
27     private Error mError;
28 
29     public enum Error {
30         INVALID_RESPONSE,
31         RADIO_NOT_AVAILABLE,
32         GENERIC_FAILURE,
33         PASSWORD_INCORRECT,
34         SIM_PIN2,
35         SIM_PUK2,
36         REQUEST_NOT_SUPPORTED,
37         OP_NOT_ALLOWED_DURING_VOICE_CALL,
38         OP_NOT_ALLOWED_BEFORE_REG_NW,
39         SMS_FAIL_RETRY,
40         SIM_ABSENT,
41         SUBSCRIPTION_NOT_AVAILABLE,
42         MODE_NOT_SUPPORTED,
43         FDN_CHECK_FAILURE,
44         ILLEGAL_SIM_OR_ME,
45         MISSING_RESOURCE,
46         NO_SUCH_ELEMENT,
47         SUBSCRIPTION_NOT_SUPPORTED,
48         DIAL_MODIFIED_TO_USSD,
49         DIAL_MODIFIED_TO_SS,
50         DIAL_MODIFIED_TO_DIAL,
51         USSD_MODIFIED_TO_DIAL,
52         USSD_MODIFIED_TO_SS,
53         USSD_MODIFIED_TO_USSD,
54         SS_MODIFIED_TO_DIAL,
55         SS_MODIFIED_TO_USSD,
56         SS_MODIFIED_TO_SS,
57         SIM_ALREADY_POWERED_OFF,
58         SIM_ALREADY_POWERED_ON,
59         SIM_DATA_NOT_AVAILABLE,
60         SIM_SAP_CONNECT_FAILURE,
61         SIM_SAP_MSG_SIZE_TOO_LARGE,
62         SIM_SAP_MSG_SIZE_TOO_SMALL,
63         SIM_SAP_CONNECT_OK_CALL_ONGOING,
64         LCE_NOT_SUPPORTED,
65         NO_MEMORY,
66         INTERNAL_ERR,
67         SYSTEM_ERR,
68         MODEM_ERR,
69         INVALID_STATE,
70         NO_RESOURCES,
71         SIM_ERR,
72         INVALID_ARGUMENTS,
73         INVALID_SIM_STATE,
74         INVALID_MODEM_STATE,
75         INVALID_CALL_ID,
76         NO_SMS_TO_ACK,
77         NETWORK_ERR,
78         REQUEST_RATE_LIMITED,
79         SIM_BUSY,
80         SIM_FULL,
81         NETWORK_REJECT,
82         OPERATION_NOT_ALLOWED,
83         EMPTY_RECORD,
84         INVALID_SMS_FORMAT,
85         ENCODING_ERR,
86         INVALID_SMSC_ADDRESS,
87         NO_SUCH_ENTRY,
88         NETWORK_NOT_READY,
89         NOT_PROVISIONED,
90         NO_SUBSCRIPTION,
91         NO_NETWORK_FOUND,
92         DEVICE_IN_USE,
93         ABORTED,
94         OEM_ERROR_1,
95         OEM_ERROR_2,
96         OEM_ERROR_3,
97         OEM_ERROR_4,
98         OEM_ERROR_5,
99         OEM_ERROR_6,
100         OEM_ERROR_7,
101         OEM_ERROR_8,
102         OEM_ERROR_9,
103         OEM_ERROR_10,
104         OEM_ERROR_11,
105         OEM_ERROR_12,
106         OEM_ERROR_13,
107         OEM_ERROR_14,
108         OEM_ERROR_15,
109         OEM_ERROR_16,
110         OEM_ERROR_17,
111         OEM_ERROR_18,
112         OEM_ERROR_19,
113         OEM_ERROR_20,
114         OEM_ERROR_21,
115         OEM_ERROR_22,
116         OEM_ERROR_23,
117         OEM_ERROR_24,
118         OEM_ERROR_25,
119     }
120 
CommandException(Error e)121     public CommandException(Error e) {
122         super(e.toString());
123         mError = e;
124     }
125 
CommandException(Error e, String errString)126     public CommandException(Error e, String errString) {
127         super(errString);
128         mError = e;
129     }
130 
131     public static CommandException
fromRilErrno(int ril_errno)132     fromRilErrno(int ril_errno) {
133         switch(ril_errno) {
134             case RILConstants.SUCCESS:                       return null;
135             case RILConstants.RIL_ERRNO_INVALID_RESPONSE:
136                 return new CommandException(Error.INVALID_RESPONSE);
137             case RILConstants.RADIO_NOT_AVAILABLE:
138                 return new CommandException(Error.RADIO_NOT_AVAILABLE);
139             case RILConstants.GENERIC_FAILURE:
140                 return new CommandException(Error.GENERIC_FAILURE);
141             case RILConstants.PASSWORD_INCORRECT:
142                 return new CommandException(Error.PASSWORD_INCORRECT);
143             case RILConstants.SIM_PIN2:
144                 return new CommandException(Error.SIM_PIN2);
145             case RILConstants.SIM_PUK2:
146                 return new CommandException(Error.SIM_PUK2);
147             case RILConstants.REQUEST_NOT_SUPPORTED:
148                 return new CommandException(Error.REQUEST_NOT_SUPPORTED);
149             case RILConstants.OP_NOT_ALLOWED_DURING_VOICE_CALL:
150                 return new CommandException(Error.OP_NOT_ALLOWED_DURING_VOICE_CALL);
151             case RILConstants.OP_NOT_ALLOWED_BEFORE_REG_NW:
152                 return new CommandException(Error.OP_NOT_ALLOWED_BEFORE_REG_NW);
153             case RILConstants.SMS_SEND_FAIL_RETRY:
154                 return new CommandException(Error.SMS_FAIL_RETRY);
155             case RILConstants.SIM_ABSENT:
156                 return new CommandException(Error.SIM_ABSENT);
157             case RILConstants.SUBSCRIPTION_NOT_AVAILABLE:
158                 return new CommandException(Error.SUBSCRIPTION_NOT_AVAILABLE);
159             case RILConstants.MODE_NOT_SUPPORTED:
160                 return new CommandException(Error.MODE_NOT_SUPPORTED);
161             case RILConstants.FDN_CHECK_FAILURE:
162                 return new CommandException(Error.FDN_CHECK_FAILURE);
163             case RILConstants.ILLEGAL_SIM_OR_ME:
164                 return new CommandException(Error.ILLEGAL_SIM_OR_ME);
165             case RILConstants.MISSING_RESOURCE:
166                 return new CommandException(Error.MISSING_RESOURCE);
167             case RILConstants.NO_SUCH_ELEMENT:
168                 return new CommandException(Error.NO_SUCH_ELEMENT);
169             case RILConstants.SUBSCRIPTION_NOT_SUPPORTED:
170                 return new CommandException(Error.SUBSCRIPTION_NOT_SUPPORTED);
171             case RILConstants.DIAL_MODIFIED_TO_USSD:
172                 return new CommandException(Error.DIAL_MODIFIED_TO_USSD);
173             case RILConstants.DIAL_MODIFIED_TO_SS:
174                 return new CommandException(Error.DIAL_MODIFIED_TO_SS);
175             case RILConstants.DIAL_MODIFIED_TO_DIAL:
176                 return new CommandException(Error.DIAL_MODIFIED_TO_DIAL);
177             case RILConstants.USSD_MODIFIED_TO_DIAL:
178                 return new CommandException(Error.USSD_MODIFIED_TO_DIAL);
179             case RILConstants.USSD_MODIFIED_TO_SS:
180                 return new CommandException(Error.USSD_MODIFIED_TO_SS);
181             case RILConstants.USSD_MODIFIED_TO_USSD:
182                 return new CommandException(Error.USSD_MODIFIED_TO_USSD);
183             case RILConstants.SS_MODIFIED_TO_DIAL:
184                 return new CommandException(Error.SS_MODIFIED_TO_DIAL);
185             case RILConstants.SS_MODIFIED_TO_USSD:
186                 return new CommandException(Error.SS_MODIFIED_TO_USSD);
187             case RILConstants.SS_MODIFIED_TO_SS:
188                 return new CommandException(Error.SS_MODIFIED_TO_SS);
189             case RILConstants.SIM_ALREADY_POWERED_OFF:
190                 return new CommandException(Error.SIM_ALREADY_POWERED_OFF);
191             case RILConstants.SIM_ALREADY_POWERED_ON:
192                 return new CommandException(Error.SIM_ALREADY_POWERED_ON);
193             case RILConstants.SIM_DATA_NOT_AVAILABLE:
194                 return new CommandException(Error.SIM_DATA_NOT_AVAILABLE);
195             case RILConstants.SIM_SAP_CONNECT_FAILURE:
196                 return new CommandException(Error.SIM_SAP_CONNECT_FAILURE);
197             case RILConstants.SIM_SAP_MSG_SIZE_TOO_LARGE:
198                 return new CommandException(Error.SIM_SAP_MSG_SIZE_TOO_LARGE);
199             case RILConstants.SIM_SAP_MSG_SIZE_TOO_SMALL:
200                 return new CommandException(Error.SIM_SAP_MSG_SIZE_TOO_SMALL);
201             case RILConstants.SIM_SAP_CONNECT_OK_CALL_ONGOING:
202                 return new CommandException(Error.SIM_SAP_CONNECT_OK_CALL_ONGOING);
203             case RILConstants.LCE_NOT_SUPPORTED:
204                 return new CommandException(Error.LCE_NOT_SUPPORTED);
205             case RILConstants.NO_MEMORY:
206                 return new CommandException(Error.NO_MEMORY);
207             case RILConstants.INTERNAL_ERR:
208                 return new CommandException(Error.INTERNAL_ERR);
209             case RILConstants.SYSTEM_ERR:
210                 return new CommandException(Error.SYSTEM_ERR);
211             case RILConstants.MODEM_ERR:
212                 return new CommandException(Error.MODEM_ERR);
213             case RILConstants.INVALID_STATE:
214                 return new CommandException(Error.INVALID_STATE);
215             case RILConstants.NO_RESOURCES:
216                 return new CommandException(Error.NO_RESOURCES);
217             case RILConstants.SIM_ERR:
218                 return new CommandException(Error.SIM_ERR);
219             case RILConstants.INVALID_ARGUMENTS:
220                 return new CommandException(Error.INVALID_ARGUMENTS);
221             case RILConstants.INVALID_SIM_STATE:
222                 return new CommandException(Error.INVALID_SIM_STATE);
223             case RILConstants.INVALID_MODEM_STATE:
224                 return new CommandException(Error.INVALID_MODEM_STATE);
225             case RILConstants.INVALID_CALL_ID:
226                 return new CommandException(Error.INVALID_CALL_ID);
227             case RILConstants.NO_SMS_TO_ACK:
228                 return new CommandException(Error.NO_SMS_TO_ACK);
229             case RILConstants.NETWORK_ERR:
230                 return new CommandException(Error.NETWORK_ERR);
231             case RILConstants.REQUEST_RATE_LIMITED:
232                 return new CommandException(Error.REQUEST_RATE_LIMITED);
233             case RILConstants.SIM_BUSY:
234                 return new CommandException(Error.SIM_BUSY);
235             case RILConstants.SIM_FULL:
236                 return new CommandException(Error.SIM_FULL);
237             case RILConstants.NETWORK_REJECT:
238                 return new CommandException(Error.NETWORK_REJECT);
239             case RILConstants.OPERATION_NOT_ALLOWED:
240                 return new CommandException(Error.OPERATION_NOT_ALLOWED);
241             case RILConstants.EMPTY_RECORD:
242                 return new CommandException(Error.EMPTY_RECORD);
243             case RILConstants.INVALID_SMS_FORMAT:
244                 return new CommandException(Error.INVALID_SMS_FORMAT);
245             case RILConstants.ENCODING_ERR:
246                 return new CommandException(Error.ENCODING_ERR);
247             case RILConstants.INVALID_SMSC_ADDRESS:
248                 return new CommandException(Error.INVALID_SMSC_ADDRESS);
249             case RILConstants.NO_SUCH_ENTRY:
250                 return new CommandException(Error.NO_SUCH_ENTRY);
251             case RILConstants.NETWORK_NOT_READY:
252                 return new CommandException(Error.NETWORK_NOT_READY);
253             case RILConstants.NOT_PROVISIONED:
254                 return new CommandException(Error.NOT_PROVISIONED);
255             case RILConstants.NO_SUBSCRIPTION:
256                 return new CommandException(Error.NO_SUBSCRIPTION);
257             case RILConstants.NO_NETWORK_FOUND:
258                 return new CommandException(Error.NO_NETWORK_FOUND);
259             case RILConstants.DEVICE_IN_USE:
260                 return new CommandException(Error.DEVICE_IN_USE);
261             case RILConstants.ABORTED:
262                 return new CommandException(Error.ABORTED);
263             case RILConstants.OEM_ERROR_1:
264                 return new CommandException(Error.OEM_ERROR_1);
265             case RILConstants.OEM_ERROR_2:
266                 return new CommandException(Error.OEM_ERROR_2);
267             case RILConstants.OEM_ERROR_3:
268                 return new CommandException(Error.OEM_ERROR_3);
269             case RILConstants.OEM_ERROR_4:
270                 return new CommandException(Error.OEM_ERROR_4);
271             case RILConstants.OEM_ERROR_5:
272                 return new CommandException(Error.OEM_ERROR_5);
273             case RILConstants.OEM_ERROR_6:
274                 return new CommandException(Error.OEM_ERROR_6);
275             case RILConstants.OEM_ERROR_7:
276                 return new CommandException(Error.OEM_ERROR_7);
277             case RILConstants.OEM_ERROR_8:
278                 return new CommandException(Error.OEM_ERROR_8);
279             case RILConstants.OEM_ERROR_9:
280                 return new CommandException(Error.OEM_ERROR_9);
281             case RILConstants.OEM_ERROR_10:
282                 return new CommandException(Error.OEM_ERROR_10);
283             case RILConstants.OEM_ERROR_11:
284                 return new CommandException(Error.OEM_ERROR_11);
285             case RILConstants.OEM_ERROR_12:
286                 return new CommandException(Error.OEM_ERROR_12);
287             case RILConstants.OEM_ERROR_13:
288                 return new CommandException(Error.OEM_ERROR_13);
289             case RILConstants.OEM_ERROR_14:
290                 return new CommandException(Error.OEM_ERROR_14);
291             case RILConstants.OEM_ERROR_15:
292                 return new CommandException(Error.OEM_ERROR_15);
293             case RILConstants.OEM_ERROR_16:
294                 return new CommandException(Error.OEM_ERROR_16);
295             case RILConstants.OEM_ERROR_17:
296                 return new CommandException(Error.OEM_ERROR_17);
297             case RILConstants.OEM_ERROR_18:
298                 return new CommandException(Error.OEM_ERROR_18);
299             case RILConstants.OEM_ERROR_19:
300                 return new CommandException(Error.OEM_ERROR_19);
301             case RILConstants.OEM_ERROR_20:
302                 return new CommandException(Error.OEM_ERROR_20);
303             case RILConstants.OEM_ERROR_21:
304                 return new CommandException(Error.OEM_ERROR_21);
305             case RILConstants.OEM_ERROR_22:
306                 return new CommandException(Error.OEM_ERROR_22);
307             case RILConstants.OEM_ERROR_23:
308                 return new CommandException(Error.OEM_ERROR_23);
309             case RILConstants.OEM_ERROR_24:
310                 return new CommandException(Error.OEM_ERROR_24);
311             case RILConstants.OEM_ERROR_25:
312                 return new CommandException(Error.OEM_ERROR_25);
313 
314             default:
315                 Rlog.e("GSM", "Unrecognized RIL errno " + ril_errno);
316                 return new CommandException(Error.INVALID_RESPONSE);
317         }
318     }
319 
getCommandError()320     public Error getCommandError() {
321         return mError;
322     }
323 
324 
325 
326 }
327