1/*
2 * Copyright (C) 2009 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
17package com.android.internal.telephony.cdma;
18import static com.android.internal.telephony.RILConstants.*;
19import android.os.Parcel;
20
21public final class CdmaInformationRecords {
22    public Object record;
23
24    /**
25     * Record type identifier
26     */
27    public static final int RIL_CDMA_DISPLAY_INFO_REC = 0;
28    public static final int RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC = 1;
29    public static final int RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC = 2;
30    public static final int RIL_CDMA_CONNECTED_NUMBER_INFO_REC = 3;
31    public static final int RIL_CDMA_SIGNAL_INFO_REC = 4;
32    public static final int RIL_CDMA_REDIRECTING_NUMBER_INFO_REC = 5;
33    public static final int RIL_CDMA_LINE_CONTROL_INFO_REC = 6;
34    public static final int RIL_CDMA_EXTENDED_DISPLAY_INFO_REC = 7;
35    public static final int RIL_CDMA_T53_CLIR_INFO_REC = 8;
36    public static final int RIL_CDMA_T53_RELEASE_INFO_REC = 9;
37    public static final int RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC = 10;
38
39    public CdmaInformationRecords(Parcel p) {
40        int id = p.readInt();
41        switch (id) {
42            case RIL_CDMA_DISPLAY_INFO_REC:
43            case RIL_CDMA_EXTENDED_DISPLAY_INFO_REC:
44                record  = new CdmaDisplayInfoRec(id, p.readString());
45                break;
46
47            case RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC:
48            case RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC:
49            case RIL_CDMA_CONNECTED_NUMBER_INFO_REC:
50                record = new CdmaNumberInfoRec(id, p.readString(), p.readInt(), p.readInt(),
51                        p.readInt(), p.readInt());
52                break;
53
54            case RIL_CDMA_SIGNAL_INFO_REC:
55                record = new CdmaSignalInfoRec(p.readInt(), p.readInt(), p.readInt(), p.readInt());
56                break;
57
58            case RIL_CDMA_REDIRECTING_NUMBER_INFO_REC:
59                record = new CdmaRedirectingNumberInfoRec(p.readString(), p.readInt(), p.readInt(),
60                        p.readInt(), p.readInt(), p.readInt());
61                break;
62
63            case RIL_CDMA_LINE_CONTROL_INFO_REC:
64                record = new CdmaLineControlInfoRec(p.readInt(), p.readInt(), p.readInt(),
65                        p.readInt());
66                break;
67
68            case RIL_CDMA_T53_CLIR_INFO_REC:
69                record = new CdmaT53ClirInfoRec(p.readInt());
70                break;
71
72            case RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC:
73                record = new CdmaT53AudioControlInfoRec(p.readInt(), p.readInt());
74                break;
75
76            case RIL_CDMA_T53_RELEASE_INFO_REC:
77                // TODO: WHAT to do, for now fall through and throw exception
78            default:
79                throw new RuntimeException("RIL_UNSOL_CDMA_INFO_REC: unsupported record. Got "
80                                            + CdmaInformationRecords.idToString(id) + " ");
81
82        }
83    }
84
85    public static String idToString(int id) {
86        switch(id) {
87        case RIL_CDMA_DISPLAY_INFO_REC: return "RIL_CDMA_DISPLAY_INFO_REC";
88        case RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC: return "RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC";
89        case RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC: return "RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC";
90        case RIL_CDMA_CONNECTED_NUMBER_INFO_REC: return "RIL_CDMA_CONNECTED_NUMBER_INFO_REC";
91        case RIL_CDMA_SIGNAL_INFO_REC: return "RIL_CDMA_SIGNAL_INFO_REC";
92        case RIL_CDMA_REDIRECTING_NUMBER_INFO_REC: return "RIL_CDMA_REDIRECTING_NUMBER_INFO_REC";
93        case RIL_CDMA_LINE_CONTROL_INFO_REC: return "RIL_CDMA_LINE_CONTROL_INFO_REC";
94        case RIL_CDMA_EXTENDED_DISPLAY_INFO_REC: return "RIL_CDMA_EXTENDED_DISPLAY_INFO_REC";
95        case RIL_CDMA_T53_CLIR_INFO_REC: return "RIL_CDMA_T53_CLIR_INFO_REC";
96        case RIL_CDMA_T53_RELEASE_INFO_REC: return "RIL_CDMA_T53_RELEASE_INFO_REC";
97        case RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC: return "RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC";
98        default: return "<unknown record>";
99        }
100    }
101
102    /**
103     * Signal Information record from 3GPP2 C.S005 3.7.5.5
104     */
105    public static class CdmaSignalInfoRec {
106        public boolean isPresent;   /* non-zero if signal information record is present */
107        public int signalType;
108        public int alertPitch;
109        public int signal;
110
111        public CdmaSignalInfoRec() {}
112
113        public CdmaSignalInfoRec(int isPresent, int signalType, int alertPitch, int signal) {
114            this.isPresent = isPresent != 0;
115            this.signalType = signalType;
116            this.alertPitch = alertPitch;
117            this.signal = signal;
118        }
119
120        @Override
121        public String toString() {
122            return "CdmaSignalInfo: {" +
123                    " isPresent: " + isPresent +
124                    ", signalType: " + signalType +
125                    ", alertPitch: " + alertPitch +
126                    ", signal: " + signal +
127                    " }";
128        }
129    }
130
131    public static class CdmaDisplayInfoRec {
132        public int id;
133        public String alpha;
134
135        public CdmaDisplayInfoRec(int id, String alpha) {
136            this.id = id;
137            this.alpha = alpha;
138        }
139
140        @Override
141        public String toString() {
142            return "CdmaDisplayInfoRec: {" +
143                    " id: " + CdmaInformationRecords.idToString(id) +
144                    ", alpha: " + alpha +
145                    " }";
146        }
147    }
148
149    public static class CdmaNumberInfoRec {
150        public int id;
151        public String number;
152        public byte numberType;
153        public byte numberPlan;
154        public byte pi;
155        public byte si;
156
157        public CdmaNumberInfoRec(int id, String number, int numberType, int numberPlan, int pi,
158                int si) {
159            this.number = number;
160            this.numberType = (byte)numberType;
161            this.numberPlan = (byte)numberPlan;
162            this.pi = (byte)pi;
163            this.si = (byte)si;
164        }
165
166        @Override
167        public String toString() {
168            return "CdmaNumberInfoRec: {" +
169                    " id: " + CdmaInformationRecords.idToString(id) +
170                    ", number: " + number +
171                    ", numberType: " + numberType +
172                    ", numberPlan: " + numberPlan +
173                    ", pi: " + pi +
174                    ", si: " + si +
175                    " }";
176        }
177    }
178
179    public static class CdmaRedirectingNumberInfoRec {
180        public static final int REASON_UNKNOWN = 0;
181        public static final int REASON_CALL_FORWARDING_BUSY = 1;
182        public static final int REASON_CALL_FORWARDING_NO_REPLY = 2;
183        public static final int REASON_CALLED_DTE_OUT_OF_ORDER = 9;
184        public static final int REASON_CALL_FORWARDING_BY_THE_CALLED_DTE = 10;
185        public static final int REASON_CALL_FORWARDING_UNCONDITIONAL = 15;
186
187        public CdmaNumberInfoRec numberInfoRec;
188        public int redirectingReason;
189
190        public CdmaRedirectingNumberInfoRec(String number, int numberType, int numberPlan,
191                int pi, int si, int reason) {
192            numberInfoRec = new CdmaNumberInfoRec(RIL_CDMA_REDIRECTING_NUMBER_INFO_REC,
193                                                  number, numberType, numberPlan, pi, si);
194            redirectingReason = reason;
195        }
196
197        @Override
198        public String toString() {
199            return "CdmaNumberInfoRec: {" +
200                    " numberInfoRec: " + numberInfoRec +
201                    ", redirectingReason: " + redirectingReason +
202                    " }";
203        }
204    }
205
206    public static class CdmaLineControlInfoRec {
207        public byte lineCtrlPolarityIncluded;
208        public byte lineCtrlToggle;
209        public byte lineCtrlReverse;
210        public byte lineCtrlPowerDenial;
211
212        public CdmaLineControlInfoRec(int lineCtrlPolarityIncluded, int lineCtrlToggle,
213                int lineCtrlReverse, int lineCtrlPowerDenial) {
214            this.lineCtrlPolarityIncluded = (byte)lineCtrlPolarityIncluded;
215            this.lineCtrlToggle = (byte)lineCtrlToggle;
216            this.lineCtrlReverse = (byte)lineCtrlReverse;
217            this.lineCtrlPowerDenial = (byte)lineCtrlPowerDenial;
218        }
219
220        @Override
221        public String toString() {
222            return "CdmaLineControlInfoRec: {" +
223                    " lineCtrlPolarityIncluded: " + lineCtrlPolarityIncluded +
224                    " lineCtrlToggle: " + lineCtrlToggle +
225                    " lineCtrlReverse: " + lineCtrlReverse +
226                    " lineCtrlPowerDenial: " + lineCtrlPowerDenial +
227                    " }";
228        }
229    }
230
231    public static class CdmaT53ClirInfoRec {
232        public byte cause;
233
234        public CdmaT53ClirInfoRec(int cause) {
235            this.cause = (byte)cause;
236        }
237
238        @Override
239        public String toString() {
240            return "CdmaT53ClirInfoRec: {" +
241                    " cause: " + cause +
242                    " }";
243        }
244    }
245
246    public static class CdmaT53AudioControlInfoRec {
247        public byte uplink;
248        public byte downlink;
249
250        public CdmaT53AudioControlInfoRec(int uplink, int downlink) {
251            this.uplink = (byte) uplink;
252            this.downlink = (byte) downlink;
253        }
254
255        @Override
256        public String toString() {
257            return "CdmaT53AudioControlInfoRec: {" +
258                    " uplink: " + uplink +
259                    " downlink: " + downlink +
260                    " }";
261        }
262    }
263}
264