line source
+ − /*
+ − +-----------------------------------------------------------------------------
+ − | 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 callback modul is ...
+ − |
+ − +-----------------------------------------------------------------------------
+ − */
+ −
+ − #include "aci_all.h" /* includes prim.h, which includes p_bat.h */
+ −
+ − #define ACI_BAT_CB_GLOBALS /* define this file as owner of globals in aci_bat_cb.h */
+ − #include "aci_bat_cb.h" /* prototypes of sBAT_,qBAT_,tBAT_ */
+ −
+ − #include "psa_psi.h"
+ − #include "p_bat.h"
+ − #include "aci_bat_err.h"
+ − #include "aci_bat.h"
+ − #include "aci_cmh.h"
+ − #include "psa.h"
+ − #include "cmh.h"
+ − #include "aci_lst.h"
+ − #include "cmh_psi.h"
+ − #include "ati_cmd.h"
+ − #include "aci_cmd.h"
+ − #include "aci_fd.h"
+ − #include "cmh_sms.h"
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : aci_bat_src_info |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Can be called from rBAT_ functions in order to find the
+ − command source ID and a pointer to the PSI source
+ − information.
+ − */
+ − LOCAL void aci_bat_src_info (T_ACI_CMD_SRC *src_id, T_ACI_DTI_PRC_PSI **psi_src_info)
+ − {
+ − /*
+ − * The source ID is copied from the global variable srcId_cb,
+ − * which is set by the macro R_AT.
+ − */
+ − *src_id=(T_ACI_CMD_SRC)srcId_cb;
+ −
+ − /*
+ − * 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);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : aci_bat_lang_str |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Work out the string for the indicated language.
+ − */
+ − LOCAL CHAR *aci_bat_lang_str (T_ACI_LAN_SUP *CLang)
+ − {
+ − UBYTE i;
+ −
+ − if (CLang==NULL)
+ − return(NULL);
+ −
+ − /*
+ − * If a string is provided, use that.
+ − */
+ − if (CLang->str)
+ − return(CLang->str);
+ −
+ − /*
+ − * GSM 07.07 says that "AUTO" should be used for automatic mode.
+ − */
+ − if (CLang->lng==CLAN_LNG_AUT)
+ − return("AUTO");
+ −
+ − /*
+ − * Use the lookup table 'lngs' to find the string.
+ − */
+ − for (i=0;lngs[i].str;i++)
+ − {
+ − if (CLang->lng==lngs[i].lng)
+ − return(lngs[i].str);
+ − }
+ −
+ − return(NULL);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_OK |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_OK(
+ − T_ACI_AT_CMD cmd)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_no_parameter dummy;
+ −
+ − TRACE_FUNCTION ("rBAT_OK()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − if (cmd EQ AT_CMD_D)
+ − {
+ − /*
+ − * We are not waiting for a final response to ATD any more.
+ − */
+ − src_infos->bat_client[src_infos->active_client].atd_live=FALSE;
+ − }
+ −
+ − resp.ctrl_response=BAT_RES_AT_OK;
+ −
+ − resp.response.ptr_at_ok = &dummy;
+ − dummy.bat_dummy = 0xFF;
+ −
+ − if (src_infos->bat_client[src_infos->active_client].curCmd EQ BATC_ABORT_COMMAND_CNF)
+ − {
+ − T_BATC_confirm confirm;
+ − T_BATC_abort_cmd abort_cmd;
+ − confirm.rsp_params = BATC_ABORT_COMMAND_CNF;
+ − abort_cmd.client_id = src_infos->active_client;
+ − confirm.rsp.ptr_bat_abort_command_cnf = &abort_cmd;
+ − aci_bat_send(src_infos,(T_BAT_cmd_response *)&confirm);
+ − return;
+ − }
+ −
+ − #ifdef _SIMULATION_
+ − src_infos->bat_client[src_infos->active_client].curCmd = (T_BAT_ctrl_params)-1;
+ − #endif
+ −
+ − aci_bat_send(src_infos,&resp);
+ −
+ − /* check for possible next command queued */
+ − aci_bat_run_cmd (src_infos);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_CONNECT |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_CONNECT(
+ − T_ACI_AT_CMD cmdId,
+ − T_ACI_BS_SPEED speed,
+ − SHORT cId,
+ − BOOL flow_cntr)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_res_at_connect connect_data;
+ − T_BAT_cmd_response resp;
+ −
+ − TRACE_FUNCTION ("rBAT_CONNECT()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − /*
+ − * We are not waiting for a final response to ATD any more.
+ − */
+ − src_infos->bat_client[src_infos->active_client].atd_live=FALSE;
+ −
+ − resp.ctrl_response=BAT_RES_AT_CONNECT;
+ − resp.response.ptr_at_connect=&connect_data;
+ −
+ − /*
+ − * The ACI and BAT versions of 'speed' are quite a bit different,
+ − * so we need this conversion. Note that we will be losing
+ − * the "cmdId" and "cId" as these are not in the BAT.
+ − */
+ − switch(speed)
+ − {
+ − default:
+ − case BS_SPEED_NotPresent:
+ − case BS_SPEED_AUTO:
+ − case BS_SPEED_28800_V110:
+ − connect_data.data_rate=BAT_AT_CONNECT_RATE_NOT_PRESENT;
+ − break;
+ −
+ − case BS_SPEED_300_V21:
+ − case BS_SPEED_300_V110:
+ − connect_data.data_rate=BAT_AT_CONNECT_RATE_300;
+ − break;
+ −
+ − case BS_SPEED_1200_V22:
+ − case BS_SPEED_1200_75_V23:
+ − case BS_SPEED_1200_V120:
+ − case BS_SPEED_1200_V110:
+ − connect_data.data_rate=BAT_AT_CONNECT_RATE_1200;
+ − break;
+ −
+ − case BS_SPEED_2400_V22bis:
+ − case BS_SPEED_2400_V26ter:
+ − case BS_SPEED_2400_V120:
+ − case BS_SPEED_2400_V110:
+ − connect_data.data_rate=BAT_AT_CONNECT_RATE_2400;
+ − break;
+ −
+ − case BS_SPEED_4800_V32:
+ − case BS_SPEED_4800_V120:
+ − case BS_SPEED_4800_V110:
+ − connect_data.data_rate=BAT_AT_CONNECT_RATE_4800;
+ − break;
+ −
+ − case BS_SPEED_9600_V32:
+ − case BS_SPEED_9600_V34:
+ − case BS_SPEED_9600_V120:
+ − case BS_SPEED_9600_V110:
+ − connect_data.data_rate=BAT_AT_CONNECT_RATE_9600;
+ − break;
+ −
+ − case BS_SPEED_14400_V34:
+ − case BS_SPEED_14400_V120:
+ − case BS_SPEED_14400_V110:
+ − connect_data.data_rate=BAT_AT_CONNECT_RATE_14400;
+ − break;
+ −
+ − case BS_SPEED_19200_V110:
+ − connect_data.data_rate=BAT_AT_CONNECT_RATE_19200;
+ − break;
+ −
+ − case BS_SPEED_38400_V110:
+ − connect_data.data_rate=BAT_AT_CONNECT_RATE_38400;
+ − break;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ −
+ − /* check for possible next command queued */
+ − aci_bat_run_cmd (src_infos);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCME |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCME(
+ − T_ACI_AT_CMD cmdId,
+ − T_ACI_CME_ERR err)
+ − {
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_plus_cme_error error_data;
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCME()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_PLUS_CME_ERROR;
+ − resp.response.ptr_plus_cme_error=&error_data;
+ −
+ − /*
+ − * This relies on T_ACI_CME_ERR being the same as
+ − * T_BAT_plus_cme_error_error, which (apart from a couple of
+ − * omissions in each enumeration) it is.
+ − */
+ − resp.response.ptr_plus_cme_error->error=(T_BAT_plus_cme_error_error)err;
+ −
+ − aci_bat_send(src_infos,&resp);
+ −
+ − /* check for possible next command queued */
+ − aci_bat_run_cmd (src_infos);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_NO_CARRIER |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_NO_CARRIER(
+ − T_ACI_AT_CMD cmdId,
+ − SHORT cId)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_no_parameter dummy;
+ −
+ − TRACE_FUNCTION ("rBAT_NO_CARRIER()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − /*
+ − * We are not waiting for a final response to ATD any more.
+ − */
+ − src_infos->bat_client[src_infos->active_client].atd_live=FALSE;
+ −
+ − resp.ctrl_response = BAT_RES_AT_NO_CARRIER_FINAL;
+ − resp.response.ptr_at_no_carrier_final = &dummy;
+ − dummy.bat_dummy = 0xFF;
+ −
+ − aci_bat_send(src_infos,&resp);
+ −
+ − /* check for possible next command queued */
+ − aci_bat_run_cmd (src_infos);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCRING |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCRING(
+ − T_ACI_CRING_MOD mode,
+ − T_ACI_CRING_TYP type1,
+ − T_ACI_CRING_TYP type2)
+ − {
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cring cring_data;
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCRING()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CRING;
+ − resp.response.ptr_plus_cring=&cring_data;
+ −
+ − /*
+ − * This relies on T_ACI_CRING_TYP being the same as
+ − * T_BAT_cring_type/T_BAT_plus_cring_type2.
+ − */
+ − cring_data.type1=(T_BAT_cring_type)type1;
+ − cring_data.type2=(T_BAT_plus_cring_type2)type2;
+ −
+ − /*
+ − * This relies on T_ACI_CRING_MOD being the same as
+ − * T_BAT_plus_cring_alt.
+ − */
+ − cring_data.alt=(T_BAT_plus_cring_alt)mode;
+ −
+ − /*
+ − * Mark as not present all the information in the BAT message
+ − * that we don't have.
+ − */
+ − cring_data.v_pdp_addr=FALSE;
+ − cring_data.v_l2p=FALSE;
+ − cring_data.pdp_type=BAT_PDP_TYPE_NOT_PRESENT;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusDR |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusDR(
+ − T_ACI_DR_TYP type)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusDR() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusDR() - FAKE");
+ − rCI_PlusDR(type);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCR |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCR(
+ − T_ACI_CR_SERV service)
+ − {
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cr cr_data;
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − CHAR *s;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCR()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CR;
+ − resp.response.ptr_res_plus_cr=&cr_data;
+ −
+ − switch(service)
+ − {
+ − case CR_SERV_Async:
+ − s="ASYNC";
+ − break;
+ −
+ − case CR_SERV_Sync:
+ − s="SYNC";
+ − break;
+ −
+ − case CR_SERV_RelAsync:
+ − s="REL ASYNC";
+ − break;
+ −
+ − case CR_SERV_RelSync:
+ − s="REL SYNC";
+ − break;
+ −
+ − #ifdef GPRS
+ − case CR_SERV_GPRS:
+ − s="GPRS";
+ − break;
+ − #endif
+ −
+ − default:
+ − /*
+ − * Unrecognised value, get out now.
+ − */
+ − return;
+ − }
+ −
+ − len=strlen(s);
+ −
+ − /*
+ − * Check that we have enough room in the BAT structure, if we
+ − * haven't we may as well give up at this point.
+ − */
+ − if (len>BAT_MAX_CR_SERV_LEN)
+ − return;
+ −
+ − /*
+ − * Copy the data into the BAT structure and set the counter.
+ − */
+ − memcpy(cr_data.serv,s,BAT_MAX_CR_SERV_LEN);
+ − cr_data.c_serv=(U8)len;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCPIN |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Response to qBAT_PlusCPIN(). Also see simactivated_cpinresult().
+ − */
+ − GLOBAL void rBAT_PlusCPIN(
+ − T_ACI_CPIN_RSLT code)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_cpin cpin_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCPIN()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_QUE_PLUS_CPIN;
+ − resp.response.ptr_que_plus_cpin=&cpin_data;
+ −
+ − /*
+ − * Warning - this assumes that T_ACI_CPIN_RSLT and
+ − * T_BAT_VAL_plus_cpin_code are eqivalent. They are, except that
+ − * T_ACI_CPIN_RSLT has extra values not in the BAT.
+ − */
+ − resp.response.ptr_que_plus_cpin->code=(T_BAT_VAL_plus_cpin_code)code;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCOPS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : See cmhMM_NetworkLst() for how this is used.
+ − */
+ − GLOBAL void rBAT_PlusCOPS(
+ − SHORT lastIdx,
+ − T_ACI_COPS_OPDESC *operLst)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_tst_plus_cops cops_data;
+ − USHORT n;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCOPS()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_TST_PLUS_COPS;
+ − resp.response.ptr_tst_plus_cops=&cops_data;
+ −
+ − /*
+ − * This has delivered a list, however the BAT response only
+ − * allows for single items. So we must send each one
+ − * individually. The use of null values of longOper and
+ − * shortOper as list terminators is as in rAT_PlusCOPS().
+ − */
+ − n=0;
+ −
+ − while ((operLst[n].longOper) && (operLst[n].shortOper))
+ − {
+ − /*
+ − * This assumes that T_BAT_VAL_plus_cops_status and T_ACI_COPS_STAT
+ − * are identical (currently they are).
+ − */
+ − cops_data.status=(T_BAT_plus_cops_status)operLst[n].status;
+ −
+ − /*
+ − * Need to check this. Are all the operator names necessarily
+ − * present?
+ − */
+ − strncpy((CHAR *)cops_data.long_oper,operLst[n].longOper,BAT_MAX_COPS_LONG_OPER_LEN);
+ − cops_data.v_long_oper=TRUE;
+ − cops_data.c_long_oper=strlen((CHAR*)cops_data.long_oper);
+ −
+ − strncpy((CHAR *)cops_data.short_oper,operLst[n].shortOper,BAT_MAX_COPS_SHORT_OPER_LEN);
+ − cops_data.v_short_oper=TRUE;
+ − cops_data.c_short_oper=strlen((CHAR*)cops_data.short_oper);
+ −
+ − strncpy((CHAR *)cops_data.num_oper,operLst[n].numOper,BAT_MAX_COPS_NUM_OPER_LEN);
+ − cops_data.v_num_oper=TRUE;
+ − cops_data.c_num_oper=strlen((CHAR*)cops_data.num_oper);
+ −
+ − aci_bat_send(src_infos,&resp);
+ −
+ − n++;
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCOPS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCOPS(
+ − SHORT lastIdx,
+ − T_ACI_COPS_OPDESC *operLst)
+ − {
+ −
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentCOPS() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentCOPS() - FAKE");
+ − rCI_PercentCOPS(lastIdx,operLst);
+ −
+ − #endif
+ −
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCREG |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Notification of registration status. There is no +CREG in
+ − BAT, so we use %CREG instead.
+ − */
+ − GLOBAL void rBAT_PlusCREG(
+ − T_ACI_CREG_STAT status,
+ − USHORT lac,
+ − USHORT cid)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_creg creg_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCREG()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CREG;
+ − resp.response.ptr_res_percent_creg=&creg_data;
+ −
+ − /*
+ − * This relies on T_ACI_CREG_STAT and T_BAT_percent_creg_stat being
+ − * identical.
+ − */
+ − creg_data.stat=(T_BAT_percent_creg_stat)status;
+ −
+ − creg_data.lac=(S32)lac;
+ − creg_data.ci=(S32)cid;
+ − creg_data.gprs_ind=BAT_P_CREG_GPRS_IND_UNKNOWN;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCCWA |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCCWA(
+ − T_ACI_CLSSTAT *clsStat,
+ − CHAR *number,
+ − T_ACI_TOA *type,
+ − U8 validity,
+ − T_ACI_CLASS class_type,
+ − #ifdef NO_ASCIIZ
+ − T_ACI_PB_TEXT *alpha)
+ − #else
+ − CHAR *alpha)
+ − #endif
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_ccwa ccwa_data;
+ − T_BAT_res_set_plus_ccwa ccwa_q_data;
+ − T_ACI_CLASS test_class;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCCWA()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − if(clsStat) /*Callback for sBAT_PlusCCWA guery (mode 2)*/
+ − {
+ − resp.ctrl_response = BAT_RES_SET_PLUS_CCWA;
+ − resp.response.ptr_set_plus_ccwa = &ccwa_q_data;
+ −
+ − if (clsStat->status EQ STATUS_Active)
+ − {
+ − //src_params->curAtCmd = AT_CMD_NONE;
+ − test_class = 1;
+ − while( test_class < 2*CLASS_Fax )
+ − {
+ − if( clsStat->class_type & test_class )
+ − {
+ − TRACE_EVENT_P1("test_class: %d", test_class);
+ − ccwa_q_data.status = clsStat->status;
+ − ccwa_q_data.bearer_class = test_class;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − test_class *= 2; /* test next class */
+ − }
+ − }
+ − else
+ − {
+ −
+ − ccwa_q_data.status = clsStat->status;
+ − ccwa_q_data.bearer_class = BAT_CCWA_CLASS_NOT_PRESENT;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − }
+ − else
+ − {
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CCWA;
+ − resp.response.ptr_res_plus_ccwa=&ccwa_data;
+ −
+ − if (number==NULL)
+ − {
+ − ccwa_data.number[0]=0;
+ − ccwa_data.c_number=0;
+ − }
+ − else
+ − {
+ − len=strlen(number);
+ −
+ − if (len<=BAT_MAX_CCWA_NUMBER_LEN)
+ − {
+ − memcpy(ccwa_data.number,number,BAT_MAX_CCWA_NUMBER_LEN);
+ − ccwa_data.c_number=(U8)len;
+ − }
+ − else
+ − {
+ − /*
+ − * This is highly unlikely to happen, but if the number is too
+ − * big, then put as many digits as will fit in the BAT structure
+ − * from the END of the number.
+ − */
+ − memcpy(
+ − ccwa_data.number,
+ − number+(len-BAT_MAX_CCWA_NUMBER_LEN),
+ − BAT_MAX_CCWA_NUMBER_LEN);
+ −
+ − ccwa_data.c_number=(U8)BAT_MAX_CCWA_NUMBER_LEN;
+ − }
+ − }
+ −
+ − if (type==NULL)
+ − {
+ − /*
+ − * This is mandatory in the BAT so we have to do something here.
+ − */
+ − T_ACI_TOA t;
+ −
+ − t.npi=NPI_Unknown;
+ − t.ton=TON_Unknown;
+ −
+ − ccwa_data.type=(U8)toa_merge(t);
+ − }
+ − else
+ − {
+ − ccwa_data.type=(U8)toa_merge(*type);
+ − }
+ −
+ − /*
+ − * This relies on T_ACI_CLASS being equivalent to
+ − * T_BAT_plus_ccwa_bearer_class.
+ − */
+ − ccwa_data.bearer_class=(T_BAT_plus_ccwa_bearer_class)class_type;
+ −
+ − /*
+ − * Alphanumeric data
+ − */
+ − if (alpha!=NULL)
+ − {
+ − USHORT len=0;
+ −
+ − ccwa_data.v_alpha=TRUE;
+ −
+ − #ifdef NO_ASCIIZ
+ −
+ − utl_chsetFromSim(
+ − alpha->data,
+ − alpha->len,
+ − ccwa_data.alpha,
+ − BAT_MAX_PHB_NUM_LEN,
+ − &len,
+ − GSM_ALPHA_Def);
+ −
+ − #else
+ −
+ − utl_chsetFromSim(
+ − alpha,
+ − strlen(alpha),
+ − ccwa_data.alpha,
+ − BAT_MAX_PHB_NUM_LEN,
+ − &len,
+ − GSM_ALPHA_Int);
+ −
+ − #endif
+ −
+ − ccwa_data.c_alpha=(U8)len;
+ − }
+ − else
+ − {
+ − ccwa_data.v_alpha=FALSE;
+ − }
+ −
+ − ccwa_data.cli=(T_BAT_cli)validity;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCLIP |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCLIP(
+ − T_ACI_CLIP_STAT stat,
+ − CHAR *number,
+ − T_ACI_TOA * type,
+ − U8 validity,
+ − CHAR *subaddr,
+ − T_ACI_TOS *satype,
+ − #ifdef NO_ASCIIZ
+ − T_ACI_PB_TEXT *alpha)
+ − #else
+ − CHAR *alpha)
+ − #endif /*NO_ASCIIZ*/
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_clip clip_data;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCLIP()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CLIP;
+ − resp.response.ptr_res_plus_clip=&clip_data;
+ −
+ − if (number==NULL)
+ − {
+ − clip_data.number[0]=0;
+ − clip_data.c_number=0;
+ − }
+ − else
+ − {
+ − len=strlen(number);
+ −
+ − if (len<=BAT_MAX_CLIP_NUMBER_LEN)
+ − {
+ − memcpy(clip_data.number,number,BAT_MAX_CLIP_NUMBER_LEN);
+ − clip_data.c_number=(U8)len;
+ − }
+ − else
+ − {
+ − /*
+ − * This is highly unlikely to happen, but if the number is too
+ − * big, then put as many digits as will fit in the BAT structure
+ − * from the END of the number.
+ − */
+ − memcpy(
+ − clip_data.number,
+ − number+(len-BAT_MAX_CLIP_NUMBER_LEN),
+ − BAT_MAX_CLIP_NUMBER_LEN);
+ −
+ − clip_data.c_number=(U8)BAT_MAX_CLIP_NUMBER_LEN;
+ − }
+ − }
+ −
+ − if (type==NULL)
+ − {
+ − /*
+ − * This is mandatory in the BAT so we have to do something here.
+ − */
+ − T_ACI_TOA t;
+ −
+ − t.npi=NPI_Unknown;
+ − t.ton=TON_Unknown;
+ −
+ − clip_data.type=(U8)toa_merge(t);
+ − }
+ − else
+ − {
+ − clip_data.type=(U8)toa_merge(*type);
+ − }
+ −
+ − if (subaddr==NULL)
+ − {
+ − clip_data.v_subaddr=FALSE;
+ − clip_data.satype=-1;
+ − }
+ − else
+ − {
+ − clip_data.v_subaddr=TRUE;
+ −
+ − if (satype==NULL)
+ − clip_data.satype=-1;
+ − else
+ − clip_data.satype=(S16)tos_merge(*satype);
+ −
+ − len=strlen(subaddr);
+ −
+ − /*
+ − * Easiest thing to do is copy as much subaddress data as the
+ − * BAT structure can take. The length field will ensure that
+ − * there are no problems, and will result in the subaddress
+ − * being truncated if it is too long.
+ − */
+ − memcpy(clip_data.subaddr,subaddr,BAT_MAX_SUBADDR_LENGTH);
+ −
+ − if (len>BAT_MAX_SUBADDR_LENGTH)
+ − clip_data.c_subaddr=BAT_MAX_SUBADDR_LENGTH;
+ − else
+ − clip_data.c_subaddr=len;
+ − }
+ −
+ − clip_data.cli=(T_BAT_cli)validity;
+ −
+ − /*
+ − * Alphanumeric data
+ − */
+ − if (alpha!=NULL)
+ − {
+ − USHORT len;
+ −
+ − clip_data.v_alpha=TRUE;
+ −
+ − #ifdef NO_ASCIIZ
+ −
+ − utl_chsetFromSim(
+ − alpha->data,
+ − alpha->len,
+ − (UBYTE *)clip_data.alpha,
+ − BAT_MAX_PHB_NUM_LEN,
+ − &len,
+ − GSM_ALPHA_Def);
+ −
+ − #else
+ −
+ − utl_chsetFromSim(
+ − alpha,
+ − strlen(alpha),
+ − (UBYTE *)clip_data.alpha,
+ − BAT_MAX_PHB_NUM_LEN,
+ − &len,
+ − GSM_ALPHA_Def);
+ −
+ − #endif /*NO_ASCIIZ*/
+ −
+ − clip_data.c_alpha=(U8)len;
+ − }
+ − else
+ − {
+ − clip_data.v_alpha=FALSE;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCDIP |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCDIP(CHAR *number,
+ − T_ACI_TOA * type,
+ − CHAR *subaddr,
+ − T_ACI_TOS *satype)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cdip cdip_data;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCDIP()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CDIP;
+ − resp.response.ptr_res_plus_cdip=&cdip_data;
+ −
+ − if (number==NULL)
+ − {
+ − cdip_data.number[0]=0;
+ − cdip_data.c_number=0;
+ − }
+ − else
+ − {
+ − len=strlen(number);
+ −
+ − if (len<=BAT_MAX_CDIP_NUMBER_LEN)
+ − {
+ − memcpy(cdip_data.number,number,BAT_MAX_CDIP_NUMBER_LEN);
+ − cdip_data.c_number=(U8)len;
+ − }
+ − else
+ − {
+ − /*
+ − * This is highly unlikely to happen, but if the number is too
+ − * big, then put as many digits as will fit in the BAT structure
+ − * from the END of the number.
+ − */
+ − memcpy(
+ − cdip_data.number,
+ − number+(len-BAT_MAX_CDIP_NUMBER_LEN),
+ − BAT_MAX_CDIP_NUMBER_LEN);
+ −
+ − cdip_data.c_number=(U8)BAT_MAX_CDIP_NUMBER_LEN;
+ − }
+ − }
+ −
+ − if (type==NULL)
+ − {
+ − /*
+ − * This is mandatory in the BAT so we have to do something here.
+ − */
+ − T_ACI_TOA t;
+ −
+ − t.npi=NPI_Unknown;
+ − t.ton=TON_Unknown;
+ −
+ − cdip_data.type=(U8)toa_merge(t);
+ − }
+ − else
+ − {
+ − cdip_data.type=(U8)toa_merge(*type);
+ − }
+ −
+ − if (subaddr==NULL)
+ − {
+ − cdip_data.v_subaddr=FALSE;
+ − cdip_data.satype=-1;
+ − }
+ − else
+ − {
+ − cdip_data.v_subaddr=TRUE;
+ −
+ − if (satype==NULL)
+ − cdip_data.satype=-1;
+ − else
+ − cdip_data.satype=(S16)tos_merge(*satype);
+ −
+ − len=strlen(subaddr);
+ −
+ − /*
+ − * Easiest thing to do is copy as much subaddress data as the
+ − * BAT structure can take. The length field will ensure that
+ − * there are no problems, and will result in the subaddress
+ − * being truncated if it is too long.
+ − */
+ − memcpy(cdip_data.subaddr,subaddr,BAT_MAX_SUBADDR_LENGTH);
+ −
+ − if (len>BAT_MAX_SUBADDR_LENGTH)
+ − cdip_data.c_subaddr=BAT_MAX_SUBADDR_LENGTH;
+ − else
+ − cdip_data.c_subaddr=len;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCOLP |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − EXTERN void rBAT_PlusCOLP(
+ − T_ACI_COLP_STAT stat,
+ − CHAR *number,
+ − T_ACI_TOA *type,
+ − CHAR *subaddr,
+ − T_ACI_TOS *satype,
+ − #ifdef NO_ASCIIZ
+ − T_ACI_PB_TEXT *alpha)
+ − #else
+ − CHAR *alpha)
+ − #endif /*NO_ASCIIZ*/
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_colp colp_data;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCOLP()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_COLP;
+ − resp.response.ptr_res_plus_colp=&colp_data;
+ −
+ − if (number==NULL)
+ − {
+ − colp_data.v_number=FALSE;
+ − }
+ − else
+ − {
+ − len=strlen(number);
+ −
+ − colp_data.v_number=TRUE;
+ −
+ − if (len<=BAT_MAX_COLP_NUMBER_LEN)
+ − {
+ − memcpy(colp_data.number,number,BAT_MAX_COLP_NUMBER_LEN);
+ − colp_data.c_number=(U8)len;
+ − }
+ − else
+ − {
+ − /*
+ − * This is highly unlikely to happen, but if the number is too
+ − * big, then put as many digits as will fit in the BAT structure
+ − * from the END of the number.
+ − */
+ − memcpy(
+ − colp_data.number,
+ − number+(len-BAT_MAX_COLP_NUMBER_LEN),
+ − BAT_MAX_COLP_NUMBER_LEN);
+ −
+ − colp_data.c_number=(U8)BAT_MAX_COLP_NUMBER_LEN;
+ − }
+ − }
+ −
+ − if (type==NULL)
+ − {
+ − /*
+ − * This is mandatory in the BAT so we have to do something here.
+ − */
+ − T_ACI_TOA t;
+ −
+ − t.npi=NPI_Unknown;
+ − t.ton=TON_Unknown;
+ −
+ − colp_data.type=(U8)toa_merge(t);
+ − }
+ − else
+ − {
+ − colp_data.type=(U8)toa_merge(*type);
+ − }
+ −
+ − if (subaddr==NULL)
+ − {
+ − colp_data.v_subaddr=FALSE;
+ − colp_data.satype=-1;
+ − }
+ − else
+ − {
+ − colp_data.v_subaddr=TRUE;
+ −
+ − if (satype==NULL)
+ − colp_data.satype=-1;
+ − else
+ − colp_data.satype=(S16)tos_merge(*satype);
+ −
+ − len=strlen(subaddr);
+ −
+ − /*
+ − * Easiest thing to do is copy as much subaddress data as the
+ − * BAT structure can take. The length field will ensure that
+ − * there are no problems, and will result in the subaddress
+ − * being truncated if it is too long.
+ − */
+ − memcpy(colp_data.subaddr,subaddr,BAT_MAX_SUBADDR_LENGTH);
+ −
+ − if (len>BAT_MAX_SUBADDR_LENGTH)
+ − colp_data.c_subaddr=BAT_MAX_SUBADDR_LENGTH;
+ − else
+ − colp_data.c_subaddr=len;
+ − }
+ −
+ − /*
+ − * Alphanumeric data
+ − */
+ − if (alpha!=NULL)
+ − {
+ − USHORT len;
+ −
+ − colp_data.v_alpha=TRUE;
+ −
+ − #ifdef NO_ASCIIZ
+ −
+ − utl_chsetFromSim(
+ − alpha->data,
+ − alpha->len,
+ − (UBYTE *)colp_data.alpha,
+ − BAT_MAX_COLP_ALPHA_LEN,
+ − &len,
+ − GSM_ALPHA_Def);
+ −
+ − #else
+ −
+ − utl_chsetFromSim(
+ − alpha,
+ − strlen(alpha),
+ − (UBYTE *)colp_data.alpha,
+ − BAT_MAX_COLP_ALPHA_LEN,
+ − &len,
+ − GSM_ALPHA_Def);
+ −
+ − #endif /*NO_ASCIIZ*/
+ −
+ − colp_data.c_alpha=(U8)len;
+ − }
+ − else
+ − {
+ − colp_data.v_alpha=FALSE;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCRING_OFF |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCRING_OFF(
+ − SHORT cId)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCRING_OFF() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCRING_OFF() - FAKE");
+ − rCI_PlusCRING_OFF(cId);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCMS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCMS(
+ − T_ACI_AT_CMD cmdId,
+ − T_ACI_CMS_ERR err,
+ − T_EXT_CMS_ERROR *conc_error)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_plus_cms_error error_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCMS()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_PLUS_CMS_ERROR;
+ − resp.response.ptr_plus_cms_error=&error_data;
+ −
+ − /*
+ − * This relies on T_ACI_CMS_ERR being the same as
+ − * T_BAT_plus_cms_error_err.
+ − */
+ − resp.response.ptr_plus_cms_error->err=(T_BAT_plus_cme_error_error)err;
+ −
+ − /*
+ − * BAT does not include cmdId or conc_error, so these are
+ − * discarded.
+ − */
+ −
+ − aci_bat_send(src_infos,&resp);
+ −
+ − /* check for possible next command queued */
+ − aci_bat_run_cmd (src_infos);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCSMS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCSMS(
+ − T_ACI_CSMS_SERV service,
+ − T_ACI_CSMS_SUPP mt,
+ − T_ACI_CSMS_SUPP mo,
+ − T_ACI_CSMS_SUPP bm)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_csms csms_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCSMS()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_QUE_PLUS_CSMS;
+ − resp.response.ptr_que_plus_csms=&csms_data;
+ −
+ − /*
+ − * This relies on T_ACI_CSMS_SERV being equivalent to
+ − * T_BAT_plus_csms_service.
+ − */
+ − csms_data.service=(T_BAT_plus_csms_service)service;
+ −
+ − /*
+ − * This relies on T_ACI_CSMS_SUPP being equivalent to
+ − * T_BAT_plus_csms_mt/mo/bm.
+ − */
+ − csms_data.mt=(T_BAT_plus_csms_mt)mt;
+ − csms_data.mo=(T_BAT_plus_csms_mo)mo;
+ − csms_data.bm=(T_BAT_plus_csms_bm)bm;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCMGS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCMGS(
+ − T_MNSMS_SUBMIT_CNF *mnsms_submit_cnf)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_cmgs cmgs_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCMGS()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CMGS;
+ − resp.response.ptr_set_plus_cmgs=&cmgs_data;
+ −
+ − /*
+ − * Note that all the rest of the information is lost, as it is
+ − * not in the BAT.
+ − */
+ − cmgs_data.mr=(U8)mnsms_submit_cnf->tp_mr;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCMSS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCMSS(
+ − T_MNSMS_SUBMIT_CNF *mnsms_submit_cnf)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_cmss cmss_data;
+ − UBYTE len = 0;
+ − UBYTE sca_len = 0;
+ − UBYTE ackpdu_len = 0;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCMSS()");
+ −
+ − if (mnsms_submit_cnf EQ NULL)
+ − return;
+ −
+ − /*
+ − * Calculate the PDU length in bytes from the number in bits.
+ − */
+ − len=((mnsms_submit_cnf->sms_sdu.l_buf+7)/8);
+ −
+ − /*
+ − * The PDU data is mandatory, and a truncated version would be
+ − * meaningless, so if it won't fit in the BAT message we should
+ − * give up. This shouldn't happen anyway.
+ − */
+ − if (len>BAT_MAX_SM_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CMSS;
+ − resp.response.ptr_set_plus_cmss=&cmss_data;
+ −
+ −
+ − cmss_data.mr=mnsms_submit_cnf->tp_mr;
+ −
+ − cmss_data.c_ackpdu = 0;
+ −
+ − if (smsShrdPrm.CSMSservice EQ CSMS_SERV_GsmPh2Plus)
+ − {
+ − if (mnsms_submit_cnf->sms_sdu.l_buf)
+ − {
+ − sca_len = mnsms_submit_cnf->sms_sdu.buf[0] + 1;
+ − ackpdu_len = len - sca_len;
+ − /*
+ − * Now copy the PDU into the BAT structure without SCA field.
+ − */
+ − memcpy(cmss_data.ackpdu,&mnsms_submit_cnf->sms_sdu.buf[sca_len],ackpdu_len);
+ − cmss_data.c_ackpdu = ackpdu_len;
+ − }
+ − }
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCMGW |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCMGW(
+ − UBYTE index,
+ − UBYTE numSeg)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_cmgw cmgw_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCMGW()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CMGW;
+ − resp.response.ptr_set_plus_cmgw=&cmgw_data;
+ −
+ − cmgw_data.index=(U8)index;
+ −
+ − /*
+ − * numSeg is lost as it is not in the BAT.
+ − */
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCDS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCDS(
+ − T_MNSMS_STATUS_IND *mnsms_status_ind)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cds cds_data;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCDS()");
+ −
+ − if (mnsms_status_ind==NULL)
+ − return;
+ −
+ − /*
+ − * Calculate the PDU length in bytes from the number in bits.
+ − */
+ − len=((mnsms_status_ind->sms_sdu.l_buf+7)/8);
+ −
+ − /*
+ − * The PDU data is mandatory, and a truncated version would be
+ − * meaningless, so if it won't fit in the BAT message we should
+ − * give up. This shouldn't happen anyway.
+ − */
+ − if (len>BAT_MAX_SM_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CDS;
+ − resp.response.ptr_res_plus_cds=&cds_data;
+ −
+ − /*
+ − * Now copy the PDU into the BAT structure.
+ − */
+ − memcpy(cds_data.pdu,mnsms_status_ind->sms_sdu.buf,len);
+ − cds_data.c_pdu=(U8)len;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCMGC |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCMGC(
+ − T_MNSMS_COMMAND_CNF *mnsms_command_cnf)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_cmgc cmgc_data;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCMGC()");
+ −
+ − if (mnsms_command_cnf==NULL)
+ − return;
+ −
+ − /*
+ − * Calculate the PDU length in bytes from the number in bits.
+ − */
+ − len=((mnsms_command_cnf->sms_sdu.l_buf+7)/8);
+ −
+ − /*
+ − * The PDU data is mandatory, and a truncated version would be
+ − * meaningless, so if it won't fit in the BAT message we should
+ − * give up. This shouldn't happen anyway.
+ − */
+ − if (len>BAT_MAX_SM_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CMGC;
+ − resp.response.ptr_set_plus_cmgc=&cmgc_data;
+ −
+ − cmgc_data.mr=mnsms_command_cnf->tp_mr;
+ −
+ − /*
+ − * Now copy the PDU into the BAT structure.
+ − */
+ − memcpy(cmgc_data.ackpdu,mnsms_command_cnf->sms_sdu.buf,len);
+ − cmgc_data.c_ackpdu=(U8)len;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCMGD |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCMGD(void)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCMGD() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCMGD() - FAKE");
+ − rCI_PlusCMGD();
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCMGR |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCMGR(
+ − T_MNSMS_READ_CNF *mnsms_read_cnf,
+ − T_ACI_CMGR_CBM *cbm)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_cmgr cmgr_data;
+ − T_ACI_PB_TEXT alpha;
+ − T_ACI_SMS_STAT stat;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCMGR()");
+ −
+ − if (mnsms_read_cnf==NULL)
+ − return;
+ −
+ − /*
+ − * Calculate the PDU length in bytes from the number in bits.
+ − */
+ − len=((mnsms_read_cnf->sms_sdu.l_buf+7)/8);
+ −
+ − /*
+ − * The PDU data is mandatory, and a truncated version would be
+ − * meaningless, so if it won't fit in the BAT message we should
+ − * give up. This shouldn't happen anyway.
+ − */
+ − if (len>BAT_MAX_SM_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CMGR;
+ − resp.response.ptr_set_plus_cmgr=&cmgr_data;
+ −
+ − /*
+ − * Now copy the PDU into the BAT structure.
+ − */
+ − memcpy(cmgr_data.pdu,mnsms_read_cnf->sms_sdu.buf,len);
+ − cmgr_data.c_pdu=len;
+ −
+ − /*
+ − * Convert status from PSA type to CMH type.
+ − */
+ − cmhSMS_getStatCmh(mnsms_read_cnf->status,&stat);
+ −
+ − /*
+ − * This relies on T_ACI_SMS_STAT and T_BAT_sms_stat being equivalent
+ − * (apart from the extra 'invalid' value that the ACI has).
+ − */
+ − if (stat==SMS_STAT_Invalid)
+ − cmgr_data.sms_stat=BAT_STAT_NOT_PRESENT;
+ − else
+ − cmgr_data.sms_stat=(T_BAT_sms_stat)stat;
+ −
+ − /*
+ − * Try and get the alphanumeric (phonebook) data.
+ − */
+ − cmhSMS_getPhbEntry(mnsms_read_cnf->sms_sdu.buf,&alpha,stat);
+ −
+ − if (alpha.len)
+ − {
+ − USHORT len_cvtd_alpha;
+ −
+ − utl_chsetFromGsm(
+ − (UBYTE*)alpha.data,
+ − alpha.len,
+ − (UBYTE*)cmgr_data.alpha,
+ − BAT_MAX_CMGR_ALPHA,
+ − &len_cvtd_alpha,
+ − GSM_ALPHA_Def);
+ −
+ − cmgr_data.c_alpha=(U8)len_cvtd_alpha;
+ − cmgr_data.v_alpha=TRUE;
+ −
+ − cmgr_data.alpha_cs=aci_bat_cs_get(src_infos);
+ − }
+ − else
+ − {
+ − cmgr_data.v_alpha=FALSE;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCMGR |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCMGR(
+ − T_MNSMS_READ_CNF *mnsms_read_cnf,
+ − T_ACI_CMGR_CBM *cbm)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_percent_cmgr cmgr_data;
+ − T_ACI_PB_TEXT alpha;
+ − T_ACI_SMS_STAT stat;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCMGR()");
+ −
+ − if (mnsms_read_cnf==NULL)
+ − return;
+ −
+ − /*
+ − * Calculate the PDU length in bytes from the number in bits.
+ − */
+ − len=((mnsms_read_cnf->sms_sdu.l_buf+7)/8);
+ −
+ − /*
+ − * The PDU data is mandatory, and a truncated version would be
+ − * meaningless, so if it won't fit in the BAT message we should
+ − * give up. This shouldn't happen anyway.
+ − */
+ − if (len>BAT_MAX_SM_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PERCENT_CMGR;
+ − resp.response.ptr_set_percent_cmgr=&cmgr_data;
+ −
+ − /*
+ − * Now copy the PDU into the BAT structure.
+ − */
+ − memcpy(cmgr_data.pdu,mnsms_read_cnf->sms_sdu.buf,len);
+ − cmgr_data.c_pdu=len;
+ −
+ − /*
+ − * Convert status from PSA type to CMH type.
+ − */
+ − cmhSMS_getStatCmh(mnsms_read_cnf->status,&stat);
+ −
+ − /*
+ − * This relies on T_ACI_SMS_STAT and T_BAT_sms_stat being equivalent
+ − * (apart from the extra 'invalid' value that the ACI has).
+ − */
+ − if (stat==SMS_STAT_Invalid)
+ − cmgr_data.sms_stat=BAT_STAT_NOT_PRESENT;
+ − else
+ − cmgr_data.sms_stat=(T_BAT_sms_stat)stat;
+ −
+ − /*
+ − * Try and get the alphanumeric (phonebook) data.
+ − */
+ − cmhSMS_getPhbEntry(mnsms_read_cnf->sms_sdu.buf,&alpha,stat);
+ −
+ − if (alpha.len)
+ − {
+ − USHORT len_cvtd_alpha;
+ −
+ − utl_chsetFromGsm(
+ − (UBYTE*)alpha.data,
+ − alpha.len,
+ − (UBYTE*)cmgr_data.alpha,
+ − BAT_MAX_CMGR_ALPHA,
+ − &len_cvtd_alpha,
+ − GSM_ALPHA_Def);
+ −
+ − cmgr_data.c_alpha=(U8)len_cvtd_alpha;
+ − cmgr_data.v_alpha=TRUE;
+ −
+ − cmgr_data.alpha_cs=aci_bat_cs_get(src_infos);
+ − }
+ − else
+ − {
+ − cmgr_data.v_alpha=FALSE;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCMGL |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCMGL(
+ − T_MNSMS_READ_CNF *mnsms_read_cnf)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_cmgl cmgl_data;
+ − T_ACI_PB_TEXT alpha;
+ − T_ACI_SMS_STAT stat;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCMGL()");
+ −
+ − if (mnsms_read_cnf==NULL)
+ − return;
+ −
+ − /*
+ − * Calculate the PDU length in bytes from the number in bits.
+ − */
+ − len=((mnsms_read_cnf->sms_sdu.l_buf+7)/8);
+ −
+ − /*
+ − * The PDU data is mandatory, and a truncated version would be
+ − * meaningless, so if it won't fit in the BAT message we should
+ − * give up. This shouldn't happen anyway.
+ − */
+ − if (len>BAT_MAX_SM_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CMGL;
+ − resp.response.ptr_set_plus_cmgl=&cmgl_data;
+ −
+ − cmgl_data.sms_index=(U16)mnsms_read_cnf->rec_num;
+ −
+ − /*
+ − * Now copy the PDU into the BAT structure.
+ − */
+ − memcpy(cmgl_data.pdu,mnsms_read_cnf->sms_sdu.buf,len);
+ − cmgl_data.c_pdu=len;
+ −
+ − /*
+ − * Try and get the alphanumeric (phonebook) data.
+ − */
+ − cmhSMS_getStatCmh(mnsms_read_cnf->status,&stat);
+ − cmhSMS_getPhbEntry(mnsms_read_cnf->sms_sdu.buf,&alpha,stat);
+ −
+ − if (alpha.len)
+ − {
+ − USHORT len_cvtd_alpha;
+ −
+ − utl_chsetFromGsm(
+ − (UBYTE*)alpha.data,
+ − alpha.len,
+ − (UBYTE*)cmgl_data.alpha,
+ − BAT_MAX_CMGL_ALPHA,
+ − &len_cvtd_alpha,
+ − GSM_ALPHA_Def);
+ −
+ − cmgl_data.c_alpha=(U8)len_cvtd_alpha;
+ − cmgl_data.v_alpha=TRUE;
+ −
+ − cmgl_data.alpha_cs=aci_bat_cs_get(src_infos);
+ − }
+ − else
+ − {
+ − cmgl_data.v_alpha=FALSE;
+ − }
+ −
+ − /*
+ − * This relies on T_ACI_SMS_STAT and T_BAT_plus_cmgl_stat being equivalent
+ − * (apart from the extra 'invalid' value that the ACI has).
+ − */
+ − if (stat==SMS_STAT_Invalid)
+ − cmgl_data.stat=BAT_STAT_NOT_PRESENT;
+ − else
+ − cmgl_data.stat=(T_BAT_plus_cmgl_stat)stat;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCMGL |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCMGL(
+ − T_MNSMS_READ_CNF *mnsms_read_cnf)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_percent_cmgl cmgl_data;
+ − T_ACI_PB_TEXT alpha;
+ − T_ACI_SMS_STAT stat;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCMGL()");
+ −
+ − if (mnsms_read_cnf==NULL)
+ − return;
+ −
+ − /*
+ − * Calculate the PDU length in bytes from the number in bits.
+ − */
+ − len=((mnsms_read_cnf->sms_sdu.l_buf+7)/8);
+ −
+ − /*
+ − * The PDU data is mandatory, and a truncated version would be
+ − * meaningless, so if it won't fit in the BAT message we should
+ − * give up. This shouldn't happen anyway.
+ − */
+ − if (len>BAT_MAX_SM_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PERCENT_CMGL;
+ − resp.response.ptr_set_percent_cmgl=&cmgl_data;
+ −
+ − cmgl_data.sms_index=(U16)mnsms_read_cnf->rec_num;
+ −
+ − /*
+ − * Now copy the PDU into the BAT structure.
+ − */
+ − memcpy(cmgl_data.pdu,mnsms_read_cnf->sms_sdu.buf,len);
+ − cmgl_data.c_pdu=len;
+ −
+ − /*
+ − * Try and get the alphanumeric (phonebook) data.
+ − */
+ − cmhSMS_getStatCmh(mnsms_read_cnf->status,&stat);
+ − cmhSMS_getPhbEntry(mnsms_read_cnf->sms_sdu.buf,&alpha,stat);
+ −
+ − if (alpha.len)
+ − {
+ − USHORT len_cvtd_alpha;
+ −
+ − utl_chsetFromGsm(
+ − (UBYTE*)alpha.data,
+ − alpha.len,
+ − (UBYTE*)cmgl_data.alpha,
+ − BAT_MAX_CMGL_ALPHA,
+ − &len_cvtd_alpha,
+ − GSM_ALPHA_Def);
+ −
+ − cmgl_data.c_alpha=(U8)len_cvtd_alpha;
+ − cmgl_data.v_alpha=TRUE;
+ −
+ − cmgl_data.alpha_cs=aci_bat_cs_get(src_infos);
+ − }
+ − else
+ − {
+ − cmgl_data.v_alpha=FALSE;
+ − }
+ −
+ − /*
+ − * This relies on T_ACI_SMS_STAT and T_BAT_plus_cmgl_stat being equivalent
+ − * (apart from the extra 'invalid' value that the ACI has).
+ − */
+ − if (stat==SMS_STAT_Invalid)
+ − cmgl_data.stat=BAT_STAT_NOT_PRESENT;
+ − else
+ − cmgl_data.stat=(T_BAT_plus_cmgl_stat)stat;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCMTI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCMTI(
+ − T_ACI_SMS_STOR mem,
+ − UBYTE index)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cmti cmti_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCMTI()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CMTI;
+ − resp.response.ptr_res_plus_cmti=&cmti_data;
+ −
+ − /*
+ − * This relies on T_ACI_SMS_STOR being equivalent to T_BAT_sms_mem.
+ − */
+ − cmti_data.sms_mem=(T_BAT_sms_mem)mem;
+ −
+ − cmti_data.sms_index=(U16)index;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCMT |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : Report an incoming mobile terminated message.
+ − */
+ − GLOBAL void rBAT_PlusCMT(
+ − T_MNSMS_MESSAGE_IND *msg)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cmt cmt_data;
+ − UBYTE len;
+ − T_ACI_PB_TEXT alpha;
+ − T_ACI_SMS_STAT stat;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCMT()");
+ −
+ − /*
+ − * This shouldn't happen, but check anyway.
+ − */
+ − if (msg==NULL)
+ − return;
+ −
+ − /*
+ − * Calculate the PDU length in bytes from the number in bits.
+ − */
+ − len=((msg->sms_sdu.l_buf+7)/8);
+ −
+ − /*
+ − * The PDU data is mandatory, and a truncated version would be
+ − * meaningless, so if it won't fit in the BAT message we should
+ − * give up. This shouldn't happen anyway.
+ − */
+ − if (len>BAT_MAX_SM_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CMT;
+ − resp.response.ptr_res_plus_cmt=&cmt_data;
+ −
+ − /*
+ − * Now copy the PDU data into the BAT structure, secure in the
+ − * knowledge that we have enough room due to the check earlier.
+ − */
+ − memcpy(cmt_data.pdu,&msg->sms_sdu.buf,len);
+ − cmt_data.c_pdu=(U8)len;
+ −
+ − /*
+ − * Try and get the alphanumeric (phonebook) data.
+ − */
+ − cmhSMS_getStatCmh(msg->status,&stat);
+ − cmhSMS_getPhbEntry(msg->sms_sdu.buf,&alpha,stat);
+ −
+ − if (alpha.len)
+ − {
+ − USHORT len_cvtd_alpha;
+ −
+ − /*
+ − * This relies on T_ACI_CSCS_CHSET being identical to
+ − * T_BAT_plus_cscs_cs.
+ − */
+ − utl_chsetFromGsm(
+ − (UBYTE*)alpha.data,
+ − alpha.len,
+ − (UBYTE*)cmt_data.alpha,
+ − BAT_MAX_CMT_ALPHA,
+ − &len_cvtd_alpha,
+ − GSM_ALPHA_Def);
+ −
+ − cmt_data.c_alpha=(U8)len_cvtd_alpha;
+ − cmt_data.v_alpha=TRUE;
+ −
+ − cmt_data.alpha_cs=aci_bat_cs_get(src_infos);
+ − }
+ − else
+ − {
+ − cmt_data.v_alpha=FALSE;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCBM |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCBM(
+ − T_MMI_CBCH_IND *mmi_cbch_ind)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cbm cbm_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCBM()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CBM;
+ − resp.response.ptr_res_plus_cbm=&cbm_data;
+ −
+ − /*
+ − * If the data received is too long for the BAT structure it will
+ − * effectively be truncated.
+ − */
+ − if (mmi_cbch_ind->cbch_len>BAT_MAX_SM_LEN)
+ − cbm_data.c_pdu=BAT_MAX_SM_LEN;
+ − else
+ − cbm_data.c_pdu=(U8)mmi_cbch_ind->cbch_len;
+ −
+ − memcpy(cbm_data.pdu,mmi_cbch_ind->cbch_msg,BAT_MAX_SM_LEN);
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCPMS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCPMS(
+ − T_ACI_SMS_STOR_OCC *mem1,
+ − T_ACI_SMS_STOR_OCC *mem2,
+ − T_ACI_SMS_STOR_OCC *mem3)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_cpms cpms_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCPMS()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CPMS;
+ − resp.response.ptr_set_plus_cpms=&cpms_data;
+ −
+ − if (mem1==NULL)
+ − {
+ − /*
+ − * If this happens we would be required to populate mandatory
+ − * parameters without the information to do so. Give up.
+ − */
+ − return;
+ − }
+ −
+ − cpms_data.mem1=(T_BAT_plus_cpms_mem1)mem1->mem;
+ − cpms_data.used1=(U8)mem1->used;
+ − cpms_data.total1=(U8)mem1->total;
+ −
+ − if (mem2)
+ − {
+ − cpms_data.mem2=(T_BAT_plus_cpms_mem2)mem2->mem;
+ − cpms_data.used2=(U8)mem2->used;
+ − cpms_data.total2=(U8)mem2->total;
+ − }
+ − else
+ − {
+ − cpms_data.mem2=BAT_CPMS_MEM2_NOT_PRESENT;
+ − cpms_data.used2=0;
+ − cpms_data.total2=0;
+ − }
+ −
+ − if (mem3)
+ − {
+ − cpms_data.mem3=(T_BAT_plus_cpms_mem3)mem3->mem;
+ − cpms_data.used3=(U8)mem3->used;
+ − cpms_data.total3=(U8)mem3->total;
+ − }
+ − else
+ − {
+ − cpms_data.mem3=BAT_CPMS_MEM3_NOT_PRESENT;
+ − cpms_data.used3=0;
+ − cpms_data.total3=0;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusILRR |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusILRR(
+ − T_ACI_BS_SPEED speed,
+ − T_ACI_BS_FRM format,
+ − T_ACI_BS_PAR parity)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_ilrr ilrr_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusILRR()");
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_ILRR;
+ − resp.response.ptr_res_plus_ilrr=&ilrr_data;
+ −
+ − /*
+ − * T_ACI_BS_SPEED is very different from T_BAT_plus_ilrr_rate,
+ − * so we need this conversion.
+ − */
+ − switch (speed)
+ − {
+ − case BS_SPEED_NotPresent:
+ − /*
+ − * BAT does not include a 'not present' value, but I don't
+ − * see any better alternative than this.
+ − */
+ − ilrr_data.rate=-1;
+ − break;
+ −
+ − case BS_SPEED_300_V21:
+ − case BS_SPEED_300_V110:
+ − ilrr_data.rate=BAT_ILRR_RATE_300;
+ − break;
+ −
+ − case BS_SPEED_1200_V22:
+ − case BS_SPEED_1200_75_V23:
+ − case BS_SPEED_1200_V120:
+ − case BS_SPEED_1200_V110:
+ − ilrr_data.rate=BAT_ILRR_RATE_1200;
+ − break;
+ −
+ − case BS_SPEED_2400_V22bis:
+ − case BS_SPEED_2400_V26ter:
+ − case BS_SPEED_2400_V120:
+ − case BS_SPEED_2400_V110:
+ − ilrr_data.rate=BAT_ILRR_RATE_2400;
+ − break;
+ −
+ − case BS_SPEED_4800_V32:
+ − case BS_SPEED_4800_V120:
+ − case BS_SPEED_4800_V110:
+ − ilrr_data.rate=BAT_ILRR_RATE_4800;
+ − break;
+ −
+ − case BS_SPEED_9600_V32:
+ − case BS_SPEED_9600_V34:
+ − case BS_SPEED_9600_V120:
+ − case BS_SPEED_9600_V110:
+ − ilrr_data.rate=BAT_ILRR_RATE_9600;
+ − break;
+ −
+ − case BS_SPEED_14400_V34:
+ − case BS_SPEED_14400_V120:
+ − case BS_SPEED_14400_V110:
+ − ilrr_data.rate=BAT_ILRR_RATE_14400;
+ − break;
+ −
+ − case BS_SPEED_19200_V110:
+ − ilrr_data.rate=BAT_ILRR_RATE_19200;
+ − break;
+ −
+ − case BS_SPEED_38400_V110:
+ − ilrr_data.rate=BAT_ILRR_RATE_38400;
+ − break;
+ −
+ − default:
+ − case BS_SPEED_AUTO:
+ − case BS_SPEED_28800_V110:
+ − ilrr_data.rate=BAT_ILRR_RATE_1;
+ − break;
+ − }
+ −
+ − /*
+ − * This relies on T_ACI_BS_FRM and T_BAT_framing_format being
+ − * identical.
+ − */
+ − ilrr_data.framing_format=(T_BAT_framing_format)format;
+ −
+ − /*
+ − * This relies on T_ACI_BS_PAR and T_BAT_framing_format being
+ − * identical.
+ − */
+ − ilrr_data.framing_parity=(T_BAT_framing_parity)parity;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_BUSY |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_BUSY(
+ − T_ACI_AT_CMD cmdId,
+ − SHORT cId)
+ − {
+ − T_BAT_cmd_response resp;
+ − T_BAT_no_parameter dummy;
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ −
+ − TRACE_FUNCTION ("rBAT_BUSY()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − if (src_infos->bat_client[src_infos->active_client].atd_live EQ TRUE)
+ − {
+ − /*
+ − * We were still waiting for a final response to ATD - this is it.
+ − */
+ − resp.ctrl_response=BAT_RES_AT_BUSY;
+ − src_infos->bat_client[src_infos->active_client].atd_live=FALSE;
+ − }
+ − else
+ − {
+ − /*
+ − * We've already had the final response to ATD, so this must be
+ − * an unsolicited message.
+ − */
+ − resp.ctrl_response=BAT_RES_UNS_AT_BUSY;
+ − }
+ −
+ − resp.response.ptr_at_busy = &dummy;
+ − dummy.bat_dummy = 0xFF;
+ −
+ − aci_bat_send(src_infos,&resp);
+ −
+ − /* check for possible next command queued */
+ − aci_bat_run_cmd (src_infos);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_NO_ANSWER |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_NO_ANSWER(
+ − T_ACI_AT_CMD cmdId,
+ − SHORT cId)
+ − {
+ − T_BAT_cmd_response resp;
+ − T_BAT_no_parameter dummy;
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ −
+ − TRACE_FUNCTION ("rBAT_NO_ANSWER()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − if (src_infos->bat_client[src_infos->active_client].atd_live EQ TRUE)
+ − {
+ − /*
+ − * We were still waiting for a final response to ATD - this is it.
+ − */
+ − resp.ctrl_response=BAT_RES_AT_NO_ANSWER;
+ − src_infos->bat_client[src_infos->active_client].atd_live=FALSE;
+ − }
+ − else
+ − {
+ − /*
+ − * We've already had the final response to ATD, so this must be
+ − * an unsolicited message.
+ − */
+ − resp.ctrl_response=BAT_RES_UNS_AT_NO_ANSWER;
+ − }
+ −
+ − resp.response.ptr_at_no_answer = &dummy;
+ − dummy.bat_dummy = 0xFF;
+ −
+ − aci_bat_send(src_infos,&resp);
+ −
+ − /* check for possible next command queued */
+ − aci_bat_run_cmd (src_infos);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentSIMREM |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentSIMREM(
+ − T_ACI_SIMREM_TYPE srType)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_simrem simrem_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentSIMREM()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_SIMREM;
+ − resp.response.ptr_res_percent_simrem=&simrem_data;
+ −
+ − /*
+ − * This relies on T_ACI_SIMREM_TYPE being identical to
+ − * T_BAT_percent_simrem_m.
+ − */
+ − simrem_data.m=(T_BAT_percent_simrem_m)srType;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCLIR |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCLIR(
+ − T_ACI_CLIR_MOD mode,
+ − T_ACI_CLIR_STAT stat)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_clir clir_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCLIR()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_QUE_PLUS_CLIR;
+ − resp.response.ptr_que_plus_clir=&clir_data;
+ −
+ − /*
+ − * T_ACI_CLIR_STAT and T_BAT_plus_clir_m are identical except for
+ − * the fact that the BAT version does not include a 'not present'
+ − * value.
+ − */
+ − if (stat==CLIR_STAT_NotPresent)
+ − clir_data.m=BAT_CLIR_M_UNKNOWN;
+ − else
+ − clir_data.m=(T_BAT_plus_clir_m)stat;
+ −
+ − /*
+ − * This relies on T_ACI_CLIR_MOD and T_BAT_plus_clir_n being
+ − * identical.
+ − */
+ − clir_data.n=(T_BAT_plus_clir_n)mode;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCOLR |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCOLR(
+ − T_ACI_COLR_STAT stat)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentCOLR() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentCOLR() - FAKE");
+ − rCI_PercentCOLR(stat);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCSSI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCSSI(
+ − T_ACI_CSSI_CODE code,
+ − SHORT index)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cssi cssi_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCSSI()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CSSI;
+ − resp.response.ptr_res_plus_cssi=&cssi_data;
+ −
+ − /*
+ − * This relies on T_ACI_CSSI_CODE being identical to
+ − * T_BAT_plus_cssi_code1.
+ − */
+ − cssi_data.code1=(T_BAT_plus_cssi_code1)code;
+ −
+ − cssi_data.index=(S32)index;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCSSU |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCSSU(
+ − T_ACI_CSSU_CODE code,
+ − SHORT index,
+ − CHAR *number,
+ − T_ACI_TOA *type,
+ − CHAR *subaddr,
+ − T_ACI_TOS *satype)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cssu cssu_data;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCSSU()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CSSU;
+ − resp.response.ptr_res_plus_cssu=&cssu_data;
+ −
+ − /*
+ − * This relies on T_ACI_CSSU_CODE and T_BAT_plus_cssu_code2
+ − * being identical.
+ − */
+ − cssu_data.code2=(T_BAT_plus_cssu_code2)code;
+ −
+ − cssu_data.index=(S32)index;
+ −
+ − if (number==NULL)
+ − {
+ − cssu_data.v_number=FALSE;
+ − }
+ − else
+ − {
+ − len=strlen(number);
+ −
+ − cssu_data.v_number=TRUE;
+ −
+ − if (len<=BAT_MAX_CSSU_NUMBER_LEN)
+ − {
+ − memcpy(cssu_data.number,number,BAT_MAX_CSSU_NUMBER_LEN);
+ − cssu_data.c_number=(U8)len;
+ − }
+ − else
+ − {
+ − /*
+ − * This is highly unlikely to happen, but if the number is too
+ − * big, then put as many digits as will fit in the BAT structure
+ − * from the END of the number.
+ − */
+ − memcpy(
+ − cssu_data.number,
+ − number+(len-BAT_MAX_CSSU_NUMBER_LEN),
+ − BAT_MAX_CSSU_NUMBER_LEN);
+ −
+ − cssu_data.c_number=(U8)BAT_MAX_CSSU_NUMBER_LEN;
+ − }
+ − }
+ −
+ − if (type==NULL)
+ − {
+ − cssu_data.type=-1;
+ − }
+ − else
+ − {
+ − cssu_data.type=(U16)toa_merge(*type);
+ − }
+ −
+ − if (subaddr==NULL)
+ − {
+ − cssu_data.v_subaddr=FALSE;
+ − cssu_data.satype=-1;
+ − }
+ − else
+ − {
+ − cssu_data.v_subaddr=TRUE;
+ −
+ − if (satype==NULL)
+ − cssu_data.satype=-1;
+ − else
+ − cssu_data.satype=(S16)tos_merge(*satype);
+ −
+ − len=strlen(subaddr);
+ −
+ − /*
+ − * Easiest thing to do is copy as much subaddress data as the
+ − * BAT structure can take. The length field will ensure that
+ − * there are no problems, and will result in the subaddress
+ − * being truncated if it is too long.
+ − */
+ − memcpy(cssu_data.subaddr,subaddr,BAT_MAX_SUBADDR_LENGTH);
+ −
+ − if (len>BAT_MAX_SUBADDR_LENGTH)
+ − cssu_data.c_subaddr=BAT_MAX_SUBADDR_LENGTH;
+ − else
+ − cssu_data.c_subaddr=len;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCUSD |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCUSD(
+ − T_ACI_CUSD_MOD m,
+ − T_ACI_USSD_DATA *ussd,
+ − SHORT dcs)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cusd cusd_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCUSD()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CUSD;
+ − resp.response.ptr_res_plus_cusd=&cusd_data;
+ −
+ − /*
+ − * This assumes that T_ACI_CUSD_MOD and
+ − * T_BAT_VAL_plus_cusd_m are equivalent.
+ − */
+ − cusd_data.m=(T_BAT_VAL_plus_cusd_m)m;
+ −
+ − if (ussd)
+ − {
+ − USHORT len;
+ −
+ − utl_ussdDtaToTe(
+ − ussd->data,
+ − ussd->len,
+ − (UBYTE *)cusd_data.str,
+ − BAT_MAX_USSD_LEN,
+ − &len,
+ − (UBYTE)dcs);
+ −
+ − cusd_data.c_str=(U16)len;
+ − cusd_data.v_str=TRUE;
+ − }
+ − else
+ − {
+ − cusd_data.v_str=FALSE;
+ − }
+ −
+ − cusd_data.dcs=(S16)dcs;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCCFC |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCCFC (T_ACI_CCFC_SET* setting)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_ccfc ccfc_data = {0};
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCCFC()");
+ −
+ − /* fill the BAT response struct */
+ − resp.ctrl_response = BAT_RES_SET_PLUS_CCFC;
+ − resp.response.ptr_set_plus_ccfc = &ccfc_data;
+ −
+ − ccfc_data.status = (T_BAT_plus_ccfc_status)setting->clsstat.status;
+ − ccfc_data.bearer_class = (T_BAT_plus_ccfc_bearer_class)setting->clsstat.class_type;
+ −
+ − if (ccfc_data.c_number = strlen(setting->number))
+ − {
+ − ccfc_data.v_number = TRUE;
+ − memcpy(ccfc_data.number, setting->number, ccfc_data.c_number);
+ − }
+ −
+ − /* Convert type to string */
+ − ccfc_data.type = toa_merge(setting->type);
+ −
+ − if(ccfc_data.c_subaddr = strlen(setting->subaddr))
+ − {
+ − ccfc_data.v_subaddr = TRUE;
+ − memcpy(ccfc_data.subaddr, setting->subaddr, ccfc_data.c_subaddr);
+ − }
+ −
+ − /* Convert sattype to string */
+ − ccfc_data.satype = tos_merge(setting->satype);
+ −
+ − ccfc_data.time = (SHORT)setting->time;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCLCK |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCLCK(
+ − T_ACI_CLSSTAT *clsStat)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_clck clck_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCLCK()");
+ −
+ − /*
+ − * This shouldn't happen, but there's no point carrying on
+ − * if it does.
+ − */
+ − if (clsStat==NULL)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CLCK;
+ − resp.response.ptr_set_plus_clck=&clck_data;
+ −
+ − /*
+ − * This relies on T_ACI_CLASS being identical to
+ − * T_BAT_bearer_class.
+ − */
+ − clck_data.bearer_class=(T_BAT_bearer_class)clsStat->class_type;
+ −
+ − /*
+ − * This relies on T_ACI_STATUS being identical to
+ − * T_BAT_plus_clck_status. It is, except that the BAT does not
+ − * have a 'not present' value.
+ − */
+ − clck_data.status=(T_BAT_plus_clck_status)clsStat->status;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCIMI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCIMI(
+ − CHAR *imsi)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_cimi cimi_data;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCIMI()");
+ −
+ − /*
+ − * This shouldn't happen, but there's no point carrying on
+ − * if it does.
+ − */
+ − if (imsi==NULL)
+ − return;
+ −
+ − len=strlen(imsi);
+ −
+ − /*
+ − * There is also no point carrying on if the BAT structure has
+ − * insufficient space to store the whole IMSI.
+ − */
+ − if (len>BAT_MAX_CIMI_IMSI_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CIMI;
+ − resp.response.ptr_set_plus_cimi=&cimi_data;
+ −
+ − memcpy(cimi_data.imsi,imsi,BAT_MAX_CIMI_IMSI_LEN);
+ − cimi_data.c_imsi=(U8)len;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − #ifdef SIM_TOOLKIT
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentSATI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentSATI ( SHORT len, UBYTE* satCmd )
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_sati sati_data = {0};
+ −
+ −
+ − TRACE_FUNCTION ("rBAT_PercentSATI()");
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − /* fill the response struct and call aci_bat_send() */
+ − resp.ctrl_response = BAT_RES_UNS_PERCENT_SATI;
+ − resp.response.ptr_res_percent_sati = &sati_data;
+ −
+ − /* Limit copy length to the BAT size */
+ − if(sati_data.c_satcmd = len)
+ − memcpy(sati_data.satcmd, satCmd,
+ − (sati_data.c_satcmd <= BAT_MAX_SATI_SAT_CMD_LEN) ?
+ − sati_data.c_satcmd : BAT_MAX_SATI_SAT_CMD_LEN);
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentSATE |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentSATE (SHORT len, UBYTE* satCmd)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_percent_sate sate_data = {0};
+ −
+ − TRACE_FUNCTION ("rBAT_PercentSATE()");
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − /* fill the response struct and call aci_bat_send() */
+ − resp.ctrl_response = BAT_RES_SET_PERCENT_SATE;
+ − resp.response.ptr_set_percent_sate = &sate_data;
+ −
+ − /* Limit copy length to the BAT size */
+ − if(sate_data.c_satrsp = len)
+ − memcpy(sate_data.satrsp, satCmd,
+ − (sate_data.c_satrsp <= BAT_MAX_SATE_SAT_RSP_LEN) ?
+ − sate_data.c_satrsp : BAT_MAX_SATE_SAT_RSP_LEN);
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − #endif /* SIM_TOOLKIT */
+ −
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentIMEI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : response to atd*#06# query the IMEI
+ − */
+ −
+ − GLOBAL void rBAT_PercentIMEI(T_ACI_IMEI *imei)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_percent_imei rsp_imei;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentIMEI()");
+ −
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PERCENT_IMEI;
+ − resp.response.ptr_que_percent_imei = &rsp_imei;
+ −
+ − memcpy(&rsp_imei, imei, sizeof(T_BAT_res_que_percent_imei));
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentKSIR |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentKSIR (T_ACI_KSIR *ksStat)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentKSIR()");
+ −
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − utl_cb_percentKSIR ((U8)src_id, ksStat);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCPI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCPI(
+ − SHORT cId,
+ − T_ACI_CPI_MSG msgType,
+ − T_ACI_CPI_IBT ibt,
+ − T_ACI_CPI_TCH tch,
+ − USHORT cause)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_cpi cpi_data;
+ − T_ACI_CLCC_CALDESC clist[MAX_CALL_NR];
+ − UBYTE len;
+ − SHORT i;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCPI()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CPI;
+ − resp.response.ptr_res_percent_cpi=&cpi_data;
+ −
+ − cpi_data.cid=(U8)cId;
+ −
+ − /*
+ − * This relies on T_ACI_CPI_MSG being equivalent to
+ − * T_BAT_percent_cpi_msgtype.
+ − */
+ − cpi_data.msgtype=(T_BAT_percent_cpi_msgtype)msgType;
+ −
+ − /*
+ − * This relies on T_ACI_CPI_IBT being equivalent to
+ − * T_BAT_percent_cpi_ibt.
+ − */
+ − cpi_data.ibt=(T_BAT_percent_cpi_ibt)ibt;
+ −
+ − /*
+ − * This relies on T_ACI_CPI_TCH being equivalent to
+ − * T_BAT_percent_cpi_tch.
+ − */
+ − cpi_data.tch=(T_BAT_percent_cpi_tch)tch;
+ −
+ − if( (GET_CAUSE_ORIGIN_ENTITY(cause) EQ CC_ORIGINATING_ENTITY AND
+ − GET_CAUSE_DEFBY(cause) EQ DEFBY_STD )
+ − OR
+ − (cause EQ MNCC_CAUSE_REEST_STARTED OR
+ − cause EQ MNCC_CAUSE_REEST_FINISHED) )
+ − {
+ − cpi_data.cause=(S32)GET_CAUSE_VALUE(cause);
+ − }
+ − else
+ − {
+ − cpi_data.cause=(S32) BAT_PARAMETER_NOT_PRESENT;
+ − }
+ −
+ − /*
+ − * Set all the rest of the information to 'not present' as a
+ − * default.
+ − */
+ − cpi_data.dir=-1;
+ − cpi_data.mode=-1;
+ − cpi_data.type=-1;
+ − cpi_data.v_number=FALSE;
+ − cpi_data.v_alpha=FALSE;
+ − cpi_data.line=-1;
+ − cpi_data.prog_desc = BAT_P_CPI_PROG_DESC_NOT_PRESENT;
+ −
+ − /*
+ − * Now try to obtain the rest of the information.
+ − */
+ − if (qAT_PercentCLCC(src_id,clist) EQ AT_CMPL)
+ − {
+ − for (i=0;i<MAX_CALL_NR;i++)
+ − {
+ − T_ACI_CLCC_CALDESC *call;
+ −
+ − /*
+ − * Get a pointer to this particular call for convenience.
+ − */
+ − call=&clist[i];
+ −
+ − if (call->idx==ACI_NumParmNotPresent)
+ − break;
+ −
+ − if (call->idx==cId)
+ − {
+ − cpi_data.dir=(U8)call->dir;
+ − cpi_data.mode=(S16)call->mode;
+ −
+ − len=strlen(call->number);
+ −
+ − if (len && (len<=BAT_MAX_CPI_NUMBER_LEN))
+ − {
+ − cpi_data.v_number=TRUE;
+ − memcpy(cpi_data.number,call->number,len);
+ − cpi_data.c_number=(U8)len;
+ − }
+ −
+ − if (call->type.ton!=TON_NotPresent)
+ − cpi_data.type=(S16)toa_merge(call->type);
+ −
+ − if (call->alpha.len)
+ − {
+ − USHORT len_cvtd_alpha;
+ −
+ − #ifdef NO_ASCIIZ
+ − utl_chsetFromGsm(
+ − call->alpha.data,
+ − call->alpha.len,
+ − cpi_data.alpha,
+ − BAT_MAX_CPI_ALPHA_LEN,
+ − &len_cvtd_alpha,
+ − GSM_ALPHA_Def);
+ − #else
+ − utl_chsetFromGsm(
+ − call->alpha,
+ − 0,
+ − cpi_data.alpha,
+ − BAT_MAX_CPI_ALPHA_LEN,
+ − &len_cvtd_alpha,
+ − GSM_ALPHA_Int);
+ − #endif
+ −
+ − cpi_data.c_alpha=(U8)len_cvtd_alpha;
+ − cpi_data.v_alpha=TRUE;
+ − }
+ −
+ − cpi_data.line=(S16)call->class_type;
+ − cpi_data.prog_desc = (S16)call->prog_desc;
+ −
+ − /*
+ − * We have the information, now break out of the for loop.
+ − */
+ − break;
+ −
+ − }
+ − }
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCTYI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCTYI(
+ − T_ACI_CTTY_NEG neg,
+ − T_ACI_CTTY_TRX trx)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_ctyi ctyi_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCTYI()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CTYI;
+ − resp.response.ptr_res_percent_ctyi=&ctyi_data;
+ −
+ − /*
+ − * This relies on T_ACI_CTTY_NEG and T_BAT_percent_ctyi_neg
+ − * being identical.
+ − */
+ − ctyi_data.neg=(T_BAT_percent_ctyi_neg)neg;
+ −
+ − /*
+ − * The BAT has a 'not present' value but not an 'unknown' value,
+ − * vice versa for the ACI.
+ − */
+ − if (trx==CTTY_TRX_Unknown)
+ − ctyi_data.trx=BAT_TRX_NOT_PRESENT;
+ − else
+ − ctyi_data.trx=(T_BAT_trx)trx;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCNUM |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCNUM(
+ − T_ACI_CNUM_MSISDN *msisdn,
+ − UBYTE num)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_cnum cnum_data;
+ − UBYTE i;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCNUM()");
+ −
+ − /*
+ − * This shouldn't happen, but there's no point carrying on
+ − * if it does.
+ − */
+ − if (msisdn==NULL)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CNUM;
+ − resp.response.ptr_set_plus_cnum=&cnum_data;
+ −
+ − /*
+ − * This has delivered a list, however the BAT response only
+ − * allows for single items. So we must send each one
+ − * individually.
+ − */
+ − for (i=0;i<num;i++)
+ − {
+ − T_ACI_CNUM_MSISDN *m;
+ −
+ − /*
+ − * Get a pointer to this particular item for convenience.
+ − */
+ − m=&msisdn[i];
+ −
+ − if (m->vldFlag==TRUE)
+ − {
+ − len=strlen(m->alpha);
+ −
+ − if (len)
+ − {
+ − USHORT cvtd_len=0;
+ −
+ − cnum_data.v_alpha=TRUE;
+ −
+ − utl_chsetFromGsm(
+ − m->alpha,
+ − (USHORT)len,
+ − (UBYTE *)cnum_data.alpha,
+ − BAT_MAX_CNUM_ALPHA_LEN,
+ − &cvtd_len,
+ − GSM_ALPHA_Int);
+ −
+ − cnum_data.c_alpha=(U8)cvtd_len;
+ − }
+ − else
+ − {
+ − cnum_data.v_alpha=FALSE;
+ − }
+ −
+ − len=strlen(m->number);
+ −
+ − if (len<=BAT_MAX_CNUM_NUMBER_LEN)
+ − {
+ − memcpy(cnum_data.number,m->number,BAT_MAX_CNUM_NUMBER_LEN);
+ − cnum_data.c_number=(U8)len;
+ − }
+ − else
+ − {
+ − /*
+ − * This is highly unlikely to happen, but if the number is too
+ − * big, then put as many digits as will fit in the BAT structure
+ − * from the END of the number.
+ − */
+ − memcpy(
+ − cnum_data.number,
+ − m->number+(len-BAT_MAX_CNUM_NUMBER_LEN),
+ − BAT_MAX_CNUM_NUMBER_LEN);
+ −
+ − cnum_data.c_number=(U8)BAT_MAX_CNUM_NUMBER_LEN;
+ − }
+ −
+ − cnum_data.type=(U8)toa_merge(m->type);
+ −
+ − cnum_data.index=(U8)i;
+ −
+ − /*
+ − * Note that we are losing 'speed', 'service' and 'itc'
+ − * as they are not in the BAT.
+ − */
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCPOL |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCPOL(
+ − SHORT startIdx,
+ − SHORT lastIdx,
+ − T_ACI_CPOL_OPDESC *operLst,
+ − SHORT usdNtry)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCPOL()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − /*
+ − * This could be a response to either a query or a test command.
+ − */
+ − if (aci_bat_cur_cmd_get(src_infos)==BAT_CMD_TST_PLUS_CPOL)
+ − {
+ − T_BAT_res_tst_plus_cpol cpol_data;
+ −
+ − resp.ctrl_response=BAT_RES_TST_PLUS_CPOL;
+ − resp.response.ptr_tst_plus_cpol=&cpol_data;
+ −
+ − /*
+ − * Note that we lose usdNtry, which is not in the BAT (or in
+ − * GSM 07.07) but is in the ACI. Whether this will give us
+ − * problems is for further study.
+ − */
+ − cpol_data.index1=((S16)startIdx EQ ACI_NumParmNotPresent) ? 1 : (S16)startIdx;
+ − cpol_data.index2=(S16)lastIdx;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − else if (operLst!=NULL)
+ − {
+ − T_BAT_res_que_plus_cpol cpol_data;
+ − UBYTE i;
+ −
+ − resp.ctrl_response=BAT_RES_QUE_PLUS_CPOL;
+ − resp.response.ptr_que_plus_cpol=&cpol_data;
+ −
+ − /*
+ − * This has delivered a list, however the BAT response only
+ − * allows for single items. So we must send each one
+ − * individually.
+ − */
+ − for (i=0;i<MAX_OPER;i++)
+ − {
+ − T_ACI_CPOL_OPDESC *o;
+ − UBYTE len;
+ −
+ − /*
+ − * Get a pointer to this particular item for convenience.
+ − */
+ − o=&operLst[i];
+ −
+ − /*
+ − * Stop when we reach the end of the list.
+ − */
+ − if (o->index==ACI_NumParmNotPresent)
+ − break;
+ −
+ − cpol_data.index=(U8)o->index;
+ −
+ − /*
+ − * This relies on T_ACI_CPOL_FRMT and T_BAT_plus_cpol_format
+ − * being identical.
+ − */
+ − cpol_data.format=(T_BAT_plus_cpol_format)o->format;
+ −
+ − len=strlen(o->oper);
+ −
+ − /*
+ − * We copy as much of the operator name as the BAT structure
+ − * can handle. If it is too long it will effectively be
+ − * truncated.
+ − */
+ − if (len>BAT_MAX_CPOL_OPER_LEN)
+ − cpol_data.c_oper=BAT_MAX_CPOL_OPER_LEN;
+ − else
+ − cpol_data.c_oper=(U8)len;
+ −
+ − memcpy(cpol_data.oper,o->oper,BAT_MAX_CPOL_OPER_LEN);
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCCCM |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCCCM(
+ − LONG *ccm)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cccm cccm_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCCCM()");
+ −
+ − /*
+ − * This shouldn't happen, but there's no point carrying on
+ − * if it does.
+ − */
+ − if (ccm==NULL)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CCCM;
+ − resp.response.ptr_res_plus_cccm=&cccm_data;
+ −
+ − cccm_data.ccm=(U32)*ccm;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCTV |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCTV(void)
+ − {
+ − #ifndef FF_ATI_BAT
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentCTV() - IGNORED");
+ − #else
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentCTV() - FAKE");
+ − rCI_PercentCTV();
+ − #endif
+ − }
+ −
+ − #ifdef SIM_TOOLKIT
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentSATN |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ −
+ − N.B. Not all ACI parameters are supported by BAT
+ − ACI parameters are SHORT len, UBYTE* satCmd, T_ACI_SATN_CNTRL_TYPE cntrl_type
+ − */
+ − GLOBAL void rBAT_PercentSATN (SHORT len, UBYTE* satCmd, T_ACI_SATN_CNTRL_TYPE cntrl_type)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_satn satn_data = {0};
+ −
+ − TRACE_FUNCTION ("rBAT_PercentSATN()");
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − /* fill the response struct and call aci_bat_send() */
+ − resp.ctrl_response = BAT_RES_UNS_PERCENT_SATN;
+ − resp.response.ptr_res_percent_satn = &satn_data;
+ −
+ − if(satn_data.c_satcmd = len)
+ − memcpy(satn_data.satcmd, satCmd,
+ − (satn_data.c_satcmd <= BAT_MAX_SATN_SAT_CMD_LEN) ?
+ − satn_data.c_satcmd : BAT_MAX_SATN_SAT_CMD_LEN);
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentSATA |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ −
+ − N.B. Not all ACI parameters are supported by BAT
+ − ACI parameters are SHORT cId, LONG rdlTimeout_ms, T_ACI_SATA_ADD* addParm
+ − */
+ − #ifdef FF_SAT_E
+ − GLOBAL void rBAT_PercentSATA (SHORT cId, LONG rdlTimeout_ms, T_ACI_SATA_ADD* addParm)
+ − #else
+ − GLOBAL void rBAT_PercentSATA (SHORT cId, LONG rdlTimeout_ms)
+ − #endif
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_sata sata_data = {0};
+ −
+ − TRACE_FUNCTION ("rBAT_PercentSATA()");
+ −
+ − #ifdef FF_SAT_E
+ − /* Store for use with rCI_PercentSATA - ATI maintenace
+ − * Addparm is a global variable ! */
+ − memcpy(&Addparm, addParm, sizeof(T_ACI_SATA_ADD));
+ − #endif
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − /* fill the response struct and call aci_bat_send() */
+ − resp.ctrl_response = BAT_RES_UNS_PERCENT_SATA;
+ − resp.response.ptr_res_percent_sata = &sata_data;
+ − sata_data.redial_timeout = (S32)rdlTimeout_ms;
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − #endif /* SIM_TOOLKIT */
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_sms_ready |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_sms_ready(void)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_sms_ready() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_sms_ready() - FAKE");
+ − rCI_sms_ready();
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_phb_status |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_phb_status(
+ − T_ACI_PB_STAT status)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_phb_status() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_phb_status() - FAKE");
+ − rCI_phb_status(status);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentSIMINS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentSIMINS(
+ − T_ACI_CME_ERR err)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_simins simins_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentSIMINS()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_SIMINS;
+ − resp.response.ptr_res_percent_simins=&simins_data;
+ −
+ − /*
+ − * T_ACI_CME_ERR is different from T_BAT_percent_simins_n, so
+ − * we need this conversion.
+ − */
+ − switch (err)
+ − {
+ − case CME_ERR_NotPresent:
+ − simins_data.n=BAT_P_SIMINS_N_NO_PIN;
+ − break;
+ −
+ − case CME_ERR_SimPinReq:
+ − simins_data.n=BAT_P_SIMINS_N_SIM_PIN;
+ − break;
+ −
+ − case CME_ERR_SimPukReq:
+ − simins_data.n=BAT_P_SIMINS_N_SIM_PUK;
+ − break;
+ −
+ − case CME_ERR_SimFail:
+ − simins_data.n=BAT_P_SIMINS_N_SIM_FAIL;
+ − break;
+ −
+ − case CME_ERR_SimBusy:
+ − simins_data.n=BAT_P_SIMINS_N_SIM_BUSY;
+ − break;
+ −
+ − case CME_ERR_SimWrong:
+ − simins_data.n=BAT_P_SIMINS_N_SIM_WRONG;
+ − break;
+ −
+ − default:
+ − simins_data.n=BAT_P_SIMINS_N_UNKNOWN;
+ − break;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCRSM |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCRSM(
+ − SHORT sw1,
+ − SHORT sw2,
+ − SHORT rspLen,
+ − UBYTE *rsp)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_crsm crsm_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCRSM()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CRSM;
+ − resp.response.ptr_set_plus_crsm=&crsm_data;
+ −
+ − crsm_data.sw1=(U8)sw1;
+ − crsm_data.sw2=(U8)sw2;
+ −
+ − if (rsp==NULL)
+ − {
+ − crsm_data.c_response=0;
+ − }
+ − else
+ − {
+ − /*
+ − * There's nothing meaningful that we can do if there is too
+ − * much data to fit in the BAT message, so give up.
+ − */
+ − if (rspLen>BAT_MAX_CRSM_RESPONSE_LEN)
+ − return;
+ −
+ − crsm_data.c_response=(U16)rspLen;
+ − memcpy(crsm_data.response,rsp,BAT_MAX_CRSM_RESPONSE_LEN);
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCSIM |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCSIM(
+ − SHORT len,
+ − UBYTE *rsp)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_set_plus_csim csim_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCSIM()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_SET_PLUS_CSIM;
+ − resp.response.ptr_set_plus_csim=&csim_data;
+ −
+ − if (rsp==NULL)
+ − {
+ − csim_data.c_response=0;
+ − }
+ − else
+ − {
+ − /*
+ − * There's nothing meaningful that we can do if there is too
+ − * much data to fit in the BAT message, so give up.
+ − */
+ − if (len>BAT_MAX_CSIM_RESP_LEN)
+ − return;
+ −
+ − csim_data.c_response=(U16)len;
+ − memcpy(csim_data.response,rsp,BAT_MAX_CSIM_RESP_LEN);
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCCBS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCCBS(
+ − T_ACI_CCBS_IND ind,
+ − T_ACI_CCBS_STAT status,
+ − T_ACI_CCBS_SET *setting,
+ − BOOL intermediate_result)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCCBS()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − if (intermediate_result==FALSE)
+ − {
+ − T_BAT_res_uns_percent_ccbs ccbs_data;
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CCBS;
+ − resp.response.ptr_res_percent_ccbs=&ccbs_data;
+ −
+ − /*
+ − * 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.
+ − */
+ − ccbs_data.ind=(T_BAT_percent_ccbs_ind)ind;
+ − ccbs_data.stat=(T_BAT_percent_ccbs_stat)status;
+ −
+ − /*
+ − * As a default, set all the rest of the parameters as 'not present'.
+ − */
+ − ccbs_data.idx=BAT_P_CCBS_INDEX_NOT_PRESENT;
+ − ccbs_data.v_number=FALSE;
+ − ccbs_data.type=-1;
+ − ccbs_data.v_number=FALSE;
+ − ccbs_data.satype=-1;
+ − ccbs_data.bearer_class=BAT_CLASS_NOT_PRESENT;
+ − ccbs_data.ptn=BAT_P_CCBS_PATTERN_NOT_PRESENT;
+ −
+ − if (setting!=NULL)
+ − {
+ − if (setting->number[0])
+ − {
+ − len=strlen(setting->number);
+ −
+ − if (len<=BAT_MAX_CCBS_NUMBER_LEN)
+ − {
+ − memcpy(ccbs_data.number,setting->number,BAT_MAX_CCBS_NUMBER_LEN);
+ − ccbs_data.c_number=(U8)len;
+ − }
+ − else
+ − {
+ − /*
+ − * This is highly unlikely to happen, but if the number is too
+ − * big, then put as many digits as will fit in the BAT structure
+ − * from the END of the number.
+ − */
+ − memcpy(
+ − ccbs_data.number,
+ − setting->number+(len-BAT_MAX_CCBS_NUMBER_LEN),
+ − BAT_MAX_CCBS_NUMBER_LEN);
+ −
+ − ccbs_data.c_number=(U8)BAT_MAX_CCBS_NUMBER_LEN;
+ − }
+ −
+ − ccbs_data.v_number=TRUE;
+ − ccbs_data.type=(S16)toa_merge(setting->type);
+ − }
+ −
+ − if (setting->subaddr[0])
+ − {
+ − len=strlen(setting->subaddr);
+ −
+ − /*
+ − * If the subaddress is too big to fit in the BAT message,
+ − * just leave it out.
+ − */
+ − if (len<=BAT_MAX_SUBADDR_LENGTH)
+ − {
+ − memcpy(ccbs_data.subaddr,setting->subaddr,BAT_MAX_SUBADDR_LENGTH);
+ − ccbs_data.c_subaddr=(U8)len;
+ − ccbs_data.v_subaddr=TRUE;
+ − ccbs_data.satype=(S16)tos_merge(setting->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.
+ − */
+ − ccbs_data.bearer_class=(T_BAT_bearer_class)setting->class_type;
+ − ccbs_data.ptn=(T_BAT_percent_ccbs_ptn)setting->alrtPtn;
+ −
+ − /*
+ − * This relies on the value presented being equivalent to
+ − * T_BAT_percent_ccbs_idx.
+ − */
+ − ccbs_data.idx=(T_BAT_percent_ccbs_idx)setting->idx;
+ − }
+ − }
+ − else
+ − {
+ − T_BAT_res_que_percent_ccbs ccbs_data;
+ −
+ − resp.ctrl_response=BAT_RES_QUE_PERCENT_CCBS;
+ − resp.response.ptr_que_percent_ccbs=&ccbs_data;
+ −
+ − /*
+ − * 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.
+ − */
+ − ccbs_data.ind=(T_BAT_percent_ccbs_ind)ind;
+ − ccbs_data.stat=(T_BAT_percent_ccbs_stat)status;
+ −
+ − /*
+ − * As a default, set all the rest of the parameters as 'not present'.
+ − */
+ − ccbs_data.idx=BAT_P_CCBS_INDEX_NOT_PRESENT;
+ − ccbs_data.v_number=FALSE;
+ − ccbs_data.type=-1;
+ − ccbs_data.v_number=FALSE;
+ − ccbs_data.satype=-1;
+ − ccbs_data.bearer_class=BAT_CLASS_NOT_PRESENT;
+ − ccbs_data.ptn=BAT_P_CCBS_PATTERN_NOT_PRESENT;
+ −
+ − if (setting!=NULL)
+ − {
+ − if (setting->number[0])
+ − {
+ − len=strlen(setting->number);
+ −
+ − if (len<=BAT_MAX_CCBS_NUMBER_LEN)
+ − {
+ − memcpy(ccbs_data.number,setting->number,BAT_MAX_CCBS_NUMBER_LEN);
+ − ccbs_data.c_number=(U8)len;
+ − }
+ − else
+ − {
+ − /*
+ − * This is highly unlikely to happen, but if the number is too
+ − * big, then put as many digits as will fit in the BAT structure
+ − * from the END of the number.
+ − */
+ − memcpy(
+ − ccbs_data.number,
+ − setting->number+(len-BAT_MAX_CCBS_NUMBER_LEN),
+ − BAT_MAX_CCBS_NUMBER_LEN);
+ −
+ − ccbs_data.c_number=(U8)BAT_MAX_CCBS_NUMBER_LEN;
+ − }
+ −
+ − ccbs_data.v_number=TRUE;
+ − ccbs_data.type=(S16)toa_merge(setting->type);
+ − }
+ −
+ − if (setting->subaddr[0])
+ − {
+ − len=strlen(setting->subaddr);
+ −
+ − /*
+ − * If the subaddress is too big to fit in the BAT message,
+ − * just leave it out.
+ − */
+ − if (len<=BAT_MAX_SUBADDR_LENGTH)
+ − {
+ − memcpy(ccbs_data.subaddr,setting->subaddr,BAT_MAX_SUBADDR_LENGTH);
+ − ccbs_data.c_subaddr=(U8)len;
+ − ccbs_data.v_subaddr=TRUE;
+ − ccbs_data.satype=(S16)tos_merge(setting->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.
+ − */
+ − ccbs_data.bearer_class=(T_BAT_bearer_class)setting->class_type;
+ − ccbs_data.ptn=(T_BAT_percent_ccbs_ptn)setting->alrtPtn;
+ −
+ − /*
+ − * This relies on the value presented being equivalent to
+ − * T_BAT_percent_ccbs_idx.
+ − */
+ − ccbs_data.idx=(T_BAT_percent_ccbs_idx)setting->idx;
+ − }
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCCWV |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCCWV(
+ − T_ACI_CCWV_CHRG charging)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_no_parameter dummy;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCCWV()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_UNS_PLUS_CCWV;
+ − resp.response.ptr_plus_ccwv = &dummy;
+ − dummy.bat_dummy = 0xFF;
+ −
+ − /*
+ − * Note that the 'charging' parameter is lost as it is not in
+ − * the BAT.
+ − */
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCNAP |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCNAP(
+ − T_callingName *NameId,
+ − T_ACI_CNAP_STATUS status)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_percent_cnap cnap_data;
+ − T_BAT_res_uns_percent_cnap uns_cnap_data;
+ −
+ −
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCNAP()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − /*
+ − * This could be either an unsolicited event or a response to a
+ − * query. We have no way of knowing which it was, so we assume that
+ − * if we have a NameId, it was unsolicited.
+ − */
+ − if (NameId==NULL)
+ − {
+ − resp.ctrl_response=BAT_RES_QUE_PERCENT_CNAP;
+ − resp.response.ptr_que_percent_cnap = &cnap_data;
+ −
+ − /*
+ − * This relies on T_ACI_CNAP_STATUS being identical to
+ − * T_BAT_percent_cnap_status.
+ − */
+ − cnap_data.status=(T_BAT_percent_cnap_status)status;
+ − }
+ − else
+ − {
+ − T_namePresentationAllowed *cnap_name_info;
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CNAP;
+ − resp.response.ptr_res_percent_cnap = &uns_cnap_data;
+ −
+ − cnap_name_info=NULL;
+ −
+ − if (NameId->v_namePresentationAllowed)
+ − {
+ − uns_cnap_data.pres_mode=BAT_P_CNAP_PRES_NAME;
+ − cnap_name_info=&NameId->namePresentationAllowed;
+ − }
+ − else if (NameId->v_presentationRestricted)
+ − {
+ − uns_cnap_data.pres_mode=BAT_P_CNAP_PRES_RESTRICTED;
+ − }
+ − else if (NameId->v_nameUnavailable)
+ − {
+ − uns_cnap_data.pres_mode=BAT_P_CNAP_PRES_NO_NAME;
+ − }
+ − else if (NameId->v_namePresentationRestricted)
+ − {
+ − uns_cnap_data.pres_mode=BAT_P_CNAP_PRES_NAME_RESTRICTED;
+ − cnap_name_info=&NameId->namePresentationRestricted;
+ − }
+ −
+ − /*
+ − * As a default, set the rest of the parameters as 'not present'.
+ − */
+ − uns_cnap_data.dcs=-1;
+ − uns_cnap_data.v_name=FALSE;
+ −
+ − if (cnap_name_info)
+ − {
+ − if (cnap_name_info->v_dataCodingScheme)
+ − uns_cnap_data.dcs=(S16)cnap_name_info->dataCodingScheme;
+ −
+ − if ((cnap_name_info->v_nameString) &&
+ − (cnap_name_info->v_lengthInCharacters))
+ − {
+ − uns_cnap_data.v_name=TRUE;
+ −
+ − /*
+ − * Copy as much of the data into the BAT message as it can
+ − * handle. If it is too long it will effectively be truncated.
+ − */
+ − if (cnap_name_info->lengthInCharacters>BAT_MAX_CNAP_NAME_LEN)
+ − uns_cnap_data.c_name=BAT_MAX_CNAP_NAME_LEN;
+ − else
+ − uns_cnap_data.c_name=cnap_name_info->lengthInCharacters;
+ −
+ − memcpy(
+ − uns_cnap_data.name,
+ − &cnap_name_info->nameString.b_nameString,
+ − BAT_MAX_CNAP_NAME_LEN);
+ − }
+ − }
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_SignalSMS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_SignalSMS(
+ − UBYTE state)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_SignalSMS() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_SignalSMS() - FAKE");
+ − rCI_SignalSMS(state);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCLAN |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCLAN(
+ − T_ACI_LAN_SUP *CLang)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_clan clan_data;
+ − CHAR *str;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCLAN()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_QUE_PLUS_CLAN;
+ − resp.response.ptr_que_plus_clan=&clan_data;
+ −
+ − str=aci_bat_lang_str(CLang);
+ −
+ − if (str==NULL)
+ − return;
+ −
+ − clan_data.c_code=strlen(str);
+ −
+ − if (clan_data.c_code<=BAT_MAX_CLAN_CODE_LEN)
+ − {
+ − memcpy(clan_data.code,str,BAT_MAX_CLAN_CODE_LEN);
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCLAE |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCLAE(
+ − T_ACI_LAN_SUP *CLang)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_clae clae_data;
+ − CHAR *str;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCLAE()");
+ −
+ − /*
+ − * This shouldn't happen, but there's no point carrying on
+ − * if it does.
+ − */
+ − if (CLang==NULL)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CLAE;
+ − resp.response.ptr_res_plus_clae=&clae_data;
+ −
+ − str=aci_bat_lang_str(CLang);
+ −
+ − if (str==NULL)
+ − return;
+ −
+ − clae_data.c_code=strlen(str);
+ −
+ − if (clae_data.c_code<=BAT_MAX_CLAE_CODE_LEN)
+ − {
+ − memcpy(clae_data.code,str,BAT_MAX_CLAE_CODE_LEN);
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCSQ |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCSQ(
+ − UBYTE rssi,
+ − UBYTE ber,
+ − UBYTE actlevel)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_csq csq_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCSQ()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CSQ;
+ − resp.response.ptr_res_percent_csq=&csq_data;
+ −
+ − csq_data.rssi=(S16)rssi;
+ − csq_data.ber=(S16)ber;
+ − csq_data.actlevel=(S16)actlevel;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentALS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentALS(
+ − T_ACI_ALS_MOD ALSmode)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_tst_percent_als als_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentALS()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_TST_PERCENT_ALS;
+ − resp.response.ptr_tst_percent_als=&als_data;
+ −
+ − /*
+ − * T_ACI_ALS_MOD is not the same as T_BAT_percent_als_mode, so
+ − * we need this conversion.
+ − */
+ − switch (ALSmode)
+ − {
+ − default:
+ − case ALS_MOD_NOTPRESENT:
+ − /*
+ − * As the only (mandatory) parameter has no value allowed for
+ − * in BAT we may as well give up.
+ − */
+ − return;
+ −
+ − case ALS_MOD_SPEECH:
+ − als_data.mode=BAT_P_ALS_MOD_SPEECH;
+ − break;
+ −
+ − case ALS_MOD_AUX_SPEECH:
+ − als_data.mode=BAT_P_ALS_MOD_AUX_SPEECH;
+ − break;
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCTZV |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − #ifdef FF_TIMEZONE
+ − GLOBAL void rBAT_PlusCTZV(S32 timezone)
+ − #else
+ − GLOBAL void rBAT_PlusCTZV(UBYTE *timezone)
+ − #endif
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_ctzv ctzv_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCTZV()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CTZV;
+ − resp.response.ptr_res_plus_ctzv=&ctzv_data;
+ −
+ − #ifdef FF_TIMEZONE
+ − ctzv_data.tz=(U8)timezone;
+ − #else
+ − if (timezone==NULL)
+ − return;
+ − else
+ − ctzv_data.tz=(U8)*timezone;
+ − #endif
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCREG |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCREG(
+ − T_ACI_CREG_STAT status,
+ − USHORT lac,
+ − USHORT cid,
+ − T_ACI_P_CREG_GPRS_IND gprs_ind)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_creg creg_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCREG()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CREG;
+ − resp.response.ptr_res_percent_creg=&creg_data;
+ −
+ − /*
+ − * This relies on T_ACI_CREG_STAT and T_BAT_percent_creg_stat being
+ − * identical.
+ − */
+ − creg_data.stat=(T_BAT_percent_creg_stat)status;
+ −
+ − creg_data.lac=(S32)lac;
+ − creg_data.ci=(S32)cid;
+ −
+ − /*
+ − * This relies on T_ACI_P_CREG_GPRS_IND and T_BAT_percent_creg_gprs_ind
+ − * being identical.
+ − */
+ − creg_data.gprs_ind=(T_BAT_percent_creg_gprs_ind)gprs_ind;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − #ifdef GPRS
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCGACT |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCGACT(
+ − SHORT link_id)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCGACT() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCGACT() - FAKE");
+ − rCI_PlusCGACT(link_id);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCGDATA |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCGDATA(
+ − SHORT link_id)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCGDATA() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCGDATA() - FAKE");
+ − rCI_PlusCGDATA(link_id);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCGANS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCGANS(
+ − SHORT link_id)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCGANS() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCGANS() - FAKE");
+ − rCI_PlusCGANS(link_id);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCGEREP |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCGEREP(
+ − T_CGEREP_EVENT event,
+ − T_CGEREP_EVENT_REP_PARAM *param)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCGEREP() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCGEREP() - FAKE");
+ − rCI_PlusCGEREP(event,param);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCGREG |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCGREG(
+ − T_CGREG_STAT stat,
+ − USHORT lac,
+ − USHORT ci)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_plus_cgreg cgreg_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusCGREG()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PLUS_CGREG;
+ − resp.response.ptr_res_plus_cgreg=&cgreg_data;
+ −
+ − /*
+ − * This relies on T_CGREG_STAT and T_BAT_plus_cgreg_stat being
+ − * identical. They are, except in that the ACI version has a
+ − * 'not present' value. We deal with it by using 'unknown'.
+ − */
+ − if (stat==CGREG_STAT_NOT_PRESENT)
+ − cgreg_data.stat=BAT_CGREG_STAT_UNKN;
+ − else
+ − cgreg_data.stat=(T_BAT_plus_cgreg_stat)stat;
+ −
+ − cgreg_data.lac=(S32)lac;
+ − cgreg_data.ci=(S32)ci;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_changedQOS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_changedQOS(
+ − SHORT cid,
+ − T_QOS *qos)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_changedQOS() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_changedQOS() - FAKE");
+ − rCI_changedQOS(cid,qos);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentSNCNT |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentSNCNT(
+ − UBYTE c_id,
+ − ULONG octets_uplink,
+ − ULONG octets_downlink,
+ − ULONG packets_uplink,
+ − ULONG packets_downlink)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_sncnt sncnt_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentSNCNT()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_SNCNT;
+ − resp.response.ptr_uns_percent_sncnt=&sncnt_data;
+ −
+ − /*
+ − * Warning: this could potentially deliver a value outside
+ − * the range specified by BAT.
+ − */
+ − sncnt_data.cid=(T_BAT_pdp_cid)c_id;
+ −
+ − sncnt_data.oct_up=(U32)octets_uplink;
+ − sncnt_data.oct_down=(U32)octets_downlink;
+ − sncnt_data.pkt_up=(U32)packets_uplink;
+ − sncnt_data.pkt_down=(U32)packets_downlink;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCGREG |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCGREG(
+ − T_P_CGREG_STAT stat,
+ − USHORT lac,
+ − USHORT ci,
+ − BOOL bActiveContext)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_cgreg cgreg_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCGREG()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CGREG;
+ − resp.response.ptr_res_percent_cgreg=&cgreg_data;
+ −
+ − /*
+ − * This relies on T_P_CGREG_STAT and T_BAT_percent_cgreg_stat being
+ − * identical. They are, except in that the ACI version has a
+ − * 'not present' value. We deal with it by using 'unknown'.
+ − */
+ − if (stat==P_CGREG_STAT_NOT_PRESENT)
+ − cgreg_data.stat=BAT_P_CGREG_STAT_UNKN;
+ − else
+ − cgreg_data.stat=(T_BAT_percent_cgreg_stat)stat;
+ −
+ − cgreg_data.lac=(S32)lac;
+ − cgreg_data.ci=(S32)ci;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − #endif /* GPRS */
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentEM |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentEM(
+ − T_EM_VAL *val_tmp)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentEM() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentEM() - FAKE");
+ − rCI_PercentEM(val_tmp);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentEMET |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentEMET(
+ − T_DRV_SIGNAL_EM_EVENT *Signal)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentEMET() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentEMET() - FAKE");
+ − rCI_PercentEMET(Signal);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentEMETS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentEMETS(
+ − UBYTE entity)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentEMETS() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentEMETS() - FAKE");
+ − rCI_PercentEMETS(entity);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCPNUMS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCPNUMS(
+ − UBYTE element_index,
+ − UBYTE index_level,
+ − CHAR *alpha_tag,
+ − CHAR *number,
+ − BOOL premium_flag,
+ − BOOL network_flag)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − UBYTE len;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCPNUMS()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − /*
+ − * This is either a response to a test or a set command.
+ − */
+ − if (aci_bat_cur_cmd_get(src_infos)==BAT_CMD_TST_PERCENT_CPNUMS)
+ − {
+ − T_BAT_res_tst_percent_cpnums cpnums_data;
+ −
+ − resp.ctrl_response=BAT_RES_TST_PERCENT_CPNUMS;
+ − resp.response.ptr_tst_percent_cpnums=&cpnums_data;
+ −
+ − cpnums_data.element_id=(U8)element_index;
+ − cpnums_data.index_level=(U8)index_level;
+ −
+ − cpnums_data.c_alpha_tag=0;
+ −
+ − if (alpha_tag NEQ NULL)
+ − {
+ − len=strlen(alpha_tag);
+ −
+ − if (len)
+ − {
+ − USHORT len_cvtd_text=0;
+ −
+ − /*
+ − * Convert the data read from the SIM into the currently
+ − * selected character set.
+ − */
+ − utl_chsetFromSim(
+ − (UBYTE *)alpha_tag,
+ − (USHORT)len,
+ − (UBYTE *)cpnums_data.alpha_tag,
+ − BAT_MAX_CPNUMS_ALPHA_TAG_LEN,
+ − &len_cvtd_text,
+ − GSM_ALPHA_Def);
+ −
+ − cpnums_data.c_alpha_tag=(U8)len_cvtd_text;
+ − }
+ − }
+ −
+ − if (number==NULL)
+ − {
+ − cpnums_data.c_number=0;
+ − cpnums_data.number[0]=0;
+ − }
+ − else
+ − {
+ − len=strlen(number);
+ −
+ − if (len<=BAT_MAX_CPNUMS_NUMBER_LEN)
+ − {
+ − memcpy(cpnums_data.number,number,BAT_MAX_CPNUMS_NUMBER_LEN);
+ − cpnums_data.c_number=(U8)len;
+ − }
+ − else
+ − {
+ − /*
+ − * This is highly unlikely to happen, but if the number is too
+ − * big, then put as many digits as will fit in the BAT structure
+ − * from the END of the number.
+ − */
+ − memcpy(
+ − cpnums_data.number,
+ − number+(len-BAT_MAX_CPNUMS_NUMBER_LEN),
+ − BAT_MAX_CPNUMS_NUMBER_LEN);
+ −
+ − cpnums_data.c_number=(U8)BAT_MAX_CPNUMS_NUMBER_LEN;
+ − }
+ − }
+ −
+ − cpnums_data.premium_flag=(premium_flag==TRUE) ?
+ − BAT_P_CPNUMS_PREMIUM_FLAG_SET:BAT_P_CPNUMS_PREMIUM_FLAG_NOT_SET;
+ −
+ − cpnums_data.network_flag=(network_flag==TRUE) ?
+ − BAT_P_CPNUMS_NETWORK_SET:BAT_P_CPNUMS_NETWORK_NOT_SET;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − else
+ − {
+ − T_BAT_res_set_percent_cpnums cpnums_data;
+ −
+ − resp.ctrl_response=BAT_RES_SET_PERCENT_CPNUMS;
+ − resp.response.ptr_set_percent_cpnums=&cpnums_data;
+ −
+ − cpnums_data.element_id=(U8)element_index;
+ − cpnums_data.index_level=(U8)index_level;
+ −
+ − cpnums_data.c_alpha_tag=0;
+ −
+ − if (alpha_tag NEQ NULL)
+ − {
+ − len=strlen(alpha_tag);
+ −
+ − if (len)
+ − {
+ − USHORT len_cvtd_text=0;
+ −
+ − /*
+ − * Convert the data read from the SIM into the currently
+ − * selected character set.
+ − */
+ − utl_chsetFromSim(
+ − (UBYTE *)alpha_tag,
+ − (USHORT)len,
+ − (UBYTE *)cpnums_data.alpha_tag,
+ − BAT_MAX_CPNUMS_ALPHA_TAG_LEN,
+ − &len_cvtd_text,
+ − GSM_ALPHA_Def);
+ −
+ − cpnums_data.c_alpha_tag=(U8)len_cvtd_text;
+ − }
+ − }
+ −
+ − if (number==NULL)
+ − {
+ − cpnums_data.c_number=0;
+ − cpnums_data.number[0]=0;
+ − }
+ − else
+ − {
+ − len=strlen(number);
+ −
+ − if (len<=BAT_MAX_CPNUMS_NUMBER_LEN)
+ − {
+ − memcpy(cpnums_data.number,number,BAT_MAX_CPNUMS_NUMBER_LEN);
+ − cpnums_data.c_number=(U8)len;
+ − }
+ − else
+ − {
+ − /*
+ − * This is highly unlikely to happen, but if the number is too
+ − * big, then put as many digits as will fit in the BAT structure
+ − * from the END of the number.
+ − */
+ − memcpy(
+ − cpnums_data.number,
+ − number+(len-BAT_MAX_CPNUMS_NUMBER_LEN),
+ − BAT_MAX_CPNUMS_NUMBER_LEN);
+ −
+ − cpnums_data.c_number=(U8)BAT_MAX_CPNUMS_NUMBER_LEN;
+ − }
+ − }
+ −
+ − cpnums_data.premium_flag=(premium_flag==TRUE) ?
+ − BAT_P_CPNUMS_PREMIUM_FLAG_SET:BAT_P_CPNUMS_PREMIUM_FLAG_NOT_SET;
+ −
+ − cpnums_data.network_flag=(network_flag==TRUE) ?
+ − BAT_P_CPNUMS_NETWORK_SET:BAT_P_CPNUMS_NETWORK_NOT_SET;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCPVWI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCPVWI(
+ − UBYTE flag_set,
+ − USHORT line)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCPVWI()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − /*
+ − * This could be either a response to a set command, or an
+ − * unsolicited event.
+ − */
+ − if (aci_bat_cur_cmd_get(src_infos)!=BAT_CMD_SET_PERCENT_CPVWI)
+ − {
+ − T_BAT_res_uns_percent_cpvwi cpvwi_data;
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CPVWI;
+ − resp.response.ptr_res_percent_cpvwi=&cpvwi_data;
+ −
+ − cpvwi_data.line=(T_BAT_percent_cpvwi_lines)line;
+ −
+ − cpvwi_data.status=(flag_set==TRUE) ?
+ − BAT_P_CPVWI_FLAG_ACTIVATED:BAT_P_CPVWI_FLAG_DEACTIVATED;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − else
+ − {
+ − T_BAT_res_set_percent_cpvwi cpvwi_data;
+ −
+ − resp.ctrl_response=BAT_RES_SET_PERCENT_CPVWI;
+ − resp.response.ptr_set_percent_cpvwi=&cpvwi_data;
+ −
+ − cpvwi_data.line=(T_BAT_percent_cpvwi_lines)line;
+ −
+ − cpvwi_data.status=(flag_set==TRUE) ?
+ − BAT_P_CPVWI_FLAG_ACTIVATED:BAT_P_CPVWI_FLAG_DEACTIVATED;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCPROAM |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCPROAM(
+ − UBYTE roam_status)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_cproam cproam_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCPROAM()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CPROAM;
+ − resp.response.ptr_res_percent_cproam=&cproam_data;
+ −
+ − cproam_data.roam_status=(roam_status) ?
+ − BAT_P_CPROAM_STATUS_ROAMING:BAT_P_CPROAM_STATUS_NOT_ROAMING;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusCIEV |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PlusCIEV(
+ − T_ACI_MM_CIND_VAL_TYPE sCindValues,
+ − T_ACI_MM_CMER_VAL_TYPE sCmerSettings)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCIEV() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PlusCIEV() - FAKE");
+ − rCI_PlusCIEV(sCindValues,sCmerSettings);
+ −
+ − #endif
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentRDL |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentRDL(
+ − T_ACI_CC_REDIAL_STATE state)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_rdl rdl_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentRDL()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_RDL;
+ − resp.response.ptr_res_percent_rdl=&rdl_data;
+ −
+ − /*
+ − * This relies on T_ACI_CC_REDIAL_STATE being identical to
+ − * T_BAT_percent_rdl_state.
+ − */
+ − rdl_data.state=(T_BAT_percent_rdl_state)state;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentRDLB |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentRDLB(
+ − T_ACI_CC_RDL_BLACKL_STATE state)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_rdlb rdlb_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentRDLB()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_RDLB;
+ − resp.response.ptr_res_percent_rdlb=&rdlb_data;
+ −
+ − /*
+ − * This relies on T_ACI_CC_RDL_BLACKL_STATE being identical to
+ − * T_BAT_percent_rdlb_state.
+ − */
+ − rdlb_data.state=(T_BAT_percent_rdlb_state)state;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCCCN |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCCCN(
+ − T_ACI_FAC_DIR tDirection,
+ − SHORT cId,
+ − T_fac_inf *fie)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_cccn cccn_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCCCN()");
+ −
+ − /*
+ − * No point continuing if we don't have this.
+ − */
+ − if (fie==NULL)
+ − return;
+ −
+ − /*
+ − * There's also no point continuing if the facility information
+ − * can't fit into the BAT message.
+ − */
+ − if (fie->l_fac>BAT_MAX_CCCN_FACILITY_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CCCN;
+ − resp.response.ptr_res_percent_cccn=&cccn_data;
+ −
+ − /*
+ − * This relies on T_ACI_FAC_DIR and T_BAT_percent_cccn_direction
+ − * being identical. They are, except that the ACI has a 'not
+ − * present' value.
+ − */
+ − cccn_data.direction=(T_BAT_percent_cccn_direction)tDirection;
+ −
+ − cccn_data.cid=(U16)cId;
+ −
+ − /*
+ − * Copy the facility data, secure in the knowledge that we have
+ − * enough room for it.
+ − */
+ − memcpy(cccn_data.facility,fie->fac,BAT_MAX_CCCN_FACILITY_LEN);
+ − cccn_data.c_facility=(U8)fie->l_fac;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCSSN |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCSSN(
+ − T_ACI_FAC_DIR tDirection,
+ − T_ACI_FAC_TRANS_TYPE tType,
+ − T_fac_inf *fie)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_cssn cssn_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCSSN()");
+ −
+ − /*
+ − * No point continuing if we don't have this.
+ − */
+ − if (fie==NULL)
+ − return;
+ −
+ − /*
+ − * There's also no point continuing if the facility information
+ − * can't fit into the BAT message.
+ − */
+ − if (fie->l_fac>BAT_MAX_CSSN_FACILITY_LEN)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CSSN;
+ − resp.response.ptr_res_percent_cssn=&cssn_data;
+ −
+ − /*
+ − * This relies on T_ACI_FAC_DIR being the same as
+ − * T_BAT_percent_cssn_direction, and T_ACI_FAC_TRANS_TYPE being the
+ − * same as T_BAT_percent_cssn_trans_type. They are, except that
+ − * T_ACI_FAC_DIR also has a 'not present' value.
+ − */
+ − cssn_data.direction=(T_BAT_percent_cssn_direction)tDirection;
+ − cssn_data.trans_type=(T_BAT_percent_cssn_trans_type)tType;
+ −
+ − /*
+ − * Copy the facility data, secure in the knowledge that we have
+ − * enough room for it.
+ − */
+ − memcpy(cssn_data.facility,fie->fac,BAT_MAX_CSSN_FACILITY_LEN);
+ − cssn_data.c_facility=(U8)fie->l_fac;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCSTAT |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCSTAT(
+ − T_ACI_STATE_MSG msgType)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_cstat cstat_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCSTAT()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CSTAT;
+ − resp.response.ptr_res_percent_cstat=&cstat_data;
+ −
+ − /*
+ − * This relies on T_ACI_ENTITY_ID_MSG being the same as
+ − * T_BAT_percent_cstat_entity_id and T_ACI_ENTITY_STATE_MSG being
+ − * the same as T_BAT_percent_cstat_status.
+ − */
+ − cstat_data.entity_id=(T_BAT_percent_cstat_entity_id)msgType.entityId;
+ − cstat_data.status=(T_BAT_percent_cstat_status)msgType.entityState;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_Z |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_Z(void)
+ − {
+ −
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_Z() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_Z() - FAKE");
+ − rCI_Z();
+ −
+ − #endif
+ −
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCPRSM |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCPRSM(
+ − T_ACI_CPRSM_MOD mode)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_percent_cprsm cprsm_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCPRSM()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_QUE_PERCENT_CPRSM;
+ − resp.response.ptr_que_percent_cprsm=&cprsm_data;
+ −
+ − /*
+ − * This relies on T_ACI_CPRSM_MOD and T_BAT_percent_cprsm_mode being
+ − * identical. They are, except that the ACI version includes a
+ − * 'not present' value.
+ − */
+ − cprsm_data.mode=(T_BAT_percent_cprsm_mode)mode;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCTZV |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCTZV(
+ − T_MMR_INFO_IND *mmr_info_ind,
+ − S32 timezone)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_ctzv ctzv_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCTZV()");
+ −
+ − if (mmr_info_ind==NULL)
+ − return;
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CTZV;
+ − resp.response.ptr_res_percent_ctzv=&ctzv_data;
+ −
+ − if ((mmr_info_ind->plmn.v_plmn) &&
+ − ((SIZE_MCC+SIZE_MNC) <= BAT_MAX_CTZV_NUM_OPER_LEN))
+ − {
+ − ctzv_data.v_num_oper=TRUE;
+ − memcpy(ctzv_data.num_oper,mmr_info_ind->plmn.mcc,SIZE_MCC);
+ − memcpy(ctzv_data.num_oper+SIZE_MCC,mmr_info_ind->plmn.mnc,SIZE_MNC);
+ − ctzv_data.c_num_oper=(U8)(SIZE_MCC+SIZE_MNC);
+ − }
+ − else
+ − {
+ − ctzv_data.v_num_oper=FALSE;
+ − }
+ −
+ − if (mmr_info_ind->short_name.v_name)
+ − {
+ − USHORT len;
+ −
+ − utl_chsetFromGsm(
+ − mmr_info_ind->short_name.text,
+ − mmr_info_ind->short_name.c_text,
+ − ctzv_data.short_oper,
+ − BAT_MAX_CTZV_SHORT_OPER,
+ − &len,
+ − GSM_ALPHA_Def);
+ −
+ − ctzv_data.v_short_oper=TRUE;
+ − ctzv_data.c_short_oper=(U8)len;
+ −
+ − /* Extend BAT to included add_ci parameter */
+ − ctzv_data.add_ci = mmr_info_ind->short_name.add_ci;
+ − }
+ − else
+ − {
+ − ctzv_data.v_short_oper=FALSE;
+ − }
+ −
+ − if (mmr_info_ind->full_name.v_name)
+ − {
+ − USHORT len;
+ −
+ − utl_chsetFromGsm(
+ − mmr_info_ind->full_name.text,
+ − mmr_info_ind->full_name.c_text,
+ − ctzv_data.long_oper,
+ − BAT_MAX_CTZV_LONG_OPER,
+ − &len,
+ − GSM_ALPHA_Def);
+ −
+ − ctzv_data.v_long_oper=TRUE;
+ − ctzv_data.c_long_oper=(U8)len;
+ −
+ − /* Extend BAT to included add_ci parameter */
+ − ctzv_data.add_ci = mmr_info_ind->full_name.add_ci;
+ − }
+ − else
+ − {
+ − ctzv_data.v_long_oper=FALSE;
+ − }
+ −
+ − ctzv_data.year=(U8)mmr_info_ind->time.year;
+ − ctzv_data.month=(U8)mmr_info_ind->time.month;
+ − ctzv_data.day=(U8)mmr_info_ind->time.day;
+ − ctzv_data.hour=(U8)mmr_info_ind->time.hour;
+ − ctzv_data.minutes=(U8)mmr_info_ind->time.minute;
+ − ctzv_data.seconds=(U8)mmr_info_ind->time.second;
+ − ctzv_data.time_zone=(S8)timezone;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCNIV |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCNIV(
+ − T_MMR_INFO_IND *mmr_info_ind)
+ − {
+ − #ifndef FF_ATI_BAT
+ −
+ − /*
+ − * This is not included in the BAT interface, so ignore it.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentCNIV() - IGNORED");
+ −
+ − #else
+ −
+ − /*
+ − * But for test purposes, fake a response by calling the equivalent
+ − * ATI function directly.
+ − */
+ − TRACE_FUNCTION ("rBAT_PercentCNIV() - FAKE");
+ − rCI_PercentCNIV(mmr_info_ind);
+ −
+ − #endif
+ − }
+ −
+ − #ifdef GPRS
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCGEV |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCGEV (T_CGEREP_EVENT event, T_CGEREP_EVENT_REP_PARAM *param)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_cgev cgev_data;
+ − U8 len;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCGEV()");
+ −
+ − if (event==CGEREP_EVENT_INVALID)
+ − {
+ − return;
+ − }
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − #ifdef _SIMULATION_
+ − if (ati_user_output_cfg[src_id].Percent_CGEREP_stat == 0)
+ − {
+ − return; /* don't indicate %CGEV to a source on which AT%CGEREP was not set up */
+ − }
+ − #endif
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CGEV;
+ − resp.response.ptr_res_percent_cgev=&cgev_data;
+ −
+ − /*
+ − * This relies on T_CGEREP_EVENT being identical to
+ − * T_BAT_percent_cgev_evt, which it is apart from the additional
+ − * 'invalid' value in the ACI which we dealt with earlier.
+ − */
+ − cgev_data.evt=(T_BAT_percent_cgev_evt)event;
+ −
+ − cgev_data.pdp_type=BAT_PDP_TYPE_NOT_PRESENT;
+ − cgev_data.v_pdp_addr=FALSE;
+ − cgev_data.cid=BAT_PDP_CID_NOT_PRESENT;
+ − cgev_data.p_mobile_class=BAT_P_MOBILE_CLASS_NOT_PRESENT;
+ −
+ − if (param!=NULL)
+ − {
+ − switch (event)
+ − {
+ − case CGEREP_EVENT_REJECT:
+ − len=strlen(param->reject.pdp_addr);
+ −
+ − if ((len>0) && (len<=BAT_MAX_PDP_ADD))
+ − {
+ − cgev_data.pdp_type=BAT_PDP_TYPE_IPV4;
+ − cgev_data.v_pdp_addr=TRUE;
+ − cgev_data.c_pdp_addr=(U8)len;
+ − memcpy(cgev_data.pdp_addr,param->reject.pdp_addr,len);
+ − }
+ − 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.
+ − */
+ − cgev_data.p_mobile_class=(T_BAT_p_mobile_class)param->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:
+ − len=strlen(param->act.pdp_addr);
+ −
+ − if ((len>0) && (len<=BAT_MAX_PDP_ADD))
+ − {
+ − cgev_data.pdp_type=BAT_PDP_TYPE_IPV4;
+ −
+ − cgev_data.v_pdp_addr=TRUE;
+ − cgev_data.c_pdp_addr=(U8)len;
+ − memcpy(cgev_data.pdp_addr,param->act.pdp_addr,len);
+ − }
+ −
+ − cgev_data.cid=(T_BAT_pdp_cid)param->act.cid;
+ − break;
+ −
+ − default:
+ − break;
+ − }
+ − }
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ − #endif /* GPRS */
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentCPRI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentCPRI(
+ − UBYTE gsm_ciph,
+ − UBYTE gprs_ciph)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_cpri cpri_data;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentCPRI()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_CPRI;
+ − resp.response.ptr_res_percent_cpri=&cpri_data;
+ −
+ − cpri_data.gsm_ciph=(T_BAT_percent_cpri_gsm_ciph)gsm_ciph;
+ − cpri_data.gprs_ciph=(T_BAT_percent_cpri_gprs_ciph)gprs_ciph;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −
+ −
+ −
+ − #ifdef FF_FAX
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFIS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFIS( T_ACI_F_VR vr,
+ − T_ACI_F_BR br,
+ − T_ACI_F_WD wd,
+ − T_ACI_F_LN ln,
+ − T_ACI_F_DF df,
+ − T_ACI_F_EC ec,
+ − T_ACI_F_BF bf,
+ − T_ACI_F_ST st,
+ − T_ACI_F_JP jp)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fis fis;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFIS()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FIS;
+ − resp.response.ptr_que_plus_fis = &fis;
+ −
+ − fis.vr = vr;
+ − fis.br = br;
+ − fis.wd = wd;
+ − fis.ln = ln;
+ − fis.df = df;
+ − fis.ec = ec;
+ − fis.bf = bf;
+ − fis.st = st;
+ − fis.jp = jp;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFCS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFCS( T_ACI_F_VR vr,
+ − T_ACI_F_BR br,
+ − T_ACI_F_WD wd,
+ − T_ACI_F_LN ln,
+ − T_ACI_F_DF df,
+ − T_ACI_F_EC ec,
+ − T_ACI_F_BF bf,
+ − T_ACI_F_ST st,
+ − T_ACI_F_JP jp)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fcs fcs;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFCS()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FCS;
+ − resp.response.ptr_que_plus_fcs = &fcs;
+ −
+ − fcs.vr = vr;
+ − fcs.br = br;
+ − fcs.wd = wd;
+ − fcs.ln = ln;
+ − fcs.df = df;
+ − fcs.ec = ec;
+ − fcs.bf = bf;
+ − fcs.st = st;
+ − fcs.jp = jp;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFSA |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFSA(U8 c_sub_str, U8 *sub_str)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fsa fsa;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFSA()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FSA;
+ − resp.response.ptr_que_plus_fsa = &fsa;
+ − fsa.c_sub_str = c_sub_str;
+ − memcpy(fsa.sub_str, sub_str, c_sub_str);
+ −
+ − aci_bat_send(src_infos, &resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFPA |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFPA(U8 c_spa_str, U8 *spa_str)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fpa fpa;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFPA()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FPA;
+ − resp.response.ptr_que_plus_fpa = &fpa;
+ − fpa.c_spa_str = c_spa_str;
+ − memcpy(fpa.spa_str, spa_str, c_spa_str);
+ −
+ − aci_bat_send(src_infos, &resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFPW |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFPW(U8 c_pw_str, U8 *pw_str)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fpw fpw;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFPW()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FPW;
+ − resp.response.ptr_que_plus_fpw = &fpw;
+ − fpw.c_pw_str = c_pw_str;
+ − memcpy(fpw.pw_str, pw_str, c_pw_str);
+ −
+ − aci_bat_send(src_infos, &resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFPI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFPI(U8 c_id_str, U8 *id_str)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fpi fpi;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFPI()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FPI;
+ − resp.response.ptr_que_plus_fpi = &fpi;
+ − fpi.c_id_str = c_id_str;
+ − memcpy(fpi.id_str, id_str, c_id_str);
+ −
+ − aci_bat_send(src_infos, &resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFNS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFNS(U8 c_nsf, U8 *nsf)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fns fns;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFNS()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FNS;
+ − resp.response.ptr_que_plus_fns = &fns;
+ − fns.c_nsf = c_nsf;
+ − memcpy(fns.nsf, nsf, c_nsf);
+ −
+ − aci_bat_send(src_infos, &resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFHS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFHS(T_BAT_plus_fhs_status status)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fhs fhs;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFHS()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FHS;
+ − resp.response.ptr_que_plus_fhs = &fhs;
+ − fhs.status = status;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFPS |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFPS(T_BAT_plus_fps_ppr ppr)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fps fps;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFPS()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FPS;
+ − resp.response.ptr_que_plus_fps = &fps;
+ − fps.ppr = ppr;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFCO |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFCO(void)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fco fco;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFCO()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FCO;
+ − resp.response.ptr_que_plus_fco = &fco;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFTI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFTI(CHAR *tsi)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fti fti;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFTI()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FTI;
+ − resp.response.ptr_que_plus_fti = &fti;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFCI |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFCI(CHAR *rmtId)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fci fci;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFCI()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FCI;
+ − resp.response.ptr_que_plus_fci = &fci;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFHT |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFHT(U16 len, U8 *hdlc)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fht fht;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFHT()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FHT;
+ − resp.response.ptr_que_plus_fht = &fht;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFHR |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFHR(U16 len, U8 *hdlc)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fhr fhr;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFHR()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FHR;
+ − resp.response.ptr_que_plus_fhr = &fhr;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFET |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFET(T_ACI_FET_PPM ppm)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fet fet;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFET()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FET;
+ − resp.response.ptr_que_plus_fet = &fet;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFVO |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFVO(void)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fvo fvo;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFVO()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FVO;
+ − resp.response.ptr_que_plus_fvo = &fvo;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFPO |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFPO(void)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fpo fpo;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFPO()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FPO;
+ − resp.response.ptr_que_plus_fpo = &fpo;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFNF |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFNF(U16 len, U8 *nsf)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fnf fnf;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFNF()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FNF;
+ − resp.response.ptr_que_plus_fnf = &fnf;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFNC |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFNC(U16 len, U8 *nsc)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_fnc fnc;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFNC()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FNC;
+ − resp.response.ptr_que_plus_fnc = &fnc;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PlusFTC |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE : ITU-T.32
+ − */
+ − GLOBAL void rBAT_PlusFTC( T_ACI_F_VR vr,
+ − T_ACI_F_BR br,
+ − T_ACI_F_WD wd,
+ − T_ACI_F_LN ln,
+ − T_ACI_F_DF df,
+ − T_ACI_F_EC ec,
+ − T_ACI_F_BF bf,
+ − T_ACI_F_ST st,
+ − T_ACI_F_JP jp)
+ − {
+ − /*
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_que_plus_ftc ftc;
+ −
+ − TRACE_FUNCTION ("rBAT_PlusFTC()");
+ −
+ − aci_bat_src_info(&src_id, &src_infos);
+ −
+ − resp.ctrl_response = BAT_RES_QUE_PLUS_FTC;
+ − resp.response.ptr_que_plus_ftc = &ftc;
+ −
+ − aci_bat_send(src_infos, &resp);
+ − */
+ − }
+ −
+ − #endif /* FF_FAX */
+ −
+ − /*
+ − +--------------------------------------------------------------------+
+ − | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
+ − | STATE : code ROUTINE : rBAT_PercentSIMEF |
+ − +--------------------------------------------------------------------+
+ −
+ − PURPOSE :
+ − */
+ − GLOBAL void rBAT_PercentSIMEF(
+ − SHORT *ef,
+ − UBYTE count)
+ − {
+ − T_ACI_CMD_SRC src_id;
+ − T_ACI_DTI_PRC_PSI *src_infos;
+ − T_BAT_cmd_response resp;
+ − T_BAT_res_uns_percent_simef simef_data;
+ − UBYTE n;
+ −
+ − TRACE_FUNCTION ("rBAT_PercentSIMEF()");
+ −
+ − /*
+ − * Get the source ID and a pointer to the PSI source information.
+ − */
+ − aci_bat_src_info(&src_id,&src_infos);
+ −
+ − resp.ctrl_response=BAT_RES_UNS_PERCENT_SIMEF;
+ − resp.response.ptr_res_percent_simef=&simef_data;
+ −
+ − /*
+ − * Copy the data in. Note that any excess data will be lost, however
+ − * this should not happen as the BAT message has been designed to
+ − * carry the entire contents of the T_SIM_FILE_UPDATE_IND primitive.
+ − */
+ − for (n=0;((n<count) && (n<BAT_MAX_SIMEF_EF_LEN));n++)
+ − {
+ − simef_data.ef[n]=(U16)ef[n];
+ − }
+ −
+ − simef_data.c_ef=(U8)n;
+ −
+ − aci_bat_send(src_infos,&resp);
+ − }
+ −