FreeCalypso > hg > tcs211-fcmodem
view g23m/condat/ms/src/aci/ati_bat.c @ 3:513a68a7fc6e
unbusy_targetset.xml hack to rebuild comlib from the source
(the source for comlib has been there all along, but the build system
was set up to use a shipped comlib.lib instead)
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 06:22:18 +0000 |
parents | 509db1a7b7b8 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GSM-PS (6147) | Modul : ATI_SRC_TST +----------------------------------------------------------------------------- | Copyright 2002 Texas Instruments Berlin, AG | All rights reserved. | | This file is confidential and a trade secret of Texas | Instruments Berlin, AG | The receipt of or possession of this file does not convey | any rights to reproduce or disclose its contents or to | manufacture, use, or sell anything it may describe, in | whole, or in part, without the specific written consent of | Texas Instruments Berlin, AG. +----------------------------------------------------------------------------- | Purpose : this source is used for W32 tests +----------------------------------------------------------------------------- */ #include "aci_all.h" /*==== INCLUDES ===================================================*/ #include "line_edit.h" #include "aci_cmh.h" #include "ati_cmd.h" #include "aci_cmd.h" #include "dti.h" /* functionality of the dti library */ #include "cmh_dti.h" #include "aci_lst.h" #include "dti_conn_mng.h" #ifdef UART #include "psa_uart.h" #include "cmh_uart.h" #endif #ifdef FF_PSI #include "psa_psi.h" #include "cmh_psi.h" #endif /*FF_PSI*/ #include "aci_io.h" #include "aci_mem.h" #include "aci.h" #include "ati_io.h" #include "sap_dti.h" #include "ati_int.h" #ifdef UART #include "ati_src_uart.h" #endif #ifdef FF_PSI #include "ati_src_psi.h" #endif /*FF_PSI*/ #ifdef FF_FAX #include "aci_fd.h" #endif #include "aci_bat_cmh.h" #include "typedefs.h" #include "gdd.h" #include "gdd_aci.h" #include "bat.h" #include "bat_ctrl.h" #include "bat_intern.h" #include "cmh_sms.h" #ifdef GPRS #include "gaci_cmh.h" #include "gaci_cmd.h" #endif #include "aci_bat.h" #include "aci_bat_cb.h" #define ATI_BAT_GLOBALS #include "ati_bat.h" #include "cphs.h" #include "aci_cphs.h" #ifdef _SIMULATION_ #include "gdd_aci.h" #endif #define MAX_CEER_DESC_LTH (50) #define MAGIC_EMPTY_APN "\x0ff" #define BAT_BIT_12 0x1000 #define HIGHEST_BAND_SUPPORTED (0x1F) /*==== EXTERNS ==================================================*/ EXTERN CHAR *cmdExtError (T_ACI_EXT_ERR e); EXTERN void psi_InitCmdStruct (T_ACI_DTI_PRC_PSI *cmd_struct); EXTERN void getCeerDesc(USHORT cause, char *desc); EXTERN T_CAP_ID map_dti_cpblty (UBYTE dti_cpblty); EXTERN void rCI_PercentCCCN ( T_ACI_FAC_DIR tDirection, SHORT cId, T_fac_inf *fie ); #ifdef SIM_TOOLKIT EXTERN UBYTE sat[CMD_SRC_MAX]; #endif EXTERN const T_CAP_NAME ati_cap_name[]; EXTERN UBYTE cpmsCallType; LOCAL const SMS_Memory sms_mem [] = { {"ME", SMS_STOR_Me}, {"me", SMS_STOR_Me}, {"SM", SMS_STOR_Sm}, {"sm", SMS_STOR_Sm}, {0,0} }; /*==== TYPES ======================================================*/ typedef struct { int (*fptr)(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p); /* BAT Response wrapper func */ } BATResponse; /*==== VARIABLES ==================================================*/ LOCAL BOOL cops_flag=FALSE; LOCAL BOOL CLCC_flag=FALSE; LOCAL CHAR *clan_buf=NULL; #ifdef FF_ATI #define RSP_ATI(rspFoo) {Resp_##rspFoo} #else #define RSP_ATI(rspFoo) {0} #endif #ifdef FAX_AND_DATA #define RSP_FAD(rspFoo) {Resp_##rspFoo} #else #define RSP_FAD(rspFoo) {0} #endif #ifdef SIM_TOOLKIT #define RSP_STK(rspFoo) {Resp_##rspFoo} #else #define RSP_STK(rspFoo) {0} #endif #ifdef GPRS #define RSP_GPR(rspFoo) {Resp_##rspFoo} #else #define RSP_GPR(rspFoo) {0} #endif static BATResponse ResponseTab[] = { RSP_ATI(AtOk), /* BAT_RES_AT_OK = 0x0, */ RSP_ATI(AtConnect), /* BAT_RES_AT_CONNECT = 0x1, */ RSP_ATI(AtNoCarrierFinal), /* BAT_RES_AT_NO_CARRIER_FINAL = 0x2, */ RSP_ATI(PlusCmeError), /* BAT_RES_PLUS_CME_ERROR = 0x3, */ RSP_ATI(PlusCmsError), /* BAT_RES_PLUS_CMS_ERROR = 0x4, */ RSP_ATI(AtBusy), /* BAT_RES_AT_BUSY = 0x5, */ RSP_ATI(AtChannelBusy), /* BAT_RES_AT_CHANNEL_BUSY = 0x6, */ RSP_ATI(AtNoAnswer), /* BAT_RES_AT_NO_ANSWER = 0x7, */ RSP_ATI(PlusExtError), /* BAT_RES_PLUS_EXT_ERROR = 0x8, */ RSP_ATI(qPercentALS), /* BAT_RES_QUE_PERCENT_ALS = 0x9, */ RSP_ATI(tPercentALS), /* BAT_RES_TST_PERCENT_ALS = 0xa, */ RSP_ATI(qPercentATR), /* BAT_RES_QUE_PERCENT_ATR = 0xb, */ RSP_ATI(qPercentBAND), /* BAT_RES_QUE_PERCENT_BAND = 0xc, */ RSP_ATI(tPercentBAND), /* BAT_RES_TST_PERCENT_BAND = 0xd, */ RSP_ATI(qPlusCACM), /* BAT_RES_QUE_PLUS_CACM = 0xe, */ RSP_ATI(qPlusCAMM), /* BAT_RES_QUE_PLUS_CAMM = 0xf, */ RSP_ATI(sPlusCAOC), /* BAT_RES_SET_PLUS_CAOC = 0x10, */ RSP_ATI(sPlusCBC), /* BAT_RES_SET_PLUS_CBC = 0x11, */ RSP_ATI(qPercentCBHZ), /* BAT_RES_QUE_PERCENT_CBHZ = 0x12, */ RSP_ATI(tPercentCBHZ), /* BAT_RES_TST_PERCENT_CBHZ = 0x13, */ RSP_ATI(qPlusCBST), /* BAT_RES_QUE_PLUS_CBST = 0x14, */ RSP_ATI(qPercentCCBS), /* BAT_RES_QUE_PERCENT_CCBS = 0x15, */ RSP_ATI(sPlusCCFC), /* BAT_RES_SET_PLUS_CCFC = 0x16, */ RSP_ATI(qPlusCCLK), /* BAT_RES_QUE_PLUS_CCLK = 0x17, */ RSP_ATI(qPlusCCUG), /* BAT_RES_QUE_PLUS_CCUG = 0x18, */ RSP_ATI(sPlusCCWA), /* BAT_RES_SET_PLUS_CCWA = 0x19, */ RSP_ATI(sPlusCCWA_W), /* BAT_RES_SET_PLUS_CCWA_W = 0x1a, */ RSP_ATI(sPlusCEER), /* BAT_RES_SET_PLUS_CEER = 0x1b, */ RSP_ATI(qPlusCFUN), /* BAT_RES_QUE_PLUS_CFUN = 0x1c, */ RSP_GPR(qPercentCGAATT), /* BAT_RES_QUE_PERCENT_CGAATT = 0x1d, */ RSP_GPR(qPlusCGACT), /* BAT_RES_QUE_PLUS_CGACT = 0x1e, */ RSP_GPR(qPlusCGATT), /* BAT_RES_QUE_PLUS_CGATT = 0x1f, */ RSP_GPR(qPercentCGCLASS), /* BAT_RES_QUE_PERCENT_CGCLASS = 0x20, */ RSP_GPR(qPlusCGCLASS), /* BAT_RES_QUE_PLUS_CGCLASS = 0x21, */ RSP_GPR(qPlusCGDCONT), /* BAT_RES_QUE_PLUS_CGDCONT = 0x22, */ RSP_GPR(sPlusCGPADDR), /* BAT_RES_SET_PLUS_CGPADDR = 0x23, */ RSP_GPR(tPlusCGPADDR), /* BAT_RES_TST_PLUS_CGPADDR = 0x24, */ RSP_GPR(sPercentCGPCO), /* BAT_RES_SET_PERCENT_CGPCO = 0x25, */ RSP_GPR(qPercentCGPPP), /* BAT_RES_QUE_PERCENT_CGPPP = 0x26, */ RSP_GPR(qPlusCGQMIN), /* BAT_RES_QUE_PLUS_CGQMIN = 0x27, */ RSP_GPR(qPlusCGQREQ), /* BAT_RES_QUE_PLUS_CGQREQ = 0x28, */ RSP_GPR(qPercentCGREG), /* BAT_RES_QUE_PERCENT_CGREG = 0x29, */ RSP_GPR(qPlusCGREG), /* BAT_RES_QUE_PLUS_CGREG = 0x2a, */ RSP_GPR(qPlusCGSMS), /* BAT_RES_QUE_PLUS_CGSMS = 0x2b, */ RSP_ATI(sPercentCHPL), /* BAT_RES_SET_PERCENT_CHPL = 0x2c, */ RSP_ATI(sPercentCHPL_W), /* BAT_RES_SET_PERCENT_CHPL_W = 0x2d, */ RSP_ATI(sPlusCIMI), /* BAT_RES_SET_PLUS_CIMI = 0x2e, */ RSP_ATI(qPlusCIND), /* BAT_RES_QUE_PLUS_CIND = 0x2f, */ RSP_ATI(qPlusCLAN), /* BAT_RES_QUE_PLUS_CLAN = 0x30, */ RSP_ATI(tPlusCLAN), /* BAT_RES_TST_PLUS_CLAN = 0x31, */ RSP_ATI(qPlusCLCC), /* BAT_RES_QUE_PLUS_CLCC = 0x32, */ RSP_ATI(sPlusCLCK), /* BAT_RES_SET_PLUS_CLCK = 0x33, */ RSP_ATI(qPlusCLIP), /* BAT_RES_QUE_PLUS_CLIP = 0x34, */ RSP_ATI(qPlusCLIP_W), /* BAT_RES_QUE_PLUS_CLIP_W = 0x35, */ RSP_ATI(qPlusCLIR), /* BAT_RES_QUE_PLUS_CLIR = 0x36, */ RSP_ATI(sPlusCLVL), /* BAT_RES_SET_PLUS_CLVL = 0x37, */ RSP_ATI(qPlusCLVL), /* BAT_RES_QUE_PLUS_CLVL = 0x38, */ RSP_ATI(qPlusCMER), /* BAT_RES_QUE_PLUS_CMER = 0x39, */ RSP_ATI(sPlusCMGC), /* BAT_RES_SET_PLUS_CMGC = 0x3a, */ RSP_ATI(sPlusCMGL), /* BAT_RES_SET_PLUS_CMGL = 0x3b, */ RSP_ATI(sPlusCMGL_W), /* BAT_RES_SET_PLUS_CMGL_W = 0x3c, */ RSP_ATI(sPlusCMGR), /* BAT_RES_SET_PLUS_CMGR = 0x3d, */ RSP_ATI(sPlusCMGR_W), /* BAT_RES_SET_PLUS_CMGR_W = 0x3e, */ RSP_ATI(sPlusCMGS), /* BAT_RES_SET_PLUS_CMGS = 0x3f, */ RSP_ATI(sPlusCMGW), /* BAT_RES_SET_PLUS_CMGW = 0x40, */ RSP_ATI(qPlusCMOD), /* BAT_RES_QUE_PLUS_CMOD = 0x41, */ RSP_ATI(qPlusCMUT), /* BAT_RES_QUE_PLUS_CMUT = 0x42, */ RSP_ATI(qPlusCMUX), /* BAT_RES_QUE_PLUS_CMUX = 0x43, */ RSP_ATI(qPercentCNAP), /* BAT_RES_QUE_PERCENT_CNAP = 0x44, */ RSP_ATI(qPlusCNMI), /* BAT_RES_QUE_PLUS_CNMI = 0x45, */ RSP_ATI(sPlusCNUM), /* BAT_RES_SET_PLUS_CNUM = 0x46, */ RSP_ATI(sPlusCNUM_W), /* BAT_RES_SET_PLUS_CNUM_W = 0x47, */ RSP_ATI(qPlusCOLP), /* BAT_RES_QUE_PLUS_COLP = 0x48, */ RSP_ATI(qPlusCOLP_W), /* BAT_RES_QUE_PLUS_COLP_W = 0x49, */ RSP_ATI(qPercentCOPS), /* BAT_RES_QUE_PERCENT_COPS = 0x4a, */ RSP_ATI(tPercentCOPS), /* BAT_RES_TST_PERCENT_COPS = 0x4b, */ RSP_ATI(qPlusCOPS), /* BAT_RES_QUE_PLUS_COPS = 0x4c, */ RSP_ATI(tPlusCOPS), /* BAT_RES_TST_PLUS_COPS = 0x4d, */ RSP_ATI(qPercentCOPS_W), /* BAT_RES_QUE_PERCENT_COPS_W = 0x4e, */ RSP_ATI(tPercentCOPS_W), /* BAT_RES_TST_PERCENT_COPS_W = 0x4f, */ RSP_ATI(sPercentCPALS), /* BAT_RES_SET_PERCENT_CPALS = 0x50, */ RSP_ATI(qPercentCPALS), /* BAT_RES_QUE_PERCENT_CPALS = 0x51, */ RSP_ATI(sPercentCPALS_W), /* BAT_RES_SET_PERCENT_CPALS_W = 0x52, */ RSP_ATI(qPercentCPALS_W), /* BAT_RES_QUE_PERCENT_CPALS_W = 0x53, */ RSP_ATI(sPlusCPAS), /* BAT_RES_SET_PLUS_CPAS = 0x54, */ RSP_ATI(sPlusCPBF), /* BAT_RES_SET_PLUS_CPBF = 0x55, */ RSP_ATI(tPlusCPBF), /* BAT_RES_TST_PLUS_CPBF = 0x56, */ RSP_ATI(sPlusCPBF_W), /* BAT_RES_SET_PLUS_CPBF_W = 0x57, */ RSP_ATI(tPlusCPBF_W), /* BAT_RES_TST_PLUS_CPBF_W = 0x58, */ RSP_ATI(sPlusCPBR), /* BAT_RES_SET_PLUS_CPBR = 0x59, */ RSP_ATI(tPlusCPBR), /* BAT_RES_TST_PLUS_CPBR = 0x5a, */ RSP_ATI(sPlusCPBR_W), /* BAT_RES_SET_PLUS_CPBR_W = 0x5b, */ RSP_ATI(tPlusCPBR_W), /* BAT_RES_TST_PLUS_CPBR_W = 0x5c, */ RSP_ATI(qPercentCPBS), /* BAT_RES_QUE_PERCENT_CPBS = 0x5d, */ RSP_ATI(qPlusCPBS), /* BAT_RES_QUE_PLUS_CPBS = 0x5e, */ RSP_ATI(tPlusCPBW), /* BAT_RES_TST_PLUS_CPBW = 0x5f, */ RSP_ATI(tPlusCPBW_W), /* BAT_RES_TST_PLUS_CPBW_W = 0x60, */ RSP_ATI(sPercentCPCFU), /* BAT_RES_SET_PERCENT_CPCFU = 0x61, */ RSP_ATI(qPercentCPHS), /* BAT_RES_QUE_PERCENT_CPHS = 0x62, */ RSP_ATI(qPlusCPIN), /* BAT_RES_QUE_PLUS_CPIN = 0x63, */ RSP_ATI(qPercentCPINF), /* BAT_RES_QUE_PERCENT_CPINF = 0x64, */ RSP_ATI(sPercentCPMB), /* BAT_RES_SET_PERCENT_CPMB = 0x65, */ RSP_ATI(qPercentCPMB), /* BAT_RES_QUE_PERCENT_CPMB = 0x66, */ RSP_ATI(tPercentCPMBW), /* BAT_RES_TST_PERCENT_CPMBW = 0x67, */ RSP_ATI(tPercentCPMBW_W), /* BAT_RES_TST_PERCENT_CPMBW_W = 0x68, */ RSP_ATI(sPercentCPMB_W), /* BAT_RES_SET_PERCENT_CPMB_W = 0x69, */ RSP_ATI(sPlusCPMS), /* BAT_RES_SET_PLUS_CPMS = 0x6a, */ RSP_ATI(qPlusCPMS), /* BAT_RES_QUE_PLUS_CPMS = 0x6b, */ RSP_ATI(sPercentCPNUMS), /* BAT_RES_SET_PERCENT_CPNUMS = 0x6c, */ RSP_ATI(tPercentCPNUMS), /* BAT_RES_TST_PERCENT_CPNUMS = 0x6d, */ RSP_ATI(sPercentCPNUMS_W), /* BAT_RES_SET_PERCENT_CPNUMS_W = 0x6e, */ RSP_ATI(tPercentCPNUMS_W), /* BAT_RES_TST_PERCENT_CPNUMS_W = 0x6f, */ RSP_ATI(qPlusCPOL), /* BAT_RES_QUE_PLUS_CPOL = 0x70, */ RSP_ATI(tPlusCPOL), /* BAT_RES_TST_PLUS_CPOL = 0x71, */ RSP_ATI(qPlusCPOL_W), /* BAT_RES_QUE_PLUS_CPOL_W = 0x72, */ RSP_ATI(tPlusCPOL_W), /* BAT_RES_TST_PLUS_CPOL_W = 0x73, */ RSP_ATI(qPercentCPOPN), /* BAT_RES_QUE_PERCENT_CPOPN = 0x74, */ RSP_ATI(qPercentCPRSM), /* BAT_RES_QUE_PERCENT_CPRSM = 0x75, */ RSP_ATI(qPlusCPUC), /* BAT_RES_QUE_PLUS_CPUC = 0x76, */ RSP_ATI(qPlusCPUC_W), /* BAT_RES_QUE_PLUS_CPUC_W = 0x77, */ RSP_ATI(sPercentCPVWI), /* BAT_RES_SET_PERCENT_CPVWI = 0x78, */ RSP_ATI(qPercentCREG), /* BAT_RES_QUE_PERCENT_CREG = 0x79, */ RSP_ATI(tPlusCRES), /* BAT_RES_TST_PLUS_CRES = 0x7a, */ RSP_ATI(qPlusCRLP), /* BAT_RES_QUE_PLUS_CRLP = 0x7b, */ RSP_ATI(sPlusCRSM), /* BAT_RES_SET_PLUS_CRSM = 0x7c, */ RSP_ATI(tPlusCSAS), /* BAT_RES_TST_PLUS_CSAS = 0x7d, */ RSP_ATI(qPlusCSCA), /* BAT_RES_QUE_PLUS_CSCA = 0x7e, */ RSP_ATI(qPlusCSCB), /* BAT_RES_QUE_PLUS_CSCB = 0x7f, */ RSP_ATI(qPlusCSCS), /* BAT_RES_QUE_PLUS_CSCS = 0x80, */ RSP_ATI(sPlusCSIM), /* BAT_RES_SET_PLUS_CSIM = 0x81, */ RSP_ATI(qPlusCSMS), /* BAT_RES_QUE_PLUS_CSMS = 0x82, */ RSP_ATI(qPlusCSNS), /* BAT_RES_QUE_PLUS_CSNS = 0x83, */ RSP_ATI(qPercentCSQ), /* BAT_RES_QUE_PERCENT_CSQ = 0x84, */ RSP_ATI(sPlusCSQ), /* BAT_RES_SET_PLUS_CSQ = 0x85, */ RSP_ATI(qPlusCSTA), /* BAT_RES_QUE_PLUS_CSTA = 0x86, */ RSP_ATI(qPlusCSVM), /* BAT_RES_QUE_PLUS_CSVM = 0x87, */ RSP_ATI(qPercentCTTY), /* BAT_RES_QUE_PERCENT_CTTY = 0x88, */ RSP_ATI(qPlusCTZU), /* BAT_RES_QUE_PLUS_CTZU = 0x89, */ RSP_ATI(qPercentCUST), /* BAT_RES_QUE_PERCENT_CUST = 0x8a, */ RSP_ATI(qPercentDATA), /* BAT_RES_QUE_PERCENT_DATA = 0x8b, */ RSP_ATI(sPercentDINF), /* BAT_RES_SET_PERCENT_DINF = 0x8c, */ RSP_FAD(qPlusDS), /* BAT_RES_QUE_PLUS_DS = 0x8d, */ RSP_FAD(qPlusFAP), /* BAT_RES_QUE_PLUS_FAP = 0x8e, */ RSP_FAD(qPlusFBO), /* BAT_RES_QUE_PLUS_FBO = 0x8f, */ RSP_FAD(qPlusFBS), /* BAT_RES_QUE_PLUS_FBS = 0x90, */ RSP_FAD(qPlusFBU), /* BAT_RES_QUE_PLUS_FBU = 0x91, */ RSP_FAD(qPlusFCC), /* BAT_RES_QUE_PLUS_FCC = 0x92, */ RSP_FAD(qPlusFCLASS), /* BAT_RES_QUE_PLUS_FCLASS = 0x93, */ RSP_FAD(qPlusFCQ), /* BAT_RES_QUE_PLUS_FCQ = 0x94, */ RSP_FAD(qPlusFCR), /* BAT_RES_QUE_PLUS_FCR = 0x95, */ RSP_FAD(qPlusFCS), /* BAT_RES_QUE_PLUS_FCS = 0x96, */ RSP_FAD(qPlusFCT), /* BAT_RES_QUE_PLUS_FCT = 0x97, */ RSP_FAD(qPlusFEA), /* BAT_RES_QUE_PLUS_FEA = 0x98, */ RSP_FAD(qPlusFFC), /* BAT_RES_QUE_PLUS_FFC = 0x99, */ RSP_FAD(qPlusFHS), /* BAT_RES_QUE_PLUS_FHS = 0x9a, */ RSP_FAD(qPlusFIE), /* BAT_RES_QUE_PLUS_FIE = 0x9b, */ RSP_FAD(qPlusFIS), /* BAT_RES_QUE_PLUS_FIS = 0x9c, */ RSP_FAD(qPlusFIT), /* BAT_RES_QUE_PLUS_FIT = 0x9d, */ RSP_FAD(qPlusFLI), /* BAT_RES_QUE_PLUS_FLI = 0x9e, */ RSP_FAD(qPlusFLO), /* BAT_RES_QUE_PLUS_FLO = 0x9f, */ RSP_FAD(qPlusFLP), /* BAT_RES_QUE_PLUS_FLP = 0xa0, */ RSP_FAD(qPlusFMS), /* BAT_RES_QUE_PLUS_FMS = 0xa1, */ RSP_FAD(qPlusFNS), /* BAT_RES_QUE_PLUS_FNS = 0xa2, */ RSP_FAD(qPlusFPA), /* BAT_RES_QUE_PLUS_FPA = 0xa3, */ RSP_FAD(qPlusFPI), /* BAT_RES_QUE_PLUS_FPI = 0xa4, */ RSP_FAD(qPlusFPS), /* BAT_RES_QUE_PLUS_FPS = 0xa5, */ RSP_FAD(qPlusFPW), /* BAT_RES_QUE_PLUS_FPW = 0xa6, */ RSP_FAD(qPlusFRQ), /* BAT_RES_QUE_PLUS_FRQ = 0xa7, */ RSP_FAD(qPlusFSA), /* BAT_RES_QUE_PLUS_FSA = 0xa8, */ RSP_FAD(qPlusFSP), /* BAT_RES_QUE_PLUS_FSP = 0xa9, */ RSP_ATI(qPlusICF), /* BAT_RES_QUE_PLUS_ICF = 0xaa, */ RSP_ATI(qPlusIFC), /* BAT_RES_QUE_PLUS_IFC = 0xab, */ RSP_ATI(qPercentIMEI), /* BAT_RES_QUE_PERCENT_IMEI = 0xac, */ RSP_ATI(qPlusIPR), /* BAT_RES_QUE_PLUS_IPR = 0xad, */ RSP_ATI(qPercentPBCF), /* BAT_RES_QUE_PERCENT_PBCF = 0xae, */ RSP_ATI(qPercentPPP), /* BAT_RES_QUE_PERCENT_PPP = 0xaf, */ RSP_ATI(qPercentPVRF), /* BAT_RES_QUE_PERCENT_PVRF = 0xb0, */ RSP_ATI(qPercentRDL), /* BAT_RES_QUE_PERCENT_RDL = 0xb1, */ RSP_ATI(qPercentRDLB), /* BAT_RES_QUE_PERCENT_RDLB = 0xb2, */ RSP_STK(qPercentSATC), /* BAT_RES_QUE_PERCENT_SATC = 0xb3, */ RSP_STK(qPercentSATCC), /* BAT_RES_QUE_PERCENT_SATCC = 0xb4, */ RSP_STK(sPercentSATE), /* BAT_RES_SET_PERCENT_SATE = 0xb5, */ RSP_ATI(qPlusWS46), /* BAT_RES_QUE_PLUS_WS46 = 0xb6, */ RSP_ATI(qPlusCDIP), /* BAT_RES_QUE_PLUS_CDIP = 0xb7, */ RSP_ATI(sPercentCMGR), /* BAT_RES_SET_PERCENT_CMGR = 0xb8 ,*/ RSP_ATI(sPercentCMGL), /* BAT_RES_SET_PERCENT_CMGL = 0xb9, */ RSP_ATI(sPlusCGMI), /*BAT_RES_SET_PLUS_CGMI = 0xba, */ RSP_ATI(sPlusCGMM), /*BAT_RES_SET_PLUS_CGMM = 0xbb, */ RSP_ATI(sPlusCGMR), /*BAT_RES_SET_PLUS_CGMR = 0xbc, */ RSP_ATI(sPlusCGSN) /*BAT_RES_SET_PLUS_CGSN = 0xbd, */ }; static BATResponse UnsResponseTab[] = { RSP_ATI(uAtBusy), /* BAT_RES_UNS_AT_BUSY = 0x1000, */ RSP_ATI(uAtNoAnswer), /* BAT_RES_UNS_AT_NO_ANSWER = 0x1001, */ RSP_ATI(uPlusCBM), /* BAT_RES_UNS_PLUS_CBM = 0x1002, */ RSP_ATI(uPlusCBMI), /* BAT_RES_UNS_PLUS_CBMI = 0x1003, */ RSP_ATI(uPercentCCBS), /* BAT_RES_UNS_PERCENT_CCBS = 0x1004, */ RSP_ATI(uPlusCCCM), /* BAT_RES_UNS_PLUS_CCCM = 0x1005, */ RSP_ATI(uPercentCCCN), /* BAT_RES_UNS_PERCENT_CCCN = 0x1006, */ RSP_ATI(uPlusCCWA), /* BAT_RES_UNS_PLUS_CCWA = 0x1007, */ RSP_ATI(uPlusCCWA_W), /* BAT_RES_UNS_PLUS_CCWA_W = 0x1008, */ RSP_ATI(uPlusCCWE), /* BAT_RES_UNS_PLUS_CCWE = 0x1009, */ RSP_ATI(uPlusCDIP), /* BAT_RES_UNS_PLUS_CDIP = 0x100a, */ RSP_ATI(uPlusCDS), /* BAT_RES_UNS_PLUS_CDS = 0x100b, */ RSP_ATI(uPlusCCWV), /* BAT_RES_UNS_PLUS_CCWV = 0x100c, */ RSP_GPR(uPercentCGEV), /* BAT_RES_UNS_PERCENT_CGEV = 0x100d, */ RSP_GPR(uPlusCGEV), /* BAT_RES_UNS_PLUS_CGEV = 0x100e, */ RSP_GPR(uPercentCGREG), /* BAT_RES_UNS_PERCENT_CGREG = 0x100f, */ RSP_GPR(uPlusCGREG), /* BAT_RES_UNS_PLUS_CGREG = 0x1010, */ RSP_ATI(uPlusCLAE), /* BAT_RES_UNS_PLUS_CLAE = 0x1011, */ RSP_ATI(uPlusCLAV), /* BAT_RES_UNS_PLUS_CLAV = 0x1012, */ RSP_ATI(uPlusCLIP), /* BAT_RES_UNS_PLUS_CLIP = 0x1013, */ RSP_ATI(uPlusCLIP_W), /* BAT_RES_UNS_PLUS_CLIP_W = 0x1014, */ RSP_ATI(uPlusCMT), /* BAT_RES_UNS_PLUS_CMT = 0x1015, */ RSP_ATI(uPlusCMTI), /* BAT_RES_UNS_PLUS_CMTI = 0x1016, */ RSP_ATI(uPlusCMT_W), /* BAT_RES_UNS_PLUS_CMT_W = 0x1017, */ RSP_ATI(uPercentCNAP), /* BAT_RES_UNS_PERCENT_CNAP = 0x1018, */ RSP_ATI(uPlusCOLP), /* BAT_RES_UNS_PLUS_COLP = 0x1019, */ RSP_ATI(uPlusCOLP_W), /* BAT_RES_UNS_PLUS_COLP_W = 0x101a, */ RSP_ATI(uPercentCPI), /* BAT_RES_UNS_PERCENT_CPI = 0x101b, */ RSP_ATI(uPercentCPI_W), /* BAT_RES_UNS_PERCENT_CPI_W = 0x101c, */ RSP_ATI(uPercentCPRI), /* BAT_RES_UNS_PERCENT_CPRI = 0x101d, */ RSP_ATI(uPercentCPROAM), /* BAT_RES_UNS_PERCENT_CPROAM = 0x101e, */ RSP_ATI(uPercentCPVWI), /* BAT_RES_UNS_PERCENT_CPVWI = 0x101f, */ RSP_ATI(uPlusCR), /* BAT_RES_UNS_PLUS_CR = 0x1020, */ RSP_ATI(uPercentCREG), /* BAT_RES_UNS_PERCENT_CREG = 0x1021, */ RSP_ATI(uPlusCRING), /* BAT_RES_UNS_PLUS_CRING = 0x1022, */ RSP_ATI(uPercentCSQ), /* BAT_RES_UNS_PERCENT_CSQ = 0x1023, */ RSP_ATI(uPlusCSSI), /* BAT_RES_UNS_PLUS_CSSI = 0x1024, */ RSP_ATI(uPercentCSSN), /* BAT_RES_UNS_PERCENT_CSSN = 0x1025, */ RSP_ATI(uPlusCSSU), /* BAT_RES_UNS_PLUS_CSSU = 0x1026, */ RSP_ATI(uPercentCSTAT), /* BAT_RES_UNS_PERCENT_CSTAT = 0x1027, */ RSP_ATI(uPercentCTYI), /* BAT_RES_UNS_PERCENT_CTYI = 0x1028, */ RSP_ATI(uPlusCTZR), /* BAT_RES_UNS_PLUS_CTZR = 0x1029, */ RSP_ATI(uPercentCTZV), /* BAT_RES_UNS_PERCENT_CTZV = 0x102a, */ RSP_ATI(uPlusCTZV), /* BAT_RES_UNS_PLUS_CTZV = 0x102b, */ RSP_ATI(uPercentCTZV_W), /* BAT_RES_UNS_PERCENT_CTZV_W = 0x102c, */ RSP_ATI(uPlusCUSD), /* BAT_RES_UNS_PLUS_CUSD = 0x102d, */ RSP_ATI(uPlusCUSD_W), /* BAT_RES_UNS_PLUS_CUSD_W = 0x102e, */ RSP_ATI(uAtNoCarrier), /* BAT_RES_UNS_AT_NO_CARRIER = 0x102f, */ RSP_ATI(uPlusFHS), /* BAT_RES_UNS_PLUS_FHS = 0x1030, */ RSP_ATI(uPlusILRR), /* BAT_RES_UNS_PLUS_ILRR = 0x1031, */ RSP_ATI(uPercentRDL), /* BAT_RES_UNS_PERCENT_RDL = 0x1032, */ RSP_ATI(uPercentRDLB), /* BAT_RES_UNS_PERCENT_RDLB = 0x1033, */ RSP_STK(uPercentSATA), /* BAT_RES_UNS_PERCENT_SATA = 0x1034, */ RSP_STK(uPercentSATI), /* BAT_RES_UNS_PERCENT_SATI = 0x1035, */ RSP_STK(uPercentSATN), /* BAT_RES_UNS_PERCENT_SATN = 0x1036, */ RSP_ATI(uPercentSIMEF), /* BAT_RES_UNS_PERCENT_SIMEF = 0x1037, */ RSP_ATI(uPercentSIMINS), /* BAT_RES_UNS_PERCENT_SIMINS = 0x1038, */ RSP_ATI(uPercentSIMREM), /* BAT_RES_UNS_PERCENT_SIMREM = 0x1039, */ RSP_ATI(uPercentSNCNT) /* BAT_RES_UNS_PERCENT_SNCNT = 0x103a, */ }; void ati_bat_inst_sig_cb(T_BAT_signal signal); #ifdef _SIMULATION_ int ati_bat_resp_cb_simulation (T_BAT_client client, T_BAT_cmd_response *response); int ati_bat_uns_resp_cb_simulation (T_BAT_client client, T_BAT_cmd_response *response); LOCAL BOOL asynch_resp = FALSE; #endif int ati_bat_resp_cb (T_BAT_client client, T_BAT_cmd_response *response); int ati_bat_uns_resp_cb(T_BAT_client client, T_BAT_cmd_response *response); void ati_bat_sig_cb (T_BAT_client client, T_BAT_signal signal); /* ========================================================================================== */ /* Get PSI Source Info */ void Get_psi_src_info(T_ACI_DTI_PRC_PSI **psi_src_info) { /* Use the function 'find_element()' to search for the PSI source that has the correct command source ID. */ *psi_src_info=find_element(psi_src_params,srcId_cb,cmhPSItest_srcId); } /* Some ATI maintenance is needed for BAT */ void Perform_ati_bat_maint(UBYTE srcId) { T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, srcId, search_ati_src_id); src_params->curAtCmd = AT_CMD_NONE; ledit_ctrl (srcId,LEDIT_CTRL_CMPL, NULL); src_params->cmd_state = CMD_IDLE; cmdErrStr = NULL; #ifdef _SIMULATION_ asynch_resp = FALSE; #endif } /* BAT instance_signal_cb */ void ati_bat_inst_sig_cb(T_BAT_signal signal) { TRACE_FUNCTION ("ati_bat_inst_sig_cb ()"); /* Result tells application if instance is successfully created/deleted */ } #ifdef _SIMULATION_ /* this function is called by sig_dti_data_received_ind() */ void ati_bat_response_simulation(T_ACI_BAT_RES *res) { TRACE_EVENT("ati_bat_response_simulation(): simulation of asynchronous response"); if (BITFIELD_CHECK(res->response->ctrl_response, BAT_BIT_12) || /* 0x1000 */ res->response->ctrl_response EQ BAT_RES_UNS_PLUS_CRING || res->response->ctrl_response EQ BAT_RES_UNS_PLUS_CCWV) { ati_bat_uns_resp_cb(res->client, res->response); } else { ati_bat_resp_cb(res->client, res->response); } if (asynch_resp EQ FALSE) { res->response = NULL; } } int ati_bat_resp_cb_simulation (T_BAT_client client, T_BAT_cmd_response *response) { T_ACI_DTI_PRC_PSI *psi_src_info=find_element(psi_src_params,srcId_cb,cmhPSItest_srcId); psi_src_info->res.client = client; psi_src_info->res.response = response; if (psi_src_info->bat_client[psi_src_info->active_client].curCmd EQ (T_BAT_ctrl_params)-1) { ati_bat_resp_cb(client,response); } else { ati_bat_resp_cb(client,response); // TRACE_EVENT("ati_bat_resp_cb_simulation(): prepare simulation of asynchronous response"); // asynch_resp = TRUE; } return 0; } int ati_bat_uns_resp_cb_simulation (T_BAT_client client, T_BAT_cmd_response *response) { T_ACI_DTI_PRC_PSI *psi_src_info=find_element(psi_src_params,srcId_cb,cmhPSItest_srcId); psi_src_info->res.client = client; psi_src_info->res.response = response; if (psi_src_info->bat_client[psi_src_info->active_client].curCmd EQ (T_BAT_ctrl_params)-1) { ati_bat_uns_resp_cb(client,response); } else { ati_bat_uns_resp_cb(client,response); // TRACE_EVENT("ati_bat_uns_resp_cb_simulation(): prepare simulation of asynchronous response"); // asynch_resp = TRUE; } return 0; } #endif _SIMULATION_ /* BAT unsolicited_result_cb */ int ati_bat_uns_resp_cb (T_BAT_client client, T_BAT_cmd_response *response) { int ret = 0; T_ACI_DTI_PRC_PSI *psi_src_info; U16 index = 0; TRACE_FUNCTION ("ati_bat_uns_resp_cb ()"); Get_psi_src_info(&psi_src_info); if (psi_src_info) { if (response) { T_BAT_cmd_response *resp_p = response; if (resp_p->ctrl_response EQ BAT_RES_UNS_PLUS_CRING || /* Cases where Ids < 0x1000 */ resp_p->ctrl_response EQ BAT_RES_UNS_PLUS_CCWV) { index = (U16)resp_p->ctrl_response; if (ResponseTab[index].fptr) { ret = ResponseTab[index].fptr(psi_src_info, resp_p); } else { ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow); } } else /* Cases where Ids >= 0x1000 */ { index = ((U16)resp_p->ctrl_response - BAT_BIT_12); if (UnsResponseTab[index].fptr) { ret = UnsResponseTab[index].fptr(psi_src_info, resp_p); } else { ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow); } } } #ifdef _SIMULATION_ if (asynch_resp EQ FALSE) #endif Perform_ati_bat_maint(psi_src_info->srcId); } return 0; } /* BAT response_cb */ int ati_bat_resp_cb (T_BAT_client client, T_BAT_cmd_response *response) { int ret = 0; T_ACI_DTI_PRC_PSI *psi_src_info; U16 index; TRACE_FUNCTION ("ati_bat_resp_cb()"); Get_psi_src_info(&psi_src_info); if (psi_src_info) { /* Check if response is complete */ if (response) { T_BAT_cmd_response *resp_p = response; index = (U16)resp_p->ctrl_response; TRACE_EVENT_P1("ati_bat_resp_cb(): resp_p->ctrl_response = 0x%04X", resp_p->ctrl_response); if (ResponseTab[index].fptr) { ret = ResponseTab[index].fptr(psi_src_info, resp_p); } else { ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow); } } #ifdef _SIMULATION_ if (asynch_resp EQ FALSE) #endif Perform_ati_bat_maint(psi_src_info->srcId); } return 0; /* Ok for now */ } /* BAT signal_cb */ void ati_bat_sig_cb(T_BAT_client client, T_BAT_signal signal) { TRACE_FUNCTION ("ati_bat_sig_cb ()"); } GLOBAL void ati_bat_lib_init (U8 src_id) { U8 num_instances = ATI_BAT_MAX_INSTANCES; U8 *mem; /* allocate memory for maintaining the instances */ ACI_MALLOC(mem, num_instances * BAT_INSTANCE_HEADER_SIZE); if (0 != bat_init (mem, num_instances)) { TRACE_ERROR("bat_init failure"); return; } ati_bat_globs.bat_lib_initialized = TRUE; if (GDD_OK != gdd_aci_func.gdd_init(src_id, 0, CMD_SRC_MAX)) { TRACE_ERROR("gdd_aci_init failure"); return; } } /* because the ATI src_id is the only identifier, we create for every ATI source a BAT Lib instance, but with only one client */ GLOBAL void ati_bat_lib_new (U8 src_id, T_ATI_SRC_TYPE src_type) { T_GDD_SIGNAL signal = {GDD_SIGTYPE_SEND_BUF_AVAILABLE}; U8 num_clients = ATI_BAT_MAX_CLIENTS; U8 *mem; T_ACI_DTI_PRC_PSI *cmd_struct; if (src_type NEQ ATI_SRC_TYPE_PSI) { /* because BAT has been designed for PSI connections only, we must fake one. in the real life psi_new_source() creates such a thing */ ACI_MALLOC(cmd_struct, sizeof(T_ACI_DTI_PRC_PSI)); psi_InitCmdStruct(cmd_struct); cmd_struct->srcId = src_id; cmd_struct->devId = 0xBACDBACD; /* to distinguish from DIO_DATA_PKT used in acibat_test suite */ cmd_struct->dlci = 0; if (insert_list (psi_src_params, cmd_struct) NEQ TRUE) { TRACE_ERROR ("ati_bat_open_client(): failed to create PSI source"); return; } } aci_cmd_src_mode_set(src_id,CMD_MODE_BAT); ati_bat_globs.instance[src_id].src_type = src_type; gdd_aci_remember_src_id(src_id); /* allocate memory for maintaining the clients in the instance */ ACI_MALLOC(mem, BAT_INSTANCE_SIZE + (num_clients * BAT_CLIENT_SIZE)); if ((bat_new(&(ati_bat_globs.instance[src_id].inst_hndl), mem, num_clients, &(ati_bat_globs.config), ati_bat_inst_sig_cb)) NEQ 0) { TRACE_ERROR("bat_new failure"); return; } /* simulate an asynch response from GDD to BAT Lib to tell BAT Lib that GDD has an open channel */ signal.sig = GDD_SIGTYPE_SEND_BUF_AVAILABLE; bat_gdd_signal_cb(gdd_aci_get_con_handle(src_id), signal); } GLOBAL void ati_bat_lib_finit (void) { int i = 0; if (ati_bat_globs.bat_lib_initialized) { for (i=0; i<ATI_BAT_MAX_INSTANCES; i++) { if (ati_bat_globs.instance[i].src_type NEQ ATI_SRC_TYPE_UNKNOWN) { if (aci_cmd_src_mode_get(i) EQ CMD_MODE_BAT) { bat_delete(ati_bat_globs.instance[i].inst_hndl); } ati_bat_globs.instance[i].client_id[0]= 0xFF; ati_bat_globs.instance[i].uns_client_id = 0xFF; ati_bat_globs.instance[i].src_type = ATI_SRC_TYPE_UNKNOWN; } } bat_deinit(); ati_bat_globs.bat_lib_initialized = FALSE; } } GLOBAL void ati_bat_open_client (U8 src_id) { T_ACI_DTI_PRC_PSI *src_infos_psi; src_infos_psi = find_element (psi_src_params, src_id, cmhPSItest_srcId); if (src_infos_psi EQ NULL) { TRACE_ERROR ("ati_bat_open_client(): failed to get PSI source"); return; } aci_cmd_src_mode_set(src_id,CMD_MODE_BAT); /* all ATI sources use the same response callback */ if ((bat_open(ati_bat_globs.instance[src_id].inst_hndl, &(ati_bat_globs.instance[src_id].client_id[0]), #ifdef _SIMULATION_ ati_bat_resp_cb_simulation, #else ati_bat_resp_cb, #endif ati_bat_sig_cb)) NEQ 0) { TRACE_ERROR("bat_open failure"); return; } /* all ATI sources use the same unsolicited response callback */ if ((bat_uns_open(ati_bat_globs.instance[src_id].inst_hndl, &(ati_bat_globs.instance[src_id].uns_client_id), #ifdef _SIMULATION_ ati_bat_uns_resp_cb_simulation)) NEQ 0) #else ati_bat_uns_resp_cb)) NEQ 0) #endif { TRACE_ERROR("bat_uns_open failure"); return; } } GLOBAL U16 ati_bat_get_client (U8 src_id) { /* currently we have only one client per instance, else need a mux_src_id */ if (ati_bat_globs.instance[src_id].client_id[0] NEQ 0xFF) { return (ati_bat_globs.instance[src_id].client_id[0]); } TRACE_ERROR("ati_bat_get_client(): no BAT client"); return (0xFF); } GLOBAL void ati_bat_close_client (U8 src_id) { if (ati_bat_globs.bat_lib_initialized) { /* currently we have only one client per instance, else need a mux_src_id */ if (ati_bat_globs.instance[src_id].client_id[0] NEQ 0xFF) { bat_close(ati_bat_globs.instance[src_id].client_id[0]); ati_bat_globs.instance[src_id].client_id[0] = 0xFF; } } } GLOBAL BOOL ati_bat_all_clients_closed (void) { int i,k; for (i=0; i<ATI_BAT_MAX_INSTANCES; i++) { for (k=0; k<ATI_BAT_MAX_CLIENTS; k++) { if (ati_bat_globs.instance[i].client_id[k] NEQ 0xFF) { return (FALSE); } } } return (TRUE); } GLOBAL void ati_bat_reset (void) { int i,k; for (i=0; i<ATI_BAT_MAX_INSTANCES; i++) { ati_bat_globs.instance[i].src_type = ATI_SRC_TYPE_UNKNOWN; ati_bat_globs.instance[i].uns_client_id = 0xFF; for (k=0; k<ATI_BAT_MAX_CLIENTS; k++) { ati_bat_globs.instance[i].client_id[k] = 0xFF; } } ati_bat_globs.bat_lib_initialized = FALSE; ati_bat_globs.config.adapter.gdd_if = gdd_aci_func; ati_bat_globs.config.adapter.cap.dio_cap.mtu_size = 300; /*GDD_DIO_MTU_SIZE*/ ati_bat_globs.config.device = DEVICE_PACKET; ati_bat_globs.config.l2p.protocol_id = L2P_SP_PSI; } /***************************************************************************/ /* Response Function Definitions Start Here */ /***************************************************************************/ int Resp_AtOk (T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_AtOk ()"); /* * If we have been receiving COPS responses, this OK signals * the end of them, so clear the flag. */ cops_flag=FALSE; CLCC_flag=FALSE; if (clan_buf) { io_sendMessage(srcId_cb,g_sa,ATI_NORMAL_OUTPUT); clan_buf=NULL; } #ifdef _SIMULATION_ { T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, src_infos_psi->srcId, search_ati_src_id); T_ACI_AT_CMD cmdId = src_params->curAtCmd; if (ledit_ctrl(src_params->src_id,LEDIT_CTRL_MORE_CMDS, NULL) EQ LEDIT_CMPL) { rCI_OK(cmdId); return 0; } } #endif io_sendConfirm(src_infos_psi->srcId, cmdAtError(atOk), ATI_NORMAL_OUTPUT); Perform_ati_bat_maint(src_infos_psi->srcId); return 0; /* Ok */ } int Resp_AtConnect(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_BS_SPEED speed; T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, src_infos_psi->srcId, search_ati_src_id); TRACE_FUNCTION ("Resp_AtConnect()"); /* * We're in trouble if we don't have 'src_params', as we need * to know the command ID. */ if (src_params==NULL) { TRACE_EVENT("No src_params in CONNECT."); return 1; /* Indicate error */ } /* * rCI_CONNECT() only cares about the speed, not the rate adaption / * modulation type. */ switch(resp_p->response.ptr_at_connect->data_rate) { default: case BAT_AT_CONNECT_RATE_NOT_PRESENT: speed=BS_SPEED_NotPresent; break; case BAT_AT_CONNECT_RATE_300: speed=BS_SPEED_300_V110; break; case BAT_AT_CONNECT_RATE_1200: speed=BS_SPEED_1200_V110; break; case BAT_AT_CONNECT_RATE_2400: speed=BS_SPEED_2400_V110; break; case BAT_AT_CONNECT_RATE_4800: speed=BS_SPEED_4800_V110; break; case BAT_AT_CONNECT_RATE_9600: speed=BS_SPEED_9600_V110; break; case BAT_AT_CONNECT_RATE_14400: speed=BS_SPEED_14400_V110; break; case BAT_AT_CONNECT_RATE_19200: speed=BS_SPEED_19200_V110; break; case BAT_AT_CONNECT_RATE_38400: speed=BS_SPEED_38400_V110; break; } /* * BAT does not provide the call ID, the current command or the * flow control flag. rCI_CONNECT() doesn't care about the call ID, * so we can set that to 0. I'm not sure about flow control, setting * it to FALSE seems safest. */ rCI_CONNECT(src_params->curAtCmd,speed,0,FALSE); return 0; /* Ok */ } int Resp_AtNoCarrierFinal(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, src_infos_psi->srcId, search_ati_src_id); TRACE_FUNCTION ("Resp_AtNoCarrierFinal()"); /* * We're in trouble if we don't have 'src_params', as we need * to know the command ID. */ if (src_params==NULL) { TRACE_EVENT("No src_params in NO_CARRIER_FINAL."); return 1; /* Indicate error */ } /* * BAT does not provide the call ID or the current command. * rCI_NO_CARRIER() doesn't care about the call ID, * so we can set that to 0. */ rCI_NO_CARRIER(src_params->curAtCmd,0); return 0; /* Ok */ } int Resp_PlusCmeError(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_PlusCmeError()"); io_sendConfirm(src_infos_psi->srcId, cmdCmeError(resp_p->response.ptr_plus_cme_error->error), ATI_ERROR_OUTPUT); return 0; /* Ok */ } int Resp_PlusCmsError(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_PlusCmsError()"); io_sendConfirm(src_infos_psi->srcId, cmdCmsError(resp_p->response.ptr_plus_cms_error->err), ATI_ERROR_OUTPUT); return 0; /* Ok */ } int Resp_AtBusy(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, src_infos_psi->srcId, search_ati_src_id); TRACE_FUNCTION ("Resp_AtBusy()"); /* * We're in trouble if we don't have 'src_params', as we need * to know the command ID. */ if (src_params==NULL) { TRACE_EVENT("No src_params in BUSY."); return 1; /* Indicate error */ } /* * BAT does not provide the call ID or the current command. * rCI_BUSY() doesn't care about the call ID, * so we can set that to -1 safely. */ rCI_BUSY(src_params->curAtCmd,-1); return 0; /* Ok */ } int Resp_AtNoAnswer(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, src_infos_psi->srcId, search_ati_src_id); TRACE_FUNCTION ("Resp_AtNoAnswer()"); /* * We're in trouble if we don't have 'src_params', as we need * to know the command ID. */ if (src_params==NULL) { TRACE_EVENT("No src_params in NO_ANSWER."); return 1; /* Indicate error */ } /* * BAT does not provide the call ID or the current command. * rCI_NO_ANSWER() doesn't care about the call ID, * so we can set that to -1 safely. */ rCI_NO_ANSWER(src_params->curAtCmd,-1); return 0; /* Ok */ } int Resp_AtChannelBusy(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { } int Resp_uAtNoCarrier(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uAtNoCarrier()"); return 0; /* Ok */ } int Resp_uPlusCRING(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_CRING_MOD mode; T_ACI_CRING_TYP type1; T_ACI_CRING_TYP type2; T_BAT_res_uns_plus_cring *cring; TRACE_FUNCTION ("Resp_uPlusCRING()"); /* * Get a pointer to the CRING structure for convenience. */ cring=resp_p->response.ptr_plus_cring; /* * This relies on T_ACI_CRING_TYP being the same as * T_BAT_cring_type/T_BAT_plus_cring_type2. */ type1=(T_ACI_CRING_TYP)cring->type1; type2=(T_ACI_CRING_TYP)cring->type2; /* * This relies on T_ACI_CRING_MOD being the same as * T_BAT_plus_cring_alt. */ mode=(T_ACI_CRING_MOD)cring->alt; rCI_PlusCRING(mode,type1,type2); return 0; /* Ok */ } int Resp_uPlusCCWV(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCCWV() "); rCI_PlusCCWV((T_ACI_CCWV_CHRG)resp_p->response.ptr_plus_ccwv->bat_dummy ); return 0; /* Ok */ } int Resp_qPercentALS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentALS() "); resp_disp((UBYTE)src_infos_psi->srcId, NULL,"b",resp_p->response.ptr_que_percent_als->mode); return 0; /* Ok */ } int Resp_tPercentALS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *me = "%ALS"; TRACE_FUNCTION ("Resp_tPercentALS() "); if (resp_p->response.ptr_tst_percent_als->mode EQ BAT_P_ALS_MOD_SPEECH) sprintf(g_sa,"%s: (0)", me); if (resp_p->response.ptr_tst_percent_als->mode EQ BAT_P_ALS_MOD_AUX_SPEECH) sprintf(g_sa,"%s: (1)", me); if (resp_p->response.ptr_tst_percent_als->mode EQ (BAT_P_ALS_MOD_SPEECH | BAT_P_ALS_MOD_AUX_SPEECH)) sprintf(g_sa,"%s: (0,1)", me); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentATR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_que_percent_atr *atr; UBYTE i; TRACE_FUNCTION ("Resp_qPercentATR()"); atr=resp_p->response.ptr_que_percent_atr; i=sprintf(g_sa,"%s%d,","%ATR: ",atr->phase); utl_binToHex(atr->atr,atr->c_atr,g_sa+i); io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentBAND(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_que_percent_band band; TRACE_FUNCTION ("Resp_qPercentBAND()"); band= *(resp_p->response.ptr_que_percent_band); if( band.band EQ 0x00 OR band.mode EQ BAND_MODE_Auto ) { sprintf(g_sa, "%s: %d", "%BAND", band.mode); } else { sprintf(g_sa, "%s: %d,%d", "%BAND", band.mode, band.band); } io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPercentBAND(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { UBYTE c_set_bit = 0; USHORT pos = 0; UBYTE i, tested_filter_byte, highest_set_bit_only=0; TRACE_FUNCTION ("Resp_tPercentBAND() "); /* initialization of the string */ pos += sprintf(g_sa, "%s: (0-%d)", "%BAND", resp_p->response.ptr_tst_percent_band->mode); pos += sprintf( g_sa+pos, ",(" ); if(resp_p->response.ptr_tst_percent_band->band EQ 0x00) { /* no particular settings from manufacturer */ pos += sprintf( g_sa+pos, "1-%d)", HIGHEST_BAND_SUPPORTED ); } else { /* search holes between highest bit and lowest bit */ for( i=0; i<8 ; i++ ) { tested_filter_byte = 0x01 << i; if( (resp_p->response.ptr_tst_percent_band->band & tested_filter_byte) ) { highest_set_bit_only = tested_filter_byte; c_set_bit++; } } if(c_set_bit) /* alignment at the end */ { c_set_bit--; } if( highest_set_bit_only EQ (0x01 << c_set_bit) ) { /* there is no hole in the supported values, form 1 to max_value */ pos += sprintf( g_sa+pos, "1-%d)", resp_p->response.ptr_tst_percent_band->band); } else { for(i=1 ; i<=resp_p->response.ptr_tst_percent_band->band; i++) /* bands_bitfield is obviously the highest possible value */ { if( (i & resp_p->response.ptr_tst_percent_band->band) EQ i ) { pos += sprintf( g_sa+pos, "%d,", i); } if(pos>MAX_CMD_LEN-5) /* -5 to have some buffer */ { TRACE_EVENT("output buffer is too short !!!"); break; } } pos--; /* erase last comma */ sprintf( g_sa+pos, ")"); } } io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCACM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { LONG acm = 0L; TRACE_FUNCTION ("Resp_qPlusCACM()"); acm=resp_p->response.ptr_que_plus_cacm->acm; sprintf(g_sa,"+CACM: \"%06X\"", acm); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCAMM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { LONG acmmax = 0L; TRACE_FUNCTION ("Resp_qPlusCAMM()"); acmmax=resp_p->response.ptr_que_plus_camm->acmmax; sprintf (g_sa,"+CAMM: \"%06X\"", acmmax); io_sendMessage ((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPlusCAOC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { LONG ccm = 0L; TRACE_FUNCTION ("Resp_sPlusCAOC() "); ccm=resp_p->response.ptr_set_plus_caoc->ccm; sprintf (g_sa,"+CAOC: \"%06X\"", ccm); io_sendMessage ((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPlusCBC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCBC()"); sprintf(g_sa, "+CBC: %d,%d",resp_p->response.ptr_set_plus_cbc->bsc, resp_p->response.ptr_set_plus_cbc->bcl ); io_sendMessage((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCBHZ(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCBHZ() Not Implemented"); return 0; /* Ok */ } int Resp_tPercentCBHZ(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPercentCBHZ() Not Implemented"); return 0; /* Ok */ } int Resp_qPlusCBST(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCBST()"); resp_disp((UBYTE)src_infos_psi->srcId, NULL,"eee",&resp_p->response.ptr_que_plus_cbst->speed, &resp_p->response.ptr_que_plus_cbst->name,&resp_p->response.ptr_que_plus_cbst->ce); return 0; /* Ok */ } int Resp_qPercentCCBS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_CCBS_IND ind; T_ACI_CCBS_STAT status; T_ACI_CCBS_SET setting; T_BAT_res_que_percent_ccbs *ccbs; TRACE_FUNCTION ("Resp_qPercentCCBS()"); /* * Get a pointer to the CCBS structure for convenience. */ ccbs=resp_p->response.ptr_que_percent_ccbs; /* * This relies on T_ACI_CCBS_IND being identical to * T_BAT_percent_ccbs_ind and T_ACI_CCBS_STAT being identical * to T_BAT_percent_ccbs_stat. */ ind=(T_ACI_CCBS_IND)ccbs->ind; status=(T_ACI_CCBS_STAT)ccbs->stat; /* * The main reason for zeroing this memory is to ensure we * end up with zero-terminated 'number' and 'subaddress' * strings. */ memset(&setting,0,sizeof(T_ACI_CCBS_SET)); setting.idx=(SHORT)ccbs->idx; if ((ccbs->v_number==TRUE) && (ccbs->c_number<MAX_B_SUBSCR_NUM_LEN)) memcpy(setting.number,ccbs->number,ccbs->c_number); setting.type=toa_demerge((SHORT)ccbs->type); if ((ccbs->v_subaddr==TRUE) && (ccbs->c_subaddr<MAX_SUBADDR_LEN)) memcpy(setting.subaddr,ccbs->subaddr,ccbs->c_subaddr); setting.satype=tos_demerge((SHORT)ccbs->satype); /* * This relies on T_ACI_CLASS being identical to T_BAT_bearer_class * and T_ACI_ALRT_PATTERN being identical to T_BAT_percent_ccbs_ptn. */ setting.class_type=(T_ACI_CLASS)ccbs->bearer_class; setting.alrtPtn=(T_ACI_ALRT_PTRN)ccbs->ptn; rCI_PercentCCBS(ind,status,&setting,TRUE); return 0; /* Ok */ } int Resp_sPlusCCFC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_CCFC_SET setting = {0}, *set_p = &setting; TRACE_FUNCTION ("Resp_sPlusCCFC()"); /* Load from BAT response structure before calling rCI_... */ set_p->clsstat.status = (T_ACI_STATUS)resp_p->response.ptr_set_plus_ccfc->status; set_p->clsstat.class_type = (T_ACI_CLASS)resp_p->response.ptr_set_plus_ccfc->bearer_class; if(resp_p->response.ptr_set_plus_ccfc->v_number) { memcpy(set_p->number, (U8 *)resp_p->response.ptr_set_plus_ccfc->number, resp_p->response.ptr_set_plus_ccfc->c_number); } if(resp_p->response.ptr_set_plus_ccfc->type NEQ 0) { set_p->type=toa_demerge(resp_p->response.ptr_set_plus_ccfc->type); } if(resp_p->response.ptr_set_plus_ccfc->v_subaddr) { memcpy(set_p->subaddr, (U8 *)resp_p->response.ptr_set_plus_ccfc->subaddr, resp_p->response.ptr_set_plus_ccfc->c_subaddr); } if(resp_p->response.ptr_set_plus_ccfc->satype NEQ 0) { set_p->satype=tos_demerge(resp_p->response.ptr_set_plus_ccfc->satype); } set_p->time = (SHORT)resp_p->response.ptr_set_plus_ccfc->time; rCI_PlusCCFC(set_p); return 0; /* Ok */ } int Resp_qPlusCCLK(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_que_plus_cclk *cclk; char sign; int tz; TRACE_FUNCTION ("Resp_qPlusCCLK()"); /* * Get a pointer to the CCLK structure for convenience. */ cclk=resp_p->response.ptr_que_plus_cclk; tz=(char)cclk->time_zone; #ifndef _SIMULATION_ #ifdef FF_TIMEZONE if (tz<0) { sign='-'; tz=tz*(-1); } else { sign='+'; } #endif /*FF_TIMEZONE*/ #else sign='-'; tz=tz*(-1); #endif /*_SIMULATION_*/ #if defined(_SIMULATION_) || defined(FF_TIMEZONE) sprintf( g_sa, "%d/%d/%d,%d:%d:%d%c%d", cclk->year, cclk->month, cclk->day, cclk->hour, cclk->minutes, cclk->seconds, sign, tz); #else sprintf( g_sa, "%d/%d/%d,%d:%d:%d", cclk->year, cclk->month, cclk->day, cclk->hour, cclk->minutes, cclk->seconds); #endif io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCCUG(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCCUG()"); resp_disp (src_infos_psi->srcId,NULL,"eee",&resp_p->response.ptr_que_plus_ccug->n, &resp_p->response.ptr_que_plus_ccug->index,&resp_p->response.ptr_que_plus_ccug->info); return 0; /* Ok */ } int Resp_sPlusCCWA(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCCWA() Not implemented no callback which fills set response not present"); return 0; /* Ok */ } int Resp_sPlusCCWA_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCCWA_W() Not Implemented"); return 0; /* Ok */ } int Resp_qPlusCDIP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_que_plus_cdip *cdip; TRACE_FUNCTION ("Resp_qPlusCDIP() Not Implemented"); cdip = resp_p->response.ptr_que_plus_cdip; /* from ati_cc.c use bat params here! */ resp_disp(src_infos_psi->srcId, NULL, "be", &ati_user_output_cfg[src_infos_psi->srcId].CDIP_stat, &cdip->m); return 0; /* Ok */ } int Resp_sPlusCEER(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_set_plus_ceer *ceer; char desc[MAX_CEER_DESC_LTH]; USHORT cause; TRACE_FUNCTION ("Resp_sPlusCEER()"); /* * Get a pointer to the CEER structure for convenience. */ ceer=resp_p->response.ptr_set_plus_ceer; cause=CAUSE_MAKE( ceer->definedby, ceer->originatingside, ceer->originatingentity, ceer->causevalue); getCeerDesc(cause, desc); if (desc[0]==0) { /* * No description text is available */ sprintf( g_sa, "+CEER: %d,%d,%d,%d", ceer->definedby, ceer->originatingside, ceer->originatingentity, ceer->causevalue); } else { /* * Description text is available */ sprintf( g_sa, "+CEER: %d,%d,%d,%d,%s", ceer->definedby, ceer->originatingside, ceer->originatingentity, ceer->causevalue, desc); } io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCFUN(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCFUN()"); sprintf(g_sa, "%s: %d","+CFUN", resp_p->response.ptr_que_plus_cfun->fun); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } #ifdef GPRS int Resp_qPercentCGAATT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCGAATT()"); sprintf(g_sa,"%s: %d,%d", "%CGAATT", resp_p->response.ptr_que_percent_cgaatt->att_m, resp_p->response.ptr_que_percent_cgaatt->det_m); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCGACT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_que_plus_cgact *cgact; TRACE_FUNCTION ("Resp_qPlusCGACT()"); /* * Get a pointer to the CGACT structure for convenience. */ cgact=resp_p->response.ptr_que_plus_cgact; sprintf( g_sa, "+CGACT: %hd,%d", cgact->cid, (cgact->state==BAT_CGACT_STATE_ACTIVATED) ? 1:0); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCGATT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCGATT()"); sprintf(g_sa,"+CGATT: %d",resp_p->response.ptr_que_plus_cgatt->state); io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCGCLASS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *classes[] = {"A","B","BG","BC","BX","CG","CC"}; TRACE_FUNCTION ("Resp_qPercentCGCLASS()"); if(resp_p->response.ptr_que_percent_cgclass->p_mobile_class NEQ resp_p->response.ptr_que_percent_cgclass->current_mobile_class) { sprintf(g_sa,"%s: \"%s\",\"%s\"", "%CGCLASS", classes[resp_p->response.ptr_que_percent_cgclass->p_mobile_class], classes[resp_p->response.ptr_que_percent_cgclass->current_mobile_class]); } else { sprintf(g_sa,"%s: \"%s\"", "%CGCLASS", classes[resp_p->response.ptr_que_percent_cgclass->p_mobile_class]); } io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCGCLASS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *me="+CGCLASS: "; char *classes[] = {"A","B","CG","CC"}; TRACE_FUNCTION ("Resp_qPlusCGCLASS()"); sprintf(g_sa,"%s\"%s\"", me, classes[resp_p->response.ptr_que_plus_cgclass->mobile_class]); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCGDCONT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *me="+CGDCONT: "; T_BAT_res_que_plus_cgdcont *cgdcont; U8 apn[BAT_MAX_APN_LEN+1]; U8 pdp_addr[BAT_MAX_PDP_ADD+1]; CHAR *type; TRACE_FUNCTION ("Resp_qPlusCGDCONT()"); /* * Get a pointer to the CGDCONT structure for convenience. */ cgdcont=resp_p->response.ptr_que_plus_cgdcont; memset(apn,0,sizeof(apn)); memset(pdp_addr,0,sizeof(pdp_addr)); /* * Make these into null terminated strings. */ memcpy(apn,cgdcont->apn,cgdcont->c_apn); memcpy(pdp_addr,cgdcont->pdp_addr,cgdcont->c_pdp_addr); type=(cgdcont->pdp_type==BAT_PDP_TYPE_IPV4) ? "IP":""; if (!strcmp(apn, MAGIC_EMPTY_APN)) { sprintf(g_sa,"%s%hd,\"%s\",\"\",\"%s\",%hd,%hd", me, cgdcont->cid, type, pdp_addr, cgdcont->d_comp, cgdcont->h_comp); } else if (apn[0]==0) { sprintf(g_sa,"%s%hd,\"%s\",,\"%s\",%hd,%hd", me, cgdcont->cid, type, pdp_addr, cgdcont->d_comp, cgdcont->h_comp); } else { sprintf(g_sa,"%s%hd,\"%s\",\"%s\",\"%s\",%hd,%hd", me, cgdcont->cid, type, apn, pdp_addr, cgdcont->d_comp, cgdcont->h_comp); } io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPlusCGPADDR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_set_plus_cgpaddr *cgpaddr; TRACE_FUNCTION ("Resp_sPlusCGPADDR() "); /* * Get a pointer to the CGPADDR structure for convenience. */ cgpaddr=resp_p->response.ptr_set_plus_cgpaddr; if (cgpaddr->c_pdp_addr) { U8 pa[BAT_MAX_PDP_ADD+1]; memset(pa,0,sizeof(pa)); memcpy(pa,cgpaddr->pdp_addr,cgpaddr->c_pdp_addr); sprintf(g_sa,"+CGPADDR: %hd,\"%s\"",cgpaddr->cid,pa); } else { sprintf(g_sa,"+CGPADDR: %hd",cgpaddr->cid); } io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPlusCGPADDR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_tst_plus_cgpaddr *cgpaddr; int pos=0; UBYTE n; TRACE_FUNCTION ("Resp_tPlusCGPADDR() "); /* * Get a pointer to the CGPADDR structure for convenience. */ cgpaddr=resp_p->response.ptr_tst_plus_cgpaddr; pos=sprintf(g_sa,"+CGPADDR: ("); for (n=0;n<cgpaddr->c_cid;n++) { if (n!=0) { g_sa[pos]=','; pos++; } pos+=sprintf(g_sa+pos,"%hd",cgpaddr->cid[n]); } g_sa[pos]=')'; pos++; g_sa[pos]=0; io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPercentCGPCO(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_set_percent_cgpco *cgpco; U8 pco[BAT_MAX_CGPCO_PCO_LEN+1]; TRACE_FUNCTION ("Resp_sPercentCGPCO()"); /* * Get a pointer to the CGPCO structure for convenience. */ cgpco=resp_p->response.ptr_set_percent_cgpco; /* * Get a zero-terminated version of the pco string. */ memset(pco,0,sizeof(pco)); memcpy(pco,cgpco->pco,cgpco->c_pco); sprintf(g_sa,"%s\"%s\",%d","%CGPCO: ",pco,cgpco->cid); io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCGPPP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCGPPP()"); sprintf (g_sa, "%s: %d", "%CGPPP", resp_p->response.ptr_que_percent_cgppp->protocol); io_sendMessage (src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCGQMIN(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_que_plus_cgqmin *cgqmin; UBYTE precedence; UBYTE delay; UBYTE reliability; UBYTE peak; UBYTE mean; TRACE_FUNCTION ("Resp_qPlusCGQMIN()"); /* * Get a pointer to the CGQMIN structure for convenience. */ cgqmin=resp_p->response.ptr_que_plus_cgqmin; precedence=(UBYTE)cgqmin->precedence; delay=(UBYTE)cgqmin->delay; reliability=(UBYTE)cgqmin->reliability; peak=(UBYTE)cgqmin->peak; mean=(UBYTE)cgqmin->mean; if (precedence==(UBYTE)BAT_PRECEDENCE_NOT_PRESENT) precedence=GPRS_QOS_OMITTED; if (delay==(UBYTE)BAT_DELAY_NOT_PRESENT) delay=GPRS_QOS_OMITTED; if (reliability==(UBYTE)BAT_RELIABILITY_NOT_PRESENT) reliability=GPRS_QOS_OMITTED; if (peak==(UBYTE)BAT_PEAK_NOT_PRESENT) peak=GPRS_QOS_OMITTED; if (mean==(UBYTE)BAT_MEAN_NOT_PRESENT) mean=GPRS_QOS_OMITTED; sprintf( g_sa, "%s%hd,%d,%d,%d,%d,%d", "+CGQMIN: ", cgqmin->cid, precedence, delay, reliability, peak, mean); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCGQREQ(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_que_plus_cgqreq *cgqreq; UBYTE precedence; UBYTE delay; UBYTE reliability; UBYTE peak; UBYTE mean; TRACE_FUNCTION ("Resp_qPlusCGQREQ()"); /* * Get a pointer to the CGQREQ structure for convenience. */ cgqreq=resp_p->response.ptr_que_plus_cgqreq; precedence=(UBYTE)cgqreq->precedence; delay=(UBYTE)cgqreq->delay; reliability=(UBYTE)cgqreq->reliability; peak=(UBYTE)cgqreq->peak; mean=(UBYTE)cgqreq->mean; if (precedence==(UBYTE)BAT_PRECEDENCE_NOT_PRESENT) precedence=GPRS_QOS_OMITTED; if (delay==(UBYTE)BAT_DELAY_NOT_PRESENT) delay=GPRS_QOS_OMITTED; if (reliability==(UBYTE)BAT_RELIABILITY_NOT_PRESENT) reliability=GPRS_QOS_OMITTED; if (peak==(UBYTE)BAT_PEAK_NOT_PRESENT) peak=GPRS_QOS_OMITTED; if (mean==(UBYTE)BAT_MEAN_NOT_PRESENT) mean=GPRS_QOS_OMITTED; sprintf(g_sa,"%s%hd,%d,%d,%d,%d,%d", "+CGQREQ: ", cgqreq->cid, precedence, delay, reliability, peak, mean); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCGREG(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_P_CGREG_STAT stat; USHORT lac, cid; T_ATI_CREG_MOD mode; SHORT pos; T_BAT_res_que_percent_cgreg *cgreg; TRACE_FUNCTION ("Resp_qPercentCGREG()"); /* * Get a pointer to the CGREG structure for convenience. */ cgreg=resp_p->response.ptr_que_percent_cgreg; stat=(T_P_CGREG_STAT)cgreg->stat; lac=(USHORT)cgreg->lac; cid=(USHORT)cgreg->ci; mode=ati_gprs_user_output_cfg[(src_infos_psi->srcId)].percent_cgreg.mod_lac_cid.pres_mode; pos=sprintf(g_sa,"%s: %d,%d","%CGREG",mode,stat); if ((mode==CREG_MOD_LOC_INF_ON) || (mode==CREG_MOD_LOC_INF_ON_CTXACT)) { if ((stat==P_CGREG_STAT_REG_HOME) || (stat==P_CGREG_STAT_REG_ROAM)) pos += sprintf(g_sa+pos, ",\"%04X\",\"%04X\"", lac, cid); else if (mode==CREG_MOD_LOC_INF_ON_CTXACT) pos += sprintf(g_sa+pos, ",,"); /* if CTXACT follows so lac and cid are ommitted */ } if (mode==CREG_MOD_LOC_INF_ON_CTXACT) sprintf(g_sa+pos,(cgreg->state==BAT_P_CGREG_STATE_STAT_1) ? ",1" : ",0"); io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCGREG(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_CGREG_STAT stat; USHORT lac, cid; T_ATI_CREG_MOD mode; SHORT pos; T_BAT_res_que_plus_cgreg *cgreg; TRACE_FUNCTION ("Resp_qPlusCGREG()"); /* * Get a pointer to the CGREG structure for convenience. */ cgreg=resp_p->response.ptr_que_plus_cgreg; stat=(T_P_CGREG_STAT)cgreg->stat; lac=(USHORT)cgreg->lac; cid=(USHORT)cgreg->ci; mode=ati_gprs_user_output_cfg[src_infos_psi->srcId].plus_cgreg.mod_lac_cid.pres_mode; pos=sprintf(g_sa, "+CGREG: %d,%d", mode, stat); if (mode==CREG_MOD_LOC_INF_ON) { if((stat==CGREG_STAT_REG_HOME) || (stat==CGREG_STAT_REG_ROAM)) sprintf(g_sa+pos, ",\"%04X\",\"%04X\"", lac, cid); } io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCGSMS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *me="+CGSMS: "; TRACE_FUNCTION ("Resp_qPlusCGSMS()"); sprintf(g_sa,"%s%hd", me, (T_CGSMS_SERVICE)resp_p->response.ptr_que_plus_cgsms->service); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } #endif /* GPRS */ int Resp_sPercentCHPL(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_set_percent_chpl *chpl; CHAR str[BAT_MAX_CHPL_OPER_LEN+1]; TRACE_FUNCTION ("Resp_sPercentCHPL()"); /* * Get a pointer to the CHPL structure for convenience. */ chpl=resp_p->response.ptr_set_percent_chpl; /* * Make a zero-terminated version of the operator string. */ memset(str,0,sizeof(str)); memcpy(str,chpl->oper,chpl->c_oper); /* * This relies on the BAT representation of the numeric * format being the same as the ATI representation. */ sprintf(g_sa,"%s: %s","%CHPL",str); io_sendMessage (src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPercentCHPL_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPercentCHPL_W() Not Implemented"); return 0; /* Ok */ } int Resp_sPlusCIMI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR imsi[MAX_IMSI_LEN+1]; TRACE_FUNCTION ("Resp_sPlusCIMI()"); utl_binToHex(resp_p->response.ptr_set_plus_cimi->imsi, resp_p->response.ptr_set_plus_cimi->c_imsi,imsi); sprintf(g_sa,"%s",imsi); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCIND(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCIND() "); resp_disp(src_infos_psi->srcId, NULL,"ee", &resp_p->response.ptr_que_plus_cind->signal, &resp_p->response.ptr_que_plus_cind->smsfull); return 0; /* Ok */ } int Resp_qPlusCLAN(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_que_plus_clan *clan; CHAR code[BAT_MAX_CLAN_CODE_LEN+1]; TRACE_FUNCTION ("Resp_qPlusCLAN()"); /* * Get a pointer to the CLAN structure for convenience. */ clan=resp_p->response.ptr_que_plus_clan; memset(code,0,sizeof(code)); memcpy(code,clan->code,clan->c_code); sprintf(g_sa,"+CLAN: %s",code); io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPlusCLAN(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_tst_plus_clan *clan; CHAR code[BAT_MAX_CLAN_CODE_LEN+1]; TRACE_FUNCTION ("Resp_tPlusCLAN() "); /* * Get a pointer to the CLAN structure for convenience. */ clan=resp_p->response.ptr_tst_plus_clan; memset(code,0,sizeof(code)); memcpy(code,clan->code,clan->c_code); if (clan_buf==NULL) { clan_buf=g_sa; clan_buf+=sprintf(clan_buf,"+CLAN: "); } else { *clan_buf++=','; } clan_buf+=sprintf(clan_buf,"%s",code); return 0; /* Ok */ } int Resp_sPlusCLCK(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { SHORT pos; TRACE_FUNCTION ("Resp_sPlusCLCK()"); pos = sprintf(g_sa,"+CLCK: "); pos += sprintf(g_sa+pos,"%d,",resp_p->response.ptr_set_plus_clck->status); if (resp_p->response.ptr_set_plus_clck->bearer_class NEQ BAT_CLASS_NOT_PRESENT) { pos += sprintf(g_sa+pos,"%d,",resp_p->response.ptr_set_plus_clck->bearer_class); } ci_remTrailCom(g_sa, pos); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCLIP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCLIP() "); resp_disp(src_infos_psi->srcId,NULL,"be",&ati_user_output_cfg[src_infos_psi->srcId].CLIP_stat, &resp_p->response.ptr_que_plus_clip->m); return 0; /* Ok */ } int Resp_qPlusCLIP_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCLIP_W() Not Implemented"); return 0; /* Ok */ } int Resp_qPlusCLIR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *me = "+CLIR: "; TRACE_FUNCTION ("Resp_qPlusCLIR()"); sprintf(g_sa,"%s%d,%d",me,resp_p->response.ptr_que_plus_clir->n, resp_p->response.ptr_que_plus_clir->m); io_sendMessage(src_infos_psi->srcId,g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPlusCLVL(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCLVL() "); /* Output nothing as input is bat_dummy*/ return 0; /* Ok */ } int Resp_qPlusCLVL(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCLVL()"); sprintf ( g_sa, "+CLVL: %d", resp_p->response.ptr_que_plus_clvl->level ); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCMER(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCMER() not implemented"); return 0; /* Ok */ } int Resp_sPlusCMGC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_MNSMS_COMMAND_CNF mnsms_command_cnf; TRACE_FUNCTION ("Resp_sPlusCMGC()"); mnsms_command_cnf.tp_mr = resp_p->response.ptr_set_plus_cmgc->mr; mnsms_command_cnf.sms_sdu.l_buf= resp_p->response.ptr_set_plus_cmgc->c_ackpdu; memcpy(mnsms_command_cnf.sms_sdu.buf,resp_p->response.ptr_set_plus_cmgc->ackpdu,mnsms_command_cnf.sms_sdu.l_buf); rCI_PlusCMGCPdu(&mnsms_command_cnf); return 0; /* Ok */ } int Resp_sPlusCMGL(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_MNSMS_READ_CNF mnsms_read_cnf; TRACE_FUNCTION ("Resp_sPlusCMGL()"); mnsms_read_cnf.status = resp_p->response.ptr_set_plus_cmgl->stat; /*mnsms_read_cnf.rec_status = resp_p->response.ptr_set_plus_cmgl->stat;*/ mnsms_read_cnf.rec_num = (UBYTE)resp_p->response.ptr_set_plus_cmgl->sms_index; mnsms_read_cnf.sms_sdu.l_buf = resp_p->response.ptr_set_plus_cmgl->c_pdu; memcpy(mnsms_read_cnf.sms_sdu.buf,resp_p->response.ptr_set_plus_cmgl->pdu, resp_p->response.ptr_set_plus_cmgl->c_pdu); rCI_Plus_Percent_CMGLPdu(&mnsms_read_cnf, AT_CMD_CMGL); return 0; /* Ok */ } int Resp_sPercentCMGL(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_MNSMS_READ_CNF mnsms_read_cnf; TRACE_FUNCTION ("Resp_sPercentCMGL()"); mnsms_read_cnf.status = resp_p->response.ptr_set_percent_cmgl->stat; mnsms_read_cnf.rec_num = (UBYTE)resp_p->response.ptr_set_percent_cmgl->sms_index; mnsms_read_cnf.sms_sdu.l_buf = resp_p->response.ptr_set_percent_cmgl->c_pdu; memcpy(mnsms_read_cnf.sms_sdu.buf,resp_p->response.ptr_set_percent_cmgl->pdu, resp_p->response.ptr_set_percent_cmgl->c_pdu); rCI_Plus_Percent_CMGLPdu(&mnsms_read_cnf, AT_CMD_P_CMGL); return 0; /* Ok */ } int Resp_sPlusCMGL_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCMGL_W() Not Implemented"); return 0; /* Ok */ } int Resp_sPlusCMGR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_MNSMS_READ_CNF mnsms_read_cnf; TRACE_FUNCTION ("Resp_sPlusCMGR()"); mnsms_read_cnf.status = resp_p->response.ptr_set_plus_cmgr->sms_stat; mnsms_read_cnf.sms_sdu.l_buf = resp_p->response.ptr_set_plus_cmgr->c_pdu; memcpy(mnsms_read_cnf.sms_sdu.buf,resp_p->response.ptr_set_plus_cmgr->pdu, resp_p->response.ptr_set_plus_cmgr->c_pdu); rCI_Plus_Percent_CMGRPdu(&mnsms_read_cnf, AT_CMD_CMGR); return 0; /* Ok */ } int Resp_sPercentCMGR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_MNSMS_READ_CNF mnsms_read_cnf; TRACE_FUNCTION ("Resp_sPercentCMGR()"); mnsms_read_cnf.status = resp_p->response.ptr_set_percent_cmgr->sms_stat; mnsms_read_cnf.sms_sdu.l_buf = resp_p->response.ptr_set_percent_cmgr->c_pdu; memcpy(mnsms_read_cnf.sms_sdu.buf,resp_p->response.ptr_set_percent_cmgr->pdu, resp_p->response.ptr_set_percent_cmgr->c_pdu); rCI_Plus_Percent_CMGRPdu(&mnsms_read_cnf, AT_CMD_P_CMGR); return 0; /* Ok */ } int Resp_sPlusCMGR_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCMGR_W() Not Implemented"); return 0; /* Ok */ } int Resp_sPlusCMGS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_MNSMS_SUBMIT_CNF mnsms_submit_cnf; TRACE_FUNCTION ("Resp_sPlusCMGS()"); /* * Set up the bits of mnsms_submit_cnf that are used by * rCI_PlusCMGSPdu(). */ mnsms_submit_cnf.tp_mr=resp_p->response.ptr_set_plus_cmgs->mr; mnsms_submit_cnf.sms_sdu.l_buf=0; rCI_PlusCMGS(&mnsms_submit_cnf); return 0; /* Ok */ } int Resp_sPlusCMGW(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCMGW()"); rCI_PlusCMGW((UBYTE)resp_p->response.ptr_set_plus_cmgw->index); return 0; /* Ok */ } int Resp_qPlusCMOD(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCMOD()"); resp_disp (src_infos_psi->srcId, NULL, "e",&resp_p->response.ptr_que_plus_cmod->mode); return 0; /* Ok */ } int Resp_qPlusCMUT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCMUT()"); sprintf ( g_sa, "+CMUT: %d", resp_p->response.ptr_que_plus_cmut->n); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCMUX(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCMUX() not implemented"); return 0; /* Ok */ } int Resp_qPercentCNAP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCNAP() "); sprintf(g_sa, "%s%d,%d", "%CNAP: ", ati_user_output_cfg[src_infos_psi->srcId].cnap_mode, resp_p->response.ptr_que_percent_cnap->status); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT ); return 0; /* Ok */ } int Resp_qPlusCNMI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char* me = "+CNMI: "; TRACE_FUNCTION ("Resp_qPlusCNMI()"); sprintf ( g_sa,"%s%d,%d,%d,%d,%d", me, at.CNMI_mode, resp_p->response.ptr_que_plus_cnmi->mt, resp_p->response.ptr_que_plus_cnmi->bm, resp_p->response.ptr_que_plus_cnmi->ds, at.CNMI_bfr ); io_sendMessage (src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT ); return 0; /* Ok */ } int Resp_sPlusCNUM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_CNUM_MSISDN msisdn[MAX_MSISDN]; UBYTE n; T_BAT_res_set_plus_cnum *cnum; T_ACI_CNUM_MSISDN *ms; TRACE_FUNCTION ("Resp_sPlusCNUM()"); /* * Get a pointer to the CNUM structure for convenience. */ cnum=resp_p->response.ptr_set_plus_cnum; /* * Get a pointer to the output data for convenience. */ ms=&msisdn[0]; /* * rCI_PlusCNUM() ignores the 'num' parameter which is supposed * to indicate the number of items. Instead it assumes that its * 'msisdn' parameter is a pointer to an array of MAX_MSISDN * items. We are providing only a single item so here we set * all the other items in the array invalid. */ for (n=1;n<MAX_MSISDN;n++) msisdn[n].vldFlag=FALSE; ms->vldFlag=TRUE; /* * Convert the alphanumeric data into a null terminated string, * which is what the ATI expects. */ memset(ms->alpha,0,MAX_ALPHA_LEN); if (cnum->v_alpha==TRUE) { if (cnum->c_alpha>=MAX_ALPHA_LEN) memcpy(ms->alpha,cnum->alpha,MAX_ALPHA_LEN-1); else memcpy(ms->alpha,cnum->alpha,cnum->c_alpha); } /* * Convert the number into a null terminated string, * which is what the ATI expects. */ memset(ms->number,0,MAX_PHB_NUM_LEN); if (cnum->c_number>=MAX_PHB_NUM_LEN) memcpy(ms->number,cnum->number,MAX_PHB_NUM_LEN-1); else memcpy(ms->number,cnum->number,cnum->c_number); ms->type=toa_demerge(cnum->type); /* * These are not included in the BAT message, so set them * all to 'not present'. */ ms->speed=BS_SPEED_NotPresent; ms->service=CNUM_SERV_NotPresent; ms->itc=CNUM_ITC_NotPresent; rCI_PlusCNUM(msisdn,1); return 0; /* Ok */ } int Resp_sPlusCNUM_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCNUM_W() Not Implemented"); return 0; /* Ok */ } int Resp_qPlusCOLP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { UBYTE x = 0; TRACE_FUNCTION ("Resp_qPlusCOLP()"); x = (at.flags.COLP_stat?1:0); resp_disp(src_infos_psi->srcId, NULL,"be",&x, &resp_p->response.ptr_que_plus_colp->m); return 0; /* Ok */ } int Resp_qPlusCOLP_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCOLP_W() Not Implemented"); return 0; /* Ok */ } int Resp_qPercentCOPS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { U8 oper[40] = {'\0'}; TRACE_FUNCTION ("Resp_qPercentCOPS()"); /* resp_p->response.ptr_que_percent_cops->oper is not NULL terminated */ memcpy(oper, resp_p->response.ptr_que_percent_cops->oper, resp_p->response.ptr_que_percent_cops->c_oper); /* Added an empty comma and the service Status parameter */ sprintf(g_sa, "%s: %d,%d,\"%s\",,%d","%COPS", resp_p->response.ptr_que_percent_cops->mode, resp_p->response.ptr_que_percent_cops->format, oper, /* resp_p->response.ptr_que_percent_cops->oper, */ resp_p->response.ptr_que_percent_cops->service); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPercentCOPS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *cmdstr="%COPS"; T_BAT_res_tst_percent_cops *cops; TRACE_FUNCTION ("Resp_tPercentCOPS()"); /* * Get a pointer to the BAT structure for convenience. */ cops=resp_p->response.ptr_tst_percent_cops; if (cops_flag==FALSE) { cops_flag=TRUE; /* * First operator. */ sprintf(g_sa, "%s: (%d,\"%s\",\"%s\",\"%s\")", cmdstr, cops->status, cops->long_oper, cops->short_oper, cops->num_oper); io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); } else { /* * Subsequent operators. */ sprintf(g_sa, ",(%d,\"%s\",\"%s\",\"%s\")", cops->status, cops->long_oper, cops->short_oper, cops->num_oper); io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); } return 0; /* Ok */ } int Resp_qPlusCOPS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_que_plus_cops *cops; TRACE_FUNCTION ("Resp_qPlusCOPS()"); /* * Get a pointer to the COPS structure for convenience. */ cops=resp_p->response.ptr_que_plus_cops; if (cops->v_oper==TRUE) { U8 op[BAT_MAX_COPS_OPER_LEN+1]; /* * Create a zero-terminated version of the operator name. */ memset(op,0,sizeof(op)); memcpy(op,cops->oper,cops->c_oper); sprintf(g_sa,"+COPS: %d,%d,\"%s\"",cops->mode,cops->format,op); } else { sprintf(g_sa,"+COPS: %d",cops->mode); } io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPlusCOPS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *cmdstr; T_BAT_res_tst_plus_cops *cops; T_ATI_SRC_PARAMS *src_params = find_element (ati_src_list, src_infos_psi->srcId, search_ati_src_id); TRACE_FUNCTION ("Resp_tPlusCOPS()"); /* * We're in trouble if we don't have 'src_params', as we need * to know the command ID. */ if (src_params==NULL) { TRACE_EVENT("No src_params in COPS response."); return 1; /* Indicate error */ } /* * rBAT_PlusCOPS doubles for both %COPS and +COPS responses. */ if (src_params->curAtCmd==AT_CMD_P_COPS) cmdstr = "%COPS"; else cmdstr = "+COPS"; /* * Get a pointer to the BAT structure for convenience. */ cops=resp_p->response.ptr_tst_plus_cops; if (cops_flag==FALSE) { cops_flag=TRUE; /* * First operator. */ sprintf(g_sa, "%s: (%d,\"%s\",\"%s\",\"%s\")", cmdstr, cops->status, cops->long_oper, cops->short_oper, cops->num_oper); io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); } else { /* * Subsequent operators. */ sprintf(g_sa, ",(%d,\"%s\",\"%s\",\"%s\")", cops->status, cops->long_oper, cops->short_oper, cops->num_oper); io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); } return 0; /* Ok */ } int Resp_qPercentCOPS_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCOPS_W() Not Implemented"); return 0; /* Ok */ } int Resp_tPercentCOPS_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPercentCOPS_W() Not Implemented"); return 0; /* Ok */ } int Resp_sPercentCPALS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR msisdn_id[BAT_MAX_CPALS_MSISDN_ID_LEN + 1] ; TRACE_FUNCTION ("Resp_sPercentCPALS() "); utl_binToHex(resp_p->response.ptr_set_percent_cpals->msisdn_id, (SHORT)resp_p->response.ptr_set_percent_cpals->c_msisdn_id , msisdn_id); sprintf(g_sa, "%s: %d,\"%s\"", "%CPALS", resp_p->response.ptr_set_percent_cpals->lines, msisdn_id); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCPALS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCPALS() "); sprintf(g_sa, "%s: %d", "%CPALS", resp_p->response.ptr_que_percent_cpals->lines); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPercentCPALS_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPercentCPALS_W() not implemented"); return 0; /* Ok */ } int Resp_qPercentCPALS_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCPALS_W() Not Implemented"); return 0; /* Ok */ } int Resp_sPlusCPAS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCPAS()"); resp_disp(src_infos_psi->srcId, NULL, "e", &resp_p->response.ptr_set_plus_cpas->pas); return 0; /* Ok */ } int Resp_sPlusCPBF(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_set_plus_cpbf *cpbf; USHORT pos; U8 num[BAT_MAX_CPBF_NUMBER_LEN+1]; CHAR cvtd_text[2*BAT_MAX_CPBF_TEXT_LEN]; USHORT len_cvtd_text; TRACE_FUNCTION ("Resp_sPlusCPBF()"); /* * Get a pointer to the CPBF structure for convenience. */ cpbf=resp_p->response.ptr_set_plus_cpbf; memset(num,0,sizeof(num)); memcpy(num,cpbf->number,cpbf->c_number); pos=sprintf(g_sa,"+CPBF: %d,\"%s\",%d,",cpbf->index,num,cpbf->type); utl_chsetFromSim( (UBYTE*)cpbf->text, (USHORT)cpbf->c_text, (UBYTE*)cvtd_text, sizeof(cvtd_text), &len_cvtd_text, GSM_ALPHA_Def); pos+=sprints(g_sa+pos,cvtd_text,len_cvtd_text); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPlusCPBF(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_tst_plus_cpbf *cpbf; TRACE_FUNCTION ("Resp_tPlusCPBF()"); /* * Get a pointer to the CPBF structure for convenience. */ cpbf=resp_p->response.ptr_tst_plus_cpbf; resp_disp(src_infos_psi->srcId,NULL,"bb",(UBYTE *)&cpbf->nlength,(UBYTE *)&cpbf->tlength); return 0; /* Ok */ } int Resp_sPlusCPBF_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCPBF_W() Not Implemented"); return 0; /* Ok */ } int Resp_tPlusCPBF_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPlusCPBF_W() Not Implemented"); return 0; /* Ok */ } int Resp_sPlusCPBR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { USHORT pos = 0; TRACE_FUNCTION ("Resp_sPlusCPBR()"); if (resp_p->response.ptr_set_plus_cpbr->index NEQ ACI_NumParmNotPresent) { CHAR cvtdText[4*MAX_ALPHA_LEN] = {0x00}; /* need enough space for UCS2 strings */ USHORT lenCvtdText = 0; pos=sprintf(g_sa,"+CPBR: %d,\"%s\",%d,", resp_p->response.ptr_set_plus_cpbr->index, resp_p->response.ptr_set_plus_cpbr->number, resp_p->response.ptr_set_plus_cpbr->type); utl_chsetFromSim((UBYTE*)resp_p->response.ptr_set_plus_cpbr->text, resp_p->response.ptr_set_plus_cpbr->c_text, (UBYTE*)cvtdText, sizeof(cvtdText), &lenCvtdText, GSM_ALPHA_Def); pos+=sprints(g_sa+pos,cvtdText,lenCvtdText); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); } return 0; /* Ok */ } int Resp_tPlusCPBR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPlusCPBR()"); sprintf(g_sa,"+CPBR: (%d-%d),%d,%d", resp_p->response.ptr_tst_plus_cpbr->index_f, resp_p->response.ptr_tst_plus_cpbr->index_l, resp_p->response.ptr_tst_plus_cpbr->nlength, resp_p->response.ptr_tst_plus_cpbr->tlength); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPlusCPBR_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCPBR_W() Not Implemented"); return 0; /* Ok */ } int Resp_tPlusCPBR_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPlusCPBR_W() Not Implemented"); return 0; /* Ok */ } int Resp_qPercentCPBS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { SHORT i; TRACE_FUNCTION ("Resp_qPercentCPBS()"); for(i=0;phb_mem_names[i].name NEQ NULL;i++) { if (phb_mem_names[i].stor EQ resp_p->response.ptr_que_percent_cpbs->storage) { sprintf(g_sa,"%s: \"%s\",%d,%d,%d","%CPBS", phb_mem_names[i].name, resp_p->response.ptr_que_percent_cpbs->used, resp_p->response.ptr_que_percent_cpbs->total, resp_p->response.ptr_que_percent_cpbs->first); io_sendMessage((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); break; } } return(0); /* Ok */ } int Resp_qPlusCPBS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { SHORT i; TRACE_FUNCTION ("Resp_qPlusCPBS()"); for(i=0;phb_mem_names[i].name NEQ NULL;i++) { if (phb_mem_names[i].stor EQ resp_p->response.ptr_que_plus_cpbs->storage) { sprintf(g_sa,"+CPBS: \"%s\",%d,%d", phb_mem_names[i].name, resp_p->response.ptr_que_plus_cpbs->used, resp_p->response.ptr_que_plus_cpbs->total); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); break; } } return 0; /* Ok */ } int Resp_tPlusCPBW(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPlusCPBW()"); sprintf(g_sa,"%s(%d-%d),%d,%s,%d", "+CPBW: ", resp_p->response.ptr_tst_plus_cpbw->index1, resp_p->response.ptr_tst_plus_cpbw->index2, resp_p->response.ptr_tst_plus_cpbw->nlength, "(128-201)", resp_p->response.ptr_tst_plus_cpbw->tlength); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPlusCPBW_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPlusCPBW_W() Not Implemented"); return 0; /* Ok */ } int Resp_sPercentCPCFU(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPercentCPCFU()"); if(resp_p->response.ptr_set_percent_cpcfu->status EQ BAT_P_CPCFU_STATUS_ACTIVATED) { sprintf(g_sa, "%s: %d,%d", "%CPCFU", CPHS_FLAG_ACTIVATED, resp_p->response.ptr_set_percent_cpcfu->line); } else { sprintf(g_sa, "%s: %d", "%CPCFU", CPHS_FLAG_DEACTIVATED); } io_sendMessage((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCPHS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCPHS() "); sprintf(g_sa, "%s%d", "%CPHS: ", resp_p->response.ptr_que_percent_cphs->init_mode); io_sendMessage((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCPIN(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCPIN() "); rCI_PlusCPIN(resp_p->response.ptr_que_plus_cpin->code); return 0; /* Ok */ } int Resp_qPercentCPINF(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCPINF()"); if (resp_p->response.ptr_que_percent_cpinf->c_csp > 0) { if (resp_p->response.ptr_que_percent_cpinf->c_csp2 > 0) { sprintf(g_sa, "%s: %d,\"%04X\",\"%s\",\"%s\"", "%CPINF", resp_p->response.ptr_que_percent_cpinf->phase, resp_p->response.ptr_que_percent_cpinf->sst, resp_p->response.ptr_que_percent_cpinf->csp, resp_p->response.ptr_que_percent_cpinf->csp2); } else { sprintf(g_sa, "%s: %d,\"%04X\",\"%s\"", "%CPINF", resp_p->response.ptr_que_percent_cpinf->phase, resp_p->response.ptr_que_percent_cpinf->sst, resp_p->response.ptr_que_percent_cpinf->csp); } } else { sprintf(g_sa, "%s: %d,\"%04X\"", "%CPINF", resp_p->response.ptr_que_percent_cpinf->phase, resp_p->response.ptr_que_percent_cpinf->sst); } io_sendMessage((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCPMB(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCPMB()"); sprintf(g_sa,"%s: %d","%CPMB",resp_p->response.ptr_que_percent_cpmb->first); io_sendMessage((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return(0); /* Ok */ } int Resp_sPercentCPMB(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR number[BAT_MAX_CPMB_NUMBER_LEN + 1] = {'\0'}; CHAR* p_number; CHAR alpha_id[BAT_MAX_CPMB_ALPHA_ID_LEN + 1] = {'\0'}; CHAR* p_alpha_id; T_BAT_res_set_percent_cpmb *cpmb; TRACE_FUNCTION ("Resp_sPercentCPMB()"); /* * Get a pointer to the CPMB structure for convenience. */ cpmb=resp_p->response.ptr_set_percent_cpmb; /* * Don't output anything if there is no actual number. This is in line * with the existing ATI implementation (see setatPercentCPMB()) and * is necessary in order to pass tests such as ACI583. */ if (cpmb->v_number EQ FALSE) return(0); p_number = number; p_alpha_id = alpha_id ; /* * Zero the arrays to ensure that we end up with null-terminated * strings following the memcpy. */ memset(number,0,sizeof(number)); memset(alpha_id,0,sizeof(alpha_id)); if ((cpmb->v_number NEQ FALSE) AND (cpmb->c_number<=BAT_MAX_CPMB_NUMBER_LEN)) memcpy(number,cpmb->number,cpmb->c_number); else p_number = NULL; if ((cpmb->v_alpha_id NEQ FALSE) AND (cpmb->c_alpha_id<=BAT_MAX_CPMB_ALPHA_ID_LEN)) memcpy(alpha_id,cpmb->alpha_id,cpmb->c_alpha_id); else p_alpha_id = NULL; sprintf(g_sa,"%s: %d,%d,\"%s\",%d,\"%s\"", "%CPMB", resp_p->response.ptr_set_percent_cpmb->record_id, resp_p->response.ptr_set_percent_cpmb->line, p_number, resp_p->response.ptr_set_percent_cpmb->type, p_alpha_id); io_sendMessage((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPercentCPMBW(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *me = "%CPMBW: "; TRACE_FUNCTION ("Resp_tPercentCPMBW() "); sprintf(g_sa,"%s(%d-%d),%d,%s,%d",me, resp_p->response.ptr_tst_percent_cpmbw->min_rec_id, resp_p->response.ptr_tst_percent_cpmbw->max_rec_id, resp_p->response.ptr_tst_percent_cpmbw->nlength, "(128-201)", resp_p->response.ptr_tst_percent_cpmbw->tlength); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPercentCPMBW_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPercentCPMBW_W() Not Implemented"); return 0; /* Ok */ } int Resp_sPercentCPMB_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPercentCPMB_W() Not Implemented"); return 0; /* Ok */ } int Resp_sPlusCPMS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_SMS_STOR_OCC mem1; T_ACI_SMS_STOR_OCC mem2; T_ACI_SMS_STOR_OCC mem3; TRACE_FUNCTION ("Resp_sPlusCPMS() "); mem1.mem = (T_ACI_SMS_STOR)resp_p->response.ptr_set_plus_cpms->mem1; mem1.total = (SHORT)resp_p->response.ptr_set_plus_cpms->total1; mem1.used = (SHORT)resp_p->response.ptr_set_plus_cpms->used1; mem2.mem = (T_ACI_SMS_STOR)resp_p->response.ptr_set_plus_cpms->mem2; mem2.total = (SHORT)resp_p->response.ptr_set_plus_cpms->total2; mem2.used = (SHORT)resp_p->response.ptr_set_plus_cpms->used2; mem3.mem = (T_ACI_SMS_STOR)resp_p->response.ptr_set_plus_cpms->mem3; mem3.total = (SHORT)resp_p->response.ptr_set_plus_cpms->total3; mem3.used = (SHORT)resp_p->response.ptr_set_plus_cpms->used3; rCI_PlusCPMS (&mem1, &mem2, &mem3); return 0; /* Ok */ } int Resp_qPlusCPMS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR* me = "+CPMS: "; int i = 0; CHAR memstr1[3] = {0}; CHAR memstr2[3] = {0}; CHAR memstr3[3] = {0}; BOOL f1 = TRUE; BOOL f2 = TRUE; BOOL f3 = TRUE; TRACE_FUNCTION ("Resp_qPlusCPMS() "); if ( cpmsCallType EQ QAT_CALL ) { for ( i=0; sms_mem[i].name != NULL; i++ ) { if ( ( sms_mem[i].stor EQ resp_p->response.ptr_que_plus_cpms->mem1) AND f1 ) { strcpy ( memstr1, sms_mem[i].name ); f1 = FALSE; } if ( ( sms_mem[i].stor EQ resp_p->response.ptr_que_plus_cpms->mem2) AND f2 ) { strcpy ( memstr2, sms_mem[i].name ); f2 = FALSE; } if ( ( sms_mem[i].stor EQ resp_p->response.ptr_que_plus_cpms->mem3) AND f3 ) { strcpy ( memstr3, sms_mem[i].name ); f3 = FALSE; } } sprintf ( g_sa, "%s\"%s\",%d,%d,\"%s\",%d,%d,\"%s\",%d,%d", me, memstr1, resp_p->response.ptr_que_plus_cpms->used1, resp_p->response.ptr_que_plus_cpms->total1, memstr2, resp_p->response.ptr_que_plus_cpms->used2, resp_p->response.ptr_que_plus_cpms->total2, memstr3, resp_p->response.ptr_que_plus_cpms->used3, resp_p->response.ptr_que_plus_cpms->total3); } else { sprintf ( g_sa, "%s%d,%d,%d,%d,%d,%d", me, resp_p->response.ptr_que_plus_cpms->used1, resp_p->response.ptr_que_plus_cpms->total1, memstr2, resp_p->response.ptr_que_plus_cpms->used2, resp_p->response.ptr_que_plus_cpms->total2, memstr3, resp_p->response.ptr_que_plus_cpms->used3, resp_p->response.ptr_que_plus_cpms->total3); } io_sendMessage ( src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT ); cpmsCallType = NONE_CALL; return 0; /* Ok */ } int Resp_sPercentCPNUMS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPercentCPNUMS() "); sprintf(g_sa, "%s%d,\"%s\",\"%s\",%d,%d,%d", "%CPNUMS: ", resp_p->response.ptr_set_percent_cpnums->element_id, resp_p->response.ptr_set_percent_cpnums->alpha_tag, resp_p->response.ptr_set_percent_cpnums->number, resp_p->response.ptr_set_percent_cpnums->index_level, resp_p->response.ptr_set_percent_cpnums->premium_flag, resp_p->response.ptr_set_percent_cpnums->network_flag); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPercentCPNUMS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR alpha_tag[BAT_MAX_CPNUMS_ALPHA_TAG_LEN + 1]; CHAR number[BAT_MAX_CPNUMS_NUMBER_LEN + 1]; TRACE_FUNCTION ("Resp_tPercentCPNUMS() "); utl_binToHex(resp_p->response.ptr_set_percent_cpnums->alpha_tag, (SHORT)resp_p->response.ptr_set_percent_cpnums->c_alpha_tag, alpha_tag); utl_binToHex(resp_p->response.ptr_set_percent_cpnums->number, (SHORT)resp_p->response.ptr_set_percent_cpnums->c_number, number); sprintf(g_sa, "%s%d,\"%s\",\"%s\",%d,%d,%d", "%CPNUMS: ", resp_p->response.ptr_tst_percent_cpnums->element_id, alpha_tag, number, resp_p->response.ptr_tst_percent_cpnums->index_level, resp_p->response.ptr_tst_percent_cpnums->premium_flag, resp_p->response.ptr_tst_percent_cpnums->network_flag); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPercentCPNUMS_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPercentCPNUMS_W() Not Implemented"); return 0; /* Ok */ } int Resp_tPercentCPNUMS_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPercentCPNUMS_W() Not Implemented"); return 0; /* Ok */ } int Resp_qPlusCPOL(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_CPOL_OPDESC op[2]; T_BAT_res_que_plus_cpol *cpol; TRACE_FUNCTION ("Resp_qPlusCPOL()"); /* * Get a pointer to the CPOL structure for convenience. */ cpol=resp_p->response.ptr_que_plus_cpol; /* * This represents a termination of the list of operators * as far as rCI_PlusCPOL() is concerned. In this case * our list contains only a single operator. */ op[1].index=ACI_NumParmNotPresent; /* * Convert the operator name into a null terminated string, * which is what the ATI expects. */ memset(op[0].oper,0,MAX_ALPHA_OPER_LEN); if (cpol->c_oper>=MAX_ALPHA_OPER_LEN) memcpy(op[0].oper,cpol->oper,MAX_ALPHA_OPER_LEN-1); else memcpy(op[0].oper,cpol->oper,cpol->c_oper); /* * This relies on T_ACI_CPOL_FRMT being identical to * T_BAT_plus_cpol_format. */ op[0].format=(T_ACI_CPOL_FRMT)cpol->format; op[0].index=(SHORT)cpol->index; rCI_PlusCPOL( ACI_NumParmNotPresent, ACI_NumParmNotPresent, op, ACI_NumParmNotPresent); return 0; /* Ok */ } int Resp_tPlusCPOL(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPlusCPOL()"); rCI_PlusCPOL((SHORT)resp_p->response.ptr_tst_plus_cpol->index1, (SHORT)resp_p->response.ptr_tst_plus_cpol->index2, NULL, ACI_NumParmNotPresent); return 0; /* Ok */ } int Resp_qPlusCPOL_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCPOL_W() Not Implemented"); return 0; /* Ok */ } int Resp_tPlusCPOL_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPlusCPOL_W() Not Implemented"); return 0; /* Ok */ } int Resp_qPercentCPOPN(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR long_name[BAT_MAX_CPOPN_LONG_NAME_LEN + 1]; CHAR short_name[BAT_MAX_CPOPN_SHORT_NAME_LEN + 1]; TRACE_FUNCTION ("Resp_qPercentCPOPN() "); utl_binToHex(resp_p->response.ptr_que_percent_cpopn->long_name, (SHORT)resp_p->response.ptr_que_percent_cpopn->c_long_name, long_name); if(resp_p->response.ptr_que_percent_cpopn->v_short_name) utl_binToHex(resp_p->response.ptr_que_percent_cpopn->short_name, (SHORT)resp_p->response.ptr_que_percent_cpopn->c_short_name, short_name); if ( resp_p->response.ptr_que_percent_cpopn->v_short_name) { sprintf(g_sa, "%s: \"%s\",\"%s\"", "%CPOPN", long_name, short_name); } else { sprintf(g_sa, "%s: \"%s\"", "%CPOPN", long_name); } io_sendMessage((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCPRSM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *me = "%CPRSM"; TRACE_FUNCTION ("Resp_qPercentCPRSM()"); sprintf(g_sa,"%s: %d", me, resp_p->response.ptr_que_percent_cprsm->mode); io_sendMessage((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCPUC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char currency [BAT_MAX_CPUC_CURRENCY_LEN+1] = {0x00}; char cvtdCurrency [2*BAT_MAX_CPUC_CURRENCY_LEN+1] = {0x00}; USHORT lenCurrency = 0; USHORT lenCvtdCurrency = 0; USHORT pos = 0; char ppu [BAT_MAX_CPUC_PPU_LEN+1] = {0x00}; TRACE_FUNCTION ("Resp_qPlusCPUC()"); utl_binToHex(resp_p->response.ptr_que_plus_cpuc->currency, (SHORT)resp_p->response.ptr_que_plus_cpuc->c_currency, currency); utl_binToHex(resp_p->response.ptr_que_plus_cpuc->ppu, (SHORT)resp_p->response.ptr_que_plus_cpuc->c_ppu, ppu); utl_chsetFromGsm((UBYTE*)currency, (USHORT)strlen(currency), (UBYTE*)cvtdCurrency, sizeof(cvtdCurrency), &lenCvtdCurrency, GSM_ALPHA_Def); pos = sprintf(g_sa,"+CPUC: "); pos += sprints(g_sa+pos,cvtdCurrency,lenCvtdCurrency); pos += sprintf(g_sa+pos,",\"%s\"",ppu); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCPUC_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCPUC_W() Not Implemented"); return 0; /* Ok */ } int Resp_sPercentCPVWI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPercentCPVWI()"); if(resp_p->response.ptr_set_percent_cpvwi->status EQ BAT_P_CPVWI_FLAG_ACTIVATED) sprintf(g_sa, "%s: %d,%d", "%CPVWI", resp_p->response.ptr_set_percent_cpvwi->status, resp_p->response.ptr_set_percent_cpvwi->line); else sprintf(g_sa, "%s: %d", "%CPVWI", resp_p->response.ptr_set_percent_cpvwi->status); io_sendMessage((UBYTE)src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCREG(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ATI_CREG_MOD mode; T_ACI_CREG_STAT stat; short pos; TRACE_FUNCTION ("Resp_qPercentCREG() "); /* r_plus_percent_CREG ( src_infos_psi->srcId, resp_p->response.ptr_que_percent_creg->stat, (USHORT)resp_p->response.ptr_que_percent_creg->lac, (USHORT)resp_p->response.ptr_que_percent_creg->ci, PercentCREG_CMD, resp_p->response.ptr_que_percent_creg->gprs_ind, FALSE ); */ mode = ati_user_output_cfg[src_infos_psi->srcId].percent_creg.mod_lac_cid.pres_mode; stat = resp_p->response.ptr_que_percent_creg->stat; pos = sprintf(g_sa, "%s: %d,%d", "%CREG", mode, stat); if ((mode EQ CREG_MOD_LOC_INF_ON) AND (stat EQ CREG_STAT_Reg OR stat EQ CREG_STAT_Roam)) { pos += sprintf(g_sa+pos, ",\"%04X\",\"%04X\"", (USHORT)resp_p->response.ptr_que_percent_creg->lac, (USHORT)resp_p->response.ptr_que_percent_creg->ci); } else { pos += sprintf(g_sa+pos, ",,"); } sprintf(g_sa+pos,",%d", resp_p->response.ptr_que_percent_creg->gprs_ind); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_tPlusCRES(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPlusCRES() some error no min filed present!!!"); sprintf ( g_sa, "+CRES: (%d-%d)",resp_p->response.ptr_tst_plus_cres->max, /*need a min filed*/ resp_p->response.ptr_tst_plus_cres->max); io_sendMessage (src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT ); return 0; /* Ok */ } int Resp_qPlusCRLP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCRLP()"); resp_disp(src_infos_psi->srcId,NULL,"ssss",&(resp_p->response.ptr_que_plus_crlp->iws), &(resp_p->response.ptr_que_plus_crlp->mws), &(resp_p->response.ptr_que_plus_crlp->t1), &(resp_p->response.ptr_que_plus_crlp->n2)); return 0; /* Ok */ } int Resp_sPlusCRSM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_set_plus_crsm *crsm; TRACE_FUNCTION ("Resp_sPlusCRSM() "); /* * Get a pointer to the CRSM structure for convenience. */ crsm=resp_p->response.ptr_set_plus_crsm; rCI_PlusCRSM( (SHORT)crsm->sw1, (SHORT)crsm->sw2, (SHORT)crsm->c_response, (UBYTE *)crsm->response); return 0; /* Ok */ } int Resp_tPlusCSAS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_tPlusCSAS() "); sprintf ( g_sa, "+CSAS: (0-%d)", resp_p->response.ptr_tst_plus_csas->max - 1 ); io_sendMessage (src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT ); return 0; /* Ok */ } int Resp_qPlusCSCA(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR sca[MAX_SMS_NUM_LEN] = {'\0'}; T_ACI_TOA tosca; TRACE_FUNCTION ("Resp_qPlusCSCA() "); /* utl_binToHex(resp_p->response.ptr_que_plus_csca->sca, (SHORT)resp_p->response.ptr_que_plus_csca->c_sca, sca); */ if (resp_p->response.ptr_que_plus_csca->c_sca > 0) { memcpy(sca, resp_p->response.ptr_que_plus_csca->sca, (SHORT)resp_p->response.ptr_que_plus_csca->c_sca); } tosca=toa_demerge((SHORT)resp_p->response.ptr_que_plus_csca->tosca); sprintf(g_sa, "+CSCA: \"%s%s\",%d", (tosca.ton EQ TON_International)?"+":"", sca, resp_p->response.ptr_que_plus_csca->tosca); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCSCB(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { int i, pos; char mids_str[6*BAT_MAX_IDENTS+1]={'\0'}; char dcss_str[4*BAT_MAX_IDENTS+1]={'\0'}; TRACE_FUNCTION ("Resp_qPlusCSCB()"); /* assemble the string for message identifiers */ pos = i = 0; while ((resp_p->response.ptr_que_plus_cscb->mids[i] NEQ 0xFFFF) AND (resp_p->response.ptr_que_plus_cscb->mids[i+1] NEQ 0xFFFF) AND (i < BAT_MAX_IDENTS-1)) { if (resp_p->response.ptr_que_plus_cscb->mids[i] EQ resp_p->response.ptr_que_plus_cscb->mids[i+1]) { pos += sprintf ( mids_str + pos, "%d,", resp_p->response.ptr_que_plus_cscb->mids[i] ); } else { pos += sprintf ( mids_str + pos, "%d-%d,", resp_p->response.ptr_que_plus_cscb->mids[i], resp_p->response.ptr_que_plus_cscb->mids[i+1] ); } i += 2; } if (pos > 0) /* remove the last ',' */ { mids_str[pos-1] = '\0'; } /* assemble the string for data coding schemes */ pos = i = 0; while ((resp_p->response.ptr_que_plus_cscb->dcss[i] NEQ 0xFF) AND (resp_p->response.ptr_que_plus_cscb->dcss[i+1] NEQ 0xFF) AND (i < BAT_MAX_IDENTS-1)) { if (resp_p->response.ptr_que_plus_cscb->dcss[i] EQ resp_p->response.ptr_que_plus_cscb->dcss[i+1]) { pos += sprintf(dcss_str + pos, "%d,", resp_p->response.ptr_que_plus_cscb->dcss[i]); } else { pos += sprintf(dcss_str + pos, "%d-%d,", resp_p->response.ptr_que_plus_cscb->dcss[i], resp_p->response.ptr_que_plus_cscb->dcss[i+1]); } i += 2; } if (pos > 0) /* remove the last ',' */ { dcss_str[pos-1] = '\0'; } sprintf(g_sa,"+CSCB: %d,\"%s\",\"%s\"",resp_p->response.ptr_que_plus_cscb->mode,mids_str,dcss_str); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCSCS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCSCS()"); strcpy ( g_sa, "+CSCS: "); switch (resp_p->response.ptr_que_plus_cscs->cs) { case (BAT_CSCS_CS_IRA ): strcat (g_sa,"\"IRA\"" ); break; case (BAT_CSCS_CS_PCDN ): strcat (g_sa,"\"PCDN\"" ); break; case (BAT_CSCS_CS_8859_1 ): strcat (g_sa,"\"8859-1\"" ); break; case (BAT_CSCS_CS_PCCP_437): strcat (g_sa,"\"PCCP437\""); break; case (BAT_CSCS_CS_GSM ): strcat (g_sa,"\"GSM\"" ); break; case (BAT_CSCS_CS_HEX ): strcat (g_sa,"\"HEX\"" ); break; case (BAT_CSCS_CS_UCS2 ): strcat (g_sa,"\"UCS2\"" ); break; default: /* * It's probably best to do nothing at all at this point. An * error message would just confuse the issue as aci_bat_wrapper() * will cause an OK to be sent and we can't stop it now. * Shouldn't get here anyway. */ cmdErrStr=NULL; return(0); } io_sendMessage(src_infos_psi->srcId,g_sa,ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPlusCSIM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_set_plus_csim *csim; TRACE_FUNCTION ("Resp_sPlusCSIM()"); /* * Get a pointer to the CSIM structure for convenience. */ csim=resp_p->response.ptr_set_plus_csim; rCI_PlusCSIM( (SHORT)csim->c_response, (UBYTE *)csim->response); return 0; /* Ok */ } int Resp_qPlusCSMS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCSMS()"); sprintf(g_sa,"+CSMS: %d,%d,%d,%d",resp_p->response.ptr_que_plus_csms->service, resp_p->response.ptr_que_plus_csms->mt,resp_p->response.ptr_que_plus_csms->mo, resp_p->response.ptr_que_plus_csms->bm); io_sendMessage(src_infos_psi->srcId,g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCSNS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCSNS()"); resp_disp (src_infos_psi->srcId, NULL,"e",&resp_p->response.ptr_que_plus_csns->mode); return 0; /* Ok */ } int Resp_qPercentCSQ(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCSQ()"); sprintf (g_sa, "%s %d, %d, %d", "%CSQ: ",resp_p->response.ptr_que_percent_csq->rssi, resp_p->response.ptr_que_percent_csq->ber, resp_p->response.ptr_que_percent_csq->actlevel); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPlusCSQ(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCSQ()"); sprintf (g_sa, "+CSQ: %d,%d ", resp_p->response.ptr_set_plus_csq->rssi, resp_p->response.ptr_set_plus_csq->ber ); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusCSTA(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCSTA()"); resp_disp(src_infos_psi->srcId, NULL,"s",&resp_p->response.ptr_que_plus_csta->type); return 0; /* Ok */ } int Resp_qPlusCSVM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR num[BAT_MAX_CSVM_NUMBER_LEN+1]; TRACE_FUNCTION ("Resp_qPlusCSVM()"); /* * Get a pointer to the CSVM structure for convenience. */ memset(num,0,sizeof(num)); utl_binToHex(resp_p->response.ptr_que_plus_csvm->number, resp_p->response.ptr_que_plus_csvm->c_number, num); sprintf(g_sa,"+CSVM: %d,\"%s\",%d",resp_p->response.ptr_que_plus_csvm->mode, num,resp_p->response.ptr_que_plus_csvm->type); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCTTY(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCTTY()"); if (resp_p->response.ptr_que_percent_ctty->trx EQ CTTY_TRX_Unknown) resp_disp (src_infos_psi->srcId,NULL,"ee", &resp_p->response.ptr_que_percent_ctty->req, &resp_p->response.ptr_que_percent_ctty->m); else resp_disp (src_infos_psi->srcId, NULL ,"eee", &resp_p->response.ptr_que_percent_ctty->req, &resp_p->response.ptr_que_percent_ctty->m, &resp_p->response.ptr_que_percent_ctty->trx); return 0; /* Ok */ } int Resp_qPlusCTZU(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusCTZU() "); sprintf(g_sa,"+CTZU: %d", resp_p->response.ptr_que_plus_ctzu->onoff); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentCUST(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentCUST()"); sprintf(g_sa,"%CUST: %d", resp_p->response.ptr_que_percent_cust->mode); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentSATCC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentSATCC()"); sprintf(g_sa,"%%SATCC: %d", resp_p->response.ptr_que_percent_satcc->mode); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentDATA(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *pktioName = "PKTIO"; char* des_name; char* src_name; T_CAP_ID capability = DEV_CPBLTY_NONE; TRACE_FUNCTION ("Resp_qPercentDATA() "); des_name = dti_entity_name[resp_p->response.ptr_que_percent_data->des_dev_name].name; src_name = dti_entity_name[resp_p->response.ptr_que_percent_data->src_dev_name].name; capability = map_dti_cpblty((U8)resp_p->response.ptr_que_percent_data->capability); #ifdef GPRS if (resp_p->response.ptr_que_percent_data->des_dev_name EQ BAT_DEV_NAME_PKTIO) { des_name = pktioName; } if (resp_p->response.ptr_que_percent_data->src_dev_name EQ BAT_DEV_NAME_PKTIO) { src_name = pktioName; } #endif sprintf (g_sa,"%s: %d,\"%s\",%d,%d,\"%s\",\"%s\",%d,%d,%d", "%DATA", resp_p->response.ptr_que_percent_data->mode, des_name, resp_p->response.ptr_que_percent_data->des_dev_no, resp_p->response.ptr_que_percent_data->des_sub_no, ati_cap_name[capability].name, src_name, resp_p->response.ptr_que_percent_data->src_dev_no, resp_p->response.ptr_que_percent_data->src_sub_no, resp_p->response.ptr_que_percent_data->cid); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPercentDINF(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_CAP_ID capability = DEV_CPBLTY_NONE; T_CAP_ID cur_cap = DEV_CPBLTY_NONE; TRACE_FUNCTION ("Resp_sPercentDINF() IMPLEMENTED but without outputing mode !"); capability = map_dti_cpblty((U8)(resp_p->response.ptr_set_percent_dinf->cap)); cur_cap = map_dti_cpblty((U8)(resp_p->response.ptr_set_percent_dinf->cur_cap)); sprintf (g_sa,"%s:\"%s\",%d,%d,\"%s\",\"%s\"", "%DINF", dti_entity_name[(resp_p->response.ptr_set_percent_dinf->dev_name)].name, resp_p->response.ptr_set_percent_dinf->dev_no, resp_p->response.ptr_set_percent_dinf->sub_no, ati_cap_name[capability].name, ati_cap_name[cur_cap].name /*mode*/); /* dont know how to get mode?? */ /*shd we call qBAT_PercentDINF??*/ io_sendMessage (src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; } int Resp_qPlusDS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusDS()"); resp_disp(src_infos_psi->srcId,NULL,"eels",&resp_p->response.ptr_que_plus_ds->dir, &resp_p->response.ptr_que_plus_ds->neg, &resp_p->response.ptr_que_plus_ds->p1, &resp_p->response.ptr_que_plus_ds->p2); return 0; /* Ok */ } int Resp_qPlusFAP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFAP()"); return 0; /* Ok */ } int Resp_qPlusFBO(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFBO()"); return 0; /* Ok */ } int Resp_qPlusFBS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFBS()"); return 0; /* Ok */ } int Resp_qPlusFBU(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFBU()"); return 0; /* Ok */ } int Resp_qPlusFCC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFCC()"); return 0; /* Ok */ } int Resp_qPlusFCLASS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFCLASS()"); return 0; /* Ok */ } int Resp_qPlusFCQ(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFCQ()"); return 0; /* Ok */ } int Resp_qPlusFCR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFCR()"); return 0; /* Ok */ } int Resp_qPlusFCS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFCS()"); return 0; /* Ok */ } int Resp_qPlusFCT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFCT()"); return 0; /* Ok */ } int Resp_qPlusFEA(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFEA()"); return 0; /* Ok */ } int Resp_qPlusFFC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFFC()"); return 0; /* Ok */ } int Resp_qPlusFHS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFHS()"); return 0; /* Ok */ } int Resp_qPlusFIE(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFIE()"); return 0; /* Ok */ } int Resp_qPlusFIS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFIS()"); return 0; /* Ok */ } int Resp_qPlusFIT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFIT()"); return 0; /* Ok */ } int Resp_qPlusFLI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFLI()"); return 0; /* Ok */ } int Resp_qPlusFLO(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFLO()"); return 0; /* Ok */ } int Resp_qPlusFLP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFLP()"); return 0; /* Ok */ } int Resp_qPlusFMS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFMS()"); return 0; /* Ok */ } int Resp_qPlusFNS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFNS()"); return 0; /* Ok */ } int Resp_qPlusFPA(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFPA()"); return 0; /* Ok */ } int Resp_qPlusFPI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFPI()"); return 0; /* Ok */ } int Resp_qPlusFPS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFPS()"); return 0; /* Ok */ } int Resp_qPlusFPW(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFPW()"); return 0; /* Ok */ } int Resp_qPlusFRQ(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFRQ()"); return 0; /* Ok */ } int Resp_qPlusFSA(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFSA()"); return 0; /* Ok */ } int Resp_qPlusFSP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusFSP()"); sprintf(g_sa,"+FSP:%d",resp_p->response.ptr_que_plus_fsp->poll); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPlusICF(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_BS_FRM format; T_ACI_BS_PAR parity; T_BAT_res_que_plus_icf *icf; TRACE_FUNCTION ("Resp_qPlusICF()"); /* * Get a pointer to the ICF structure for convenience. */ icf=resp_p->response.ptr_que_plus_icf; /* * This relies on T_ACI_BS_FRM being identical to * T_BAT_framing_format and T_ACI_BS_PAR being identical * to T_BAT_framing_parity. */ format=(T_ACI_BS_FRM)icf->framing_format; parity=(T_ACI_BS_PAR)icf->framing_parity; if ((format==BS_FRM_Dat8_Par1_St1) || (format==BS_FRM_Dat7_Par1_St1)) resp_disp(src_infos_psi->srcId,NULL,"ee",&format,&parity); else resp_disp(src_infos_psi->srcId,NULL,"e",&format); return 0; /* Ok */ } int Resp_qPlusIFC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusIFC()"); sprintf(g_sa,"+IFC: %d,%d", resp_p->response.ptr_que_plus_ifc->by_te, resp_p->response.ptr_que_plus_ifc->by_ta); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentIMEI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentIMEI()"); sprintf ( g_sa, "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", (resp_p->response.ptr_que_percent_imei->tac1 >> 4) & 0x0F, resp_p->response.ptr_que_percent_imei->tac1 & 0x0F, (resp_p->response.ptr_que_percent_imei->tac2 >> 4) & 0x0F, resp_p->response.ptr_que_percent_imei->tac2 & 0x0F, (resp_p->response.ptr_que_percent_imei->tac3 >> 4) & 0x0F, resp_p->response.ptr_que_percent_imei->tac3 & 0x0F, (resp_p->response.ptr_que_percent_imei->fac >> 4) & 0x0F, resp_p->response.ptr_que_percent_imei->fac & 0x0F, (resp_p->response.ptr_que_percent_imei->snr1 >> 4) & 0x0F, resp_p->response.ptr_que_percent_imei->snr1 & 0x0F, (resp_p->response.ptr_que_percent_imei->snr2 >> 4) & 0x0F, resp_p->response.ptr_que_percent_imei->snr2 & 0x0F, (resp_p->response.ptr_que_percent_imei->snr3 >> 4) & 0x0F, resp_p->response.ptr_que_percent_imei->snr3 & 0x0F, resp_p->response.ptr_que_percent_imei->cd, (resp_p->response.ptr_que_percent_imei->svn >> 4) & 0x0F, resp_p->response.ptr_que_percent_imei->svn & 0x0F ); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT ); return 0; /* Ok */ } int Resp_qPlusIPR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { int rate_value; TRACE_FUNCTION ("Resp_qPlusIPR()"); switch (resp_p->response.ptr_que_plus_ipr->rate) { case BD_RATE_75: rate_value = 75; break; case BD_RATE_150: rate_value = 150; break; case BD_RATE_300: rate_value = 300; break; case BD_RATE_600: rate_value = 600; break; case BD_RATE_1200: rate_value = 1200; break; case BD_RATE_2400: rate_value = 2400; break; case BD_RATE_4800: rate_value = 4800; break; case BD_RATE_7200: rate_value = 7200; break; case BD_RATE_9600: rate_value = 9600; break; case BD_RATE_14400: rate_value = 14400; break; case BD_RATE_19200: rate_value = 19200; break; case BD_RATE_28800: rate_value = 28800; break; case BD_RATE_33900: rate_value = 33900; break; case BD_RATE_38400: rate_value = 38400; break; case BD_RATE_57600: rate_value = 57600; break; case BD_RATE_115200: rate_value = 115200; break; case BD_RATE_203125: rate_value = 203125; break; case BD_RATE_406250: rate_value = 406250; break; case BD_RATE_812500: rate_value = 812500; break; default: rate_value = 0; break; } sprintf(g_sa,"+IPR: %d", rate_value); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentPBCF(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR *me="%PBCF: "; TRACE_FUNCTION ("Resp_qPercentPBCF()"); sprintf(g_sa,"%s%d, %d, %d", me, resp_p->response.ptr_que_percent_pbcf->ldn, resp_p->response.ptr_que_percent_pbcf->lrn, resp_p->response.ptr_que_percent_pbcf->lmn); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentPPP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentPPP()"); #define IPADDR_BYTE(b, a) (((a) >> ((b) * 8)) & 0xff) sprintf(g_sa, "%%PPP: %u.%u.%u.%u,%u.%u.%u.%u,%u.%u.%u.%u", IPADDR_BYTE(3, resp_p->response.ptr_que_percent_ppp->ipaddr), IPADDR_BYTE(2, resp_p->response.ptr_que_percent_ppp->ipaddr), IPADDR_BYTE(1, resp_p->response.ptr_que_percent_ppp->ipaddr), IPADDR_BYTE(0, resp_p->response.ptr_que_percent_ppp->ipaddr), IPADDR_BYTE(3, resp_p->response.ptr_que_percent_ppp->dns1), IPADDR_BYTE(2, resp_p->response.ptr_que_percent_ppp->dns1), IPADDR_BYTE(1, resp_p->response.ptr_que_percent_ppp->dns1), IPADDR_BYTE(0, resp_p->response.ptr_que_percent_ppp->dns1), IPADDR_BYTE(3, resp_p->response.ptr_que_percent_ppp->dns2), IPADDR_BYTE(2, resp_p->response.ptr_que_percent_ppp->dns2), IPADDR_BYTE(1, resp_p->response.ptr_que_percent_ppp->dns2), IPADDR_BYTE(0, resp_p->response.ptr_que_percent_ppp->dns2)) ; io_sendMessage (src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentPVRF(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_que_percent_pvrf *pvrf; CHAR *me="%PVRF: "; TRACE_FUNCTION ("Resp_qPercentPVRF()"); /* * Get a pointer to the PVRF structure for convenience. */ pvrf=resp_p->response.ptr_que_percent_pvrf; sprintf(g_sa,"%s%d, %d, %d, %d, %d, %d", me, pvrf->pn1cnt, pvrf->pn2cnt, pvrf->pk1cnt, pvrf->pk2cnt, pvrf->ps1, pvrf->ps2); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_qPercentRDL(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentRDL() "); resp_disp (src_infos_psi->srcId, NULL,"b",&resp_p->response.ptr_que_percent_rdl->mode); return 0; /* Ok */ } int Resp_qPercentRDLB(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR number[MAX_CC_CALLED_NUMBER+1]; UBYTE i,j; USHORT pos = 0; TRACE_FUNCTION ("Resp_qPercentRDLB() "); memset(number,0,MAX_CC_CALLED_NUMBER+1); // resp_disp (srcId, cl,"b", &usr_notif); /* output user notification state */ for(i=0; i<resp_p->response.ptr_que_percent_rdlb->c_number; i++) /* output black list */ { for(j=0; j<resp_p->response.ptr_que_percent_rdlb->c_number; j++) { resp_p->response.ptr_que_percent_rdlb->number[j] = (resp_p->response.ptr_que_percent_rdlb->number[j] | 0x30); } utl_binToHex(resp_p->response.ptr_que_percent_rdlb->number, resp_p->response.ptr_que_percent_rdlb->c_number, number); pos=sprintf(g_sa,"%s:\"%s\",%d","%RDLB",number, (int)resp_p->response.ptr_que_percent_rdlb->type); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); } return 0; /* Ok */ } #ifdef SIM_TOOLKIT int Resp_qPercentSATC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { UBYTE i; TRACE_FUNCTION ("Resp_qPercentSATC()"); i=sprintf(g_sa,"%s: %d,", "%SATC", sat[src_infos_psi->srcId]); if (resp_p->response.ptr_que_percent_satc->c_satprfl) { utl_binToHex( resp_p->response.ptr_que_percent_satc->satprfl, resp_p->response.ptr_que_percent_satc->c_satprfl, g_sa +i ); } i+=resp_p->response.ptr_que_percent_satc->c_satprfl*2; g_sa[i++]='"'; g_sa[i]='\0'; ci_remTrailCom(g_sa,(USHORT)strlen(g_sa)); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } #endif /* SIM_TOOLKIT */ #ifdef GPRS int Resp_qPercentSNCNT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPercentSNCNT() "); rCI_PercentSNCNT ((UBYTE)resp_p->response.ptr_uns_percent_sncnt->cid, resp_p->response.ptr_uns_percent_sncnt->oct_up, resp_p->response.ptr_uns_percent_sncnt->oct_down, resp_p->response.ptr_uns_percent_sncnt->pkt_up, resp_p->response.ptr_uns_percent_sncnt->pkt_down); return 0; /* Ok */ } #endif /* GPRS */ int Resp_qPlusWS46(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_qPlusWS46() "); resp_disp(src_infos_psi->srcId, NULL,"e", &resp_p->response.ptr_que_plus_ws46->n); return 0; /* Ok */ } int Resp_qPlusCLCC(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { SHORT pos = 0; char *me = "+CLCC: "; USHORT lenCvtdAlpha = 0; CHAR number[BAT_MAX_CLCC_NUMBER_LEN + 1]; TRACE_FUNCTION ("Resp_qPlusCLCC() "); /* Call info is sent at a time, this flag will mark the start and end of this call list */ if(CLCC_flag == FALSE) CLCC_flag = TRUE; if(resp_p->response.ptr_que_plus_clcc->idx EQ ACI_NumParmNotPresent) return 0; pos = sprintf(g_sa,"%s%d", me, resp_p->response.ptr_que_plus_clcc->idx); if (resp_p->response.ptr_que_plus_clcc->dir NEQ CLCC_DIR_NotPresent) pos += sprintf(g_sa+pos,",%d",resp_p->response.ptr_que_plus_clcc->dir); else pos += sprintf(g_sa+pos,","); if (resp_p->response.ptr_que_plus_clcc->stat NEQ CLCC_STAT_NotPresent) pos += sprintf(g_sa+pos,",%d",resp_p->response.ptr_que_plus_clcc->stat); else pos += sprintf(g_sa+pos,","); if (resp_p->response.ptr_que_plus_clcc->mode NEQ CLCC_MODE_NotPresent) pos += sprintf(g_sa+pos,",%d",resp_p->response.ptr_que_plus_clcc->mode); else pos += sprintf(g_sa+pos,","); if (resp_p->response.ptr_que_plus_clcc->mpty NEQ CLCC_MPTY_NotPresent) pos += sprintf(g_sa+pos,",%d",resp_p->response.ptr_que_plus_clcc->mpty); else pos += sprintf(g_sa+pos,","); if (resp_p->response.ptr_que_plus_clcc->number[0] NEQ 0x0) { utl_binToHex(resp_p->response.ptr_que_plus_clcc->number, resp_p->response.ptr_que_plus_clcc->c_number, number); pos += sprintf(g_sa+pos,",\"%s\",%d",number,(int)(resp_p->response.ptr_que_plus_clcc->type)); } #ifdef NO_ASCIIZ /* Need to add other struct ?! */ /* if (resp_p->response.ptr_que_plus_clcc->c_alpha.len NEQ 0x0) { pos += sprintf(g_sa+pos,","); utl_chsetFromGsm ( resp_p->response.ptr_que_plus_clcc->alpha.data, resp_p->response.ptr_que_plus_clcc->alpha.len, (UBYTE*)cvtdAlpha, sizeof(cvtdAlpha), &lenCvtdAlpha, GSM_ALPHA_Def ); pos += sprints ( g_sa + pos, cvtdAlpha, lenCvtdAlpha ); } */ #else /* #ifdef NO_ASCIIZ */ if (resp_p->response.ptr_que_plus_clcc->alpha[0] NEQ 0x0) { pos += sprintf(g_sa+pos,","); utl_chsetFromGsm ( (UBYTE*)resp_p->response.ptr_que_plus_clcc->alpha, 0, (UBYTE*)cvtdAlpha, sizeof(cvtdAlpha), &lenCvtdAlpha, GSM_ALPHA_Int ); pos += sprints ( g_sa + pos, cvtdAlpha, lenCvtdAlpha ); } #endif /* #ifdef NO_ASCIIZ */ ci_remTrailCom(g_sa, pos); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_uPlusCBM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_MMI_CBCH_IND mmi_cbch_ind ; TRACE_FUNCTION ("Resp_uPlusCBM() "); mmi_cbch_ind.cbch_len = resp_p->response.ptr_res_plus_cbm->c_pdu; memcpy(resp_p->response.ptr_res_plus_cbm->pdu, mmi_cbch_ind.cbch_msg, resp_p->response.ptr_res_plus_cbm->c_pdu); return 0; /* Ok */ } int Resp_uPlusCBMI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCBMI() not implemented"); return 0; /* Ok */ } int Resp_uPercentCCBS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_CCBS_IND ind; T_ACI_CCBS_STAT status; T_ACI_CCBS_SET setting; T_BAT_res_uns_percent_ccbs *ccbs; TRACE_FUNCTION ("Resp_uPercentCCBS()"); /* * Get a pointer to the CCBS structure for convenience. */ ccbs=resp_p->response.ptr_res_percent_ccbs; /* * This relies on T_ACI_CCBS_IND being identical to * T_BAT_percent_ccbs_ind and T_ACI_CCBS_STAT being identical * to T_BAT_percent_ccbs_stat. */ ind=(T_ACI_CCBS_IND)ccbs->ind; status=(T_ACI_CCBS_STAT)ccbs->stat; /* * The main reason for zeroing this memory is to ensure we * end up with zero-terminated 'number' and 'subaddress' * strings. */ memset(&setting,0,sizeof(T_ACI_CCBS_SET)); setting.idx=(SHORT)ccbs->idx; if ((ccbs->v_number==TRUE) && (ccbs->c_number<MAX_B_SUBSCR_NUM_LEN)) memcpy(setting.number,ccbs->number,ccbs->c_number); setting.type=toa_demerge((SHORT)ccbs->type); if ((ccbs->v_subaddr==TRUE) && (ccbs->c_subaddr<MAX_SUBADDR_LEN)) memcpy(setting.subaddr,ccbs->subaddr,ccbs->c_subaddr); setting.satype=tos_demerge((SHORT)ccbs->satype); /* * This relies on T_ACI_CLASS being identical to T_BAT_bearer_class * and T_ACI_ALRT_PATTERN being identical to T_BAT_percent_ccbs_ptn. */ setting.class_type=(T_ACI_CLASS)ccbs->bearer_class; setting.alrtPtn=(T_ACI_ALRT_PTRN)ccbs->ptn; rCI_PercentCCBS(ind,status,&setting,FALSE); return 0; /* Ok */ } int Resp_uPlusCCCM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCCCM()"); rCI_PlusCCCM(&resp_p->response.ptr_res_plus_cccm->ccm); return 0; /* Ok */ } int Resp_uPercentCCCN(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_fac_inf fie; TRACE_FUNCTION ("Resp_uPercentCCCN() "); fie.l_fac = resp_p->response.ptr_res_percent_cccn->c_facility; memcpy(fie.fac,resp_p->response.ptr_res_percent_cccn->facility, fie.l_fac); rCI_PercentCCCN((T_ACI_FAC_DIR)resp_p->response.ptr_res_percent_cccn->direction, (SHORT)resp_p->response.ptr_res_percent_cccn->cid, &fie ); return 0; /* Ok */ } int Resp_uPlusCCWA(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_CLSSTAT clsStat; T_ACI_TOA type ; CHAR number[BAT_MAX_CCWA_NUMBER_LEN+1]; #ifdef NO_ASCIIZ T_ACI_PB_TEXT alpha_text ; #else CHAR * p_alpha; CHAR alpha[BAT_MAX_CCWA_NUMBER_LEN+1]; #endif TRACE_FUNCTION ("Resp_uPlusCCWA()"); clsStat.class_type = resp_p->response.ptr_res_plus_ccwa->bearer_class; clsStat.status = STATUS_NotPresent;/*response structure has no info abt sttus*/ /* utl_binToHex(resp_p->response.ptr_res_plus_ccwa->number, (SHORT)resp_p->response.ptr_res_plus_ccwa->c_number, number); */ memcpy(number, resp_p->response.ptr_res_plus_ccwa->number, (SHORT)resp_p->response.ptr_res_plus_ccwa->c_number); type = toa_demerge((SHORT)resp_p->response.ptr_res_plus_ccwa->type); #ifdef NO_ASCIIZ alpha_text.len = resp_p->response.ptr_res_plus_ccwa->c_alpha; memcpy(alpha_text.data, resp_p->response.ptr_res_plus_ccwa->alpha, alpha_text.len); rCI_PlusCCWA(resp_p->response.ptr_res_plus_ccwa->bearer_class EQ BAT_CCWA_CLASS_NOT_PRESENT ? NULL : &clsStat, number, &type, (U8)resp_p->response.ptr_res_plus_ccwa->cli, (T_ACI_CLASS)resp_p->response.ptr_res_plus_ccwa->bearer_class, alpha_text.len ? &alpha_text : NULL); #else p_alpha = alpha; if(resp_p->response.ptr_res_plus_ccwa.->v_alpha) { utl_binToHex(resp_p->response.ptr_res_plus_ccwa->alpha, (SHORT)resp_p->response.ptr_res_plus_ccwa->c_alpha, alpha); } else { p_alpha = NULL; } rCI_PlusCCWA(resp_p->response.ptr_res_plus_ccwa->bearer_class EQ BAT_CCWA_CLASS_NOT_PRESENT ? NULL : &clsStat, number, &type, (U8)resp_p->response.ptr_res_plus_ccwa->cli, (T_ACI_CLASS)resp_p->response.ptr_res_plus_ccwa->bearer_class, p_alpha); #endif return 0; /* Ok */ } int Resp_uPlusCCWA_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCCWA_W() Not Implemented"); return 0; /* Ok */ } int Resp_uPlusCCWE(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCCWE() contains bat dummy out put nothing"); return 0; /* Ok */ } int Resp_uPlusCDIP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_uns_plus_cdip *cdip; CHAR number[BAT_MAX_CDIP_NUMBER_LEN+1]; T_ACI_TOA type; CHAR *sub_ptr; CHAR subaddr[BAT_MAX_SUBADDR_LENGTH+1]; T_ACI_TOS *satype_ptr; T_ACI_TOS satype; TRACE_FUNCTION ("Resp_uPlusCDIP()"); sub_ptr=NULL; satype_ptr=NULL; /* * Get a pointer to the CDIP structure for convenience. */ cdip = (T_BAT_res_uns_plus_cdip *)resp_p->response.ptr_res_plus_cdip; memset(number,0,sizeof(number)); memcpy(number,cdip->number,BAT_MAX_CDIP_NUMBER_LEN); type=toa_demerge(cdip->type); if (cdip->v_subaddr) { memset(subaddr,0,sizeof(subaddr)); memcpy(subaddr,cdip->subaddr,BAT_MAX_SUBADDR_LENGTH); sub_ptr=subaddr; satype=tos_demerge(cdip->satype); satype_ptr=&satype; } rCI_PlusCDIP(number, &type, sub_ptr, satype_ptr); return 0; /* Ok */ } int Resp_uPlusCDS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_MNSMS_STATUS_IND mnsms_status_ind; TRACE_FUNCTION ("Resp_uPlusCDS()"); mnsms_status_ind.sms_sdu.l_buf = resp_p->response.ptr_res_plus_cds->c_pdu; memcpy(mnsms_status_ind.sms_sdu.buf,resp_p->response.ptr_res_plus_cds->pdu, resp_p->response.ptr_res_plus_cds->c_pdu); rCI_PlusCDSPdu(&mnsms_status_ind); return 0; /* Ok */ } #ifdef GPRS int Resp_uPercentCGEV(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_CGEREP_EVENT event; T_CGEREP_EVENT_REP_PARAM param; T_BAT_res_uns_percent_cgev *cgev; TRACE_FUNCTION ("Resp_uPercentCGEV()"); /* * Get a pointer to the CGEV structure for convenience. */ cgev=resp_p->response.ptr_res_percent_cgev; memset(¶m,0,sizeof(param)); /* * This relies on T_CGEREP_EVENT being identical to * T_BAT_percent_cgev_evt. */ event=(T_CGEREP_EVENT)cgev->evt; switch (event) { case CGEREP_EVENT_REJECT: if (cgev->v_pdp_addr==TRUE) { if (cgev->c_pdp_addr<MAX_PDP_ADDR_LEN) memcpy(param.reject.pdp_addr,cgev->pdp_addr,cgev->c_pdp_addr); } break; case CGEREP_EVENT_NW_CLASS: case CGEREP_EVENT_ME_CLASS: /* * This relies on T_PERCENT_CGCLASS being identical to * T_BAT_p_mobile_class. */ param.mobile_class=(T_PERCENT_CGCLASS)cgev->p_mobile_class; break; case CGEREP_EVENT_NW_REACT: case CGEREP_EVENT_NW_DEACT: case CGEREP_EVENT_ME_DEACT: case CGEREP_EVENT_NW_ACT: case CGEREP_EVENT_ME_ACT: if (cgev->v_pdp_addr==TRUE) { if (cgev->c_pdp_addr<MAX_PDP_ADDR_LEN) memcpy(param.act.pdp_addr,cgev->pdp_addr,cgev->c_pdp_addr); } param.act.cid=(SHORT)cgev->cid; break; default: break; } rCI_PercentCGEV(event,¶m); return 0; /* Ok */ } int Resp_uPlusCGEV(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCGEV() Not Implemented no res plus cgev structure filler found"); return 0; /* Ok */ } int Resp_uPercentCGREG(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_P_CGREG_STAT stat; USHORT lac; USHORT ci; T_BAT_res_uns_percent_cgreg *cgreg; TRACE_FUNCTION ("Resp_uPercentCGREG()"); /* * Get a pointer to the CGREG structure for convenience. */ cgreg=resp_p->response.ptr_res_percent_cgreg; stat=(T_P_CGREG_STAT)cgreg->stat; lac=(USHORT)cgreg->lac; ci=(USHORT)cgreg->ci; rCI_PercentCGREG(stat,lac,ci,FALSE); return 0; /* Ok */ } int Resp_uPlusCGREG(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCGREG()"); rCI_PlusCGREG((T_CGREG_STAT)resp_p->response.ptr_res_plus_cgreg->stat, (USHORT)resp_p->response.ptr_res_plus_cgreg->lac, (USHORT)resp_p->response.ptr_res_plus_cgreg->ci ); return 0; /* Ok */ } #endif /* GPRS */ int Resp_uPlusCLAE(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_uns_plus_clae *clae; T_ACI_LAN_SUP lang; CHAR code[BAT_MAX_CLAE_CODE_LEN+1]; TRACE_FUNCTION ("Resp_uPlusCLAE()"); /* * Get a pointer to the CLAE structure for convenience. */ clae=resp_p->response.ptr_res_plus_clae; memset(code,0,sizeof(code)); memcpy(code,clae->code,clae->c_code); /* * NB rCI_PlusCLAE only cares about the code string, so * we don't need to populate 'lang' any further than this. */ lang.str=code; rCI_PlusCLAE(&lang); return 0; /* Ok */ } int Resp_uPlusCLAV(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR code[BAT_MAX_CLAV_CODE_LEN + 1]; TRACE_FUNCTION ("Resp_uPlusCLAV() recheck"); utl_binToHex(resp_p->response.ptr_res_plus_clav->code, (SHORT)resp_p->response.ptr_res_plus_clav->c_code, code) ; sprintf(g_sa,"+CLAN: %s",code); io_sendMessage(src_infos_psi->srcId,g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_uPlusCLIP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_uns_plus_clip *clip; CHAR number[BAT_MAX_CLIP_NUMBER_LEN+1]; T_ACI_TOA type; U8 validity; CHAR *sub_ptr; CHAR subaddr[BAT_MAX_SUBADDR_LENGTH+1]; T_ACI_TOS *satype_ptr; T_ACI_TOS satype; #ifdef NO_ASCIIZ T_ACI_PB_TEXT *alpha_ptr; T_ACI_PB_TEXT alpha; #else CHAR *alpha_ptr; CHAR alpha[BAT_MAX_PHB_NUM_LEN+1]; #endif TRACE_FUNCTION ("Resp_uPlusCLIP()"); sub_ptr=NULL; satype_ptr=NULL; alpha_ptr=NULL; /* * Get a pointer to the CLIP structure for convenience. */ clip=resp_p->response.ptr_res_plus_clip; memset(number,0,sizeof(number)); memcpy(number,clip->number,BAT_MAX_CLIP_NUMBER_LEN); type=toa_demerge(clip->type); if (clip->v_subaddr) { memset(subaddr,0,sizeof(subaddr)); memcpy(subaddr,clip->subaddr,BAT_MAX_SUBADDR_LENGTH); sub_ptr=subaddr; satype=tos_demerge(clip->satype); satype_ptr=&satype; } if (clip->v_alpha) { #ifdef NO_ASCIIZ memcpy(alpha.data,clip->alpha,MAX_PHB_NUM_LEN); if (clip->c_alpha>MAX_PHB_NUM_LEN) alpha.len=MAX_PHB_NUM_LEN; else alpha.len=clip->c_alpha; alpha.cs=CS_NotPresent; alpha_ptr=α #else memset(alpha,0,sizeof(alpha)); memcpy(alpha,clip->alpha,BAT_MAX_PHB_NUM_LEN); alpha_ptr=alpha; #endif } validity=(U8)clip->cli; rCI_PlusCLIP( CLIP_STAT_NotPresent, /* <=== not always true, but BAT does not provide status infromation */ number, &type, validity, sub_ptr, satype_ptr, alpha_ptr); return 0; /* Ok */ } int Resp_uPlusCLIP_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCLIP_W() Not Implemented"); return 0; /* Ok */ } int Resp_uPlusCMT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_MNSMS_MESSAGE_IND mnsms_message_ind; T_BAT_res_uns_plus_cmt *cmt; TRACE_FUNCTION ("Resp_uPlusCMT()"); /* * Get a pointer to the CMT structure for convenience. */ cmt=resp_p->response.ptr_res_plus_cmt; /* * Check that the received BAT message is not too big. If it is, * we discard it. */ if (cmt->c_pdu>SIM_PDU_LEN) { TRACE_EVENT("BAT CMT too big"); } else { /* * Set up the bits of mnsms_message_ind that are used by * rCI_PlusCMT(). */ memcpy(&mnsms_message_ind.sms_sdu.buf,cmt->pdu,cmt->c_pdu); mnsms_message_ind.sms_sdu.l_buf=cmt->c_pdu<<3; mnsms_message_ind.sms_sdu.o_buf=0; /* * This is not part of the BAT response, so choose a sensible * value. */ mnsms_message_ind.status=REC_UNREAD; rCI_PlusCMT(&mnsms_message_ind); } return 0; /* Ok */ } int Resp_uPlusCMTI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCMTI() "); rCI_PlusCMTI((T_ACI_SMS_STOR)resp_p->response.ptr_res_plus_cmti->sms_mem, (UBYTE)resp_p->response.ptr_res_plus_cmti->sms_index); return 0; /* Ok */ } int Resp_uPlusCMT_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCMT_W() Not Implemented"); return 0; /* Ok */ } int Resp_uPercentCNAP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { CHAR name[BAT_MAX_CNAP_NAME_LEN + 1]; UBYTE pos = 0; TRACE_FUNCTION ("Resp_uPercentCNAP() Not implemented"); if(resp_p->response.ptr_res_percent_cnap->v_name) { utl_binToHex(resp_p->response.ptr_res_percent_cnap->name, (SHORT)resp_p->response.ptr_res_percent_cnap->c_name, name) ; } pos += sprintf(g_sa+pos,"%s%d", "%CNAP: ", resp_p->response.ptr_res_percent_cnap->pres_mode); if(resp_p->response.ptr_res_percent_cnap->v_name) { pos += sprintf(g_sa+pos,",%hd,", resp_p->response.ptr_res_percent_cnap->dcs); switch(resp_p->response.ptr_res_percent_cnap->pres_mode) { case BAT_P_CNAP_PRES_NAME: case BAT_P_CNAP_PRES_NAME_RESTRICTED: { TRACE_EVENT("CNAP: name presentation is allowed or restrcited"); pos += sprintf(g_sa+pos,"%d,\"%s\"", resp_p->response.ptr_res_percent_cnap->c_name), resp_p->response.ptr_res_percent_cnap->name; break; } case BAT_P_CNAP_PRES_RESTRICTED: case BAT_P_CNAP_PRES_NO_NAME: { TRACE_EVENT("CNAP: presentation is restricted or no name"); break; } default: { TRACE_ERROR("CNAP: wrong presentation mode"); } } } io_sendIndication(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT ); return 0; /* Ok */ } int Resp_uPlusCOLP(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_uns_plus_colp *colp; CHAR *num_ptr; CHAR number[BAT_MAX_COLP_NUMBER_LEN+1]; T_ACI_TOA *type_ptr; T_ACI_TOA type; CHAR *sub_ptr; CHAR subaddr[BAT_MAX_SUBADDR_LENGTH+1]; T_ACI_TOS *satype_ptr; T_ACI_TOS satype; #ifdef NO_ASCIIZ T_ACI_PB_TEXT *alpha_ptr; T_ACI_PB_TEXT alpha; #else CHAR *alpha_ptr; CHAR alpha[BAT_MAX_COLP_ALPHA_LEN+1]; #endif TRACE_FUNCTION ("Resp_uPlusCOLP()"); num_ptr=NULL; type_ptr=NULL; sub_ptr=NULL; satype_ptr=NULL; alpha_ptr=NULL; /* * Get a pointer to the COLP structure for convenience. */ colp=resp_p->response.ptr_res_plus_colp; if (colp->v_number) { memset(number,0,sizeof(number)); memcpy(number,colp->number,BAT_MAX_COLP_NUMBER_LEN); num_ptr=number; type=toa_demerge(colp->type); type_ptr=&type; } if (colp->v_subaddr) { memset(subaddr,0,sizeof(subaddr)); memcpy(subaddr,colp->subaddr,BAT_MAX_SUBADDR_LENGTH); sub_ptr=subaddr; satype=tos_demerge(colp->satype); satype_ptr=&satype; } if (colp->v_alpha) { #ifdef NO_ASCIIZ memcpy(alpha.data,colp->alpha,MAX_PHB_NUM_LEN); if (colp->c_alpha>MAX_PHB_NUM_LEN) alpha.len=MAX_PHB_NUM_LEN; else alpha.len=colp->c_alpha; alpha.cs=CS_NotPresent; alpha_ptr=α #else memset(alpha,0,sizeof(alpha)); memcpy(alpha,colp->alpha,BAT_MAX_COLP_ALPHA_LEN); alpha_ptr=alpha; #endif } rCI_PlusCOLP( COLP_STAT_NotPresent, num_ptr, type_ptr, sub_ptr, satype_ptr, alpha_ptr); return 0; /* Ok */ } int Resp_uPlusCOLP_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCOLP_W() Not Implemented"); return 0; /* Ok */ } int Resp_uPercentCPI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_uns_percent_cpi *cpi; SHORT cId; T_ACI_CPI_MSG msgType; T_ACI_CPI_IBT ibt; T_ACI_CPI_TCH tch; USHORT cause; TRACE_FUNCTION ("Resp_uPercentCPI()"); /* * Get a pointer to the CPI structure for convenience. */ cpi=resp_p->response.ptr_res_percent_cpi; cId=(SHORT)cpi->cid; /* * This relies on T_ACI_CPI_MSG being equivalent to * T_BAT_percent_cpi_msgtype. */ msgType=(T_ACI_CPI_MSG)cpi->msgtype; /* * This relies on T_ACI_CPI_IBT being equivalent to * T_BAT_percent_cpi_ibt. */ ibt=(T_ACI_CPI_IBT)cpi->ibt; /* * This relies on T_ACI_CPI_TCH being equivalent to * T_BAT_percent_cpi_tch. */ tch=(T_ACI_CPI_TCH)cpi->tch; cause=(USHORT)cpi->cause; rCI_PercentCPI(cId,msgType,ibt,tch,cause); return 0; /* Ok */ } int Resp_uPercentCPI_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentCPI_W() not implemented"); return 0; /* Ok */ } int Resp_uPercentCPRI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_uns_percent_cpri *cpri; TRACE_FUNCTION ("Resp_uPercentCPRI()"); /* * Get a pointer to the CPRI structure for convenience. */ cpri=resp_p->response.ptr_res_percent_cpri; rCI_PercentCPRI((UBYTE)cpri->gsm_ciph,(UBYTE)cpri->gprs_ciph); return 0; /* Ok */ } int Resp_uPercentCPROAM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentCPROAM()"); rCI_PercentCPROAM((UBYTE)resp_p->response.ptr_res_percent_cproam->roam_status); return 0; /* Ok */ } int Resp_uPercentCPVWI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentCPVWI() "); rCI_PercentCPVWI((UBYTE)resp_p->response.ptr_res_percent_cpvwi->status, (USHORT)resp_p->response.ptr_res_percent_cpvwi->line); return 0; /* Ok */ } int Resp_uPlusCR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char service[BAT_MAX_CR_SERV_LEN]; T_ACI_CR_SERV serv; TRACE_FUNCTION ("Resp_uPlusCR()"); utl_binToHex(resp_p->response.ptr_res_plus_cr->serv, (SHORT)resp_p->response.ptr_res_plus_cr->c_serv, service); if(!strcmp(service,"ASYNC")) serv=CR_SERV_Async; else if(!strcmp(service,"SYNC")) serv=CR_SERV_Sync; else if(!strcmp(service,"REL ASYNC")) serv=CR_SERV_RelAsync; else if(!strcmp(service,"REL SYNC")) serv=CR_SERV_RelSync; #ifdef GPRS else if(!strcmp(service,"GPRS")) serv=CR_SERV_GPRS; #endif else return 0; rCI_PlusCR( serv); return 0; /* Ok */ } int Resp_uPercentCREG(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_BAT_res_uns_percent_creg *creg; T_ACI_CREG_STAT status; USHORT lac; USHORT cid; T_ACI_P_CREG_GPRS_IND gprs_ind; TRACE_FUNCTION ("Resp_uPercentCREG()"); /* * Get a pointer to the CREG structure for convenience. */ creg=resp_p->response.ptr_res_percent_creg; /* * This relies on T_ACI_CREG_STAT and T_BAT_percent_creg_stat being * identical. */ status=(T_ACI_CREG_STAT)creg->stat; lac=(USHORT)creg->lac; cid=(USHORT)creg->ci; /* * This relies on T_ACI_P_CREG_GPRS_IND and T_BAT_percent_creg_gprs_ind * being identical. */ gprs_ind=(T_ACI_P_CREG_GPRS_IND)creg->gprs_ind; rCI_PercentCREG(status,lac,cid,gprs_ind); return 0; /* Ok */ } int Resp_uPercentCSQ(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentCSQ() "); rCI_PercentCSQ((UBYTE)resp_p->response.ptr_res_percent_csq->rssi, (UBYTE)resp_p->response.ptr_res_percent_csq->ber, (UBYTE)resp_p->response.ptr_res_percent_csq->actlevel); return 0; /* Ok */ } int Resp_uPlusCSSI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCSSI()"); rCI_PlusCSSI((T_ACI_CSSI_CODE)resp_p->response.ptr_res_plus_cssi->code1, (SHORT)resp_p->response.ptr_res_plus_cssi->index); return 0; /* Ok */ } int Resp_uPercentCSSN(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_fac_inf fie; TRACE_FUNCTION ("Resp_uPercentCSSN() "); fie.l_fac = resp_p->response.ptr_res_percent_cssn->c_facility; memcpy(fie.fac,resp_p->response.ptr_res_percent_cssn->facility,BAT_MAX_CSSN_FACILITY_LEN); rCI_PercentCSSN (resp_p->response.ptr_res_percent_cssn->direction, resp_p->response.ptr_res_percent_cssn->trans_type, &fie ); return 0; /* Ok */ } int Resp_uPlusCSSU(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { char *me="+CSSU: "; char number[BAT_MAX_CSSU_NUMBER_LEN+1]; char subaddr[BAT_MAX_SUBADDR_LENGTH+1]; char* p_number; char* p_subaddr; T_ACI_TOA type ; T_ACI_TOS satype ; SHORT pos=0; TRACE_FUNCTION ("Resp_uPlusCSSU()"); p_number = number; p_subaddr = subaddr; type = toa_demerge((SHORT)resp_p->response.ptr_res_plus_cssu->type); satype = tos_demerge((SHORT)resp_p->response.ptr_res_plus_cssu->satype); if(resp_p->response.ptr_res_plus_cssu->v_number) { utl_binToHex(resp_p->response.ptr_res_plus_cssu->number, (SHORT)resp_p->response.ptr_res_plus_cssu->c_number, number); } else p_number = NULL; if(resp_p->response.ptr_res_plus_cssu->v_subaddr) { utl_binToHex(resp_p->response.ptr_res_plus_cssu->subaddr, (SHORT)resp_p->response.ptr_res_plus_cssu->c_subaddr, subaddr); } else p_subaddr=NULL; rCI_PlusCSSU((T_ACI_CSSU_CODE)resp_p->response.ptr_res_plus_cssu->code2, (SHORT)resp_p->response.ptr_res_plus_cssu->index, p_number, &type, p_subaddr, &satype) ; return 0; /* Ok */ } int Resp_uPercentCSTAT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { SHORT pos = 0; TRACE_FUNCTION ("Resp_uPercentCSTAT() "); pos = sprintf(g_sa,"%s: ","%CSTAT"); switch(resp_p->response.ptr_res_percent_cstat->entity_id) { case BAT_P_CSTAT_ENT_ID_PBOOK: pos += sprintf(g_sa+pos,"PHB, %d",resp_p->response.ptr_res_percent_cstat->status); break; case BAT_P_CSTAT_ENT_ID_SMS : pos += sprintf(g_sa+pos,"SMS, %d",resp_p->response.ptr_res_percent_cstat->status); break; case BAT_P_CSTAT_ENT_ID_RDY : pos += sprintf(g_sa+pos,"RDY, %d",resp_p->response.ptr_res_percent_cstat->status); break; default: return 0; } #ifndef _SIMULATION_ /* SKA: a lot of test cases do not expect %CSTAT: xxx unsolicited responses */ io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); #endif return 0; /* Ok */ } int Resp_uPercentCTYI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentCTYI()"); rCI_PercentCTYI ((T_ACI_CTTY_NEG)resp_p->response.ptr_res_percent_ctyi->neg, (T_ACI_CTTY_TRX)resp_p->response.ptr_res_percent_ctyi->trx); return 0; /* Ok */ } int Resp_uPlusCTZR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCTZR()"); sprintf(g_sa,"+CTZR: %d", resp_p->response.ptr_res_plus_ctzr->tz); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_uPercentCTZV(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_MMR_INFO_IND mmr_info_ind; TRACE_FUNCTION ("Resp_uPercentCTZV() "); mmr_info_ind.time.year = resp_p->response.ptr_res_percent_ctzv->year; mmr_info_ind.time.month = resp_p->response.ptr_res_percent_ctzv->month; mmr_info_ind.time.day = resp_p->response.ptr_res_percent_ctzv->day; mmr_info_ind.time.hour = resp_p->response.ptr_res_percent_ctzv->hour; mmr_info_ind.time.minute = resp_p->response.ptr_res_percent_ctzv->minutes; mmr_info_ind.time.second = resp_p->response.ptr_res_percent_ctzv->seconds; rCI_PercentCTZV (&mmr_info_ind, (S32)resp_p->response.ptr_res_percent_ctzv->time_zone); return 0; /* Ok */ } int Resp_uPlusCTZV(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCTZV()"); #ifdef FF_TIMEZONE rCI_PlusCTZV((S32)resp_p->response.ptr_res_plus_ctzv->tz); #else rCI_PlusCTZV(&((UBYTE)resp_p->response.ptr_res_plus_ctzv->tz)); #endif return 0; /* Ok */ } int Resp_uPercentCTZV_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentCTZV_W() Not Implemented"); return 0; /* Ok */ } int Resp_uPlusCUSD(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_CUSD_MOD m; T_BAT_res_uns_plus_cusd *cusd; T_ACI_USSD_DATA ussd; SHORT dcs; TRACE_FUNCTION ("Resp_uPlusCUSD()"); /* * Get a pointer to the CUSD structure for convenience. */ cusd=resp_p->response.ptr_res_plus_cusd; /* * If the string isn't valid, just ignore the message. */ if (cusd->v_str==TRUE) { /* * This assumes that T_ACI_CUSD_MOD and * T_BAT_VAL_plus_cusd_m are equivalent. */ m=(T_ACI_CUSD_MOD)cusd->m; dcs=(SHORT)cusd->dcs; /* * Copy in as much data as the ACI structure can take. */ memcpy(ussd.data,cusd->str,MAX_USSD_LEN); /* * Set the length of the data. If there was too much for the * ACI structure then the data will be truncated. */ ussd.len=(cusd->c_str>MAX_USSD_LEN) ? MAX_USSD_LEN:cusd->c_str; rCI_PlusCUSD(m,&ussd,dcs); } return 0; /* Ok */ } int Resp_uPlusCUSD_W(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusCUSD_W() Not implemented"); return 0; /* Ok */ } int Resp_PlusExtError(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusExtError()"); /* * ACI_ERR_CLASS_Ext ("EXT ERROR: ...")is very often set on CMH level, * but on ATI level it is overwritten with plain "ERROR". * Almost all test cases want to see plain "ERROR" only. * There are only 4 test cases, which want to see "EXT ERROR:..." * ACI1220, ACICC044, ACICC074 and ACICC107. Let these 4 FAIL * and all other let PASS by sending a plain "ERROR" */ #ifdef _SIMULATION_ TRACE_EVENT("Resp_uPlusExtError(): overwrite EXT ERROR with plain ERROR to make TAP happy"); io_sendConfirm (src_infos_psi->srcId, cmdAtError(atError), ATI_NORMAL_OUTPUT); #else io_sendConfirm(src_infos_psi->srcId, cmdExtError(resp_p->response.ptr_res_plus_ext_error->err), ATI_ERROR_OUTPUT); #endif return 0; /* Ok */ } int Resp_uPlusFHS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPlusFHS() "); rCI_PlusFHS(resp_p->response.ptr_res_plus_fhs->status); return 0; /* Ok */ } int Resp_uPlusILRR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { LONG val; TRACE_FUNCTION ("Resp_uPlusILRR()"); if ( ati_user_output_cfg[src_infos_psi->srcId].ILRR_stat ) { switch(resp_p->response.ptr_res_plus_ilrr->rate) { case(BAT_ILRR_RATE_300): val= 300; break; case(BAT_ILRR_RATE_1200): val= 1200; break; case(BAT_ILRR_RATE_2400): val= 2400; break; case(BAT_ILRR_RATE_4800): val= 4800; break; case(BAT_ILRR_RATE_9600): val= 9600; break; case(BAT_ILRR_RATE_14400): val=14400; break; case(BAT_ILRR_RATE_19200): val=19200; break; case(BAT_ILRR_RATE_38400): val=38400; break; default: val= 1; break; } sprintf(g_sa,"+ILRR: %d,%d,%d",val,resp_p->response.ptr_res_plus_ilrr->framing_format ,resp_p->response.ptr_res_plus_ilrr->framing_parity); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); } return 0; /* Ok */ } int Resp_uPercentRDL(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentRDL()"); rCI_PercentRDL (resp_p->response.ptr_res_percent_rdl->state ); return 0; /* Ok */ } int Resp_uPercentRDLB(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentRDLB()"); rCI_PercentRDLB(resp_p->response.ptr_res_percent_rdlb->state); return 0; /* Ok */ } #ifdef SIM_TOOLKIT int Resp_uPercentSATA(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentSATA()"); #ifdef FF_SAT_E rCI_PercentSATA(0, /* cId not used */ resp_p->response.ptr_res_percent_sata->redial_timeout, &Addparm); #else /* FF_SAT_E */ rCI_PercentSATA(0, /* cId not used */ resp_p->response.ptr_res_percent_sata->redial_timeout); #endif /* FF_SAT_E */ return 0; /* Ok */ } int Resp_sPercentSATE(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPercentSATE()"); rCI_PercentSATE((SHORT)resp_p->response.ptr_set_percent_sate->c_satrsp, resp_p->response.ptr_set_percent_sate->satrsp); return 0; /* Ok */ } int Resp_uPercentSATI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentSATI()"); rCI_PercentSATI((SHORT)resp_p->response.ptr_res_percent_sati->c_satcmd, resp_p->response.ptr_res_percent_sati->satcmd); return 0; /* Ok */ } int Resp_uPercentSATN(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentSATN()"); /* use SATN_CNTRL_BY_SIM_SS as this is required by the acisat test */ rCI_PercentSATN((SHORT)resp_p->response.ptr_res_percent_satn->c_satcmd, (UBYTE*)resp_p->response.ptr_res_percent_satn->satcmd, SATN_CNTRL_BY_SIM_SS); return 0; /* Ok */ } int Resp_uPercentSIMEF(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { UBYTE n; T_BAT_res_uns_percent_simef *simef; SHORT ef[BAT_MAX_SIMEF_EF_LEN]; /* * Get a pointer to the SIMEF structure for convenience. */ simef=resp_p->response.ptr_res_percent_simef; for (n=0;((n<simef->c_ef) AND (n<BAT_MAX_SIMEF_EF_LEN));n++) { ef[n]=(SHORT)simef->ef[n]; } rCI_PercentSIMEF(ef,(UBYTE)simef->c_ef); return(0); } #endif /* SIM_TOOLKIT */ int Resp_uPercentSIMINS(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { T_ACI_CME_ERR err ; TRACE_FUNCTION ("Resp_uPercentSIMINS()"); switch (resp_p->response.ptr_res_percent_simins->n) { case BAT_P_SIMINS_N_NO_PIN: err =CME_ERR_NotPresent; break; case BAT_P_SIMINS_N_SIM_PIN: err =CME_ERR_SimPinReq; break; case BAT_P_SIMINS_N_SIM_PUK: err=CME_ERR_SimPinReq; break; case BAT_P_SIMINS_N_SIM_FAIL: err=CME_ERR_SimFail; break; case BAT_P_SIMINS_N_SIM_BUSY: err=CME_ERR_SimBusy; break; case BAT_P_SIMINS_N_SIM_WRONG: err=CME_ERR_SimWrong; break; default: err=CME_ERR_Unknown; break; } rCI_PercentSIMINS ( err ) ; return 0; /* Ok */ } int Resp_uPercentSIMREM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_uPercentSIMREM)()"); /* * This relies on T_ACI_SIMREM_TYPE being identical to * T_BAT_percent_simrem_m. */ rCI_PercentSIMREM( (T_ACI_SIMREM_TYPE)resp_p->response.ptr_res_percent_simrem->m); return 0; /* Ok */ } int Resp_sPlusCGMI(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCGMI()"); sprintf(g_sa,"%s",resp_p->response.ptr_set_plus_cgmi->manufacturer); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPlusCGMM(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCGMM()"); sprintf(g_sa,"%s",resp_p->response.ptr_set_plus_cgmm->model); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPlusCGMR(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCGMR()"); sprintf(g_sa,"%s",resp_p->response.ptr_set_plus_cgmr->revision); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_sPlusCGSN(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { TRACE_FUNCTION ("Resp_sPlusCGSN()"); sprintf(g_sa,"%s",resp_p->response.ptr_set_plus_cgsn->sn); io_sendMessage(src_infos_psi->srcId, g_sa, ATI_NORMAL_OUTPUT); return 0; /* Ok */ } int Resp_uPercentSNCNT(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { } int Resp_uAtBusy(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { } int Resp_uAtNoAnswer(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_response *resp_p) { }