FreeCalypso > hg > fc-magnetite
view src/aci2/aci/cmh_mmq.c @ 632:d968a3216ba0
new tangomdm build target
TCS211/Magnetite built for target leonardo runs just fine on the Tango-based
Caramel board, but a more proper tangomdm build target is preferable in order
to better market these Tango modems to prospective commercial customers. The
only differences are in GPIO and MCSI config:
* MCSI is enabled in the tangomdm build config.
* GPIO 1 is loudspeaker amplifier control on Leonardo, but on Tango platforms
it can be used for anything. On Caramel boards this GPIO should be
configured as an output driving high.
* GPIO 2 needs to be configured as Calypso input on Leonardo, but on Tango
platforms it can be used for anything. On Caramel boards this GPIO should be
configured as an output, either high or low is OK.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 04 Jan 2020 19:27:41 +0000 |
parents | 93999a60b835 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GSM-PS (6147) | Modul : CMH_MMQ +----------------------------------------------------------------------------- | 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 module provides the query functions related to the | protocol stack adapter for mobility management. +----------------------------------------------------------------------------- */ #ifndef CMH_MMQ_C #define CMH_MMQ_C #endif #include "aci_all.h" /*==== INCLUDES ===================================================*/ #include "aci_cmh.h" #include "ati_cmd.h" #include "aci_cmd.h" #include "aci.h" #ifdef FAX_AND_DATA #include "aci_fd.h" #endif /* of #ifdef FAX_AND_DATA */ #include "pcm.h" #include "psa.h" #include "psa_mm.h" #include "psa_util.h" #include "cmh.h" #include "cmh_mm.h" #include "rx.h" #include "rtc.h" #ifdef FF_TIMEZONE #include "rv/rv_general.h" #include "rtc/rtc_tz.h" #endif #ifdef GPRS #include "gaci_cmh.h" #include "psa_gmm.h" #endif #ifndef _SIMULATION_ /******************************/ /* just to get FFS !!!! */ /* TEMPORARY until use of NVM */ #ifndef GPRS #define DONT_LET_FFSH2_DEF_GPRS #endif #include "ffs/ffs.h" /* check whether latter has defined GPRS !!! */ #ifdef DONT_LET_FFSH2_DEF_GPRS #undef GPRS #endif #undef DONT_LET_FFSH2_DEF_GPRS /***************************/ #endif /* _SIMULATION_ */ /*==== CONSTANTS ==================================================*/ /*==== EXPORT =====================================================*/ /*==== VARIABLES ==================================================*/ #if defined (GPRS) && defined (DTI) EXTERN T_GMM_SHRD_PRM gmmShrdPrm; #endif EXTERN T_ONS_READ_STATE ONSReadStatus; /*==== FUNCTIONS ==================================================*/ EXTERN BOOL cmhSIM_plmn_is_hplmn(); /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMQ | | STATE : code ROUTINE : qAT_PercentBAND | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the %BAND? AT command which returns the current multiband configuration. <bandMode>: band switch mode. <bandType>: band selection. */ GLOBAL T_ACI_RETURN qAT_PercentBAND(T_ACI_CMD_SRC srcId, T_ACI_BAND_MODE *bandMode, UBYTE *bandType) { UBYTE freq_bands, dummy; TRACE_FUNCTION ("qAT_PercentBAND()"); /* check command source */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } if( bandMode EQ NULL OR bandType EQ NULL ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } cmhMM_getBandSettings( &freq_bands, &dummy ); if( freq_bands EQ 0x00 ) { *bandType = 0x00; /* not really meanful here... */ *bandMode = BAND_MODE_Auto; } else { *bandType = freq_bands; *bandMode = BAND_MODE_Manual; } return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMQ | | STATE : code ROUTINE : qAT_PlusCOPS | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +COPS? AT command which returns the current setting of mode, format and operator. <mode>: registration mode. <format>: format of operator <oper>: operator string */ GLOBAL T_ACI_RETURN qAT_PlusCOPS ( T_ACI_CMD_SRC srcId, T_ACI_COPS_MOD * mode, T_ACI_COPS_FRMT * format, CHAR * oper ) { T_MM_CMD_PRM * pMMCmdPrm; /* points to MM command parameters */ TRACE_FUNCTION ("qAT_PlusCOPS()"); /* check command source */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pMMCmdPrm = &cmhPrm[srcId].mmCmdPrm; /* fill in parameters */ switch(mmShrdPrm.COPSmode) { case(COPS_MOD_Auto): case(COPS_MOD_Man): case(COPS_MOD_Dereg): *mode = mmShrdPrm.COPSmode; break; /*case(COPS_MOD_SetOnly): mmShrdPrm.COPSmode can't have been set with this value...*/ case(COPS_MOD_Both): if(mmShrdPrm.regModeAutoBack) { *mode = COPS_MOD_Man; } else *mode = COPS_MOD_Auto; break; default: *mode = mmShrdPrm.regMode; break; } *format = pMMCmdPrm -> COPSfrmt; *oper = 0x0; cmhMM_OperatorQuery(srcId,pMMCmdPrm -> COPSfrmt,oper); TRACE_EVENT(oper); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMQ | | STATE : code ROUTINE : qAT_PercentCOPS | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +COPS? AT command which returns the current setting of mode, format and operator. <mode>: registration mode. <format>: format of operator <oper>: operator string */ GLOBAL T_ACI_RETURN qAT_PercentCOPS ( T_ACI_CMD_SRC srcId, T_ACI_COPS_MOD * mode, T_ACI_COPS_FRMT * format, T_ACI_COPS_SVST * svrStatus, CHAR * oper ) { T_MM_CMD_PRM * pMMCmdPrm; /* points to MM command parameters */ TRACE_FUNCTION ("qAT_PercentCOPS()"); /* check command source */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pMMCmdPrm = &cmhPrm[srcId].mmCmdPrm; /* fill in parameters */ switch(mmShrdPrm.COPSmode) { case(COPS_MOD_Auto): case(COPS_MOD_Man): case(COPS_MOD_Dereg): *mode = mmShrdPrm.COPSmode; break; /*case(COPS_MOD_SetOnly): mmShrdPrm.COPSmode can't have been set with this value...*/ case(COPS_MOD_Both): if(mmShrdPrm.regModeAutoBack) { *mode = COPS_MOD_Man; } else *mode = COPS_MOD_Auto; break; default: *mode = mmShrdPrm.regMode; break; } *format = pMMCmdPrm -> COPSfrmt; switch( mmShrdPrm.regStat ) { case( NO_VLD_RS ): case( RS_NO_SRV ): *svrStatus = COPS_SVST_NoSrv; break; case( RS_LMTD_SRV ): *svrStatus =COPS_SVST_Limited; break; case( RS_FULL_SRV ): *svrStatus = COPS_SVST_Full; break; default: *svrStatus = COPS_SVST_NotPresent; break; } *oper = 0x0; cmhMM_OperatorQuery(srcId,pMMCmdPrm -> COPSfrmt,oper); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMQ | | STATE : code ROUTINE : qAT_PlusCREG | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +CREG? AT command which returns the current setting of registration status. <stat>: registration status. <lac>: current lac. <cid>: current cell id. */ GLOBAL T_ACI_RETURN qAT_PlusCREG ( T_ACI_CMD_SRC srcId, T_ACI_CREG_STAT *stat, USHORT *lac, USHORT *cid ) { TRACE_FUNCTION ("qAT_PlusCREG()"); /* *------------------------------------------------------------------- * fill in parameters *------------------------------------------------------------------- */ *stat = mmShrdPrm.creg_status; *lac = mmShrdPrm.lac; *cid = mmShrdPrm.cid; return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMQ | | STATE : code ROUTINE : qAT_PercentCREG | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +CREG? AT command which returns the current setting of registration status. <stat>: registration status. <lac>: current lac. <cid>: current cell id. <gprs_ind>: if GPRS is available or not */ GLOBAL T_ACI_RETURN qAT_PercentCREG ( T_ACI_CMD_SRC srcId, T_ACI_CREG_STAT *stat, USHORT *lac, USHORT *cid, T_ACI_P_CREG_GPRS_IND *gprs_ind ) { TRACE_FUNCTION ("qAT_PercentCREG()"); qAT_PlusCREG (srcId, stat, lac, cid); #if defined (GPRS) AND defined (DTI) *gprs_ind = gmmShrdPrm.gprs_indicator; #else *gprs_ind = P_CREG_GPRS_Not_Supported; /* ACI-SPR-17218: use ACI type */ #endif /* GPRS */ return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMQ | | STATE : code ROUTINE : qAT_PlusWS46 | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +WS46? AT command which returns the current setting wireless network selection. <mode>: network mode. */ GLOBAL T_ACI_RETURN qAT_PlusWS46 (T_ACI_CMD_SRC srcId, T_ACI_WS46_MOD * mode ) { TRACE_FUNCTION ("qAT_PlusWS46()"); /* *------------------------------------------------------------------- * fill in parameters *------------------------------------------------------------------- */ *mode = WS46_MOD_Gsm; return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMQ | | STATE : code ROUTINE : qAT_PlusCOPN | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +COPN AT command which returns the current operator names stored in ME. <lstId>: list identifier. <startIdx>: start index to read from. <lastIdx>: buffer for index of last copied name. <oprLstBuf>: buffer for operator names. length of MAX_OPER. */ GLOBAL T_ACI_RETURN qAT_PlusCOPN ( T_ACI_CMD_SRC srcId, T_ACI_COPN_LID lstId, SHORT startIdx, SHORT *lastIdx, T_ACI_COPN_OPDESC *oprLstBuf) { USHORT idx; /* holds list idx */ EF_PLMN plmnBuf; /* buffer PCM entry */ USHORT maxRec; /* holds maximum records */ USHORT recNr; /* holds record number */ USHORT oprLstLen; /* holds fixed oper list length */ UBYTE retVal; /* holds return value */ UBYTE ver; /* holds version */ UBYTE len; /* holds operator name length */ TRACE_FUNCTION ("qAT_PlusCOPN()"); /* *------------------------------------------------------------------- * determine list identifier *------------------------------------------------------------------- */ switch( lstId ) { /* *----------------------------------------------------------------- * for the list in permanent configuration memory *----------------------------------------------------------------- */ case( COPN_LID_Pcm ): recNr = startIdx+1; idx = 0; do { retVal= pcm_ReadRecord( (UBYTE *) EF_PLMN_ID, recNr, SIZE_EF_PLMN, (UBYTE *) &plmnBuf, &ver, &maxRec ); if( retVal EQ PCM_INVALID_SIZE OR retVal EQ PCM_INVALID_RECORD ) { if( idx EQ 0 ) { ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_InvIdx ); return( AT_FAIL ); } break; } if( plmnBuf.mcc[0] NEQ 0xFF AND plmnBuf.mnc[0] NEQ 0xFF AND plmnBuf.lngNam[0] NEQ 0xFF ) { sprintf(oprLstBuf[idx].numOper, "%03X%02X", ((plmnBuf.mcc[0]<<8) + plmnBuf.mcc[1]), ((plmnBuf.mnc[0]<<8) + plmnBuf.mnc[1])); for( len = 0; len < SIZE_EF_PLMN_LONG AND plmnBuf.lngNam[len] NEQ 0xFF; len++ ) ; utl_cvtGsmIra( plmnBuf.lngNam, len, (UBYTE*)oprLstBuf[idx].alphaOper, MAX_ALPHA_OPER_LEN, CSCS_DIR_GsmToIra ); oprLstBuf[idx].alphaOper[MINIMUM(len,MAX_ALPHA_OPER_LEN-1)] = 0x0; idx++; } recNr++; } while( idx < MAX_OPER ); break; /* *----------------------------------------------------------------- * for the list in constant memory *----------------------------------------------------------------- */ case( COPN_LID_Cnst ): oprLstLen = cmhMM_GetOperLstLen(); if( startIdx >= oprLstLen ) { ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_InvIdx ); return( AT_FAIL ); } for( idx = 0, recNr = startIdx; idx < MAX_OPER AND recNr < oprLstLen; idx++, recNr++ ) { if ((operListFixed[recNr].mnc & 0x00F) EQ 0xF) { /*lint -e{702} */ sprintf(oprLstBuf[idx].numOper, "%03X%02X", operListFixed[recNr].mcc, operListFixed[recNr].mnc >> 4); } else { sprintf(oprLstBuf[idx].numOper, "%03X%02X", operListFixed[recNr].mcc, operListFixed[recNr].mnc); } strncpy( oprLstBuf[idx].alphaOper, operListFixed[recNr].longName, MAX_ALPHA_OPER_LEN-1 ); oprLstBuf[idx].alphaOper[MAX_ALPHA_OPER_LEN-1] = 0x0; } break; /* *----------------------------------------------------------------- * unexpected list type *----------------------------------------------------------------- */ default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * terminate list and set last index *------------------------------------------------------------------- */ if( idx < MAX_OPER ) { oprLstBuf[idx].numOper[0] = 0x0; oprLstBuf[idx].alphaOper[0] = 0x0; } *lastIdx = ( recNr NEQ 0 )?recNr-1:0; return( AT_CMPL ); } /* +-------------------------------------------------------------------+ | NEW AT Command qAT_PercentCOPN | | | +-------------------------------------------------------------------+ */ /*The same function in EDGE should be remved from ACIA when EDGE is merged to the UMTS*/ GLOBAL T_ACI_RETURN qAT_PercentCOPN( T_ACI_CMD_SRC srcId, T_ACI_COPS_FRMT format, CHAR *opr, T_ACI_OPER_NTRY *oper_ntry) { T_ACI_RETURN retval = AT_FAIL; T_OPER_ENTRY plmnDesc; BOOL found; if(format EQ COPS_FRMT_Numeric) { found = cmhMM_FindNumeric(&plmnDesc, opr); } else { found = cmhMM_FindName(&plmnDesc, opr, format); } if (found) { oper_ntry->mcc = plmnDesc.mcc; oper_ntry->mnc = plmnDesc.mnc; strncpy (oper_ntry->longName, plmnDesc.longName, sizeof(oper_ntry->longName)); oper_ntry->longName[sizeof(oper_ntry->longName) - 1] = '\0'; strncpy ((CHAR *)oper_ntry->shrtName, plmnDesc.shrtName, sizeof(oper_ntry->shrtName)); oper_ntry->shrtName[sizeof(oper_ntry->shrtName) - 1] = '\0'; oper_ntry->long_len = plmnDesc.long_len; oper_ntry->shrt_len = plmnDesc.shrt_len; if (plmnDesc.pnn) { oper_ntry->source = Read_EONS; } else if ((ONSReadStatus EQ ONS_READ_OVER) AND (cmhSIM_plmn_is_hplmn (plmnDesc.mcc, plmnDesc.mnc)) AND format EQ COPS_FRMT_Numeric) { oper_ntry->source = Read_CPHS; } else { oper_ntry->source = Read_ROM_TABLE; } } else { oper_ntry->longName[0] = '\0'; oper_ntry->shrtName[0] = '\0'; oper_ntry->mcc = 0; oper_ntry->mnc = 0; oper_ntry->source = Read_INVALID; } return AT_CMPL; } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMQ | | STATE : code ROUTINE : qAT_PercentNRG | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the %NRG? AT command which returns the current setting of registration mode and service mode and the current status of service. <regMode>: registration mode. <srvMode>: service mode. <oprFrmt>: operator format. <srvStat>: service status. <oper> : operator */ GLOBAL T_ACI_RETURN qAT_PercentNRG( T_ACI_CMD_SRC srcId, T_ACI_NRG_RGMD *regMode, T_ACI_NRG_SVMD *srvMode, T_ACI_NRG_FRMT *oprFrmt, T_ACI_NRG_SVMD *srvStat, CHAR *oper) { T_ACI_COPS_FRMT copsFormat; TRACE_FUNCTION ("qAT_PercentNRG()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * fill in parameters *------------------------------------------------------------------- */ switch( mmShrdPrm.regStat ) { case( NO_VLD_RS ): case( RS_NO_SRV ): *srvStat = NRG_SVMD_NoSrv; break; case( RS_LMTD_SRV ): *srvStat = NRG_SVMD_Limited; break; case( RS_FULL_SRV ): *srvStat = NRG_SVMD_Full; break; default: *srvStat = NRG_SVMD_NotPresent; break; } *srvMode = cmhPrm[srcId].mmCmdPrm.NRGsrvMode; *oprFrmt = cmhPrm[srcId].mmCmdPrm.NRGoprFrmt; *oper = 0x0; *regMode = cmhPrm[srcId].mmCmdPrm.NRGregMode; switch( *oprFrmt ) { case( NRG_FRMT_NotPresent ): copsFormat = COPS_FRMT_NotPresent; break; case( NRG_FRMT_Numeric ): copsFormat = COPS_FRMT_Numeric ; break; case( NRG_FRMT_Short): copsFormat = COPS_FRMT_Short ; break; case( NRG_FRMT_Long): copsFormat = COPS_FRMT_Long; break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } cmhMM_OperatorQuery(srcId,copsFormat,oper); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : ACI/MMI MODULE : CMH_MMS | | STATE : code ROUTINE : qAT_PercentCSQ | +--------------------------------------------------------------------+ PURPOSE : This is the function for Signal Quality query Shen,Chao Juni.13th, 2003 */ GLOBAL T_ACI_RETURN qAT_PercentCSQ( T_ACI_CMD_SRC srcId, UBYTE *rssi, UBYTE *ber, UBYTE *actlevel) { rx_Status_Type rxStat; TRACE_FUNCTION("qAT_PercentCSQ()"); if ( rx_GetStatus ( &rxStat ) NEQ DRV_OK ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return ATI_FAIL; } else { if ( rxStat.gsmLevel EQ 0xFF OR rxStat.gsmLevel EQ 0 ) { *rssi = ACI_RSSI_FAULT; } else if ( rxStat.gsmLevel > 59 ) { *rssi = 31; } else { *rssi = ( rxStat.gsmLevel / 2 ) + 2; } if ( rxStat.rxQuality EQ RX_QUAL_UNAVAILABLE ) { *ber = ACI_BER_FAULT; } else { *ber = rxStat.rxQuality; } *actlevel = rxStat.actLevel; return ATI_CMPL; } } /* +--------------------------------------------------------------------+ | PROJECT : ACI/MMI MODULE : CMH_MMS | | STATE : code ROUTINE : qAT_PercentDBGINFO | +--------------------------------------------------------------------+ PURPOSE : query free mem pool blocks. */ GLOBAL T_ACI_RETURN qAT_PercentDBGINFO(T_ACI_CMD_SRC srcId, ULONG param, USHORT stor, USHORT *free, USHORT *alloc) { int ret=0; TRACE_FUNCTION ("qAT_PercentDBGINFO()"); /* *----------------------------------------------------------------- * check command source *----------------------------------------------------------------- */ if( ! cmh_IsVldCmdSrc (srcId) ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return (AT_FAIL); } ret = vsi_m_status (hCommACI, param, (USHORT)stor, free, alloc ); if (ret EQ VSI_ERROR OR *free EQ 0) { ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_MemFull ); return (ATI_FAIL); } return (ATI_CMPL); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMS | | STATE : code ROUTINE : qAT_PlusCTZR | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +CTZR AT command which will query the status of CTZRmode, indicating whether time zone change rep[orting is enabled or disabled. <on/off>: Indicates whether time zone reporting is enabled or disabled. */ GLOBAL T_ACI_RETURN qAT_PlusCTZR ( T_ACI_CMD_SRC srcId, T_ACI_CTZR_MODE *mode) { TRACE_FUNCTION ("qAT_PlusCTZR()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { TRACE_EVENT_P1("qAT_PlusCTZR(): Invalid source: %d", srcId); ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } *mode = cmhPrm[srcId].mmCmdPrm.CTZRMode; return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMS | | STATE : code ROUTINE : qAT_PlusCTZU | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +CTZU AT command which will query the status of CTZUmode, indicating whether time zone automatic update is enabled or disabled. <on/off>: Indicates whether time zone automatic update is enabled or disabled. */ GLOBAL T_ACI_RETURN qAT_PlusCTZU ( T_ACI_CMD_SRC srcId, T_ACI_CTZU_MODE *mode) { TRACE_FUNCTION ("qAT_PlusCTZU()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { TRACE_EVENT_P1("qAT_PlusCTZU(): Invalid source: %d", srcId); ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } *mode = cmhPrm[srcId].mmCmdPrm.CTZUMode; return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : MODULE : CMH_MMS | | STATE : code ROUTINE : qAT_PlusCCLK | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the sAT_PlusCCLK command which will query the status of the RTC in the MT, indicating what the time is in the MT. */ GLOBAL T_ACI_RETURN qAT_PlusCCLK ( T_ACI_CMD_SRC srcId, T_ACI_RTC_DATE *date_s, T_ACI_RTC_TIME *time_s, int * timeZone ) { UBYTE ret; TRACE_FUNCTION ("qAT_PlusCCLK()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { TRACE_EVENT_P1("qAT_PlusCCLK(): Invalid source: %d", srcId); ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } TRACE_EVENT("qAT_PlusCCLK(): get time and date " ); #ifndef _SIMULATION_ ret = rtc_get_time_date((T_RTC_DATE *) date_s, (T_RTC_TIME *) time_s); switch (ret) { case 0: /* RVF_OK */ #ifdef FF_TIMEZONE *timeZone = RTC_GetCurrentTZ(); /* Get current timezone now time and date are obtained.*/ TRACE_EVENT_P1("qAT_PlusCCLK(): timezone obatained: %d", *timeZone); #endif /* FF_TIMEZONE */ return( AT_CMPL ); default: TRACE_EVENT_P1("qAT_PlusCCLK(): ERROR: %d", ret); /* RVF_NOT_READY or RVF_INTERNAL ERROR */ return( AT_FAIL ); } #else /* _SIMULATION_ */ /* Set return info for date time to: "04/08/17,13:31:04-10" */ date_s->year = 2004; date_s->month = 8; date_s->day = 17; time_s->hour = 13; time_s->minute = 31; time_s->second = 4; time_s->format = 0; /* RTC_TIME_FORMAT_24HOUR = 0 */ time_s->PM_flag = 0; *timeZone = -10; /* Set timezone to -10 */ return( AT_CMPL ); #endif /* _SIMULATION_ */ } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMS | | STATE : code ROUTINE : qAT_PercentCTZV | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the %CTZV AT command which will query the status of PCTZVmode, indicating whether time and date report is enabled or disabled. <on/off>: Indicates whether time and date report is enabled or disabled. */ GLOBAL T_ACI_RETURN qAT_PercentCTZV ( T_ACI_CMD_SRC srcId, T_ACI_PCTZV_MODE *mode) { TRACE_FUNCTION ("qAT_PercentCTZV()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { TRACE_EVENT_P1("qAT_PercentCTZV(): Invalid source: %d", srcId); ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } *mode = cmhPrm[srcId].mmCmdPrm.PCTZVMode; return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_MMS | | STATE : code ROUTINE : qAT_PercentCNIV | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the %CNIV AT command which will query the status of CNIVmode, indicating whether time and date report is enabled or disabled. <on/off>: Indicates whether time and date report is enabled or disabled. */ GLOBAL T_ACI_RETURN qAT_PercentCNIV ( T_ACI_CMD_SRC srcId, T_ACI_CNIV_MODE *mode) { TRACE_FUNCTION ("qAT_PercentCNIV()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { TRACE_EVENT_P1("qAT_PercentCNIV(): Invalid source: %d", srcId); ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } *mode = cmhPrm[srcId].mmCmdPrm.CNIVMode; return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : ACI/MMI MODULE : CMH_MMS | | STATE : code ROUTINE : qAT_PlusCIND | +--------------------------------------------------------------------+ PURPOSE : This is the function for Signal Quality query */ GLOBAL T_ACI_RETURN qAT_PlusCIND ( T_ACI_CMD_SRC srcId, T_ACI_CIND_SIGNAL_TYPE *sCindSgnalSettings, T_ACI_CIND_SMSFULL_TYPE *sCindSmsFullSettings ) { T_ACI_MM_CIND_VAL_TYPE *pMMCmdPrm; TRACE_FUNCTION ("qAT_PlusCIND()"); if( !cmh_IsVldCmdSrc( srcId ) || (sCindSgnalSettings == NULL) || (sCindSmsFullSettings == NULL) ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pMMCmdPrm = &(cmhPrm[srcId].mmCmdPrm.sIndicationParam.sMmCINDSettings); *sCindSgnalSettings = pMMCmdPrm->sCindSignalParam; *sCindSmsFullSettings = pMMCmdPrm->sCindSmsFullParam; return(AT_CMPL); } /* +--------------------------------------------------------------------+ | PROJECT : ACI/MMI MODULE : CMH_MMS | | STATE : code ROUTINE : qAT_PlusCMER | +--------------------------------------------------------------------+ PURPOSE : This is the function for Signal Quality query */ GLOBAL T_ACI_RETURN qAT_PlusCMER ( T_ACI_CMD_SRC srcId, T_ACI_CMER_MODE_TYPE *sCmerModeSettings, T_ACI_CMER_IND_TYPE *sCmerIndicationSettings, T_ACI_CMER_BFR_TYPE *sCmerBfrSettings ) { T_ACI_MM_CMER_VAL_TYPE *pMMCmdPrm; TRACE_FUNCTION ("qAT_PlusCMER()"); if( !cmh_IsVldCmdSrc( srcId ) || (sCmerModeSettings == NULL) || (sCmerIndicationSettings == NULL) || (sCmerBfrSettings == NULL)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pMMCmdPrm = &(cmhPrm[srcId].mmCmdPrm.sIndicationParam.sMmCMERSettings); *sCmerModeSettings = pMMCmdPrm->sCmerModeParam; *sCmerIndicationSettings = pMMCmdPrm->sCmerIndParam; *sCmerBfrSettings = pMMCmdPrm->sCmerBfrParam; return(AT_CMPL); } /*==== EOF ========================================================*/