FreeCalypso > hg > freecalypso-sw
diff gsm-fw/g23m-aci/aci/aci_bat_cc.c @ 775:eedbf248bac0
gsm-fw/g23m-aci subtree: initial import from LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 12 Oct 2014 01:45:14 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gsm-fw/g23m-aci/aci/aci_bat_cc.c Sun Oct 12 01:45:14 2014 +0000 @@ -0,0 +1,1696 @@ +/* ++----------------------------------------------------------------------------- +| Project : GSM-F&D (8411) +| Modul : ACI_BAT ++----------------------------------------------------------------------------- +| 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 BAT wrapper modul is ... +| ++----------------------------------------------------------------------------- +*/ + +#include "aci_all.h" +#undef FF_ATI +#include "aci_cmh.h" +#include "aci_cmd.h" +#include "aci.h" +#include "aci_bat_cmh.h" /* prototypes of sBAT_,qBAT_,tBAT_ */ +#include "aci_bat.h" +#ifdef _SIMULATION_ +#pragma message(__TODO__"aci_prs.h: EXTERN char *parse(char *b,char *f, ...); of ati_prs.c !") +#endif +#include "aci_prs.h" + +/* implemented in aci_util.c, but prototype in ati_int.h ! Header file cleanup needed ! */ +EXTERN CHAR *strupper (CHAR *s); + +/*================== local functions prototypes =============================*/ + +LOCAL T_ACI_BAT_RSLT aci_bat_call_from_phonebook(T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd); + +LOCAL T_ACI_BAT_RSLT aci_bat_call_with_number (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd); + +LOCAL void aci_bat_chld_mode_mapping (T_BAT_cmd_set_percent_chld* bat_chld_param, + T_ACI_CHLD_MOD *mode); +/*================== local functions ========================================*/ + +/* + * special hint: + * There is hard coded the definition of NO_ASCIIZ (see phb.h, aci.h and aci_cmh.h), + * which means it is always defined regardless what busybe configures. + * So, we never work with NULL terminated strings, + * but with character arrays, which have a length information in addition + * to know how many characters to process. + * In this code there is several times this #ifdef NO_ASCIIZ + * just to go with the current implementation of ACI. + * But NULL terminated strings are not covered ! + */ + +LOCAL void aci_bat_clean_dial_str (char *dial_str, int dial_len) +{ +#define VALID_CHARS "*#+-PpWw" + int i,j,k = 0; + int charLen = sizeof(VALID_CHARS); + char *valChrs = VALID_CHARS; + int match = FALSE; + + for (i=0; i<dial_len; i++) + { + match = FALSE; + if ((dial_str[i] < '0') || (dial_str[i] > 'D')) + { + for (j=0; j<charLen; j++) + { + if (dial_str[i] == valChrs[j]) /* "*#+-PpWw" */ + { + match = TRUE; + break; + } + } + } + else /* "0123456789ABCD" */ + { + match = TRUE; + } + if (match) + { + dial_str[k] = dial_str[i]; + k++; + } + } + if (k < dial_len) + { + dial_str[k] = 0x0; /* is there always 1 byte space for the '\0' ? */ + } +} + + + +LOCAL void aci_bat_check_clir_cug_type (U8 *dial_string, + T_ACI_D_CLIR_OVRD *clir_ovrd, + T_ACI_D_CUG_CTRL *cug_ctrl, + T_ACI_D_TOC *call_type) +{ + if (*dial_string EQ 'i') + { + *clir_ovrd = D_CLIR_OVRD_Supp; + dial_string++; + } + if (*dial_string EQ 'I') + { + *clir_ovrd = D_CLIR_OVRD_Invoc; + dial_string++; + } + if (*dial_string EQ 'g'OR *dial_string EQ 'G') + { + *cug_ctrl = D_CUG_CTRL_Present; + dial_string++; + } + if (*dial_string EQ ';') + { + *call_type = D_TOC_Voice; + } +} + +#define NAME_BUF_LEN 32 + +LOCAL T_ACI_BAT_RSLT aci_bat_call_from_phonebook(T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_bat_aci_client_maintain *bat_client; + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + CHAR *dial_string = NULL; + int i; + S16 index = -1; + S16 pos; + char alpha[NAME_BUF_LEN] = {'\0'}; + U16 lenAlpha = 0; + char cvtdAlpha[NAME_BUF_LEN] = {'\0'}; + U16 lenCvtdAlpha = 0; + char t[MAX_DIAL_LEN-1] = {'\0'}; + char *t_p = NULL; + + T_ACI_PB_STOR mem_stor = PB_STOR_NotPresent; + T_ACI_D_CLIR_OVRD clir_ovrd = D_CLIR_OVRD_Default; + T_ACI_D_CUG_CTRL cug_ctrl = D_CUG_CTRL_NotPresent; + T_ACI_D_TOC call_type = D_TOC_Data; + +#ifdef NO_ASCIIZ + T_ACI_PB_TEXT pbText; +#endif + + TRACE_FUNCTION ("aci_bat_call_from_phonebook()"); + + dial_string = (CHAR*)cmd->params.ptr_at_d->dial_string; + dial_string++; /* skip the already parsed '>'; */ + + if (*dial_string EQ '"') + { + /* call with a given name of phonebook e.g.: ATD>"Doe Joe" */ + dial_string = parse(dial_string,"z", + (LONG)NAME_BUF_LEN, + strlen(dial_string), + dial_string, + &lenAlpha, + alpha); + if (dial_string EQ NULL) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow); + return (ACI_BAT_FAIL); + } + else if (strcspn(dial_string,"iIgG;") NEQ 0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow); + return (ACI_BAT_FAIL); + } +#ifdef NO_ASCIIZ + utl_chsetToSim ((UBYTE*)alpha, lenAlpha, (UBYTE*)cvtdAlpha, &lenCvtdAlpha, GSM_ALPHA_Def); +#else + TRACE_ERROR("NO_ASCIIZ is defined in aci.h, phb.c and aci_cmh.h, so NO support for NULL terminated strings"); +#endif + t_p = cvtdAlpha; + } + else + { + /* call from a specific phonebook entry e.g.: ATD>MT7 */ + if ((toupper(*dial_string)) >= 'A' AND (toupper(*dial_string)) <= 'Z') + { + for (i=0;phb_mem_names[i].name NEQ 0;i++) + { + strupper(dial_string); + if (strncmp(dial_string,phb_mem_names[i].name,2) EQ 0) + { + mem_stor=phb_mem_names[i].stor; + break; + } + else + { + mem_stor=PB_STOR_NotPresent; + } + } + if (mem_stor < 0) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow); + return (ACI_BAT_FAIL); + } + dial_string=dial_string+2; + } + pos=strcspn(dial_string,"iIgG;"); /* determine index */ + if (pos EQ 0 OR pos >= (MAX_DIAL_LEN-1)) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow); + return (ACI_BAT_FAIL); + } + strncpy(t,dial_string,pos); + dial_string=dial_string+pos; + index =(SHORT)atoi(t); + + if(!index OR index > 300) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow); + return (ACI_BAT_FAIL); + } + t_p = NULL; + } + + aci_bat_check_clir_cug_type ((U8*)dial_string, &clir_ovrd, &cug_ctrl, &call_type); + +#ifdef NO_ASCIIZ + if ( t_p NEQ NULL ) + { + pbText.cs = CS_Sim; + pbText.len = (UBYTE)lenCvtdAlpha; + memcpy(pbText.data, t_p, pbText.len); + } + else + { + pbText.cs = CS_NotPresent; + pbText.len = 0; + } + + /* + * Get a pointer to the client information for convenience. + */ + bat_client=&src_infos_psi->bat_client[src_infos_psi->active_client]; + + /* + * Set the flag that indicates that we are waiting for a final + * response to the ATD. + */ + bat_client->atd_live=TRUE; + + ret = (T_ACI_BAT_RSLT)sAT_Dm((T_ACI_CMD_SRC)src_infos_psi->srcId, &pbText, mem_stor, index, clir_ovrd, cug_ctrl, call_type); + + /* + * If the command isn't executing, we can't still be waiting for a + * final response, so clear the flag. + */ + if (ret NEQ ACI_BAT_EXCT) + { + bat_client->atd_live=FALSE; + } + +#else + TRACE_ERROR("NO_ASCIIZ is defined in aci.h, phb.c and aci_cmh.h, so NO support for NULL terminated strings"); +#endif + return (ret); +} + +LOCAL T_ACI_BAT_RSLT aci_bat_call_with_number (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_bat_aci_client_maintain *bat_client; + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + CHAR *dial_string = NULL; + S16 pos; + char t[MAX_DIAL_LEN-1] = {'\0'}; + + T_ACI_D_CLIR_OVRD clir_ovrd = D_CLIR_OVRD_Default; + T_ACI_D_CUG_CTRL cug_ctrl = D_CUG_CTRL_NotPresent; + T_ACI_D_TOC call_type = D_TOC_Data; + + TRACE_FUNCTION ("aci_bat_call_with_number()"); + + dial_string = (CHAR*)cmd->params.ptr_at_d->dial_string; + + pos = strcspn(dial_string,"iIgG;"); /* CLIR, CUG and call type are passed separately to sAT_Dn */ + if (pos >= MAX_DIAL_LEN-1) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow); + return (ACI_BAT_FAIL); + } + if (pos) + { + strncpy(t, dial_string, pos); + dial_string = dial_string + pos; + t[pos]='\0'; + } + else + { + strcpy(t,dial_string); + } + + aci_bat_clean_dial_str (t, sizeof(t)); + + aci_bat_check_clir_cug_type ((U8*)dial_string, &clir_ovrd, &cug_ctrl, &call_type); + + /* + * Get a pointer to the client information for convenience. + */ + bat_client=&src_infos_psi->bat_client[src_infos_psi->active_client]; + + /* + * Set the flag that indicates that we are waiting for a final + * response to the ATD. + */ + bat_client->atd_live=TRUE; + + ret = (T_ACI_BAT_RSLT)sAT_Dn((T_ACI_CMD_SRC)src_infos_psi->srcId, t, clir_ovrd, cug_ctrl, call_type); + + /* + * If the command isn't executing, we can't still be waiting for a + * final response, so clear the flag. + */ + if (ret NEQ ACI_BAT_EXCT) + { + bat_client->atd_live=FALSE; + } + + return (ret); +} + +/* ++-------------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : aci_bat_chld_mode_mapping | ++-------------------------------------------------------------------------+ + + PURPOSE : Maps the CHLD mode passed by BAT application to + appropriate ENUM value +*/ + +LOCAL void aci_bat_chld_mode_mapping (T_BAT_cmd_set_percent_chld* bat_chld_param, + T_ACI_CHLD_MOD *mode) +{ + TRACE_FUNCTION("aci_bat_chld_mode_mapping()"); + + switch(bat_chld_param->n) + { + case (BAT_P_CHLD_N_RELHLDORUDUB): + *mode = CHLD_MOD_RelHldOrUdub; + break; + + case (BAT_P_CHLD_N_RELACTANDACPT): + if ( bat_chld_param->x EQ ((S16)BAT_PARAMETER_NOT_PRESENT) ) + { + *mode = CHLD_MOD_RelActAndAcpt; + } + else + { + *mode = CHLD_MOD_RelActSpec; + } + break; + + case(BAT_P_CHLD_N_HLDACTANDACPT): + if ( bat_chld_param->x EQ ((S16)BAT_PARAMETER_NOT_PRESENT) ) + { + *mode = CHLD_MOD_HldActAndAcpt; + } + else + { + *mode = CHLD_MOD_HldActExc; + } + break; + + case(BAT_P_CHLD_N_ADDHLD): + *mode = CHLD_MOD_AddHld; + break; + + case(BAT_P_CHLD_N_ECT): + *mode = CHLD_MOD_Ect; + break; + + case(BAT_P_CHLD_N_CCBS): + *mode = CHLD_MOD_Ccbs; + break; + + case(BAT_P_CHLD_N_SWAP): + if ( bat_chld_param->x EQ ((S16)BAT_PARAMETER_NOT_PRESENT) ) + { + *mode = CHLD_MOD_RetrieveHoldCall; + } + else + { + *mode = CHLD_MOD_RetrieveHoldCallSpec; + } + break; + + case(BAT_P_CHLD_N_RELANYSPEC): + *mode = CHLD_MOD_RelAnySpec; + break; + + case(BAT_P_CHLD_N_ONLYHOLD): + /* FTA requires an extra mode: Put on hold (without + * accepting automatically waiting or held calls) + */ + *mode = CHLD_MOD_OnlyHold; + break; + + case(BAT_P_CHLD_N_RELDIALCALL): + /* Release dialing call, without dropping current call. */ + *mode = CHLD_MOD_RelDialCall; + break; + + default: + break; + } +} + +/*================== global functions ========================================*/ + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : BAT_D | ++--------------------------------------------------------------------+ + + PURPOSE : dial command for voice, data or USSD + + 1. call from phone book ? --> ATD>"Doe Joe" + 1.a with CUG ON/OFF and/or CLIP ? --> ATD>"Doe Joe"G + 1.b what character set ? + 2 call from specific phone book ? --> ATD>MT7 + 2.a with CUG ON/OFF and/or CLIP ? --> ATD>MT7I + 3. call with number ? --> ATD1234567 + 3.a with CUG ON/OFF and/or CLIP ? --> ATD1234567g + 4. is the call a voice call ? --> ATDxxxxxxxx; <-- semicolon ? + + up to here in general voice or data call is distinguished. + whether the data call is CSD, GPRS or USSD (checked by ksd_xxx() within cmhCC_Dial()) + is handled on CMH level. see cmhCC_Dial() + +*/ +GLOBAL T_ACI_BAT_RSLT BAT_D (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + U8 *dial_string = NULL; + TRACE_FUNCTION ("BAT_D()"); + + if (cmd->params.ptr_at_d->c_dial_string) + { + if (cmd->params.ptr_at_d->c_dial_string > MAX_DIAL_LEN-1) + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow); + return (ACI_BAT_FAIL); + } + dial_string = cmd->params.ptr_at_d->dial_string; + if (*dial_string EQ '>') + { + ret = aci_bat_call_from_phonebook(src_infos_psi, cmd); + } + else + { + ret = aci_bat_call_with_number(src_infos_psi, cmd); + } + } + else + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown); /* No dial string, so unknown error */ + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : BAT_A | ++--------------------------------------------------------------------+ + + PURPOSE : ATA on binary level there is just a cmd.ctrl_params = BAT_CMD_AT_A + no additional parameter needed. +*/ +GLOBAL T_ACI_BAT_RSLT BAT_A (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + TRACE_FUNCTION ("BAT_A()"); + ret = (T_ACI_BAT_RSLT)sAT_A((T_ACI_CMD_SRC)src_infos_psi->srcId); + if (ret EQ ACI_BAT_FAIL) + { + if (!(ACI_BAT_VALID_ERR_DESC())) /* has sAT_A already set an error value ? */ + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown); /* No, so unknown error */ + } + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_H | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT BAT_H (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + TRACE_FUNCTION ("BAT_H()"); + ret = (T_ACI_BAT_RSLT)sAT_H((T_ACI_CMD_SRC)src_infos_psi->srcId); + if (ret EQ ACI_BAT_FAIL) + { + if (!(ACI_BAT_VALID_ERR_DESC())) /* has sAT_H already set an error value ? */ + { + ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_Unknown); /* No, so unknown error */ + } + } + return(ret); +} + +#ifdef FAX_AND_DATA +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCBST | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCBST (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + + TRACE_FUNCTION ("sBAT_PlusCBST()"); + + ret = (T_ACI_BAT_RSLT)sAT_PlusCBST((T_ACI_CMD_SRC)src_infos_psi->srcId,(T_ACI_BS_SPEED)cmd->params.ptr_set_plus_cbst->speed, + (T_ACI_CBST_NAM)cmd->params.ptr_set_plus_cbst->name, + (T_ACI_CBST_CE)cmd->params.ptr_set_plus_cbst->ce); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCBST | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCBST (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_BAT_plus_cbst_speed speed = BAT_CBST_SPD_NOT_PRESENT; + T_BAT_plus_cbst_name name = BAT_CBST_NAM_NOT_PRESENT ; + T_BAT_plus_cbst_ce ce = BAT_CBST_CE_NOT_PRESENT; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_cbst que_cbst_buffer; + + TRACE_FUNCTION ("qBAT_PlusCBST()"); + resp.ctrl_response = BAT_RES_QUE_PLUS_CBST; + resp.response.ptr_que_plus_cbst = &que_cbst_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PlusCBST((T_ACI_CMD_SRC)src_infos_psi->srcId, + (T_ACI_BS_SPEED*)&speed,(T_ACI_CBST_NAM*)&name,(T_ACI_CBST_CE*)&ce); + if(ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_que_plus_cbst->ce = ce; + resp.response.ptr_que_plus_cbst->speed = speed; + resp.response.ptr_que_plus_cbst->name = name; + aci_bat_send(src_infos_psi,&resp); + return ACI_BAT_CMPL; + } + else + { + return ACI_BAT_FAIL; + } +} +#endif /* FAX_AND_DATA */ +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PercentCTTY | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PercentCTTY (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + + TRACE_FUNCTION ("sBAT_PercentCTTY()"); + + ret = (T_ACI_BAT_RSLT)sAT_PercentCTTY ((T_ACI_CMD_SRC)src_infos_psi->srcId, + CTTY_MOD_Enable, (T_ACI_CTTY_REQ)cmd->params.ptr_set_percent_ctty->req); + /*sending hardcoded enable mode for sAT_XXXX */ + + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PercentCTTY | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PercentCTTY (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_BAT_percent_ctty_req req ; + UBYTE mode; + T_BAT_cmd_response resp; + T_BAT_res_que_percent_ctty que_tty_buffer; + T_BAT_trx trx; + T_BAT_percent_ctty_m state; + + TRACE_FUNCTION ("qBAT_PercentCTTY()"); + + resp.ctrl_response = BAT_RES_QUE_PERCENT_CTTY ; + resp.response.ptr_que_percent_ctty = &que_tty_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PercentCTTY ((T_ACI_CMD_SRC)src_infos_psi->srcId, + (T_ACI_CTTY_MOD *)&mode,(T_ACI_CTTY_REQ *)&req,(T_ACI_CTTY_STAT *)&state,(T_ACI_CTTY_TRX *)&trx); + resp.response.ptr_que_percent_ctty->m= state ; + resp.response.ptr_que_percent_ctty->req = req; + resp.response.ptr_que_percent_ctty->trx = trx; + + aci_bat_send(src_infos_psi,&resp); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCSTA | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCSTA (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_TOA type, + *p_type; + + TRACE_FUNCTION ("sBAT_PlusCSTA()"); + + p_type=&type; + if (cmd->params.ptr_set_plus_csta->type EQ ((S16)BAT_PARAMETER_NOT_PRESENT)) + { + p_type = NULL; + } + else + { + type = toa_demerge(cmd->params.ptr_set_plus_csta->type); + if (type.ton < 0 OR type.npi < 0) + { + ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_OpNotAllow); + return (ACI_BAT_FAIL); + } + } + ret = (T_ACI_BAT_RSLT)sAT_PlusCSTA((T_ACI_CMD_SRC)src_infos_psi->srcId,p_type); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCSTA | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCSTA (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_TOA type; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_csta que_csta_buffer; + + TRACE_FUNCTION ("qBAT_PlusCSTA()"); + resp.ctrl_response = BAT_RES_QUE_PLUS_CSTA; + resp.response.ptr_que_plus_csta = &que_csta_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PlusCSTA((T_ACI_CMD_SRC)src_infos_psi->srcId,&type); + if (ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_que_plus_csta->type = toa_merge (type); + aci_bat_send(src_infos_psi, &resp); + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PercentCHLD | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PercentCHLD (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_CHLD_MOD mode = CHLD_MOD_NotPresent; + CHAR X_prm[2]; + CHAR* p_X_prm; + + TRACE_FUNCTION ("sBAT_PercentCHLD()"); + + X_prm[0] = (CHAR)NOT_PRESENT_8BIT; + p_X_prm = X_prm; + + /* + * Map the mode from BAT application to appropriate ENUM values + * present in ACI + */ + aci_bat_chld_mode_mapping (cmd->params.ptr_set_percent_chld, &mode); + + if(cmd->params.ptr_set_percent_chld->x NEQ ((S16)BAT_PARAMETER_NOT_PRESENT)) + { + X_prm[0] = (char)(cmd->params.ptr_set_percent_chld->x + 0x30); /* 0x30 = '0' */ + X_prm[1] = '\0'; + } + else + { + p_X_prm = NULL; + } + ret = (T_ACI_BAT_RSLT)sAT_PercentCHLD((T_ACI_CMD_SRC)src_infos_psi->srcId, mode, p_X_prm ); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCLIP | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCLIP (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_CLIP_STAT stat = CLIP_STAT_NotPresent; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_clip que_clip_buffer; + + TRACE_FUNCTION ("qBAT_PlusCLIP()"); + + resp.ctrl_response = BAT_RES_QUE_PLUS_CLIP; + resp.response.ptr_que_plus_clip = &que_clip_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PlusCLIP((T_ACI_CMD_SRC)src_infos_psi->srcId,&stat); + if (ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_que_plus_clip->m = (T_BAT_plus_clip_m)stat ; + aci_bat_send(src_infos_psi, &resp); + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCDIP | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCDIP (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_CMPL; + T_ACI_CDIP_STAT stat = CDIP_STAT_Unknown; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_cdip que_cdip_buffer; + + TRACE_FUNCTION ("qBAT_PlusCDIP()"); + + resp.ctrl_response = BAT_RES_QUE_PLUS_CDIP; + resp.response.ptr_que_plus_cdip = &que_cdip_buffer; + + resp.response.ptr_que_plus_cdip->m = (T_BAT_plus_cdip_m)stat ; + aci_bat_send(src_infos_psi, &resp); + + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCOLP | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCOLP (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_COLP_STAT stat = COLP_STAT_NotPresent; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_colp que_colp_buffer; + + TRACE_FUNCTION ("qBAT_PlusCOLP()"); + + resp.ctrl_response = BAT_RES_QUE_PLUS_COLP; + resp.response.ptr_que_plus_colp = &que_colp_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PlusCOLP((T_ACI_CMD_SRC)src_infos_psi->srcId,&stat); + if (ret EQ (T_ACI_BAT_RSLT)AT_CMPL) + { + resp.response.ptr_que_plus_colp->m = (T_BAT_plus_colp_m)stat ; + aci_bat_send(src_infos_psi, &resp); + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCLIR | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCLIR (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + + TRACE_FUNCTION ("sBAT_PlusCLIR()"); + + ret = (T_ACI_BAT_RSLT)sAT_PlusCLIR((T_ACI_CMD_SRC)src_infos_psi->srcId, + (T_ACI_CLIR_MOD)cmd->params.ptr_set_plus_clir->n); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCLIR | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCLIR (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_CLIR_STAT stat = CLIR_STAT_NotPresent; + T_ACI_CLIR_MOD mode = CLIR_MOD_NotPresent; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_clir clir; + + TRACE_FUNCTION ("qBAT_PlusCLIR()"); + + resp.ctrl_response = BAT_RES_QUE_PLUS_CLIR; + resp.response.ptr_que_plus_clir = &clir; + + ret = (T_ACI_BAT_RSLT)qAT_PlusCLIR ((T_ACI_CMD_SRC)src_infos_psi->srcId,&mode,&stat); + + if(ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_que_plus_clir->m = (T_BAT_plus_clir_m)stat; + resp.response.ptr_que_plus_clir->n = (T_BAT_plus_clir_n)mode; + aci_bat_send(src_infos_psi,&resp); + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCCUG | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCCUG (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_BAT_plus_ccug_n n = BAT_CCUG_N_NOT_PRESENT ; + T_BAT_plus_ccug_index index = BAT_CCUG_INDEX_NOT_PRESENT ; + T_BAT_plus_ccug_info info = BAT_CCUG_INFO_NOT_PRESENT ; + + TRACE_FUNCTION ("sBAT_PlusCCUG()"); + + n = cmd->params.ptr_set_plus_ccug->n; + index = cmd->params.ptr_set_plus_ccug->index; + info = cmd->params.ptr_set_plus_ccug->info; + + ret = (T_ACI_BAT_RSLT)sAT_PlusCCUG((T_ACI_CMD_SRC)src_infos_psi->srcId, + (T_ACI_CCUG_MOD)n,(T_ACI_CCUG_IDX)index,(T_ACI_CCUG_INFO)info); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCCUG | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCCUG (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_CCUG_MOD mode = CCUG_MOD_NotPresent; + T_ACI_CCUG_IDX idx = CCUG_IDX_NotPresent; + T_ACI_CCUG_INFO info = CCUG_INFO_NotPresent; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_ccug que_ccug_buffer; + + TRACE_FUNCTION ("qBAT_PlusCCUG()"); + + resp.ctrl_response = BAT_RES_QUE_PLUS_CCUG; + resp.response.ptr_que_plus_ccug = &que_ccug_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PlusCCUG ((T_ACI_CMD_SRC)src_infos_psi->srcId,&mode,&idx,&info); + if(ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_que_plus_ccug->n = (T_BAT_plus_ccug_n)mode; + resp.response.ptr_que_plus_ccug->index = (T_BAT_plus_ccug_index)idx; + resp.response.ptr_que_plus_ccug->info = (T_BAT_plus_ccug_info)info; + aci_bat_send(src_infos_psi,&resp); + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCMOD | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCMOD (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_BAT_plus_cmod_mode mode = BAT_CMOD_MODE_NOT_PRESENT; + + TRACE_FUNCTION ("sBAT_PlusCMOD()"); + + mode = cmd->params.ptr_set_plus_cmod->mode; + ret = (T_ACI_BAT_RSLT)sAT_PlusCMOD ((T_ACI_CMD_SRC)src_infos_psi->srcId, + (T_ACI_CMOD_MOD)mode); + + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCMOD | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCMOD (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_CMOD_MOD mode = CMOD_MOD_NotPresent; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_cmod que_cmod_buffer; + + TRACE_FUNCTION ("qBAT_PlusCMOD()"); + resp.ctrl_response = BAT_RES_QUE_PLUS_CMOD; + resp.response.ptr_que_plus_cmod = &que_cmod_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PlusCMOD ((T_ACI_CMD_SRC)src_infos_psi->srcId,&mode); + if (ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_que_plus_cmod->mode = (T_BAT_plus_cmod_mode)mode; + aci_bat_send(src_infos_psi,&resp); + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCR | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCR (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + + TRACE_FUNCTION ("sBAT_PlusCR()"); + + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCR | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCR (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_BAT_res_uns_plus_cr cr; + + TRACE_FUNCTION ("qBAT_PlusCR()"); + + memset(&cr,0x00,sizeof(T_BAT_res_uns_plus_cr)); + + /* Check This Out */ + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCAOC | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCAOC (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + LONG ccm = 0L; + SHORT mode = 0; + T_BAT_cmd_response resp; + T_BAT_res_set_plus_caoc caoc; + + TRACE_FUNCTION ("sBAT_PlusCAOC()"); + + resp.ctrl_response = BAT_RES_SET_PLUS_CAOC; + resp.response.ptr_set_plus_caoc = &caoc; + + mode = cmd->params.ptr_set_plus_caoc->mode; + if(mode EQ BAT_CAOC_MODE_QUERY) + { + ret = (T_ACI_BAT_RSLT)qAT_PlusCAOC((T_ACI_CMD_SRC)src_infos_psi->srcId,&ccm); + } + else + { + return(ACI_BAT_FAIL); + } + + if (ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_set_plus_caoc->ccm = ccm; + aci_bat_send(src_infos_psi,&resp); + } + return(ret); + } + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCACM | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCACM (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + char pin2 [MAX_PWD_LENGTH] = {0} ; + + TRACE_FUNCTION ("sBAT_PlusCACM()"); + + memcpy(pin2,cmd->params.ptr_set_plus_cacm->passwd,cmd->params.ptr_set_plus_cacm->c_passwd); + ret = (T_ACI_BAT_RSLT)sAT_PlusCACM((T_ACI_CMD_SRC)src_infos_psi->srcId,pin2); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCACM | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCACM (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + LONG acm = 0L; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_cacm que_cacm_buffer; + + TRACE_FUNCTION ("qBAT_PlusCACM()"); + + resp.ctrl_response = BAT_RES_QUE_PLUS_CACM; + resp.response.ptr_que_plus_cacm = &que_cacm_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PlusCACM((T_ACI_CMD_SRC)src_infos_psi->srcId,&acm); + if (ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_que_plus_cacm->acm = acm; + aci_bat_send(src_infos_psi,&resp); + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCAMM | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCAMM (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + char pin2 [MAX_PWD_LENGTH] = {0}; + char* p_pin2; + + TRACE_FUNCTION ("sBAT_PlusCAMM()"); + + p_pin2 = pin2; + if(cmd->params.ptr_set_plus_camm->v_passwd) + { + memcpy(pin2,cmd->params.ptr_set_plus_camm->passwd,cmd->params.ptr_set_plus_camm->c_passwd); + } +/* else + { + p_pin2 = NULL; + } */ + ret = (T_ACI_BAT_RSLT)sAT_PlusCAMM((T_ACI_CMD_SRC)src_infos_psi->srcId, + cmd->params.ptr_set_plus_camm->acmmax,p_pin2); + switch ((T_ACI_RETURN)ret) + { + case AT_BUSY: + { + ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_SimBusy); + break; + } + default: + { + ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_OpNotAllow); + break; + } + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCAMM | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCAMM (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + LONG acmmax = 0L; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_camm que_camm_buffer; + + TRACE_FUNCTION ("qBAT_PlusCAMM()"); + + resp.ctrl_response = BAT_RES_QUE_PLUS_CAMM; + resp.response.ptr_que_plus_camm = &que_camm_buffer; + ret = (T_ACI_BAT_RSLT)qAT_PlusCAMM((T_ACI_CMD_SRC)src_infos_psi->srcId,&acmmax); + if (ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_que_plus_camm->acmmax = acmmax; + aci_bat_send(src_infos_psi,&resp); + } + return(ret); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCPUC | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCPUC (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + char currency [MAX_CUR_LEN] = {0x00}; + char cvtdCurrency [2*MAX_CUR_LEN] = {0x00}; + USHORT lenCvtdCurrency = 0; + char ppu [MAX_PPU_LENGTH] = {0x00}; + char pin2 [MAX_PWD_LENGTH] = {0x00}; + char* p_pin2; + + TRACE_FUNCTION ("sBAT_PlusCPUC()"); + + p_pin2 = pin2; + + memcpy(currency,cmd->params.ptr_set_plus_cpuc->currency,cmd->params.ptr_set_plus_cpuc->c_currency); + memcpy(ppu,cmd->params.ptr_set_plus_cpuc->ppu,cmd->params.ptr_set_plus_cpuc->c_ppu); + if(cmd->params.ptr_set_plus_cpuc->v_passwd) + { + memcpy(pin2,cmd->params.ptr_set_plus_cpuc->passwd,cmd->params.ptr_set_plus_cpuc->c_passwd); + } + else + { + p_pin2 = NULL; + } + utl_chsetToGsm ((UBYTE*)currency, + cmd->params.ptr_set_plus_cpuc->c_currency, + (UBYTE*)cvtdCurrency, + &lenCvtdCurrency, +#ifdef REL99 + sizeof(cvtdCurrency), +#endif /* REL99 */ + GSM_ALPHA_Int); + ret = (T_ACI_BAT_RSLT)sAT_PlusCPUC((T_ACI_CMD_SRC)src_infos_psi->srcId,cvtdCurrency,ppu,p_pin2); + switch ((T_ACI_RETURN)ret) + { + case AT_BUSY: + { + ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_SimBusy); + break; + } + default: + { + ACI_ERR_DESC(ACI_ERR_CLASS_Cme,CME_ERR_OpNotAllow); + break; + } + } + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCPUC | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCPUC (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + char currency [MAX_CUR_LEN] = {0x00}; + char cvtdCurrency [2*MAX_CUR_LEN] = {0x00}; + USHORT lenCvtdCurrency = 0; + char ppu [MAX_PPU_LENGTH] = {0x00}; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_cpuc que_cpuc_buffer; + + + TRACE_FUNCTION ("qBAT_PlusCPUC()"); + resp.ctrl_response = BAT_RES_QUE_PLUS_CPUC; + resp.response.ptr_que_plus_cpuc = &que_cpuc_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PlusCPUC((T_ACI_CMD_SRC)src_infos_psi->srcId,currency, ppu); + if( ret NEQ ((T_ACI_BAT_RSLT)AT_CMPL) ) + { + return (ACI_BAT_FAIL); + } + utl_chsetFromGsm((UBYTE*)currency, + (USHORT)strlen(currency), + (UBYTE*)cvtdCurrency, + sizeof(cvtdCurrency), + &lenCvtdCurrency, + GSM_ALPHA_Def); + + resp.response.ptr_que_plus_cpuc->c_currency = (U8)lenCvtdCurrency; + resp.response.ptr_que_plus_cpuc->c_ppu = strlen(ppu); + memcpy(resp.response.ptr_que_plus_cpuc->currency,cvtdCurrency,lenCvtdCurrency); + memcpy(resp.response.ptr_que_plus_cpuc->ppu,ppu,strlen(ppu)); + aci_bat_send(src_infos_psi,&resp); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCLCC | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCLCC (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_CLCC_CALDESC *calLst = NULL; + UBYTE lstIdx = 0; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_clcc que_clcc_buffer; + + + TRACE_FUNCTION ("qBAT_PlusCLCC()"); + resp.ctrl_response = BAT_RES_QUE_PLUS_CLCC; + resp.response.ptr_que_plus_clcc = &que_clcc_buffer; + + MALLOC (calLst, MAX_CALL_NR * sizeof (T_ACI_CLCC_CALDESC)); + ret = (T_ACI_BAT_RSLT)qAT_PlusCLCC((T_ACI_CMD_SRC)src_infos_psi->srcId, calLst); + + if( ret NEQ ((T_ACI_BAT_RSLT)AT_CMPL) ) + { + return (ACI_BAT_FAIL); + } + + /* BAT has only one instance of this, so send one call info at a time */ + for( lstIdx = 0; lstIdx < MAX_CALL_NR; lstIdx++ ) + { + if( calLst[lstIdx].idx EQ ACI_NumParmNotPresent ) + break; + + /* Reset before sending data for each call id */ + memset(resp.response.ptr_que_plus_clcc,0x00,sizeof(T_BAT_res_que_plus_clcc)); + + resp.response.ptr_que_plus_clcc->idx = (S16)calLst[lstIdx].idx; + resp.response.ptr_que_plus_clcc->dir = (T_BAT_plus_clcc_dir)calLst[lstIdx].dir; + resp.response.ptr_que_plus_clcc->stat = (T_BAT_plus_clcc_stat)calLst[lstIdx].stat; + resp.response.ptr_que_plus_clcc->mode = (T_BAT_plus_clcc_mode)calLst[lstIdx].mode; + resp.response.ptr_que_plus_clcc->mpty = (T_BAT_plus_clcc_mpty)calLst[lstIdx].mpty; + + if (calLst[lstIdx].number[0] NEQ 0x0) + { + resp.response.ptr_que_plus_clcc->v_number = TRUE; + resp.response.ptr_que_plus_clcc->c_number = strlen(calLst[lstIdx].number); + + if (resp.response.ptr_que_plus_clcc->c_number > BAT_MAX_CLCC_NUMBER_LEN) + resp.response.ptr_que_plus_clcc->c_number = (BAT_MAX_CLCC_NUMBER_LEN - 1); + + memcpy(resp.response.ptr_que_plus_clcc->number, + calLst[lstIdx].number, + resp.response.ptr_que_plus_clcc->c_number + 1); /* Include Null terminator */ + + if (calLst[lstIdx].type.ton NEQ TON_NotPresent) + { + S16 type = toa_merge(calLst[lstIdx].type); + resp.response.ptr_que_plus_clcc->type = type; + } +#ifdef NO_ASCIIZ + if (calLst[lstIdx].alpha.len NEQ 0x0) + { + resp.response.ptr_que_plus_clcc->v_alpha = TRUE; + resp.response.ptr_que_plus_clcc->c_alpha = (U8)calLst[lstIdx].alpha.len; + + /* Limit alpha length to BAT size */ + if (resp.response.ptr_que_plus_clcc->c_alpha > BAT_MAX_PHB_NUM_LEN) + resp.response.ptr_que_plus_clcc->c_alpha = BAT_MAX_PHB_NUM_LEN; + + memcpy(resp.response.ptr_que_plus_clcc->alpha, + calLst[lstIdx].alpha.data, + resp.response.ptr_que_plus_clcc->c_alpha); + } +#else /* #ifdef NO_ASCIIZ */ + if (calLst[lstIdx].alpha[0] NEQ 0x0) + { + resp.response.ptr_que_plus_clcc->v_alpha = TRUE; + + /* Limit alpha length to BAT size */ + resp.response.ptr_que_plus_clcc->c_alpha = strlen(calLst[lstIdx].alpha); + if (resp.response.ptr_que_plus_clcc->c_alpha > MAX_ALPHA_LEN) /* Has to be BAT_MAX..*/ + resp.response.ptr_que_plus_clcc->c_alpha = (MAX_ALPHA_LEN - 1); + + memcpy(resp.response.ptr_que_plus_clcc->alpha, + calLst[lstIdx].alpha, + (resp.response.ptr_que_plus_clcc->c_alpha)+1); /* Include the NULL terminator */ + } +#endif /* #ifdef NO_ASCIIZ */ + } + + aci_bat_send(src_infos_psi,&resp); + } + + MFREE (calLst); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCCWA | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCCWA (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_BAT_plus_ccwa_mode mode = BAT_CCWA_MODE_NOT_PRESENT ; + T_ACI_CLASS class_type = CLASS_NotPresent; + + TRACE_FUNCTION ("sBAT_PlusCCWA()"); + + mode = cmd->params.ptr_set_plus_ccwa->mode; + class_type = (T_ACI_CLASS)cmd->params.ptr_set_plus_ccwa->bearer_class; + if (mode EQ BAT_CCWA_MODE_QUERY) + { + ret = (T_ACI_BAT_RSLT)qAT_PlusCCWA ((T_ACI_CMD_SRC)src_infos_psi->srcId,class_type); + } + else + { + ret = (T_ACI_BAT_RSLT)sAT_PlusCCWA ((T_ACI_CMD_SRC)src_infos_psi->srcId, + (T_ACI_CCWA_MOD)mode,class_type); + } + + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusVTS | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusVTS (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + CHAR dtmf = '\0'; + + TRACE_FUNCTION ("sBAT_PlusVTS()"); + + dtmf = cmd->params.ptr_set_plus_vts->dtmf; + ret = (T_ACI_BAT_RSLT)sAT_PlusVTS((T_ACI_CMD_SRC)src_infos_psi->srcId,dtmf,VTS_MOD_Auto); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PercentRDL | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PercentRDL (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_BAT_percent_rdl_mode rdlmode = BAT_P_RDL_MODE_NOT_PRESENT ; + + TRACE_FUNCTION ("sBAT_PercentRDL()"); + + rdlmode = cmd->params.ptr_set_percent_rdl->mode; + ret = (T_ACI_BAT_RSLT)sAT_PercentRDL ((T_ACI_CMD_SRC)src_infos_psi->srcId, + (T_ACI_CC_REDIAL_MODE)rdlmode, NOTIF_USER); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PercentRDL | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PercentRDL (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_CC_REDIAL_MODE rdlmode = AUTOM_REP_NOT_PRESENT; + T_ACI_CC_REDIAL_NOTIF usr_notif = NOTIF_NO_PRESENT; + T_BAT_cmd_response resp; + T_BAT_res_que_percent_rdl que_rdl_buffer; + + TRACE_FUNCTION ("qBAT_PercentRDL()"); + + resp.ctrl_response = BAT_RES_QUE_PERCENT_RDL; + resp.response.ptr_que_percent_rdl = &que_rdl_buffer; + ret = (T_ACI_BAT_RSLT)qAT_PercentRDL((T_ACI_CMD_SRC)src_infos_psi->srcId,&rdlmode, &usr_notif); + if(ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_que_percent_rdl->mode = (T_BAT_percent_rdl_mode)rdlmode; + aci_bat_send(src_infos_psi,&resp); + } + return(ret); +} + +#ifdef TI_PS_FF_AT_P_CMD_RDLB +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PercentRDLB | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PercentRDLB (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_BAT_percent_rdlb_mode rdlmode = BAT_P_RDLB_MODE_NOT_PRESENT ; + + TRACE_FUNCTION ("sBAT_PercentRDLB()"); + + rdlmode = cmd->params.ptr_set_percent_rdlb->mode; + ret = (T_ACI_BAT_RSLT)sAT_PercentRDLB((T_ACI_CMD_SRC)src_infos_psi->srcId, + (T_ACI_CC_REDIAL_BLMODE)rdlmode,NOTIF_USER); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PercentRDLB | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PercentRDLB (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_CC_REDIAL_BLACKL blackl; + T_ACI_CC_REDIAL_NOTIF usr_notif= NOTIF_NO_PRESENT; + UBYTE i,j; + T_BAT_cmd_response resp; + T_BAT_res_que_percent_rdlb que_rdlb_buffer; + + TRACE_FUNCTION ("qBAT_PercentRDLB()"); + + memset(&blackl, 0, sizeof(T_ACI_CC_REDIAL_BLACKL)); + resp.ctrl_response = BAT_RES_QUE_PERCENT_RDLB; + resp.response.ptr_que_percent_rdlb = &que_rdlb_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PercentRDLB ((T_ACI_CMD_SRC)src_infos_psi->srcId,&blackl,&usr_notif); + if(ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + for(i=0; i<blackl.blCount; i++) /* output black list */ + { + memset(resp.response.ptr_que_percent_rdlb->number,0,BAT_MAX_RDLB_NUMBER_LEN); + resp.response.ptr_que_percent_rdlb->type = (UBYTE)toa_merge(blackl.blNum[i].type); + resp.response.ptr_que_percent_rdlb->c_number = blackl.blNum[i].numb_len; + for(j=0; j<blackl.blNum[i].numb_len; j++) + { + blackl.blNum[i].number[j] = (blackl.blNum[i].number[j] | 0x30); + /* dont know why we do this ! */ + } + memcpy(resp.response.ptr_que_percent_rdlb->number,blackl.blNum[i].number,blackl.blNum[i].numb_len); + aci_bat_send(src_infos_psi,&resp); + } + } + return(ret); +} +#endif /* TI_PS_FF_AT_P_CMD_RDLB */ +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PercentVTS | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PercentVTS (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_BAT_dtmf dtmf; + T_BAT_percent_vts_mode mode; + + TRACE_FUNCTION ("sBAT_PercentVTS()"); + + dtmf = cmd->params.ptr_set_percent_vts->dtmf; + mode = cmd->params.ptr_set_percent_vts->mode; + if (mode EQ ((T_BAT_percent_vts_mode)VTS_MOD_NotPresent)) + { + mode = (T_BAT_percent_vts_mode)VTS_MOD_Auto; + } + ret = (T_ACI_BAT_RSLT)sAT_PlusVTS((T_ACI_CMD_SRC)src_infos_psi->srcId, + (char)dtmf,(T_ACI_VTS_MOD)mode); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCSNS | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCSNS (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_BAT_plus_csns_mode mode ; + + TRACE_FUNCTION ("sBAT_PlusCSNS()"); + + mode = cmd->params.ptr_set_plus_csns->mode; + ret = (T_ACI_BAT_RSLT)sAT_PlusCSNS ((T_ACI_CMD_SRC)src_infos_psi->srcId, (T_ACI_CSNS_MOD)mode); + return(ret); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : qBAT_PlusCSNS | ++--------------------------------------------------------------------+ + + PURPOSE : +*/ +GLOBAL T_ACI_BAT_RSLT qBAT_PlusCSNS (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + T_ACI_CSNS_MOD mode = CSNS_MOD_NotPresent; + T_BAT_cmd_response resp; + T_BAT_res_que_plus_csns que_csns_buffer; + + TRACE_FUNCTION ("qBAT_PlusCSNS()"); + + resp.ctrl_response = BAT_RES_QUE_PLUS_CSNS; + resp.response.ptr_que_plus_csns = &que_csns_buffer; + + ret = (T_ACI_BAT_RSLT)qAT_PlusCSNS ((T_ACI_CMD_SRC)src_infos_psi->srcId,&mode); + if(ret EQ ((T_ACI_BAT_RSLT)AT_CMPL)) + { + resp.response.ptr_que_plus_csns->mode = (T_BAT_plus_csns_mode)mode; + aci_bat_send(src_infos_psi,&resp); + } + return(ret); +} + +#ifdef TI_PS_FF_AT_CMD_P_ECC +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PercentECC | ++--------------------------------------------------------------------+ + + PURPOSE : setting of additional ECC numbers by external applications +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PercentECC(T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + + TRACE_FUNCTION ("sBAT_PercentECC()"); + + ret = (T_ACI_BAT_RSLT)sAT_PercentECC((T_ACI_CMD_SRC)src_infos_psi->srcId, + cmd->params.ptr_set_percent_ecc->index, + (char *)cmd->params.ptr_set_percent_ecc->number); + return (ret); +} +#endif /* TI_PS_FF_AT_CMD_P_ECC */ +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_BAT | +| STATE : code ROUTINE : sBAT_PlusCHUP | ++--------------------------------------------------------------------+ + + PURPOSE : +CHUP command (Hangs up call) +*/ +GLOBAL T_ACI_BAT_RSLT sBAT_PlusCHUP (T_ACI_DTI_PRC_PSI *src_infos_psi, + T_BAT_cmd_send *cmd) +{ + T_ACI_BAT_RSLT ret = ACI_BAT_FAIL; + TRACE_FUNCTION ("sBAT_PlusCHUP()"); + ret = (T_ACI_BAT_RSLT)sAT_PlusCHUP((T_ACI_CMD_SRC)src_infos_psi->srcId); + return(ret); +} + + +