| /************************************************************************** | |
| * | |
| * Copyright (c) 2013 ZTE Corporation. | |
| * | |
| *************************************************************************** | |
| * Ä£ ¿é Ãû : CcApp | |
| * ÎÄ ¼þ Ãû : at_proc.c | |
| * Ïà¹ØÎļþ : | |
| * ʵÏÖ¹¦ÄÜ : ATÃüÁî·¢Ëͺͽá¹û´¦ÀíÄ£¿éº¯Êý¶¨Òå | |
| * ×÷ Õß : syx | |
| * °æ ±¾ : V1.0 | |
| * Íê³ÉÈÕÆÚ : 2013-01-05 | |
| * ÆäËü˵Ã÷ : | |
| **************************************************************************/ | |
| /************************************************************************** | |
| * Ð޸ļǼ : | |
| ***************************************************************************/ | |
| /************************************************************************** | |
| * Ð޸ıàºÅ : 0001 | |
| * ÐÞ ¸Ä ÈË : | |
| * ÐÞ¸ÄÈÕÆÚ : | |
| * ÐÞ¸ÄÄÚÈÝ : | |
| **************************************************************************/ | |
| /************************************************************************** | |
| * #includeÇø | |
| **************************************************************************/ | |
| #include "cc_main.h" | |
| #include "cc_proc.h" | |
| #include "cc_com.h" | |
| #include "cc_at.h" | |
| #include "cc_timer.h" | |
| #include "string.h" | |
| #ifdef TEST_CCAPP | |
| #include "soft_timer.h" | |
| #endif | |
| #include "slic_inf.h" | |
| #include <stdint.h> | |
| #include <linux/volte_drv.h> | |
| #include "voice_lib.h" | |
| #define LOCAL_TEST_CALL_CODE "*#66*#" | |
| #define TZ_TEST_TIMING "*#83781234*#" | |
| typedef enum{ | |
| LocalTestCallST_None = 0, | |
| LocalTestCallST_Start, | |
| LocalTestCallST_Ring, | |
| LocalTestCallST_End | |
| }eLocalTestCallST; | |
| int local_test_call_st = 0; | |
| typedef enum{ | |
| LocalTestCallType_None = 0, | |
| LocalTestCallType_LOOP | |
| }eLocalTestCallType; | |
| int local_test_call_type = 0; | |
| extern SINT32 g_zCc_AtRspId; | |
| int zCc_find_held_cid(void); | |
| int zCc_find_held_incoming_cid(void); | |
| int zCc_find_all_callout(int slave[ZCC_SLAVES]); | |
| int zCc_talking_count(void); | |
| char *get_local_date_time(void); | |
| char *get_local_datetime(char *buff); | |
| /************************************************************************** | |
| * ³£Á¿¶¨ÒåÇø | |
| **************************************************************************/ | |
| /* { | |
| ZCC_S_IDLE_S = 0, | |
| ZCC_S_DT_S , | |
| ZCC_S_DACCM_S , | |
| ZCC_S_DIALING_S , | |
| ZCC_S_RINGBACK_S ,// Ö÷½Ð¹ý³ÌÖеÄÕñÁå̬ | |
| ZCC_S_BSYT_S , | |
| ZCC_S_TKYT_S , | |
| ZCC_S_SIL_S , | |
| ZCC_S_TALKING_S , | |
| ZCC_S_TRYING_S , | |
| ZCC_S_WAIT_RESOURCE_S , | |
| } */ | |
| const pCcSlaveFsmFunc zCcSlaveFsmFunc[] = {zCc_SIdleState, | |
| zCc_SDtState, | |
| zCc_SDaccmState, | |
| zCc_SDialingState, | |
| zCc_SRingbackState, | |
| zCc_SBsyToneState, | |
| zCc_STkytState, | |
| zCc_SSilState, | |
| zCc_STalkingState, | |
| zCc_STryingState, | |
| zCc_SWaitResourceState | |
| }; | |
| /* | |
| CB | |
| *54*KSSSS# REGISTER AT+CLCK="AO",1,"SSSS" | |
| #54*KSSSS# DeREGISTER AT+CLCK="AO",0,"SSSS" | |
| *#54# QUERY/CHECK AT+CLCK="AO",2,"SSSS" not supported--------------------------- | |
| K=1 "AO"; K=2 or K=3 "OI"(ÒÆ¶¯ÍøÃ»ÓйúÄÚ³¤Í¾ÏÞÖÆÒµÎñ); SSSS password | |
| *56# REGISTER AT+CLCK="AI",1,"SSSS" ÐèÒªÖÕ¶Ë·½°¸»ò¸Ä²Ù×÷·½Ê½--------------------------- | |
| #56# DeREGISTER AT+CLCK="AI",0,"SSSS" --------------------------- | |
| CFU | |
| *57*DN# REGISTER AT+CCFC=0,1,"DN" | |
| #57# DeREGISTER AT+CCFC=0,0 | |
| *#57*DN# AT+CCFC=0,2 not supported--------------------------- | |
| CFNRy | |
| *41*DN# REGISTER AT+CCFC=2,1,"DN" | |
| #41# DeREGISTER AT+CCFC=2,0 | |
| *#41*DN# AT+CCFC=2,2 not supported--------------------------- | |
| CFB | |
| *40*DN# REGISTER AT+CCFC=1,1,"DN" | |
| #40# DeREGISTER AT+CCFC=1,0 | |
| *#40*DN# AT+CCFC=1,2 not supported--------------------------- | |
| CW ( ÖÕ¶Ë·½°¸´ý¼Ó ) | |
| *58# REGISTER AT+CCWA=0,1 --------------------------- | |
| #58# DeREGISTER AT+CCWA=0,0 --------------------------- | |
| */ | |
| static const T_zCc_ScTab g_zCc_SCTab[] = | |
| { | |
| {ZCC_BAOC_REG, 10, 10, "*54*1"}, | |
| {ZCC_BAOC_DEREG, 10, 10, "#54*1"}, | |
| {ZCC_BOIC_REG, 10, 10, "*54*2"}, | |
| {ZCC_BOIC_DEREG, 10, 10, "#54*2"}, | |
| {ZCC_BOIC_REG, 10, 10, "*54*3"}, | |
| {ZCC_BOIC_DEREG, 10, 10, "#54*3"}, | |
| {ZCC_CFU_REG, 6, SC_MAXLEN, "*57*"}, | |
| {ZCC_CFU_DEREG, 4, 4, "#57#"}, | |
| {ZCC_CFNRY_REG, 6, SC_MAXLEN, "*41*"}, | |
| {ZCC_CFNRY_DEREG, 4, 4, "#41#"}, | |
| {ZCC_CFB_REG, 6, SC_MAXLEN, "*40*"}, | |
| {ZCC_CFB_DEREG, 4, 4, "#40#"}, | |
| }; | |
| T_CC_APP_RecvAtIndItem gCcAppRecvAtIndProc[]= | |
| { | |
| {MSG_CMD_DSCI_IND, zCc_RecvDsciInd}, | |
| {MSG_CMD_ZCPI,zCc_RecvZcpiInd}, | |
| {MSG_CMD_ZIMSPLUS_IND,zCc_RecvImsplusInd}, | |
| {MSG_CMD_ZVOICECHNL,zCc_RecvZvoiceChnl}, | |
| {MSG_CMD_ATD_DIAL_RSP,zCc_RecvRsp}, | |
| {MSG_CMD_ATA_RSP,zCc_RecvRsp}, | |
| {MSG_CMD_CHUP_RSP,zCc_RecvRsp}, | |
| {MSG_CMD_VTS_RSP,zCc_RecvRsp}, | |
| {MSG_CMD_ZIMSPLUS_RSP,zCc_RecvRsp}, | |
| {MSG_CMD_CLCK_RSP,zCc_RecvRsp}, | |
| {MSG_CMD_CCFC_RSP,zCc_RecvRsp}, | |
| {MSG_CMD_CHLD_RSP,zCc_RecvRsp} | |
| }; | |
| T_CC_APP_AtIndProcItem gCcAppAtIndProc[]= | |
| { | |
| {MSG_CMD_DSCI_IND, zCc_DsciIndProc}, | |
| {MSG_CMD_ZCPI,zCc_ZcpiIndProc}, | |
| {MSG_CMD_ZIMSPLUS_IND,zCc_ZimsplusProc}, | |
| {MSG_CMD_ZVOICECHNL,zCc_ZvoicechnlProc} | |
| }; | |
| SINT32 gCcAppRecvAtIndProcCnt = sizeof(gCcAppRecvAtIndProc)/sizeof(gCcAppRecvAtIndProc[0]); | |
| SINT32 gCcAppRecvAtIndCnt = sizeof(gCcAppAtIndProc)/sizeof(gCcAppAtIndProc[0]); | |
| char g_zCcApp_AtRecvBuf[ZCC_APP_AT_BUF_MAX_LEN+1] = {0}; | |
| T_zCc_CurAtCmdInfo * g_Cc_AtIndRspMsg; | |
| VOID zCc_ShowAllSlave(VOID) | |
| { | |
| UINT8 slave = 0; | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| ccapp_log(" slave=%d number=%s cid=%d state=%d tone=%d msg=%d held=%d isOut=%d dsci6=%d", | |
| slave, | |
| g_Cc_CallDetail.slaveObj[slave].number, | |
| g_Cc_CallDetail.slaveObj[slave].cid, | |
| g_Cc_CallDetail.slaveObj[slave].state, | |
| g_Cc_CallDetail.slaveObj[slave].tone, | |
| g_Cc_CallDetail.slaveObj[slave].sMsg, | |
| g_Cc_CallDetail.slaveObj[slave].heldcall, | |
| g_Cc_CallDetail.slaveObj[slave].is_callout, | |
| g_Cc_CallDetail.slaveObj[slave].waitDSCI6); | |
| } | |
| } | |
| VOID zCc_ShowAllSlaveWithTips(const char *tips) | |
| { | |
| UINT8 slave = 0; | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| 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", | |
| tips, g_Cc_CallDetail.state, | |
| slave, | |
| g_Cc_CallDetail.slaveObj[slave].number, | |
| g_Cc_CallDetail.slaveObj[slave].cid, | |
| g_Cc_CallDetail.slaveObj[slave].state, | |
| g_Cc_CallDetail.slaveObj[slave].tone, | |
| g_Cc_CallDetail.slaveObj[slave].sMsg, | |
| g_Cc_CallDetail.slaveObj[slave].heldcall, | |
| g_Cc_CallDetail.slaveObj[slave].is_callout, | |
| g_Cc_CallDetail.slaveObj[slave].waitDSCI6); | |
| } | |
| } | |
| VOID zCc_CheckSlaveState(const char *tips) | |
| { | |
| UINT8 slave = 0; | |
| if(g_Cc_CallDetail.old_state != g_Cc_CallDetail.state) | |
| { | |
| ccapp_log("=========== %s =============\n master state %d --> %d", | |
| tips, | |
| g_Cc_CallDetail.old_state, | |
| g_Cc_CallDetail.state); | |
| g_Cc_CallDetail.old_state = g_Cc_CallDetail.state; | |
| } | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| if(g_Cc_CallDetail.slaveObj[slave].old_state != g_Cc_CallDetail.slaveObj[slave].state) | |
| { | |
| ccapp_log("=========== %s =============\n slave=%d state %d --> %d", | |
| tips, | |
| slave, | |
| g_Cc_CallDetail.slaveObj[slave].old_state, | |
| g_Cc_CallDetail.slaveObj[slave].state); | |
| g_Cc_CallDetail.slaveObj[slave].old_state = g_Cc_CallDetail.slaveObj[slave].state; | |
| } | |
| } | |
| } | |
| VOID zCc_ClearDigits(VOID) | |
| { | |
| g_Cc_CallDetail.dCount = 0; | |
| memset(g_Cc_CallDetail.digits, 0, sizeof(g_Cc_CallDetail.digits)); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ClearDigits: digits cleared\n",__FUNCTION__); | |
| } | |
| VOID zCc_InitSlaveObj(UINT8 slave) | |
| { | |
| memset(&g_Cc_CallDetail.slaveObj[slave], 0, sizeof(T_zCc_SlaveObj)); | |
| if (slave == g_Cc_CallDetail.ringCid) | |
| { | |
| g_Cc_CallDetail.ringCid = 0; | |
| } | |
| } | |
| UINT8 zCc_TalkingCall(UINT8 heldcall) | |
| { | |
| UINT8 slave = 0, cnt = 0; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_TALKING_S | |
| && g_Cc_CallDetail.slaveObj[slave].heldcall == heldcall | |
| && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| cnt++; | |
| } | |
| } | |
| return cnt; | |
| } | |
| UINT8 zCc_GetWaitDisc6Slave(VOID) | |
| { | |
| UINT8 slave = 0, cnt = 0; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 1) | |
| { | |
| cnt++; | |
| } | |
| } | |
| return cnt; | |
| } | |
| UINT8 zCc_BusyToneAllowed(VOID) | |
| { | |
| UINT8 slave = 0, cnt = 0; | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S ) | |
| { | |
| cnt++; | |
| } | |
| } | |
| if ((1 == cnt)//µ±Ç°Ã»ÓÐÆäËûºô½Ð | |
| ||(cnt == 2 && g_Cc_CallDetail.ringCid !=0 | |
| && g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].state == ZCC_S_TRYING_S | |
| && g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].tone != ZCC_TONE_CIDCW_A)//Õª»ú̬»¹ÓÐÀ´µçÇÒδ·ÅÒô | |
| ||(cnt == zCc_GetWaitDisc6Slave()+1))//ÆäËûºô½Ð¶¼ÊÇÔÚµÈdsci6µÄ | |
| { | |
| return 1; | |
| } | |
| else | |
| { | |
| return 0; | |
| } | |
| } | |
| UINT8 zCc_ActiveCall(VOID) | |
| { | |
| return zCc_TalkingCall(0); | |
| } | |
| UINT8 zCc_HeldCall(VOID) | |
| { | |
| return zCc_TalkingCall(1); | |
| } | |
| UINT8 zCc_GetSpecSlave(UINT8 state) | |
| { | |
| UINT8 slave = 0; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state == state && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| return slave; | |
| } | |
| } | |
| return 0; | |
| } | |
| UINT8 zCc_GetSpecSlaveIgnoreWaitDSCI6(UINT8 state) | |
| { | |
| UINT8 slave = 0; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state == state) | |
| { | |
| return slave; | |
| } | |
| } | |
| return 0; | |
| } | |
| UINT8 zCc_Find_waitDSCI6_cid(void) | |
| { | |
| UINT8 slave = 0; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state!=ZCC_S_IDLE_S && | |
| g_Cc_CallDetail.slaveObj[slave].waitDSCI6!=0) | |
| { | |
| return slave; | |
| } | |
| } | |
| return 0; | |
| } | |
| UINT8 zCc_GetDialingSlave(UINT8 waitDSCI6) | |
| { | |
| UINT8 slave = 0; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_DIALING_S ) | |
| { | |
| if (waitDSCI6) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| return slave; | |
| } | |
| } | |
| else | |
| { | |
| return slave; | |
| } | |
| } | |
| } | |
| return 0; | |
| } | |
| UINT8 zCc_GetDiscSlave(UINT8 state) | |
| { | |
| UINT8 slave = 0; | |
| UINT8 cnt = 0; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].sMsg== ZCC_SDISCN_M && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| cnt++; | |
| } | |
| } | |
| return cnt; | |
| } | |
| int tz_lock_cellid_is_limit_callin() | |
| { | |
| char cellid_is_lock[4] = {0}; | |
| sc_cfg_get("cellid_is_lock",cellid_is_lock,sizeof(cellid_is_lock)); | |
| if(strcmp(cellid_is_lock, "1") == 0) | |
| return 1; | |
| return 0; | |
| } | |
| int tz_lock_cellid_check_sos_num() | |
| { | |
| int ret = 0; | |
| char tz_Mexico_sos_lock_cellid[128] = {0}; | |
| ret = strlen(g_Cc_CallDetail.digits); | |
| sc_cfg_get("tz_Mexico_sos_lock_cellid",tz_Mexico_sos_lock_cellid,sizeof(tz_Mexico_sos_lock_cellid)); | |
| if(ret > 0 && ((g_Cc_CallDetail.digits[ret-1] == '#') || (g_Cc_CallDetail.digits[ret-1] == 'T'))) | |
| { | |
| return TRUE; | |
| } | |
| else if(strstr(tz_Mexico_sos_lock_cellid, g_Cc_CallDetail.digits) != NULL) | |
| { | |
| return TRUE; | |
| } | |
| else | |
| { | |
| return FALSE; | |
| } | |
| } | |
| extern int digit_map_call(char *num); | |
| /* µ±Ç°Ò»Â· ·Ç ±£³ÖµÄ ºô½Ð£¬FLASH£¬µ±Ç°ºô½Ð±»±£³Ö»òÊÍ·Å£¬digitsÖ»¼Ç¼Óû§²¦´òµÄºÅÂ룻 | |
| µ±Ç°Ò»Â· ·Ç ±£³ÖµÄ ºô½Ð£¬FLASH£¬µ±Ç°ºô½Ð±»»Ö¸´£» | |
| ÆäËü³¡¾°ÐèÒªdigits ¼Ç¼ZCC_FLASH_SIGNºÍÓû§ ²¦´òµÄһλºÅÂë */ | |
| UINT8 zCc_DigitsMatch(VOID) | |
| { | |
| UINT16 i = 0; | |
| UINT8 scSum = sizeof(g_zCc_SCTab)/sizeof(T_zCc_ScTab); | |
| ccapp_log("zCc_DigitsMatch: digits=%s dCount=%d\n",g_Cc_CallDetail.digits,g_Cc_CallDetail.dCount); | |
| if(tz_lock_cellid_is_limit_callin()) | |
| { | |
| if(tz_lock_cellid_check_sos_num() == FALSE) | |
| return ZCC_MATCHERR; | |
| } | |
| if (g_Cc_CallDetail.dCount == 0) | |
| { | |
| //ccapp_log("1"); | |
| return ZCC_NO_RESULT; | |
| } | |
| if(g_Cc_CallDetail.dCount >= 2 && g_Cc_CallDetail.dCount<ZDIAL_NUM_MAX) | |
| { | |
| if(g_Cc_CallDetail.digits[0]!=ZCC_FLASH_SIGN && | |
| g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1]!=ZCC_TIMEOUT_SIGN) | |
| { | |
| printf("g_Cc_CallDetail.digits = %s\n",g_Cc_CallDetail.digits); | |
| if(strcmp(LOCAL_TEST_CALL_CODE, g_Cc_CallDetail.digits)==0) | |
| { | |
| //ccapp_log("2"); | |
| local_test_call_type = LocalTestCallType_None; | |
| return ZCC_LOCAL_TEST_CALL; | |
| } | |
| else if(strcmp(TZ_TEST_TIMING, g_Cc_CallDetail.digits)==0) | |
| { | |
| local_test_call_type = LocalTestCallType_LOOP; | |
| return ZCC_LOCAL_TEST_CALL; | |
| } | |
| } | |
| if(g_Cc_CallDetail.digits[0]=='*' && g_Cc_CallDetail.digits[1]=='#') | |
| { | |
| //ccapp_log("3"); | |
| return ZCC_NO_RESULT; | |
| } | |
| } | |
| if(g_Cc_CallDetail.dCount>=ZDIAL_NUM_MAX) | |
| { | |
| //ccapp_log("4"); | |
| return ZCC_MATCHERR; | |
| } | |
| if(digit_map_call(g_Cc_CallDetail.digits)!=0) | |
| { | |
| ccapp_log("digit_map_call match %s", g_Cc_CallDetail.digits); | |
| return ZCC_CALL; | |
| } | |
| if (g_Cc_CallDetail.digits[0] >= '0' && g_Cc_CallDetail.digits[0] <= '9') | |
| { | |
| //ccapp_log("5"); | |
| return (g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] == '#' | |
| || g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] == ZCC_TIMEOUT_SIGN | |
| || g_Cc_CallDetail.dCount == ZDIAL_NUM_MAX) ? ZCC_CALL : ZCC_NO_RESULT; | |
| } | |
| //ccapp_log("6"); | |
| if (g_Cc_CallDetail.digits[0] == ZCC_FLASH_SIGN) //ÖÁÉÙÓÐ2·ºô½ÐÁË | |
| { | |
| switch (g_Cc_CallDetail.digits[1]) | |
| { | |
| case '0': | |
| return ZCC_FLASH_0; | |
| case '1': | |
| return ZCC_FLASH_1; | |
| case '2': | |
| case ZCC_TIMEOUT_SIGN: | |
| return ZCC_FLASH_2; | |
| case '3': | |
| return ZCC_FLASH_3; | |
| case '4': | |
| return ZCC_FLASH_4; | |
| default: | |
| return ZCC_MATCHERR; | |
| } | |
| } | |
| /*for (i = 0; i<scSum; i++) | |
| { | |
| if (strncmp((CHAR *)g_zCc_SCTab[i].sc, (CHAR *)g_Cc_CallDetail.digits, | |
| (UINT32)(strlen(g_zCc_SCTab[i].sc)<g_Cc_CallDetail.dCount)?strlen(g_zCc_SCTab[i].sc):g_Cc_CallDetail.dCount) == 0) | |
| { | |
| if (g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] == '#') | |
| { | |
| return g_zCc_SCTab[i].scName; | |
| } | |
| if (g_Cc_CallDetail.dCount < g_zCc_SCTab[i].scMaxLen) | |
| { | |
| return ZCC_NO_RESULT; | |
| } | |
| if (g_Cc_CallDetail.dCount == g_zCc_SCTab[i].scMaxLen) | |
| { | |
| return ZCC_MATCHERR; | |
| } | |
| } | |
| }*/ | |
| if(g_Cc_CallDetail.dCount>=2 && | |
| g_Cc_CallDetail.dCount<ZDIAL_NUM_MAX && | |
| g_Cc_CallDetail.digits[0]=='*') | |
| { | |
| if(g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] == '#' | |
| || g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] == ZCC_TIMEOUT_SIGN) | |
| { | |
| ccapp_log("match special code: %s", g_Cc_CallDetail.digits); | |
| return ZCC_CALL; | |
| } | |
| else | |
| { | |
| //ccapp_log("8"); | |
| return ZCC_NO_RESULT; | |
| } | |
| } | |
| //ccapp_log("9"); | |
| return ZCC_MATCHERR; | |
| } | |
| VOID zCc_DigitsMatchRltProc(UINT8 ret) | |
| { | |
| UINT8 callCnt = 0, slave = 0; | |
| SINT32 chldret = -1; | |
| ccapp_log("ret=%d", ret); | |
| slave = zCc_GetSpecSlave(ZCC_S_DACCM_S); | |
| switch (ret) | |
| { | |
| case ZCC_NO_RESULT: | |
| sc_timer_create(ZCCAPP_TIMER_DTMF_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_DTMF_INTERVAL, | |
| zCcApp_DtmfTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DigitsMatchRltProc sc_timer_create zCcApp_DtmfTimer\n",__FUNCTION__); | |
| return; | |
| case ZCC_CALL: | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SINV_M; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_DIALING_S; | |
| if(g_Cc_CallDetail.digits[0]!='*' && (digit_map_call(g_Cc_CallDetail.digits)==0)) | |
| { | |
| g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount-1] = 0; | |
| g_Cc_CallDetail.dCount--; | |
| } | |
| strcpy(g_Cc_CallDetail.slaveObj[slave].number, g_Cc_CallDetail.digits); | |
| g_Cc_CallDetail.slaveObj[slave].is_callout = TRUE; | |
| return; | |
| case ZCC_FLASH_1: | |
| callCnt = zCc_CallCount(); | |
| if ((1 < callCnt) && (zCc_ActiveCall() == callCnt) ) // ¼Ç¼±¾´Î²Ù×÷ΪÕë¶Ôconf µÄ | |
| { | |
| chldret = zCc_SendAtChldReq(21); | |
| } | |
| else //if (1 < callCnt) | |
| { | |
| slave = zCc_GetSpecSlave(ZCC_S_DIALING_S); | |
| if(slave) | |
| { | |
| ccapp_log("zCc_SendAtChldReq(%d) dialing", 10+slave); | |
| chldret = zCc_SendAtChldReq(10+slave); | |
| SLIC_Stop_Signal(0,TONE_SIGNAL); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| break; | |
| } | |
| slave = zCc_GetSpecSlave(ZCC_S_RINGBACK_S); | |
| if(slave) | |
| { | |
| ccapp_log("zCc_SendAtChldReq(%d) ringback", 10+slave); | |
| chldret = zCc_SendAtChldReq(10+slave); | |
| SLIC_Stop_Signal(0,TONE_SIGNAL); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| break; | |
| } | |
| ccapp_log("zCc_SendAtChldReq(1)-"); | |
| chldret = zCc_SendAtChldReq(1); | |
| } | |
| break; | |
| case ZCC_FLASH_2: | |
| chldret = zCc_SendAtChldReq(2); | |
| break; | |
| case ZCC_FLASH_3: | |
| if(zCc_talking_count()==1 && zCc_GetSpecSlave(ZCC_S_TRYING_S)) | |
| { | |
| // talking + incoming, skip hookflash+3, do nothing | |
| } | |
| else | |
| chldret = zCc_SendAtChldReq(3); | |
| break; | |
| case ZCC_FLASH_4: | |
| if( zCc_CallCount()> 1) | |
| { | |
| //system("at_cmd AT+ZTOR=2"); | |
| //zCcApp_send_message(MSG_CMD_ACTIVE_CALL_TRANSFER, 0, NULL); | |
| //ccapp_log("send MSG_CMD_ACTIVE_CALL_TRANSFER"); | |
| chldret = zCc_SendAtChldReq(4); //AT+CHLD=4 | |
| } | |
| else | |
| ccapp_log("skip at_cmd AT+ZTOR=2"); | |
| break; | |
| case ZCC_FLASH_0://¾Ü½ÓÀ´µç£¬Í£Ö¹·ÅÒô£¬»Ö¸´ÓïÒô | |
| SLIC_Stop_Signal(0,0); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DigitsMatchRltProc: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| zCc_InitSlaveObj(0); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| SLIC_Start_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DigitsMatchRltProc: SLIC_Start_PCM <---\n",__FUNCTION__); | |
| chldret = zCc_SendAtChldReq(0); | |
| break; | |
| case ZCC_MATCHERR: | |
| if (g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN) | |
| { | |
| zCc_ClearDigits(); | |
| if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½Ðʱ²»·ÅæÒô | |
| { | |
| sc_timer_create(ZCCAPP_TIMER_BUSYTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_BUSYTONE_INTERVAL, | |
| zCcApp_BusyToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DigitsMatchRltProc sc_timer_create zCcApp_BusyToneTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S; | |
| g_Cc_CallDetail.slaveObj[slave].confcall = 0; | |
| g_Cc_CallDetail.slaveObj[slave].heldcall = 0; | |
| } | |
| else | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| zCc_InitSlaveObj(slave); | |
| } | |
| return; | |
| } | |
| break; | |
| default: | |
| if (ret >= ZCC_BAOC_REG && ret <= ZCC_CFB_DEREG)// SS slave=1 | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SINV_M; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_IDLE_S;//±ÜÃâºóÃæ¹Ò»ú»á·¢Æðchup | |
| } | |
| return; | |
| } | |
| zCc_ClearDigits(); | |
| //zCc_InitSlaveObj(slave); | |
| } | |
| #if 0 | |
| VOID zCc_PreProcRes(CHAR *pParaLine) | |
| { | |
| SINT32 flg = 0; | |
| UINT32 i = 0; | |
| UINT32 length = 0; | |
| CHAR *pSource = pParaLine; | |
| CHAR *pDest = NULL; | |
| CHAR *pStrDestMalloc = (CHAR *)malloc(AT_CMD_MAX); | |
| if (NULL == pStrDestMalloc) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_PreProcRes: Malloc failed !!!\n",__FUNCTION__); | |
| return; | |
| } | |
| memset(pStrDestMalloc, 0, AT_CMD_MAX); | |
| assert(pParaLine != NULL); | |
| pDest = pStrDestMalloc; | |
| length = strlen(pParaLine); | |
| if (length == 0 || length >= ZAT_MAX_LEN) | |
| { | |
| free(pStrDestMalloc); | |
| return; | |
| } | |
| for (i = 0; (i < length )&& (pDest - pStrDestMalloc < AT_CMD_MAX); i++) | |
| { | |
| if ('"' == *pSource) | |
| { | |
| flg = (0 == flg)?1:0; /* Ë«ÒýºÅ ɾ³ý */ | |
| if ('"' == *(pSource + 1)) /* ÐǺźóÃæ½ô¸úÐǺţ¬²åÈë¿Õ´®Õ¼Î»·û */ | |
| { | |
| *pDest++ = (CHAR)ZAT_NULL_FILL; | |
| } | |
| } | |
| else if ((',' == *pSource) && (0 == flg)) | |
| { | |
| *pDest++ = ' '; /* Ë«ÒýºÅÍâÃæµÄ¶ººÅ£¬Ìæ»»³É¿Õ¸ñ */ | |
| if (',' == *(pSource + 1)) /* ¶ººÅºóÃæ½ô¸ú¶ººÅ£¬»òÕßÒÔ¶ººÅ½á⣬²åÈë¿Õ´®Õ¼Î»·û */ | |
| { | |
| *pDest++ = '9'; //±£Áô²ÎÊýÓÃ9ÔÝʱ´úÌæ | |
| } | |
| else if ('\0' == *(pSource + 1)) /* ¶ººÅºóÃæ½ô¸ú¶ººÅ£¬»òÕßÒÔ¶ººÅ½á⣬²åÈë¿Õ´®Õ¼Î»·û */ | |
| { | |
| *pDest++ = (CHAR)ZAT_NULL_FILL; | |
| } | |
| } | |
| else if (('\r' == *pSource) ||('\n' == *pSource)) | |
| { | |
| pSource++; | |
| } | |
| else | |
| { | |
| *pDest++ = ((' ' == *pSource) && (1 == flg))?(CHAR)ZAT_SPACE_REPLACE:((('\t' == *pSource) && (1 == flg))?(CHAR)ZAT_TAB_REPLACE:(*pSource)); | |
| } | |
| pSource++; | |
| } | |
| memset(pParaLine, 0, length); /* ½«Ô¤´¦ÀíºóµÄÄÚÈÝ¿½±´»Ø²ÎÊýÐÐÖÐ */ | |
| strcpy(pParaLine, pStrDestMalloc); | |
| free(pStrDestMalloc); | |
| } | |
| #endif | |
| UINT8 zCc_CallCount(VOID) | |
| { | |
| UINT8 slave = 0, cnt = 0; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S | |
| && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| //&& !(g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 1 | |
| //&& g_Cc_CallDetail.slaveObj[slave].state ==ZCC_S_TRYING_S)) | |
| { | |
| cnt++; | |
| } | |
| } | |
| return cnt; | |
| } | |
| UINT8 zCc_FlashClearCall(VOID) | |
| { | |
| UINT8 slave = 0, cnt = 0; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_DACCM_S//Õª»úµ½atdÏ·¢Ç° | |
| || g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_BSYT_S | |
| || g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_TKYT_S | |
| || g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_SIL_S//·ÅæÒô¡¢º¿ÃùÒô¡¢¾²Òô | |
| && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| cnt++; | |
| } | |
| } | |
| return cnt; | |
| } | |
| UINT8 zCc_MoInactiveCall(VOID) | |
| { | |
| UINT8 slave = 0, cnt = 0; | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state > ZCC_S_IDLE_S | |
| && g_Cc_CallDetail.slaveObj[slave].state < ZCC_S_BSYT_S | |
| && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| cnt++; | |
| } | |
| } | |
| return cnt; | |
| } | |
| UINT8 zCc_MoBeforDialingCall(VOID) | |
| { | |
| UINT8 slave = 0, cnt = 0; | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S) | |
| { | |
| ccapp_log("zCc_MoBeforDialingCall slave[%d]=%d", | |
| slave, | |
| g_Cc_CallDetail.slaveObj[slave].state); | |
| } | |
| if (g_Cc_CallDetail.slaveObj[slave].state > ZCC_S_IDLE_S | |
| && g_Cc_CallDetail.slaveObj[slave].state < ZCC_S_DIALING_S | |
| && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| cnt++; | |
| } | |
| } | |
| return cnt; | |
| } | |
| int zCc_GetMoBeforDialingCallCID(VOID) | |
| { | |
| UINT8 slave = 0, cnt = 0; | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S) | |
| { | |
| ccapp_log("zCc_GetMoBeforDialingCallCID slave[%d]=%d", | |
| slave, | |
| g_Cc_CallDetail.slaveObj[slave].state); | |
| } | |
| if (g_Cc_CallDetail.slaveObj[slave].state > ZCC_S_IDLE_S | |
| && g_Cc_CallDetail.slaveObj[slave].state < ZCC_S_DIALING_S | |
| && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| return slave; | |
| } | |
| } | |
| return -1; | |
| } | |
| int zCc_findCID_by_number(const char *number) | |
| { | |
| UINT8 slave = 0, len = 0; | |
| char slave_number[ZDIAL_NUM_MAX]; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S) | |
| { | |
| ccapp_log("zCc_findCID_by_number[%s] slave[%d]=%d num=%s", | |
| number, | |
| slave, | |
| g_Cc_CallDetail.slaveObj[slave].state, | |
| g_Cc_CallDetail.slaveObj[slave].number); | |
| } | |
| strcpy(slave_number, g_Cc_CallDetail.slaveObj[slave].number); | |
| len = strlen(slave_number); | |
| if(len>0) | |
| { | |
| if(slave_number[len-1]=='T') | |
| slave_number[len-1]='\0'; | |
| } | |
| if (strcmp(slave_number, number)==0) | |
| return slave; | |
| } | |
| return 0; | |
| } | |
| int check_incoming_call_is_in_slave(MSG_BUF *ptMsgBuf) | |
| { | |
| T_zCcApp_DsciInd tDiscInd = {0}; | |
| memcpy(&tDiscInd, (T_zCcApp_DsciInd*)ptMsgBuf->aucDataBuf, sizeof(T_zCcApp_DsciInd)); | |
| if(tDiscInd.cid==0) | |
| return 0; | |
| return zCc_findCID_by_number(tDiscInd.num); | |
| } | |
| UINT8 zCc_MtInactiveCall(VOID) | |
| { | |
| UINT8 slave = 0, cnt = 0; | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_TRYING_S | |
| || g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_WAIT_RESOURCE_S) | |
| //&& g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| cnt++; | |
| } | |
| } | |
| return cnt; | |
| } | |
| UINT8 zCc_GetCallSlave(UINT8 heldcall)//°´×î¶àÁ½Â·ÊµÏÖ | |
| { | |
| UINT8 slave = 0; | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) // slave[0] ²»¿ÉÄÜ | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_TALKING_S | |
| && g_Cc_CallDetail.slaveObj[slave].heldcall == heldcall | |
| && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| return slave; | |
| } | |
| } | |
| return 0; | |
| } | |
| VOID zCc_ControlTone(VOID) | |
| { | |
| T_zCc_Tone tone = ZCC_TONE_OFF_A; /* What tone to play */ | |
| SIGNAL_DATA tSig; | |
| memset(tSig.cid, 0, 32); | |
| UINT8 slave = 0; | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].tone != ZCC_TONE_OFF_A) | |
| { | |
| tone = g_Cc_CallDetail.slaveObj[slave].tone; | |
| break; | |
| } | |
| } | |
| printf("[ccapp_debug]:zCc_ControlTone,cur_tone=%d, last_tone=%d\n",tone,g_Cc_CallDetail.lastTone); | |
| if (g_Cc_CallDetail.lastTone == tone || ZCC_TONE_OFF_A == tone) | |
| { | |
| return; | |
| } | |
| if(local_test_call_st != 0) | |
| { | |
| g_Cc_CallDetail.lastTone = tone; | |
| return ; | |
| } | |
| switch (tone) | |
| { | |
| case ZCC_TONE_DIAL_A: | |
| if (g_Cc_CallDetail.lastTone == ZCC_TONE_CIDCW_A)//¶à²»¶àÓà | |
| { | |
| SLIC_Stop_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Stop_PCM <---\n",__FUNCTION__); | |
| } | |
| tSig.signal_type= TONE_SIGNAL; | |
| tSig.tone_type = TONE_DIAL; | |
| SLIC_Play_Signal(0, 0, &tSig); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Play_Signal TONE_DIAL<---\n",__FUNCTION__); | |
| break; | |
| case ZCC_TONE_RB_A: | |
| tSig.signal_type= TONE_SIGNAL; | |
| tSig.tone_type = TONE_RINGBACK; | |
| SLIC_Play_Signal(0, 0, &tSig); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Play_Signal ZCC_TONE_RB_A<---\n",__FUNCTION__); | |
| break; | |
| case ZCC_TONE_BSY_A: | |
| tSig.signal_type= TONE_SIGNAL; | |
| tSig.tone_type = TONE_BUSY; | |
| SLIC_Play_Signal(0, 0, &tSig); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Play_Signal TONE_BUSY<---\n",__FUNCTION__); | |
| break; | |
| case ZCC_TONE_SIL_A: | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| break; | |
| case ZCC_TONE_CIDCW_A: | |
| memset(&tSig, 0, sizeof(tSig)); | |
| tSig.signal_type= TONE_SIGNAL; | |
| tSig.tone_type = TONE_CW; | |
| //memcpy(tSig.cid, g_Cc_CallDetail.number, strlen(g_Cc_CallDetail.number)); | |
| strncpy(tSig.cid, g_Cc_CallDetail.number, sizeof(tSig.cid)-1); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone ZCC_TONE_CIDCW_A,number = %s\n",__FUNCTION__,g_Cc_CallDetail.number); | |
| zCc_sleep(100); | |
| SLIC_Play_Signal(0, 0, &tSig); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Play_Signal TONE_CW<---\n",__FUNCTION__); | |
| break; | |
| case ZCC_TONE_TKY_A: | |
| tSig.signal_type= TONE_SIGNAL; | |
| tSig.tone_type = TONE_TKY; | |
| SLIC_Play_Signal(0, 0, &tSig); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ControlTone: SLIC_Play_Signal TONE_TKY<---\n",__FUNCTION__); | |
| break; | |
| } | |
| g_Cc_CallDetail.lastTone = tone; | |
| } | |
| void zCcApp_SetAtChnlCmdId(E_CC_APP_AtReqCmdId AtCmdId) | |
| { | |
| g_Cc_CallDetail.curAtCmdId = AtCmdId; | |
| } | |
| VOID zCc_SendSsReq(PSTR pAtCmdPara) | |
| { | |
| CHAR pw[5] = {0}; | |
| CHAR dn[ZDIAL_NUM_MAX] = {0}; | |
| UINT8 scSum = sizeof(g_zCc_SCTab)/sizeof(T_zCc_ScTab); | |
| UINT8 scName = 0; | |
| UINT8 i = 0; | |
| T_zCcapp_ClckReq tclckreq = {0}; | |
| T_zCcapp_CcfcReq tccfcreq = {0}; | |
| for (i = 0; i<scSum; i++) | |
| { | |
| if (strncmp((CHAR *)g_zCc_SCTab[i].sc, (CHAR *)g_Cc_CallDetail.digits, | |
| (UINT32)(strlen(g_zCc_SCTab[i].sc)<g_Cc_CallDetail.dCount)?strlen(g_zCc_SCTab[i].sc):g_Cc_CallDetail.dCount) == 0) | |
| { | |
| scName = g_zCc_SCTab[i].scName; | |
| break; | |
| } | |
| } | |
| switch(scName) | |
| { | |
| case ZCC_BAOC_REG: | |
| sscanf(pAtCmdPara, "%*5s%4s#", pw); | |
| pw[4] = '\0'; | |
| tclckreq.type = 0;//AO | |
| tclckreq.act = 1; | |
| strncpy(tclckreq.pw,pw,sizeof(tclckreq.pw)-1); | |
| break; | |
| case ZCC_BAOC_DEREG: | |
| sscanf(pAtCmdPara, "%*5s%4s#", pw); | |
| pw[4] = '\0'; | |
| tclckreq.type = 0;//AO | |
| tclckreq.act = 0; | |
| strncpy(tclckreq.pw,pw,sizeof(tclckreq.pw)-1); | |
| break; | |
| case ZCC_BOIC_REG: | |
| sscanf(pAtCmdPara, "%*5s%4s#", pw); | |
| pw[4] = '\0'; | |
| tclckreq.type = 1;//OI | |
| tclckreq.act = 1; | |
| strncpy(tclckreq.pw,pw,sizeof(tclckreq.pw)-1); | |
| break; | |
| case ZCC_BOIC_DEREG: | |
| sscanf(pAtCmdPara, "%*5s%4s#", pw); | |
| pw[4] = '\0'; | |
| tclckreq.type = 1;//OI | |
| tclckreq.act = 0; | |
| strncpy(tclckreq.pw,pw,sizeof(tclckreq.pw)-1); | |
| break; | |
| case ZCC_CFU_REG: | |
| sscanf(pAtCmdPara, "%*4s%47s#", dn); | |
| dn[strlen(dn)-1] = '\0'; | |
| tccfcreq.type = 0; | |
| tccfcreq.act = 1; | |
| strncpy(tccfcreq.dn, dn, strlen(dn)); | |
| break; | |
| case ZCC_CFU_DEREG: | |
| tccfcreq.type = 0; | |
| tccfcreq.act = 0; | |
| break; | |
| case ZCC_CFNRY_REG: | |
| sscanf(pAtCmdPara, "%*4s%47s#", dn); | |
| dn[strlen(dn)-1] = '\0'; | |
| tccfcreq.type = 2; | |
| tccfcreq.act = 1; | |
| strncpy(tccfcreq.dn, dn, strlen(dn)); | |
| break; | |
| case ZCC_CFNRY_DEREG: | |
| tccfcreq.type = 2; | |
| tccfcreq.act = 0; | |
| break; | |
| case ZCC_CFB_REG: | |
| sscanf(pAtCmdPara, "%*4s%47s#", dn); | |
| dn[strlen(dn)-1] = '\0'; | |
| tccfcreq.type = 1; | |
| tccfcreq.act = 1; | |
| strncpy(tccfcreq.dn, dn, strlen(dn)); | |
| break; | |
| case ZCC_CFB_DEREG: | |
| tccfcreq.type = 1; | |
| tccfcreq.act = 0; | |
| break; | |
| } | |
| if (scName > ZCC_BOIC_DEREG) | |
| { | |
| zCcApp_Ccfc(&tccfcreq); | |
| } | |
| else | |
| { | |
| zCcApp_Clck(&tclckreq); | |
| } | |
| } | |
| VOID zCc_SendAtDialReq(PSTR pAtCmdPara) | |
| { | |
| UINT8 slave =0; | |
| //ccapp_log("pAtCmdPara=%s len=%s", pAtCmdPara, strlen(pAtCmdPara)); | |
| if (strlen(pAtCmdPara)+1 > ZDIAL_NUM_MAX) | |
| { | |
| return; | |
| } | |
| else if (strlen(pAtCmdPara) <= 2) | |
| { | |
| slave = zCc_GetDialingSlave(1); | |
| if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0 && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½ÐÇÒÒѹһúʱ²»·ÅæÒô | |
| { | |
| sc_timer_create(ZCCAPP_TIMER_BUSYTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_BUSYTONE_INTERVAL, | |
| zCcApp_BusyToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtDialReq sc_timer_create zCcApp_BusyToneTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S; | |
| g_Cc_CallDetail.slaveObj[slave].confcall = 0; | |
| g_Cc_CallDetail.slaveObj[slave].heldcall = 0; | |
| } | |
| else | |
| { | |
| int index; | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| index = zCc_find_held_cid(); // hookflash + onekey and dtmf timeout | |
| if(index!=0) | |
| zCc_SendAtChldReq(2); | |
| } | |
| return; | |
| } | |
| g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_D; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtDialReq:AtcmdMsg = %s\n",__FUNCTION__,pAtCmdPara); | |
| zCcApp_Dial((char *)pAtCmdPara); | |
| } | |
| VOID zCc_SendAtAnswerReq(VOID) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtAnswerReq\n",__FUNCTION__); | |
| g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_A; | |
| zCcApp_Answer(); | |
| } | |
| VOID zCc_SendAtHangupReq(VOID) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtHangupReq\n",__FUNCTION__); | |
| g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_CHUP; | |
| zCcApp_Chup(); | |
| } | |
| VOID zCc_SendAtDtmfReq(char* dtmfchar) | |
| { | |
| g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_VTS; | |
| zCcApp_Vts(dtmfchar); | |
| } | |
| VOID zCc_SendAtImsPlusReq(int rate, int setfg) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtImsPlusReq\n",__FUNCTION__); | |
| g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_IMSPLUS; | |
| zCcApp_SetImsPlus(rate, setfg); | |
| } | |
| #if 0 | |
| VOID zCc_SendAtVolumnReq(PSTR pAtCmdPara) | |
| { | |
| CHAR AtcmdMsg[ZAT_PARAM_LEN50] = {0}; | |
| if (pAtCmdPara[0] == 0 || strlen(pAtCmdPara)+1 > ZDIAL_NUM_MAX) | |
| { | |
| return; | |
| } | |
| g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_VTS; | |
| sprintf(AtcmdMsg, "AT+VTS=\"%s\",20\r\n", pAtCmdPara); | |
| printf( "---> ccApp zCc_SendAtDtmfReq:AtcmdMsg = %s\n", AtcmdMsg); | |
| zCcApp_Vts(AtcmdMsg); | |
| } | |
| #endif | |
| SINT32 zCc_SendAtChldReq(int chldtype) | |
| { | |
| SINT32 ret = -1; | |
| if (g_Cc_CallDetail.digits[0] == ZCC_FLASH_SIGN) | |
| { | |
| zCc_ClearDigits(); | |
| } | |
| sc_timer_delete(ZCCAPP_TIMER_SSDIALTONE_DETECT); | |
| g_Cc_CallDetail.curAtCmdId = CC_APP_AT_CMD_REQ_SET_CHLD; | |
| ret = zCcApp_Chld(chldtype); | |
| return ret; | |
| } | |
| VOID zCc_SendLedInformMsg(VOID) | |
| { | |
| int lRet = -1; | |
| int lTgtMsgID = 0; | |
| MSG_BUF stMsg; | |
| LONG msgSize = sizeof(MSG_BUF) - sizeof(LONG); | |
| #ifndef TEST_CCAPP | |
| lTgtMsgID = msgget(MODULE_ID_MMI, 0); | |
| if (-1 == lTgtMsgID) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendLedInformMsg msgget MMI fail\n",__FUNCTION__); | |
| return; | |
| } | |
| memset(&stMsg, 0, sizeof(MSG_BUF)); | |
| stMsg.ulMagic = MSG_MAGIC_WORD; | |
| stMsg.lMsgType = MSG_TYPE_DEFAULT; | |
| stMsg.src_id = MODULE_ID_CALL_CTRL; | |
| stMsg.dst_id = MODULE_ID_MMI; | |
| stMsg.usMsgCmd = MSG_CMD_VOIP_STATUS_INFO; | |
| stMsg.usDataLen = 0; | |
| lRet = msgsnd(lTgtMsgID, &stMsg, msgSize, IPC_NOWAIT); | |
| if (lRet < 0) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendLedInformMsg msgsnd to MMI fail\n",__FUNCTION__); | |
| return; | |
| } | |
| #endif | |
| } | |
| VOID zCc_SetLedStatus(char* LedStatus) | |
| { | |
| #ifndef TEST_CCAPP | |
| sc_cfg_set("voip_status", LedStatus); | |
| #endif | |
| zCc_SendLedInformMsg(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SetLedStatus = %s\n",__FUNCTION__,LedStatus); | |
| } | |
| SINT32 zCc_RecvDsciInd(MSG_BUF *ptMsgBuf) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","RECV dsciind!!!<---\n"); | |
| //ptMsgBuf->usMsgCmd = ZCC_NO_E; | |
| //ptMsgBuf->usMsgCmd = ZCCAPP_ATIND_DSCI; | |
| //ptMsgBuf->usSourceModuleID = MSG_ID_CALL_CTRL; | |
| zCc_SendMsgToSub(ptMsgBuf); /* ·¢¸øÖ÷Ïß³Ì */ | |
| return 0; | |
| } | |
| int is_onecall_in_help_and_ready_to_input_new_call(void) | |
| { | |
| int i; | |
| if(zCc_find_held_cid()==0) | |
| return 0; | |
| for(i=0;i<ZCC_SLAVES;i++) // should start from 0, it'll be 0 when hookflash comes but not input any key | |
| if(g_Cc_CallDetail.slaveObj[i].state==ZCC_S_DT_S || | |
| g_Cc_CallDetail.slaveObj[i].state==ZCC_S_DACCM_S) | |
| return 1; | |
| return 0; | |
| } | |
| void tz_lock_cellid_active_for_call(int state) | |
| { | |
| static int old_state = -1; | |
| static int cellid_active_count = 0; | |
| char tz_lock_cellid_active[4] = {0}; | |
| sc_cfg_get("tz_lock_cellid_active",tz_lock_cellid_active,sizeof(tz_lock_cellid_active)); | |
| if(strcmp(tz_lock_cellid_active, "1") == 0) | |
| return; | |
| if((old_state == 3) && (state == 0) && (cellid_active_count < 3)) | |
| { | |
| cellid_active_count++; | |
| if(cellid_active_count == 3) | |
| { | |
| sc_cfg_set("tz_lock_cellid_call_active", "1"); | |
| } | |
| } | |
| old_state = state; | |
| return; | |
| } | |
| SINT32 zCc_DsciIndProc(MSG_BUF *ptMsgBuf) | |
| { | |
| int inMpty = 0; | |
| int cid = 0; | |
| int state = 0; | |
| int dir = 0; | |
| CHAR num[ZDIAL_NUM_MAX] = {0}; | |
| CHAR voip_status[ZDIAL_NUM_MAX] = {0}; | |
| T_zCcApp_DsciInd tDiscInd = {0}; | |
| int n; | |
| int slave_callout[ZCC_SLAVES]; | |
| memcpy(&tDiscInd, (T_zCcApp_DsciInd*)ptMsgBuf->aucDataBuf, sizeof(T_zCcApp_DsciInd)); | |
| cid = tDiscInd.cid; | |
| inMpty = tDiscInd.inMpty; | |
| dir = tDiscInd.dir; | |
| state = tDiscInd.state; | |
| strncpy(num, tDiscInd.num,sizeof(num)-1); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s RECV dsciind: cid=%d num=%s dir=%d inMpty=%d state=%d !!!<---\n", | |
| __FUNCTION__, cid, num, dir,inMpty,state); | |
| zCc_ShowAllSlave(); | |
| if (cid < ZCC_MINCID || cid > ZCC_MAXCID) | |
| { | |
| return 0; | |
| } | |
| if (num[0] < 0) | |
| { | |
| memset(num,0,ZDIAL_NUM_MAX); | |
| } | |
| ptMsgBuf->dst_id = cid; | |
| tz_lock_cellid_active_for_call(state); | |
| switch(state) | |
| { | |
| case 0://Z_MMIACC_CALL_STATE_ACTIVE | |
| if (g_Cc_CallDetail.slaveObj[cid].state == ZCC_S_TALKING_S)//held->active | |
| { | |
| SLIC_Start_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DsciIndProc: SLIC_Start_PCM <---\n",__FUNCTION__); | |
| if (g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A | |
| && g_Cc_CallDetail.slaveObj[0].tone == ZCC_TONE_DIAL_A) | |
| { | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DsciIndProc: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DsciIndProc handling zCc_InitSlaveObj(0)\n",__FUNCTION__); | |
| zCc_InitSlaveObj(0); | |
| } | |
| g_Cc_CallDetail.slaveObj[cid].heldcall = 0; | |
| g_Cc_CallDetail.slaveObj[cid].confcall = inMpty; | |
| } | |
| else | |
| { | |
| ptMsgBuf->usMsgCmd = ZCC_SANS_E; | |
| } | |
| #ifndef TEST_CCAPP | |
| sc_cfg_get("voip_status",voip_status,sizeof(voip_status)); | |
| if (0 != strcmp("ledon" , voip_status)) | |
| #endif | |
| { | |
| zCc_SetLedStatus("ledon"); | |
| } | |
| break; | |
| case 1://Z_MMIACC_CALL_STATE_HELD | |
| if (g_Cc_CallDetail.slaveObj[cid].state == ZCC_S_TALKING_S)//active->held | |
| { | |
| if (1 == zCc_CallCount()) | |
| { | |
| //SLIC_Stop_PCM(); | |
| } | |
| g_Cc_CallDetail.slaveObj[cid].heldcall = 1; | |
| g_Cc_CallDetail.slaveObj[cid].confcall = inMpty; | |
| } | |
| break; | |
| case 3://Z_MMIACC_CALL_STATE_MO_ALERTING | |
| ptMsgBuf->usMsgCmd = ZCC_SRING_E; | |
| break; | |
| case 4://Z_MMIACC_CALL_STATE_MT_INCOMING | |
| if(tz_lock_cellid_is_limit_callin()) | |
| { | |
| zCc_SendAtChldReq(10+cid); | |
| break; | |
| } | |
| if(g_Cc_CallDetail.state==ZCC_M_SEIZE_S) | |
| { | |
| int cnt; | |
| cnt= zCc_CallCount(); | |
| ccapp_log("cnt=%d slave[0]=%d", cnt, g_Cc_CallDetail.slaveObj[0].state); | |
| if(cnt==0) // hookoff but not dail out utill dtmf-timer timeout | |
| { | |
| if(ZCC_S_BSYT_S<=g_Cc_CallDetail.slaveObj[0].state && | |
| g_Cc_CallDetail.slaveObj[0].state<=ZCC_S_SIL_S) | |
| { | |
| zCc_SendAtChldReq(10+cid); | |
| break; | |
| } | |
| } | |
| if(zCc_GetSpecSlaveIgnoreWaitDSCI6(ZCC_S_BSYT_S)|| | |
| zCc_GetSpecSlaveIgnoreWaitDSCI6(ZCC_S_TKYT_S)|| // fast dududu is being .... | |
| zCc_GetSpecSlaveIgnoreWaitDSCI6(ZCC_S_SIL_S)) // fast dududu is end .... | |
| { | |
| zCc_SendAtChldReq(10+cid); | |
| break; | |
| } | |
| } | |
| else if(g_Cc_CallDetail.state==ZCC_M_RELEASE_S) | |
| { | |
| int dsci6_cid = zCc_Find_waitDSCI6_cid(); | |
| if(dsci6_cid!=0 && dsci6_cid==cid) | |
| { | |
| zCc_SendAtChldReq(10+cid); | |
| zCc_InitSlaveObj(cid); | |
| ccapp_log("zCc_Find_waitDSCI6_cid and skip this call %s", num); | |
| char temp[200]; | |
| sprintf(temp, "echo \"%s get error incoming call cid=%d num=%s\" > /tmp/log.ccapp.callin.err", | |
| get_local_date_time(), cid, num); | |
| soft_system(temp); | |
| break; | |
| } | |
| } | |
| ptMsgBuf->usMsgCmd = ZCC_SINVITE_E; | |
| memset(g_Cc_CallDetail.number, 0, sizeof(g_Cc_CallDetail.number)); | |
| memcpy(g_Cc_CallDetail.number, num, ZDIAL_NUM_MAX); | |
| break; | |
| case 5://Z_MMIACC_CALL_STATE_MT_WAITING | |
| if(g_Cc_CallDetail.state==ZCC_M_RINGING_S && zCc_find_held_cid()) | |
| { | |
| zCc_SendAtChldReq(10+cid); | |
| break; | |
| } | |
| else if(is_onecall_in_help_and_ready_to_input_new_call()) | |
| { | |
| zCc_SendAtChldReq(10+cid); | |
| break; | |
| } | |
| if(zCc_CallCount()>=2) | |
| { | |
| zCc_SendAtChldReq(10+cid); | |
| break; | |
| } | |
| ptMsgBuf->usMsgCmd = ZCC_CIDCW_E; | |
| memset(g_Cc_CallDetail.number, 0, sizeof(g_Cc_CallDetail.number)); | |
| memcpy(g_Cc_CallDetail.number, num, ZDIAL_NUM_MAX); | |
| break; | |
| case 6://Z_MMIACC_CALL_STATE_END | |
| zCcApp_Vts_CleanReq(); | |
| if(zCc_findCID_by_number(num)==0) | |
| break; | |
| ptMsgBuf->usMsgCmd = dir?ZCC_SDISCN_MT_E: ZCC_SDISCN_MO_E; | |
| g_Cc_CallDetail.chupSent = 0; | |
| memset(slave_callout, 0, sizeof(slave_callout)); | |
| n = zCc_find_all_callout(slave_callout); | |
| ccapp_log("DscInd 6, dir=%d is_callout=%d, find_all_callout=%d", | |
| dir, | |
| g_Cc_CallDetail.slaveObj[cid].is_callout, | |
| n); | |
| if(dir==0 && g_Cc_CallDetail.slaveObj[cid].is_callout == TRUE) | |
| { | |
| if(n<1 || (n==1 && slave_callout[0]==cid)) | |
| SLIC_PolarityReverse(0, FALSE); | |
| } | |
| if ((cid == g_Cc_CallDetail.ringCid) && (ZCC_TONE_CIDCW_A == g_Cc_CallDetail.lastTone)) | |
| { | |
| SLIC_Stop_Signal(0, 0);//Í£Ö¹ºô½ÐµÈ´ýÒô | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_DsciIndProc: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[0].tone = ZCC_TONE_OFF_A; | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| } | |
| break; | |
| case 2://Z_MMIACC_CALL_STATE_MO_DIALING | |
| ptMsgBuf->usMsgCmd = ZCC_SDIALLING_E; | |
| break; | |
| case 7://Z_MMIACC_CALL_STATE_MT_CONNREQ | |
| case 8://Z_MMIACC_CALL_STATE_DISC | |
| default: | |
| break; | |
| } | |
| return 0; | |
| } | |
| SINT32 zCc_RecvZvoiceChnl(MSG_BUF *ptMsgBuf) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","RECV zvoicechnl!!!<---\n"); | |
| //if (g_Cc_CallDetail.state == ZCC_M_RELEASE_S) | |
| //{ | |
| // return 0; | |
| //} | |
| printf("[ccapp_debug]:recv zvoicechnl and send to local cc\n"); | |
| //ptMsgBuf->usMsgCmd = ZCC_NO_E; | |
| //ptMsgBuf->usMsgCmd = ZCCAPP_ATIND_IMSPLUS; | |
| //ptMsgBuf->usSourceModuleID = MSG_ID_CALL_CTRL; | |
| zCc_SendMsgToSub(ptMsgBuf); /* ·¢¸øÖ÷Ïß³Ì */ | |
| return 0; | |
| } | |
| SINT32 zCc_RecvImsplusInd(MSG_BUF *ptMsgBuf) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","RECV imsplusind!!!<---\n"); | |
| //if (g_Cc_CallDetail.state == ZCC_M_RELEASE_S) | |
| //{ | |
| // return 0; | |
| //} | |
| printf("[ccapp_debug]:recv imsplus and send to local cc\n"); | |
| //ptMsgBuf->usMsgCmd = ZCC_NO_E; | |
| //ptMsgBuf->usMsgCmd = ZCCAPP_ATIND_IMSPLUS; | |
| //ptMsgBuf->usSourceModuleID = MSG_ID_CALL_CTRL; | |
| zCc_SendMsgToSub(ptMsgBuf); /* ·¢¸øÖ÷Ïß³Ì */ | |
| return 0; | |
| } | |
| SINT32 zCc_RecvRsp(MSG_BUF *ptMsgBuf) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","RECV at_rsp %d !!!<---\n", ptMsgBuf->usMsgCmd); | |
| zCc_SendMsgToSub(ptMsgBuf); /* ·¢¸øÖ÷Ïß³Ì */ | |
| return 0; | |
| } | |
| static inline unsigned char zCc_MapVoiceChnlAct(unsigned char act) | |
| { | |
| if (act == 3) | |
| { | |
| return 0; //gsm | |
| } | |
| else if (act == 5) | |
| { | |
| return 2; //wcdma | |
| } | |
| else if (act == 15) | |
| { | |
| return 1; | |
| } | |
| else | |
| { | |
| assert(0); | |
| } | |
| return 3; | |
| } | |
| static unsigned char g_zCc_VoiceOpenSucc = 1; | |
| static T_Voice_Para g_zCc_VoicePara_bak; | |
| static unsigned int g_zCc_pcm_bak = 0; /*new add*/ | |
| SINT32 zCc_ZvoicechnlProc(MSG_BUF *ptMsgBuf) | |
| { | |
| T_zCcApp_VoiceChnl tVoiceChnl; | |
| T_Voice_Para tVoicePara = {0}; | |
| memcpy(&tVoiceChnl, (T_zCcApp_VoiceChnl*)ptMsgBuf->aucDataBuf, sizeof(T_zCcApp_VoiceChnl)); | |
| tVoicePara.mode = zCc_MapVoiceChnlAct(tVoiceChnl.act); | |
| tVoicePara.codec_type = tVoiceChnl.codetype; //0-nb, 1-wb | |
| if ( tVoicePara.codec_type == 1) | |
| tVoicePara.clock_rate = 16000; | |
| else | |
| tVoicePara.clock_rate = 8000; | |
| tVoicePara.codec_path = tVoiceChnl.amrpath; | |
| printf("[ccapp_debug]:recv zvoicechnl, tVoicePara=%d,%d,%d,%d\n",tVoicePara.clock_rate,tVoicePara.mode,tVoicePara.codec_type,tVoicePara.codec_path); | |
| if (tVoiceChnl.op == 1) | |
| { | |
| /* new add begin*/ | |
| //start voice | |
| if (/*voice_open(&tVoicePara) != 0 ||*/ g_Cc_CallDetail.state == ZCC_M_RINGING_S) | |
| { | |
| printf("[ccapp]:voice open fail");//´ò¿ªvoiceʧ°Ü£¬»òÕßÕñÁå̬ÊÕµ½zvoicechnl£¬¶¼ÈÏΪʧ°Ü | |
| g_zCc_VoiceOpenSucc = 0; | |
| g_zCc_VoicePara_bak = tVoicePara; | |
| } | |
| else if (g_Cc_CallDetail.state == ZCC_M_SEIZE_S) | |
| { | |
| if ( voice_open(&tVoicePara) != 0) | |
| { | |
| printf("[ccapp_debug]:mo call voice_open fail!!!\n"); | |
| voice_close(&tVoicePara); | |
| } | |
| } | |
| /* new add end*/ | |
| printf("[ccapp_debug]:voice_open:rlt=%d\n",g_zCc_VoiceOpenSucc); | |
| } | |
| else | |
| { | |
| //close voice | |
| g_zCc_VoiceOpenSucc = 1; | |
| voice_close(&tVoicePara); | |
| printf("[ccapp_debug]:voice_close:rlt=%d\n",g_zCc_VoiceOpenSucc); | |
| } | |
| return 0; | |
| } | |
| SINT32 zCc_ZimsplusProc(MSG_BUF *ptMsgBuf) | |
| { | |
| int act = 0; | |
| int rate = 0; | |
| T_zCcApp_ImsplusInd tImsplusInd = {0}; | |
| memcpy(&tImsplusInd, (T_zCcApp_ImsplusInd*)ptMsgBuf->aucDataBuf, sizeof(T_zCcApp_ImsplusInd)); | |
| act = tImsplusInd.act; | |
| rate = tImsplusInd.rate; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: act = %d rate = %d new!!!<---\n",__FUNCTION__, act, rate); | |
| printf("[ccapp_debug]:recv imsplus, tImsplusInd=%d,%d\n",tImsplusInd.act,tImsplusInd.rate); | |
| if (act == 0) | |
| { | |
| SLIC_Stop_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Stop_PCM <---\n",__FUNCTION__); | |
| } | |
| else if (act == 1) | |
| { | |
| /* new add begin*/ | |
| if ( g_Cc_CallDetail.state == ZCC_M_RINGING_S) | |
| { | |
| g_zCc_pcm_bak = rate; | |
| return 0; | |
| } | |
| /* new add end */ | |
| if (rate == 8000) | |
| { | |
| SLIC_PCM_Set_NB(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_PCM_Set_NB <---\n",__FUNCTION__); | |
| SLIC_Start_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Start_PCM <---\n",__FUNCTION__); | |
| } | |
| else if (rate == 16000) | |
| { | |
| SLIC_PCM_Set_WB(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_PCM_Set_WB <---\n",__FUNCTION__); | |
| SLIC_Start_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Start_PCM <---\n",__FUNCTION__); | |
| } | |
| } | |
| else if (act == 2)//¹Ø±Õpcm£¬·Å±¾µØ»ØÁåÒô | |
| { | |
| if (ZCC_S_RINGBACK_S != g_Cc_CallDetail.slaveObj[rate].state) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: act 2,cid err <---\n",__FUNCTION__); | |
| return 0; | |
| } | |
| SLIC_Stop_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Stop_PCM <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[rate].tone = ZCC_TONE_RB_A; | |
| } | |
| else if (act == 3)//ºóÐø»áÔÙÓÐact1Éϱ¨£¬ËùÒÔ´Ëʱ²»´ò¿ªpcm | |
| { | |
| SLIC_Stop_Signal(0,0); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| zCc_SendAtImsPlusReq(rate,0); | |
| g_Cc_CallDetail.slaveObj[rate].tone = ZCC_TONE_OFF_A; | |
| } | |
| return 0; | |
| } | |
| SINT32 zCc_RecvZcpiInd(MSG_BUF *ptMsgBuf) | |
| { | |
| //ptMsgBuf->usMsgCmd = ZCCAPP_ATIND_ZCPI; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","RECV zcpiind!!!<---\n"); | |
| //ptMsgBuf->usSourceModuleID = MSG_ID_CALL_CTRL; | |
| zCc_SendMsgToSub(ptMsgBuf); /* ·¢¸øÖ÷Ïß³Ì */ | |
| return 0; | |
| } | |
| SINT32 zCc_ZcpiIndProc(MSG_BUF *ptMsgBuf) | |
| { | |
| int state = 0; | |
| int cid = 0; | |
| int progdsp = 0; | |
| T_zCcApp_ZcpiInd tZcpiInd = {0}; | |
| memcpy(&tZcpiInd, (T_zCcApp_ZcpiInd*)ptMsgBuf->aucDataBuf, sizeof(T_zCcApp_ZcpiInd)); | |
| state = tZcpiInd.state; | |
| cid = tZcpiInd.cid; | |
| progdsp = tZcpiInd.progdsp; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZcpiIndProc: cid= %d, state=%d, progdsp=%d <---\n",__FUNCTION__,cid,state,progdsp); | |
| if (5 == state) | |
| { | |
| ptMsgBuf->dst_id = cid; | |
| ptMsgBuf->usMsgCmd = ZCC_RESOURCE_READY_E; | |
| g_Cc_CallDetail.resourceReady = 1; | |
| } | |
| else if (6 == state) | |
| { | |
| g_Cc_CallDetail.resourceReady = 0; | |
| } | |
| if (8 == progdsp) | |
| { | |
| SLIC_Start_PCM(); | |
| } | |
| return 0; | |
| } | |
| LONG zCcApp_send_message(unsigned short Msg_cmd,unsigned short us_DataLen,unsigned char *pData) | |
| { | |
| ipc_send_message(MODULE_ID_CALL_CTRL, MODULE_ID_AT_CTL, Msg_cmd, us_DataLen, (unsigned char *)pData,0); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg_cmd is %d<---\n",__FUNCTION__, Msg_cmd); | |
| return 0; | |
| } | |
| VOID zCcApp_Dial(char *ptMsgBuf) | |
| { | |
| SINT32 ret = -1; | |
| MSG_BUF stMsg; | |
| LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG); | |
| T_zCcapp_CallMoReq tcallReq = {0}; | |
| memset(tcallReq.number, 0, sizeof(tcallReq.number)); | |
| //strncpy(tcallReq.number, ptMsgBuf,strlen(ptMsgBuf)); | |
| strncpy(tcallReq.number, ptMsgBuf,sizeof(tcallReq.number)-1); | |
| zCcApp_send_message(MSG_CMD_ATD_DIAL_REQ, sizeof(T_zCcapp_CallMoReq), (unsigned char *) &tcallReq); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_ATD_DIAL_REQ<---\n",__FUNCTION__); | |
| } | |
| SINT32 zCcApp_Ccfc(T_zCcapp_CcfcReq *ptccfcreq) | |
| { | |
| SINT32 ret = -1; | |
| MSG_BUF stMsg; | |
| LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG); | |
| zCcApp_send_message(MSG_CMD_CCFC_REQ, sizeof(T_zCcapp_CcfcReq), (unsigned char *) ptccfcreq); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_CCFC_REQ<---\n",__FUNCTION__); | |
| return 0; | |
| } | |
| SINT32 zCcApp_Clck(T_zCcapp_ClckReq *ptclckreq) | |
| { | |
| SINT32 ret = -1; | |
| MSG_BUF stMsg; | |
| LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG); | |
| zCcApp_send_message( MSG_CMD_CLCK_REQ, sizeof(T_zCcapp_ClckReq), (unsigned char *) ptclckreq); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_CLCK_REQ<---\n",__FUNCTION__); | |
| return 0; | |
| } | |
| SINT32 zCcApp_Answer(VOID) | |
| { | |
| SINT32 ret = -1; | |
| MSG_BUF stMsg; | |
| LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG); | |
| zCcApp_send_message(MSG_CMD_ATA_REQ, 0, NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_ATA_REQ<---\n",__FUNCTION__); | |
| return 0; | |
| } | |
| SINT32 zCcApp_Chup(void) | |
| { | |
| SINT32 ret = -1; | |
| MSG_BUF stMsg; | |
| LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG); | |
| zCcApp_send_message(MSG_CMD_CHUP_REQ, 0, NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg isMSG_CMD_CHUP_REQ<---\n",__FUNCTION__); | |
| return 0; | |
| } | |
| //µ±ÉÏÒ»¸öVTSûÓÐÊÕµ½OKǰ£¬ÆäËûµÄVTSÈ«²¿»º´æÔÚÁ´±íÀ´ýÊÕµ½ÉÏÒ»¸öOKʱÔÚÏ·¢ÏÂÒ»¸ö | |
| //¶¼ÔÚmainÏ̴߳¦Àí£¬ÎÞÐ軥³â | |
| typedef struct { | |
| struct list_head list; | |
| T_zCcapp_VtsReq vts; | |
| }T_zCcapp_VtsReq_list; | |
| static LIST_HEAD(ccapp_vts_waitqueue); | |
| static int ccapp_vts_flag = 0; | |
| void zCcApp_Vts_CleanReq(void) | |
| { | |
| struct list_head *head = &ccapp_vts_waitqueue; | |
| T_zCcapp_VtsReq_list *l, *tmp; | |
| if(!list_empty(head)) | |
| { | |
| list_for_each_entry_safe(l, tmp, head, list) | |
| { | |
| list_del(&l->list); | |
| free(l); | |
| } | |
| ccapp_vts_flag = 0; | |
| } | |
| } | |
| void zCcApp_Vts_Rsp(void) | |
| { | |
| struct list_head *head = &ccapp_vts_waitqueue; | |
| printf("[ccapp_debug]:Vts_Rsp flag=%d\n",ccapp_vts_flag); | |
| if(list_empty(head)) | |
| { | |
| ccapp_vts_flag = 0; | |
| } | |
| else | |
| { | |
| T_zCcapp_VtsReq_list *node = list_entry(head->next,T_zCcapp_VtsReq_list,list); | |
| zCcApp_send_message(MSG_CMD_VTS_REQ, sizeof(T_zCcapp_VtsReq), (unsigned char *) &node->vts); | |
| ccapp_vts_flag = 1; | |
| list_del(&node->list); | |
| free(node); | |
| } | |
| } | |
| SINT32 zCcApp_Vts(char* dtmfchar) | |
| { | |
| T_zCcapp_VtsReq tvtsreq = {0}; | |
| struct list_head *head = &ccapp_vts_waitqueue; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","vtschar=%s<---\n",dtmfchar); | |
| tvtsreq.dtmfchar=*dtmfchar; | |
| printf("[ccapp_debug]:Vts_Req flag=%d\n",ccapp_vts_flag); | |
| if(list_empty(head) && ccapp_vts_flag == 0) | |
| { | |
| zCcApp_send_message(MSG_CMD_VTS_REQ, sizeof(T_zCcapp_VtsReq), (unsigned char *) &tvtsreq); | |
| ccapp_vts_flag = 1; | |
| } | |
| else | |
| { | |
| T_zCcapp_VtsReq_list *node = (T_zCcapp_VtsReq_list *)malloc(sizeof(T_zCcapp_VtsReq_list)); | |
| if(node == NULL) | |
| { | |
| printf("[ccapp_debug]: zCcApp_Vts malloc fail!!!\n"); | |
| return 0; | |
| } | |
| memset(node, 0 , sizeof(T_zCcapp_VtsReq_list)); | |
| node->vts.dtmfchar = tvtsreq.dtmfchar; | |
| list_add_tail(&node->list,head); | |
| } | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_VTS_REQ<---\n",__FUNCTION__); | |
| return 0; | |
| } | |
| SINT32 zCcApp_SetImsPlus(int rate, int setfg) | |
| { | |
| SINT32 ret = -1; | |
| MSG_BUF stMsg; | |
| LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG); | |
| T_zCcapp_ImsplusReq timsplusreq= {0}; | |
| timsplusreq.act = rate; | |
| timsplusreq.setfg = setfg; | |
| zCcApp_send_message(MSG_CMD_ZIMSPLUS_REQ, sizeof(T_zCcapp_ImsplusReq), (unsigned char *) &timsplusreq); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_ZIMSPLUS_REQ<---\n",__FUNCTION__); | |
| return 0; | |
| } | |
| SINT32 zCcApp_Chld(int chldtype) | |
| { | |
| SINT32 ret = -1; | |
| MSG_BUF stMsg; | |
| LONG msgSize = sizeof(MSG_BUF)-sizeof(LONG); | |
| T_zCcapp_ChldReq tchldreq = {0}; | |
| tchldreq.type = chldtype; | |
| zCcApp_send_message(MSG_CMD_CHLD_REQ, sizeof(T_zCcapp_ChldReq), (unsigned char *) &tchldreq); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ipc_send_message:Msg is MSG_CMD_CHLD_REQ[%d]<---\n",__FUNCTION__,chldtype); | |
| return 0; | |
| } | |
| SINT32 zCcApp_AtIndRspProc(MSG_BUF *ptMsgBuf) | |
| { | |
| SINT32 i ; | |
| SINT32 ret = -1; | |
| for(i=0;i< gCcAppRecvAtIndProcCnt;i++) | |
| { | |
| if(ptMsgBuf->usMsgCmd == gCcAppRecvAtIndProc[i].AtIndCmd) | |
| { | |
| if(NULL!= gCcAppRecvAtIndProc[i].RecvAtIndProcFun) | |
| { | |
| ret = gCcAppRecvAtIndProc[i].RecvAtIndProcFun(ptMsgBuf); | |
| } | |
| break; | |
| } | |
| } | |
| return ret; | |
| } | |
| VOID zCc_MReleaseState(MSG_BUF *ptMsgBuf) | |
| { | |
| CHAR voip_status[ZDIAL_NUM_MAX] = {0}; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MReleaseState ptMsgBuf->usMsgCmd = %d\n",__FUNCTION__,ptMsgBuf->usMsgCmd); | |
| printf("[ccapp_debug]: Release State Recv MsgCmd: %d\n",ptMsgBuf->usMsgCmd); | |
| switch (ptMsgBuf->usMsgCmd) | |
| { | |
| case ZCC_SEIZE_E: // ͻȜ | |
| // slave[0] to play dial tone | |
| g_Cc_CallDetail.evt[0] = ZCC_DIAL_E; | |
| g_Cc_CallDetail.state = ZCC_M_SEIZE_S; | |
| g_Cc_CallDetail.chupSent = FALSE; | |
| g_Cc_CallDetail.hookofffg = TRUE; | |
| if (g_Cc_CallDetail.ringCid)// ¾Ü¾øµÈ´ý×ÊԴ״̬µÄincoming call | |
| { | |
| zCc_SendAtHangupReq(); | |
| g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].waitDSCI6 = 1; | |
| } | |
| #ifndef TEST_CCAPP | |
| sc_cfg_get("voip_status",voip_status,sizeof(voip_status)); | |
| if (0 != strcmp("ledblink" , voip_status)) | |
| #endif | |
| { | |
| zCc_SetLedStatus("ledblink"); | |
| } | |
| break; | |
| case ZCC_SINVITE_E: | |
| g_Cc_CallDetail.evt[ptMsgBuf->dst_id] = ZCC_SINVITE_E; | |
| //g_Cc_CallDetail.state = ZCC_M_RINGING_S; È·ÈÏ×ÊÔ´·ÖÅäºóÔÙǨ״̬ | |
| break; | |
| case ZCC_RESOURCE_READY_E: | |
| ccapp_log("g_Cc_CallDetail.ringCid=%d", g_Cc_CallDetail.ringCid); | |
| if (g_Cc_CallDetail.ringCid) | |
| { | |
| g_Cc_CallDetail.evt[g_Cc_CallDetail.ringCid] = ZCC_RESOURCE_READY_E; | |
| } | |
| break; | |
| case ZCC_SDISCN_MO_E: | |
| case ZCC_SDISCN_MT_E: | |
| g_Cc_CallDetail.evt[ptMsgBuf->dst_id] = ptMsgBuf->usMsgCmd; | |
| break; | |
| case ZCC_RELEASE_E: | |
| case ZCC_FLASH_E: | |
| default: | |
| // do nothing | |
| break; | |
| } | |
| } | |
| pthread_t slic_ring_test_pid; | |
| void* slic_ring_test_thread(void * ptr) | |
| { | |
| SIGNAL_DATA tSig; | |
| while(1) | |
| { | |
| sleep(30); | |
| printf("ring stop\n"); | |
| SLIC_Stop_Signal(0, RING_SIGNAL); | |
| zCc_SetLedStatus("ledoff"); | |
| sleep(30); | |
| printf("ringing\n"); | |
| memset(&tSig, 0, sizeof(tSig)); | |
| tSig.signal_type = RING_SIGNAL; | |
| strcpy(g_Cc_CallDetail.number, "1234567890"); | |
| strncpy(tSig.cid, g_Cc_CallDetail.number,sizeof(tSig.cid)-1); | |
| get_local_datetime(tSig.date_time); | |
| ccapp_log("local test call RING_SIGNAL,number = %s\n",g_Cc_CallDetail.number); | |
| SLIC_Play_Signal(0, 0, &tSig); | |
| zCc_SetLedStatus("ledblink"); | |
| } | |
| return NULL; | |
| } | |
| VOID zCc_MRingingState(MSG_BUF *ptMsgBuf) | |
| { | |
| int held_call_cid = 0; | |
| int incoming_call_cid = 0; | |
| int shall_ring_cid; | |
| SIGNAL_DATA tSig; | |
| CHAR voip_status[ZDIAL_NUM_MAX] = {0}; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MRingingState ptMsgBuf->usMsgCmd = %d\n",__FUNCTION__,ptMsgBuf->usMsgCmd); | |
| switch (ptMsgBuf->usMsgCmd) | |
| { | |
| case ZCC_SEIZE_E: // ͻȜ | |
| g_Cc_CallDetail.state = ZCC_M_SEIZE_S; | |
| SLIC_Stop_Signal(0, RING_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MRingingState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| if (g_zCc_VoiceOpenSucc == 0) | |
| { | |
| g_zCc_VoiceOpenSucc = 1; | |
| voice_open(&g_zCc_VoicePara_bak); | |
| /* new add begin */ | |
| if (g_zCc_pcm_bak == 8000) | |
| { | |
| SLIC_PCM_Set_NB(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_PCM_Set_NB <---\n",__FUNCTION__); | |
| SLIC_Start_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Start_PCM <---\n",__FUNCTION__); | |
| } | |
| else if (g_zCc_pcm_bak == 16000) | |
| { | |
| SLIC_PCM_Set_WB(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_PCM_Set_WB <---\n",__FUNCTION__); | |
| SLIC_Start_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_ZimsplusProc: SLIC_Start_PCM <---\n",__FUNCTION__); | |
| } | |
| g_zCc_pcm_bak = 0; | |
| /* new add end */ | |
| } | |
| g_Cc_CallDetail.chupSent = FALSE; | |
| ccapp_log("ZCC_SEIZE_E held_cid=%d held_incoming_cid=%d", | |
| zCc_find_held_cid(), | |
| zCc_find_held_incoming_cid()); | |
| if(local_test_call_st==LocalTestCallST_Ring) | |
| { | |
| /*memset(&tSig, 0, sizeof(tSig)); | |
| tSig.signal_type= TONE_SIGNAL; | |
| tSig.tone_type = TONE_TKY; | |
| SLIC_Play_Signal(0, 0, &tSig);*/ | |
| if(local_test_call_type == LocalTestCallType_LOOP) | |
| pthread_cancel(slic_ring_test_pid); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| g_Cc_CallDetail.evt[0]= ZCC_NO_E; | |
| g_Cc_CallDetail.slaveObj[0].sMsg = ZCC_SNO_M; | |
| local_test_call_st = LocalTestCallST_End; | |
| //system("echo loop_1 >> /tmp/log.ccapp.vploop"); | |
| //system("( sleep 1 && at_cmd AT+VPLOOP=1 ) &"); | |
| sc_cfg_set("tz_vploop", "1"); | |
| ipc_send_message(MODULE_ID_CALL_CTRL_LOCAL, | |
| MODULE_ID_AT_CTL, | |
| MSG_CMD_SET_VPLOOP_REQ, | |
| 0, | |
| NULL, | |
| 0); | |
| zCc_ShowAllSlaveWithTips("testCall-end"); | |
| break; | |
| } | |
| incoming_call_cid = zCc_find_held_incoming_cid(); | |
| ccapp_log("incoming_call_cid=%d is_cidcw=%d", | |
| incoming_call_cid, | |
| g_Cc_CallDetail.slaveObj[incoming_call_cid].is_cidcw); | |
| if(zCc_find_held_cid()) | |
| { | |
| zCc_SendAtChldReq(1); | |
| } | |
| else if(incoming_call_cid) | |
| { | |
| if(g_Cc_CallDetail.slaveObj[incoming_call_cid].is_cidcw == TRUE) | |
| zCc_SendAtChldReq(1); | |
| else | |
| { | |
| if (g_Cc_CallDetail.ringCid) | |
| { | |
| g_Cc_CallDetail.evt[g_Cc_CallDetail.ringCid] = ZCC_CNCT_E; | |
| zCc_SendAtAnswerReq(); | |
| } | |
| } | |
| } | |
| else | |
| { | |
| if (g_Cc_CallDetail.ringCid) | |
| { | |
| g_Cc_CallDetail.evt[g_Cc_CallDetail.ringCid] = ZCC_CNCT_E; | |
| zCc_SendAtAnswerReq(); | |
| } | |
| } | |
| break; | |
| // case ZCC_SINVITE_E: | |
| case ZCC_SDISCN_MT_E: | |
| case ZCC_SDISCN_MO_E: | |
| if(check_incoming_call_is_in_slave(ptMsgBuf)==0) | |
| break; | |
| g_Cc_CallDetail.evt[ptMsgBuf->dst_id] = ptMsgBuf->usMsgCmd; | |
| g_Cc_CallDetail.state = ZCC_M_RELEASE_S; | |
| SLIC_Stop_Signal(0, RING_SIGNAL); | |
| g_zCc_VoiceOpenSucc = 1; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MRingingState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| #ifndef TEST_CCAPP | |
| sc_cfg_get("voip_status",voip_status,sizeof(voip_status)); | |
| if (0 != strcmp("ledoff" , voip_status )) | |
| #endif | |
| { | |
| zCc_SetLedStatus("ledoff"); | |
| } | |
| shall_ring_cid = 0; | |
| held_call_cid = zCc_find_held_cid(); | |
| incoming_call_cid = zCc_find_held_incoming_cid(); | |
| if(held_call_cid && (ptMsgBuf->dst_id!=held_call_cid)) | |
| shall_ring_cid = held_call_cid; | |
| else if(incoming_call_cid && (ptMsgBuf->dst_id!=incoming_call_cid)) | |
| shall_ring_cid = incoming_call_cid; | |
| if(shall_ring_cid!=0) | |
| { | |
| memset(&tSig, 0, sizeof(tSig)); | |
| g_Cc_CallDetail.state = ZCC_M_RINGING_S; | |
| tSig.signal_type = RING_SIGNAL; | |
| /*memcpy(tSig.cid, | |
| g_Cc_CallDetail.slaveObj[shall_ring_cid].number, | |
| strlen(g_Cc_CallDetail.slaveObj[shall_ring_cid].number));*/ | |
| strncpy(tSig.cid, g_Cc_CallDetail.slaveObj[shall_ring_cid].number, sizeof(tSig.cid)-1); | |
| get_local_datetime(tSig.date_time); | |
| 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); | |
| SLIC_Play_Signal(0, 0, &tSig); | |
| zCc_SetLedStatus("ledblink"); | |
| } | |
| break; | |
| default: | |
| // do nothing | |
| break; | |
| } | |
| } | |
| VOID zCc_MSeizeState(MSG_BUF *ptMsgBuf) | |
| { | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ptMsgBuf->usMsgCmd = %d\n",__FUNCTION__,ptMsgBuf->usMsgCmd); | |
| UINT8 slave = (UINT8)ptMsgBuf->dst_id; | |
| UINT8 callCnt = 0; | |
| UINT8 ret = 0; | |
| SINT32 chldret = -1; | |
| UINT8 tmpslave = 0; | |
| CHAR voip_status[ZDIAL_NUM_MAX] = {0}; | |
| printf("[ccapp_debug]: Seize State Recv MsgCmd: %d,localtest=%d\n",ptMsgBuf->usMsgCmd,local_test_call_st); | |
| switch (ptMsgBuf->usMsgCmd) | |
| { | |
| case ZCC_DTMF_E: // ²¦ºÅ | |
| // slave[0] dial , or other call's DTMF | |
| ccapp_log("--> ZCC_DTMF_E[%c] lastTone=%d Count=%d Held=%d Active=%d getSlave(DACCM)=%d getSlave(RINGBACK)=%d ringCid=%d dig=%s", | |
| ptMsgBuf->aucDataBuf[0], | |
| g_Cc_CallDetail.lastTone, | |
| zCc_CallCount(), | |
| zCc_HeldCall(), | |
| zCc_ActiveCall(), | |
| zCc_GetSpecSlave(ZCC_S_DACCM_S), | |
| zCc_GetSpecSlave(ZCC_S_RINGBACK_S), | |
| g_Cc_CallDetail.ringCid, | |
| g_Cc_CallDetail.digits); | |
| 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", | |
| ptMsgBuf->aucDataBuf[0], | |
| g_Cc_CallDetail.lastTone, | |
| zCc_CallCount(), | |
| zCc_HeldCall(), | |
| zCc_ActiveCall(), | |
| zCc_GetSpecSlave(ZCC_S_DACCM_S), | |
| zCc_GetSpecSlave(ZCC_S_RINGBACK_S), | |
| g_Cc_CallDetail.ringCid, | |
| g_Cc_CallDetail.digits); | |
| /* callwait ringback but he drop then we hookflash+1 | |
| lastTone=6 Count=2 Held=1 Active=0 getSlave(DACCM)=0 getSlave(RINGBACK)=2 ringCid=0 dig[0]=F | |
| */ | |
| if ((g_Cc_CallDetail.lastTone == ZCC_TONE_BSY_A) || (g_Cc_CallDetail.lastTone == ZCC_TONE_TKY_A))//æÒôºÍÃùº¿Òô£¬²»´¦Àí°´¼üÏûÏ¢ | |
| { | |
| zCc_ClearDigits(); | |
| break; | |
| } | |
| callCnt = zCc_CallCount(); | |
| if ( (g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A || callCnt == zCc_HeldCall()) //Ö»Óб£³Öºô½Ð£¬²¦ºÅ·¢Æðкô½Ð | |
| && g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN | |
| && 0 == zCc_ActiveCall())//·Å²¦ºÅÒô»òÒÑÓб£³Öºô½ÐʱÓû§²¦ºÅ,µÚÒ»¸ö×Ö·û£¬Åųýactive+heldʱÏ·¢F2 | |
| { | |
| slave = zCc_GetSpecSlave(ZCC_S_IDLE_S); | |
| if (0 == slave ) | |
| { | |
| return; | |
| } | |
| g_Cc_CallDetail.slaveObj[slave] = g_Cc_CallDetail.slaveObj[0]; | |
| g_Cc_CallDetail.evt[slave] = ZCC_DTMF_E; | |
| sc_timer_delete(ZCCAPP_TIMER_SSDIALTONE_DETECT); | |
| zCc_InitSlaveObj(0); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ZCC_DTMF_E \n",__FUNCTION__); | |
| break; | |
| } | |
| else if ((g_Cc_CallDetail.lastTone == ZCC_TONE_SIL_A) && (0 != zCc_GetSpecSlave(ZCC_S_DACCM_S)))//¼ÌÐø²¦ºÅ | |
| { | |
| slave = zCc_GetSpecSlave(ZCC_S_DACCM_S); | |
| g_Cc_CallDetail.evt[slave] = ZCC_DTMF_E; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ZCC_DTMF_E \n",__FUNCTION__); | |
| break; | |
| } | |
| else if ((g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN) && ((0 != zCc_ActiveCall()) | |
| ||((0 == zCc_ActiveCall()) && (0 != zCc_GetSpecSlave(ZCC_S_RINGBACK_S)))))//·¢dtmf | |
| { | |
| if (0 != zCc_ActiveCall()) | |
| { | |
| slave = zCc_GetCallSlave(0); | |
| } | |
| else | |
| { | |
| slave = zCc_GetSpecSlave(ZCC_S_RINGBACK_S); | |
| } | |
| g_Cc_CallDetail.evt[slave] = ZCC_DTMF_E; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ZCC_DTMF_E \n",__FUNCTION__); | |
| break; | |
| } | |
| else if ((0 == zCc_ActiveCall()) && (0 == zCc_GetSpecSlave(ZCC_S_RINGBACK_S)) | |
| && (g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN))//·ÇÎÈ̬·Ç»ØÁåÒô״̬ÊÕµ½×Ö·û£¬¶ªÆú | |
| { | |
| zCc_ClearDigits(); | |
| return; | |
| } | |
| else | |
| { | |
| if (g_Cc_CallDetail.ringCid && (g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].tone == ZCC_TONE_CIDCW_A))//active+waiting+flashordtmf | |
| { | |
| sc_timer_delete(ZCCAPP_TIMER_SSDIALTONE_DETECT); | |
| if (g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN) | |
| { | |
| slave = zCc_GetSpecSlave(ZCC_S_TALKING_S); | |
| if (0 == slave ) | |
| { | |
| return; | |
| } | |
| g_Cc_CallDetail.evt[slave] = ZCC_DTMF_E; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ZCC_DTMF_E \n",__FUNCTION__); | |
| break; | |
| } | |
| } | |
| sc_timer_delete(ZCCAPP_TIMER_DTMF_DETECT); | |
| ret = zCc_DigitsMatch(); | |
| if ((ZCC_NO_RESULT != ret && ZCC_MATCHERR != ret && g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A) | |
| ||(ZCC_MATCHERR == ret && g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A && 2 <= zCc_CallCount())) | |
| {//call waitingÊÕµ½flash4£¬Í£Ö¹²¦ºÅÒô»Ö¸´ºô½ÐµÈ´ýÒô | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| if (g_Cc_CallDetail.slaveObj[0].tone != ZCC_TONE_OFF_A) | |
| { | |
| zCc_InitSlaveObj(0); | |
| } | |
| if (0 != zCc_ActiveCall()) | |
| { | |
| SLIC_Start_PCM(); | |
| } | |
| if ((ZCC_FLASH_1 == ret || ZCC_FLASH_2 == ret) && (g_Cc_CallDetail.ringCid != 0))//½ÓÌýwaiting call£¬ºô½ÐµÈ´ýÒôÓ¦Çå¿Õ | |
| { | |
| g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].tone = ZCC_TONE_OFF_A; | |
| } | |
| } | |
| zCc_DigitsMatchRltProc(ret); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState ZCC_DTMF_E \n",__FUNCTION__); | |
| } | |
| break; | |
| case ZCC_SDIALLING_E: // ·¢³öÁËSIP INVITE »ò CC SETUP , ͨ¹ýÕâ¸öÏûÏ¢Éϱ¨ cid | |
| if (0 != zCc_GetDialingSlave(0)) | |
| { | |
| tmpslave = zCc_GetDialingSlave(0); | |
| if (tmpslave != slave) | |
| { | |
| g_Cc_CallDetail.slaveObj[slave] = g_Cc_CallDetail.slaveObj[tmpslave]; | |
| zCc_InitSlaveObj(tmpslave); | |
| } | |
| } | |
| break; | |
| case ZCC_SRING_E: | |
| case ZCC_SANS_E: | |
| case ZCC_SINVITE_E: | |
| case ZCC_CIDCW_E: | |
| g_Cc_CallDetail.evt[slave] = ptMsgBuf->usMsgCmd; | |
| break; | |
| case ZCC_SDISCN_MT_E: | |
| case ZCC_SDISCN_MO_E: | |
| { //cov m | |
| if(check_incoming_call_is_in_slave(ptMsgBuf)==0) | |
| break; | |
| g_Cc_CallDetail.evt[slave] = ptMsgBuf->usMsgCmd; | |
| T_zCcApp_DsciInd *ptr = ptMsgBuf->aucDataBuf; | |
| /* somebody drop the call | |
| zCc_MSeizeState zCc_MSeizeState ptMsgBuf->usMsgCmd = 43 | |
| zCc_MSeizeState ==> get MT/MO cid=1 num=13088877803 stat=6 inMp=0 getCnt=2 | |
| zCc_MSeizeState slv=1 cid=0 held=1 stat=8 | |
| zCc_MSeizeState slv=2 cid=0 held=0 stat=8 | |
| zCc_STalkingState zCc_STalkingState g_Cc_CallDetail.evt[1] = 43 | |
| */ | |
| ccapp_log("==> get MT/MO cid=%d num=%s stat=%d inMp=%d getCnt=%d", | |
| ptr->cid, ptr->num, ptr->state, ptr->inMpty, | |
| zCc_CallCount()); | |
| for (tmpslave = 0; tmpslave < ZCC_SLAVES; tmpslave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[tmpslave].state != ZCC_S_IDLE_S) | |
| { | |
| ccapp_log(" slave=%d cid=%d held=%d stat=%d", | |
| tmpslave, | |
| g_Cc_CallDetail.slaveObj[tmpslave].cid, | |
| g_Cc_CallDetail.slaveObj[tmpslave].heldcall, | |
| g_Cc_CallDetail.slaveObj[tmpslave].state); | |
| } | |
| } | |
| if(zCc_CallCount()<2) | |
| break; | |
| if(ptr->cid>=ZCC_SLAVES) //cov m | |
| break; | |
| if(g_Cc_CallDetail.slaveObj[ptr->cid].heldcall==0 && | |
| g_Cc_CallDetail.slaveObj[ptr->cid].confcall==0) | |
| { | |
| if(zCc_HeldCall()) | |
| { | |
| zCc_SendAtChldReq(1); | |
| break; | |
| } | |
| } | |
| int incoming_call_cid = zCc_GetSpecSlave(ZCC_S_TRYING_S); | |
| if(incoming_call_cid!=0 && incoming_call_cid!=ptr->cid) | |
| zCc_SendAtChldReq(2); | |
| #if 0 | |
| tmpslave = zCc_GetSpecSlave(ZCC_S_TRYING_S); // incoming call here and wait for to be accepted | |
| ccapp_log("zCc_CallCount()=%d zCc_GetSpecSlave(ZCC_S_TRYING_S)=%d", | |
| zCc_CallCount(), | |
| tmpslave); | |
| if(tmpslave!=0 && ptMsgBuf->usMsgCmd==ZCC_SDISCN_MO_E) // foreground drop, automaticly accept the incoming call | |
| { | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zCc_SendAtChldReq(1); | |
| break; | |
| } | |
| if(zCc_CallCount()<2) | |
| break; | |
| if(ptr->cid<0 || ptr->cid>=ZCC_SLAVES) | |
| break; | |
| if(g_Cc_CallDetail.slaveObj[ptr->cid].heldcall==0 && | |
| g_Cc_CallDetail.slaveObj[ptr->cid].confcall==0) | |
| { | |
| /*if(g_Cc_CallDetail.slaveObj[ptr->cid].state==ZCC_S_DIALING_S || | |
| g_Cc_CallDetail.slaveObj[ptr->cid].state==ZCC_S_RINGBACK_S || | |
| g_Cc_CallDetail.slaveObj[ptr->cid].state==ZCC_S_TALKING_S) */ | |
| if(zCc_HeldCall()) | |
| { | |
| zCc_SendAtChldReq(1); | |
| } | |
| } | |
| #endif | |
| break; | |
| } | |
| case ZCC_RELEASE_E: | |
| if(local_test_call_st==LocalTestCallST_Start) | |
| { | |
| SIGNAL_DATA tSig; | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| memset(&tSig, 0, sizeof(tSig)); | |
| tSig.signal_type = RING_SIGNAL; | |
| strcpy(g_Cc_CallDetail.number, "1234567890"); | |
| strncpy(tSig.cid, g_Cc_CallDetail.number,sizeof(tSig.cid)-1); | |
| get_local_datetime(tSig.date_time); | |
| ccapp_log("local test call RING_SIGNAL,number = %s\n",g_Cc_CallDetail.number); | |
| SLIC_Play_Signal(0, 0, &tSig); | |
| zCc_SetLedStatus("ledblink"); | |
| if(local_test_call_type == LocalTestCallType_LOOP) { | |
| if (pthread_create(&slic_ring_test_pid, NULL, slic_ring_test_thread,0) != 0) //cov m | |
| printf("slic_ring_test_thread create fail\n"); | |
| } | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| g_Cc_CallDetail.evt[slave]= ZCC_NO_E; | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M; | |
| g_Cc_CallDetail.state = ZCC_M_RINGING_S; | |
| local_test_call_st = LocalTestCallST_Ring; | |
| zCc_ShowAllSlaveWithTips("testCall-ring"); | |
| break; | |
| } | |
| else if(local_test_call_st==LocalTestCallST_End) | |
| { | |
| zCc_ClearDigits(); | |
| zCc_InitSlaveObj(0); | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S) | |
| zCc_InitSlaveObj(slave); | |
| } | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| SLIC_Stop_PCM(); | |
| zCc_SetLedStatus("ledoff"); | |
| g_Cc_CallDetail.resourceReady = 0; | |
| g_Cc_CallDetail.hookofffg = FALSE; | |
| g_Cc_CallDetail.state = ZCC_M_RELEASE_S; | |
| //system("echo loop_0 >> /tmp/log.ccapp.vploop"); | |
| //system("( sleep 1 && at_cmd AT+VPLOOP=0 ) &"); | |
| sc_cfg_set("tz_vploop", "0"); | |
| ipc_send_message(MODULE_ID_CALL_CTRL_LOCAL, | |
| MODULE_ID_AT_CTL, | |
| MSG_CMD_SET_VPLOOP_REQ, | |
| 0, | |
| NULL, | |
| 0); | |
| sc_timer_delete(ZCCAPP_TIMER_HOOKOFF_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_DTMF_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_BUSYTONE_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_TKYTONE_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_SSDIALTONE_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_HOOKOFF_IDLE); | |
| local_test_call_st = LocalTestCallST_None; | |
| zCc_ShowAllSlaveWithTips("testCall-end-none"); | |
| break; | |
| } | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state != ZCC_S_IDLE_S && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0) | |
| { | |
| g_Cc_CallDetail.evt[slave] = ZCC_DISCN_E; | |
| } | |
| } | |
| //if(slave == ZCC_SLAVES) | |
| // return; | |
| if (g_Cc_CallDetail.slaveObj[0].state != ZCC_S_IDLE_S)//slave0½öÓÃÓÚ·ÅÒô£¬²»¶ÔÓ¦ºô½Ð | |
| { | |
| zCc_InitSlaveObj(0); | |
| } | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| //g_Cc_CallDetail.chupSent = FALSE; | |
| //SLIC_Stop_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_PCM <---\n",__FUNCTION__); | |
| #ifndef TEST_CCAPP | |
| sc_cfg_get("voip_status",voip_status,sizeof(voip_status)); | |
| if (0 != strcmp("ledoff" , voip_status )) | |
| #endif | |
| { | |
| zCc_SetLedStatus("ledoff"); | |
| } | |
| g_Cc_CallDetail.state = ZCC_M_RELEASE_S; | |
| if (!(0 != zCc_GetSpecSlave(ZCC_S_TRYING_S) && (1 == zCc_CallCount())))//Õª»úʱµÄÀ´µç£¬²»Çå | |
| { | |
| g_Cc_CallDetail.resourceReady = 0; | |
| } | |
| zCc_ClearDigits(); | |
| g_Cc_CallDetail.hookofffg = FALSE; | |
| sc_timer_delete(ZCCAPP_TIMER_HOOKOFF_DETECT);//ÊÕµ½ÉÁ¶Ï£¬µ±Ç°¶¨Ê±Æ÷¶¼ÐèҪֹͣ£¬ºóÐøÔÙÆô¶¯ | |
| sc_timer_delete(ZCCAPP_TIMER_DTMF_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_BUSYTONE_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_TKYTONE_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_SSDIALTONE_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_HOOKOFF_IDLE); | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].idle_second = 0;//hook off ldle timer is killed, time_cnt reset | |
| } | |
| break; | |
| case ZCC_BUSYTONETIMER_E: | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if(g_Cc_CallDetail.slaveObj[slave].tone == ZCC_TONE_BSY_A) | |
| break; | |
| } | |
| if(slave == ZCC_SLAVES) | |
| return; | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_TKY_A; | |
| sc_timer_create(ZCCAPP_TIMER_TKYTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_TKYTONE_INTERVAL, | |
| zCcApp_TkyToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState sc_timer_create zCcApp_TkyToneTimer\n",__FUNCTION__); | |
| if (!(0 == zCc_GetSpecSlave(ZCC_S_BSYT_S) | |
| &&(g_Cc_CallDetail.slaveObj[slave].state== ZCC_S_WAIT_RESOURCE_S | |
| ||g_Cc_CallDetail.slaveObj[slave].state== ZCC_S_TRYING_S) | |
| && g_Cc_CallDetail.lastTone == ZCC_TONE_BSY_A)) | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TKYT_S; | |
| } | |
| return; | |
| case ZCC_HOOKOFFTIMER_E: | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if(g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_DT_S) | |
| break; | |
| } | |
| if(slave == ZCC_SLAVES) | |
| return; | |
| if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½Ðʱ²»·ÅæÒô | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S; | |
| g_Cc_CallDetail.slaveObj[slave].confcall = 0; | |
| g_Cc_CallDetail.slaveObj[slave].heldcall = 0; | |
| sc_timer_create(ZCCAPP_TIMER_BUSYTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_BUSYTONE_INTERVAL, | |
| zCcApp_BusyToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState sc_timer_create zCcApp_BusyToneTimer22222\n",__FUNCTION__); | |
| } | |
| else | |
| { | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| } | |
| return; | |
| case ZCC_HOOKOFF_IDLE_TIMER_E: | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if(g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_DT_S) | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].idle_second++; | |
| if(g_Cc_CallDetail.slaveObj[slave].idle_second >= 5000/ZCCAPP_TIMER_HOOKOFF_IDLE_INTERVAL) | |
| { | |
| int rt; | |
| char hotline[ZDIAL_NUM_MAX-1]; | |
| memset(hotline, 0, sizeof(hotline)); | |
| rt = sc_cfg_get("dialog_hotline_str", hotline, sizeof(hotline)-1); | |
| if(rt!=0 || strlen(hotline)<=0) | |
| { | |
| sc_timer_delete(ZCCAPP_TIMER_HOOKOFF_IDLE); | |
| break; | |
| } | |
| strcpy(g_Cc_CallDetail.digits, hotline); | |
| g_Cc_CallDetail.dCount = strlen(hotline); | |
| MSG_BUF msgBuf = {0}; | |
| msgBuf.usMsgCmd = ZCC_DTMF_E; | |
| msgBuf.src_id = MODULE_ID_SLIC; | |
| msgBuf.aucDataBuf[0] = (UINT8)'#'; | |
| msgBuf.usDataLen = 1; | |
| zCc_SendMsgToSub(&msgBuf); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_SIL_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_DACCM_S; | |
| sc_timer_delete(ZCCAPP_TIMER_HOOKOFF_DETECT); | |
| ccapp_log("==> HOOKOFF_IDLE_TIMER send hotline=%s\n", hotline); | |
| } | |
| } | |
| } | |
| break; | |
| case ZCC_DTMFTIMER_E: | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if(g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_DACCM_S) | |
| break; | |
| } | |
| if(slave == ZCC_SLAVES) | |
| return; | |
| g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount++] = ZCC_TIMEOUT_SIGN; | |
| ret = zCc_DigitsMatch(); | |
| zCc_DigitsMatchRltProc(ret); | |
| if (ZCC_MATCHERR != ret) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_IDLE_S)//ss | |
| { | |
| zCc_SendSsReq(g_Cc_CallDetail.digits); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| } | |
| else | |
| { | |
| zCc_SendAtDialReq(g_Cc_CallDetail.digits); | |
| } | |
| } | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M; | |
| zCc_ClearDigits(); | |
| return; | |
| case ZCC_TKYTIMER_E: | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| if(g_Cc_CallDetail.slaveObj[slave].tone == ZCC_TONE_TKY_A) | |
| break; | |
| } | |
| if(slave == ZCC_SLAVES) | |
| return; | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_SIL_A; | |
| if (!(0 == zCc_GetSpecSlave(ZCC_S_TKYT_S) | |
| &&(g_Cc_CallDetail.slaveObj[slave].state== ZCC_S_WAIT_RESOURCE_S | |
| ||g_Cc_CallDetail.slaveObj[slave].state== ZCC_S_TRYING_S) | |
| && g_Cc_CallDetail.lastTone == ZCC_TONE_TKY_A)) | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_SIL_S; | |
| } | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_SIL_A; | |
| return; | |
| case ZCC_SSDIALTONETIMER_E: | |
| zCc_InitSlaveObj(0);//·Å²¦ºÅÒôµÄslave0 Çå¿Õ | |
| zCc_ClearDigits(); | |
| if (1 == zCc_CallCount() | |
| && (g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A))//µ±Ç°Ö»ÓÐһ·£¬Í£Ö¹²¦ºÅÒô | |
| { | |
| SLIC_Stop_Signal(0,0); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| if (1 == zCc_HeldCall())//Òѱ£³Ö£¬»Ö¸´ | |
| { | |
| chldret = zCc_SendAtChldReq(2); | |
| } | |
| else if (0 != zCc_ActiveCall()) | |
| { | |
| SLIC_Start_PCM(); | |
| } | |
| } | |
| else if (1 < zCc_CallCount() && (g_Cc_CallDetail.lastTone == ZCC_TONE_DIAL_A))//active/held mpty and held+waiting | |
| { | |
| SLIC_Stop_Signal(0,0); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| if((0 == zCc_HeldCall() && 0 != g_Cc_CallDetail.ringCid)//active+waiting »Ö¸´ÓïÒô£¬held+waiting, ²»»Ö¸´ÓïÒô£¬·Åºô½ÐµÈ´ýÒô | |
| ||(0 != zCc_HeldCall() && 0 !=zCc_ActiveCall()))//active+held»Ö¸´ÓïÒô | |
| { | |
| SLIC_Start_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Start_PCM <---\n",__FUNCTION__); | |
| } | |
| } | |
| return; | |
| case ZCC_FLASH_E: | |
| ccapp_log("ZCC_FLASH_E cnt=%d held=%d active=%d BefDial=%d", | |
| zCc_CallCount(), | |
| zCc_HeldCall(), | |
| zCc_ActiveCall(), | |
| zCc_MoBeforDialingCall()); | |
| if (!(zCc_CallCount() > 1 && g_Cc_CallDetail.digits[0] == ZCC_FLASH_SIGN))//¶à·ºô½Ðʱ£¬ÐèÒªÅжÏflashÁ¬·¢Á½´ÎµÄ³¡¾°£¬²»Çå³ý | |
| { | |
| zCc_ClearDigits(); | |
| } | |
| sc_timer_delete(ZCCAPP_TIMER_HOOKOFF_DETECT);//ÊÕµ½ÉÁ¶Ï£¬µ±Ç°¶¨Ê±Æ÷¶¼ÐèҪֹͣ£¬ºóÐøÔÙÆô¶¯ | |
| sc_timer_delete(ZCCAPP_TIMER_DTMF_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_BUSYTONE_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_TKYTONE_DETECT); | |
| sc_timer_delete(ZCCAPP_TIMER_SSDIALTONE_DETECT); | |
| callCnt = zCc_CallCount(); | |
| if (g_Cc_CallDetail.ringCid && (g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].tone == ZCC_TONE_CIDCW_A))//ºô½ÐµÈ´ý£¬¸ù¾ÝflashºóÃæµÄ×Ö·û¾ö¶¨ºóÐø²Ù×÷ | |
| { | |
| if(g_Cc_CallDetail.digits[0] == ZCC_FLASH_SIGN) | |
| { | |
| zCc_InitSlaveObj(0); | |
| zCc_ClearDigits(); | |
| SLIC_Stop_Signal(0,0); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| if (0 != zCc_ActiveCall()) | |
| { | |
| SLIC_Start_PCM(); | |
| } | |
| break; | |
| } | |
| g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount++] = ZCC_FLASH_SIGN; | |
| // slave[0] to play dial tone | |
| sc_timer_create(ZCCAPP_TIMER_SSDIALTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_HOOKOFF_INTERVAL, | |
| zCcApp_SsDialToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: sc_timer_create zCcApp_SsDialToneTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.evt[0] = ZCC_DIAL_E; | |
| //g_Cc_CallDetail.slaveObj[g_Cc_CallDetail.ringCid].tone = ZCC_TONE_OFF_A;±£Áô¸Ã×ֶΣ¬ÓÃÓÚflash4µÈʧ°Üʱ»Ö¸´ºô½ÐµÈ´ýÒô | |
| SLIC_Stop_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_PCM2222\n",__FUNCTION__); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E\n",__FUNCTION__); | |
| break; | |
| } | |
| if ( callCnt==0 //·Å²¦ºÅÒô»¹Î´Íê³É²¦ºÅ»òÕª»ú䲦ºÅ·ÅæÒôº¿ÃùÒô¾²Òô | |
| ||(callCnt ==1 && zCc_FlashClearCall() > 0)) //ÕÒµ½½¨Á¢ÖеÄÖ÷½ÐÒÔ¼°ÊÍ·ÅÖеĺô½Ð£¬ÊÍ·Å£¬²¢·Å²¦ºÅÒô | |
| { | |
| zCc_InitSlaveObj(0); | |
| g_Cc_CallDetail.evt[0] = ZCC_DIAL_E; | |
| SLIC_Stop_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:SLIC_Stop_PCM\n",__FUNCTION__); | |
| g_Cc_CallDetail.hookofffg = TRUE; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E\n",__FUNCTION__); | |
| break; | |
| } | |
| if (zCc_ActiveCall() == callCnt) //Ö»ÓÐactive call£¬±£³ÖËü£¬²¢·Å²¦ºÅÒô | |
| { | |
| if (callCnt > 1) // conf call, ·Å²¦ºÅÒô | |
| { | |
| g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount++] = ZCC_FLASH_SIGN; | |
| g_Cc_CallDetail.digits[ZDIAL_NUM_MAX-1] = 1;// ¼Ç¼±¾´Î²Ù×÷ΪÕë¶Ôconf µÄ | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E\n",__FUNCTION__); | |
| } | |
| else | |
| { | |
| chldret = zCc_SendAtChldReq(2); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E\n",__FUNCTION__); | |
| g_Cc_CallDetail.waitchldresult = 1; | |
| } | |
| break; | |
| } | |
| if (zCc_HeldCall() == callCnt) //Ö»ÓÐheld call£¬»Ö¸´ | |
| { | |
| if (callCnt == 1 ) | |
| { | |
| chldret = zCc_SendAtChldReq(2); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E\n",__FUNCTION__); | |
| } | |
| else | |
| { | |
| g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount++] = ZCC_FLASH_SIGN; | |
| sc_timer_create(ZCCAPP_TIMER_SSDIALTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_HOOKOFF_INTERVAL, | |
| zCcApp_SsDialToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:sc_timer_create zCcApp_SsDialToneTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.evt[0] = ZCC_DIAL_E; | |
| } | |
| break; | |
| } | |
| //active + held | |
| if(g_Cc_CallDetail.digits[0] == ZCC_FLASH_SIGN) | |
| { | |
| zCc_InitSlaveObj(0); | |
| zCc_ClearDigits(); | |
| SLIC_Stop_Signal(0,0); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| if (0 != zCc_ActiveCall()) | |
| { | |
| SLIC_Start_PCM(); | |
| } | |
| break; | |
| } | |
| /* | |
| zCc_MSeizeState befor=1 act=0 held=1 callCnt=2 | |
| zCc_MoBeforDialingCall slave[1]=8 | |
| zCc_MoBeforDialingCall slave[2]=4 | |
| */ | |
| ccapp_log("ZCC_FLASH_E befor=%d active=%d held=%d callCnt=%d", | |
| zCc_MoBeforDialingCall(), | |
| zCc_ActiveCall(), | |
| zCc_HeldCall(), | |
| callCnt); | |
| if (((0 != zCc_MoBeforDialingCall()) | |
| && (0 != zCc_ActiveCall() || 0 != zCc_HeldCall())) //active or held + ½¨Á¢Öеĺô½Ð | |
| ||(0 != zCc_MoBeforDialingCall() && 1 == callCnt)) | |
| { | |
| /*if(g_Cc_CallDetail.digits[0]==ZCC_FLASH_SIGN && | |
| strlen(g_Cc_CallDetail.digits)<=3) | |
| { | |
| zCc_InitSlaveObj(0); | |
| zCc_ClearDigits(); | |
| zCc_SendAtChldReq(2); | |
| ccapp_log("get ZCC_FLASH_SIGN and return to old talk"); | |
| }*/ | |
| int cid = zCc_GetMoBeforDialingCallCID(); | |
| if(cid>=0 && zCc_HeldCall()!=0) // drop the beforeDialing call | |
| { | |
| zCc_InitSlaveObj(cid); | |
| zCc_ClearDigits(); | |
| zCc_SendAtChldReq(1); | |
| ccapp_log("drop the beforeDialing call cid=%d", cid); | |
| } | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:ZCC_FLASH_E return\n",__FUNCTION__); | |
| return; | |
| } | |
| g_Cc_CallDetail.digits[g_Cc_CallDetail.dCount++] = ZCC_FLASH_SIGN; | |
| g_Cc_CallDetail.evt[0] = ZCC_DIAL_E; | |
| sc_timer_create(ZCCAPP_TIMER_SSDIALTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_HOOKOFF_INTERVAL, | |
| zCcApp_SsDialToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:sc_timer_create zCcApp_SsDialToneTimer\n",__FUNCTION__); | |
| SLIC_Stop_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:SLIC_Stop_PCM\n",__FUNCTION__); | |
| break; | |
| case ZCC_RESOURCE_READY_E: | |
| g_Cc_CallDetail.evt[slave] = ZCC_RESOURCE_READY_E; | |
| break; | |
| /*ATÃüÁîÏìÓ¦£¬Ä¿Ç°Ö»ÓÐatdµÄÏìÓ¦ÐèÒª´¦Àí*/ | |
| case MSG_CMD_ATD_DIAL_RSP: | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ATD_rsp=%d\n",__FUNCTION__,((T_zCcapp_optRsp*)ptMsgBuf->aucDataBuf)->result); | |
| if(((T_zCcapp_optRsp*)ptMsgBuf->aucDataBuf)->result == 0) | |
| break; | |
| slave = zCc_GetDialingSlave(1); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtDialReq:RECV ERROR\n",__FUNCTION__); | |
| slave = zCc_GetDialingSlave(1); | |
| if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0 && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½ÐÇÒÒѹһúʱ²»·ÅæÒô | |
| { | |
| sc_timer_create(ZCCAPP_TIMER_BUSYTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_BUSYTONE_INTERVAL, | |
| zCcApp_BusyToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SendAtDialReq sc_timer_create zCcApp_BusyToneTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S; | |
| g_Cc_CallDetail.slaveObj[slave].confcall = 0; | |
| g_Cc_CallDetail.slaveObj[slave].heldcall = 0; | |
| } | |
| else | |
| { | |
| char num[ZDIAL_NUM_MAX+1]; | |
| strcpy(num, g_Cc_CallDetail.slaveObj[slave].number); | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| if(zCc_find_held_cid()|| zCc_find_held_incoming_cid()) // restore prvious talk to active | |
| { | |
| zCc_SendAtChldReq(2); | |
| char temp[200]; | |
| sprintf(temp, "echo \"%s get error dialout cid=%d num=%s\" > /tmp/log.ccapp.callout.err", | |
| get_local_date_time(), slave, num); | |
| soft_system(temp); | |
| } | |
| } | |
| break; | |
| /*case MSG_CMD_ATA_RSP: | |
| case MSG_CMD_CHUP_RSP: | |
| case MSG_CMD_VTS_RSP: | |
| case MSG_CMD_ZIMSPLUS_RSP: | |
| case MSG_CMD_CCFC_RSP: | |
| case MSG_CMD_CLCK_RSP: | |
| break;*/ | |
| case MSG_CMD_CHLD_RSP: | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s CHLD_rsp=%d\n",__FUNCTION__,((T_zCcapp_optRsp*)ptMsgBuf->aucDataBuf)->result); | |
| if(g_Cc_CallDetail.waitchldresult == 1 ) | |
| { | |
| g_Cc_CallDetail.waitchldresult = 0; | |
| if (((T_zCcapp_optRsp*)ptMsgBuf->aucDataBuf)->result == 0) | |
| { | |
| sc_timer_create(ZCCAPP_TIMER_SSDIALTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_HOOKOFF_INTERVAL, | |
| zCcApp_SsDialToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:sc_timer_create zCcApp_SsDialToneTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.evt[0] = ZCC_DIAL_E; | |
| SLIC_Stop_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_MSeizeState:SLIC_Stop_PCM\n",__FUNCTION__); | |
| } | |
| } | |
| break; | |
| case ZCC_SEIZE_E: // ͻȜ | |
| default: | |
| // do nothing | |
| break; | |
| } | |
| } | |
| //get local time string , format"YYYY-MM-DD HH:MM:SS" | |
| char *get_local_date_time(void) | |
| { | |
| time_t now; | |
| struct tm *timenow; | |
| static char localtimestr[32]; | |
| time(&now); | |
| timenow = localtime(&now); | |
| memset(localtimestr, 0, 32); | |
| if(timenow) | |
| snprintf(localtimestr, 32, "%04d-%02d-%02d %02d:%02d:%02d", | |
| timenow->tm_year + 1900, timenow->tm_mon+1, timenow->tm_mday, | |
| timenow->tm_hour, timenow->tm_min, timenow->tm_sec); | |
| return localtimestr; | |
| } | |
| //get local time string , format"MMDDHHMM" | |
| char *get_local_datetime(char *buff) | |
| { | |
| time_t now; | |
| struct tm *timenow; | |
| static char localtimestr[48]; | |
| memset(localtimestr, 0, sizeof(localtimestr)); | |
| time(&now); | |
| timenow = localtime(&now); | |
| if(timenow) | |
| sprintf(localtimestr, "%02d%02d%02d%02d", | |
| timenow->tm_mon+1, timenow->tm_mday, | |
| timenow->tm_hour, timenow->tm_min); | |
| if(buff!=NULL) | |
| strcpy(buff, localtimestr); | |
| return localtimestr; | |
| } | |
| int zCc_find_held_cid(void) | |
| { | |
| int slavetmp; | |
| for (slavetmp = 1; slavetmp < ZCC_SLAVES; slavetmp++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slavetmp].heldcall!=0) | |
| { | |
| return slavetmp; | |
| } | |
| } | |
| return 0; | |
| } | |
| int zCc_talking_count(void) | |
| { | |
| int cnt = 0; | |
| int slavetmp; | |
| for (slavetmp = 1; slavetmp < ZCC_SLAVES; slavetmp++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slavetmp].state==ZCC_S_TALKING_S) | |
| cnt++; | |
| } | |
| return cnt; | |
| } | |
| int zCc_find_held_incoming_cid(void) | |
| { | |
| int slavetmp; | |
| for (slavetmp = 1; slavetmp < ZCC_SLAVES; slavetmp++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slavetmp].state==ZCC_S_TRYING_S) | |
| { | |
| return slavetmp; | |
| } | |
| } | |
| return 0; | |
| } | |
| int zCc_find_all_callout(int slave[ZCC_SLAVES]) | |
| { | |
| int n=0; | |
| int i; | |
| for (i = 1; i < ZCC_SLAVES; i++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[i].is_callout!=0) | |
| { | |
| slave[n] = i; | |
| n++; | |
| } | |
| } | |
| return n; | |
| } | |
| void zCc_hungup_all(int slave) | |
| { | |
| int slavetmp; | |
| if (!g_Cc_CallDetail.chupSent) | |
| { | |
| zCc_SendAtHangupReq(); | |
| for (slavetmp = 1; slavetmp < ZCC_SLAVES; slavetmp++) | |
| { | |
| if (g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_DIALING_S | |
| || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_RINGBACK_S | |
| || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_TALKING_S | |
| || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_TRYING_S | |
| || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_WAIT_RESOURCE_S) | |
| { | |
| g_Cc_CallDetail.slaveObj[slavetmp].waitDSCI6 = 1; | |
| } | |
| } | |
| if (!((zCc_CallCount() == 1) && ((ZCC_S_DACCM_S == g_Cc_CallDetail.slaveObj[slave].state) | |
| || (ZCC_S_DIALING_S == g_Cc_CallDetail.slaveObj[slave].state))) | |
| && !((zCc_CallCount() > 1) && (0 != zCc_MtInactiveCall()) && (0 != zCc_MoInactiveCall())))//·Çidle״̬¶¼ÊÇÕª»ú̬ÊÕµ½À´µçÇҾܽÓÀ´µç | |
| { | |
| g_Cc_CallDetail.chupSent = TRUE;//»¹ÓÐÆäËûºô½Ð£¬²»ÔÙÖØ¸´·¢chup | |
| } | |
| } | |
| } | |
| VOID zCc_RunMaster(MSG_BUF *ptMsgBuf) | |
| { | |
| UINT8 slave = 0; | |
| UINT8 slavetmp = 0; | |
| SIGNAL_DATA tSig; | |
| int held_call_cid; | |
| int incoming_call_cid; | |
| static int old_state = -1; | |
| if(old_state != g_Cc_CallDetail.state) | |
| { | |
| ccapp_log("=======================\n"); | |
| ccapp_log("zCc_RunMaster state %d --> %d\n", old_state, g_Cc_CallDetail.state); | |
| old_state = g_Cc_CallDetail.state; | |
| } | |
| memset(tSig.cid, 0, 32); | |
| zCc_CheckSlaveState("start zCc_RunMaster"); | |
| switch (g_Cc_CallDetail.state) | |
| { | |
| case ZCC_M_RELEASE_S: | |
| zCc_MReleaseState(ptMsgBuf); | |
| break; | |
| case ZCC_M_RINGING_S: | |
| zCc_MRingingState(ptMsgBuf); | |
| break; | |
| case ZCC_M_SEIZE_S: | |
| default: | |
| zCc_MSeizeState(ptMsgBuf); | |
| break; | |
| } | |
| zCc_CheckSlaveState("in zCc_RunSlave"); | |
| /* Now run the slaves. Since the slaves will always be run with the master , run them now. */ | |
| for (slave = 0; slave < ZCC_SLAVES; slave++) | |
| { | |
| zCc_RunSlave(slave); | |
| g_Cc_CallDetail.evt[slave] = ZCC_NO_E; | |
| } | |
| /* Process sMsg. */ | |
| for (slave = 1; slave < ZCC_SLAVES; slave++) | |
| { | |
| if(g_Cc_CallDetail.slaveObj[slave].sMsg!=ZCC_SNO_M) | |
| { | |
| zCc_CheckSlaveState("in slaveObj[slave].sMsg"); | |
| ccapp_log("g_Cc_CallDetail.slaveObj[%d].sMsg=%d", | |
| slave, | |
| g_Cc_CallDetail.slaveObj[slave].sMsg); | |
| } | |
| switch (g_Cc_CallDetail.slaveObj[slave].sMsg) | |
| { | |
| case ZCC_SINV_M: | |
| if (g_Cc_CallDetail.slaveObj[slave].state == ZCC_S_IDLE_S)//ss | |
| { | |
| zCc_SendSsReq(g_Cc_CallDetail.digits); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| } | |
| else | |
| { | |
| zCc_SendAtDialReq(g_Cc_CallDetail.digits); | |
| } | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M; | |
| zCc_ClearDigits(); | |
| break; | |
| case ZCC_SDTMF_M: | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s ZCC_SDTMF_M handling ptMsgBuf->aucDataBuf[0] = %d\n",__FUNCTION__,ptMsgBuf->aucDataBuf[0]); | |
| zCc_SendAtDtmfReq((char*)(&(ptMsgBuf->aucDataBuf[0]))); | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M; | |
| if(g_Cc_CallDetail.waitchldresult == 0)//chld´¦Àí¹ý³ÌÖв»Çå³ý²¦ºÅ°´¼üadd by zpr | |
| zCc_ClearDigits(); | |
| break; | |
| case ZCC_SRING_M: | |
| if (g_Cc_CallDetail.state == ZCC_M_RELEASE_S)// && g_Cc_CallDetail.ringCid) | |
| { | |
| g_Cc_CallDetail.state = ZCC_M_RINGING_S; | |
| memset(&tSig, 0, sizeof(tSig)); | |
| tSig.signal_type = RING_SIGNAL; | |
| //memcpy(tSig.cid, g_Cc_CallDetail.number, strlen(g_Cc_CallDetail.number)); | |
| strncpy(tSig.cid, g_Cc_CallDetail.number, sizeof(tSig.cid)-1); | |
| get_local_datetime(tSig.date_time); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_RunMaster RING_SIGNAL,number = %s\n",__FUNCTION__,g_Cc_CallDetail.number); | |
| SLIC_Play_Signal(0, 0, &tSig); | |
| zCc_SetLedStatus("ledblink"); | |
| } | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M; | |
| break; | |
| case ZCC_SANS_M://ʲô³¡¾°? | |
| if (zCc_CallCount() == 1) | |
| { | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s : SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| } | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M; | |
| break; | |
| case ZCC_SDISCN_M: | |
| held_call_cid = zCc_find_held_cid(); | |
| incoming_call_cid = zCc_GetSpecSlave(ZCC_S_TRYING_S); | |
| ccapp_log("ZCC_SDISCN_M held_call_cid=%d incoming_call_cid=%d chupSent=%d", | |
| held_call_cid, | |
| incoming_call_cid, | |
| g_Cc_CallDetail.chupSent); | |
| if((held_call_cid!=0 ||incoming_call_cid!=0) && g_Cc_CallDetail.chupSent==FALSE) | |
| { | |
| int active_call_cid = 0; | |
| for (slavetmp = 1; slavetmp < ZCC_SLAVES; slavetmp++) | |
| { | |
| if( (g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_DIALING_S | |
| || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_RINGBACK_S | |
| || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_TALKING_S | |
| // || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_TRYING_S // incoming_call_cid | |
| || g_Cc_CallDetail.slaveObj[slavetmp].state == ZCC_S_WAIT_RESOURCE_S) && | |
| g_Cc_CallDetail.slaveObj[slavetmp].heldcall==0) | |
| { | |
| active_call_cid = slavetmp; | |
| break; | |
| } | |
| } | |
| ccapp_log("ZCC_SDISCN_M active_call_cid=%d", active_call_cid); | |
| if(active_call_cid!=0) | |
| { | |
| zCc_SendAtChldReq(10+active_call_cid); | |
| g_Cc_CallDetail.chupSent = TRUE; | |
| g_Cc_CallDetail.state = ZCC_M_RINGING_S; | |
| /*MSG_BUF msgBuff = {0}; // let while(1) run one more time | |
| msgBuff.usMsgCmd = ZCC_ASSIST_MSG_E; | |
| msgBuff.src_id = MODULE_ID_SLIC; | |
| zCc_SendMsgToSub(&msgBuff); | |
| ccapp_log("sendMsg ZCC_ASSIST_MSG_E"); */ | |
| } | |
| else | |
| { | |
| zCc_hungup_all(slave); | |
| } | |
| } | |
| else | |
| { | |
| zCc_hungup_all(slave); | |
| } | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M; | |
| break; | |
| default: | |
| break; | |
| } | |
| } | |
| if (g_Cc_CallDetail.state == ZCC_M_RINGING_S | |
| && g_Cc_CallDetail.ringCid == 0 | |
| && zCc_find_held_cid()==0 | |
| && zCc_find_held_incoming_cid()==0 | |
| && local_test_call_st==0) | |
| { | |
| g_Cc_CallDetail.state = ZCC_M_RELEASE_S; | |
| SLIC_Stop_Signal(0, RING_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s : SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| } | |
| /*else if (g_Cc_CallDetail.state == ZCC_M_SEIZE_S && g_Cc_CallDetail.ringCid > 0 && zCc_CallCount() == 1) | |
| { | |
| //תΪ½ÓÌý | |
| ¹Ò»úºó¿ÉÒÔÖªµÀÀ´µç²¢½ÓÌý£¬ÎÞÐèÌØÊâ´¦Àí¡£ | |
| }*/ | |
| zCc_ControlTone(); | |
| // ´¦Àíslave·µ»ØµÄÏûÏ¢ | |
| zCc_CheckSlaveState("End zCc_RunMaster"); | |
| } | |
| VOID zCc_RunSlave(UINT8 slave) | |
| { | |
| if (g_Cc_CallDetail.evt[slave] == ZCC_NO_E) | |
| { | |
| return; | |
| } | |
| /* Call respective state function based on the current state. */ | |
| printf("[ccapp_debug]:Slave Run,slave:%d, state=%d,event=%d\n", slave, g_Cc_CallDetail.slaveObj[slave].state,g_Cc_CallDetail.evt[slave]); | |
| zCcSlaveFsmFunc[g_Cc_CallDetail.slaveObj[slave].state](slave); | |
| } | |
| VOID zCc_SIdleState(UINT8 slave) | |
| { | |
| UINT8 tmpslave = 0; | |
| 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]); | |
| g_Cc_CallDetail.slaveObj[slave].cid = slave; | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_DIAL_E: | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_DIAL_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = g_Cc_CallDetail.digits[0] != ZCC_FLASH_SIGN ? ZCC_S_DT_S : ZCC_S_DACCM_S; | |
| if (g_Cc_CallDetail.hookofffg == TRUE) | |
| { | |
| g_Cc_CallDetail.hookofffg = FALSE; | |
| sc_timer_create(ZCCAPP_TIMER_HOOKOFF_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_HOOKOFF_INTERVAL, | |
| zCcApp_HookOffTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState sc_timer_create zCcApp_HookOffTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].idle_second = 0; | |
| sc_timer_create(ZCCAPP_TIMER_HOOKOFF_IDLE, | |
| TIMER_FLAG_RESTART, | |
| ZCCAPP_TIMER_HOOKOFF_IDLE_INTERVAL, | |
| zCcApp_HookOff_Idle_Timer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState sc_timer_create zCcApp_HookOff_Idle_Timer\n",__FUNCTION__); | |
| } | |
| break; | |
| case ZCC_DTMF_E://held+dailing | |
| if ( 0 != zCc_HeldCall() && 0 == zCc_ActiveCall()) | |
| { | |
| sc_timer_delete(ZCCAPP_TIMER_SSDIALTONE_DETECT); | |
| sc_timer_create(ZCCAPP_TIMER_DTMF_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_DTMF_INTERVAL, | |
| zCcApp_DtmfTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState sc_timer_create zCcApp_DtmfTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_SIL_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_DACCM_S; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState handling ZCC_DTMF_E\n",__FUNCTION__); | |
| } | |
| break; | |
| case ZCC_CIDCW_E: | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_CIDCW_A; | |
| //lint -fallthrough | |
| case ZCC_SINVITE_E: | |
| zCc_ShowAllSlaveWithTips("zCc_SIdleState"); | |
| if (((0 != zCc_GetDialingSlave(1)) || (0 != zCc_GetSpecSlave(ZCC_S_RINGBACK_S)))//ÓÐÒѾÏ·¢atd µÄºô½Ðʱ¾Ü¾øÐÂÀ´µç | |
| || (0 != zCc_MoInactiveCall()))// | |
| { | |
| //zCc_InitSlaveObj(slave);¼ÌÐøµÈdsci6Éϱ¨ | |
| g_Cc_CallDetail.slaveObj[slave].state = g_Cc_CallDetail.resourceReady?ZCC_S_TRYING_S:ZCC_S_WAIT_RESOURCE_S; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M; | |
| return; | |
| } | |
| g_Cc_CallDetail.ringCid = slave; | |
| if(g_Cc_CallDetail.evt[slave]==ZCC_CIDCW_E) | |
| g_Cc_CallDetail.slaveObj[slave].is_cidcw = TRUE; | |
| else | |
| g_Cc_CallDetail.slaveObj[slave].is_cidcw = FALSE; | |
| strcpy(g_Cc_CallDetail.slaveObj[slave].number, g_Cc_CallDetail.number); | |
| if (g_Cc_CallDetail.resourceReady == 1) | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TRYING_S; | |
| } | |
| else | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_WAIT_RESOURCE_S; | |
| } | |
| break; | |
| case ZCC_SRING_E://cid²»Æ¥ÅäµÄ³¡¾° | |
| tmpslave = zCc_GetDialingSlave(0); | |
| if (0 == tmpslave ) | |
| { | |
| return; | |
| } | |
| g_Cc_CallDetail.slaveObj[slave] = g_Cc_CallDetail.slaveObj[tmpslave]; | |
| zCc_InitSlaveObj(tmpslave); | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_RINGBACK_S; | |
| break; | |
| case ZCC_SDISCN_MO_E://cid²»Æ¥ÅäµÄ³¡¾° | |
| tmpslave = zCc_GetDialingSlave(0); | |
| if (0 == tmpslave ) | |
| { | |
| return; | |
| } | |
| g_Cc_CallDetail.slaveObj[slave] = g_Cc_CallDetail.slaveObj[tmpslave]; | |
| zCc_InitSlaveObj(tmpslave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, tmpslave); | |
| if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0&& g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½ÐÇÒÒѹһúʱ²»·ÅæÒô | |
| { | |
| sc_timer_create(ZCCAPP_TIMER_BUSYTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_BUSYTONE_INTERVAL, | |
| zCcApp_BusyToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState sc_timer_create zCcApp_BusyToneTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S; | |
| g_Cc_CallDetail.slaveObj[slave].confcall = 0; | |
| g_Cc_CallDetail.slaveObj[slave].heldcall = 0; | |
| } | |
| else | |
| { | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| } | |
| return; | |
| default: | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SIdleState:evt=%d\n",__FUNCTION__,g_Cc_CallDetail.evt[slave]); | |
| break; | |
| } | |
| } | |
| VOID zCc_SDtState(UINT8 slave) | |
| { | |
| 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]); | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_DTMF_E: | |
| sc_timer_delete(ZCCAPP_TIMER_HOOKOFF_IDLE); | |
| g_Cc_CallDetail.slaveObj[slave].idle_second = 0; | |
| sc_timer_delete(ZCCAPP_TIMER_HOOKOFF_DETECT); | |
| sc_timer_create(ZCCAPP_TIMER_DTMF_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_DTMF_INTERVAL, | |
| zCcApp_DtmfTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDtState sc_timer_create zCcApp_DtmfTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_SIL_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_DACCM_S; | |
| break; | |
| case ZCC_DISCN_E: | |
| //zCc_ClearDigits(); | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| return; | |
| default://Ö»»áÊÇslave0£¬²»¿ÉÄÜÓëdsciµÄcid³åÍ» | |
| break; | |
| } | |
| } | |
| VOID zCc_SDaccmState(UINT8 slave) | |
| { | |
| 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]); | |
| UINT8 ret = 0; | |
| UINT8 tmpslave = 0; | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_DTMF_E: | |
| sc_timer_delete(ZCCAPP_TIMER_DTMF_DETECT); | |
| ret = zCc_DigitsMatch(); | |
| break; | |
| case ZCC_DISCN_E: | |
| zCc_ClearDigits(); | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| return; | |
| case ZCC_CIDCW_E: | |
| case ZCC_SINVITE_E://ÒÔdsciµÄcidΪ׼£¬ÖØÐ¸ømoµÄºô½Ð·ÖÅäidle cid | |
| tmpslave = zCc_GetSpecSlave(ZCC_S_IDLE_S); | |
| if (0 == tmpslave ) | |
| { | |
| return; | |
| } | |
| g_Cc_CallDetail.slaveObj[tmpslave] = g_Cc_CallDetail.slaveObj[slave]; | |
| zCc_InitSlaveObj(slave); | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M; | |
| g_Cc_CallDetail.slaveObj[slave].state = g_Cc_CallDetail.resourceReady?ZCC_S_TRYING_S:ZCC_S_WAIT_RESOURCE_S; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDaccmState: reject mtcall\n",__FUNCTION__, slave); | |
| return; | |
| default: | |
| return; | |
| } | |
| if(ret==ZCC_LOCAL_TEST_CALL) | |
| { | |
| SIGNAL_DATA tSig; | |
| if(zCc_talking_count()) | |
| { | |
| zCc_ClearDigits(); | |
| zCc_InitSlaveObj(slave); | |
| return; | |
| } | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| memset(&tSig, 0, sizeof(tSig)); | |
| tSig.signal_type= TONE_SIGNAL; | |
| tSig.tone_type = TONE_CW; | |
| SLIC_Play_Signal(0, 0, &tSig); | |
| zCc_ClearDigits(); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| g_Cc_CallDetail.evt[slave]= ZCC_NO_E; | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SNO_M; | |
| local_test_call_st = LocalTestCallST_Start; | |
| zCc_ShowAllSlaveWithTips("testCall-start"); | |
| return ; | |
| } | |
| zCc_DigitsMatchRltProc(ret); | |
| } | |
| VOID zCc_SDialingState(UINT8 slave) | |
| { | |
| UINT8 tmpslave = 0; | |
| 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]); | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_SRING_E: | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_RINGBACK_S; | |
| break; | |
| case ZCC_SANS_E: | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TALKING_S; | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDialingState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| SLIC_Start_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDialingState: SLIC_Start_PCM <---\n",__FUNCTION__); | |
| break; | |
| case ZCC_DISCN_E: | |
| //zCc_InitSlaveObj(slave); | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M; | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| return; | |
| case ZCC_SDISCN_MO_E: | |
| if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0 && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½ÐÇÒÒѹһúʱ²»·ÅæÒô | |
| { | |
| sc_timer_create(ZCCAPP_TIMER_BUSYTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_BUSYTONE_INTERVAL, | |
| zCcApp_BusyToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDialingState sc_timer_create zCcApp_BusyToneTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S; | |
| g_Cc_CallDetail.slaveObj[slave].confcall = 0; | |
| g_Cc_CallDetail.slaveObj[slave].heldcall = 0; | |
| } | |
| else | |
| { | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| } | |
| return; | |
| case ZCC_SDISCN_MT_E: | |
| zCc_InitSlaveObj(slave);//Ö÷±»½Ð²¢·¢ | |
| //g_Cc_CallDetail.slaveObj[slave].waitDSCI6 = 0; | |
| return; | |
| case ZCC_CIDCW_E: | |
| case ZCC_SINVITE_E://ÒÔdsciµÄcidΪ׼£¬ÖØÐ¸ømoµÄºô½Ð·ÖÅäidle cid | |
| tmpslave = zCc_GetSpecSlave(ZCC_S_IDLE_S); | |
| if (0 == tmpslave ) | |
| { | |
| return; | |
| } | |
| g_Cc_CallDetail.slaveObj[tmpslave] = g_Cc_CallDetail.slaveObj[slave]; | |
| zCc_InitSlaveObj(slave); | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M; | |
| g_Cc_CallDetail.slaveObj[slave].state = g_Cc_CallDetail.resourceReady?ZCC_S_TRYING_S:ZCC_S_WAIT_RESOURCE_S; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SDaccmState: reject mtcall\n",__FUNCTION__, slave); | |
| return; | |
| default: | |
| return; | |
| } | |
| } | |
| VOID zCc_SRingbackState(UINT8 slave) | |
| { | |
| 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]); | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_SANS_E: | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TALKING_S; | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| if(g_Cc_CallDetail.slaveObj[slave].is_callout) | |
| SLIC_PolarityReverse(0, TRUE); | |
| SLIC_Start_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState SLIC_Start_PCM2222\n",__FUNCTION__); | |
| break; | |
| case ZCC_DISCN_E: | |
| //zCc_InitSlaveObj(slave); | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M; | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| return; | |
| case ZCC_SDISCN_MO_E: | |
| if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0 && g_Cc_CallDetail.state == ZCC_M_SEIZE_S)//ÓÐÆäËûºô½Ðʱ²»·ÅæÒô | |
| { | |
| sc_timer_create(ZCCAPP_TIMER_BUSYTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_BUSYTONE_INTERVAL, | |
| zCcApp_BusyToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState sc_timer_create zCcApp_BusyToneTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S; | |
| g_Cc_CallDetail.slaveObj[slave].confcall = 0; | |
| g_Cc_CallDetail.slaveObj[slave].heldcall = 0; | |
| SLIC_Stop_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState SLIC_Stop_PCM\n",__FUNCTION__); | |
| } | |
| else | |
| { | |
| zCc_InitSlaveObj(slave); | |
| if ( 0 == zCc_ActiveCall() && 0 == zCc_HeldCall()) | |
| { | |
| SLIC_Stop_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState SLIC_Stop_PCM\n",__FUNCTION__); | |
| } | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| } | |
| return; | |
| case ZCC_SDISCN_MT_E: | |
| g_Cc_CallDetail.slaveObj[slave].waitDSCI6 = 0; | |
| return; | |
| case ZCC_DTMF_E: // ²¦ºÅ | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDTMF_M;///??? | |
| return; | |
| case ZCC_RESOURCE_READY_E: | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| SLIC_Start_PCM();//×ÊÔ´ÒÑ·ÖÅä£¬Íø²à·ÅÒô | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_SRingbackState SLIC_Start_PCM\n",__FUNCTION__); | |
| return; | |
| default: | |
| return; | |
| } | |
| } | |
| VOID zCc_STalkingState(UINT8 slave) | |
| { | |
| 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]); | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_DISCN_E: | |
| //zCc_InitSlaveObj(slave); | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M; | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| return; | |
| case ZCC_SDISCN_MO_E: | |
| case ZCC_SDISCN_MT_E: | |
| //zCc_InitSlaveObj(slave); | |
| if (zCc_CallCount() >= 2 || g_Cc_CallDetail.state == ZCC_M_RELEASE_S)//»¹Ê£¶àÓÚһ·ºô½Ð | |
| { | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| break; | |
| } | |
| if (g_Cc_CallDetail.slaveObj[0].tone != ZCC_TONE_OFF_A) | |
| { | |
| zCc_InitSlaveObj(0); | |
| } | |
| if (1 == zCc_BusyToneAllowed() && g_Cc_CallDetail.slaveObj[slave].waitDSCI6 == 0)//ÓÐÆäËûºô½Ðʱ²»·ÅæÒô | |
| { | |
| sc_timer_create(ZCCAPP_TIMER_BUSYTONE_DETECT, | |
| 0, | |
| ZCCAPP_TIMER_BUSYTONE_INTERVAL, | |
| zCcApp_BusyToneTimer, | |
| NULL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STalkingState sc_timer_create zCcApp_BusyToneTimer\n",__FUNCTION__); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_BSY_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_BSYT_S; | |
| g_Cc_CallDetail.slaveObj[slave].confcall = 0; | |
| g_Cc_CallDetail.slaveObj[slave].heldcall = 0; | |
| } | |
| else | |
| { | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| } | |
| return; | |
| case ZCC_DTMF_E: // ²¦ºÅ. µ÷ÕûÒôÁ¿µÄ´¦Àí´ýÔö¼Ó | |
| if (g_Cc_CallDetail.slaveObj[slave].heldcall == 0) | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDTMF_M;///??? | |
| } | |
| return; | |
| default: | |
| return; | |
| } | |
| } | |
| VOID zCc_SWaitResourceState(UINT8 slave) | |
| { | |
| 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]); | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_RESOURCE_READY_E: | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TRYING_S; | |
| break; | |
| case ZCC_SDISCN_MT_E: | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| return; | |
| default: | |
| return; | |
| } | |
| } | |
| VOID zCc_STryingState(UINT8 slave) | |
| { | |
| 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]); | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_CNCT_E: | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SANS_M; | |
| //lint -fallthrough | |
| case ZCC_SANS_E: //CHLD=2, ÊÕµ½DSCIǨ״̬ | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TALKING_S; | |
| g_Cc_CallDetail.ringCid = 0; | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STryingState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| SLIC_Start_PCM(); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STryingState SLIC_Start_PCM\n",__FUNCTION__); | |
| break; | |
| case ZCC_SDISCN_MT_E: | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| return; | |
| case ZCC_DISCN_E://trying ̬ÊÕµ½¹Ò»úÏûÏ¢£¬Ö»ÄÜÊÇÕª»ú̬À´µç(²»°üÀ¨ºô½ÐµÈ´ý)µÄ³¡¾° | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| SLIC_Stop_Signal(0, TONE_SIGNAL); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_STryingState: SLIC_Stop_Signal <---\n",__FUNCTION__); | |
| g_Cc_CallDetail.lastTone = ZCC_TONE_OFF_A; | |
| if (1 == zCc_CallCount() && (zCc_GetDiscSlave(ZCC_SDISCN_M) == 0)// Õª»ú̬À´µçʱ¹Ò»ú£¬Èç¹ûµ±Ç°Ö»ÓÐһ·ºô½Ð£¬»°»úתÈëÕñÁå | |
| ||(2 == zCc_CallCount() | |
| && (0 != zCc_GetSpecSlave(ZCC_S_DACCM_S) | |
| ||0 != zCc_GetSpecSlave(ZCC_S_BSYT_S) | |
| ||0 != zCc_GetSpecSlave(ZCC_S_TKYT_S) | |
| ||0 != zCc_GetSpecSlave(ZCC_S_SIL_S))))//Õª»úºó£¬À´µç£¬ÔÙ²¦ºÅ£¬¹Ò»ú£¬Ò²ÐèÒªÕñÁå | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M; | |
| } | |
| else | |
| { | |
| //zCc_InitSlaveObj(slave); | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_OFF_A; | |
| g_Cc_CallDetail.ringCid = 0; | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SDISCN_M; | |
| } | |
| return; | |
| default: | |
| return; | |
| } | |
| } | |
| VOID zCc_SBsyToneState(UINT8 slave) | |
| { | |
| 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]); | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_DISCN_E: | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| return; | |
| case ZCC_CIDCW_E: | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_CIDCW_A; | |
| //lint -fallthrough | |
| case ZCC_SINVITE_E: | |
| if ((0 != zCc_GetDialingSlave(1)) || (0 != zCc_GetSpecSlave(ZCC_S_RINGBACK_S)))//ÓÐÒѾÏ·¢atd µÄºô½Ðʱ¾Ü¾øÐÂÀ´µç | |
| { | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| g_Cc_CallDetail.evt[slave] = ZCC_DISCN_E; | |
| return; | |
| } | |
| g_Cc_CallDetail.ringCid = slave; | |
| if(g_Cc_CallDetail.evt[slave]==ZCC_CIDCW_E) | |
| g_Cc_CallDetail.slaveObj[slave].is_cidcw = TRUE; | |
| else | |
| g_Cc_CallDetail.slaveObj[slave].is_cidcw = FALSE; | |
| if (g_Cc_CallDetail.resourceReady == 1) | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TRYING_S; | |
| } | |
| else | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_WAIT_RESOURCE_S; | |
| } | |
| break; | |
| default: | |
| return; | |
| } | |
| } | |
| VOID zCc_STkytState(UINT8 slave) | |
| { | |
| 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]); | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_DISCN_E: | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| return; | |
| case ZCC_CIDCW_E: | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_CIDCW_A; | |
| //lint -fallthrough | |
| case ZCC_SINVITE_E: | |
| if ((0 != zCc_GetDialingSlave(1)) || (0 != zCc_GetSpecSlave(ZCC_S_RINGBACK_S)))//ÓÐÒѾÏ·¢atd µÄºô½Ðʱ¾Ü¾øÐÂÀ´µç | |
| { | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| g_Cc_CallDetail.evt[slave] = ZCC_DISCN_E; | |
| return; | |
| } | |
| g_Cc_CallDetail.ringCid = slave; | |
| if(g_Cc_CallDetail.evt[slave]==ZCC_CIDCW_E) | |
| g_Cc_CallDetail.slaveObj[slave].is_cidcw = TRUE; | |
| else | |
| g_Cc_CallDetail.slaveObj[slave].is_cidcw = FALSE; | |
| if (g_Cc_CallDetail.resourceReady == 1) | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TRYING_S; | |
| } | |
| else | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_WAIT_RESOURCE_S; | |
| } | |
| break; | |
| default: | |
| return; | |
| } | |
| } | |
| VOID zCc_SSilState(UINT8 slave) | |
| { | |
| 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]); | |
| switch (g_Cc_CallDetail.evt[slave]) | |
| { | |
| case ZCC_DISCN_E: | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| return; | |
| case ZCC_CIDCW_E: | |
| g_Cc_CallDetail.slaveObj[slave].tone = ZCC_TONE_CIDCW_A; | |
| //lint -fallthrough | |
| case ZCC_SINVITE_E: | |
| if ((0 != zCc_GetDialingSlave(1)) || (0 != zCc_GetSpecSlave(ZCC_S_RINGBACK_S)))//ÓÐÒѾÏ·¢atd µÄºô½Ðʱ¾Ü¾øÐÂÀ´µç | |
| { | |
| zCc_InitSlaveObj(slave); | |
| zte_log_append(__FILE__, __LINE__, "zte_ccapp.log","%s zCc_InitSlaveObj: slaveObj[%d] cleared\n",__FUNCTION__, slave); | |
| g_Cc_CallDetail.evt[slave] = ZCC_DISCN_E; | |
| return; | |
| } | |
| g_Cc_CallDetail.ringCid = slave; | |
| if(g_Cc_CallDetail.evt[slave]==ZCC_CIDCW_E) | |
| g_Cc_CallDetail.slaveObj[slave].is_cidcw = TRUE; | |
| else | |
| g_Cc_CallDetail.slaveObj[slave].is_cidcw = FALSE; | |
| if (g_Cc_CallDetail.resourceReady == 1) | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].sMsg = ZCC_SRING_M; | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_TRYING_S; | |
| } | |
| else | |
| { | |
| g_Cc_CallDetail.slaveObj[slave].state = ZCC_S_WAIT_RESOURCE_S; | |
| } | |
| break; | |
| default: | |
| return; | |
| } | |
| } | |