comparison gsm-fw/g23m-aci/aci/cphs_aci.c @ 775:eedbf248bac0

gsm-fw/g23m-aci subtree: initial import from LoCosto source
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 12 Oct 2014 01:45:14 +0000
parents
children b63b6e9da6cd
comparison
equal deleted inserted replaced
774:40a721fd9854 775:eedbf248bac0
1 /*
2 +--------------------------------------------------------------------+
3 | PROJECT: $Workfile:: cphs_aci.c $|
4 | $Author:: $Revision:: $|
5 | CREATED: $Modtime:: $|
6 | STATE : code |
7 +--------------------------------------------------------------------+
8
9 MODULE : CPHS
10
11 PURPOSE : This module contains the functions adapting CPHS module to ACI.
12 */
13
14 #ifndef CPHS_ACI_C
15 #define CPHS_ACI_C
16
17 #include "aci_all.h"
18
19 #include "cphs.h"
20
21 #include "aci_cmh.h"
22 #include "psa.h"
23 #include "cmh.h"
24
25 #include "psa_util.h"
26 #include "psa_sim.h" /* cos' of simShrdPrm !!! */
27
28 #include "cmh_cc.h"
29 #include "psa_cc.h"
30
31 static UBYTE last_sim_operation;
32
33 /* ACI/CPHS adapt layer... Only part of the CPHS where cmh calls are allowed */
34 GLOBAL void cphs_aci_sim_access_cb(SHORT sim_shrd_id)
35 {
36 BOOL sim_failure = FALSE;
37 T_ACI_CME_ERR err;
38
39 TRACE_FUNCTION("cphs_aci_sim_access_cb()");
40
41 if( simShrdPrm.atb[sim_shrd_id].errCode NEQ SIM_NO_ERROR )
42 {
43 sim_failure = TRUE;
44 }
45
46 switch(last_sim_operation)
47 {
48 case(CPHS_SIM_READ_TRANSP_EF):
49 case(CPHS_SIM_READ_RECORD):
50 if(simShrdPrm.atb[sim_shrd_id].dataLen <= 0)
51 {
52 sim_failure = TRUE;
53 }
54 break;
55 }
56
57 /* free sim table entry */
58 simShrdPrm.atb[sim_shrd_id].ntryUsdFlg = FALSE;
59
60 if(sim_failure)
61 {
62 /* an error occured !!! */
63 TRACE_EVENT("SIM Access Error !!!");
64 err = (T_ACI_CME_ERR)cmhSIM_GetCmeFromSim(simShrdPrm.atb[sim_shrd_id].errCode);
65 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, err);
66 cphs_sim_data_failure();
67 return;
68 }
69
70 cphs_sim_data_accessed(simShrdPrm.atb[sim_shrd_id].recMax,
71 simShrdPrm.atb[sim_shrd_id].dataLen);
72
73 }
74
75 GLOBAL void cphs_sim_access_data(UBYTE cphs_sim_operation,
76 UBYTE cphs_sim_field,
77 UBYTE record,
78 UBYTE *data_buffer,
79 UBYTE data_buffer_size)
80 {
81 USHORT sim_field_id = 0;
82
83 TRACE_FUNCTION("cphs_sim_access_data()");
84
85 /* The CPHS files are located under GSM standard DFs, therefore
86 * it is not possible that their identifier values conflict with
87 * standard values within the same DF. SIM code has incorporated
88 * the CPHS spec so that we are able to find these files without
89 * path information. We cannot totally rule out the possibility
90 * that future versions of 3GPP 51.011 (GSM 11.11) create file
91 * identifiers in DF(TELECOM), which are the same as CPHS identifiers
92 * in DF(GSM) or vice versa, but this is very unlikely,
93 * because CPHS is widely known and used by various operators
94 * in contrast to HOMEZONE, which is specific to one operator. */
95
96 switch(cphs_sim_field)
97 {
98 case(CPHS_SIM_CFU):
99 TRACE_EVENT("CPHS Access sim field: SIM_CPHS_CFF");
100 sim_field_id = SIM_CPHS_CFF;
101 break;
102
103 case(CPHS_SIM_VWI):
104 TRACE_EVENT("CPHS Access sim field: SIM_CPHS_VMW");
105 sim_field_id = SIM_CPHS_VMW;
106 break;
107
108 case(CPHS_SIM_CINF):
109 TRACE_EVENT("CPHS Access sim field: SIM_CPHS_CINF");
110 sim_field_id = SIM_CPHS_CINF;
111 break;
112
113 case(CPHS_SIM_CSP):
114 TRACE_EVENT("CPHS Access sim field: SIM_CPHS_CSP");
115 sim_field_id = SIM_CPHS_CSP;
116 break;
117
118 case(CPHS_SIM_ORANGE_CSP):
119 TRACE_EVENT("CPHS Access sim field: SIM_ORANGE_CSP2");
120 sim_field_id = SIM_ORANGE_CSP2;
121 break;
122
123 case(CPHS_SIM_OPNLONG):
124 TRACE_EVENT("CPHS Access sim field: SIM_CPHS_ONSTR");
125 sim_field_id = SIM_CPHS_ONSTR;
126 break;
127
128 case(CPHS_SIM_OPNSHORT):
129 TRACE_EVENT("CPHS Access sim field: SIM_CPHS_ONSHF");
130 sim_field_id = SIM_CPHS_ONSHF;
131 break;
132
133 case(CPHS_SIM_MB):
134 TRACE_EVENT("CPHS Access sim field: SIM_CPHS_MBXN");
135 sim_field_id = SIM_CPHS_MBXN;
136 break;
137
138 case(CPHS_SIM_INFO_NUMS):
139 TRACE_EVENT("CPHS Access sim field: SIM_CPHS_INFN");
140 sim_field_id = SIM_CPHS_INFN;
141 break;
142
143 case(CPHS_SIM_INFO_NUMS_EA01): /* in case of old sims */
144 TRACE_EVENT("CPHS Access sim field: SIM_CPHS_INFN2");
145 sim_field_id = SIM_CPHS_INFN2;
146 break;
147
148 case(CPHS_SIM_ALSNAMES):
149 TRACE_EVENT("CPHS Access sim field: SIM_MSISDN");
150 sim_field_id = SIM_MSISDN;
151 break;
152
153 default:
154 TRACE_ERROR("cphs_sim_access_data(): wrong cphs_sim_field value !!!");
155 break;
156 }
157
158 last_sim_operation = cphs_sim_operation;
159
160 switch(cphs_sim_operation)
161 {
162 case(CPHS_SIM_READ_TRANSP_EF):
163 cmhSIM_ReadTranspEF( CMD_SRC_NONE,
164 AT_CMD_NONE,
165 FALSE,
166 NULL,
167 sim_field_id,
168 0,
169 data_buffer_size,
170 data_buffer,
171 cphs_aci_sim_access_cb );
172 break;
173
174 case(CPHS_SIM_WRITE_TRANSP_EF):
175 cmhSIM_WriteTranspEF(CMD_SRC_NONE,
176 AT_CMD_NONE,
177 FALSE,
178 NULL,
179 sim_field_id,
180 0,
181 data_buffer_size,
182 data_buffer,
183 cphs_aci_sim_access_cb );
184 break;
185
186 case(CPHS_SIM_READ_RECORD):
187 cmhSIM_ReadRecordEF( CMD_SRC_NONE,
188 AT_CMD_CPHS,
189 FALSE,
190 NULL,
191 sim_field_id,
192 record,
193 data_buffer_size,
194 data_buffer,
195 cphs_aci_sim_access_cb );
196 break;
197
198 case(CPHS_SIM_WRITE_RECORD):
199 cmhSIM_WriteRecordEF( CMD_SRC_NONE,
200 AT_CMD_CPHS,
201 FALSE,
202 NULL,
203 sim_field_id,
204 record,
205 data_buffer_size,
206 data_buffer,
207 cphs_aci_sim_access_cb );
208 break;
209
210 default:
211 TRACE_ERROR("cphs_sim_access_data(): wrong cphs_sim_operation value !!!");
212 break;
213 }
214
215 }
216
217 /* converts a BCD number bcd of bcd_size length
218 into a string of ascii digits and writes the result in number */
219 GLOBAL void cphs_bcd2number(CHAR *number,
220 UBYTE *bcd,
221 UBYTE bcd_size)
222 {
223 int i;
224 UBYTE *num_buffer;
225
226 TRACE_FUNCTION("cphs_bcd2number()");
227
228 MALLOC(num_buffer, 2*bcd_size);
229
230 /* Decode BCD */
231 for(i=0;i<bcd_size;i++)
232 {
233 num_buffer[2*i] = (bcd[i] & 0x0F);
234 num_buffer[2*i + 1] = (bcd[i] & 0xF0)>>4;
235 }
236
237 utl_BCD2DialStr((const UBYTE *)num_buffer, number, (UBYTE)(2*bcd_size));
238
239 MFREE(num_buffer);
240 }
241
242 GLOBAL T_CPHS_RET cphs_get_als_active_line(UBYTE srcId, T_CPHS_LINES *line)
243 {
244 T_ACI_ALS_MOD ALSmode;
245
246 TRACE_FUNCTION("cphs_get_als_active_line()");
247
248 cmhCC_get_active_als_mode((T_ACI_CMD_SRC)srcId, &ALSmode );
249
250 switch( ALSmode )
251 {
252 case(ALS_MOD_SPEECH):
253 *line = CPHS_LINE1;
254 break;
255
256 case(ALS_MOD_AUX_SPEECH):
257 *line = CPHS_LINE2;
258 break;
259
260 case(ALS_MOD_NOTPRESENT):
261 default:
262 *line = CPHS_LINE_NULL;
263 break;
264 }
265
266 return(CPHS_OK);
267 }
268
269
270 /* if( ! psaSIM_ChkSIMSrvSup( SRV_MSISDN )) return( AT_CMPL ); */
271
272
273 GLOBAL T_CPHS_LINES als_get_call_info(SHORT call_id)
274 {
275 T_CC_CALL_TBL *ctb; /* Pointer to call table entry */
276 SHORT cId = call_id-1; /* tarnslation from +CLCC-like call_id and ACI cId */
277 T_ACI_CRING_SERV_TYP cring_type; /* type of bearer of call */
278
279 TRACE_FUNCTION("als_get_call_info()");
280
281 /* ==== if the CPHS module is to be ported, then AT+CLCC shall be used...
282 Extra info might need to be added to differentiate AuxVoice from Voice... ====
283 MALLOC(calLst, MAX_CALL_NR * sizeof(T_ACI_CLCC_CALDESC));
284 if(qAT_PlusCLCC(srcId, calLst) NEQ AT_CMPL)
285 {
286 TRACE_ERROR("+CLCC: error");
287 return(CPHS_FAIL);
288 }*/
289
290 if (!psaCC_ctbIsValid (cId))
291 {
292 /* Call is not active ! */
293 return(CPHS_LINE_NULL);
294 }
295
296 ctb = ccShrdPrm.ctb[cId];
297
298 switch(cmhCC_getcalltype(cId))
299 {
300 case(VOICE_CALL):
301 cring_type = (T_ACI_CRING_SERV_TYP)cmhCC_GetCallType_from_bearer (&ctb->BC[ctb->curBC]);
302 if(cring_type EQ CRING_SERV_TYP_Voice)
303 {
304 return(CPHS_LINE1);
305 }
306 else if(cring_type EQ CRING_SERV_TYP_AuxVoice)
307 {
308 return(CPHS_LINE2);
309 }
310 break;
311 #ifdef FAX_AND_DATA
312 case( TRANS_CALL ):
313 case( NON_TRANS_CALL ):
314 return(CPHS_LINE_DATA);
315
316 case( FAX_CALL ):
317 return(CPHS_LINE_FAX);
318 #endif
319 }
320
321 /* MFREE(calLst); */
322 return(CPHS_LINE_NULL);
323 }
324
325 void cphs_sim_read_mb_ext_rcd_cb(SHORT table_id)
326 {
327 BOOL sim_failure = FALSE;
328 T_ACI_CME_ERR err;
329
330 if( simShrdPrm.atb[table_id].errCode NEQ SIM_NO_ERROR )
331 {
332 sim_failure = TRUE;
333 }
334
335 switch(last_sim_operation)
336 {
337 case(CPHS_SIM_READ_TRANSP_EF):
338 case(CPHS_SIM_READ_RECORD):
339 if(simShrdPrm.atb[table_id].dataLen <= 0)
340 {
341 sim_failure = TRUE;
342 }
343 break;
344 }
345
346 /* free sim table entry */
347 simShrdPrm.atb[table_id].ntryUsdFlg = FALSE;
348
349 if(sim_failure)
350 {
351 /* an error occured !!! */
352 TRACE_EVENT("SIM Access Error !!!");
353 err = (T_ACI_CME_ERR)cmhSIM_GetCmeFromSim(simShrdPrm.atb[table_id].errCode);
354 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, err);
355 cphs_sim_data_failure();
356 return;
357 }
358
359
360 cphs_write_sim_mb_ext_data(simShrdPrm.atb[table_id].dataLen);
361
362 }
363
364 #define DEFAULT_MAXSIZE_OF_RECORD (100)
365 GLOBAL void cphs_sim_read_mb_ext_rcd(UBYTE record,UBYTE *data_buffer)
366 {
367
368 cmhSIM_ReadRecordEF ( CMD_SRC_NONE,
369 AT_CMD_NONE,
370 FALSE,
371 NULL,
372 SIM_EXT1,
373 record,
374 DEFAULT_MAXSIZE_OF_RECORD,
375 data_buffer,
376 cphs_sim_read_mb_ext_rcd_cb);
377
378
379 }
380
381
382
383 #endif /* CPHS_ACI_C */
384