FreeCalypso > hg > fc-magnetite
comparison src/g23m-fad/t30/t30_kers.c @ 174:90eb61ecd093
src/g23m-fad: initial import from TCS3.2/LoCosto
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 12 Oct 2016 05:40:46 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
173:bf64d785238a | 174:90eb61ecd093 |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : GSM-F&D (8411) | |
4 | Modul : t30_kers | |
5 +----------------------------------------------------------------------------- | |
6 | Copyright 2002 Texas Instruments Berlin, AG | |
7 | All rights reserved. | |
8 | | |
9 | This file is confidential and a trade secret of Texas | |
10 | Instruments Berlin, AG | |
11 | The receipt of or possession of this file does not convey | |
12 | any rights to reproduce or disclose its contents or to | |
13 | manufacture, use, or sell anything it may describe, in | |
14 | whole, or in part, without the specific written consent of | |
15 | Texas Instruments Berlin, AG. | |
16 +----------------------------------------------------------------------------- | |
17 | Purpose : This Modul defines the functions for processing | |
18 | of incomming signals for the component T30 of the mobile station | |
19 +----------------------------------------------------------------------------- | |
20 */ | |
21 | |
22 #ifndef T30_KERS_C | |
23 #define T30_KERS_C | |
24 #endif | |
25 | |
26 #define ENTITY_T30 | |
27 | |
28 #define MEMCOPLEN(d,s,c) memcpy(t30_data->hdlc_rcv.d, s, MINIMUM(t30_data->hdlc_rcv.c, NSF_LEN)) | |
29 | |
30 /*==== INCLUDES ===================================================*/ | |
31 | |
32 #include <string.h> | |
33 #include <stdlib.h> | |
34 #include <stddef.h> | |
35 #include "typedefs.h" | |
36 #include "pcm.h" | |
37 #include "vsi.h" | |
38 #include "macdef.h" | |
39 #include "pconst.cdg" | |
40 #include "mconst.cdg" | |
41 #include "message.h" | |
42 #include "ccdapi.h" | |
43 #include "custom.h" | |
44 #include "gsm.h" | |
45 #include "prim.h" | |
46 #include "cnf_t30.h" | |
47 #include "mon_t30.h" | |
48 #include "pei.h" | |
49 #include "tok.h" | |
50 #include "dti.h" /* functionality of the dti library */ | |
51 #include "t30.h" | |
52 | |
53 /*==== CONST =======================================================*/ | |
54 /*==== TYPES =======================================================*/ | |
55 /*==== VAR EXPORT ==================================================*/ | |
56 /*==== VAR LOCAL ===================================================*/ | |
57 /*==== FUNCTIONS ===================================================*/ | |
58 | |
59 LOCAL void snd_fad_rcv_tcf_req(void) | |
60 { | |
61 PALLOC (fad_rcv_tcf_req, FAD_RCV_TCF_REQ); | |
62 fad_rcv_tcf_req->trans_rate = t30_data->trans_rate; | |
63 PSENDX (FAD, fad_rcv_tcf_req); | |
64 } | |
65 | |
66 LOCAL void snd_t30_cap_ind(void) | |
67 { | |
68 PALLOC (t30_cap_ind, T30_CAP_IND); | |
69 memcpy (&t30_cap_ind->hdlc_info, &t30_data->hdlc_rcv, sizeof(T_hdlc_info)); | |
70 memset (&t30_data->hdlc_rcv, 0, sizeof(T_hdlc_info)); | |
71 PSENDX (MMI, t30_cap_ind); | |
72 } | |
73 | |
74 GLOBAL void act_on_sgn_req(void) | |
75 { | |
76 switch (t30_data->sgn_req) | |
77 { | |
78 case SGN_EOM: | |
79 SET_STATE (KER, T30_SND_SGN); | |
80 _decodedMsg[0] = BCS_EOM; | |
81 sig_ker_bcs_bdat_req (FINAL_YES); | |
82 break; | |
83 | |
84 case SGN_EOP: | |
85 SET_STATE (KER, T30_SND_SGN); | |
86 _decodedMsg[0] = BCS_EOP; | |
87 sig_ker_bcs_bdat_req (FINAL_YES); | |
88 break; | |
89 | |
90 case SGN_MPS: | |
91 SET_STATE (KER, T30_SND_SGN); | |
92 _decodedMsg[0] = BCS_MPS; | |
93 sig_ker_bcs_bdat_req (FINAL_YES); | |
94 break; | |
95 | |
96 case SGN_PRI_EOM: | |
97 SET_STATE (KER, T30_SND_SGN); | |
98 _decodedMsg[0] = BCS_PRI_EOM; | |
99 sig_ker_bcs_bdat_req (FINAL_YES); | |
100 break; | |
101 | |
102 case SGN_PRI_EOP: | |
103 SET_STATE (KER, T30_SND_SGN); | |
104 _decodedMsg[0] = BCS_PRI_EOP; | |
105 sig_ker_bcs_bdat_req (FINAL_YES); | |
106 break; | |
107 | |
108 case SGN_PRI_MPS: | |
109 SET_STATE (KER, T30_SND_SGN); | |
110 _decodedMsg[0] = BCS_PRI_MPS; | |
111 sig_ker_bcs_bdat_req (FINAL_YES); | |
112 break; | |
113 | |
114 default: | |
115 break; | |
116 } | |
117 } | |
118 | |
119 /* | |
120 +--------------------------------------------------------------------+ | |
121 | PROJECT : GSM-F&D (8411) MODULE : T30_KERS | | |
122 | STATE : code ROUTINE : sig_bcs_ker_bdat_ind| | |
123 +--------------------------------------------------------------------+ | |
124 PURPOSE : Process signal BDAT_IND received from process BCS. | |
125 This signal contains a received HDLC frame from FAD, | |
126 decoded by CCD. | |
127 */ | |
128 | |
129 GLOBAL void sig_bcs_ker_bdat_ind (void) | |
130 { | |
131 TRACE_FUNCTION ("sig_bcs_ker_bdat_ind()"); | |
132 | |
133 switch (GET_STATE (KER)) | |
134 { | |
135 case T30_NULL: | |
136 #ifdef _SIMULATION_ /* test BCS formatter only */ | |
137 if (t30_data->test_mode & TST_BCS) | |
138 { | |
139 SHORT size = 0; | |
140 switch (_decodedMsg[0]) | |
141 { | |
142 case BCS_DIS: size = sizeof(T_BCS_DIS) ; break; | |
143 case BCS_CSI: size = sizeof(T_BCS_CSI) ; break; | |
144 case BCS_NSF: size = sizeof(T_BCS_NSF) ; break; | |
145 case BCS_DTC: size = sizeof(T_BCS_DTC) ; break; | |
146 case BCS_CIG: size = sizeof(T_BCS_CIG) ; break; | |
147 case BCS_NSC: size = sizeof(T_BCS_NSC) ; break; | |
148 case BCS_PWD_POLL: size = sizeof(T_BCS_PWD_POLL) ; break; | |
149 case BCS_SEP: size = sizeof(T_BCS_SEP) ; break; | |
150 case BCS_DCS: size = sizeof(T_BCS_DCS) ; break; | |
151 case BCS_TSI: size = sizeof(T_BCS_TSI) ; break; | |
152 case BCS_NSS: size = sizeof(T_BCS_NSS) ; break; | |
153 case BCS_SUB: size = sizeof(T_BCS_SUB) ; break; | |
154 case BCS_PWD_SND: size = sizeof(T_BCS_PWD_SND) ; break; | |
155 | |
156 case BCS_CFR: | |
157 case BCS_FTT: | |
158 case BCS_EOM: | |
159 case BCS_MPS: | |
160 case BCS_EOP: | |
161 case BCS_PRI_EOM: | |
162 case BCS_PRI_MPS: | |
163 case BCS_PRI_EOP: | |
164 case BCS_MCF: | |
165 case BCS_RTP: | |
166 case BCS_RTN: | |
167 case BCS_PIP: | |
168 case BCS_PIN: | |
169 case BCS_DCN: | |
170 case BCS_CRP: | |
171 size = 1; | |
172 break; | |
173 } | |
174 { | |
175 PALLOC_SDU (dti_data_test_ind, DTI2_DATA_TEST_IND, REPORT_SIZE_BITS); | |
176 dti_data_test_ind->link_id = t30_data->link_id; | |
177 dti_data_test_ind->parameters.p_id = DTI_PID_UOS; | |
178 dti_data_test_ind->parameters.st_lines.st_flow = DTI_FLOW_OFF; | |
179 dti_data_test_ind->parameters.st_lines.st_line_sa = DTI_SA_ON; | |
180 dti_data_test_ind->parameters.st_lines.st_line_sb = DTI_SB_ON; | |
181 dti_data_test_ind->parameters.st_lines.st_break_len = DTI_BREAK_OFF; | |
182 dti_data_test_ind->sdu.l_buf = size << 3; | |
183 dti_data_test_ind->sdu.o_buf = 0; | |
184 memcpy (dti_data_test_ind->sdu.buf, _decodedMsg, size); | |
185 PSENDX (MMI, dti_data_test_ind); | |
186 } | |
187 } | |
188 #endif | |
189 break; | |
190 | |
191 case T30_IDLE: | |
192 { | |
193 switch (_decodedMsg[0]) | |
194 { | |
195 case BCS_CIG: TRACE_EVENT ("Rec BCS_CIG"); | |
196 { | |
197 MCAST (bcs_cig, BCS_CIG); | |
198 t30_data->hdlc_rcv.c_cig = bcs_cig->c_clg_sub_nr; | |
199 MEMCOPSIZ(t30_data->hdlc_rcv.cig, bcs_cig->clg_sub_nr); | |
200 } | |
201 break; | |
202 | |
203 case BCS_CSI: TRACE_EVENT ("Rec BCS_CSI"); | |
204 { | |
205 MCAST (bcs_csi, BCS_CSI); | |
206 t30_data->hdlc_rcv.c_csi = bcs_csi->c_cld_sub_nr; | |
207 MEMCOPSIZ(t30_data->hdlc_rcv.csi, bcs_csi->cld_sub_nr); | |
208 } | |
209 break; | |
210 | |
211 case BCS_DCN: TRACE_EVENT ("Rec BCS_DCN"); | |
212 SET_STATE (KER, T30_IDLE); | |
213 TIMERSTOP (T1_INDEX); | |
214 snd_t30_sgn_ind(SGN_DCN); | |
215 break; | |
216 | |
217 case BCS_DIS: TRACE_EVENT ("Rec BCS_DIS"); | |
218 { | |
219 MCAST (bcs_dis, BCS_DIS); | |
220 TIMERSTOP (T1_INDEX); | |
221 ker_fill_dis_info (bcs_dis); | |
222 t30_data->fmod = FMOD_SND; | |
223 t30_data->repeat = 1; | |
224 t30_data->dir = 0x80; | |
225 snd_t30_cap_ind(); | |
226 SET_STATE (KER, T30_SND_CAP); | |
227 memset (&t30_data->hdlc_snd, 0, sizeof(T_hdlc_info)); | |
228 } | |
229 break; | |
230 | |
231 case BCS_DTC: TRACE_EVENT ("Rec BCS_DTC"); | |
232 { | |
233 MCAST (bcs_dtc, BCS_DTC); | |
234 TIMERSTOP (T1_INDEX); | |
235 ker_fill_dtc_info (bcs_dtc); | |
236 t30_data->fmod = FMOD_SND; | |
237 t30_data->repeat = 1; | |
238 snd_t30_cap_ind(); | |
239 SET_STATE (KER, T30_SND_CAP); | |
240 memset (&t30_data->hdlc_snd, 0, sizeof(T_hdlc_info)); | |
241 } | |
242 break; | |
243 | |
244 case BCS_NSC: TRACE_EVENT ("Rec BCS_NSC"); | |
245 { | |
246 MCAST (bcs_nsc, BCS_NSC); | |
247 t30_data->hdlc_rcv.c_nsc = (UBYTE)(bcs_nsc->non_std_fac.l_non_std_fac >> 3); | |
248 MEMCOPLEN(nsc, bcs_nsc->non_std_fac.b_non_std_fac, c_nsc); | |
249 } | |
250 break; | |
251 | |
252 case BCS_NSF: TRACE_EVENT ("Rec BCS_NSF"); | |
253 { | |
254 MCAST (bcs_nsf, BCS_NSF); | |
255 t30_data->hdlc_rcv.c_nsf = (UBYTE)(bcs_nsf->non_std_fac.l_non_std_fac >> 3); | |
256 MEMCOPLEN(nsf, bcs_nsf->non_std_fac.b_non_std_fac, c_nsf); | |
257 } | |
258 break; | |
259 | |
260 case BCS_PWD_POLL: TRACE_EVENT ("Rec BCS_PWD_POLL"); | |
261 { | |
262 MCAST (bcs_pwd_poll, BCS_PWD_POLL); | |
263 t30_data->hdlc_rcv.c_pwd = bcs_pwd_poll->c_pm_pword; | |
264 MEMCOPSIZ(t30_data->hdlc_rcv.pwd, bcs_pwd_poll->pm_pword); | |
265 } | |
266 break; | |
267 | |
268 case BCS_SEP: TRACE_EVENT ("Rec BCS_SEP"); | |
269 { | |
270 MCAST (bcs_sep, BCS_SEP); | |
271 t30_data->hdlc_rcv.c_sep = bcs_sep->c_pm_sub_addr; | |
272 MEMCOPSIZ(t30_data->hdlc_rcv.sep, bcs_sep->pm_sub_addr); | |
273 } | |
274 break; | |
275 | |
276 default: | |
277 TIMERSTOP (T1_INDEX); | |
278 snd_error_ind(ERR_PH_B_SND_COMREC_INVALID_CMD_RCVD); | |
279 break; | |
280 } | |
281 break; | |
282 } | |
283 | |
284 case T30_RCV_DCN: | |
285 switch (_decodedMsg[0]) | |
286 { | |
287 case BCS_DCN: TRACE_EVENT ("Rec BCS_DCN"); | |
288 snd_complete_ind(CMPL_EOP); | |
289 break; | |
290 | |
291 default: | |
292 snd_error_ind(ERR_PH_D_RCV_INVALID_RESP_RCVD); | |
293 SET_STATE (KER, T30_IDLE); | |
294 break; | |
295 } | |
296 TIMERSTOP (T2_INDEX); | |
297 break; | |
298 | |
299 case T30_RCV_DCS: | |
300 { | |
301 switch (_decodedMsg[0]) | |
302 { | |
303 case BCS_CIG: TRACE_EVENT ("Rec BCS_CIG"); | |
304 { | |
305 MCAST (bcs_cig, BCS_CIG); | |
306 t30_data->hdlc_rcv.c_cig = bcs_cig->c_clg_sub_nr; | |
307 MEMCOPSIZ(t30_data->hdlc_rcv.cig, bcs_cig->clg_sub_nr); | |
308 } | |
309 break; | |
310 | |
311 case BCS_CRP: TRACE_EVENT ("Rec BCS_CRP"); | |
312 SET_STATE (KER, T30_RCV_DIS); | |
313 ker_send_dis (); | |
314 break; | |
315 | |
316 case BCS_CSI: TRACE_EVENT ("Rec BCS_CSI"); | |
317 { | |
318 MCAST (bcs_csi, BCS_CSI); | |
319 t30_data->hdlc_rcv.c_csi = bcs_csi->c_cld_sub_nr; | |
320 MEMCOPSIZ(t30_data->hdlc_rcv.csi, bcs_csi->cld_sub_nr); | |
321 } | |
322 break; | |
323 | |
324 case BCS_DCN: TRACE_EVENT ("Rec BCS_DCN"); | |
325 SET_STATE (KER, T30_IDLE); | |
326 TIMERSTOP (T1_INDEX); | |
327 TIMERSTOP (T4_INDEX); | |
328 snd_t30_sgn_ind(SGN_DCN); | |
329 break; | |
330 | |
331 case BCS_DCS: TRACE_EVENT ("Rec BCS_DCS"); | |
332 { | |
333 MCAST (bcs_dcs, BCS_DCS); | |
334 ker_fill_dcs_info (bcs_dcs); | |
335 } | |
336 TIMERSTOP (T1_INDEX); | |
337 TIMERSTOP (T4_INDEX); | |
338 | |
339 if (t30_data->fmod NEQ FMOD_POLL) | |
340 t30_data->dir = 0; | |
341 | |
342 t30_data->fmod = FMOD_RCV; | |
343 t30_data->repeat = 1; | |
344 snd_t30_cap_ind(); | |
345 SET_STATE (KER, T30_RCV_TCF); | |
346 snd_fad_rcv_tcf_req(); | |
347 break; | |
348 | |
349 case BCS_DIS: TRACE_EVENT ("Rec BCS_DIS"); | |
350 { | |
351 MCAST (bcs_dis, BCS_DIS); | |
352 ker_fill_dis_info (bcs_dis); | |
353 } | |
354 TIMERSTOP (T1_INDEX); | |
355 TIMERSTOP (T4_INDEX); | |
356 t30_data->fmod = FMOD_SND; | |
357 t30_data->prev = HDLC_ADDR; | |
358 t30_data->dir = 0x80; | |
359 snd_t30_cap_ind(); | |
360 SET_STATE (KER, T30_IDLE); | |
361 break; | |
362 | |
363 case BCS_DTC: TRACE_EVENT ("Rec BCS_DTC"); | |
364 { | |
365 MCAST (bcs_dtc, BCS_DTC); | |
366 ker_fill_dtc_info (bcs_dtc); | |
367 } | |
368 TIMERSTOP (T1_INDEX); | |
369 TIMERSTOP (T4_INDEX); | |
370 | |
371 if (t30_data->fmod NEQ FMOD_POLL) | |
372 t30_data->dir = 0; | |
373 | |
374 t30_data->fmod = FMOD_POLL; | |
375 snd_t30_cap_ind(); | |
376 SET_STATE (KER, T30_SND_CAP); | |
377 break; | |
378 | |
379 case BCS_MPS: TRACE_EVENT ("Rec BCS_MPS"); | |
380 switch (t30_data->prev) | |
381 { | |
382 case BCS_RTN: | |
383 _decodedMsg[0] = BCS_RTN; | |
384 SET_STATE (KER, T30_RCV_RT2); | |
385 sig_ker_bcs_bdat_req (FINAL_YES); | |
386 break; | |
387 | |
388 case BCS_RTP: TRACE_EVENT ("Rec BCS_RTP"); | |
389 _decodedMsg[0] = BCS_RTP; | |
390 SET_STATE (KER, T30_RCV_RT2); | |
391 sig_ker_bcs_bdat_req (FINAL_YES); | |
392 break; | |
393 | |
394 default: | |
395 snd_error_ind(ERR_PH_B_RCV_INVALID_RESP_RCVD); | |
396 TIMERSTOP (T1_INDEX); | |
397 TIMERSTOP (T4_INDEX); | |
398 SET_STATE (KER, T30_IDLE); | |
399 break; | |
400 } | |
401 break; | |
402 | |
403 case BCS_NSC: TRACE_EVENT ("Rec BCS_NSC"); | |
404 { | |
405 MCAST (bcs_nsc, BCS_NSC); | |
406 t30_data->hdlc_rcv.c_nsc = (UBYTE)(bcs_nsc->non_std_fac.l_non_std_fac >> 3); | |
407 MEMCOPLEN(nsc, bcs_nsc->non_std_fac.b_non_std_fac, c_nsc); | |
408 } | |
409 break; | |
410 | |
411 case BCS_NSF: TRACE_EVENT ("Rec BCS_NSF"); | |
412 { | |
413 MCAST (bcs_nsf, BCS_NSF); | |
414 t30_data->hdlc_rcv.c_nsf = (UBYTE)(bcs_nsf->non_std_fac.l_non_std_fac >> 3); | |
415 MEMCOPLEN(nsf, bcs_nsf->non_std_fac.b_non_std_fac, c_nsf); | |
416 } | |
417 break; | |
418 | |
419 case BCS_NSS: TRACE_EVENT ("Rec BCS_NSS"); | |
420 { | |
421 MCAST (bcs_nss, BCS_NSS); | |
422 t30_data->hdlc_rcv.c_nss = (UBYTE)(bcs_nss->non_std_fac.l_non_std_fac >> 3); | |
423 MEMCOPLEN(nss, bcs_nss->non_std_fac.b_non_std_fac, c_nss); | |
424 } | |
425 break; | |
426 | |
427 case BCS_PWD_POLL: TRACE_EVENT ("Rec BCS_PWD_POLL"); | |
428 { | |
429 MCAST (bcs_pwd_poll, BCS_PWD_POLL); | |
430 t30_data->hdlc_rcv.c_pwd = bcs_pwd_poll->c_pm_pword; | |
431 MEMCOPSIZ(t30_data->hdlc_rcv.pwd, bcs_pwd_poll->pm_pword); | |
432 } | |
433 break; | |
434 | |
435 case BCS_PWD_SND: TRACE_EVENT ("Rec BCS_PWD_SND"); | |
436 { | |
437 MCAST (bcs_pwd_snd, BCS_PWD_SND); | |
438 t30_data->hdlc_rcv.c_pwd = bcs_pwd_snd->c_sm_pword; | |
439 MEMCOPSIZ(t30_data->hdlc_rcv.pwd, bcs_pwd_snd->sm_pword); | |
440 } | |
441 break; | |
442 | |
443 case BCS_SEP: TRACE_EVENT ("Rec BCS_SEP"); | |
444 { | |
445 MCAST (bcs_sep, BCS_SEP); | |
446 t30_data->hdlc_rcv.c_sep = bcs_sep->c_pm_sub_addr; | |
447 MEMCOPSIZ(t30_data->hdlc_rcv.sep, bcs_sep->pm_sub_addr); | |
448 } | |
449 break; | |
450 | |
451 case BCS_SUB: TRACE_EVENT ("Rec BCS_SUB"); | |
452 { | |
453 MCAST (bcs_sub, BCS_SUB); | |
454 t30_data->hdlc_rcv.c_sub = bcs_sub->c_sub_addr; | |
455 MEMCOPSIZ(t30_data->hdlc_rcv.sub, bcs_sub->sub_addr); | |
456 } | |
457 break; | |
458 | |
459 case BCS_TSI: TRACE_EVENT ("Rec BCS_TSI"); | |
460 { | |
461 MCAST (bcs_tsi, BCS_TSI); | |
462 t30_data->hdlc_rcv.c_tsi = bcs_tsi->c_tra_sub_nr; | |
463 MEMCOPSIZ(t30_data->hdlc_rcv.tsi, bcs_tsi->tra_sub_nr); | |
464 } | |
465 break; | |
466 | |
467 default: | |
468 TRACE_EVENT_P1 ("Rec %02x", _decodedMsg[0]); | |
469 snd_error_ind(ERR_PH_B_RCV_INVALID_RESP_RCVD); | |
470 TIMERSTOP (T1_INDEX); | |
471 TIMERSTOP (T4_INDEX); | |
472 SET_STATE (KER, T30_IDLE); | |
473 break; | |
474 } | |
475 break; | |
476 } | |
477 | |
478 case T30_RCV_TCF: | |
479 switch (_decodedMsg[0]) | |
480 { | |
481 case BCS_DCS: TRACE_EVENT ("Rec BCS_DCS"); | |
482 TIMERSTOP (T1_INDEX); | |
483 TIMERSTOP (T4_INDEX); | |
484 | |
485 if (t30_data->rate_modified) | |
486 snd_fad_rcv_tcf_req(); | |
487 break; | |
488 } | |
489 break; | |
490 | |
491 case T30_RCV_MSG: | |
492 switch (_decodedMsg[0]) | |
493 { | |
494 case BCS_DCN: TRACE_EVENT ("Rec BCS_DCN"); | |
495 snd_t30_sgn_ind(SGN_DCN); | |
496 SET_STATE (KER, T30_IDLE); | |
497 TIMERSTOP (T2_INDEX); | |
498 break; | |
499 | |
500 case BCS_MPS: TRACE_EVENT ("Rec BCS_MPS"); | |
501 TIMERSTOP (T2_INDEX); | |
502 _decodedMsg[0] = t30_data->prev; | |
503 SET_STATE (KER, T30_RCV_CFR); | |
504 sig_ker_bcs_bdat_req (FINAL_YES); | |
505 break; | |
506 | |
507 case BCS_TSI: TRACE_EVENT ("Rec BCS_TSI"); | |
508 { | |
509 MCAST (bcs_tsi, BCS_TSI); | |
510 t30_data->hdlc_rcv.c_tsi = bcs_tsi->c_tra_sub_nr; | |
511 MEMCOPSIZ(t30_data->hdlc_rcv.tsi, bcs_tsi->tra_sub_nr); | |
512 } | |
513 SET_STATE (KER, T30_RCV_DCS); | |
514 break; | |
515 | |
516 default: | |
517 snd_error_ind(ERR_PH_B_RCV_INVALID_RESP_RCVD); | |
518 TIMERSTOP (T2_INDEX); | |
519 SET_STATE (KER, T30_IDLE); | |
520 break; | |
521 } | |
522 break; | |
523 | |
524 case T30_RCV_PST: | |
525 TIMERSTOP (T2_INDEX); | |
526 switch (_decodedMsg[0]) | |
527 { | |
528 case BCS_DCN: TRACE_EVENT ("Rec BCS_DCN"); | |
529 SET_STATE (KER, T30_IDLE); | |
530 snd_t30_sgn_ind(SGN_DCN); | |
531 break; | |
532 | |
533 case BCS_EOM: TRACE_EVENT ("Rec BCS_EOM"); | |
534 t30_data->res = SGN_EOM; | |
535 snd_t30_sgn_ind(SGN_EOM); | |
536 break; | |
537 | |
538 case BCS_EOP: TRACE_EVENT ("Rec BCS_EOP"); | |
539 t30_data->res = SGN_EOP; | |
540 snd_t30_sgn_ind(SGN_EOP); | |
541 break; | |
542 | |
543 case BCS_MPS: TRACE_EVENT ("Rec BCS_MPS"); | |
544 t30_data->res = SGN_MPS; | |
545 snd_t30_sgn_ind(SGN_MPS); | |
546 break; | |
547 | |
548 case BCS_PRI_EOM: TRACE_EVENT ("Rec BCS_PRI_EOM"); | |
549 t30_data->res = SGN_PRI_EOM; | |
550 snd_t30_sgn_ind(SGN_PRI_EOM); | |
551 break; | |
552 | |
553 case BCS_PRI_EOP: TRACE_EVENT ("Rec BCS_PRI_EOP"); | |
554 t30_data->res = SGN_PRI_EOP; | |
555 snd_t30_sgn_ind(SGN_PRI_EOP); | |
556 break; | |
557 | |
558 case BCS_PRI_MPS: TRACE_EVENT ("Rec BCS_PRI_MPS"); | |
559 t30_data->res = SGN_PRI_MPS; | |
560 snd_t30_sgn_ind(SGN_PRI_MPS); | |
561 break; | |
562 | |
563 default: | |
564 snd_error_ind(ERR_PH_D_RCV_INVALID_RESP_RCVD); | |
565 SET_STATE (KER, T30_IDLE); | |
566 break; | |
567 } | |
568 break; | |
569 | |
570 case T30_RCV_T2: | |
571 TIMERSTOP (T2_INDEX); | |
572 switch (_decodedMsg[0]) | |
573 { | |
574 case BCS_DCN: TRACE_EVENT ("Rec BCS_DCN"); | |
575 snd_t30_sgn_ind(SGN_DCN); | |
576 SET_STATE (KER, T30_IDLE); | |
577 break; | |
578 | |
579 case BCS_EOM: TRACE_EVENT ("Rec BCS_EOM"); | |
580 TIMERSTART (T2_INDEX, T2_VALUE); | |
581 _decodedMsg[0] = BCS_MCF; | |
582 sig_ker_bcs_bdat_req (FINAL_YES); | |
583 break; | |
584 | |
585 default: | |
586 snd_error_ind(ERR_PH_D_RCV_INVALID_RESP_RCVD); | |
587 SET_STATE (KER, T30_IDLE); | |
588 break; | |
589 } | |
590 break; | |
591 | |
592 case T30_SND_CFR: | |
593 switch (_decodedMsg[0]) | |
594 { | |
595 case BCS_CFR: TRACE_EVENT ("Rec BCS_CFR"); | |
596 TIMERSTOP (T4_INDEX); | |
597 SET_STATE (KER, T30_SND_MSG); | |
598 t30_data->mux.mode = MUX_MSG; | |
599 sig_ker_mux_mux_req (); | |
600 snd_t30_phase_ind(MSG_PHASE); | |
601 break; | |
602 | |
603 case BCS_CIG: TRACE_EVENT ("Rec BCS_CIG"); | |
604 { | |
605 MCAST (bcs_cig, BCS_CIG); | |
606 t30_data->hdlc_rcv.c_cig = bcs_cig->c_clg_sub_nr; | |
607 MEMCOPSIZ(t30_data->hdlc_rcv.cig, bcs_cig->clg_sub_nr); | |
608 } | |
609 break; | |
610 | |
611 case BCS_CRP: TRACE_EVENT ("Rec BCS_CRP"); | |
612 TIMERSTOP (T4_INDEX); | |
613 t30_data->repeat++; | |
614 SET_STATE (KER, T30_SND_CAP); | |
615 snd_t30_sgn_ind(SGN_CRP); | |
616 break; | |
617 | |
618 case BCS_CSI: TRACE_EVENT ("Rec BCS_CSI"); | |
619 { | |
620 MCAST (bcs_csi, BCS_CSI); | |
621 t30_data->hdlc_rcv.c_csi = bcs_csi->c_cld_sub_nr; | |
622 MEMCOPSIZ(t30_data->hdlc_rcv.csi, bcs_csi->cld_sub_nr); | |
623 } | |
624 break; | |
625 | |
626 case BCS_DCN: TRACE_EVENT ("Rec BCS_DCN"); | |
627 SET_STATE (KER, T30_IDLE); | |
628 TIMERSTOP (T4_INDEX); | |
629 snd_t30_sgn_ind(SGN_DCN); | |
630 break; | |
631 | |
632 case BCS_DIS: TRACE_EVENT ("Rec BCS_DIS"); | |
633 TIMERSTOP (T4_INDEX); | |
634 | |
635 if (t30_data->repeat++ EQ 3) | |
636 { | |
637 snd_error_ind(ERR_PH_B_SND_DIS_DTC_RCVD_3_TIMES); | |
638 SET_STATE (KER, T30_IDLE); | |
639 } | |
640 else | |
641 { | |
642 MCAST (bcs_dis, BCS_DIS); | |
643 ker_fill_dis_info (bcs_dis); | |
644 t30_data->fmod = FMOD_SND; | |
645 snd_t30_cap_ind(); | |
646 SET_STATE (KER, T30_SND_CAP); | |
647 } | |
648 memset (&t30_data->hdlc_snd, 0, sizeof(T_hdlc_info)); | |
649 break; | |
650 | |
651 case BCS_DTC: TRACE_EVENT ("Rec BCS_DTC"); | |
652 TIMERSTOP (T4_INDEX); | |
653 if (t30_data->repeat++ EQ 3) | |
654 { | |
655 snd_error_ind(ERR_PH_B_SND_DIS_DTC_RCVD_3_TIMES); | |
656 SET_STATE (KER, T30_IDLE); | |
657 } | |
658 else | |
659 { | |
660 MCAST (bcs_dtc, BCS_DTC); | |
661 ker_fill_dtc_info (bcs_dtc); | |
662 t30_data->fmod = FMOD_POLL; | |
663 snd_t30_cap_ind(); | |
664 SET_STATE (KER, T30_SND_CAP); | |
665 } | |
666 memset (&t30_data->hdlc_snd, 0, sizeof(T_hdlc_info)); | |
667 break; | |
668 | |
669 case BCS_FTT: TRACE_EVENT ("Rec BCS_FTT"); | |
670 TIMERSTOP (T4_INDEX); | |
671 SET_STATE (KER, T30_SND_CAP); | |
672 snd_t30_sgn_ind(SGN_FTT); | |
673 break; | |
674 | |
675 case BCS_NSC: TRACE_EVENT ("Rec BCS_NSC"); | |
676 { | |
677 MCAST (bcs_nsc, BCS_NSC); | |
678 t30_data->hdlc_rcv.c_nsc = (UBYTE)(bcs_nsc->non_std_fac.l_non_std_fac >> 3); | |
679 MEMCOPLEN(nsc, bcs_nsc->non_std_fac.b_non_std_fac, c_nsc); | |
680 } | |
681 break; | |
682 | |
683 case BCS_NSF: TRACE_EVENT ("Rec BCS_NSF"); | |
684 { | |
685 MCAST (bcs_nsf, BCS_NSF); | |
686 t30_data->hdlc_rcv.c_nsf = (UBYTE)(bcs_nsf->non_std_fac.l_non_std_fac >> 3); | |
687 MEMCOPLEN(nsf, bcs_nsf->non_std_fac.b_non_std_fac, c_nsf); | |
688 } | |
689 break; | |
690 | |
691 default: | |
692 snd_error_ind(ERR_PH_B_SND_INVALID_RESP_RCVD); | |
693 TIMERSTOP (T4_INDEX); | |
694 SET_STATE (KER, T30_IDLE); | |
695 break; | |
696 } | |
697 break; | |
698 | |
699 case T30_SND_MCF: | |
700 switch (_decodedMsg[0]) | |
701 { | |
702 case BCS_CRP: TRACE_EVENT ("Rec BCS_CRP"); | |
703 if (t30_data->repeat EQ 3) | |
704 { | |
705 snd_error_ind(ERR_PH_D_SND_RSPREC); | |
706 SET_STATE (KER, T30_DCN); | |
707 _decodedMsg[0] = BCS_DCN; | |
708 sig_ker_bcs_bdat_req (FINAL_YES); | |
709 } | |
710 else | |
711 { | |
712 t30_data->repeat++; | |
713 act_on_sgn_req(); | |
714 } | |
715 break; | |
716 | |
717 case BCS_DCN: TRACE_EVENT ("Rec BCS_DCN"); | |
718 SET_STATE (KER, T30_IDLE); | |
719 TIMERSTOP (T4_INDEX); | |
720 snd_t30_sgn_ind(SGN_DCN); | |
721 break; | |
722 | |
723 case BCS_MCF: TRACE_EVENT ("Rec BCS_MCF"); | |
724 switch (t30_data->sgn_req) | |
725 { | |
726 case SGN_EOM: | |
727 TIMERSTOP (T1_INDEX); | |
728 TIMERSTOP (T4_INDEX); | |
729 snd_complete_ind(CMPL_EOM); | |
730 break; | |
731 | |
732 case SGN_EOP: | |
733 TIMERSTOP (T4_INDEX); | |
734 _decodedMsg[0] = BCS_DCN; | |
735 SET_STATE (KER, T30_SND_DCN); | |
736 sig_ker_bcs_bdat_req (FINAL_YES); | |
737 break; | |
738 | |
739 case SGN_MPS: | |
740 TIMERSTOP (T4_INDEX); | |
741 SET_STATE (KER, T30_SND_MSG); | |
742 t30_data->mux.mode = MUX_MSG; | |
743 sig_ker_mux_mux_req (); | |
744 snd_t30_phase_ind(MSG_PHASE); | |
745 break; | |
746 | |
747 default: | |
748 break; | |
749 } | |
750 break; | |
751 | |
752 case BCS_PIN: TRACE_EVENT ("Rec BCS_PIN"); | |
753 TIMERSTOP (T4_INDEX); | |
754 SET_STATE (KER, T30_SND_PI); | |
755 snd_t30_sgn_ind(SGN_PIN); | |
756 break; | |
757 | |
758 case BCS_PIP: TRACE_EVENT ("Rec BCS_PIP"); | |
759 TIMERSTOP (T4_INDEX); | |
760 SET_STATE (KER, T30_SND_PI); | |
761 snd_t30_sgn_ind(SGN_PIP); | |
762 break; | |
763 | |
764 case BCS_RTN: TRACE_EVENT ("Rec BCS_RTN"); | |
765 TIMERSTOP (T4_INDEX); | |
766 switch (t30_data->sgn_req) | |
767 { | |
768 case SGN_EOM: | |
769 SET_STATE (KER, T30_IDLE); | |
770 snd_t30_sgn_ind(SGN_RTN); | |
771 break; | |
772 | |
773 case SGN_EOP: | |
774 case SGN_MPS: | |
775 SET_STATE (KER, T30_SND_CAP); | |
776 snd_t30_sgn_ind(SGN_RTN); | |
777 break; | |
778 | |
779 default: | |
780 snd_error_ind(ERR_PH_D_SND_UNSPEC); | |
781 SET_STATE (KER, T30_DCN); | |
782 _decodedMsg[0] = BCS_DCN; | |
783 sig_ker_bcs_bdat_req (FINAL_YES); | |
784 break; | |
785 } | |
786 break; | |
787 | |
788 case BCS_RTP: TRACE_EVENT ("Rec BCS_RTP"); | |
789 TIMERSTOP (T4_INDEX); | |
790 switch (t30_data->sgn_req) | |
791 { | |
792 case SGN_EOM: | |
793 SET_STATE (KER, T30_IDLE); | |
794 snd_t30_sgn_ind(SGN_RTP); | |
795 break; | |
796 | |
797 case SGN_EOP: | |
798 _decodedMsg[0] = BCS_DCN; | |
799 SET_STATE (KER, T30_SND_DCN); | |
800 sig_ker_bcs_bdat_req (FINAL_YES); | |
801 break; | |
802 | |
803 case SGN_MPS: | |
804 SET_STATE (KER, T30_SND_CAP); | |
805 snd_t30_sgn_ind(SGN_RTP); | |
806 break; | |
807 | |
808 default: | |
809 snd_error_ind(ERR_PH_D_SND_UNSPEC); | |
810 SET_STATE (KER, T30_DCN); | |
811 _decodedMsg[0] = BCS_DCN; | |
812 sig_ker_bcs_bdat_req(FINAL_YES); | |
813 break; | |
814 } | |
815 break; | |
816 | |
817 default: | |
818 TIMERSTOP (T4_INDEX); | |
819 switch (t30_data->sgn_req) | |
820 { | |
821 case SGN_EOM: case SGN_PRI_EOM: | |
822 snd_error_ind(ERR_PH_D_SND_INVALID_RESP_TO_EOM); | |
823 break; | |
824 | |
825 case SGN_EOP: case SGN_PRI_EOP: | |
826 snd_error_ind(ERR_PH_D_SND_INVALID_RESP_TO_EOP); | |
827 break; | |
828 | |
829 case SGN_MPS: case SGN_PRI_MPS: | |
830 snd_error_ind(ERR_PH_D_SND_INVALID_RESP_TO_MPS); | |
831 break; | |
832 | |
833 default: | |
834 snd_error_ind(ERR_PH_D_SND_UNSPEC); | |
835 break; | |
836 } | |
837 SET_STATE (KER, T30_DCN); | |
838 _decodedMsg[0] = BCS_DCN; | |
839 sig_ker_bcs_bdat_req (FINAL_YES); | |
840 break; | |
841 } | |
842 break; | |
843 | |
844 default: | |
845 break; | |
846 } | |
847 } | |
848 | |
849 /* | |
850 +--------------------------------------------------------------------+ | |
851 | PROJECT : GSM-F&D (8411) MODULE : T30_KERS | | |
852 | STATE : code ROUTINE : sig_msg_ker_mdat_ind| | |
853 +--------------------------------------------------------------------+ | |
854 PURPOSE : Process signal MDAT_IND received from process BCS. | |
855 The signal contains a fax data block which is passed to DTI. | |
856 */ | |
857 GLOBAL void sig_msg_ker_mdat_ind (T_FAD_DATA_IND *fad_data_ind) | |
858 { | |
859 TRACE_FUNCTION ("sig_msg_ker_mdat_ind()"); | |
860 switch (GET_STATE (KER)) | |
861 { | |
862 case T30_RCV_DAT: | |
863 if (fad_data_ind->final) | |
864 { | |
865 TIMERSTART (T2_INDEX, MSG_VALUE); | |
866 SET_STATE (KER, T30_RCV_RDYF); | |
867 } | |
868 else | |
869 { | |
870 SET_STATE (KER, T30_RCV_RDY); | |
871 } | |
872 prepare_dti_data_ind(fad_data_ind); | |
873 snd_dti_data_ind(&t30_data->dti_data_ind); | |
874 break; | |
875 | |
876 case T30_RCV_DATW: | |
877 if (fad_data_ind->final) | |
878 { | |
879 TIMERSTART (T2_INDEX, MSG_VALUE); | |
880 SET_STATE (KER, T30_RCV_RDYF); | |
881 } | |
882 else | |
883 { | |
884 TIMERSTOP (T2_INDEX); | |
885 SET_STATE (KER, T30_RCV_RDY); | |
886 } | |
887 prepare_dti_data_ind(fad_data_ind); | |
888 snd_dti_data_ind(&t30_data->dti_data_ind); | |
889 break; | |
890 | |
891 case T30_RCV_MSG: | |
892 case T30_RCV_MSGW: | |
893 if (fad_data_ind->final) | |
894 { | |
895 TIMERSTART (T2_INDEX, MSG_VALUE); | |
896 SET_STATE (KER, T30_RCV_RDYF); | |
897 } | |
898 prepare_dti_data_ind(fad_data_ind); | |
899 break; | |
900 | |
901 case T30_RCV_RDY: | |
902 prepare_dti_data_ind(fad_data_ind); | |
903 break; | |
904 | |
905 default: | |
906 TRACE_EVENT("ERROR: FAD_DATA_IND in wrong KER state"); | |
907 break; | |
908 } | |
909 } | |
910 | |
911 /* | |
912 +--------------------------------------------------------------------+ | |
913 | PROJECT : GSM-F&D (8411) MODULE : T30_KERS | | |
914 | STATE : code ROUTINE : sig_bcs_ker_err_ind | | |
915 +--------------------------------------------------------------------+ | |
916 PURPOSE : Process signal ERR_IND received from process BCS. | |
917 This signal contains an error message from the BCS formatter. | |
918 */ | |
919 GLOBAL void sig_bcs_ker_err_ind (UBYTE cause) | |
920 { | |
921 const char tab[8][25] = | |
922 { | |
923 "", | |
924 "BUF_FULL", | |
925 "CCD_DEC", | |
926 "CCD_ENC", | |
927 "FCS", | |
928 "FINAL", | |
929 "FRAME_NO_FLAG", | |
930 "FRAME_TOO_MANY_FRAMES" | |
931 }; | |
932 | |
933 TRACE_FUNCTION ("sig_bcs_ker_err_ind()"); | |
934 TRACE_EVENT_P2("*** BCS error cause = %d, %s", cause, tab[cause]); | |
935 | |
936 switch (GET_STATE (KER)) | |
937 { | |
938 case T30_SND_CFR: | |
939 { | |
940 switch (cause) | |
941 { | |
942 case ERR_FCS: | |
943 { | |
944 TIMERSTOP (T4_INDEX); | |
945 t30_data->repeat++; | |
946 SET_STATE (KER, T30_SND_CAP); | |
947 snd_t30_sgn_ind(SGN_FCS_ERR); | |
948 break; | |
949 } | |
950 default: | |
951 break; | |
952 } | |
953 break ; | |
954 } | |
955 case T30_SND_MCF: | |
956 switch (cause) | |
957 { | |
958 case ERR_FCS: | |
959 if (t30_data->repeat EQ 3) | |
960 { | |
961 snd_error_ind(ERR_PH_D_SND_RSPREC); | |
962 SET_STATE (KER, T30_DCN); | |
963 _decodedMsg[0] = BCS_DCN; | |
964 sig_ker_bcs_bdat_req (FINAL_YES); | |
965 } | |
966 break; | |
967 | |
968 default: | |
969 t30_data->repeat++; | |
970 act_on_sgn_req(); | |
971 break; | |
972 } | |
973 break; | |
974 | |
975 default: | |
976 break; | |
977 } | |
978 } | |
979 #undef MEMCOPLEN |