FreeCalypso > hg > fc-magnetite
view src/aci2/aci/cmh_mmq.c @ 636:57e67ca2e1cb
pcmdata.c: default +CGMI to "FreeCalypso" and +CGMM to model
The present change has no effect whatsoever on Falconia-made and Openmoko-made
devices on which /pcm/CGMI and /pcm/CGMM files have been programmed in FFS
with sensible ID strings by the respective factories, but what should AT+CGMI
and AT+CGMM queries return when the device is a Huawei GTM900 or Tango modem
that has been converted to FreeCalypso with a firmware change? Before the
present change they would return compiled-in defaults of "<manufacturer>" and
"<model>", respectively; with the present change the firmware will self-identify
as "FreeCalypso GTM900-FC" or "FreeCalypso Tango" on the two respective targets.
This firmware identification will become important if someone incorporates an
FC-converted GTM900 or Tango modem into a ZeroPhone-style smartphone where some
high-level software like ofono will be talking to the modem and will need to
properly identify this modem as FreeCalypso, as opposed to some other AT command
modem flavor with different quirks.
In technical terms, the compiled-in default for the AT+CGMI query (which will
always be overridden by the /pcm/CGMI file in FFS if one is present) is now
"FreeCalypso" in all configs on all targets; the compiled-in default for the
AT+CGMM query (likewise always overridden by /pcm/CGMM if present) is
"GTM900-FC" if CONFIG_TARGET_GTM900 or "Tango" if CONFIG_TARGET_TANGO or the
original default of "<model>" otherwise.
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sun, 19 Jan 2020 20:14:58 +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 ========================================================*/
