blob: c1735814ae83d29366d4e9014d1401daef010c5f [file] [log] [blame]
zw.wang96c5d4e2025-07-01 11:35:13 +08001/**************************************************************************
2*
3* Copyright (c) 2013 ZTE Corporation.
4*
5***************************************************************************
6* Ä£ ¿é Ãû : CcApp
7* ÎÄ ¼þ Ãû : at_proc.c
8* Ïà¹ØÎļþ :
9* ʵÏÖ¹¦ÄÜ : ATÃüÁî·¢Ëͺͽá¹û´¦ÀíÄ£¿éº¯Êý¶¨Òå
10* ×÷ Õß : syx
11* °æ ±¾ : V1.0
12* Íê³ÉÈÕÆÚ : 2013-01-05
13* ÆäËü˵Ã÷ :
14**************************************************************************/
15
16/**************************************************************************
17* Ð޸ļǼ :
18***************************************************************************/
19/**************************************************************************
20* Ð޸ıàºÅ : 0001
21* ÐÞ ¸Ä ÈË :
22* ÐÞ¸ÄÈÕÆÚ :
23* ÐÞ¸ÄÄÚÈÝ :
24**************************************************************************/
25
26/**************************************************************************
27* #includeÇø
28**************************************************************************/
29#include "cc_main.h"
30#include "cc_proc.h"
31#include "cc_com.h"
32#include "cc_at.h"
33#include "cc_timer.h"
34#include "string.h"
35#ifdef TEST_CCAPP
36#include "soft_timer.h"
37#endif
38
39#include "slic_inf.h"
40#include <stdint.h>
41#include <linux/volte_drv.h>
42#include "voice_lib.h"
43
44#define LOCAL_TEST_CALL_CODE "*#66*#"
45#define TZ_TEST_TIMING "*#83781234*#"
46typedef enum{
47 LocalTestCallST_None = 0,
48 LocalTestCallST_Start,
49 LocalTestCallST_Ring,
50 LocalTestCallST_End
51}eLocalTestCallST;
52int local_test_call_st = 0;
53typedef enum{
54 LocalTestCallType_None = 0,
55 LocalTestCallType_LOOP
56}eLocalTestCallType;
57int local_test_call_type = 0;
58
59extern SINT32 g_zCc_AtRspId;
60
61int zCc_find_held_cid(void);
62int zCc_find_held_incoming_cid(void);
63int zCc_find_all_callout(int slave[ZCC_SLAVES]);
64int zCc_talking_count(void);
65char *get_local_date_time(void);
66char *get_local_datetime(char *buff);
67int g_chup_flag = 0;
68
69
70/**************************************************************************
71* ³£Á¿¶¨ÒåÇø
72**************************************************************************/
73
74/* {
75 ZCC_S_IDLE_S = 0,
76 ZCC_S_DT_S ,
77 ZCC_S_DACCM_S ,
78 ZCC_S_DIALING_S ,
79 ZCC_S_RINGBACK_S ,// Ö÷½Ð¹ý³ÌÖеÄÕñÁå̬
80 ZCC_S_BSYT_S ,
81 ZCC_S_TKYT_S ,
82 ZCC_S_SIL_S ,
83 ZCC_S_TALKING_S ,
84 ZCC_S_TRYING_S ,
85 ZCC_S_WAIT_RESOURCE_S ,
86} */
87const pCcSlaveFsmFunc zCcSlaveFsmFunc[] = {zCc_SIdleState,
88 zCc_SDtState,
89 zCc_SDaccmState,
90 zCc_SDialingState,
91 zCc_SRingbackState,
92 zCc_SBsyToneState,
93 zCc_STkytState,
94 zCc_SSilState,
95 zCc_STalkingState,
96 zCc_STryingState,
97 zCc_SWaitResourceState
98 };
99 /*
100 CB
101 *54*KSSSS# REGISTER AT+CLCK="AO",1,"SSSS"
102 #54*KSSSS# DeREGISTER AT+CLCK="AO",0,"SSSS"
103 *#54# QUERY/CHECK AT+CLCK="AO",2,"SSSS" not supported---------------------------
104 K=1 "AO"; K=2 or K=3 "OI"(ÒÆ¶¯ÍøÃ»ÓйúÄÚ³¤Í¾ÏÞÖÆÒµÎñ); SSSS password
105 *56# REGISTER AT+CLCK="AI",1,"SSSS" ÐèÒªÖÕ¶Ë·½°¸»ò¸Ä²Ù×÷·½Ê½---------------------------
106 #56# DeREGISTER AT+CLCK="AI",0,"SSSS" ---------------------------
107 CFU
108 *57*DN# REGISTER AT+CCFC=0,1,"DN"
109 #57# DeREGISTER AT+CCFC=0,0
110 *#57*DN# AT+CCFC=0,2 not supported---------------------------
111 CFNRy
112 *41*DN# REGISTER AT+CCFC=2,1,"DN"
113 #41# DeREGISTER AT+CCFC=2,0
114 *#41*DN# AT+CCFC=2,2 not supported---------------------------
115 CFB
116 *40*DN# REGISTER AT+CCFC=1,1,"DN"
117 #40# DeREGISTER AT+CCFC=1,0
118 *#40*DN# AT+CCFC=1,2 not supported---------------------------
119 CW ( ÖÕ¶Ë·½°¸´ý¼Ó )
120 *58# REGISTER AT+CCWA=0,1 ---------------------------
121 #58# DeREGISTER AT+CCWA=0,0 ---------------------------
122 */
123static const T_zCc_ScTab g_zCc_SCTab[] =
124{
125 {ZCC_BAOC_REG, 10, 10, "*54*1"},
126 {ZCC_BAOC_DEREG, 10, 10, "#54*1"},
127 {ZCC_BOIC_REG, 10, 10, "*54*2"},
128 {ZCC_BOIC_DEREG, 10, 10, "#54*2"},
129 {ZCC_BOIC_REG, 10, 10, "*54*3"},
130 {ZCC_BOIC_DEREG, 10, 10, "#54*3"},
131 {ZCC_CFU_REG, 6, SC_MAXLEN, "*57*"},
132 {ZCC_CFU_DEREG, 4, 4, "#57#"},
133 {ZCC_CFNRY_REG, 6, SC_MAXLEN, "*41*"},
134 {ZCC_CFNRY_DEREG, 4, 4, "#41#"},
135 {ZCC_CFB_REG, 6, SC_MAXLEN, "*40*"},
136 {ZCC_CFB_DEREG, 4, 4, "#40#"},
137};
138
139
140
141T_CC_APP_RecvAtIndItem gCcAppRecvAtIndProc[]=
142{
143 {MSG_CMD_DSCI_IND, zCc_RecvDsciInd},
144 {MSG_CMD_ZCPI,zCc_RecvZcpiInd},
145 {MSG_CMD_ZIMSPLUS_IND,zCc_RecvImsplusInd},
146 {MSG_CMD_ZVOICECHNL,zCc_RecvZvoiceChnl},
147 {MSG_CMD_ATD_DIAL_RSP,zCc_RecvRsp},
148 {MSG_CMD_ATA_RSP,zCc_RecvRsp},
149 {MSG_CMD_CHUP_RSP,zCc_RecvRsp},
150 {MSG_CMD_VTS_RSP,zCc_RecvRsp},
151 {MSG_CMD_ZIMSPLUS_RSP,zCc_RecvRsp},
152 {MSG_CMD_CLCK_RSP,zCc_RecvRsp},
153 {MSG_CMD_CCFC_RSP,zCc_RecvRsp},
154 {MSG_CMD_CHLD_RSP,zCc_RecvRsp}
155};
156 T_CC_APP_AtIndProcItem gCcAppAtIndProc[]=
157{
158 {MSG_CMD_DSCI_IND, zCc_DsciIndProc},
159 {MSG_CMD_ZCPI,zCc_ZcpiIndProc},
160 {MSG_CMD_ZIMSPLUS_IND,zCc_ZimsplusProc},
161 {MSG_CMD_ZVOICECHNL,zCc_ZvoicechnlProc}
162};
163
164
165SINT32 gCcAppRecvAtIndProcCnt = sizeof(gCcAppRecvAtIndProc)/sizeof(gCcAppRecvAtIndProc[0]);
166SINT32 gCcAppRecvAtIndCnt = sizeof(gCcAppAtIndProc)/sizeof(gCcAppAtIndProc[0]);
167char g_zCcApp_AtRecvBuf[ZCC_APP_AT_BUF_MAX_LEN+1] = {0};
168T_zCc_CurAtCmdInfo * g_Cc_AtIndRspMsg;
169
170static int check_phone_number_in_file(const char* phoneNumber, const char* filename)
171{
172 FILE* file = fopen(filename, "r");
173 if (file == NULL) {
174 return 0;
175 }
176
177 char buffer[20];
178 while (fgets(buffer, sizeof(buffer), file) != NULL) {
179
180 char* newline = strchr(buffer, '\n');
181 if (newline) {
182 *newline = '\0';
183 }
184
185 if (strcmp(buffer, phoneNumber) == 0) {
186 fclose(file);
187 return 1;
188 }
189 }
190
191 fclose(file);
192 return 0;
193}
194
195VOID zCc_ShowAllSlave(VOID)
196{
197 UINT8 slave = 0;
198
199 for (slave = 0; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
200 {
201 ccapp_log(" slave=%d number=%s cid=%d state=%d tone=%d msg=%d held=%d isOut=%d dsci6=%d",
202 slave,
203 g_Cc_CallDetail.slaveObj[slave].number,
204 g_Cc_CallDetail.slaveObj[slave].cid,
205 g_Cc_CallDetail.slaveObj[slave].state,
206 g_Cc_CallDetail.slaveObj[slave].tone,
207 g_Cc_CallDetail.slaveObj[slave].sMsg,
208 g_Cc_CallDetail.slaveObj[slave].heldcall,
209 g_Cc_CallDetail.slaveObj[slave].is_callout,
210 g_Cc_CallDetail.slaveObj[slave].waitDSCI6);
211 }
212}
213
214VOID zCc_ShowAllSlaveWithTips(const char *tips)
215{
216
217 UINT8 slave = 0;
218
219 for (slave = 0; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
220 {
221 printf/*ccapp_log*/("%s master_state=%d\n slave=%d number=%s cid=%d state=%d tone=%d msg=%d held=%d isOut=%d dsci6=%d",
222 tips, g_Cc_CallDetail.state,
223 slave,
224 g_Cc_CallDetail.slaveObj[slave].number,
225 g_Cc_CallDetail.slaveObj[slave].cid,
226 g_Cc_CallDetail.slaveObj[slave].state,
227 g_Cc_CallDetail.slaveObj[slave].tone,
228 g_Cc_CallDetail.slaveObj[slave].sMsg,
229 g_Cc_CallDetail.slaveObj[slave].heldcall,
230 g_Cc_CallDetail.slaveObj[slave].is_callout,
231 g_Cc_CallDetail.slaveObj[slave].waitDSCI6);
232 }
233}
234
235
236VOID zCc_CheckSlaveState(const char *tips)
237{
238 UINT8 slave = 0;
239
240 if(g_Cc_CallDetail.old_state != g_Cc_CallDetail.state)
241 {
242 ccapp_log("=========== %s =============\n master state %d --> %d",
243 tips,
244 g_Cc_CallDetail.old_state,
245 g_Cc_CallDetail.state);
246 g_Cc_CallDetail.old_state = g_Cc_CallDetail.state;
247 }
248
249 for (slave = 0; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
250 {
251 if(g_Cc_CallDetail.slaveObj[slave].old_state != g_Cc_CallDetail.slaveObj[slave].state)
252 {
253 ccapp_log("=========== %s =============\n slave=%d state %d --> %d",
254 tips,
255 slave,
256 g_Cc_CallDetail.slaveObj[slave].old_state,
257 g_Cc_CallDetail.slaveObj[slave].state);
258
259 g_Cc_CallDetail.slaveObj[slave].old_state = g_Cc_CallDetail.slaveObj[slave].state;
260 }
261 }
262}
263
264
265VOID zCc_ClearDigits(VOID)
266{
267 g_Cc_CallDetail.dCount = 0;
268 memset(g_Cc_CallDetail.digits, 0, sizeof(g_Cc_CallDetail.digits));
269 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ClearDigits: digits cleared\n",__FUNCTION__);
270}
271
272VOID zCc_InitSlaveObj(UINT8 slave)
273{
274 memset(&g_Cc_CallDetail.slaveObj[slave], 0, sizeof(T_zCc_SlaveObj));
275 if (slave == g_Cc_CallDetail.ringCid)
276 {
277 g_Cc_CallDetail.ringCid = 0;
278 }
279}
280
281UINT8 zCc_TalkingCall(UINT8 heldcall)
282{
283 UINT8 slave = 0, cnt = 0;
284
285 for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
286 {
287 if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_TALKING_S
288 && g_Cc_CallDetail.slaveObj[slave].heldcall == heldcall
289 && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
290 {
291 cnt++;
292 }
293 }
294
295 return cnt;
296}
297
298UINT8 zCc_GetWaitDisc6Slave(VOID)
299{
300 UINT8 slave = 0, cnt = 0;
301
302 for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
303 {
304 if (g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 1)
305 {
306 cnt++;
307 }
308 }
309 return cnt;
310}
311
312UINT8 zCc_BusyToneAllowed(VOID)
313{
314 UINT8 slave = 0, cnt = 0;
315
316 for (slave = 0; slave < ZCC_SLAVES; slave++)
317 {
318 if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S )
319 {
320 cnt++;
321 }
322 }
323 if ((1 == cnt)//µ±Ç°Ã»ÓÐÆäËûºô½Ð
324 ||(cnt == 2 && g_Cc_CallDetail.ringCid !=0
325 && g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].state == ZCC_S_TRYING_S
326 && g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].tone != ZCC_TONE_CIDCW_A)//Õª»ú̬»¹ÓÐÀ´µçÇÒδ·ÅÒô
327 ||(cnt == zCc_GetWaitDisc6Slave()+1))//ÆäËûºô½Ð¶¼ÊÇÔÚµÈdsci6µÄ
328 {
329 return 1;
330 }
331 else
332 {
333 return 0;
334 }
335
336}
337
338UINT8 zCc_ActiveCall(VOID)
339{
340 return zCc_TalkingCall(0);
341}
342
343UINT8 zCc_HeldCall(VOID)
344{
345 return zCc_TalkingCall(1);
346}
347
348UINT8 zCc_GetSpecSlave(UINT8 state)
349{
350 UINT8 slave = 0;
351
352 for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
353 {
354 if (g_Cc_CallDetail.slaveObj[slave].state == state && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
355 {
356 return slave;
357 }
358 }
359 return 0;
360}
361
362UINT8 zCc_GetSpecSlaveIgnoreWaitDSCI6(UINT8 state)
363{
364 UINT8 slave = 0;
365
366 for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
367 {
368 if (g_Cc_CallDetail.slaveObj[slave].state == state)
369 {
370 return slave;
371 }
372 }
373 return 0;
374}
375
376UINT8 zCc_Find_waitDSCI6_cid(void)
377{
378 UINT8 slave = 0;
379
380 for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
381 {
382 if (g_Cc_CallDetail.slaveObj[slave].state!=ZCC_S_IDLE_S &&
383 g_Cc_CallDetail.slaveObj[slave].waitDSCI6!=0)
384 {
385 return slave;
386 }
387 }
388 return 0;
389}
390
391
392
393
394UINT8 zCc_GetDialingSlave(UINT8 waitDSCI6)
395{
396 UINT8 slave = 0;
397
398 for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
399 {
400 if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_DIALING_S )
401 {
402 if (waitDSCI6)
403 {
404 if (g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
405 {
406 return slave;
407 }
408 }
409 else
410 {
411 return slave;
412 }
413 }
414 }
415 return 0;
416}
417
418UINT8 zCc_GetDiscSlave(UINT8 state)
419{
420 UINT8 slave = 0;
421 UINT8 cnt = 0;
422
423 for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
424 {
425 if (g_Cc_CallDetail.slaveObj[slave].sMsg== ZCC_SDISCN_M && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
426 {
427 cnt++;
428 }
429 }
430 return cnt;
431}
432
433
434int tz_lock_cellid_is_limit_callin()
435{
436 char cellid_is_lock[4] = {0};
437
438 cfg_get_item("cellid_is_lock",cellid_is_lock,sizeof(cellid_is_lock));
439 if(strcmp(cellid_is_lock, "1") == 0)
440 return 1;
441
442 return 0;
443}
444
445int tz_lock_cellid_check_sos_num()
446{
447 int ret = 0;
448 char tz_Mexico_sos_lock_cellid[128] = {0};
449
450 ret = strlen(g_Cc_CallDetail.digits);
451 cfg_get_item("tz_Mexico_sos_lock_cellid",tz_Mexico_sos_lock_cellid,sizeof(tz_Mexico_sos_lock_cellid));
452 if(ret > 0 && ((g_Cc_CallDetail.digits[ret-1] == '#') || (g_Cc_CallDetail.digits[ret-1] == 'T')))
453 {
454 return TRUE;
455 }
456 else if(strstr(tz_Mexico_sos_lock_cellid, g_Cc_CallDetail.digits) != NULL)
457 {
458 return TRUE;
459 }
460 else
461 {
462 return FALSE;
463 }
464
465}
466
467extern int digit_map_call(char *num);
468/* µ±Ç°Ò»Â· ·Ç ±£³ÖµÄ ºô½Ð£¬FLASH£¬µ±Ç°ºô½Ð±»±£³Ö»òÊÍ·Å£¬digitsÖ»¼Ç¼Óû§²¦´òµÄºÅÂ룻
469 µ±Ç°Ò»Â· ·Ç ±£³ÖµÄ ºô½Ð£¬FLASH£¬µ±Ç°ºô½Ð±»»Ö¸´£»
470 ÆäËü³¡¾°ÐèÒªdigits ¼Ç¼ZCC_FLASH_SIGNºÍÓû§ ²¦´òµÄһλºÅÂë */
471UINT8 zCc_DigitsMatch(VOID)
472{
473 UINT16 i = 0;
474 UINT8 scSum = sizeof(g_zCc_SCTab)/sizeof(T_zCc_ScTab);
475
476 ccapp_log("zCc_DigitsMatch: digits=%s dCount=%d\n",g_Cc_CallDetail.digits,g_Cc_CallDetail.dCount);
477 if(tz_lock_cellid_is_limit_callin())
478 {
479 if(tz_lock_cellid_check_sos_num() == FALSE)
480 return ZCC_MATCHERR;
481 }
482
483 if (g_Cc_CallDetail.dCount == 0)
484 {
485 //ccapp_log("1");
486 return ZCC_NO_RESULT;
487 }
488
489 if(g_Cc_CallDetail.dCount >= 2 && g_Cc_CallDetail.dCount<ZDIAL_NUM_MAX)
490 {
491 if(g_Cc_CallDetail.digits[0]!=ZCC_FLASH_SIGN &&
492 g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1]!=ZCC_TIMEOUT_SIGN)
493 {
494 printf("g_Cc_CallDetail.digits = %s\n",g_Cc_CallDetail.digits);
495 if(strcmp(LOCAL_TEST_CALL_CODE, g_Cc_CallDetail.digits)==0)
496 {
497 //ccapp_log("2");
498 local_test_call_type = LocalTestCallType_None;
499 return ZCC_LOCAL_TEST_CALL;
500 }
501 else if(strcmp(TZ_TEST_TIMING, g_Cc_CallDetail.digits)==0)
502 {
503 local_test_call_type = LocalTestCallType_LOOP;
504 return ZCC_LOCAL_TEST_CALL;
505 }
506 }
507
508 if(g_Cc_CallDetail.digits[0]=='*' && g_Cc_CallDetail.digits[1]=='#')
509 {
510 //ccapp_log("3");
511 return ZCC_NO_RESULT;
512 }
513 }
514
515 if(g_Cc_CallDetail.dCount>=ZDIAL_NUM_MAX)
516 {
517 //ccapp_log("4");
518 return ZCC_MATCHERR;
519 }
520
521 if(digit_map_call(g_Cc_CallDetail.digits)!=0)
522 {
523 ccapp_log("digit_map_call match %s", g_Cc_CallDetail.digits);
524 return ZCC_CALL;
525 }
526
527 if (g_Cc_CallDetail.digits[0] >= '0' && g_Cc_CallDetail.digits[0] <= '9')
528 {
529 //ccapp_log("5");
530 return (g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] == '#'
531 || g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] == ZCC_TIMEOUT_SIGN
532 || g_Cc_CallDetail.dCount == ZDIAL_NUM_MAX) ? ZCC_CALL : ZCC_NO_RESULT;
533 }
534
535 //ccapp_log("6");
536 if (g_Cc_CallDetail.digits[0] == ZCC_FLASH_SIGN) //ÖÁÉÙÓÐ2·ºô½ÐÁË
537 {
538 switch (g_Cc_CallDetail.digits[1])
539 {
540 case '0':
541 return ZCC_FLASH_0;
542 case '1':
543 return ZCC_FLASH_1;
544 case '2':
545 case ZCC_TIMEOUT_SIGN:
546 return ZCC_FLASH_2;
547 case '3':
548 return ZCC_FLASH_3;
549 case '4':
550 return ZCC_FLASH_4;
551 default:
552 return ZCC_MATCHERR;
553 }
554 }
555
556 /*for (i = 0; i<scSum; i++)
557 {
558 if (strncmp((CHAR *)g_zCc_SCTab[i].sc, (CHAR *)g_Cc_CallDetail.digits,
559 (UINT32)(strlen(g_zCc_SCTab[i].sc)<g_Cc_CallDetail.dCount)?strlen(g_zCc_SCTab[i].sc):g_Cc_CallDetail.dCount) == 0)
560 {
561 if (g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] == '#')
562 {
563 return g_zCc_SCTab[i].scName;
564 }
565 if (g_Cc_CallDetail.dCount < g_zCc_SCTab[i].scMaxLen)
566 {
567 return ZCC_NO_RESULT;
568 }
569 if (g_Cc_CallDetail.dCount == g_zCc_SCTab[i].scMaxLen)
570 {
571 return ZCC_MATCHERR;
572 }
573 }
574 }*/
575
576 if(g_Cc_CallDetail.dCount>=2 &&
577 g_Cc_CallDetail.dCount<ZDIAL_NUM_MAX &&
578 g_Cc_CallDetail.digits[0]=='*')
579 {
580 if(g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] == '#'
581 || g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] == ZCC_TIMEOUT_SIGN)
582 {
583 ccapp_log("match special code: %s", g_Cc_CallDetail.digits);
584 return ZCC_CALL;
585 }
586 else
587 {
588 //ccapp_log("8");
589 return ZCC_NO_RESULT;
590 }
591 }
592
593 //ccapp_log("9");
594 return ZCC_MATCHERR;
595}
596
597VOID zCc_DigitsMatchRltProc(UINT8 ret)
598{
599 UINT8 callCnt = 0, slave = 0;
600 SINT32 chldret = -1;
601 char voice_dial_time[4] = {0};
602 unsigned int dtmf_interval;
603
604 cfg_get_item("voice_dial_time", voice_dial_time, sizeof(voice_dial_time));
605 dtmf_interval = atoi(voice_dial_time) * 1000;
606 ccapp_log("ret=%d", ret);
607
608 slave = zCc_GetSpecSlave(ZCC_S_DACCM_S);
609 switch (ret)
610 {
611 case ZCC_NO_RESULT:
612 CreateSoftTimer(ZCCAPP_TIMER_DTMF_DETECT,
613 0,
614 dtmf_interval,
615 zCcApp_DtmfTimer,
616 NULL);
617 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DigitsMatchRltProc CreateSoftTimer zCcApp_DtmfTimer\n",__FUNCTION__);
618 return;
619
620 case ZCC_CALL:
621 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SINV_M;
622 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_DIALING_S;
623 if(g_Cc_CallDetail.digits[0]!='*' && (digit_map_call(g_Cc_CallDetail.digits)==0))
624 {
625 g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] = 0;
626 g_Cc_CallDetail.dCount--;
627 }
628 strcpy(g_Cc_CallDetail.slaveObj[slave].number, g_Cc_CallDetail.digits);
629 g_Cc_CallDetail.slaveObj[slave].is_callout = TRUE;
630 return;
631
632 case ZCC_FLASH_1:
633 callCnt = zCc_CallCount();
634 if ((1 < callCnt) && (zCc_ActiveCall() == callCnt) ) // ¼Ç¼±¾´Î²Ù×÷ΪÕë¶Ôconf µÄ
635 {
636 chldret = zCc_SendAtChldReq(21);
637 }
638 else //if (1 < callCnt)
639 {
640 slave = zCc_GetSpecSlave(ZCC_S_DIALING_S);
641 if(slave)
642 {
643 ccapp_log("zCc_SendAtChldReq(%d) dialing", 10+slave);
644 chldret = zCc_SendAtChldReq(10+slave);
645 SLIC_Stop_Signal(0,TONE_SIGNAL);
646 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
647 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
648 break;
649 }
650
651 slave = zCc_GetSpecSlave(ZCC_S_RINGBACK_S);
652 if(slave)
653 {
654 ccapp_log("zCc_SendAtChldReq(%d) ringback", 10+slave);
655 chldret = zCc_SendAtChldReq(10+slave);
656 SLIC_Stop_Signal(0,TONE_SIGNAL);
657 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
658 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
659 break;
660 }
661
662 ccapp_log("zCc_SendAtChldReq(1)-");
663 chldret = zCc_SendAtChldReq(1);
664 }
665 break;
666
667 case ZCC_FLASH_2:
668 chldret = zCc_SendAtChldReq(2);
669 break;
670
671 case ZCC_FLASH_3:
672 if(zCc_talking_count()==1 && zCc_GetSpecSlave(ZCC_S_TRYING_S))
673 {
674 // talking + incoming, skip hookflash+3, do nothing
675 }
676 else
677 chldret = zCc_SendAtChldReq(3);
678 break;
679
680 case ZCC_FLASH_4:
681 if( zCc_CallCount()> 1)
682 {
683 //system("at_cmd AT+ZTOR=2");
684 //zCcApp_send_message(MSG_CMD_ACTIVE_CALL_TRANSFER, 0, NULL);
685 //ccapp_log("send MSG_CMD_ACTIVE_CALL_TRANSFER");
686 chldret = zCc_SendAtChldReq(4); //AT+CHLD=4
687 }
688 else
689 ccapp_log("skip at_cmd AT+ZTOR=2");
690 break;
691
692 case ZCC_FLASH_0://¾Ü½ÓÀ´µç£¬Í£Ö¹·ÅÒô£¬»Ö¸´ÓïÒô
693 SLIC_Stop_Signal(0,0);
694 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DigitsMatchRltProc: SLIC_Stop_Signal <---\n",__FUNCTION__);
695 zCc_InitSlaveObj(0);
696 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
697 SLIC_Start_PCM();
698 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DigitsMatchRltProc: SLIC_Start_PCM <---\n",__FUNCTION__);
699 chldret = zCc_SendAtChldReq(0);
700 break;
701
702 case ZCC_MATCHERR:
703 if (g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN)
704 {
705 zCc_ClearDigits();
706 if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½Ðʱ²»·ÅæÒô
707 {
708 CreateSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT,
709 0,
710 ZCCAPP_TIMER_BUSYTONE_INTERVAL,
711 zCcApp_BusyToneTimer,
712 NULL);
713 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DigitsMatchRltProc CreateSoftTimer zCcApp_BusyToneTimer\n",__FUNCTION__);
714 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A;
715 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S;
716 g_Cc_CallDetail.slaveObj[slave].confcall = 0;
717 g_Cc_CallDetail.slaveObj[slave].heldcall = 0;
718 }
719 else
720 {
721 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
722 zCc_InitSlaveObj(slave);
723 }
724 return;
725 }
726 break;
727
728 default:
729 if (ret >= ZCC_BAOC_REG && ret <= ZCC_CFB_DEREG)// SS slave=1
730 {
731 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SINV_M;
732 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_IDLE_S;//±ÜÃâºóÃæ¹Ò»ú»á·¢Æðchup
733 }
734 return;
735 }
736
737 zCc_ClearDigits();
738 //zCc_InitSlaveObj(slave);
739}
740#if 0
741VOID zCc_PreProcRes(CHAR *pParaLine)
742{
743 SINT32 flg = 0;
744 UINT32 i = 0;
745 UINT32 length = 0;
746 CHAR *pSource = pParaLine;
747 CHAR *pDest = NULL;
748
749 CHAR *pStrDestMalloc = (CHAR *)malloc(AT_CMD_MAX);
750 if (NULL == pStrDestMalloc)
751 {
752 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_PreProcRes: Malloc failed !!!\n",__FUNCTION__);
753 return;
754 }
755 memset(pStrDestMalloc, 0, AT_CMD_MAX);
756
757 assert(pParaLine != NULL);
758 pDest = pStrDestMalloc;
759 length = strlen(pParaLine);
760 if (length == 0 || length >= ZAT_MAX_LEN)
761 {
762 free(pStrDestMalloc);
763 return;
764 }
765 for (i = 0; (i < length )&& (pDest - pStrDestMalloc < AT_CMD_MAX); i++)
766 {
767 if ('"' == *pSource)
768 {
769 flg = (0 == flg)?1:0; /* Ë«ÒýºÅ ɾ³ý */
770 if ('"' == *(pSource + 1)) /* ÐǺźóÃæ½ô¸úÐǺţ¬²åÈë¿Õ´®Õ¼Î»·û */
771 {
772 *pDest++ = (CHAR)ZAT_NULL_FILL;
773 }
774 }
775 else if ((',' == *pSource) && (0 == flg))
776 {
777 *pDest++ = ' '; /* Ë«ÒýºÅÍâÃæµÄ¶ººÅ£¬Ìæ»»³É¿Õ¸ñ */
778 if (',' == *(pSource + 1)) /* ¶ººÅºóÃæ½ô¸ú¶ººÅ£¬»òÕßÒÔ¶ººÅ½á⣬²åÈë¿Õ´®Õ¼Î»·û */
779 {
780 *pDest++ = '9'; //±£Áô²ÎÊýÓÃ9ÔÝʱ´úÌæ
781 }
782 else if ('\0' == *(pSource + 1)) /* ¶ººÅºóÃæ½ô¸ú¶ººÅ£¬»òÕßÒÔ¶ººÅ½á⣬²åÈë¿Õ´®Õ¼Î»·û */
783 {
784 *pDest++ = (CHAR)ZAT_NULL_FILL;
785 }
786 }
787 else if (('\r' == *pSource) ||('\n' == *pSource))
788 {
789 pSource++;
790 }
791 else
792 {
793 *pDest++ = ((' ' == *pSource) && (1 == flg))?(CHAR)ZAT_SPACE_REPLACE:((('\t' == *pSource) && (1 == flg))?(CHAR)ZAT_TAB_REPLACE:(*pSource));
794 }
795 pSource++;
796 }
797
798 memset(pParaLine, 0, length); /* ½«Ô¤´¦ÀíºóµÄÄÚÈÝ¿½±´»Ø²ÎÊýÐÐÖÐ */
799 strcpy(pParaLine, pStrDestMalloc);
800 free(pStrDestMalloc);
801}
802#endif
803UINT8 zCc_CallCount(VOID)
804{
805 UINT8 slave = 0, cnt = 0;
806
807 for (slave = 1; slave < ZCC_SLAVES; slave++)
808 {
809 if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S
810 && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
811 //&& !(g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 1
812 //&& g_Cc_CallDetail.slaveObj[slave].state ==ZCC_S_TRYING_S))
813 {
814 cnt++;
815 }
816 }
817
818 return cnt;
819}
820
821UINT8 zCc_FlashClearCall(VOID)
822{
823 UINT8 slave = 0, cnt = 0;
824
825 for (slave = 1; slave < ZCC_SLAVES; slave++)
826 {
827 if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_DACCM_S//Õª»úµ½atdÏ·¢Ç°
828 || g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_BSYT_S
829 || g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_TKYT_S
830 || g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_SIL_S//·ÅæÒô¡¢º¿ÃùÒô¡¢¾²Òô
831 && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
832 {
833 zCc_InitSlaveObj(slave);
834 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
835 cnt++;
836 }
837 }
838
839 return cnt;
840}
841
842UINT8 zCc_MoInactiveCall(VOID)
843{
844 UINT8 slave = 0, cnt = 0;
845
846 for (slave = 0; slave < ZCC_SLAVES; slave++)
847 {
848 if (g_Cc_CallDetail.slaveObj[slave].state > ZCC_S_IDLE_S
849 && g_Cc_CallDetail.slaveObj[slave].state < ZCC_S_BSYT_S
850 && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
851 {
852 cnt++;
853 }
854 }
855
856 return cnt;
857}
858UINT8 zCc_MoBeforDialingCall(VOID)
859{
860 UINT8 slave = 0, cnt = 0;
861
862 for (slave = 0; slave < ZCC_SLAVES; slave++)
863 {
864 if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S)
865 {
866 ccapp_log("zCc_MoBeforDialingCall slave[%d]=%d",
867 slave,
868 g_Cc_CallDetail.slaveObj[slave].state);
869 }
870
871 if (g_Cc_CallDetail.slaveObj[slave].state > ZCC_S_IDLE_S
872 && g_Cc_CallDetail.slaveObj[slave].state < ZCC_S_DIALING_S
873 && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
874 {
875 cnt++;
876 }
877 }
878
879 return cnt;
880}
881
882int zCc_GetMoBeforDialingCallCID(VOID)
883{
884 UINT8 slave = 0, cnt = 0;
885
886 for (slave = 0; slave < ZCC_SLAVES; slave++)
887 {
888 if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S)
889 {
890 ccapp_log("zCc_GetMoBeforDialingCallCID slave[%d]=%d",
891 slave,
892 g_Cc_CallDetail.slaveObj[slave].state);
893 }
894
895 if (g_Cc_CallDetail.slaveObj[slave].state > ZCC_S_IDLE_S
896 && g_Cc_CallDetail.slaveObj[slave].state < ZCC_S_DIALING_S
897 && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
898 {
899 return slave;
900 }
901 }
902
903 return -1;
904}
905
906
907int zCc_findCID_by_number(const char *number)
908{
909 UINT8 slave = 0, len = 0;
910 char slave_number[ZDIAL_NUM_MAX];
911
912 for (slave = 1; slave < ZCC_SLAVES; slave++)
913 {
914 if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S)
915 {
916 ccapp_log("zCc_findCID_by_number[%s] slave[%d]=%d num=%s",
917 number,
918 slave,
919 g_Cc_CallDetail.slaveObj[slave].state,
920 g_Cc_CallDetail.slaveObj[slave].number);
921 }
922
923 strcpy(slave_number, g_Cc_CallDetail.slaveObj[slave].number);
924 len = strlen(slave_number);
925 if(len>0)
926 {
927 if(slave_number[len-1]=='T')
928 slave_number[len-1]='\0';
929 }
930
931 if (strcmp(slave_number, number)==0)
932 return slave;
933 }
934
935 return 0;
936}
937
938int check_incoming_call_is_in_slave(MSG_BUF *ptMsgBuf)
939{
940 T_zCcApp_DsciInd tDiscInd = {0};
941 memcpy(&tDiscInd, (T_zCcApp_DsciInd*)ptMsgBuf->aucDataBuf, sizeof(T_zCcApp_DsciInd));
942
943 if(tDiscInd.cid==0)
944 return 0;
945
946 return zCc_findCID_by_number(tDiscInd.num);
947}
948
949
950UINT8 zCc_MtInactiveCall(VOID)
951{
952 UINT8 slave = 0, cnt = 0;
953
954 for (slave = 0; slave < ZCC_SLAVES; slave++)
955 {
956 if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_TRYING_S
957 || g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_WAIT_RESOURCE_S)
958 //&& g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
959 {
960 cnt++;
961 }
962 }
963
964 return cnt;
965}
966UINT8 zCc_GetCallSlave(UINT8 heldcall)//°´×î¶àÁ½Â·ÊµÏÖ
967{
968 UINT8 slave = 0;
969
970 for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ
971 {
972 if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_TALKING_S
973 && g_Cc_CallDetail.slaveObj[slave].heldcall == heldcall
974 && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
975 {
976 return slave;
977 }
978 }
979 return 0;
980}
981
982VOID zCc_ControlTone(VOID)
983{
984 T_zCc_Tone tone = ZCC_TONE_OFF_A; /* What tone to play */
985 SIGNAL_DATA tSig;
986 memset(tSig.cid, 0, 32);
987 UINT8 slave = 0;
988
989 for (slave = 0; slave < ZCC_SLAVES; slave++)
990 {
991 if (g_Cc_CallDetail.slaveObj[slave].tone != ZCC_TONE_OFF_A)
992 {
993 tone = g_Cc_CallDetail.slaveObj[slave].tone;
994 break;
995 }
996 }
997 printf("[ccapp_debug]:zCc_ControlTone,cur_tone=%d, last_tone=%d\n",tone,g_Cc_CallDetail.lastTone);
998 if (g_Cc_CallDetail.lastTone == tone || ZCC_TONE_OFF_A == tone)
999 {
1000 return;
1001 }
1002
1003 if(local_test_call_st != 0)
1004 {
1005 g_Cc_CallDetail.lastTone = tone;
1006 return ;
1007 }
1008
1009 switch (tone)
1010 {
1011 case ZCC_TONE_DIAL_A:
1012 if (g_Cc_CallDetail.lastTone == ZCC_TONE_CIDCW_A)//¶à²»¶àÓà
1013 {
1014 SLIC_Stop_PCM();
1015 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Stop_PCM <---\n",__FUNCTION__);
1016 }
1017 tSig.signal_type= TONE_SIGNAL;
1018 tSig.tone_type = TONE_DIAL;
1019 SLIC_Play_Signal(0, 0, &tSig);
1020 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Play_Signal TONE_DIAL<---\n",__FUNCTION__);
1021 break;
1022 case ZCC_TONE_RB_A:
1023 tSig.signal_type= TONE_SIGNAL;
1024 tSig.tone_type = TONE_RINGBACK;
1025 SLIC_Play_Signal(0, 0, &tSig);
1026 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Play_Signal ZCC_TONE_RB_A<---\n",__FUNCTION__);
1027 break;
1028 case ZCC_TONE_BSY_A:
1029 tSig.signal_type= TONE_SIGNAL;
1030 tSig.tone_type = TONE_BUSY;
1031 SLIC_Play_Signal(0, 0, &tSig);
1032 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Play_Signal TONE_BUSY<---\n",__FUNCTION__);
1033 break;
1034 case ZCC_TONE_SIL_A:
1035 SLIC_Stop_Signal(0, TONE_SIGNAL);
1036 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Stop_Signal <---\n",__FUNCTION__);
1037 break;
1038 case ZCC_TONE_CIDCW_A:
1039 memset(&tSig, 0, sizeof(tSig));
1040 tSig.signal_type= TONE_SIGNAL;
1041 tSig.tone_type = TONE_CW;
1042 //memcpy(tSig.cid, g_Cc_CallDetail.number, strlen(g_Cc_CallDetail.number));
1043 strncpy(tSig.cid, g_Cc_CallDetail.number, sizeof(tSig.cid)-1);
1044 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone ZCC_TONE_CIDCW_A,number = %s\n",__FUNCTION__,g_Cc_CallDetail.number);
1045 zCc_sleep(100);
1046 SLIC_Play_Signal(0, 0, &tSig);
1047 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Play_Signal TONE_CW<---\n",__FUNCTION__);
1048 break;
1049 case ZCC_TONE_TKY_A:
1050 tSig.signal_type= TONE_SIGNAL;
1051 tSig.tone_type = TONE_TKY;
1052 SLIC_Play_Signal(0, 0, &tSig);
1053 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Play_Signal TONE_TKY<---\n",__FUNCTION__);
1054 break;
1055 }
1056 g_Cc_CallDetail.lastTone = tone;
1057
1058}
1059void zCcApp_SetAtChnlCmdId(E_CC_APP_AtReqCmdId AtCmdId)
1060{
1061 g_Cc_CallDetail.curAtCmdId = AtCmdId;
1062}
1063VOID zCc_SendSsReq(PSTR pAtCmdPara)
1064{
1065 CHAR pw[5] = {0};
1066 CHAR dn[ZDIAL_NUM_MAX] = {0};
1067 UINT8 scSum = sizeof(g_zCc_SCTab)/sizeof(T_zCc_ScTab);
1068 UINT8 scName = 0;
1069 UINT8 i = 0;
1070 T_zCcapp_ClckReq tclckreq = {0};
1071 T_zCcapp_CcfcReq tccfcreq = {0};
1072
1073 for (i = 0; i<scSum; i++)
1074 {
1075 if (strncmp((CHAR *)g_zCc_SCTab[i].sc, (CHAR *)g_Cc_CallDetail.digits,
1076 (UINT32)(strlen(g_zCc_SCTab[i].sc)<g_Cc_CallDetail.dCount)?strlen(g_zCc_SCTab[i].sc):g_Cc_CallDetail.dCount) == 0)
1077 {
1078 scName = g_zCc_SCTab[i].scName;
1079 break;
1080 }
1081 }
1082 switch(scName)
1083 {
1084 case ZCC_BAOC_REG:
1085 sscanf(pAtCmdPara, "%*5s%4s#", pw);
1086 pw[4] = '\0';
1087 tclckreq.type = 0;//AO
1088 tclckreq.act = 1;
1089 strncpy(tclckreq.pw,pw,sizeof(tclckreq.pw)-1);
1090 break;
1091 case ZCC_BAOC_DEREG:
1092 sscanf(pAtCmdPara, "%*5s%4s#", pw);
1093 pw[4] = '\0';
1094 tclckreq.type = 0;//AO
1095 tclckreq.act = 0;
1096 strncpy(tclckreq.pw,pw,sizeof(tclckreq.pw)-1);
1097 break;
1098 case ZCC_BOIC_REG:
1099 sscanf(pAtCmdPara, "%*5s%4s#", pw);
1100 pw[4] = '\0';
1101 tclckreq.type = 1;//OI
1102 tclckreq.act = 1;
1103 strncpy(tclckreq.pw,pw,sizeof(tclckreq.pw)-1);
1104 break;
1105 case ZCC_BOIC_DEREG:
1106 sscanf(pAtCmdPara, "%*5s%4s#", pw);
1107 pw[4] = '\0';
1108 tclckreq.type = 1;//OI
1109 tclckreq.act = 0;
1110 strncpy(tclckreq.pw,pw,sizeof(tclckreq.pw)-1);
1111 break;
1112 case ZCC_CFU_REG:
1113 sscanf(pAtCmdPara, "%*4s%47s#", dn);
1114 dn[strlen(dn)-1] = '\0';
1115 tccfcreq.type = 0;
1116 tccfcreq.act = 1;
1117 strncpy(tccfcreq.dn, dn, strlen(dn));
1118 break;
1119 case ZCC_CFU_DEREG:
1120 tccfcreq.type = 0;
1121 tccfcreq.act = 0;
1122 break;
1123 case ZCC_CFNRY_REG:
1124 sscanf(pAtCmdPara, "%*4s%47s#", dn);
1125 dn[strlen(dn)-1] = '\0';
1126 tccfcreq.type = 2;
1127 tccfcreq.act = 1;
1128 strncpy(tccfcreq.dn, dn, strlen(dn));
1129 break;
1130 case ZCC_CFNRY_DEREG:
1131 tccfcreq.type = 2;
1132 tccfcreq.act = 0;
1133 break;
1134 case ZCC_CFB_REG:
1135 sscanf(pAtCmdPara, "%*4s%47s#", dn);
1136 dn[strlen(dn)-1] = '\0';
1137 tccfcreq.type = 1;
1138 tccfcreq.act = 1;
1139 strncpy(tccfcreq.dn, dn, strlen(dn));
1140 break;
1141 case ZCC_CFB_DEREG:
1142 tccfcreq.type = 1;
1143 tccfcreq.act = 0;
1144 break;
1145 }
1146
1147
1148 if (scName > ZCC_BOIC_DEREG)
1149 {
1150 zCcApp_Ccfc(&tccfcreq);
1151 }
1152 else
1153 {
1154 zCcApp_Clck(&tclckreq);
1155 }
1156
1157}
1158
1159VOID zCc_SendAtDialReq(PSTR pAtCmdPara)
1160{
1161 UINT8 slave =0;
1162
1163 //ccapp_log("pAtCmdPara=%s len=%s", pAtCmdPara, strlen(pAtCmdPara));
1164
1165 if (strlen(pAtCmdPara)+1 > ZDIAL_NUM_MAX)
1166 {
1167 return;
1168 }
1169 else if (strlen(pAtCmdPara) <= 2)
1170 {
1171 slave = zCc_GetDialingSlave(1);
1172 if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0 && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½ÐÇÒÒѹһúʱ²»·ÅæÒô
1173 {
1174 CreateSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT,
1175 0,
1176 ZCCAPP_TIMER_BUSYTONE_INTERVAL,
1177 zCcApp_BusyToneTimer,
1178 NULL);
1179 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtDialReq CreateSoftTimer zCcApp_BusyToneTimer\n",__FUNCTION__);
1180 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A;
1181 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S;
1182 g_Cc_CallDetail.slaveObj[slave].confcall = 0;
1183 g_Cc_CallDetail.slaveObj[slave].heldcall = 0;
1184 }
1185 else
1186 {
1187 int index;
1188 zCc_InitSlaveObj(slave);
1189 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
1190 index = zCc_find_held_cid(); // hookflash + onekey and dtmf timeout
1191 if(index!=0)
1192 zCc_SendAtChldReq(2);
1193 }
1194 return;
1195 }
1196 g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_D;
1197 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtDialReq:AtcmdMsg = %s\n",__FUNCTION__,pAtCmdPara);
1198 zCcApp_Dial((char *)pAtCmdPara);
1199
1200}
1201
1202VOID zCc_SendAtAnswerReq(VOID)
1203{
1204 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtAnswerReq\n",__FUNCTION__);
1205 g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_A;
1206 zCcApp_Answer();
1207}
1208
1209VOID zCc_SendAtHangupReq(VOID)
1210{
1211 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtHangupReq\n",__FUNCTION__);
1212 g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_CHUP;
1213 zCcApp_Chup();
1214}
1215
1216VOID zCc_SendAtDtmfReq(char* dtmfchar)
1217{
1218 g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_VTS;
1219 zCcApp_Vts(dtmfchar);
1220}
1221
1222VOID zCc_SendAtImsPlusReq(int rate, int setfg)
1223{
1224 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtImsPlusReq\n",__FUNCTION__);
1225 g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_IMSPLUS;
1226 zCcApp_SetImsPlus(rate, setfg);
1227}
1228#if 0
1229VOID zCc_SendAtVolumnReq(PSTR pAtCmdPara)
1230{
1231 CHAR AtcmdMsg[ZAT_PARAM_LEN50] = {0};
1232
1233 if (pAtCmdPara[0] == 0 || strlen(pAtCmdPara)+1 > ZDIAL_NUM_MAX)
1234 {
1235 return;
1236 }
1237 g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_VTS;
1238 sprintf(AtcmdMsg, "AT+VTS=\"%s\",20\r\n", pAtCmdPara);
1239 printf( "---> ccApp zCc_SendAtDtmfReq:AtcmdMsg = %s\n", AtcmdMsg);
1240 zCcApp_Vts(AtcmdMsg);
1241}
1242#endif
1243SINT32 zCc_SendAtChldReq(int chldtype)
1244{
1245 SINT32 ret = -1;
1246
1247 if (g_Cc_CallDetail.digits[0] == ZCC_FLASH_SIGN)
1248 {
1249 zCc_ClearDigits();
1250 }
1251 DeleteSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT);
1252 g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_SET_CHLD;
1253 ret = zCcApp_Chld(chldtype);
1254 return ret;
1255}
1256
1257VOID zCc_SendLedInformMsg(VOID)
1258{
1259 int lRet = -1;
1260 int lTgtMsgID = 0;
1261 MSG_BUF stMsg;
1262 LONG msgSize = sizeof(MSG_BUF) - sizeof(LONG);
1263
1264#ifndef TEST_CCAPP
1265 lTgtMsgID = msgget(MODULE_ID_MMI, 0);
1266 if (-1 == lTgtMsgID)
1267 {
1268 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendLedInformMsg msgget MMI fail\n",__FUNCTION__);
1269 return;
1270 }
1271
1272 memset(&stMsg, 0, sizeof(MSG_BUF));
1273 stMsg.ulMagic = MSG_MAGIC_WORD;
1274 stMsg.lMsgType = MSG_TYPE_DEFAULT;
1275 stMsg.src_id = MODULE_ID_CALL_CTRL;
1276 stMsg.dst_id = MODULE_ID_MMI;
1277 stMsg.usMsgCmd = MSG_CMD_VOIP_STATUS_INFO;
1278 stMsg.usDataLen = 0;
1279 lRet = msgsnd(lTgtMsgID, &stMsg, msgSize, IPC_NOWAIT);
1280 if (lRet < 0)
1281 {
1282 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendLedInformMsg msgsnd to MMI fail\n",__FUNCTION__);
1283 return;
1284 }
1285#endif
1286}
1287
1288VOID zCc_SetLedStatus(char* LedStatus)
1289{
1290
1291#ifndef TEST_CCAPP
1292 cfg_set("voip_status", LedStatus);
1293#endif
1294 zCc_SendLedInformMsg();
1295 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SetLedStatus = %s\n",__FUNCTION__,LedStatus);
1296}
1297
1298SINT32 zCc_RecvDsciInd(MSG_BUF *ptMsgBuf)
1299{
1300 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","RECV dsciind!!!<---\n");
1301 //ptMsgBuf->usMsgCmd = ZCC_NO_E;
1302 //ptMsgBuf->usMsgCmd = ZCCAPP_ATIND_DSCI;
1303 //ptMsgBuf->usSourceModuleID = MSG_ID_CALL_CTRL;
1304
1305 zCc_SendMsgToSub(ptMsgBuf); /* ·¢¸øÖ÷Ïß³Ì */
1306 return 0;
1307}
1308
1309int is_onecall_in_help_and_ready_to_input_new_call(void)
1310{
1311 int i;
1312 if(zCc_find_held_cid()==0)
1313 return 0;
1314
1315 for(i=0;i<ZCC_SLAVES;i++) // should start from 0, it'll be 0 when hookflash comes but not input any key
1316 if(g_Cc_CallDetail.slaveObj[i].state==ZCC_S_DT_S ||
1317 g_Cc_CallDetail.slaveObj[i].state==ZCC_S_DACCM_S)
1318 return 1;
1319
1320 return 0;
1321}
1322
1323void tz_lock_cellid_active_for_call(int state)
1324{
1325 static int old_state = -1;
1326 static int cellid_active_count = 0;
1327 char tz_lock_cellid_active[4] = {0};
1328
1329 cfg_get_item("tz_lock_cellid_active",tz_lock_cellid_active,sizeof(tz_lock_cellid_active));
1330 if(strcmp(tz_lock_cellid_active, "1") == 0)
1331 return;
1332
1333 if((old_state == 3) && (state == 0) && (cellid_active_count < 3))
1334 {
1335 cellid_active_count++;
1336 if(cellid_active_count == 3)
1337 {
1338 cfg_set("tz_lock_cellid_call_active", "1");
1339 }
1340 }
1341 old_state = state;
1342 return;
1343}
1344
1345SINT32 zCc_DsciIndProc(MSG_BUF *ptMsgBuf)
1346{
1347 int inMpty = 0;
1348 int cid = 0;
1349 int state = 0;
1350 int dir = 0;
1351 CHAR num[ZDIAL_NUM_MAX] = {0};
1352 CHAR voip_status[ZDIAL_NUM_MAX] = {0};
1353 T_zCcApp_DsciInd tDiscInd = {0};
1354
1355 int n;
1356 int slave_callout[ZCC_SLAVES];
1357
1358 MSG_BUF msgBuf = {0};
1359 char callback_enable[4] = {0};
1360 char callback_number[20] = {0};
1361 cfg_get_item("callback_enable", callback_enable, sizeof(callback_enable));
1362 cfg_get_item("callback_number", callback_number, sizeof(callback_number));
1363
1364 memcpy(&tDiscInd, (T_zCcApp_DsciInd*)ptMsgBuf->aucDataBuf, sizeof(T_zCcApp_DsciInd));
1365 cid = tDiscInd.cid;
1366 inMpty = tDiscInd.inMpty;
1367 dir = tDiscInd.dir;
1368 state = tDiscInd.state;
1369 strncpy(num, tDiscInd.num,sizeof(num)-1);
1370 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s RECV dsciind: cid=%d num=%s dir=%d inMpty=%d state=%d !!!<---\n",
1371 __FUNCTION__, cid, num, dir,inMpty,state);
1372 zCc_ShowAllSlave();
1373
1374 if (cid < ZCC_MINCID || cid > ZCC_MAXCID)
1375 {
1376 return 0;
1377 }
1378 if (num[0] < 0)
1379 {
1380 memset(num,0,ZDIAL_NUM_MAX);
1381 }
1382 ptMsgBuf->dst_id = cid;
1383 tz_lock_cellid_active_for_call(state);
1384 switch(state)
1385 {
1386 case 0://Z_MMIACC_CALL_STATE_ACTIVE
mj.qu77232092025-08-14 23:35:05 -07001387 cfg_set("voice_status", "active");
zw.wang96c5d4e2025-07-01 11:35:13 +08001388 if (g_Cc_CallDetail.slaveObj[cid].state == ZCC_S_TALKING_S)//held->active
1389 {
1390 SLIC_Start_PCM();
1391 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DsciIndProc: SLIC_Start_PCM <---\n",__FUNCTION__);
1392
1393 if (g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A
1394 && g_Cc_CallDetail.slaveObj[0].tone == ZCC_TONE_DIAL_A)
1395 {
1396 SLIC_Stop_Signal(0, TONE_SIGNAL);
1397 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DsciIndProc: SLIC_Stop_Signal <---\n",__FUNCTION__);
1398 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
1399 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DsciIndProc handling zCc_InitSlaveObj(0)\n",__FUNCTION__);
1400 zCc_InitSlaveObj(0);
1401 }
1402 g_Cc_CallDetail.slaveObj[cid].heldcall = 0;
1403 g_Cc_CallDetail.slaveObj[cid].confcall = inMpty;
1404 }
1405 else
1406 {
1407 ptMsgBuf->usMsgCmd = ZCC_SANS_E;
1408 }
1409
1410#ifndef TEST_CCAPP
1411 cfg_get_item("voip_status",voip_status,sizeof(voip_status));
1412 if (0 != strcmp("ledon" , voip_status))
1413#endif
1414 {
1415 zCc_SetLedStatus("ledon");
1416 }
1417 break;
1418 case 1://Z_MMIACC_CALL_STATE_HELD
1419 if (g_Cc_CallDetail.slaveObj[cid].state == ZCC_S_TALKING_S)//active->held
1420 {
1421 if (1 == zCc_CallCount())
1422 {
1423 //SLIC_Stop_PCM();
1424 }
1425 g_Cc_CallDetail.slaveObj[cid].heldcall = 1;
1426 g_Cc_CallDetail.slaveObj[cid].confcall = inMpty;
1427
1428 }
1429 break;
1430 case 3://Z_MMIACC_CALL_STATE_MO_ALERTING
1431 ptMsgBuf->usMsgCmd = ZCC_SRING_E;
1432 break;
1433 case 4://Z_MMIACC_CALL_STATE_MT_INCOMING
1434 if(tz_lock_cellid_is_limit_callin())
1435 {
1436 zCc_SendAtChldReq(10+cid);
1437 break;
1438 }
1439
1440 if(g_Cc_CallDetail.state==ZCC_M_SEIZE_S)
1441 {
1442 int cnt;
1443
1444 cnt= zCc_CallCount();
1445 ccapp_log("cnt=%d slave[0]=%d", cnt, g_Cc_CallDetail.slaveObj[0].state);
1446
1447 if(cnt==0) // hookoff but not dail out utill dtmf-timer timeout
1448 {
1449 if(ZCC_S_BSYT_S<=g_Cc_CallDetail.slaveObj[0].state &&
1450 g_Cc_CallDetail.slaveObj[0].state<=ZCC_S_SIL_S)
1451 {
1452 zCc_SendAtChldReq(10+cid);
1453 break;
1454 }
1455 }
1456
1457 if(zCc_GetSpecSlaveIgnoreWaitDSCI6(ZCC_S_BSYT_S)||
1458 zCc_GetSpecSlaveIgnoreWaitDSCI6(ZCC_S_TKYT_S)|| // fast dududu is being ....
1459 zCc_GetSpecSlaveIgnoreWaitDSCI6(ZCC_S_SIL_S)) // fast dududu is end ....
1460 {
1461 zCc_SendAtChldReq(10+cid);
1462 break;
1463 }
1464 }
1465 else if(g_Cc_CallDetail.state==ZCC_M_RELEASE_S)
1466 {
1467 int dsci6_cid = zCc_Find_waitDSCI6_cid();
1468 if(dsci6_cid!=0 && dsci6_cid==cid)
1469 {
1470 zCc_SendAtChldReq(10+cid);
1471 zCc_InitSlaveObj(cid);
1472 ccapp_log("zCc_Find_waitDSCI6_cid and skip this call %s", num);
1473
1474 char temp[200];
1475 sprintf(temp, "echo \"%s get error incoming call cid=%d num=%s\" > /tmp/log.ccapp.callin.err",
1476 get_local_date_time(), cid, num);
1477 soft_system(temp);
1478 break;
1479 }
1480 }
1481
1482 ptMsgBuf->usMsgCmd = ZCC_SINVITE_E;
1483 memset(g_Cc_CallDetail.number, 0, sizeof(g_Cc_CallDetail.number));
1484 memcpy(g_Cc_CallDetail.number, num, ZDIAL_NUM_MAX);
1485 break;
1486 case 5://Z_MMIACC_CALL_STATE_MT_WAITING
1487 if(g_Cc_CallDetail.state==ZCC_M_RINGING_S && zCc_find_held_cid())
1488 {
1489 zCc_SendAtChldReq(10+cid);
1490 break;
1491 }
1492 else if(is_onecall_in_help_and_ready_to_input_new_call())
1493 {
1494 zCc_SendAtChldReq(10+cid);
1495 break;
1496 }
1497
1498 if(zCc_CallCount()>=2)
1499 {
1500 zCc_SendAtChldReq(10+cid);
1501 break;
1502 }
1503
1504 ptMsgBuf->usMsgCmd = ZCC_CIDCW_E;
1505 memset(g_Cc_CallDetail.number, 0, sizeof(g_Cc_CallDetail.number));
1506 memcpy(g_Cc_CallDetail.number, num, ZDIAL_NUM_MAX);
1507 break;
1508 case 6://Z_MMIACC_CALL_STATE_END
mj.qu77232092025-08-14 23:35:05 -07001509 cfg_set("voice_status", "");
zw.wang96c5d4e2025-07-01 11:35:13 +08001510 zCcApp_Vts_CleanReq();
1511 if(zCc_findCID_by_number(num)==0)
1512 break;
1513
1514 ptMsgBuf->usMsgCmd = dir?ZCC_SDISCN_MT_E: ZCC_SDISCN_MO_E;
1515 g_Cc_CallDetail.chupSent = 0;
1516
1517 memset(slave_callout, 0, sizeof(slave_callout));
1518 n = zCc_find_all_callout(slave_callout);
1519
1520 ccapp_log("DscInd 6, dir=%d is_callout=%d, find_all_callout=%d",
1521 dir,
1522 g_Cc_CallDetail.slaveObj[cid].is_callout,
1523 n);
1524
1525 if(dir==0 && g_Cc_CallDetail.slaveObj[cid].is_callout == TRUE)
1526 {
1527 if(n<1 || (n==1 && slave_callout[0]==cid))
1528 SLIC_PolarityReverse(0, FALSE);
1529 }
1530
1531 if ((cid == g_Cc_CallDetail.ringCid) && (ZCC_TONE_CIDCW_A == g_Cc_CallDetail.lastTone))
1532 {
1533 SLIC_Stop_Signal(0, 0);//Í£Ö¹ºô½ÐµÈ´ýÒô
1534 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DsciIndProc: SLIC_Stop_Signal <---\n",__FUNCTION__);
1535 g_Cc_CallDetail.slaveObj[0].tone = ZCC_TONE_OFF_A;
1536 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
1537 }
1538
1539 if(1 == g_chup_flag && 1 == dir && 0 == strcmp(callback_enable, "1") && 1 == check_phone_number_in_file(callback_number, "/cache/call_back_list"))
1540 {
1541 g_chup_flag = 0;
1542 msgBuf.usMsgCmd = ZCC_SEIZE_E;
1543 msgBuf.src_id = MODULE_ID_SLIC;
1544 zCc_SendMsgToSub(&msgBuf);
1545
1546 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DsciIndProc: send ZCC_SEIZE_E to sub <---\n",__FUNCTION__);
1547 }
1548 else
1549 {
1550 cfg_set("callback_number", "");
1551 }
1552
1553 break;
1554 case 2://Z_MMIACC_CALL_STATE_MO_DIALING
1555 ptMsgBuf->usMsgCmd = ZCC_SDIALLING_E;
1556 break;
1557 case 7://Z_MMIACC_CALL_STATE_MT_CONNREQ
1558 case 8://Z_MMIACC_CALL_STATE_DISC
1559 default:
1560 break;
1561 }
1562 return 0;
1563}
1564
1565
1566
1567SINT32 zCc_RecvZvoiceChnl(MSG_BUF *ptMsgBuf)
1568{
1569 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","RECV zvoicechnl!!!<---\n");
1570 //if (g_Cc_CallDetail.state == ZCC_M_RELEASE_S)
1571 //{
1572 // return 0;
1573 //}
1574 printf("[ccapp_debug]:recv zvoicechnl and send to local cc\n");
1575
1576 //ptMsgBuf->usMsgCmd = ZCC_NO_E;
1577 //ptMsgBuf->usMsgCmd = ZCCAPP_ATIND_IMSPLUS;
1578 //ptMsgBuf->usSourceModuleID = MSG_ID_CALL_CTRL;
1579
1580 zCc_SendMsgToSub(ptMsgBuf); /* ·¢¸øÖ÷Ïß³Ì */
1581 return 0;
1582}
1583
1584
1585
1586SINT32 zCc_RecvImsplusInd(MSG_BUF *ptMsgBuf)
1587{
1588 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","RECV imsplusind!!!<---\n");
1589 //if (g_Cc_CallDetail.state == ZCC_M_RELEASE_S)
1590 //{
1591 // return 0;
1592 //}
1593 printf("[ccapp_debug]:recv imsplus and send to local cc\n");
1594
1595 //ptMsgBuf->usMsgCmd = ZCC_NO_E;
1596 //ptMsgBuf->usMsgCmd = ZCCAPP_ATIND_IMSPLUS;
1597 //ptMsgBuf->usSourceModuleID = MSG_ID_CALL_CTRL;
1598
1599 zCc_SendMsgToSub(ptMsgBuf); /* ·¢¸øÖ÷Ïß³Ì */
1600 return 0;
1601}
1602SINT32 zCc_RecvRsp(MSG_BUF *ptMsgBuf)
1603{
1604 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","RECV at_rsp %d !!!<---\n", ptMsgBuf->usMsgCmd);
1605
1606 zCc_SendMsgToSub(ptMsgBuf); /* ·¢¸øÖ÷Ïß³Ì */
1607 return 0;
1608}
1609
1610static inline unsigned char zCc_MapVoiceChnlAct(unsigned char act)
1611{
1612 if (act == 3)
1613 {
1614 return 0; //gsm
1615 }
1616 else if (act == 5)
1617 {
1618 return 2; //wcdma
1619 }
1620 else if (act == 15)
1621 {
1622 return 1;
1623 }
1624 else
1625 {
1626 assert(0);
1627 }
1628 return 3;
1629}
1630
1631static unsigned char g_zCc_VoiceOpenSucc = 1;
1632
1633static T_Voice_Para g_zCc_VoicePara_bak;
1634
1635static unsigned int g_zCc_pcm_bak = 0; /*new add*/
1636
1637SINT32 zCc_ZvoicechnlProc(MSG_BUF *ptMsgBuf)
1638{
1639 T_zCcApp_VoiceChnl tVoiceChnl;
1640 T_Voice_Para tVoicePara = {0};
1641 memcpy(&tVoiceChnl, (T_zCcApp_VoiceChnl*)ptMsgBuf->aucDataBuf, sizeof(T_zCcApp_VoiceChnl));
1642
1643 tVoicePara.mode = zCc_MapVoiceChnlAct(tVoiceChnl.act);
1644 tVoicePara.codec_type = tVoiceChnl.codetype; //0-nb, 1-wb
1645 if ( tVoicePara.codec_type == 1)
1646 tVoicePara.clock_rate = 16000;
1647 else
1648 tVoicePara.clock_rate = 8000;
1649
1650 tVoicePara.codec_path = tVoiceChnl.amrpath;
1651
1652 printf("[ccapp_debug]:recv zvoicechnl, tVoicePara=%d,%d,%d,%d\n",tVoicePara.clock_rate,tVoicePara.mode,tVoicePara.codec_type,tVoicePara.codec_path);
1653 if (tVoiceChnl.op == 1)
1654 {
1655 /* new add begin*/
1656 //start voice
1657 if (/*voice_open(&tVoicePara) != 0 ||*/ g_Cc_CallDetail.state == ZCC_M_RINGING_S)
1658 {
1659 printf("[ccapp]:voice open fail");//´ò¿ªvoiceʧ°Ü£¬»òÕßÕñÁå̬ÊÕµ½zvoicechnl£¬¶¼ÈÏΪʧ°Ü
1660 g_zCc_VoiceOpenSucc = 0;
1661 g_zCc_VoicePara_bak = tVoicePara;
1662 }
1663 else if (g_Cc_CallDetail.state == ZCC_M_SEIZE_S)
1664 {
1665
1666 if ( voice_open(&tVoicePara) != 0)
1667
1668 {
1669
1670 printf("[ccapp_debug]:mo call voice_open fail!!!\n");
1671
1672 voice_close(&tVoicePara);
1673
1674 }
1675
1676 }
1677/* new add end*/
1678 printf("[ccapp_debug]:voice_open:rlt=%d\n",g_zCc_VoiceOpenSucc);
1679
1680 }
1681 else
1682 {
1683 //close voice
1684 g_zCc_VoiceOpenSucc = 1;
1685 voice_close(&tVoicePara);
1686 printf("[ccapp_debug]:voice_close:rlt=%d\n",g_zCc_VoiceOpenSucc);
1687
1688 }
1689 return 0;
1690}
1691
1692
1693
1694
1695
1696SINT32 zCc_ZimsplusProc(MSG_BUF *ptMsgBuf)
1697{
1698 int act = 0;
1699 int rate = 0;
1700 T_zCcApp_ImsplusInd tImsplusInd = {0};
1701
1702 memcpy(&tImsplusInd, (T_zCcApp_ImsplusInd*)ptMsgBuf->aucDataBuf, sizeof(T_zCcApp_ImsplusInd));
1703 act = tImsplusInd.act;
1704 rate = tImsplusInd.rate;
1705 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: act = %d rate = %d new!!!<---\n",__FUNCTION__, act, rate);
1706 printf("[ccapp_debug]:recv imsplus, tImsplusInd=%d,%d\n",tImsplusInd.act,tImsplusInd.rate);
1707
1708
1709 if (act == 0)
1710 {
1711 SLIC_Stop_PCM();
1712 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Stop_PCM <---\n",__FUNCTION__);
1713 }
1714 else if (act == 1)
1715 {
1716 /* new add begin*/
1717 if ( g_Cc_CallDetail.state == ZCC_M_RINGING_S)
1718 {
1719 g_zCc_pcm_bak = rate;
1720 return 0;
1721 }
1722 /* new add end */
1723
1724 if (rate == 8000)
1725 {
1726 SLIC_PCM_Set_NB();
1727 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_PCM_Set_NB <---\n",__FUNCTION__);
1728 SLIC_Start_PCM();
1729 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Start_PCM <---\n",__FUNCTION__);
1730 }
1731 else if (rate == 16000)
1732 {
1733 SLIC_PCM_Set_WB();
1734 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_PCM_Set_WB <---\n",__FUNCTION__);
1735 SLIC_Start_PCM();
1736 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Start_PCM <---\n",__FUNCTION__);
1737 }
1738 }
1739 else if (act == 2)//¹Ø±Õpcm£¬·Å±¾µØ»ØÁåÒô
1740 {
1741 if (ZCC_S_RINGBACK_S != g_Cc_CallDetail.slaveObj[rate].state)
1742 {
1743 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: act 2,cid err <---\n",__FUNCTION__);
1744 return 0;
1745 }
1746 SLIC_Stop_PCM();
1747 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Stop_PCM <---\n",__FUNCTION__);
1748 g_Cc_CallDetail.slaveObj[rate].tone = ZCC_TONE_RB_A;
1749 }
1750 else if (act == 3)//ºóÐø»áÔÙÓÐact1Éϱ¨£¬ËùÒÔ´Ëʱ²»´ò¿ªpcm
1751 {
1752 SLIC_Stop_Signal(0,0);
1753 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Stop_Signal <---\n",__FUNCTION__);
1754
1755 zCc_SendAtImsPlusReq(rate,0);
1756 g_Cc_CallDetail.slaveObj[rate].tone = ZCC_TONE_OFF_A;
1757 }
1758 return 0;
1759}
1760SINT32 zCc_RecvZcpiInd(MSG_BUF *ptMsgBuf)
1761{
1762 //ptMsgBuf->usMsgCmd = ZCCAPP_ATIND_ZCPI;
1763 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","RECV zcpiind!!!<---\n");
1764 //ptMsgBuf->usSourceModuleID = MSG_ID_CALL_CTRL;
1765 zCc_SendMsgToSub(ptMsgBuf); /* ·¢¸øÖ÷Ïß³Ì */
1766 return 0;
1767}
1768
1769SINT32 zCc_ZcpiIndProc(MSG_BUF *ptMsgBuf)
1770{
1771 int state = 0;
1772 int cid = 0;
1773 int progdsp = 0;
1774 T_zCcApp_ZcpiInd tZcpiInd = {0};
1775
1776 memcpy(&tZcpiInd, (T_zCcApp_ZcpiInd*)ptMsgBuf->aucDataBuf, sizeof(T_zCcApp_ZcpiInd));
1777 state = tZcpiInd.state;
1778 cid = tZcpiInd.cid;
1779 progdsp = tZcpiInd.progdsp;
1780
1781 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZcpiIndProc: cid= %d, state=%d, progdsp=%d <---\n",__FUNCTION__,cid,state,progdsp);
1782 if (5 == state)
1783 {
1784 ptMsgBuf->dst_id = cid;
1785 ptMsgBuf->usMsgCmd = ZCC_RESOURCE_READY_E;
1786 g_Cc_CallDetail.resourceReady = 1;
1787 }
1788 else if (6 == state)
1789 {
1790 g_Cc_CallDetail.resourceReady = 0;
1791 }
1792
1793 if (8 == progdsp)
1794 {
1795 SLIC_Start_PCM();
1796 }
1797
1798 return 0;
1799}
1800
1801LONG zCcApp_send_message(unsigned short Msg_cmd,unsigned short us_DataLen,unsigned char *pData)
1802{
1803 ipc_send_message(MODULE_ID_CALL_CTRL, MODULE_ID_AT_CTL, Msg_cmd, us_DataLen, (unsigned char *)pData,0);
1804 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg_cmd is %d<---\n",__FUNCTION__, Msg_cmd);
1805
1806 return 0;
1807}
1808
1809VOID zCcApp_Dial(char *ptMsgBuf)
1810{
1811 SINT32 ret = -1;
1812 MSG_BUF stMsg;
1813 LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG);
1814 T_zCcapp_CallMoReq tcallReq = {0};
1815
1816 memset(tcallReq.number, 0, sizeof(tcallReq.number));
1817 //strncpy(tcallReq.number, ptMsgBuf,strlen(ptMsgBuf));
1818 strncpy(tcallReq.number, ptMsgBuf,sizeof(tcallReq.number)-1);
1819 zCcApp_send_message(MSG_CMD_ATD_DIAL_REQ, sizeof(T_zCcapp_CallMoReq), (unsigned char *) &tcallReq);
1820 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_ATD_DIAL_REQ<---\n",__FUNCTION__);
1821
1822}
1823SINT32 zCcApp_Ccfc(T_zCcapp_CcfcReq *ptccfcreq)
1824{
1825 SINT32 ret = -1;
1826 MSG_BUF stMsg;
1827 LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG);
1828
1829 zCcApp_send_message(MSG_CMD_CCFC_REQ, sizeof(T_zCcapp_CcfcReq), (unsigned char *) ptccfcreq);
1830 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_CCFC_REQ<---\n",__FUNCTION__);
1831
1832 return 0;
1833}
1834SINT32 zCcApp_Clck(T_zCcapp_ClckReq *ptclckreq)
1835{
1836 SINT32 ret = -1;
1837 MSG_BUF stMsg;
1838 LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG);
1839
1840 zCcApp_send_message( MSG_CMD_CLCK_REQ, sizeof(T_zCcapp_ClckReq), (unsigned char *) ptclckreq);
1841 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_CLCK_REQ<---\n",__FUNCTION__);
1842
1843 return 0;
1844}
1845
1846SINT32 zCcApp_Answer(VOID)
1847{
1848 SINT32 ret = -1;
1849 MSG_BUF stMsg;
1850 LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG);
1851
1852 zCcApp_send_message(MSG_CMD_ATA_REQ, 0, NULL);
1853 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_ATA_REQ<---\n",__FUNCTION__);
1854
1855 return 0;
1856}
1857
1858SINT32 zCcApp_Chup(void)
1859{
1860 SINT32 ret = -1;
1861 MSG_BUF stMsg;
1862 LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG);
1863
1864 zCcApp_send_message(MSG_CMD_CHUP_REQ, 0, NULL);
1865 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg isMSG_CMD_CHUP_REQ<---\n",__FUNCTION__);
1866
1867 return 0;
1868}
1869
1870//µ±ÉÏÒ»¸öVTSûÓÐÊÕµ½OKǰ£¬ÆäËûµÄVTSÈ«²¿»º´æÔÚÁ´±íÀ´ýÊÕµ½ÉÏÒ»¸öOKʱÔÚÏ·¢ÏÂÒ»¸ö
1871//¶¼ÔÚmainÏ̴߳¦Àí£¬ÎÞÐ軥³â
1872typedef struct {
1873 struct list_head list;
1874 T_zCcapp_VtsReq vts;
1875}T_zCcapp_VtsReq_list;
1876
1877static LIST_HEAD(ccapp_vts_waitqueue);
1878static int ccapp_vts_flag = 0;
1879
1880void zCcApp_Vts_CleanReq(void)
1881{
1882 struct list_head *head = &ccapp_vts_waitqueue;
1883 T_zCcapp_VtsReq_list *l, *tmp;
1884
1885 if(!list_empty(head))
1886 {
1887 list_for_each_entry_safe(l, tmp, head, list)
1888 {
1889 list_del(&l->list);
1890 free(l);
1891 }
1892 ccapp_vts_flag = 0;
1893 }
1894}
1895
1896void zCcApp_Vts_Rsp(void)
1897{
1898 struct list_head *head = &ccapp_vts_waitqueue;
1899 printf("[ccapp_debug]:Vts_Rsp flag=%d\n",ccapp_vts_flag);
1900 if(list_empty(head))
1901 {
1902 ccapp_vts_flag = 0;
1903 }
1904 else
1905 {
1906 T_zCcapp_VtsReq_list *node = list_entry(head->next,T_zCcapp_VtsReq_list,list);
1907
1908 zCcApp_send_message(MSG_CMD_VTS_REQ, sizeof(T_zCcapp_VtsReq), (unsigned char *) &node->vts);
1909 ccapp_vts_flag = 1;
1910 list_del(&node->list);
1911 free(node);
1912 }
1913}
1914
1915SINT32 zCcApp_Vts(char* dtmfchar)
1916{
1917 T_zCcapp_VtsReq tvtsreq = {0};
1918 struct list_head *head = &ccapp_vts_waitqueue;
1919
1920 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","vtschar=%s<---\n",dtmfchar);
1921 tvtsreq.dtmfchar=*dtmfchar;
1922 printf("[ccapp_debug]:Vts_Req flag=%d\n",ccapp_vts_flag);
1923 if(list_empty(head) && ccapp_vts_flag == 0)
1924 {
1925 zCcApp_send_message(MSG_CMD_VTS_REQ, sizeof(T_zCcapp_VtsReq), (unsigned char *) &tvtsreq);
1926 ccapp_vts_flag = 1;
1927 }
1928 else
1929 {
1930 T_zCcapp_VtsReq_list *node = (T_zCcapp_VtsReq_list *)malloc(sizeof(T_zCcapp_VtsReq_list));
1931 if(node == NULL)
1932 {
1933 printf("[ccapp_debug]: zCcApp_Vts malloc fail!!!\n");
1934 return 0;
1935 }
1936 memset(node, 0 , sizeof(T_zCcapp_VtsReq_list));
1937 node->vts.dtmfchar = tvtsreq.dtmfchar;
1938 list_add_tail(&node->list,head);
1939 }
1940 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_VTS_REQ<---\n",__FUNCTION__);
1941
1942 return 0;
1943}
1944SINT32 zCcApp_SetImsPlus(int rate, int setfg)
1945{
1946 SINT32 ret = -1;
1947 MSG_BUF stMsg;
1948 LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG);
1949 T_zCcapp_ImsplusReq timsplusreq= {0};
1950
1951 timsplusreq.act = rate;
1952 timsplusreq.setfg = setfg;
1953
1954 zCcApp_send_message(MSG_CMD_ZIMSPLUS_REQ, sizeof(T_zCcapp_ImsplusReq), (unsigned char *) &timsplusreq);
1955 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_ZIMSPLUS_REQ<---\n",__FUNCTION__);
1956
1957 return 0;
1958}
1959
1960SINT32 zCcApp_Chld(int chldtype)
1961{
1962 SINT32 ret = -1;
1963 MSG_BUF stMsg;
1964 LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG);
1965
1966 T_zCcapp_ChldReq tchldreq = {0};
1967
1968 tchldreq.type = chldtype;
1969
1970 zCcApp_send_message(MSG_CMD_CHLD_REQ, sizeof(T_zCcapp_ChldReq), (unsigned char *) &tchldreq);
1971 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_CHLD_REQ[%d]<---\n",__FUNCTION__,chldtype);
1972
1973 return 0;
1974}
1975
1976SINT32 zCcApp_AtIndRspProc(MSG_BUF *ptMsgBuf)
1977{
1978 SINT32 i ;
1979 SINT32 ret = -1;
1980 for(i=0;i< gCcAppRecvAtIndProcCnt;i++)
1981 {
1982 if(ptMsgBuf->usMsgCmd == gCcAppRecvAtIndProc[i].AtIndCmd)
1983 {
1984 if(NULL!= gCcAppRecvAtIndProc[i].RecvAtIndProcFun)
1985 {
1986 ret = gCcAppRecvAtIndProc[i].RecvAtIndProcFun(ptMsgBuf);
1987 }
1988 break;
1989 }
1990 }
1991
1992 return ret;
1993}
1994VOID zCc_MReleaseState(MSG_BUF *ptMsgBuf)
1995{
1996 CHAR voip_status[ZDIAL_NUM_MAX] = {0};
1997 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MReleaseState ptMsgBuf->usMsgCmd = %d\n",__FUNCTION__,ptMsgBuf->usMsgCmd);
1998
1999 printf("[ccapp_debug]: Release State Recv MsgCmd: %d\n",ptMsgBuf->usMsgCmd);
2000
2001 switch (ptMsgBuf->usMsgCmd)
2002 {
2003 case ZCC_SEIZE_E: // ͻȜ
2004 // slave[0] to play dial tone
2005 g_Cc_CallDetail.evt[0] = ZCC_DIAL_E;
2006 g_Cc_CallDetail.state = ZCC_M_SEIZE_S;
2007 g_Cc_CallDetail.chupSent = FALSE;
2008 g_Cc_CallDetail.hookofffg = TRUE;
2009 if (g_Cc_CallDetail.ringCid)// ¾Ü¾øµÈ´ý×ÊԴ״̬µÄincoming call
2010 {
2011 zCc_SendAtHangupReq();
2012 g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].waitDSCI6 = 1;
2013 }
2014
2015#ifndef TEST_CCAPP
2016 cfg_get_item("voip_status",voip_status,sizeof(voip_status));
2017
2018 if (0 != strcmp("ledblink" , voip_status))
2019#endif
2020 {
2021 zCc_SetLedStatus("ledblink");
2022 }
2023 break;
2024
2025 case ZCC_SINVITE_E:
2026 g_Cc_CallDetail.evt[ptMsgBuf->dst_id] = ZCC_SINVITE_E;
2027 //g_Cc_CallDetail.state = ZCC_M_RINGING_S; È·ÈÏ×ÊÔ´·ÖÅäºóÔÙǨ״̬
2028 break;
2029
2030 case ZCC_RESOURCE_READY_E:
2031 ccapp_log("g_Cc_CallDetail.ringCid=%d", g_Cc_CallDetail.ringCid);
2032 if (g_Cc_CallDetail.ringCid)
2033 {
2034 g_Cc_CallDetail.evt[g_Cc_CallDetail.ringCid] = ZCC_RESOURCE_READY_E;
2035 }
2036 break;
2037
2038 case ZCC_SDISCN_MO_E:
2039 case ZCC_SDISCN_MT_E:
2040 g_Cc_CallDetail.evt[ptMsgBuf->dst_id] = ptMsgBuf->usMsgCmd;
2041 break;
2042
2043 case ZCC_RELEASE_E:
2044 case ZCC_FLASH_E:
2045 default:
2046 // do nothing
2047 break;
2048 }
2049}
2050
2051pthread_t slic_ring_test_pid;
2052void* slic_ring_test_thread(void * ptr)
2053{
2054 SIGNAL_DATA tSig;
2055 while(1)
2056 {
2057 sleep(30);
2058 printf("ring stop\n");
2059 SLIC_Stop_Signal(0, RING_SIGNAL);
2060 zCc_SetLedStatus("ledoff");
2061
2062 sleep(30);
2063 printf("ringing\n");
2064 memset(&tSig, 0, sizeof(tSig));
2065 tSig.signal_type = RING_SIGNAL;
2066 strcpy(g_Cc_CallDetail.number, "1234567890");
2067 strncpy(tSig.cid, g_Cc_CallDetail.number,sizeof(tSig.cid)-1);
2068 get_local_datetime(tSig.date_time);
2069 ccapp_log("local test call RING_SIGNAL,number = %s\n",g_Cc_CallDetail.number);
2070 SLIC_Play_Signal(0, 0, &tSig);
2071 zCc_SetLedStatus("ledblink");
2072 }
2073 return NULL;
2074}
2075
2076VOID zCc_MRingingState(MSG_BUF *ptMsgBuf)
2077{
2078 int held_call_cid = 0;
2079 int incoming_call_cid = 0;
2080 int shall_ring_cid;
2081
2082 MSG_BUF msgBuf = {0};
2083 char callback_enable[4] = {0};
2084 char callback_number[20] = {0};
2085 cfg_get_item("callback_enable", callback_enable, sizeof(callback_enable));
2086 cfg_get_item("callback_number", callback_number, sizeof(callback_number));
2087
2088 SIGNAL_DATA tSig;
2089
2090 CHAR voip_status[ZDIAL_NUM_MAX] = {0};
2091 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MRingingState ptMsgBuf->usMsgCmd = %d\n",__FUNCTION__,ptMsgBuf->usMsgCmd);
2092 switch (ptMsgBuf->usMsgCmd)
2093 {
2094 case ZCC_SEIZE_E: // ͻȜ
2095 g_Cc_CallDetail.state = ZCC_M_SEIZE_S;
2096 SLIC_Stop_Signal(0, RING_SIGNAL);
2097 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MRingingState: SLIC_Stop_Signal <---\n",__FUNCTION__);
2098 if (g_zCc_VoiceOpenSucc == 0)
2099 {
2100 g_zCc_VoiceOpenSucc = 1;
2101 voice_open(&g_zCc_VoicePara_bak);
2102 /* new add begin */
2103 if (g_zCc_pcm_bak == 8000)
2104 {
2105 SLIC_PCM_Set_NB();
2106 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_PCM_Set_NB <---\n",__FUNCTION__);
2107 SLIC_Start_PCM();
2108 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Start_PCM <---\n",__FUNCTION__);
2109 }
2110 else if (g_zCc_pcm_bak == 16000)
2111 {
2112 SLIC_PCM_Set_WB();
2113 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_PCM_Set_WB <---\n",__FUNCTION__);
2114 SLIC_Start_PCM();
2115 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Start_PCM <---\n",__FUNCTION__);
2116 }
2117 g_zCc_pcm_bak = 0;
2118 /* new add end */
2119 }
2120
2121 g_Cc_CallDetail.chupSent = FALSE;
2122
2123 ccapp_log("ZCC_SEIZE_E held_cid=%d held_incoming_cid=%d",
2124 zCc_find_held_cid(),
2125 zCc_find_held_incoming_cid());
2126
2127 if(local_test_call_st==LocalTestCallST_Ring)
2128 {
2129 /*memset(&tSig, 0, sizeof(tSig));
2130 tSig.signal_type= TONE_SIGNAL;
2131 tSig.tone_type = TONE_TKY;
2132 SLIC_Play_Signal(0, 0, &tSig);*/
2133 if(local_test_call_type == LocalTestCallType_LOOP)
2134 pthread_cancel(slic_ring_test_pid);
2135
2136 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
2137 g_Cc_CallDetail.evt[0]= ZCC_NO_E;
2138 g_Cc_CallDetail.slaveObj[0].sMsg = ZCC_SNO_M;
2139
2140 local_test_call_st = LocalTestCallST_End;
2141
2142 //system("echo loop_1 >> /tmp/log.ccapp.vploop");
2143 //system("( sleep 1 && at_cmd AT+VPLOOP=1 ) &");
2144 cfg_set("tz_vploop", "1");
2145 ipc_send_message(MODULE_ID_CALL_CTRL_LOCAL,
2146 MODULE_ID_AT_CTL,
2147 MSG_CMD_SET_VPLOOP_REQ,
2148 0,
2149 NULL,
2150 0);
2151
2152 zCc_ShowAllSlaveWithTips("testCall-end");
2153 break;
2154 }
2155
2156 incoming_call_cid = zCc_find_held_incoming_cid();
2157 ccapp_log("incoming_call_cid=%d is_cidcw=%d",
2158 incoming_call_cid,
2159 g_Cc_CallDetail.slaveObj[incoming_call_cid].is_cidcw);
2160
2161 if(zCc_find_held_cid())
2162 {
2163 zCc_SendAtChldReq(1);
2164 }
2165 else if(incoming_call_cid)
2166 {
2167 if(g_Cc_CallDetail.slaveObj[incoming_call_cid].is_cidcw == TRUE)
2168 zCc_SendAtChldReq(1);
2169 else
2170 {
2171 if (g_Cc_CallDetail.ringCid)
2172 {
2173 g_Cc_CallDetail.evt[g_Cc_CallDetail.ringCid] = ZCC_CNCT_E;
2174 zCc_SendAtAnswerReq();
2175 }
2176 }
2177 }
2178 else
2179 {
2180 if (g_Cc_CallDetail.ringCid)
2181 {
2182 g_Cc_CallDetail.evt[g_Cc_CallDetail.ringCid] = ZCC_CNCT_E;
2183 zCc_SendAtAnswerReq();
2184 }
2185 }
2186
2187 if(0 == strcmp(callback_enable, "1") && 1 == check_phone_number_in_file(callback_number, "/cache/call_back_list"))
2188 {
2189 g_chup_flag = 1;
2190 msgBuf.usMsgCmd = ZCC_RELEASE_E;
2191 msgBuf.src_id = MODULE_ID_SLIC;
2192 zCc_SendMsgToSub(&msgBuf);
mj.qu435a4e42025-08-06 19:00:49 -07002193
mj.qud2d5ce12025-08-10 18:51:34 -07002194 /*fix the issue of probability callback failure, call has not been established yet, with a probability of hanging up*/
mj.qu435a4e42025-08-06 19:00:49 -07002195 sleep(1);
zw.wang96c5d4e2025-07-01 11:35:13 +08002196
2197 zCc_SendAtHangupReq();
2198 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MRingingState: ZCC_RELEASE_E <---\n",__FUNCTION__);
2199 }
2200
2201 break;
2202
2203// case ZCC_SINVITE_E:
2204 case ZCC_SDISCN_MT_E:
2205 case ZCC_SDISCN_MO_E:
2206 if(check_incoming_call_is_in_slave(ptMsgBuf)==0)
2207 break;
2208
2209 g_Cc_CallDetail.evt[ptMsgBuf->dst_id] = ptMsgBuf->usMsgCmd;
2210 g_Cc_CallDetail.state = ZCC_M_RELEASE_S;
2211 SLIC_Stop_Signal(0, RING_SIGNAL);
2212 g_zCc_VoiceOpenSucc = 1;
2213 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MRingingState: SLIC_Stop_Signal <---\n",__FUNCTION__);
2214#ifndef TEST_CCAPP
2215 cfg_get_item("voip_status",voip_status,sizeof(voip_status));
2216
2217 if (0 != strcmp("ledoff" , voip_status ))
2218#endif
2219 {
2220 zCc_SetLedStatus("ledoff");
2221 }
2222
2223 shall_ring_cid = 0;
2224 held_call_cid = zCc_find_held_cid();
2225 incoming_call_cid = zCc_find_held_incoming_cid();
2226 if(held_call_cid && (ptMsgBuf->dst_id!=held_call_cid))
2227 shall_ring_cid = held_call_cid;
2228 else if(incoming_call_cid && (ptMsgBuf->dst_id!=incoming_call_cid))
2229 shall_ring_cid = incoming_call_cid;
2230
2231 if(shall_ring_cid!=0)
2232 {
2233 memset(&tSig, 0, sizeof(tSig));
2234 g_Cc_CallDetail.state = ZCC_M_RINGING_S;
2235 tSig.signal_type = RING_SIGNAL;
2236 /*memcpy(tSig.cid,
2237 g_Cc_CallDetail.slaveObj[shall_ring_cid].number,
2238 strlen(g_Cc_CallDetail.slaveObj[shall_ring_cid].number));*/
2239 strncpy(tSig.cid, g_Cc_CallDetail.slaveObj[shall_ring_cid].number, sizeof(tSig.cid)-1);
2240 get_local_datetime(tSig.date_time);
2241 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_RunMaster RING_SIGNAL,number = %s\n",__FUNCTION__,g_Cc_CallDetail.slaveObj[held_call_cid].number);
2242 SLIC_Play_Signal(0, 0, &tSig);
2243 zCc_SetLedStatus("ledblink");
2244 }
2245 break;
2246
2247 default:
2248 // do nothing
2249 break;
2250 }
2251}
2252
2253VOID zCc_MSeizeState(MSG_BUF *ptMsgBuf)
2254{
2255 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ptMsgBuf->usMsgCmd = %d\n",__FUNCTION__,ptMsgBuf->usMsgCmd);
2256 UINT8 slave = (UINT8)ptMsgBuf->dst_id;
2257 UINT8 callCnt = 0;
2258 UINT8 ret = 0;
2259 SINT32 chldret = -1;
2260 UINT8 tmpslave = 0;
2261 CHAR voip_status[ZDIAL_NUM_MAX] = {0};
2262 char hotline_time[4] = {0};
2263
2264 char callback_enable[4] = {0};
2265 char callback_number[20] = {0};
2266 cfg_get_item("callback_enable", callback_enable, sizeof(callback_enable));
2267 cfg_get_item("callback_number", callback_number, sizeof(callback_number));
2268
2269 printf("[ccapp_debug]: Seize State Recv MsgCmd: %d,localtest=%d\n",ptMsgBuf->usMsgCmd,local_test_call_st);
2270
2271 switch (ptMsgBuf->usMsgCmd)
2272 {
2273 case ZCC_DTMF_E: // ²¦ºÅ
2274 // slave[0] dial , or other call's DTMF
2275 ccapp_log("--> ZCC_DTMF_E[%c] lastTone=%d Count=%d Held=%d Active=%d getSlave(DACCM)=%d getSlave(RINGBACK)=%d ringCid=%d dig=%s",
2276 ptMsgBuf->aucDataBuf[0],
2277 g_Cc_CallDetail.lastTone,
2278 zCc_CallCount(),
2279 zCc_HeldCall(),
2280 zCc_ActiveCall(),
2281 zCc_GetSpecSlave(ZCC_S_DACCM_S),
2282 zCc_GetSpecSlave(ZCC_S_RINGBACK_S),
2283 g_Cc_CallDetail.ringCid,
2284 g_Cc_CallDetail.digits);
2285 printf("[ccapp_debug]: ZCC_DTMF_E[%c] lastTone=%d Count=%d Held=%d Active=%d getSlave(DACCM)=%d getSlave(RINGBACK)=%d ringCid=%d dig=%s\n",
2286 ptMsgBuf->aucDataBuf[0],
2287 g_Cc_CallDetail.lastTone,
2288 zCc_CallCount(),
2289 zCc_HeldCall(),
2290 zCc_ActiveCall(),
2291 zCc_GetSpecSlave(ZCC_S_DACCM_S),
2292 zCc_GetSpecSlave(ZCC_S_RINGBACK_S),
2293 g_Cc_CallDetail.ringCid,
2294 g_Cc_CallDetail.digits);
2295
2296 /* callwait ringback but he drop then we hookflash+1
2297lastTone=6 Count=2 Held=1 Active=0 getSlave(DACCM)=0 getSlave(RINGBACK)=2 ringCid=0 dig[0]=F
2298 */
2299 if ((g_Cc_CallDetail.lastTone == ZCC_TONE_BSY_A) || (g_Cc_CallDetail.lastTone == ZCC_TONE_TKY_A))//æÒôºÍÃùº¿Òô£¬²»´¦Àí°´¼üÏûÏ¢
2300 {
2301 zCc_ClearDigits();
2302 break;
2303 }
2304 callCnt = zCc_CallCount();
2305 if ( (g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A || callCnt == zCc_HeldCall()) //Ö»Óб£³Öºô½Ð£¬²¦ºÅ·¢Æðкô½Ð
2306 && g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN
2307 && 0 == zCc_ActiveCall())//·Å²¦ºÅÒô»òÒÑÓб£³Öºô½ÐʱÓû§²¦ºÅ,µÚÒ»¸ö×Ö·û£¬Åųýactive+heldʱÏ·¢F2
2308 {
2309 slave = zCc_GetSpecSlave(ZCC_S_IDLE_S);
2310 if (0 == slave )
2311 {
2312 return;
2313 }
2314 g_Cc_CallDetail.slaveObj[slave] = g_Cc_CallDetail.slaveObj[0];
2315 g_Cc_CallDetail.evt[slave] = ZCC_DTMF_E;
2316 DeleteSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT);
2317 zCc_InitSlaveObj(0);
2318 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ZCC_DTMF_E \n",__FUNCTION__);
2319 break;
2320 }
2321 else if ((g_Cc_CallDetail.lastTone == ZCC_TONE_SIL_A) && (0 != zCc_GetSpecSlave(ZCC_S_DACCM_S)))//¼ÌÐø²¦ºÅ
2322 {
2323 slave = zCc_GetSpecSlave(ZCC_S_DACCM_S);
2324 g_Cc_CallDetail.evt[slave] = ZCC_DTMF_E;
2325 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ZCC_DTMF_E \n",__FUNCTION__);
2326 break;
2327 }
2328 else if ((g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN) && ((0 != zCc_ActiveCall())
2329 ||((0 == zCc_ActiveCall()) && (0 != zCc_GetSpecSlave(ZCC_S_RINGBACK_S)))))//·¢dtmf
2330 {
2331 if (0 != zCc_ActiveCall())
2332 {
2333 slave = zCc_GetCallSlave(0);
2334 }
2335 else
2336 {
2337 slave = zCc_GetSpecSlave(ZCC_S_RINGBACK_S);
2338 }
2339 g_Cc_CallDetail.evt[slave] = ZCC_DTMF_E;
2340 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ZCC_DTMF_E \n",__FUNCTION__);
2341 break;
2342 }
2343 else if ((0 == zCc_ActiveCall()) && (0 == zCc_GetSpecSlave(ZCC_S_RINGBACK_S))
2344 && (g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN))//·ÇÎÈ̬·Ç»ØÁåÒô״̬ÊÕµ½×Ö·û£¬¶ªÆú
2345 {
2346 zCc_ClearDigits();
2347 return;
2348 }
2349 else
2350 {
2351 if (g_Cc_CallDetail.ringCid && (g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].tone == ZCC_TONE_CIDCW_A))//active+waiting+flashordtmf
2352 {
2353 DeleteSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT);
2354 if (g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN)
2355 {
2356 slave = zCc_GetSpecSlave(ZCC_S_TALKING_S);
2357 if (0 == slave )
2358 {
2359 return;
2360 }
2361 g_Cc_CallDetail.evt[slave] = ZCC_DTMF_E;
2362 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ZCC_DTMF_E \n",__FUNCTION__);
2363 break;
2364 }
2365 }
2366
2367 DeleteSoftTimer(ZCCAPP_TIMER_DTMF_DETECT);
2368 ret = zCc_DigitsMatch();
2369 if ((ZCC_NO_RESULT != ret && ZCC_MATCHERR != ret && g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A)
2370 ||(ZCC_MATCHERR == ret && g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A && 2 <= zCc_CallCount()))
2371 {//call waitingÊÕµ½flash4£¬Í£Ö¹²¦ºÅÒô»Ö¸´ºô½ÐµÈ´ýÒô
2372 SLIC_Stop_Signal(0, TONE_SIGNAL);
2373 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__);
2374 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
2375 if (g_Cc_CallDetail.slaveObj[0].tone != ZCC_TONE_OFF_A)
2376 {
2377 zCc_InitSlaveObj(0);
2378 }
2379 if (0 != zCc_ActiveCall())
2380 {
2381 SLIC_Start_PCM();
2382 }
2383 if ((ZCC_FLASH_1 == ret || ZCC_FLASH_2 == ret) && (g_Cc_CallDetail.ringCid != 0))//½ÓÌýwaiting call£¬ºô½ÐµÈ´ýÒôÓ¦Çå¿Õ
2384 {
2385 g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].tone = ZCC_TONE_OFF_A;
2386 }
2387 }
2388 zCc_DigitsMatchRltProc(ret);
2389 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ZCC_DTMF_E \n",__FUNCTION__);
2390 }
2391
2392 break;
2393
2394 case ZCC_SDIALLING_E: // ·¢³öÁËSIP INVITE »ò CC SETUP , ͨ¹ýÕâ¸öÏûÏ¢Éϱ¨ cid
2395 if (0 != zCc_GetDialingSlave(0))
2396 {
2397 tmpslave = zCc_GetDialingSlave(0);
2398 if (tmpslave != slave)
2399 {
2400 g_Cc_CallDetail.slaveObj[slave] = g_Cc_CallDetail.slaveObj[tmpslave];
2401 zCc_InitSlaveObj(tmpslave);
2402 }
2403 }
2404 break;
2405
2406 case ZCC_SRING_E:
2407 case ZCC_SANS_E:
2408 case ZCC_SINVITE_E:
2409 case ZCC_CIDCW_E:
2410 g_Cc_CallDetail.evt[slave] = ptMsgBuf->usMsgCmd;
2411 break;
2412
2413 case ZCC_SDISCN_MT_E:
2414 case ZCC_SDISCN_MO_E:
2415 { //cov m
2416 if(check_incoming_call_is_in_slave(ptMsgBuf)==0)
2417 break;
2418
2419 g_Cc_CallDetail.evt[slave] = ptMsgBuf->usMsgCmd;
2420
2421 T_zCcApp_DsciInd *ptr = ptMsgBuf->aucDataBuf;
2422
2423 /* somebody drop the call
2424 zCc_MSeizeState zCc_MSeizeState ptMsgBuf->usMsgCmd = 43
2425 zCc_MSeizeState ==> get MT/MO cid=1 num=13088877803 stat=6 inMp=0 getCnt=2
2426 zCc_MSeizeState slv=1 cid=0 held=1 stat=8
2427 zCc_MSeizeState slv=2 cid=0 held=0 stat=8
2428 zCc_STalkingState zCc_STalkingState g_Cc_CallDetail.evt[1] = 43
2429 */
2430 ccapp_log("==> get MT/MO cid=%d num=%s stat=%d inMp=%d getCnt=%d",
2431 ptr->cid, ptr->num, ptr->state, ptr->inMpty,
2432 zCc_CallCount());
2433
2434 for (tmpslave = 0; tmpslave < ZCC_SLAVES; tmpslave++)
2435 {
2436 if (g_Cc_CallDetail.slaveObj[tmpslave].state != ZCC_S_IDLE_S)
2437 {
2438 ccapp_log(" slave=%d cid=%d held=%d stat=%d",
2439 tmpslave,
2440 g_Cc_CallDetail.slaveObj[tmpslave].cid,
2441 g_Cc_CallDetail.slaveObj[tmpslave].heldcall,
2442 g_Cc_CallDetail.slaveObj[tmpslave].state);
2443 }
2444 }
2445
2446 if(zCc_CallCount()<2)
2447 break;
2448
2449 if(ptr->cid>=ZCC_SLAVES) //cov m
2450 break;
2451
2452 if(g_Cc_CallDetail.slaveObj[ptr->cid].heldcall==0 &&
2453 g_Cc_CallDetail.slaveObj[ptr->cid].confcall==0)
2454 {
2455 if(zCc_HeldCall())
2456 {
2457 zCc_SendAtChldReq(1);
2458 break;
2459 }
2460 }
2461
2462 int incoming_call_cid = zCc_GetSpecSlave(ZCC_S_TRYING_S);
2463 if(incoming_call_cid!=0 && incoming_call_cid!=ptr->cid)
2464 zCc_SendAtChldReq(2);
2465
2466 #if 0
2467 tmpslave = zCc_GetSpecSlave(ZCC_S_TRYING_S); // incoming call here and wait for to be accepted
2468 ccapp_log("zCc_CallCount()=%d zCc_GetSpecSlave(ZCC_S_TRYING_S)=%d",
2469 zCc_CallCount(),
2470 tmpslave);
2471 if(tmpslave!=0 && ptMsgBuf->usMsgCmd==ZCC_SDISCN_MO_E) // foreground drop, automaticly accept the incoming call
2472 {
2473 SLIC_Stop_Signal(0, TONE_SIGNAL);
2474 zCc_SendAtChldReq(1);
2475 break;
2476 }
2477
2478 if(zCc_CallCount()<2)
2479 break;
2480
2481 if(ptr->cid<0 || ptr->cid>=ZCC_SLAVES)
2482 break;
2483
2484 if(g_Cc_CallDetail.slaveObj[ptr->cid].heldcall==0 &&
2485 g_Cc_CallDetail.slaveObj[ptr->cid].confcall==0)
2486 {
2487 /*if(g_Cc_CallDetail.slaveObj[ptr->cid].state==ZCC_S_DIALING_S ||
2488 g_Cc_CallDetail.slaveObj[ptr->cid].state==ZCC_S_RINGBACK_S ||
2489 g_Cc_CallDetail.slaveObj[ptr->cid].state==ZCC_S_TALKING_S) */
2490 if(zCc_HeldCall())
2491 {
2492 zCc_SendAtChldReq(1);
2493 }
2494 }
2495 #endif
2496 break;
2497 }
2498 case ZCC_RELEASE_E:
2499 if(local_test_call_st==LocalTestCallST_Start)
2500 {
2501 SIGNAL_DATA tSig;
2502
2503 SLIC_Stop_Signal(0, TONE_SIGNAL);
2504
2505 memset(&tSig, 0, sizeof(tSig));
2506 tSig.signal_type = RING_SIGNAL;
2507 strcpy(g_Cc_CallDetail.number, "1234567890");
2508 strncpy(tSig.cid, g_Cc_CallDetail.number,sizeof(tSig.cid)-1);
2509 get_local_datetime(tSig.date_time);
2510 ccapp_log("local test call RING_SIGNAL,number = %s\n",g_Cc_CallDetail.number);
2511 SLIC_Play_Signal(0, 0, &tSig);
2512 zCc_SetLedStatus("ledblink");
2513
2514 if(local_test_call_type == LocalTestCallType_LOOP) {
2515 if (pthread_create(&slic_ring_test_pid, NULL, slic_ring_test_thread,0) != 0) //cov m
2516 printf("slic_ring_test_thread create fail\n");
2517 }
2518
2519 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
2520 g_Cc_CallDetail.evt[slave]= ZCC_NO_E;
2521 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M;
2522 g_Cc_CallDetail.state = ZCC_M_RINGING_S;
2523
2524 local_test_call_st = LocalTestCallST_Ring;
2525 zCc_ShowAllSlaveWithTips("testCall-ring");
2526 break;
2527 }
2528 else if(local_test_call_st==LocalTestCallST_End)
2529 {
2530 zCc_ClearDigits();
2531 zCc_InitSlaveObj(0);
2532 for (slave = 1; slave < ZCC_SLAVES; slave++)
2533 {
2534 if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S)
2535 zCc_InitSlaveObj(slave);
2536 }
2537
2538 SLIC_Stop_Signal(0, TONE_SIGNAL);
2539 SLIC_Stop_PCM();
2540 zCc_SetLedStatus("ledoff");
2541
2542 g_Cc_CallDetail.resourceReady = 0;
2543 g_Cc_CallDetail.hookofffg = FALSE;
2544 g_Cc_CallDetail.state = ZCC_M_RELEASE_S;
2545
2546 //system("echo loop_0 >> /tmp/log.ccapp.vploop");
2547 //system("( sleep 1 && at_cmd AT+VPLOOP=0 ) &");
2548 cfg_set("tz_vploop", "0");
2549 ipc_send_message(MODULE_ID_CALL_CTRL_LOCAL,
2550 MODULE_ID_AT_CTL,
2551 MSG_CMD_SET_VPLOOP_REQ,
2552 0,
2553 NULL,
2554 0);
2555
2556 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_DETECT);
2557 DeleteSoftTimer(ZCCAPP_TIMER_DTMF_DETECT);
2558 DeleteSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT);
2559 DeleteSoftTimer(ZCCAPP_TIMER_TKYTONE_DETECT);
2560 DeleteSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT);
2561 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_IDLE);
2562
2563 local_test_call_st = LocalTestCallST_None;
2564 zCc_ShowAllSlaveWithTips("testCall-end-none");
2565 break;
2566 }
2567
2568 for (slave = 1; slave < ZCC_SLAVES; slave++)
2569 {
2570 if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)
2571 {
2572 g_Cc_CallDetail.evt[slave] = ZCC_DISCN_E;
2573 }
2574 }
2575 //if(slave == ZCC_SLAVES)
2576 // return;
2577 if (g_Cc_CallDetail.slaveObj[0].state != ZCC_S_IDLE_S)//slave0½öÓÃÓÚ·ÅÒô£¬²»¶ÔÓ¦ºô½Ð
2578 {
2579 zCc_InitSlaveObj(0);
2580 }
2581 SLIC_Stop_Signal(0, TONE_SIGNAL);
2582 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__);
2583 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
2584 //g_Cc_CallDetail.chupSent = FALSE;
2585 //SLIC_Stop_PCM();
2586 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_PCM <---\n",__FUNCTION__);
2587
2588#ifndef TEST_CCAPP
2589
2590
2591 cfg_get_item("voip_status",voip_status,sizeof(voip_status));
2592
2593 if (0 != strcmp("ledoff" , voip_status ))
2594#endif
2595 {
2596 zCc_SetLedStatus("ledoff");
2597 }
2598 g_Cc_CallDetail.state = ZCC_M_RELEASE_S;
2599 if (!(0 != zCc_GetSpecSlave(ZCC_S_TRYING_S) && (1 == zCc_CallCount())))//Õª»úʱµÄÀ´µç£¬²»Çå
2600 {
2601 g_Cc_CallDetail.resourceReady = 0;
2602 }
2603 zCc_ClearDigits();
2604 g_Cc_CallDetail.hookofffg = FALSE;
2605 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_DETECT);//ÊÕµ½ÉÁ¶Ï£¬µ±Ç°¶¨Ê±Æ÷¶¼ÐèҪֹͣ£¬ºóÐøÔÙÆô¶¯
2606 DeleteSoftTimer(ZCCAPP_TIMER_DTMF_DETECT);
2607 DeleteSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT);
2608 DeleteSoftTimer(ZCCAPP_TIMER_TKYTONE_DETECT);
2609 DeleteSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT);
2610
2611 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_IDLE);
2612 for (slave = 1; slave < ZCC_SLAVES; slave++)
2613 {
2614 g_Cc_CallDetail.slaveObj[slave].idle_second = 0;//hook off ldle timer is killed, time_cnt reset
2615 }
2616
2617 break;
2618 case ZCC_BUSYTONETIMER_E:
2619 for (slave = 0; slave < ZCC_SLAVES; slave++)
2620 {
2621 if(g_Cc_CallDetail.slaveObj[slave].tone == ZCC_TONE_BSY_A)
2622 break;
2623 }
2624 if(slave == ZCC_SLAVES)
2625 return;
2626 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_TKY_A;
2627 CreateSoftTimer(ZCCAPP_TIMER_TKYTONE_DETECT,
2628 0,
2629 ZCCAPP_TIMER_TKYTONE_INTERVAL,
2630 zCcApp_TkyToneTimer,
2631 NULL);
2632 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState CreateSoftTimer zCcApp_TkyToneTimer\n",__FUNCTION__);
2633 if (!(0 == zCc_GetSpecSlave(ZCC_S_BSYT_S)
2634 &&(g_Cc_CallDetail.slaveObj[slave].state== ZCC_S_WAIT_RESOURCE_S
2635 ||g_Cc_CallDetail.slaveObj[slave].state== ZCC_S_TRYING_S)
2636 && g_Cc_CallDetail.lastTone == ZCC_TONE_BSY_A))
2637 {
2638 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TKYT_S;
2639 }
2640 return;
2641 case ZCC_HOOKOFFTIMER_E:
2642 for (slave = 0; slave < ZCC_SLAVES; slave++)
2643 {
2644 if(g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_DT_S)
2645 break;
2646 }
2647 if(slave == ZCC_SLAVES)
2648 return;
2649 if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½Ðʱ²»·ÅæÒô
2650 {
2651 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A;
2652 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S;
2653 g_Cc_CallDetail.slaveObj[slave].confcall = 0;
2654 g_Cc_CallDetail.slaveObj[slave].heldcall = 0;
2655 CreateSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT,
2656 0,
2657 ZCCAPP_TIMER_BUSYTONE_INTERVAL,
2658 zCcApp_BusyToneTimer,
2659 NULL);
2660 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState CreateSoftTimer zCcApp_BusyToneTimer22222\n",__FUNCTION__);
2661 }
2662 else
2663 {
2664 zCc_InitSlaveObj(slave);
2665 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
2666 }
2667 return;
2668 case ZCC_HOOKOFF_IDLE_TIMER_E:
2669 for (slave = 0; slave < ZCC_SLAVES; slave++)
2670 {
2671 if(g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_DT_S)
2672 {
2673 if(0 == strcmp(callback_enable, "1") && 1 == check_phone_number_in_file(callback_number, "/cache/call_back_list"))
2674 {
2675 if(strlen(callback_number) <=0 )
2676 {
2677 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_IDLE);
2678 break;
2679 }
2680
2681 strcpy(g_Cc_CallDetail.digits, callback_number);
2682 g_Cc_CallDetail.dCount = strlen(callback_number);
2683
2684 MSG_BUF msgBuf = {0};
2685 msgBuf.usMsgCmd = ZCC_DTMF_E;
2686 msgBuf.src_id = MODULE_ID_SLIC;
2687 msgBuf.aucDataBuf[0] = (UINT8)'#';
2688 msgBuf.usDataLen = 1;
2689 zCc_SendMsgToSub(&msgBuf);
2690
2691 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_SIL_A;
2692 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_DACCM_S;
2693
2694 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_DETECT);
2695
2696 ccapp_log("==> HOOKOFF_IDLE_TIMER send callback_number=%s\n", callback_number);
2697
2698 break;
2699 }
2700
2701 cfg_get_item("hotline_time", hotline_time, sizeof(hotline_time));
2702 g_Cc_CallDetail.slaveObj[slave].idle_second++;
2703 if(g_Cc_CallDetail.slaveObj[slave].idle_second >= atoi(hotline_time) * 2)
2704 {
2705 int rt;
2706 char hotline[ZDIAL_NUM_MAX-1];
2707
2708 memset(hotline, 0, sizeof(hotline));
2709 rt = cfg_get_item("hotline_number", hotline, sizeof(hotline)-1);
2710 if(rt!=0 || strlen(hotline)<=0)
2711 {
2712 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_IDLE);
2713 break;
2714 }
2715
2716 strcpy(g_Cc_CallDetail.digits, hotline);
2717 g_Cc_CallDetail.dCount = strlen(hotline);
2718
2719 MSG_BUF msgBuf = {0};
2720 msgBuf.usMsgCmd = ZCC_DTMF_E;
2721 msgBuf.src_id = MODULE_ID_SLIC;
2722 msgBuf.aucDataBuf[0] = (UINT8)'#';
2723 msgBuf.usDataLen = 1;
2724 zCc_SendMsgToSub(&msgBuf);
2725
2726 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_SIL_A;
2727 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_DACCM_S;
2728
2729 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_DETECT);
2730
2731 ccapp_log("==> HOOKOFF_IDLE_TIMER send hotline=%s\n", hotline);
2732 }
2733 }
2734 }
2735 break;
2736 case ZCC_DTMFTIMER_E:
2737 for (slave = 0; slave < ZCC_SLAVES; slave++)
2738 {
2739 if(g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_DACCM_S)
2740 break;
2741 }
2742 if(slave == ZCC_SLAVES)
2743 return;
2744 g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount++] = ZCC_TIMEOUT_SIGN;
2745 ret = zCc_DigitsMatch();
2746 zCc_DigitsMatchRltProc(ret);
2747 if (ZCC_MATCHERR != ret)
2748 {
2749 if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_IDLE_S)//ss
2750 {
2751 zCc_SendSsReq(g_Cc_CallDetail.digits);
2752 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
2753 }
2754 else
2755 {
2756 zCc_SendAtDialReq(g_Cc_CallDetail.digits);
2757 }
2758 }
2759 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M;
2760 zCc_ClearDigits();
2761 return;
2762 case ZCC_TKYTIMER_E:
2763 for (slave = 0; slave < ZCC_SLAVES; slave++)
2764 {
2765 if(g_Cc_CallDetail.slaveObj[slave].tone == ZCC_TONE_TKY_A)
2766 break;
2767 }
2768 if(slave == ZCC_SLAVES)
2769 return;
2770 SLIC_Stop_Signal(0, TONE_SIGNAL);
2771 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__);
2772 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_SIL_A;
2773 if (!(0 == zCc_GetSpecSlave(ZCC_S_TKYT_S)
2774 &&(g_Cc_CallDetail.slaveObj[slave].state== ZCC_S_WAIT_RESOURCE_S
2775 ||g_Cc_CallDetail.slaveObj[slave].state== ZCC_S_TRYING_S)
2776 && g_Cc_CallDetail.lastTone == ZCC_TONE_TKY_A))
2777 {
2778 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_SIL_S;
2779 }
2780 g_Cc_CallDetail.lastTone = ZCC_TONE_SIL_A;
2781 return;
2782 case ZCC_SSDIALTONETIMER_E:
2783 zCc_InitSlaveObj(0);//·Å²¦ºÅÒôµÄslave0 Çå¿Õ
2784 zCc_ClearDigits();
2785 if (1 == zCc_CallCount()
2786 && (g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A))//µ±Ç°Ö»ÓÐһ·£¬Í£Ö¹²¦ºÅÒô
2787 {
2788 SLIC_Stop_Signal(0,0);
2789 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__);
2790 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
2791 if (1 == zCc_HeldCall())//Òѱ£³Ö£¬»Ö¸´
2792 {
2793 chldret = zCc_SendAtChldReq(2);
2794 }
2795 else if (0 != zCc_ActiveCall())
2796 {
2797 SLIC_Start_PCM();
2798 }
2799 }
2800 else if (1 < zCc_CallCount() && (g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A))//active/held mpty and held+waiting
2801 {
2802 SLIC_Stop_Signal(0,0);
2803 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__);
2804 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
2805 if((0 == zCc_HeldCall() && 0 != g_Cc_CallDetail.ringCid)//active+waiting »Ö¸´ÓïÒô£¬held+waiting, ²»»Ö¸´ÓïÒô£¬·Åºô½ÐµÈ´ýÒô
2806 ||(0 != zCc_HeldCall() && 0 !=zCc_ActiveCall()))//active+held»Ö¸´ÓïÒô
2807 {
2808 SLIC_Start_PCM();
2809 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Start_PCM <---\n",__FUNCTION__);
2810 }
2811 }
2812 return;
2813 case ZCC_FLASH_E:
2814 ccapp_log("ZCC_FLASH_E cnt=%d held=%d active=%d BefDial=%d",
2815 zCc_CallCount(),
2816 zCc_HeldCall(),
2817 zCc_ActiveCall(),
2818 zCc_MoBeforDialingCall());
2819
2820 if (!(zCc_CallCount() > 1 && g_Cc_CallDetail.digits[0] == ZCC_FLASH_SIGN))//¶à·ºô½Ðʱ£¬ÐèÒªÅжÏflashÁ¬·¢Á½´ÎµÄ³¡¾°£¬²»Çå³ý
2821 {
2822 zCc_ClearDigits();
2823 }
2824 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_DETECT);//ÊÕµ½ÉÁ¶Ï£¬µ±Ç°¶¨Ê±Æ÷¶¼ÐèҪֹͣ£¬ºóÐøÔÙÆô¶¯
2825 DeleteSoftTimer(ZCCAPP_TIMER_DTMF_DETECT);
2826 DeleteSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT);
2827 DeleteSoftTimer(ZCCAPP_TIMER_TKYTONE_DETECT);
2828 DeleteSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT);
2829
2830 callCnt = zCc_CallCount();
2831
2832 if (g_Cc_CallDetail.ringCid && (g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].tone == ZCC_TONE_CIDCW_A))//ºô½ÐµÈ´ý£¬¸ù¾ÝflashºóÃæµÄ×Ö·û¾ö¶¨ºóÐø²Ù×÷
2833 {
2834 if(g_Cc_CallDetail.digits[0] == ZCC_FLASH_SIGN)
2835 {
2836 zCc_InitSlaveObj(0);
2837 zCc_ClearDigits();
2838 SLIC_Stop_Signal(0,0);
2839 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__);
2840 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
2841 if (0 != zCc_ActiveCall())
2842 {
2843 SLIC_Start_PCM();
2844 }
2845 break;
2846 }
2847 g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount++] = ZCC_FLASH_SIGN;
2848 // slave[0] to play dial tone
2849 CreateSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT,
2850 0,
2851 ZCCAPP_TIMER_HOOKOFF_INTERVAL,
2852 zCcApp_SsDialToneTimer,
2853 NULL);
2854 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: CreateSoftTimer zCcApp_SsDialToneTimer\n",__FUNCTION__);
2855 g_Cc_CallDetail.evt[0] = ZCC_DIAL_E;
2856 //g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].tone = ZCC_TONE_OFF_A;±£Áô¸Ã×ֶΣ¬ÓÃÓÚflash4µÈʧ°Üʱ»Ö¸´ºô½ÐµÈ´ýÒô
2857 SLIC_Stop_PCM();
2858 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_PCM2222\n",__FUNCTION__);
2859 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E\n",__FUNCTION__);
2860 break;
2861 }
2862
2863 if ( callCnt==0 //·Å²¦ºÅÒô»¹Î´Íê³É²¦ºÅ»òÕª»ú䲦ºÅ·ÅæÒôº¿ÃùÒô¾²Òô
2864 ||(callCnt ==1 && zCc_FlashClearCall() > 0)) //ÕÒµ½½¨Á¢ÖеÄÖ÷½ÐÒÔ¼°ÊÍ·ÅÖеĺô½Ð£¬ÊÍ·Å£¬²¢·Å²¦ºÅÒô
2865 {
2866 zCc_InitSlaveObj(0);
2867 g_Cc_CallDetail.evt[0] = ZCC_DIAL_E;
2868 SLIC_Stop_PCM();
2869 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:SLIC_Stop_PCM\n",__FUNCTION__);
2870 g_Cc_CallDetail.hookofffg = TRUE;
2871 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E\n",__FUNCTION__);
2872 break;
2873 }
2874
2875 if (zCc_ActiveCall() == callCnt) //Ö»ÓÐactive call£¬±£³ÖËü£¬²¢·Å²¦ºÅÒô
2876 {
2877 if (callCnt > 1) // conf call, ·Å²¦ºÅÒô
2878 {
2879 g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount++] = ZCC_FLASH_SIGN;
2880 g_Cc_CallDetail.digits[ZDIAL_NUM_MAX-1] = 1;// ¼Ç¼±¾´Î²Ù×÷ΪÕë¶Ôconf µÄ
2881 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E\n",__FUNCTION__);
2882 }
2883 else
2884 {
2885 chldret = zCc_SendAtChldReq(2);
2886 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E\n",__FUNCTION__);
2887 g_Cc_CallDetail.waitchldresult = 1;
2888 }
2889 break;
2890 }
2891
2892 if (zCc_HeldCall() == callCnt) //Ö»ÓÐheld call£¬»Ö¸´
2893 {
2894 if (callCnt == 1 )
2895 {
2896 chldret = zCc_SendAtChldReq(2);
2897 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E\n",__FUNCTION__);
2898 }
2899 else
2900 {
2901 g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount++] = ZCC_FLASH_SIGN;
2902 CreateSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT,
2903 0,
2904 ZCCAPP_TIMER_HOOKOFF_INTERVAL,
2905 zCcApp_SsDialToneTimer,
2906 NULL);
2907 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:CreateSoftTimer zCcApp_SsDialToneTimer\n",__FUNCTION__);
2908 g_Cc_CallDetail.evt[0] = ZCC_DIAL_E;
2909
2910 }
2911 break;
2912 }
2913 //active + held
2914
2915 if(g_Cc_CallDetail.digits[0] == ZCC_FLASH_SIGN)
2916 {
2917 zCc_InitSlaveObj(0);
2918 zCc_ClearDigits();
2919 SLIC_Stop_Signal(0,0);
2920 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__);
2921 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
2922 if (0 != zCc_ActiveCall())
2923 {
2924 SLIC_Start_PCM();
2925 }
2926 break;
2927 }
2928
2929 /*
2930 zCc_MSeizeState befor=1 act=0 held=1 callCnt=2
2931 zCc_MoBeforDialingCall slave[1]=8
2932 zCc_MoBeforDialingCall slave[2]=4
2933 */
2934 ccapp_log("ZCC_FLASH_E befor=%d active=%d held=%d callCnt=%d",
2935 zCc_MoBeforDialingCall(),
2936 zCc_ActiveCall(),
2937 zCc_HeldCall(),
2938 callCnt);
2939
2940 if (((0 != zCc_MoBeforDialingCall())
2941 && (0 != zCc_ActiveCall() || 0 != zCc_HeldCall())) //active or held + ½¨Á¢Öеĺô½Ð
2942 ||(0 != zCc_MoBeforDialingCall() && 1 == callCnt))
2943 {
2944 /*if(g_Cc_CallDetail.digits[0]==ZCC_FLASH_SIGN &&
2945 strlen(g_Cc_CallDetail.digits)<=3)
2946 {
2947 zCc_InitSlaveObj(0);
2948 zCc_ClearDigits();
2949 zCc_SendAtChldReq(2);
2950 ccapp_log("get ZCC_FLASH_SIGN and return to old talk");
2951 }*/
2952
2953 int cid = zCc_GetMoBeforDialingCallCID();
2954 if(cid>=0 && zCc_HeldCall()!=0) // drop the beforeDialing call
2955 {
2956 zCc_InitSlaveObj(cid);
2957 zCc_ClearDigits();
2958 zCc_SendAtChldReq(1);
2959 ccapp_log("drop the beforeDialing call cid=%d", cid);
2960 }
2961
2962 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E return\n",__FUNCTION__);
2963 return;
2964 }
2965
2966 g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount++] = ZCC_FLASH_SIGN;
2967 g_Cc_CallDetail.evt[0] = ZCC_DIAL_E;
2968 CreateSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT,
2969 0,
2970 ZCCAPP_TIMER_HOOKOFF_INTERVAL,
2971 zCcApp_SsDialToneTimer,
2972 NULL);
2973 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:CreateSoftTimer zCcApp_SsDialToneTimer\n",__FUNCTION__);
2974 SLIC_Stop_PCM();
2975 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:SLIC_Stop_PCM\n",__FUNCTION__);
2976 break;
2977
2978 case ZCC_RESOURCE_READY_E:
2979 g_Cc_CallDetail.evt[slave] = ZCC_RESOURCE_READY_E;
2980 break;
2981 /*ATÃüÁîÏìÓ¦£¬Ä¿Ç°Ö»ÓÐatdµÄÏìÓ¦ÐèÒª´¦Àí*/
2982 case MSG_CMD_ATD_DIAL_RSP:
2983 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ATD_rsp=%d\n",__FUNCTION__,((T_zCcapp_optRsp*)ptMsgBuf->aucDataBuf)->result);
2984 if(((T_zCcapp_optRsp*)ptMsgBuf->aucDataBuf)->result == 0)
2985 break;
2986 slave = zCc_GetDialingSlave(1);
2987 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtDialReq:RECV ERROR\n",__FUNCTION__);
2988 slave = zCc_GetDialingSlave(1);
2989 if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0 && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½ÐÇÒÒѹһúʱ²»·ÅæÒô
2990 {
2991 CreateSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT,
2992 0,
2993 ZCCAPP_TIMER_BUSYTONE_INTERVAL,
2994 zCcApp_BusyToneTimer,
2995 NULL);
2996 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtDialReq CreateSoftTimer zCcApp_BusyToneTimer\n",__FUNCTION__);
2997 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A;
2998 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S;
2999 g_Cc_CallDetail.slaveObj[slave].confcall = 0;
3000 g_Cc_CallDetail.slaveObj[slave].heldcall = 0;
3001 }
3002 else
3003 {
3004 char num[ZDIAL_NUM_MAX+1];
3005 strcpy(num, g_Cc_CallDetail.slaveObj[slave].number);
3006
3007 zCc_InitSlaveObj(slave);
3008 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3009
3010 if(zCc_find_held_cid()|| zCc_find_held_incoming_cid()) // restore prvious talk to active
3011 {
3012 zCc_SendAtChldReq(2);
3013
3014 char temp[200];
3015 sprintf(temp, "echo \"%s get error dialout cid=%d num=%s\" > /tmp/log.ccapp.callout.err",
3016 get_local_date_time(), slave, num);
3017 soft_system(temp);
3018 }
3019 }
3020 break;
3021 /*case MSG_CMD_ATA_RSP:
3022 case MSG_CMD_CHUP_RSP:
3023 case MSG_CMD_VTS_RSP:
3024 case MSG_CMD_ZIMSPLUS_RSP:
3025 case MSG_CMD_CCFC_RSP:
3026 case MSG_CMD_CLCK_RSP:
3027 break;*/
3028 case MSG_CMD_CHLD_RSP:
3029 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s CHLD_rsp=%d\n",__FUNCTION__,((T_zCcapp_optRsp*)ptMsgBuf->aucDataBuf)->result);
3030 if(g_Cc_CallDetail.waitchldresult == 1 )
3031 {
3032 g_Cc_CallDetail.waitchldresult = 0;
3033 if (((T_zCcapp_optRsp*)ptMsgBuf->aucDataBuf)->result == 0)
3034 {
3035 CreateSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT,
3036 0,
3037 ZCCAPP_TIMER_HOOKOFF_INTERVAL,
3038 zCcApp_SsDialToneTimer,
3039 NULL);
3040 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:CreateSoftTimer zCcApp_SsDialToneTimer\n",__FUNCTION__);
3041 g_Cc_CallDetail.evt[0] = ZCC_DIAL_E;
3042 SLIC_Stop_PCM();
3043 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:SLIC_Stop_PCM\n",__FUNCTION__);
3044 }
3045 }
3046 break;
3047
3048 case ZCC_SEIZE_E: // ͻȜ
3049 default:
3050 // do nothing
3051 break;
3052 }
3053}
3054
3055
3056//get local time string , format"YYYY-MM-DD HH:MM:SS"
3057char *get_local_date_time(void)
3058{
3059 time_t now;
3060 struct tm *timenow;
3061 static char localtimestr[32];
3062
3063 time(&now);
3064 timenow = localtime(&now);
3065 memset(localtimestr, 0, 32);
3066 if(timenow)
3067 snprintf(localtimestr, 32, "%04d-%02d-%02d %02d:%02d:%02d",
3068 timenow->tm_year + 1900, timenow->tm_mon+1, timenow->tm_mday,
3069 timenow->tm_hour, timenow->tm_min, timenow->tm_sec);
3070 return localtimestr;
3071}
3072
3073
3074//get local time string , format"MMDDHHMM"
3075char *get_local_datetime(char *buff)
3076{
3077 time_t now;
3078 struct tm *timenow;
3079 static char localtimestr[48];
3080
3081 memset(localtimestr, 0, sizeof(localtimestr));
3082
3083 time(&now);
3084 timenow = localtime(&now);
3085 if(timenow)
3086 sprintf(localtimestr, "%02d%02d%02d%02d",
3087 timenow->tm_mon+1, timenow->tm_mday,
3088 timenow->tm_hour, timenow->tm_min);
3089
3090 if(buff!=NULL)
3091 strcpy(buff, localtimestr);
3092
3093 return localtimestr;
3094}
3095
3096
3097int zCc_find_held_cid(void)
3098{
3099 int slavetmp;
3100
3101 for (slavetmp = 1; slavetmp < ZCC_SLAVES; slavetmp++)
3102 {
3103 if (g_Cc_CallDetail.slaveObj[slavetmp].heldcall!=0)
3104 {
3105 return slavetmp;
3106 }
3107 }
3108
3109 return 0;
3110}
3111
3112int zCc_talking_count(void)
3113{
3114 int cnt = 0;
3115 int slavetmp;
3116
3117 for (slavetmp = 1; slavetmp < ZCC_SLAVES; slavetmp++)
3118 {
3119 if (g_Cc_CallDetail.slaveObj[slavetmp].state==ZCC_S_TALKING_S)
3120 cnt++;
3121 }
3122
3123 return cnt;
3124}
3125
3126
3127int zCc_find_held_incoming_cid(void)
3128{
3129 int slavetmp;
3130
3131 for (slavetmp = 1; slavetmp < ZCC_SLAVES; slavetmp++)
3132 {
3133 if (g_Cc_CallDetail.slaveObj[slavetmp].state==ZCC_S_TRYING_S)
3134 {
3135 return slavetmp;
3136 }
3137 }
3138
3139 return 0;
3140}
3141
3142
3143int zCc_find_all_callout(int slave[ZCC_SLAVES])
3144{
3145 int n=0;
3146
3147 int i;
3148 for (i = 1; i < ZCC_SLAVES; i++)
3149 {
3150 if (g_Cc_CallDetail.slaveObj[i].is_callout!=0)
3151 {
3152 slave[n] = i;
3153 n++;
3154 }
3155 }
3156
3157 return n;
3158}
3159
3160
3161void zCc_hungup_all(int slave)
3162{
3163 int slavetmp;
3164 if (!g_Cc_CallDetail.chupSent)
3165 {
3166 zCc_SendAtHangupReq();
3167 for (slavetmp = 1; slavetmp < ZCC_SLAVES; slavetmp++)
3168 {
3169 if (g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_DIALING_S
3170 || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_RINGBACK_S
3171 || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_TALKING_S
3172 || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_TRYING_S
3173 || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_WAIT_RESOURCE_S)
3174 {
3175 g_Cc_CallDetail.slaveObj[slavetmp].waitDSCI6 = 1;
3176 }
3177 }
3178 if (!((zCc_CallCount() == 1) && ((ZCC_S_DACCM_S == g_Cc_CallDetail.slaveObj[slave].state)
3179 || (ZCC_S_DIALING_S == g_Cc_CallDetail.slaveObj[slave].state)))
3180 && !((zCc_CallCount() > 1) && (0 != zCc_MtInactiveCall()) && (0 != zCc_MoInactiveCall())))//·Çidle״̬¶¼ÊÇÕª»ú̬ÊÕµ½À´µçÇҾܽÓÀ´µç
3181 {
3182 g_Cc_CallDetail.chupSent = TRUE;//»¹ÓÐÆäËûºô½Ð£¬²»ÔÙÖØ¸´·¢chup
3183 }
3184 }
3185}
3186
3187VOID zCc_RunMaster(MSG_BUF *ptMsgBuf)
3188{
3189 UINT8 slave = 0;
3190 UINT8 slavetmp = 0;
3191 SIGNAL_DATA tSig;
3192 int held_call_cid;
3193 int incoming_call_cid;
3194
3195 static int old_state = -1;
3196 if(old_state != g_Cc_CallDetail.state)
3197 {
3198 ccapp_log("=======================\n");
3199 ccapp_log("zCc_RunMaster state %d --> %d\n", old_state, g_Cc_CallDetail.state);
3200 old_state = g_Cc_CallDetail.state;
3201 }
3202
3203 memset(tSig.cid, 0, 32);
3204
3205 zCc_CheckSlaveState("start zCc_RunMaster");
3206 switch (g_Cc_CallDetail.state)
3207 {
3208 case ZCC_M_RELEASE_S:
3209 zCc_MReleaseState(ptMsgBuf);
3210 break;
3211
3212 case ZCC_M_RINGING_S:
3213 zCc_MRingingState(ptMsgBuf);
3214 break;
3215
3216 case ZCC_M_SEIZE_S:
3217 default:
3218 zCc_MSeizeState(ptMsgBuf);
3219 break;
3220 }
3221
3222 zCc_CheckSlaveState("in zCc_RunSlave");
3223 /* Now run the slaves. Since the slaves will always be run with the master , run them now. */
3224 for (slave = 0; slave < ZCC_SLAVES; slave++)
3225 {
3226 zCc_RunSlave(slave);
3227 g_Cc_CallDetail.evt[slave] = ZCC_NO_E;
3228 }
3229
3230
3231 /* Process sMsg. */
3232 for (slave = 1; slave < ZCC_SLAVES; slave++)
3233 {
3234 if(g_Cc_CallDetail.slaveObj[slave].sMsg!=ZCC_SNO_M)
3235 {
3236 zCc_CheckSlaveState("in slaveObj[slave].sMsg");
3237 ccapp_log("g_Cc_CallDetail.slaveObj[%d].sMsg=%d",
3238 slave,
3239 g_Cc_CallDetail.slaveObj[slave].sMsg);
3240 }
3241
3242 switch (g_Cc_CallDetail.slaveObj[slave].sMsg)
3243 {
3244 case ZCC_SINV_M:
3245 if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_IDLE_S)//ss
3246 {
3247 zCc_SendSsReq(g_Cc_CallDetail.digits);
3248 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
3249 }
3250 else
3251 {
3252 zCc_SendAtDialReq(g_Cc_CallDetail.digits);
3253 }
3254 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M;
3255 zCc_ClearDigits();
3256 break;
3257 case ZCC_SDTMF_M:
3258 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ZCC_SDTMF_M handling ptMsgBuf->aucDataBuf[0] = %d\n",__FUNCTION__,ptMsgBuf->aucDataBuf[0]);
3259 zCc_SendAtDtmfReq((char*)(&(ptMsgBuf->aucDataBuf[0])));
3260 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M;
3261 if(g_Cc_CallDetail.waitchldresult == 0)//chld´¦Àí¹ý³ÌÖв»Çå³ý²¦ºÅ°´¼üadd by zpr
3262 zCc_ClearDigits();
3263 break;
3264 case ZCC_SRING_M:
3265 if (g_Cc_CallDetail.state == ZCC_M_RELEASE_S)// && g_Cc_CallDetail.ringCid)
3266 {
3267 g_Cc_CallDetail.state = ZCC_M_RINGING_S;
3268 memset(&tSig, 0, sizeof(tSig));
3269 tSig.signal_type = RING_SIGNAL;
3270 //memcpy(tSig.cid, g_Cc_CallDetail.number, strlen(g_Cc_CallDetail.number));
3271 strncpy(tSig.cid, g_Cc_CallDetail.number, sizeof(tSig.cid)-1);
3272 get_local_datetime(tSig.date_time);
3273 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_RunMaster RING_SIGNAL,number = %s\n",__FUNCTION__,g_Cc_CallDetail.number);
3274 SLIC_Play_Signal(0, 0, &tSig);
3275 zCc_SetLedStatus("ledblink");
3276 }
3277 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M;
3278 break;
3279 case ZCC_SANS_M://ʲô³¡¾°?
3280 if (zCc_CallCount() == 1)
3281 {
3282 SLIC_Stop_Signal(0, TONE_SIGNAL);
3283 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s : SLIC_Stop_Signal <---\n",__FUNCTION__);
3284 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
3285 }
3286 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M;
3287 break;
3288 case ZCC_SDISCN_M:
3289 held_call_cid = zCc_find_held_cid();
3290 incoming_call_cid = zCc_GetSpecSlave(ZCC_S_TRYING_S);
3291 ccapp_log("ZCC_SDISCN_M held_call_cid=%d incoming_call_cid=%d chupSent=%d",
3292 held_call_cid,
3293 incoming_call_cid,
3294 g_Cc_CallDetail.chupSent);
3295
3296 if((held_call_cid!=0 ||incoming_call_cid!=0) && g_Cc_CallDetail.chupSent==FALSE)
3297 {
3298 int active_call_cid = 0;
3299
3300 for (slavetmp = 1; slavetmp < ZCC_SLAVES; slavetmp++)
3301 {
3302 if( (g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_DIALING_S
3303 || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_RINGBACK_S
3304 || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_TALKING_S
3305// || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_TRYING_S // incoming_call_cid
3306 || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_WAIT_RESOURCE_S) &&
3307 g_Cc_CallDetail.slaveObj[slavetmp].heldcall==0)
3308 {
3309 active_call_cid = slavetmp;
3310 break;
3311 }
3312 }
3313
3314 ccapp_log("ZCC_SDISCN_M active_call_cid=%d", active_call_cid);
3315
3316 if(active_call_cid!=0)
3317 {
3318 zCc_SendAtChldReq(10+active_call_cid);
3319
3320 g_Cc_CallDetail.chupSent = TRUE;
3321 g_Cc_CallDetail.state = ZCC_M_RINGING_S;
3322
3323 /*MSG_BUF msgBuff = {0}; // let while(1) run one more time
3324 msgBuff.usMsgCmd = ZCC_ASSIST_MSG_E;
3325 msgBuff.src_id = MODULE_ID_SLIC;
3326 zCc_SendMsgToSub(&msgBuff);
3327
3328 ccapp_log("sendMsg ZCC_ASSIST_MSG_E"); */
3329 }
3330 else
3331 {
3332 zCc_hungup_all(slave);
3333 }
3334 }
3335 else
3336 {
3337 zCc_hungup_all(slave);
3338 }
3339
3340 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M;
3341 break;
3342 default:
3343 break;
3344 }
3345 }
3346
3347 if (g_Cc_CallDetail.state == ZCC_M_RINGING_S
3348 && g_Cc_CallDetail.ringCid == 0
3349 && zCc_find_held_cid()==0
3350 && zCc_find_held_incoming_cid()==0
3351 && local_test_call_st==0)
3352 {
3353 g_Cc_CallDetail.state = ZCC_M_RELEASE_S;
3354 SLIC_Stop_Signal(0, RING_SIGNAL);
3355 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s : SLIC_Stop_Signal <---\n",__FUNCTION__);
3356 }
3357 /*else if (g_Cc_CallDetail.state == ZCC_M_SEIZE_S && g_Cc_CallDetail.ringCid > 0 && zCc_CallCount() == 1)
3358 {
3359 //תΪ½ÓÌý
3360 ¹Ò»úºó¿ÉÒÔÖªµÀÀ´µç²¢½ÓÌý£¬ÎÞÐèÌØÊâ´¦Àí¡£
3361 }*/
3362 zCc_ControlTone();
3363
3364 // ´¦Àíslave·µ»ØµÄÏûÏ¢
3365 zCc_CheckSlaveState("End zCc_RunMaster");
3366}
3367
3368VOID zCc_RunSlave(UINT8 slave)
3369{
3370 if (g_Cc_CallDetail.evt[slave] == ZCC_NO_E)
3371 {
3372 return;
3373 }
3374
3375 /* Call respective state function based on the current state. */
3376 printf("[ccapp_debug]:Slave Run,slave:%d, state=%d,event=%d\n", slave, g_Cc_CallDetail.slaveObj[slave].state,g_Cc_CallDetail.evt[slave]);
3377 zCcSlaveFsmFunc[g_Cc_CallDetail.slaveObj[slave].state](slave);
3378}
3379
3380VOID zCc_SIdleState(UINT8 slave)
3381{
3382 UINT8 tmpslave = 0;
3383 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave,g_Cc_CallDetail.evt[slave]);
3384 g_Cc_CallDetail.slaveObj[slave].cid = slave;
3385 switch (g_Cc_CallDetail.evt[slave])
3386 {
3387 case ZCC_DIAL_E:
3388 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_DIAL_A;
3389 g_Cc_CallDetail.slaveObj[slave].state = g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN ? ZCC_S_DT_S : ZCC_S_DACCM_S;
3390
3391 if (g_Cc_CallDetail.hookofffg == TRUE)
3392 {
3393 g_Cc_CallDetail.hookofffg = FALSE;
3394 CreateSoftTimer(ZCCAPP_TIMER_HOOKOFF_DETECT,
3395 0,
3396 ZCCAPP_TIMER_HOOKOFF_INTERVAL,
3397 zCcApp_HookOffTimer,
3398 NULL);
3399 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState CreateSoftTimer zCcApp_HookOffTimer\n",__FUNCTION__);
3400
3401 g_Cc_CallDetail.slaveObj[slave].idle_second = 0;
3402 CreateSoftTimer(ZCCAPP_TIMER_HOOKOFF_IDLE,
3403 TIMER_FLAG_RESTART,
3404 ZCCAPP_TIMER_HOOKOFF_IDLE_INTERVAL,
3405 zCcApp_HookOff_Idle_Timer,
3406 NULL);
3407 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState CreateSoftTimer zCcApp_HookOff_Idle_Timer\n",__FUNCTION__);
3408 }
3409 break;
3410 case ZCC_DTMF_E://held+dailing
3411 if ( 0 != zCc_HeldCall() && 0 == zCc_ActiveCall())
3412 {
3413 DeleteSoftTimer(ZCCAPP_TIMER_SSDIALTONE_DETECT);
3414 CreateSoftTimer(ZCCAPP_TIMER_DTMF_DETECT,
3415 0,
3416 ZCCAPP_TIMER_DTMF_INTERVAL,
3417 zCcApp_DtmfTimer,
3418 NULL);
3419 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState CreateSoftTimer zCcApp_DtmfTimer\n",__FUNCTION__);
3420 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_SIL_A;
3421 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_DACCM_S;
3422 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState handling ZCC_DTMF_E\n",__FUNCTION__);
3423 }
3424 break;
3425 case ZCC_CIDCW_E:
3426 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_CIDCW_A;
3427 //lint -fallthrough
3428 case ZCC_SINVITE_E:
3429 zCc_ShowAllSlaveWithTips("zCc_SIdleState");
3430 if (((0 != zCc_GetDialingSlave(1)) || (0 != zCc_GetSpecSlave(ZCC_S_RINGBACK_S)))//ÓÐÒѾ­Ï·¢atd µÄºô½Ðʱ¾Ü¾øÐÂÀ´µç
3431 || (0 != zCc_MoInactiveCall()))//
3432 {
3433 //zCc_InitSlaveObj(slave);¼ÌÐøµÈdsci6Éϱ¨
3434 g_Cc_CallDetail.slaveObj[slave].state = g_Cc_CallDetail.resourceReady?ZCC_S_TRYING_S:ZCC_S_WAIT_RESOURCE_S;
3435 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3436 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M;
3437 return;
3438 }
3439
3440 g_Cc_CallDetail.ringCid = slave;
3441 if(g_Cc_CallDetail.evt[slave]==ZCC_CIDCW_E)
3442 g_Cc_CallDetail.slaveObj[slave].is_cidcw = TRUE;
3443 else
3444 g_Cc_CallDetail.slaveObj[slave].is_cidcw = FALSE;
3445 strcpy(g_Cc_CallDetail.slaveObj[slave].number, g_Cc_CallDetail.number);
3446
3447 if (g_Cc_CallDetail.resourceReady == 1)
3448 {
3449 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M;
3450 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TRYING_S;
3451 }
3452 else
3453 {
3454 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_WAIT_RESOURCE_S;
3455 }
3456 break;
3457
3458 case ZCC_SRING_E://cid²»Æ¥ÅäµÄ³¡¾°
3459 tmpslave = zCc_GetDialingSlave(0);
3460 if (0 == tmpslave )
3461 {
3462 return;
3463 }
3464 g_Cc_CallDetail.slaveObj[slave] = g_Cc_CallDetail.slaveObj[tmpslave];
3465 zCc_InitSlaveObj(tmpslave);
3466 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_RINGBACK_S;
3467 break;
3468 case ZCC_SDISCN_MO_E://cid²»Æ¥ÅäµÄ³¡¾°
3469 tmpslave = zCc_GetDialingSlave(0);
3470 if (0 == tmpslave )
3471 {
3472 return;
3473 }
3474 g_Cc_CallDetail.slaveObj[slave] = g_Cc_CallDetail.slaveObj[tmpslave];
3475 zCc_InitSlaveObj(tmpslave);
3476 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, tmpslave);
3477 if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0&& g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½ÐÇÒÒѹһúʱ²»·ÅæÒô
3478 {
3479 CreateSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT,
3480 0,
3481 ZCCAPP_TIMER_BUSYTONE_INTERVAL,
3482 zCcApp_BusyToneTimer,
3483 NULL);
3484 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState CreateSoftTimer zCcApp_BusyToneTimer\n",__FUNCTION__);
3485 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A;
3486 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S;
3487 g_Cc_CallDetail.slaveObj[slave].confcall = 0;
3488 g_Cc_CallDetail.slaveObj[slave].heldcall = 0;
3489 }
3490 else
3491 {
3492 zCc_InitSlaveObj(slave);
3493 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3494 }
3495 return;
3496 default:
3497 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState:evt=%d\n",__FUNCTION__,g_Cc_CallDetail.evt[slave]);
3498 break;
3499 }
3500}
3501
3502VOID zCc_SDtState(UINT8 slave)
3503{
3504 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDtState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave, g_Cc_CallDetail.evt[slave]);
3505 switch (g_Cc_CallDetail.evt[slave])
3506 {
3507 case ZCC_DTMF_E:
3508 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_IDLE);
3509 g_Cc_CallDetail.slaveObj[slave].idle_second = 0;
3510
3511 DeleteSoftTimer(ZCCAPP_TIMER_HOOKOFF_DETECT);
3512
3513 CreateSoftTimer(ZCCAPP_TIMER_DTMF_DETECT,
3514 0,
3515 ZCCAPP_TIMER_DTMF_INTERVAL,
3516 zCcApp_DtmfTimer,
3517 NULL);
3518 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDtState CreateSoftTimer zCcApp_DtmfTimer\n",__FUNCTION__);
3519 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_SIL_A;
3520 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_DACCM_S;
3521 break;
3522
3523 case ZCC_DISCN_E:
3524 //zCc_ClearDigits();
3525 zCc_InitSlaveObj(slave);
3526 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3527 return;
3528
3529 default://Ö»»áÊÇslave0£¬²»¿ÉÄÜÓëdsciµÄcid³åÍ»
3530 break;
3531 }
3532}
3533
3534VOID zCc_SDaccmState(UINT8 slave)
3535{
3536 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDaccmState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave, g_Cc_CallDetail.evt[slave]);
3537 UINT8 ret = 0;
3538 UINT8 tmpslave = 0;
3539
3540 switch (g_Cc_CallDetail.evt[slave])
3541 {
3542 case ZCC_DTMF_E:
3543 DeleteSoftTimer(ZCCAPP_TIMER_DTMF_DETECT);
3544 ret = zCc_DigitsMatch();
3545 break;
3546
3547 case ZCC_DISCN_E:
3548 zCc_ClearDigits();
3549 zCc_InitSlaveObj(slave);
3550 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3551 return;
3552 case ZCC_CIDCW_E:
3553 case ZCC_SINVITE_E://ÒÔdsciµÄcidΪ׼£¬ÖØÐ¸ømoµÄºô½Ð·ÖÅäidle cid
3554 tmpslave = zCc_GetSpecSlave(ZCC_S_IDLE_S);
3555 if (0 == tmpslave )
3556 {
3557 return;
3558 }
3559 g_Cc_CallDetail.slaveObj[tmpslave] = g_Cc_CallDetail.slaveObj[slave];
3560 zCc_InitSlaveObj(slave);
3561 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M;
3562 g_Cc_CallDetail.slaveObj[slave].state = g_Cc_CallDetail.resourceReady?ZCC_S_TRYING_S:ZCC_S_WAIT_RESOURCE_S;
3563 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDaccmState: reject mtcall\n",__FUNCTION__, slave);
3564 return;
3565 default:
3566 return;
3567 }
3568
3569 if(ret==ZCC_LOCAL_TEST_CALL)
3570 {
3571 SIGNAL_DATA tSig;
3572 if(zCc_talking_count())
3573 {
3574 zCc_ClearDigits();
3575 zCc_InitSlaveObj(slave);
3576 return;
3577 }
3578
3579 SLIC_Stop_Signal(0, TONE_SIGNAL);
3580 memset(&tSig, 0, sizeof(tSig));
3581 tSig.signal_type= TONE_SIGNAL;
3582 tSig.tone_type = TONE_CW;
3583 SLIC_Play_Signal(0, 0, &tSig);
3584
3585 zCc_ClearDigits();
3586
3587 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
3588 g_Cc_CallDetail.evt[slave]= ZCC_NO_E;
3589 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M;
3590
3591 local_test_call_st = LocalTestCallST_Start;
3592
3593 zCc_ShowAllSlaveWithTips("testCall-start");
3594 return ;
3595 }
3596
3597 zCc_DigitsMatchRltProc(ret);
3598}
3599
3600VOID zCc_SDialingState(UINT8 slave)
3601{
3602 UINT8 tmpslave = 0;
3603 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDialingState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave, g_Cc_CallDetail.evt[slave]);
3604 switch (g_Cc_CallDetail.evt[slave])
3605 {
3606 case ZCC_SRING_E:
3607 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_RINGBACK_S;
3608 break;
3609
3610 case ZCC_SANS_E:
3611 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
3612 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TALKING_S;
3613 SLIC_Stop_Signal(0, TONE_SIGNAL);
3614 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDialingState: SLIC_Stop_Signal <---\n",__FUNCTION__);
3615 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
3616 SLIC_Start_PCM();
3617 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDialingState: SLIC_Start_PCM <---\n",__FUNCTION__);
3618 break;
3619
3620 case ZCC_DISCN_E:
3621 //zCc_InitSlaveObj(slave);
3622 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M;
3623 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
3624 return;
3625
3626 case ZCC_SDISCN_MO_E:
3627 if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0 && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½ÐÇÒÒѹһúʱ²»·ÅæÒô
3628 {
3629 CreateSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT,
3630 0,
3631 ZCCAPP_TIMER_BUSYTONE_INTERVAL,
3632 zCcApp_BusyToneTimer,
3633 NULL);
3634 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDialingState CreateSoftTimer zCcApp_BusyToneTimer\n",__FUNCTION__);
3635 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A;
3636 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S;
3637 g_Cc_CallDetail.slaveObj[slave].confcall = 0;
3638 g_Cc_CallDetail.slaveObj[slave].heldcall = 0;
3639 }
3640 else
3641 {
3642 zCc_InitSlaveObj(slave);
3643 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3644 }
3645 return;
3646 case ZCC_SDISCN_MT_E:
3647 zCc_InitSlaveObj(slave);//Ö÷±»½Ð²¢·¢
3648 //g_Cc_CallDetail.slaveObj[slave].waitDSCI6 = 0;
3649 return;
3650 case ZCC_CIDCW_E:
3651 case ZCC_SINVITE_E://ÒÔdsciµÄcidΪ׼£¬ÖØÐ¸ømoµÄºô½Ð·ÖÅäidle cid
3652 tmpslave = zCc_GetSpecSlave(ZCC_S_IDLE_S);
3653 if (0 == tmpslave )
3654 {
3655 return;
3656 }
3657 g_Cc_CallDetail.slaveObj[tmpslave] = g_Cc_CallDetail.slaveObj[slave];
3658 zCc_InitSlaveObj(slave);
3659 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M;
3660 g_Cc_CallDetail.slaveObj[slave].state = g_Cc_CallDetail.resourceReady?ZCC_S_TRYING_S:ZCC_S_WAIT_RESOURCE_S;
3661 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDaccmState: reject mtcall\n",__FUNCTION__, slave);
3662 return;
3663
3664 default:
3665 return;
3666 }
3667}
3668
3669VOID zCc_SRingbackState(UINT8 slave)
3670{
3671 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave, g_Cc_CallDetail.evt[slave]);
3672 switch (g_Cc_CallDetail.evt[slave])
3673 {
3674 case ZCC_SANS_E:
3675 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
3676 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TALKING_S;
3677 SLIC_Stop_Signal(0, TONE_SIGNAL);
3678 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState: SLIC_Stop_Signal <---\n",__FUNCTION__);
3679 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
3680
3681 if(g_Cc_CallDetail.slaveObj[slave].is_callout)
3682 SLIC_PolarityReverse(0, TRUE);
3683
3684 SLIC_Start_PCM();
3685 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState SLIC_Start_PCM2222\n",__FUNCTION__);
3686 break;
3687
3688 case ZCC_DISCN_E:
3689 //zCc_InitSlaveObj(slave);
3690 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M;
3691 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
3692 return;
3693
3694 case ZCC_SDISCN_MO_E:
3695 if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0 && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½Ðʱ²»·ÅæÒô
3696 {
3697 CreateSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT,
3698 0,
3699 ZCCAPP_TIMER_BUSYTONE_INTERVAL,
3700 zCcApp_BusyToneTimer,
3701 NULL);
3702 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState CreateSoftTimer zCcApp_BusyToneTimer\n",__FUNCTION__);
3703 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A;
3704 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S;
3705 g_Cc_CallDetail.slaveObj[slave].confcall = 0;
3706 g_Cc_CallDetail.slaveObj[slave].heldcall = 0;
3707 SLIC_Stop_PCM();
3708 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState SLIC_Stop_PCM\n",__FUNCTION__);
3709 }
3710 else
3711 {
3712 zCc_InitSlaveObj(slave);
3713 if ( 0 == zCc_ActiveCall() && 0 == zCc_HeldCall())
3714 {
3715 SLIC_Stop_PCM();
3716 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState SLIC_Stop_PCM\n",__FUNCTION__);
3717 }
3718 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3719 }
3720 return;
3721 case ZCC_SDISCN_MT_E:
3722 g_Cc_CallDetail.slaveObj[slave].waitDSCI6 = 0;
3723 return;
3724
3725 case ZCC_DTMF_E: // ²¦ºÅ
3726 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDTMF_M;///???
3727 return;
3728
3729 case ZCC_RESOURCE_READY_E:
3730 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
3731 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState: SLIC_Stop_Signal <---\n",__FUNCTION__);
3732 SLIC_Stop_Signal(0, TONE_SIGNAL);
3733 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
3734 SLIC_Start_PCM();//×ÊÔ´ÒÑ·ÖÅä£¬Íø²à·ÅÒô
3735 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState SLIC_Start_PCM\n",__FUNCTION__);
3736 return;
3737
3738 default:
3739 return;
3740 }
3741}
3742
3743VOID zCc_STalkingState(UINT8 slave)
3744{
3745 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STalkingState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave, g_Cc_CallDetail.evt[slave]);
3746 switch (g_Cc_CallDetail.evt[slave])
3747 {
3748 case ZCC_DISCN_E:
3749 //zCc_InitSlaveObj(slave);
3750 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M;
3751 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
3752 return;
3753
3754 case ZCC_SDISCN_MO_E:
3755 case ZCC_SDISCN_MT_E:
3756 //zCc_InitSlaveObj(slave);
3757 if (zCc_CallCount() >= 2 || g_Cc_CallDetail.state == ZCC_M_RELEASE_S)//»¹Ê£¶àÓÚһ·ºô½Ð
3758 {
3759 zCc_InitSlaveObj(slave);
3760 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3761 break;
3762 }
3763 if (g_Cc_CallDetail.slaveObj[0].tone != ZCC_TONE_OFF_A)
3764 {
3765 zCc_InitSlaveObj(0);
3766 }
3767 if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)//ÓÐÆäËûºô½Ðʱ²»·ÅæÒô
3768 {
3769 CreateSoftTimer(ZCCAPP_TIMER_BUSYTONE_DETECT,
3770 0,
3771 ZCCAPP_TIMER_BUSYTONE_INTERVAL,
3772 zCcApp_BusyToneTimer,
3773 NULL);
3774 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STalkingState CreateSoftTimer zCcApp_BusyToneTimer\n",__FUNCTION__);
3775 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A;
3776 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S;
3777 g_Cc_CallDetail.slaveObj[slave].confcall = 0;
3778 g_Cc_CallDetail.slaveObj[slave].heldcall = 0;
3779 }
3780 else
3781 {
3782 zCc_InitSlaveObj(slave);
3783 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3784 }
3785 return;
3786
3787 case ZCC_DTMF_E: // ²¦ºÅ. µ÷ÕûÒôÁ¿µÄ´¦Àí´ýÔö¼Ó
3788 if (g_Cc_CallDetail.slaveObj[slave].heldcall == 0)
3789 {
3790 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDTMF_M;///???
3791 }
3792 return;
3793 default:
3794 return;
3795 }
3796}
3797
3798VOID zCc_SWaitResourceState(UINT8 slave)
3799{
3800 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SWaitResourceState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave, g_Cc_CallDetail.evt[slave]);
3801 switch (g_Cc_CallDetail.evt[slave])
3802 {
3803 case ZCC_RESOURCE_READY_E:
3804 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M;
3805 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TRYING_S;
3806 break;
3807
3808 case ZCC_SDISCN_MT_E:
3809 zCc_InitSlaveObj(slave);
3810 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3811 return;
3812
3813 default:
3814 return;
3815 }
3816}
3817
3818VOID zCc_STryingState(UINT8 slave)
3819{
3820 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STryingState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave, g_Cc_CallDetail.evt[slave]);
3821 switch (g_Cc_CallDetail.evt[slave])
3822 {
3823 case ZCC_CNCT_E:
3824 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SANS_M;
3825 //lint -fallthrough
3826 case ZCC_SANS_E: //CHLD=2, ÊÕµ½DSCIǨ״̬
3827 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
3828 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TALKING_S;
3829 g_Cc_CallDetail.ringCid = 0;
3830 SLIC_Stop_Signal(0, TONE_SIGNAL);
3831 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STryingState: SLIC_Stop_Signal <---\n",__FUNCTION__);
3832 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
3833 SLIC_Start_PCM();
3834 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STryingState SLIC_Start_PCM\n",__FUNCTION__);
3835 break;
3836
3837 case ZCC_SDISCN_MT_E:
3838 zCc_InitSlaveObj(slave);
3839 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3840 return;
3841
3842 case ZCC_DISCN_E://trying ̬ÊÕµ½¹Ò»úÏûÏ¢£¬Ö»ÄÜÊÇÕª»ú̬À´µç(²»°üÀ¨ºô½ÐµÈ´ý)µÄ³¡¾°
3843 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
3844 SLIC_Stop_Signal(0, TONE_SIGNAL);
3845 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STryingState: SLIC_Stop_Signal <---\n",__FUNCTION__);
3846 g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A;
3847 if (1 == zCc_CallCount() && (zCc_GetDiscSlave(ZCC_SDISCN_M) == 0)// Õª»ú̬À´µçʱ¹Ò»ú£¬Èç¹ûµ±Ç°Ö»ÓÐһ·ºô½Ð£¬»°»úתÈëÕñÁå
3848 ||(2 == zCc_CallCount()
3849 && (0 != zCc_GetSpecSlave(ZCC_S_DACCM_S)
3850 ||0 != zCc_GetSpecSlave(ZCC_S_BSYT_S)
3851 ||0 != zCc_GetSpecSlave(ZCC_S_TKYT_S)
3852 ||0 != zCc_GetSpecSlave(ZCC_S_SIL_S))))//Õª»úºó£¬À´µç£¬ÔÙ²¦ºÅ£¬¹Ò»ú£¬Ò²ÐèÒªÕñÁå
3853 {
3854 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M;
3855 }
3856 else
3857 {
3858 //zCc_InitSlaveObj(slave);
3859 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A;
3860 g_Cc_CallDetail.ringCid = 0;
3861 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M;
3862 }
3863 return;
3864
3865 default:
3866 return;
3867 }
3868}
3869
3870VOID zCc_SBsyToneState(UINT8 slave)
3871{
3872 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SBsyToneState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave, g_Cc_CallDetail.evt[slave]);
3873 switch (g_Cc_CallDetail.evt[slave])
3874 {
3875 case ZCC_DISCN_E:
3876 zCc_InitSlaveObj(slave);
3877 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3878 return;
3879 case ZCC_CIDCW_E:
3880 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_CIDCW_A;
3881 //lint -fallthrough
3882 case ZCC_SINVITE_E:
3883 if ((0 != zCc_GetDialingSlave(1)) || (0 != zCc_GetSpecSlave(ZCC_S_RINGBACK_S)))//ÓÐÒѾ­Ï·¢atd µÄºô½Ðʱ¾Ü¾øÐÂÀ´µç
3884 {
3885 zCc_InitSlaveObj(slave);
3886 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3887 g_Cc_CallDetail.evt[slave] = ZCC_DISCN_E;
3888 return;
3889 }
3890 g_Cc_CallDetail.ringCid = slave;
3891
3892 if(g_Cc_CallDetail.evt[slave]==ZCC_CIDCW_E)
3893 g_Cc_CallDetail.slaveObj[slave].is_cidcw = TRUE;
3894 else
3895 g_Cc_CallDetail.slaveObj[slave].is_cidcw = FALSE;
3896
3897 if (g_Cc_CallDetail.resourceReady == 1)
3898 {
3899 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M;
3900 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TRYING_S;
3901 }
3902 else
3903 {
3904 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_WAIT_RESOURCE_S;
3905 }
3906 break;
3907 default:
3908 return;
3909 }
3910}
3911
3912VOID zCc_STkytState(UINT8 slave)
3913{
3914 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STkytState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave, g_Cc_CallDetail.evt[slave]);
3915 switch (g_Cc_CallDetail.evt[slave])
3916 {
3917 case ZCC_DISCN_E:
3918 zCc_InitSlaveObj(slave);
3919 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3920 return;
3921 case ZCC_CIDCW_E:
3922 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_CIDCW_A;
3923 //lint -fallthrough
3924 case ZCC_SINVITE_E:
3925 if ((0 != zCc_GetDialingSlave(1)) || (0 != zCc_GetSpecSlave(ZCC_S_RINGBACK_S)))//ÓÐÒѾ­Ï·¢atd µÄºô½Ðʱ¾Ü¾øÐÂÀ´µç
3926 {
3927 zCc_InitSlaveObj(slave);
3928 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3929 g_Cc_CallDetail.evt[slave] = ZCC_DISCN_E;
3930 return;
3931 }
3932 g_Cc_CallDetail.ringCid = slave;
3933
3934 if(g_Cc_CallDetail.evt[slave]==ZCC_CIDCW_E)
3935 g_Cc_CallDetail.slaveObj[slave].is_cidcw = TRUE;
3936 else
3937 g_Cc_CallDetail.slaveObj[slave].is_cidcw = FALSE;
3938
3939 if (g_Cc_CallDetail.resourceReady == 1)
3940 {
3941 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M;
3942 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TRYING_S;
3943 }
3944 else
3945 {
3946 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_WAIT_RESOURCE_S;
3947 }
3948 break;
3949 default:
3950 return;
3951 }
3952}
3953
3954VOID zCc_SSilState(UINT8 slave)
3955{
3956 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SSilState g_Cc_CallDetail.evt[%d] = %d\n",__FUNCTION__,slave, g_Cc_CallDetail.evt[slave]);
3957 switch (g_Cc_CallDetail.evt[slave])
3958 {
3959 case ZCC_DISCN_E:
3960 zCc_InitSlaveObj(slave);
3961 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3962 return;
3963 case ZCC_CIDCW_E:
3964 g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_CIDCW_A;
3965 //lint -fallthrough
3966 case ZCC_SINVITE_E:
3967 if ((0 != zCc_GetDialingSlave(1)) || (0 != zCc_GetSpecSlave(ZCC_S_RINGBACK_S)))//ÓÐÒѾ­Ï·¢atd µÄºô½Ðʱ¾Ü¾øÐÂÀ´µç
3968 {
3969 zCc_InitSlaveObj(slave);
3970 zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave);
3971 g_Cc_CallDetail.evt[slave] = ZCC_DISCN_E;
3972 return;
3973 }
3974 g_Cc_CallDetail.ringCid = slave;
3975
3976 if(g_Cc_CallDetail.evt[slave]==ZCC_CIDCW_E)
3977 g_Cc_CallDetail.slaveObj[slave].is_cidcw = TRUE;
3978 else
3979 g_Cc_CallDetail.slaveObj[slave].is_cidcw = FALSE;
3980
3981 if (g_Cc_CallDetail.resourceReady == 1)
3982 {
3983 g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M;
3984 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TRYING_S;
3985 }
3986 else
3987 {
3988 g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_WAIT_RESOURCE_S;
3989 }
3990 break;
3991
3992 default:
3993 return;
3994 }
3995}
3996
3997