| /****************************************************************************** |
| |
| *(C) Copyright 2007 Marvell International Ltd. |
| |
| * All Rights Reserved |
| |
| ****************************************************************************** |
| * Filename: teldev.c |
| * |
| * Description: Process dev related AT commands |
| * |
| * History: |
| * Jan 17, 2008 - Creation of file |
| * Oct 17, 2008 - Qiang XU, Optimization |
| * |
| ******************************************************************************/ |
| |
| /****************************************************************************** |
| * Include files |
| ******************************************************************************/ |
| #include <limits.h> |
| #include "teldev.h" |
| #include "teldef.h" |
| #include "ci_api_types.h" |
| #include "ci_api.h" |
| #include "ci_dev.h" |
| #include "telmsg.h" |
| #include "telatci.h" |
| #include "telconfig.h" |
| #include "telatparamdef.h" |
| #include "telutl.h" |
| #include "dev_api.h" |
| #include "utilities.h" |
| #include "telcontroller.h" |
| #include "eeh_assert_notify.h" |
| #include "cploader.h" |
| #include "cc_api.h" |
| |
| #include <cutils/properties.h> |
| |
| #include "utlMalloc.h" |
| |
| #include <stdlib.h> |
| #include <string.h> |
| #include "utlAtParser.h" |
| #include <stdio.h> |
| #include "atcmdsvr_ubus.h" |
| #include <unistd.h> |
| #include <sys/wait.h> |
| |
| #ifdef MBTK_AT_SUPPORT |
| #include "mbtk_device_info.h" |
| #endif |
| |
| extern char * getAsrFlagPath(void); |
| extern unsigned char *cp_set_ddr_flag(int offset, unsigned int value); |
| char internalRevisionId[MAX_INTERNALREVISION_ID_LENGTH + 1] = "unknown"; |
| char buildTimeStr[MAX_BUILDTIME_STR_LENGTH + 1] = "unknown"; |
| |
| #define TEL_MODE_SZ 15 /* = max(telMode[]) = sizeof("PRODUCT_NO_GUI")=14+1 */ |
| char gTelMode[TEL_MODE_SZ] = "NORMAL"; |
| BOOL g_IsCgedOn = FALSE; |
| BOOL g_IsCellInfoPeriodic = FALSE; |
| |
| extern int gNumofAT; |
| int gPowerind = 0; |
| int gPowerindTmp = 0; |
| |
| extern CiServiceHandle gAtciSvgHandle[CI_SG_NUMIDS + 1]; |
| |
| UINT8 gNullPrxysetFlag = 0; |
| |
| /************************************************************************************ |
| * |
| * Dev related global variables and structure |
| * |
| *************************************************************************************/ |
| extern CiDevEngModeReportOption gEngModeRepOpt; |
| extern CiDevEngModeReportOption gEngModeRepOpt_1; |
| extern int gCurrTimeVal; |
| extern int gCurrTimeVal_1; |
| extern utlAtParser_P aParser_p[]; |
| |
| extern utlAtProxyCommand_P atProxyReq; |
| extern utlAtProxyCommand_P atProxyInd; |
| extern TelAtParserID gProxyChannelId; //the current channel ID for proxy |
| extern TelAtParserID gOrigParserId; |
| extern UINT32 gCurrentProxyTrsXid; |
| extern BOOL gCurrentPrxyFirstPhase; |
| extern const char * VENDOR_SW_VERSION; |
| extern pthread_mutex_t gProxyAccessLock; |
| extern CiReturnCode Dev_L1Debug(UINT32 atHandle, CHAR *data, UINT16 length); |
| extern BOOL ims_sms_data_invalid_report_error; |
| |
| extern BOOL gImsRegState; |
| extern BOOL gImsRegState_1; |
| |
| extern TelMsgDataMode gCurrentSmsDataMode; |
| |
| /************************************************************************************ |
| * |
| * DEV related AT commands |
| * |
| *************************************************************************************/ |
| /* |
| #define isxdigit(c) (('0' <= (c) && (c) <= '9') \ |
| || ('a' <= (c) && (c) <= 'f') \ |
| || ('A' <= (c) && (c) <= 'F')) |
| */ |
| |
| |
| |
| |
| /************************************************************************************ |
| * F@: ciFuncSet - GLOBAL API for GCF AT+CFUN -command |
| * |
| */ |
| RETURNCODE_T ciFuncSet( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciFuncSet, "ciFuncSet: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+CFUN? */ |
| { |
| ret = DEV_GetFunc(atHandle, FALSE); |
| break; |
| } |
| |
| case TEL_EXT_TEST_CMD: /* AT+CFUN=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_OK,0,(char *)"+CFUN: (0,1,3,4,5,6),(0-1)\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT+CFUN= */ |
| { |
| INT32 funcVal, resetVal; |
| /* Extract the arguments starting with the functionality. */ |
| if ( (getExtValue(parameter_values_p, 0, &funcVal, TEL_AT_CFUN_0_FUN_VAL_MIN, TEL_AT_CFUN_0_FUN_VAL_MAX, TEL_AT_CFUN_0_FUN_VAL_DEFAULT) == TRUE) |
| && ((funcVal <= ATCI_CFUN_OP_FULL_FUNC) || (funcVal == ATCI_CFUN_OP_DISABLE_RF_RX) || (funcVal == ATCI_CFUN_OP_DISABLE_RF_RXTX) |
| || (funcVal == ATCI_PLUS_CFUN_OP_DISABLE_SIM) || (funcVal == ATCI_PLUS_CFUN_OP_FULL_SECONDARY_RX_OFF))) |
| { |
| if(funcVal == ATCI_PLUS_CFUN_OP_DISABLE_SIM) |
| funcVal = ATCI_CFUN_OP_DISABLE_SIM; |
| else if(funcVal == ATCI_PLUS_CFUN_OP_FULL_SECONDARY_RX_OFF) |
| funcVal = ATCI_CFUN_OP_FULL_SECONDARY_RX_OFF; |
| |
| /* Get the reset flag; default value shall be 0 */ |
| if ( getExtValue( parameter_values_p, 1, &resetVal, TEL_AT_CFUN_1_RST_VAL_MIN, TEL_AT_CFUN_1_RST_VAL_MAX, TEL_AT_CFUN_1_RST_VAL_DEFAULT ) == TRUE ) |
| { |
| ret = DEV_SetFunc(atHandle, funcVal, resetVal, set_func_req_plus_cfun, 0, 0); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT+CFUN */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciFuncSet - GLOBAL API for GCF AT*CFUN -command |
| * |
| */ |
| RETURNCODE_T ciFuncCpConfig( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| INT32 IsCommFeatureConfig; |
| INT32 CommFeatureConfig; |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciFuncCpConfig, "ciFuncCpConfig: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT*CFUN? */ |
| { |
| ret = DEV_GetFunc(atHandle, TRUE); |
| break; |
| } |
| |
| case TEL_EXT_TEST_CMD: /* AT*CFUN=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*CFUN: (0,1,4,5,6,9),(0-1),(0,1),(0-63)\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*CFUN= */ |
| { |
| BOOL cmdValid = FALSE; |
| INT32 funcVal, resetVal; |
| /* Extract the arguments starting with the functionality. */ |
| if ( (getExtValue(parameter_values_p, 0, &funcVal, TEL_AT_CFUN_0_FUN_VAL_MIN, TEL_AT_CFUN_0_FUN_VAL_MAX, TEL_AT_CFUN_0_FUN_VAL_DEFAULT) == TRUE) |
| && ((funcVal <= ATCI_CFUN_OP_FULL_FUNC) || (funcVal == ATCI_CFUN_OP_DISABLE_RF_RX) || (funcVal == ATCI_CFUN_OP_DISABLE_RF_RXTX) |
| || (funcVal == ATCI_CFUN_OP_UPDATE_NVM_MIN_FUNC) || (funcVal == ATCI_CFUN_OP_UPDATE_NVM_FULL_FUNC) || (funcVal == ATCI_CFUN_OP_UPDATE_NVM_DISABLE_RF_RXTX))) |
| { |
| /* Get the reset flag; default value shall be 0 */ |
| if ( getExtValue( parameter_values_p, 1, &resetVal, TEL_AT_CFUN_1_RST_VAL_MIN, TEL_AT_CFUN_1_RST_VAL_MAX, TEL_AT_CFUN_1_RST_VAL_DEFAULT ) == TRUE ) |
| { |
| if ( getExtValue( parameter_values_p, 2, &IsCommFeatureConfig, TEL_AT_CFUN_2_EN_CONFIG_VAL_MIN, TEL_AT_CFUN_2_EN_CONFIG_VAL_MAX, TEL_AT_CFUN_2_EN_CONFIG_VAL_DEFAULT ) == TRUE ) |
| { |
| if ( getExtValue( parameter_values_p, 3, &CommFeatureConfig, TEL_AT_CFUN_3_CONFIG_VAL_MIN, TEL_AT_CFUN_3_CONFIG_VAL_MAX, TEL_AT_CFUN_3_CONFIG_VAL_DEFAULT ) == TRUE ) |
| { |
| cmdValid = TRUE; |
| ret = DEV_SetFunc(atHandle, funcVal, resetVal, set_func_req_star_cfun, IsCommFeatureConfig, CommFeatureConfig); |
| } |
| } |
| } |
| } |
| if(!cmdValid) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT*CFUN */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| / * F@: ciDevStatus - GLOBAL API for GCF AT+CPAS-command |
| * |
| */ |
| RETURNCODE_T ciDevStatus( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciDevStatus, "ciDevStatus: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_TEST_CMD: /* AT+CPAS=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+CPAS: (0,1,2,3,4,5,6)\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT+CPAS */ |
| { |
| /* |
| ** Retrieve the device status from the global variable. |
| ** This variable is updated everytime the CI_DEV_PRIM_STATUS_IND |
| ** is received. The result originates from the last time |
| ** the indication was received. |
| */ |
| ret = DEV_GetDevStatus(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT+CPAS? */ |
| case TEL_EXT_SET_CMD: /* AT+CPAS= */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| /************************************************************************************ |
| / * F@: ciCGED - GLOBAL API for AT+CGED-command |
| * |
| */ |
| RETURNCODE_T ciCGED( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciCGED, "ciCGED: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_TEST_CMD: /* AT+CGED=? */ |
| { |
| ATRESP( atHandle, 0, 0, (char *)"AT+CGED=0 :Export the EM information once for each request."); |
| ATRESP( atHandle, 0, 0, (char *)"AT+CGED=1,<interval> :Export the EM information periodically in every interval seconds."); |
| ATRESP( atHandle, 0, 0, (char *)"AT+CGED=2 :Disable Engineering mode, stop output Engineering mode information."); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_SUPPRESS, 0, NULL); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT+CGED=*/ |
| { |
| INT32 modeVal, timeVal; |
| if ( getExtValue(parameter_values_p, 0, &modeVal, TEL_AT_CGED_0_MODE_VAL_MIN, TEL_AT_CGED_0_MODE_VAL_MAX, TEL_AT_CGED_0_MODE_VAL_DEFAULT) == TRUE ) |
| { |
| if(getExtValue( parameter_values_p, 1, &timeVal, TEL_AT_CGED_1_INTERVAL_VAL_MIN, TEL_AT_CGED_1_INTERVAL_VAL_MAX, TEL_AT_CGED_1_INTERVAL_VAL_DEFAULT) == TRUE) |
| ret = DEV_SetEngineModeReportOption(atHandle, modeVal, timeVal); |
| } |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT+CGED? */ |
| case TEL_EXT_ACTION_CMD: /* AT+CGED */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| /* IMEI */ |
| /************************************************************************************ |
| * F@: ciCGSN - GLOBAL API for AT+CGSN/GSN command |
| * |
| */ |
| |
| RETURNCODE_T ciCGSN( |
| const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciCGSN, "ciCGSN: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+CGSN? */ |
| case TEL_EXT_ACTION_CMD: /* AT+CGSN */ |
| { |
| ret = DEV_GetSerialNumId(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_TEST_CMD: /* AT+CGSN=? */ |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+CGSN:\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT+CGSN= */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciSysConfig - GLOBAL API for CMCC AT^SYSCONFIG command |
| * |
| */ |
| RETURNCODE_T ciSysConfig( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| |
| char AtBuf[100]; |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciSysConfig, "ciSysConfig: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT^SYSCONFIG? */ |
| { |
| ret = DEV_GetSysConfig(atHandle); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT^SYSCONFIG= */ |
| { |
| INT32 modeVal, acqorderVal, bandVal=0xffffffff, roamVal, srvdomainVal; |
| /* Extract the arguments starting with the functionality. */ |
| if( getExtValue(parameter_values_p, 0, &modeVal, 2, 16, 2) == TRUE ) |
| { |
| /* Get the reset flag; default value shall be 0 */ |
| if( getExtValue( parameter_values_p, 1, &acqorderVal, 0, 3, 2 ) == TRUE ) |
| { |
| if( getExtValue( parameter_values_p, 2, &roamVal, 0, 2, 1 ) == TRUE ) |
| { |
| if( getExtValue( parameter_values_p, 3, &srvdomainVal, 0, 4, 2 ) == TRUE ) |
| { |
| //FixMe: In order to avoid CP to detach, which will cause assert |
| ret = DEV_SysConfig(atHandle, modeVal, acqorderVal, bandVal,roamVal, srvdomainVal); |
| } |
| else |
| { |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_OPERATION_NOT_SUPPORTED,NULL); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_OPERATION_NOT_SUPPORTED,NULL); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_OPERATION_NOT_SUPPORTED,NULL); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_OPERATION_NOT_SUPPORTED,NULL); |
| } |
| break; |
| } |
| |
| default: |
| { |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_OPERATION_NOT_SUPPORTED,NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| #if !defined(ATCMD_1901_CI) && !defined(ATCMD_1903_CI) |
| RETURNCODE_T ciBAND( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| INT32 NWMode; |
| UINT32 gsmband, umtsband, eutranhband, eutranlband, ltebandext; |
| INT32 roamingConfig, srvDomain, bandPriorityFlag; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciBAND, "ciBAND: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*BAND=? */ |
| { |
| ret = DEV_GetSupportedBandModeReq(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*BAND? */ |
| { |
| ret = DEV_GetBandModeReq(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*BAND= */ |
| { |
| BOOL cmdValid = FALSE; |
| if ( getExtValue( parameter_values_p, 0, &NWMode, TEL_AT_BAND_NW_MODE_VAL_MIN, TEL_AT_BAND_NW_MODE_VAL_MAX, CI_DEV_NW_MODE_NOT_CHANGE ) == TRUE ) |
| { |
| if ( getExtUValue( parameter_values_p, 1, &gsmband, TEL_AT_BAND_BAND_VAL_MIN, TEL_AT_BAND_BAND_VAL_MAX, TEL_AT_BAND_BAND_VAL_DEFAULT ) == TRUE ) |
| { |
| if ( getExtUValue( parameter_values_p, 2, &umtsband, TEL_AT_BAND_BAND_VAL_MIN, TEL_AT_BAND_BAND_VAL_MAX, TEL_AT_BAND_BAND_VAL_DEFAULT ) == TRUE ) |
| { |
| if ( getExtUValue( parameter_values_p, 3, &eutranhband, TEL_AT_BAND_BAND_VAL_MIN, TEL_AT_BAND_BAND_VAL_MAX, TEL_AT_BAND_BAND_VAL_DEFAULT ) == TRUE ) |
| { |
| if ( getExtUValue( parameter_values_p, 4, &eutranlband, TEL_AT_BAND_BAND_VAL_MIN, TEL_AT_BAND_BAND_VAL_MAX, TEL_AT_BAND_BAND_VAL_DEFAULT ) == TRUE ) |
| { |
| if ( getExtValue( parameter_values_p, 5, &roamingConfig, TEL_AT_BAND_ROAMING_CONFIG_VAL_MIN, TEL_AT_BAND_ROAMING_CONFIG_VAL_MAX, TEL_AT_BAND_ROAMING_CONFIG_VAL_DEFAULT ) == TRUE ) |
| { |
| if ( getExtValue( parameter_values_p, 6, &srvDomain, TEL_AT_BAND_SRV_DOMAIN_VAL_MIN, TEL_AT_BAND_SRV_DOMAIN_VAL_MAX, TEL_AT_BAND_SRV_DOMAIN_VAL_DEFAULT ) == TRUE ) |
| { |
| if(getExtValue(parameter_values_p, 7, &bandPriorityFlag, TEL_AT_BAND_BAND_PRIORITY_VAL_MIN, TEL_AT_BAND_BAND_PRIORITY_VAL_MAX, TEL_AT_BAND_BAND_PRIORITY_VAL_DEFAULT) == TRUE) |
| { |
| if(getExtUValue(parameter_values_p, 8, <ebandext, TEL_AT_BAND_BAND_VAL_MIN, TEL_AT_BAND_BAND_VAL_MAX, TEL_AT_BAND_BAND_VAL_DEFAULT) == TRUE) |
| { |
| cmdValid = TRUE; |
| switch (NWMode) |
| { |
| case DEV_NW_GSM_MODE: //GSM network |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM, CI_DEV_NW_GSM, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, 0, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_UMTS_MODE: //UMTS network |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_UMTS, CI_DEV_NW_UMTS, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, 0, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_DUAL_GSM_UMTS_MODE: //Dual mode(auto) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM_UMTS, CI_DEV_NW_GSM_UMTS, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, 0, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_DUAL_GSM_UMTS_MODE_GSM: //Dual mode(GSM preferred) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM_UMTS, CI_DEV_NW_GSM, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, 0, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_DUAL_GSM_UMTS_MODE_UMTS: //Dual mode(UMTS preferred) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM_UMTS, CI_DEV_NW_UMTS, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, 0, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_LTE_MODE: //LTE mode |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_LTE, CI_DEV_NW_LTE, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_DUAL_GSM_LTE_MODE: //GSM_LTE(auto) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM_LTE, CI_DEV_NW_GSM_LTE, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_DUAL_GSM_LTE_MODE_GSM: //GSM_LTE(GSM preferred) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM_LTE, CI_DEV_NW_GSM, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_DUAL_GSM_LTE_MODE_LTE: //GSM_LTE(LTE preferred) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM_LTE, CI_DEV_NW_LTE, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_DUAL_UMTS_LTE_MODE: //UMTS_LTE(auto) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_UMTS_LTE, CI_DEV_NW_UMTS_LTE, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_DUAL_UMTS_LTE_MODE_UMTS: //UMTS_LTE(UMTS preferred) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_UMTS_LTE, CI_DEV_NW_UMTS, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_DUAL_UMTS_LTE_MODE_LTE: //UMTS_LTE(LTE preferred) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_UMTS_LTE, CI_DEV_NW_LTE, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_TRIP_MODE: //Tripple mode(auto) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM_UMTS_LTE, CI_DEV_NW_GSM_UMTS_LTE, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_TRIP_MODE_GSM: //Tripple mode(GSM preferred) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM_UMTS_LTE, CI_DEV_NW_GSM, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_TRIP_MODE_UMTS: //Tripple mode(UMTS preferred) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM_UMTS_LTE, CI_DEV_NW_UMTS, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_TRIP_MODE_LTE: //Tripple mode(LTE preferred) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_GSM_UMTS_LTE, CI_DEV_NW_LTE, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| #if defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) |
| case DEV_NW_NR_MODE: //5G only mode |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_NR, CI_DEV_NW_NR, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| case DEV_NW_LTE_NR: //dual mode(5G + LTE) |
| { |
| ret = DEV_SetBandModeReq(atHandle, CI_DEV_NW_LTE_NR, CI_DEV_NW_LTE_NR, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 0, ltebandext); |
| break; |
| } |
| #endif |
| case DEV_NW_MODE_NOT_CHANGE: |
| { |
| ret = DEV_SetBandModeReqExt(atHandle, CI_DEV_NW_GSM_UMTS_LTE, CI_DEV_NW_UMTS, gsmband, umtsband, eutranhband, eutranlband, roamingConfig, srvDomain, bandPriorityFlag, 1, ltebandext); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| if(!cmdValid) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT*BAND */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| #else |
| RETURNCODE_T ciBAND( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| RETURNCODE_T rc; |
| CiReturnCode ret; |
| UINT32 NWMode; |
| UINT32 gsmband,umtsband,ltebandh,lteandl; |
| /* Added by Daniel for CQ00138517, begin */ |
| UINT32 nrFr1BandBitmap[CI_DEV_NR_FR1_BAND_LIST_NUM]; |
| UINT32 nrFr2BandBitmap; |
| /* Added by Daniel for CQ00138517, end */ |
| UINT32 roamingConfig; |
| UINT32 srvDomain; |
| UINT32 bandPriorityFlag; |
| UINT32 ltebandext; |
| UINT32 atHandle; |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| rc = INITIAL_RETURN_CODE; |
| ret = CIRC_FAIL; |
| atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //INFOMSG(ciBAND, "ciBAND: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*BAND=? */ |
| { |
| ret = DEV_GetSupportedBandModeReq(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*BAND? */ |
| { |
| ret = DEV_GetBandModeReq(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*BAND= */ |
| { |
| if(getExtValue(parameter_values_p, 0, &NWMode, TEL_AT_BAND_NW_MODE_VAL_MIN, TEL_AT_BAND_NW_MODE_VAL_MAX, TEL_AT_BAND_NW_MODE_VAL_DEFAULT ) == TRUE) |
| { |
| if(getExtUValue(parameter_values_p, 1, &gsmband, TEL_AT_BAND_BAND_VAL_MIN, TEL_AT_BAND_BAND_VAL_MAX, TEL_AT_BAND_BAND_VAL_DEFAULT ) == TRUE) |
| { |
| if(getExtUValue(parameter_values_p, 2, &umtsband, TEL_AT_BAND_BAND_VAL_MIN, TEL_AT_BAND_BAND_VAL_MAX, TEL_AT_BAND_BAND_VAL_DEFAULT ) == TRUE) |
| { |
| if(getExtUValue(parameter_values_p, 3, <ebandh, TEL_AT_BAND_BAND_VAL_MIN, TEL_AT_BAND_BAND_VAL_MAX, TEL_AT_BAND_BAND_VAL_DEFAULT ) == TRUE) |
| { |
| if(getExtUValue(parameter_values_p, 4, <eandl, TEL_AT_BAND_BAND_VAL_MIN, TEL_AT_BAND_BAND_VAL_MAX, TEL_AT_BAND_BAND_VAL_DEFAULT ) == TRUE) |
| { |
| /* Added by Daniel for CQ00138517, begin */ |
| if(getExtUValue(parameter_values_p, 5, &nrFr1BandBitmap[3], TEL_AT_BAND_NR_BAND_VAL_MIN, TEL_AT_BAND_NR_BAND_VAL_MAX, TEL_AT_BAND_NR_BAND_VAL_DEFAULT ) == TRUE) |
| { |
| if(getExtUValue(parameter_values_p, 6, &nrFr1BandBitmap[2], TEL_AT_BAND_NR_BAND_VAL_MIN, TEL_AT_BAND_NR_BAND_VAL_MAX, TEL_AT_BAND_NR_BAND_VAL_DEFAULT ) == TRUE) |
| { |
| if(getExtUValue(parameter_values_p, 7, &nrFr1BandBitmap[1], TEL_AT_BAND_NR_BAND_VAL_MIN, TEL_AT_BAND_NR_BAND_VAL_MAX, TEL_AT_BAND_NR_BAND_VAL_DEFAULT ) == TRUE) |
| { |
| if(getExtUValue(parameter_values_p, 8, &nrFr1BandBitmap[0], TEL_AT_BAND_NR_BAND_VAL_MIN, TEL_AT_BAND_NR_BAND_VAL_MAX, TEL_AT_BAND_NR_BAND_VAL_DEFAULT ) == TRUE) |
| { |
| if(getExtUValue(parameter_values_p, 9, &nrFr2BandBitmap, TEL_AT_BAND_NR_BAND_VAL_MIN, TEL_AT_BAND_NR_BAND_VAL_MAX, TEL_AT_BAND_NR_BAND_VAL_DEFAULT ) == TRUE) |
| { |
| /* Added by Daniel for CQ00138517, end */ |
| if(getExtValue(parameter_values_p, 10, &roamingConfig, TEL_AT_BAND_ROAMING_CONFIG_VAL_MIN, TEL_AT_BAND_ROAMING_CONFIG_VAL_MAX, TEL_AT_BAND_ROAMING_CONFIG_VAL_DEFAULT) == TRUE) |
| { |
| if(getExtValue(parameter_values_p, 11, &srvDomain, TEL_AT_BAND_SRV_DOMAIN_VAL_MIN, TEL_AT_BAND_SRV_DOMAIN_VAL_MAX, TEL_AT_BAND_SRV_DOMAIN_VAL_DEFAULT) == TRUE) |
| { |
| if(getExtValue(parameter_values_p, 12, &bandPriorityFlag, TEL_AT_BAND_BAND_PRIORITY_VAL_MIN, TEL_AT_BAND_BAND_PRIORITY_VAL_MAX, TEL_AT_BAND_BAND_PRIORITY_VAL_DEFAULT) == TRUE) |
| { |
| if(getExtUValue(parameter_values_p, 13, <ebandext, TEL_AT_BAND_BAND_VAL_MIN, TEL_AT_BAND_BAND_VAL_MAX, TEL_AT_BAND_BAND_VAL_DEFAULT) == TRUE) |
| { |
| UINT8 networkMode = CI_DEV_NUM_NW_MODES; |
| UINT8 preferredMode = CI_DEV_NUM_NW_MODES; |
| UINT8 bSetBand = TRUE; |
| |
| switch(NWMode) |
| { |
| case DEV_NW_GSM_MODE: //GSM network |
| { |
| networkMode = CI_DEV_NW_GSM; |
| preferredMode = CI_DEV_NW_GSM; |
| bandPriorityFlag = 0; |
| break; |
| } |
| case DEV_NW_UMTS_MODE: //UMTS network |
| { |
| networkMode = CI_DEV_NW_UMTS; |
| preferredMode = CI_DEV_NW_UMTS; |
| bandPriorityFlag = 0; |
| break; |
| } |
| case DEV_NW_DUAL_GSM_UMTS_MODE: //Dual mode (auto) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS; |
| preferredMode = CI_DEV_NW_GSM_UMTS; |
| bandPriorityFlag = 0; |
| break; |
| } |
| case DEV_NW_DUAL_GSM_UMTS_MODE_GSM: //Dual mode(GSM preferred) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS; |
| preferredMode = CI_DEV_NW_GSM; |
| break; |
| } |
| case DEV_NW_DUAL_GSM_UMTS_MODE_UMTS: //Dual mode(UMTS preferred) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS; |
| preferredMode = CI_DEV_NW_UMTS; |
| break; |
| } |
| case DEV_NW_LTE_MODE: // LTE mode |
| { |
| networkMode = CI_DEV_NW_LTE; |
| preferredMode = CI_DEV_NW_LTE; |
| break; |
| } |
| case DEV_NW_DUAL_GSM_LTE_MODE: //Tripple mode (auto) |
| { |
| networkMode = CI_DEV_NW_GSM_LTE; |
| preferredMode = CI_DEV_NW_GSM_LTE; |
| break; |
| } |
| case DEV_NW_DUAL_GSM_LTE_MODE_GSM: //Tripple mode (GSM preferred) |
| { |
| networkMode = CI_DEV_NW_GSM_LTE; |
| preferredMode = CI_DEV_NW_GSM; |
| break; |
| } |
| case DEV_NW_DUAL_GSM_LTE_MODE_LTE: //Tripple mode (LTE preffered) |
| { |
| networkMode = CI_DEV_NW_GSM_LTE; |
| preferredMode = CI_DEV_NW_LTE; |
| break; |
| } |
| case DEV_NW_DUAL_UMTS_LTE_MODE: //Tripple mode (auto) |
| { |
| networkMode = CI_DEV_NW_UMTS_LTE; |
| preferredMode = CI_DEV_NW_UMTS_LTE; |
| break; |
| } |
| case DEV_NW_DUAL_UMTS_LTE_MODE_UMTS: //Tripple mode (UMTS preferred) |
| { |
| networkMode = CI_DEV_NW_UMTS_LTE; |
| preferredMode = CI_DEV_NW_UMTS; |
| break; |
| } |
| case DEV_NW_DUAL_UMTS_LTE_MODE_LTE: //Tripple mode (LTE preferred) |
| { |
| networkMode = CI_DEV_NW_UMTS_LTE; |
| preferredMode = CI_DEV_NW_LTE; |
| break; |
| } |
| case DEV_NW_TRIP_MODE: //Tripple mode (auto) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS_LTE; |
| preferredMode = CI_DEV_NW_GSM_UMTS_LTE; |
| break; |
| } |
| case DEV_NW_TRIP_MODE_GSM: //Tripple mode (GSM preferred) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS_LTE; |
| preferredMode = CI_DEV_NW_GSM; |
| break; |
| } |
| case DEV_NW_TRIP_MODE_UMTS: //Tripple mode (UMTS preferred) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS_LTE; |
| preferredMode = CI_DEV_NW_UMTS; |
| break; |
| } |
| case DEV_NW_TRIP_MODE_LTE: //Tripple mode (LTE preferred) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS_LTE; |
| preferredMode = CI_DEV_NW_LTE; |
| break; |
| } |
| case DEV_NW_NR_MODE: |
| { |
| networkMode = CI_DEV_NW_NR; |
| preferredMode = CI_DEV_NW_NR; |
| break; |
| } |
| case DEV_NW_LTE_NR: |
| { |
| networkMode = CI_DEV_NW_LTE_NR; |
| preferredMode = CI_DEV_NW_LTE_NR; |
| break; |
| } |
| case DEV_NW_LTE_NR_MODE_LTE: //LTE_NR(LTE preferred) |
| { |
| networkMode = CI_DEV_NW_LTE_NR; |
| preferredMode = CI_DEV_NW_LTE; |
| break; |
| } |
| case DEV_NW_LTE_NR_MODE_NR: //LTE_NR(NR preferred) |
| { |
| networkMode = CI_DEV_NW_LTE_NR; |
| preferredMode = CI_DEV_NW_NR; |
| break; |
| } |
| case DEV_NW_UMTS_LTE_NR_MODE: //UMTS_LTE_NR |
| { |
| networkMode = CI_DEV_NW_UMTS_LTE_NR; |
| preferredMode = CI_DEV_NW_UMTS_LTE_NR; |
| break; |
| } |
| case DEV_NW_UMTS_LTE_NR_MODE_UMTS: //UMTS_LTE_NR(UMTS preferred) |
| { |
| networkMode = CI_DEV_NW_UMTS_LTE_NR; |
| preferredMode = CI_DEV_NW_UMTS; |
| break; |
| } |
| case DEV_NW_UMTS_LTE_NR_MODE_LTE: //UMTS_LTE_NR(LTE preferred) |
| { |
| networkMode = CI_DEV_NW_UMTS_LTE_NR; |
| preferredMode = CI_DEV_NW_LTE; |
| break; |
| } |
| case DEV_NW_UMTS_LTE_NR_MODE_NR: //UMTS_LTE_NR(NR preferred) |
| { |
| networkMode = CI_DEV_NW_UMTS_LTE_NR; |
| preferredMode = CI_DEV_NW_NR; |
| break; |
| } |
| case DEV_NW_GSM_UMTS_LTE_NR_MODE: //GSM_UMTS_LTE_NR |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS_LTE_NR; |
| preferredMode = CI_DEV_NW_GSM_UMTS_LTE_NR; |
| break; |
| } |
| case DEV_NW_GSM_UMTS_LTE_NR_MODE_GSM: //GSM_UMTS_LTE_NR(GSM preferred) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS_LTE_NR; |
| preferredMode = CI_DEV_NW_GSM; |
| break; |
| } |
| case DEV_NW_GSM_UMTS_LTE_NR_MODE_UMTS: //GSM_UMTS_LTE_NR(UMTS preferred) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS_LTE_NR; |
| preferredMode = CI_DEV_NW_UMTS; |
| break; |
| } |
| case DEV_NW_GSM_UMTS_LTE_NR_MODE_LTE: //GSM_UMTS_LTE_NR(LTE preferred) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS_LTE_NR; |
| preferredMode = CI_DEV_NW_LTE; |
| break; |
| } |
| case DEV_NW_GSM_UMTS_LTE_NR_MODE_NR: //GSM_UMTS_LTE_NR(NR preferred) |
| { |
| networkMode = CI_DEV_NW_GSM_UMTS_LTE_NR; |
| preferredMode = CI_DEV_NW_NR; |
| break; |
| } |
| default: |
| { |
| bSetBand = FALSE; |
| break; |
| } |
| } |
| |
| if (bSetBand == TRUE) |
| { |
| ret = DEV_SetBandModeReq(atHandle, |
| networkMode, |
| preferredMode, |
| gsmband, |
| umtsband, |
| ltebandh, |
| lteandl, |
| &nrFr1BandBitmap[0], |
| nrFr2BandBitmap, |
| roamingConfig, |
| srvDomain, |
| bandPriorityFlag, |
| ltebandext); |
| } |
| else |
| { |
| ret = ATRESP(atHandle, |
| ATCI_RESULT_CODE_CME_ERROR, |
| CME_OPERATION_NOT_SUPPORTED, |
| NULL); |
| } |
| } |
| } |
| } |
| } |
| /* Added by Daniel for CQ00138517, begin */ |
| } |
| } |
| } |
| } |
| } |
| /* Added by Daniel for CQ00138517, end */ |
| } |
| } |
| } |
| } |
| } |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT*BAND */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #endif |
| /************************************************************************************ |
| * F@: ciPOWERIND - GLOBAL API for GCF AT*POWERIND command |
| * |
| */ |
| RETURNCODE_T ciPOWERIND( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| |
| INT32 powerInd; |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| |
| //DBGMSG(ciPOWERIND, "ciPOWERIND: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT*POWERIND? */ |
| { |
| CHAR respBuf[40] = {0}; |
| snprintf(respBuf,39, "*POWERIND: %d", gPowerind); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, respBuf); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*POWERIND= */ |
| { |
| if ( getExtValue(parameter_values_p, 0, &powerInd, TEL_AT_POWERIND_MODE_VAL_MIN, TEL_AT_POWERIND_MODE_VAL_MAX, TEL_AT_POWERIND_MODE_VAL_DEFAULT) == TRUE ) |
| { |
| if (gPowerind != powerInd) |
| { |
| ret = DEV_SetPOWERIND(atHandle, powerInd); |
| gPowerindTmp = powerInd; |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciAPPOWERIND - GLOBAL API for GCF AT*APPOWERIND command |
| * |
| */ |
| RETURNCODE_T ciAPPOWERIND( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| |
| INT32 powerInd; |
| TelAtParserID sAtpIndex; |
| char resp_str[32]; |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| sAtpIndex = *(TelAtParserID *)arg_p; |
| |
| *xid_p = atHandle; |
| |
| //DBGMSG(ciAPPOWERIND, "ciAPPOWERIND: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*APPOWERIND=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*APPOWERIND: (0-1)\r\n"); |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*APPOWERIND? */ |
| { |
| snprintf(resp_str, sizeof(resp_str), "*APPOWERIND: %d\r", gAtpCtrl[sAtpIndex].AtpIndEnable); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, resp_str); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*APPOWERIND= */ |
| { |
| if ( getExtValue(parameter_values_p, 0, &powerInd, TEL_AT_APPOWERIND_MODE_VAL_MIN, TEL_AT_APPOWERIND_MODE_VAL_MAX, TEL_AT_APPOWERIND_MODE_VAL_DEFAULT) == TRUE ) |
| { |
| |
| gAtpCtrl[sAtpIndex].AtpIndEnable = powerInd; |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciWS46 - GLOBAL API for GCF AT+WS46 command |
| * |
| */ |
| RETURNCODE_T ciWS46( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| INT32 wirelessMode; |
| UINT8 networkMode, preferredMode; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciWS46, "ciWS46: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_SET_CMD: /* AT+WS46= */ |
| { |
| BOOL cmdValid = FALSE; |
| if ( getExtValue(parameter_values_p, 0, &wirelessMode, TEL_AT_WIRELESS_NW_MODE_VAL_MIN, TEL_AT_WIRELESS_NW_MODE_VAL_MAX, TEL_AT_WIRELESS_NW_MODE_VAL_DEFAULT) == TRUE ) |
| { |
| cmdValid = TRUE; |
| switch (wirelessMode) |
| { |
| case WDS_GERAN: |
| networkMode = CI_DEV_NW_GSM; |
| preferredMode = CI_DEV_NW_GSM; |
| break; |
| case WDS_UTRAN: |
| networkMode = CI_DEV_NW_UMTS; |
| preferredMode = CI_DEV_NW_UMTS; |
| break; |
| case WDS_GERAN_UTRAN_EUTRAN: |
| networkMode = CI_DEV_NW_GSM_UMTS_LTE; |
| preferredMode = CI_DEV_NW_GSM_UMTS_LTE; |
| break; |
| case WDS_EUTRAN: |
| networkMode = CI_DEV_NW_LTE; |
| preferredMode = CI_DEV_NW_LTE; |
| break; |
| case WDS_GERAN_UTRAN: |
| networkMode = CI_DEV_NW_GSM_UMTS; |
| preferredMode = CI_DEV_NW_GSM_UMTS; |
| break; |
| case WDS_GERAN_EUTRAN: |
| networkMode = CI_DEV_NW_GSM_LTE; |
| preferredMode = CI_DEV_NW_GSM_LTE; |
| break; |
| case WDS_UTRAN_EUTRAN: |
| networkMode = CI_DEV_NW_UMTS_LTE; |
| preferredMode = CI_DEV_NW_UMTS_LTE; |
| break; |
| default: |
| cmdValid = FALSE; |
| break; |
| } |
| } |
| if (cmdValid == TRUE) |
| { |
| ret = DEV_SetWirelessModeReq(atHandle, networkMode, preferredMode); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT+WS46? */ |
| { |
| ret = DEV_GetWirelessModeReq(atHandle); |
| break; |
| } |
| case TEL_EXT_TEST_CMD: /* AT+WS46=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, "12,22,25,28,29,30,31"); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /* Added by Michal Bukai */ |
| /************************************************************************************ |
| * F@: ciSilentReset - GLOBAL API for GCF AT*CPRST command |
| * |
| */ |
| #if 0 |
| |
| RETURNCODE_T ciSilentReset( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| |
| static CiDevPrimCommAssertReq commAssertReq; |
| |
| /* |
| * Put parser index into the variable |
| */ |
| CiRequestHandle reqHandle; |
| TelAtParserID sAtpIndex = *(TelAtParserID *)arg_p; |
| reqHandle = RET_CI_REQ_HANDLE( sAtpIndex, CI_SG_ID_DEV ); |
| *xid_p = reqHandle; |
| |
| DBGMSG("%s: reqHandle = %d.\n", __FUNCTION__, reqHandle); |
| RESP_DEBUG((CHAR *)"Enter ciSilentReset", TRUE, FALSE); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*CPRST=? */ |
| { |
| RESP( reqHandle, (char *)"OK\r\n", TRUE, FALSE ); |
| ret = CIRC_SUCCESS; |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT*CPRST */ |
| { |
| ret = ciRequest( gAtciSvgHandle[CI_SG_ID_DEV], CI_DEV_PRIM_COMM_ASSERT_REQ, |
| reqHandle, (void *)&commAssertReq ); |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*CPRST? */ |
| case TEL_EXT_SET_CMD: /* AT*CPRST= */ |
| default: |
| { |
| ret = OPER_NOT_SUPPORTED; |
| break; |
| } |
| } |
| |
| RESP_DEBUG((CHAR *)"Exit ciSilentReset", TRUE, TRUE); |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret, reqHandle); |
| return(rc); |
| } |
| |
| #endif |
| |
| |
| /* Added by Michal Bukai*/ |
| /************************************************************************************ |
| * F@: ciCMER - GLOBAL API for GCF AT+CMER command |
| * |
| */ |
| RETURNCODE_T ciCMER( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_SUCCESS; |
| BOOL cmdValid = FALSE; |
| |
| INT32 dwMode = 0; |
| INT32 dwKeyp = 0; |
| INT32 dwDisp = 0; |
| INT32 dwInd = 0; |
| INT32 dwBfr = 0; |
| |
| CHAR AtRspBuf [50]; |
| |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| *xid_p = atHandle; |
| |
| //DBGMSG(ciCMER, "ciCMER: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT+CMER=? */ |
| { |
| /* display "+CMER: list of supported modes - non of the parameter is configurable" */ |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+CMER: (3), (0), (0), (0), (0)"); |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT+CMER? */ |
| { |
| /* display "+CMER: current mode" */ |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+CMER: 3,0,0,0,0"); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT+CMER= */ |
| { |
| if ( getExtValue(parameter_values_p, 0, &dwMode, TEL_AT_CMER_MODE_VAL_DEFAULT, TEL_AT_CMER_MODE_VAL_DEFAULT, TEL_AT_CMER_MODE_VAL_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 1, &dwKeyp, TEL_AT_CMER_KEY_VAL_DEFAULT, TEL_AT_CMER_KEY_VAL_DEFAULT, TEL_AT_CMER_KEY_VAL_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, &dwDisp, TEL_AT_CMER_DIS_VAL_DEFAULT, TEL_AT_CMER_DIS_VAL_DEFAULT, TEL_AT_CMER_DIS_VAL_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 3, &dwInd, TEL_AT_CMER_IND_VAL_DEFAULT, TEL_AT_CMER_IND_VAL_DEFAULT, TEL_AT_CMER_IND_VAL_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 4, &dwBfr, TEL_AT_CMER_BUFFER_VAL_DEFAULT, TEL_AT_CMER_BUFFER_VAL_DEFAULT, TEL_AT_CMER_BUFFER_VAL_DEFAULT) == TRUE ) |
| { |
| cmdValid = TRUE; |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| } |
| } |
| } |
| } |
| if (cmdValid != TRUE) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT+CMER */ |
| default: |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciCMEC - GLOBAL API for GCF AT+CMEC command |
| * |
| */ |
| RETURNCODE_T ciCMEC( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_SUCCESS; |
| BOOL cmdValid = FALSE; |
| |
| INT32 dwKeyp = 0; |
| INT32 dwDisp = 0; |
| INT32 dwInd = 0; |
| INT32 dwTscrn = 0; |
| |
| CHAR AtRspBuf [50]; |
| |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| *xid_p = atHandle; |
| |
| //DBGMSG(ciCMEC, "ciCMEC: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT+CMEC=? */ |
| { |
| /* display "+CMEC: list of supported modes - non of the parameter is configurable" */ |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+CMEC: (0), (0), (0), (0)"); |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT+CMEC? */ |
| { |
| /* display "+CMEC: current mode" */ |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+CMEC: 0,0,0,0"); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT+CMEC= */ |
| { |
| if ( getExtValue(parameter_values_p, 0, &dwKeyp, TEL_AT_CMEC_KEY_VAL_DEFAULT, TEL_AT_CMEC_KEY_VAL_DEFAULT, TEL_AT_CMEC_KEY_VAL_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 1, &dwDisp, TEL_AT_CMEC_DIS_VAL_DEFAULT, TEL_AT_CMEC_DIS_VAL_DEFAULT, TEL_AT_CMEC_DIS_VAL_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, &dwInd, TEL_AT_CMEC_IND_VAL_DEFAULT, TEL_AT_CMEC_IND_VAL_DEFAULT, TEL_AT_CMEC_IND_VAL_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 3, &dwTscrn, TEL_AT_CMEC_TSCRN_VAL_DEFAULT, TEL_AT_CMEC_TSCRN_VAL_DEFAULT, TEL_AT_CMEC_TSCRN_VAL_DEFAULT) == TRUE ) |
| { |
| cmdValid = TRUE; |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| } |
| } |
| } |
| if (cmdValid != TRUE) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT+CMEC */ |
| default: |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| #define READ_FILE(path, buf) (void)readFile(path, buf, sizeof(buf)); |
| |
| /************************************************************************************ |
| * F@: ciCBC - GLOBAL API for GCF AT+CBC command |
| * |
| */ |
| RETURNCODE_T ciCBC( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| |
| { |
| #define CHARGER_STATUS_PATH "/sys/class/power_supply/battery/status" |
| #define BATTERY_PRESENT_PATH "/sys/class/power_supply/battery/present" |
| #define BATTERY_CAPACITY_PATH "/sys/class/power_supply/battery/capacity" |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CHAR rspStr[MAX_OUT_BUFFER]; |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| *xid_p = atHandle; |
| |
| switch ((int)op) { |
| case TEL_EXT_ACTION_CMD: /* AT+CBC */ |
| { |
| char present[4] = {0}; |
| DevBatteryStatus bcs; |
| int bcl; |
| |
| READ_FILE(BATTERY_PRESENT_PATH, present); |
| |
| if (atoi(present) == 1) { |
| /* battery is present */ |
| char charger[20] = {0}, capacity[4] = {0}; |
| |
| READ_FILE(CHARGER_STATUS_PATH, charger); |
| READ_FILE(BATTERY_CAPACITY_PATH, capacity); |
| bcl = atoi(capacity); |
| if (!strncmp(charger, "Charging", strlen("Charging"))) |
| bcs = DEV_BATTERY_STAT_POWER_BY_CHARGER; |
| else if ((!strncmp(charger, "Not charging", strlen("Not charging"))) |
| || (!strncmp(charger, "Full", strlen("Full")))) |
| bcs = DEV_BATTERY_STAT_POWER_BY_BATTERY; |
| else if (!strncmp(charger, "Discharging", strlen("Discharging"))) { |
| if (bcl == 0) |
| bcs = DEV_BATTERY_STAT_POWER_FAULT; |
| else |
| bcs = DEV_BATTERY_STAT_POWER_BY_BATTERY; |
| } else { /* "Unknown" */ |
| bcs = DEV_BATTERY_STAT_POWER_FAULT; |
| bcl = 0; |
| } |
| } else { |
| /* battery is absent */ |
| bcs = DEV_BATTERY_STAT_NO_BATTERY; |
| bcl = 0; |
| } |
| sprintf((char *)rspStr, "+CBC: %d,%d", bcs, bcl); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)rspStr); |
| |
| break; |
| } |
| |
| case TEL_EXT_TEST_CMD: /* AT+CBC=? */ |
| case TEL_EXT_GET_CMD: /* AT+CBC? */ |
| case TEL_EXT_SET_CMD: /* AT+CBC= */ |
| default: |
| break; |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| |
| /************************************************************************************ |
| / * F@: ciEEMOPT - GLOBAL API for AT+EEMOPT-command |
| * |
| */ |
| RETURNCODE_T ciEEMOPT( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| int *pCurrTimeVal; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| char AtRspBuf[50]; |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| pCurrTimeVal = &gCurrTimeVal; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| pCurrTimeVal = &gCurrTimeVal_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciEEMOPT, "ciEEMOPT: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_TEST_CMD: /* AT+EEMOPT=? */ |
| { |
| ATRESP( atHandle, 0, 0, (char *)"AT+EEMOPT=0 :Turn off indicator. This is default mode after ME bootup"); |
| ATRESP( atHandle, 0, 0, (char *)"AT+EEMOPT=1 :Set to query mode. User can use +EEMGINFO to query network parameter"); |
| ATRESP( atHandle, 0, 0, (char *)"AT+EEMOPT=2,<interval> :Set to periodic mode. Report EM info in <value> seconds"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_SUPPRESS, 0, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT+EEMOPT=*/ |
| { |
| INT32 modeVal, timeVal; |
| BOOL cmdValid = FALSE; |
| if ( getExtValue(parameter_values_p, 0, &modeVal, TEL_AT_EEMOPT_0_MODE_VAL_MIN, TEL_AT_EEMOPT_0_MODE_VAL_MAX, TEL_AT_EEMOPT_0_MODE_VAL_DEFAULT) == TRUE ) |
| { |
| if(getExtValue( parameter_values_p, 1, &timeVal, TEL_AT_EEMOPT_1_INTERVAL_VAL_MIN, TEL_AT_EEMOPT_1_INTERVAL_VAL_MAX, TEL_AT_EEMOPT_1_INTERVAL_VAL_DEFAULT) == TRUE) |
| { |
| cmdValid = TRUE; |
| ret = DEV_SetEngModeIndicatorOption(atHandle, modeVal, timeVal); |
| } |
| } |
| if(!cmdValid) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT+EEMOPT? */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_PERIODIC) |
| sprintf((char*)AtRspBuf, "+EEMOPT: %d,%d\r\n", *pEngModeRepOpt, *pCurrTimeVal); |
| else |
| sprintf((char*)AtRspBuf, "+EEMOPT: %d\r\n", *pEngModeRepOpt); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, AtRspBuf); |
| |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT+EEMOPT */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| /************************************************************************************ |
| / * F@: ciEEMOPT - GLOBAL API for AT+EEMGINFO-command |
| * |
| */ |
| RETURNCODE_T ciEEMGINFO( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciEEMGINFO, "ciEEMGINFO: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+EEMGINFO? */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_NONE) //enquery parameters without enable ENG Mode |
| ret = DEV_GetEngModeInfo(atHandle, 1); |
| else if(*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetEngModeInfo(atHandle, 0); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT+EEMGINFO=*/ |
| { |
| UINT32 forceNcell = 0; |
| if(getExtValue( parameter_values_p, 0, (int *)&forceNcell, TEL_AT_EEMGINFO_TYPE_VAL_MIN, TEL_AT_EEMGINFO_TYPE_VAL_MAX, TEL_AT_EEMGINFO_TYPE_VAL_DEFAULT) == TRUE) |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_NONE) |
| { |
| ret = DEV_GetEngModeInfo(atHandle, (forceNcell==1)?2 : 1); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_TEST_CMD: /* AT+EEMGINFO=? */ |
| case TEL_EXT_ACTION_CMD: /* AT+EEMGINFO */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #ifdef CUSTZ |
| /************************************************************************************ |
| / * F@: ciZAIRINFO - GLOBAL API for AT*ZAIRINFO-command |
| * |
| */ |
| RETURNCODE_T ciZAIRINFO( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciEEMGINFO, "ciEEMGINFO: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT*ZAIRINFO? */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_NONE) //enquery parameters without enable ENG Mode |
| ret = DEV_GetZAIRInfo(atHandle, 1); |
| else if(*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetZAIRInfo(atHandle, 0); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*ZAIRINFO=*/ |
| case TEL_EXT_TEST_CMD: /* AT*ZAIRINFO=? */ |
| case TEL_EXT_ACTION_CMD: /* AT*ZAIRINFO */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| / * F@: ciZCQI - GLOBAL API for AT*ZCQI-command |
| * |
| */ |
| RETURNCODE_T ciZCQI( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| *xid_p = atHandle; |
| //DBGMSG(ciZCQI, "ciZCQI: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| //close use AT*ZCQI? indication |
| |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT*ZCQI? */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_NONE) //enquery parameters without enable ENG Mode |
| ret = DEV_GetZCQI(atHandle, 1); |
| else if(*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetZCQI(atHandle, 0); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*ZCQI= */ |
| case TEL_EXT_TEST_CMD: /* AT*ZCQI=? */ |
| case TEL_EXT_ACTION_CMD: /* AT*ZCQI */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| |
| RETURNCODE_T ciZFactoryReset( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciTEMPTEST, "ciZFactoryReset: atHandle = %d.\n", atHandle); |
| |
| switch ( op ) { |
| case TEL_EXT_TEST_CMD: /* AT*ZFACTORY=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*ciZFactoryReset"); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*ZFACTORY= */ |
| case TEL_EXT_GET_CMD: /* AT*ZFACTORY? */ |
| case TEL_EXT_ACTION_CMD: /* AT*ZFACTORY */ |
| { |
| ASR_flag tag; |
| int rs = get_asr_flag(&tag); |
| if(rs < 0) |
| { |
| WARNMSG(ciZFactoryReset, "read asr flag error\n"); |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_ERROR,CME_UNKNOWN,NULL); |
| } |
| else |
| { |
| tag.Production_Mode_Flag = 0; |
| |
| tag.ramdump[0] = RAMDUMPID; |
| tag.ramdump[1] = 0; |
| tag.cplog[0] = CPLOGID; |
| tag.cplog[1] = 0; |
| #ifdef CONFIG_EEH_FORCE_SILENT_RESET |
| tag.eehP[0] = EEHPID; |
| tag.eehP[1] = 0; |
| #endif |
| rs = write_asr_flag(&tag); |
| if (rs < 0) { |
| WARNMSG(ciZFactoryReset1, "write asr flag error\n"); |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_ERROR,CME_UNKNOWN,NULL); |
| } else { |
| //DBGMSG(ciZFactoryReset2, "DEV_SetZFactoryReq\n"); |
| ret = DEV_SetZFactoryReq(atHandle); |
| } |
| } |
| break; |
| } |
| default: |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #endif |
| |
| /************************************************************************************ |
| / * F@: ciSINR - GLOBAL API for AT*SINR-command |
| * |
| */ |
| RETURNCODE_T ciSINR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciSINR, "ciSINR: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*SINR */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetSinrReq(atHandle); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| / * F@: ciRSSI - GLOBAL API for AT*RSSI-command |
| * |
| */ |
| RETURNCODE_T ciRSSI( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciRSSI, "ciRSSI: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*RSSI */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetRssiReq(atHandle); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| / * F@: ciRSRP - GLOBAL API for AT*RSRP-command |
| * |
| */ |
| RETURNCODE_T ciRSRP( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciRSRP, "ciRSRP: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*RSRP */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetRsrpReq(atHandle); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| / * F@: ciRSRPP - GLOBAL API for AT*RSRPP-command |
| * |
| */ |
| RETURNCODE_T ciRSRPP( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciRSRPP, "ciRSRPP: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*RSRPP */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetRsrpPReq(atHandle); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| / * F@: ciRSRPS - GLOBAL API for AT*RSRPS-command |
| * |
| */ |
| RETURNCODE_T ciRSRPS( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciRSRPS, "ciRSRPS: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*RSRPS */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetRsrpSReq(atHandle); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| / * F@: ciRSRQ - GLOBAL API for AT*RSRQ-command |
| * |
| */ |
| RETURNCODE_T ciRSRQ( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciRSRQ, "ciRSRQ: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*RSRQ */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetRsrqReq(atHandle); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| / * F@: ciRSRQP - GLOBAL API for AT*RSRQP-command |
| * |
| */ |
| RETURNCODE_T ciRSRQP( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciRSRQP, "ciRSRQP: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*RSRQP */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetRsrqPReq(atHandle); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| / * F@: ciRSRQS - GLOBAL API for AT*RSRQS-command |
| * |
| */ |
| RETURNCODE_T ciRSRQS( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciRSRQS, "ciRSRQS: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*RSRQS */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetRsrqSReq(atHandle); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| / * F@: ciCQI - GLOBAL API for AT*CQI-command |
| * |
| */ |
| RETURNCODE_T ciCQI( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiDevEngModeReportOption *pEngModeRepOpt; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| pEngModeRepOpt = &gEngModeRepOpt; |
| } else { |
| pEngModeRepOpt = &gEngModeRepOpt_1; |
| } |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciCQI, "ciCQI: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*CQI */ |
| { |
| if (*pEngModeRepOpt == CI_DEV_EM_OPTION_REQUEST) |
| ret = DEV_GetCqiReq(atHandle); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_ALLOWED, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #define TEL_AT_LPNWUL_1_LEN_VAL_MIN 0 |
| #define TEL_AT_LPNWUL_1_LEN_VAL_MAX 2000 |
| #define TEL_AT_LPNWUL_1_LEN_VAL_DEFAULT 480 |
| #define TEL_AT_LPNWUL_2_COUNT_VAL_MIN 0 |
| #define TEL_AT_LPNWUL_2_COUNT_VAL_MAX 20 |
| #define TEL_AT_LPNWUL_2_COUNT_VAL_DEFAULT 0 |
| #define TEL_AT_LPNWUL_3_TYPE_VAL_MIN 0 |
| #define TEL_AT_LPNWUL_3_TYPE_VAL_MAX 4 |
| #define TEL_AT_LPNWUL_3_TYPE_VAL_DEFAULT 0 |
| #define TEL_AT_LPNWUL_4_FINAL_VAL_MIN 0 |
| #define TEL_AT_LPNWUL_4_FINAL_VAL_MAX 1 |
| #define TEL_AT_LPNWUL_4_FINAL_VAL_DEFAULT 0 |
| #define TEL_AT_LPNWUL_6_ADDINFOLEN_VAL_MIN 0 |
| #define TEL_AT_LPNWUL_6_ADDINFOLEN_VAL_MAX CI_DEV_MAX_ADD_INFO_LEN |
| #define TEL_AT_LPNWUL_6_ADDINFOLEN_VAL_DEFAULT 0 |
| |
| |
| /************************************************************************************ |
| / * F@: ciLPNWUL - GLOBAL API for AT+LPNWUL-command |
| * |
| */ |
| RETURNCODE_T ciLPNWUL( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciLPNWUL, "ciLPNWUL: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT+LPNWUL=*/ |
| { |
| CHAR msg_data[AT_CMD_MAX_AGPS_MSG_SIZE*2 + 2]; |
| INT16 len; |
| INT32 msg_data_len; |
| INT32 count; |
| INT32 bearer_type; |
| INT32 isFinalRsp; |
| BOOL cmdValid = FALSE; |
| UINT8 add_info[CI_DEV_MAX_ADD_INFO_LEN*2 + 2]; |
| INT32 add_info_len = 0; |
| |
| memset(add_info, 0, sizeof(add_info)); |
| |
| if(getExtString(parameter_values_p, 0, msg_data, AT_CMD_MAX_AGPS_MSG_SIZE*2 + 1, &len, NULL) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 1, &msg_data_len, TEL_AT_LPNWUL_1_LEN_VAL_MIN, TEL_AT_LPNWUL_1_LEN_VAL_MAX, TEL_AT_LPNWUL_1_LEN_VAL_DEFAULT) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 2, &count, TEL_AT_LPNWUL_2_COUNT_VAL_MIN, TEL_AT_LPNWUL_2_COUNT_VAL_MAX, TEL_AT_LPNWUL_2_COUNT_VAL_DEFAULT) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 3, &bearer_type, TEL_AT_LPNWUL_3_TYPE_VAL_MIN, TEL_AT_LPNWUL_3_TYPE_VAL_MAX, TEL_AT_LPNWUL_3_TYPE_VAL_DEFAULT) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 4, &isFinalRsp, TEL_AT_LPNWUL_4_FINAL_VAL_MIN, TEL_AT_LPNWUL_4_FINAL_VAL_MAX, TEL_AT_LPNWUL_4_FINAL_VAL_DEFAULT) == TRUE) |
| { |
| cmdValid = TRUE; |
| if(getExtString(parameter_values_p, 5, (CHAR *)add_info, CI_DEV_MAX_ADD_INFO_LEN*2 + 1, &len, NULL) == TRUE) |
| { |
| //DBGMSG(ciLPNWUL1, "ciLPNWUL: add_info:%s\n", add_info); |
| } |
| if(getExtValue( parameter_values_p, 6, &add_info_len, TEL_AT_LPNWUL_6_ADDINFOLEN_VAL_MIN, TEL_AT_LPNWUL_6_ADDINFOLEN_VAL_MAX, TEL_AT_LPNWUL_6_ADDINFOLEN_VAL_DEFAULT) == TRUE) |
| { |
| //DBGMSG(ciLPNWUL2, "ciLPNWUL: add_info_len:%d\n", add_info_len); |
| } |
| /* set to CI_DEV_PRIM_LP_NWUL_MSG_REQ*/ |
| ret = DEV_setLPNWUL(atHandle, (UINT8 *)msg_data, msg_data_len, count, bearer_type, isFinalRsp, add_info, (UINT32) add_info_len); |
| } |
| } |
| } |
| } |
| } |
| if(!cmdValid) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| case TEL_EXT_TEST_CMD: /* AT+LPNWUL=? */ |
| case TEL_EXT_GET_CMD: /* AT+LPNWUL? */ |
| case TEL_EXT_ACTION_CMD: /* AT+LPNWUL */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciLPECID - GLOBAL API for GCF AT+LPECID command |
| * |
| ************************************************************************************/ |
| RETURNCODE_T ciLPECID( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciLPECID, "ciLPECID: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT+LPECID */ |
| { |
| ret = DEV_GetLPECID(atHandle); |
| |
| break; |
| } |
| |
| case TEL_EXT_TEST_CMD: /* AT+LPECID =? */ |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+LPECID\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT+LPECID? */ |
| case TEL_EXT_SET_CMD: /* AT+LPECID = */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #define TEL_AT_LPOTDOAREQ_LEN_VAL_MIN 0 |
| #define TEL_AT_LPOTDOAREQ_LEN_VAL_MAX 4096 |
| #define TEL_AT_LPOTDOAREQ_LEN_VAL_DEFAULT 2660 |
| #define TEL_AT_LPOTDOAREQ_COUNT_VAL_MIN 0 |
| #define TEL_AT_LPOTDOAREQ_COUNT_VAL_MAX 6 |
| #define TEL_AT_LPOTDOAREQ_COUNT_VAL_DEFAULT 0 |
| |
| /************************************************************************************ |
| + * F@: ciLPECID - GLOBAL API for GCF AT+ciLPOTDOAREQ command |
| + * |
| + ************************************************************************************/ |
| RETURNCODE_T ciLPOTDOAREQ( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciLPOTDOAREQ, "ciLPOTDOAREQ: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT+LPOTDOAREQ = */ |
| { |
| CHAR msg_data[(AT_CMD_MAX_AGPS_MSG_SIZE<<1) + 2]; |
| //CHAR msg_data[(sizeof(CiDevPrimLpOtdoaMeasReq)*2) + 2]; |
| INT32 len, msg_data_len; |
| INT32 count; |
| BOOL cmdValid = FALSE; |
| |
| if(getExtString(parameter_values_p, 0, msg_data, AT_CMD_MAX_AGPS_MSG_SIZE<<1, (INT16 *)&len, NULL) == TRUE) |
| //if(getExtString(parameter_values_p, 0, msg_data, (sizeof(CiDevPrimLpOtdoaMeasReq)*2) + 1, (INT16 *)&len, NULL) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 1, &msg_data_len, TEL_AT_LPOTDOAREQ_LEN_VAL_MIN, TEL_AT_LPOTDOAREQ_LEN_VAL_MAX, TEL_AT_LPOTDOAREQ_LEN_VAL_DEFAULT) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 2, &count, TEL_AT_LPOTDOAREQ_COUNT_VAL_MIN, TEL_AT_LPOTDOAREQ_COUNT_VAL_MAX, TEL_AT_LPOTDOAREQ_COUNT_VAL_DEFAULT) == TRUE) |
| { |
| cmdValid = TRUE; |
| //DBGMSG(ciLPOTDOAREQ1, "ciLPOTDOAREQ: msg_data_len:%d, count: %d\n", msg_data_len, count); |
| //DBGMSG(ciLPOTDOAREQ2, "ciLPOTDOAREQ: msg_data:%s\n", msg_data); |
| /* set to CI_DEV_PRIM_LP_OTDOA_MEAS_REQ*/ |
| ret = DEV_GetLPOtdoaReq(atHandle, (UINT8 *)msg_data, msg_data_len,count); |
| } |
| } |
| } |
| if(!cmdValid) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| case TEL_EXT_TEST_CMD: /* AT+LPOTDOAREQ =? */ |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+LPOTDOAREQ\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT+LPOTDOAREQ */ |
| case TEL_EXT_GET_CMD: /* AT+LPOTDOAREQ? */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciLPECID - GLOBAL API for GCF AT+ciLPOTDOAABORT command |
| * |
| ************************************************************************************/ |
| RETURNCODE_T ciLPOTDOAABORT( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciLPOTDOAABORT, "ciLPOTDOAABORT: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT+LPOTDOAABORT */ |
| { |
| ret = DEV_SetLPOtdoaAbort(atHandle); |
| |
| break; |
| } |
| |
| case TEL_EXT_TEST_CMD: /* AT+LPOTDOAABORT =? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+LPOTDOAABORT\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT+LPOTDOAABORT? */ |
| case TEL_EXT_SET_CMD: /* AT+LPOTDOAABORT = */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciCKPD - GLOBAL API for GCF AT+CKPD command |
| * |
| * only s/S Special Keys supported. (send key) |
| * |
| * */ |
| |
| RETURNCODE_T ciCKPD(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| int time = 0, pause = 0; |
| INT16 key_string_len = 0; |
| CHAR key_string[TEL_AT_CKPD_LENGTH_KEY_STRING + ATCI_NULL_TERMINATOR_LENGTH]; |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciCKPD, "ciCKPD: atHandle = %d.\n", atHandle); |
| |
| /* Check the format of the request. */ |
| switch (op) |
| { |
| case TEL_EXT_TEST_CMD: /* AT+CKPD=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+CKPD: <keys>[,<time>[,<pause>]]\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT+CKPD */ |
| { |
| if (getExtString(parameter_values_p, 0, key_string, TEL_AT_CKPD_LENGTH_KEY_STRING + ATCI_NULL_TERMINATOR_LENGTH, &key_string_len, NULL) == TRUE) |
| { |
| if (getExtValue(parameter_values_p, 1, &time, TEL_AT_CKPD_1_VAL_MIN, TEL_AT_CKPD_1_VAL_MAX, TEL_AT_CKPD_1_VAL_DEFAULT) == TRUE) |
| { |
| if (getExtValue(parameter_values_p, 2, &pause, TEL_AT_CKPD_2_VAL_MIN, TEL_AT_CKPD_2_VAL_MAX, TEL_AT_CKPD_2_VAL_DEFAULT) == TRUE) |
| { |
| if ((key_string_len > 0 ) && ( (key_string[key_string_len-1]=='s') || (key_string[key_string_len-1]=='S')) ) |
| { |
| key_string[key_string_len-1] = '\0'; |
| ret = CC_Dial(atHandle, (CHAR *)key_string, CICC_BASIC_CMODE_VOICE, CICC_CALLOPTIONS_NONE); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| } |
| } |
| break; |
| } |
| |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| /* SV */ |
| /************************************************************************************ |
| * F@: ciStarCGSN - GLOBAL API for AT*CGSN command |
| * |
| */ |
| |
| RETURNCODE_T ciStarCGSN( |
| const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciStarCGSN, "ciStarCGSN: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT*CGSN? */ |
| { |
| ret = DEV_GetSoftwareVersionNumber(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_TEST_CMD: /* AT*CGSN=? */ |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*CGSN: <sv>\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*CGSN= */ |
| { |
| char sv[3]; |
| INT16 len; |
| if(getExtString(parameter_values_p, 0, (CHAR *)sv, 2, &len, NULL) == TRUE) |
| { |
| if(len != 2) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| else |
| { |
| ret = DEV_SetSoftwareVersionNumber(atHandle, sv); |
| } |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT*CGSN */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciStarMODEMTYPE - GLOBAL API for AT*MODEMTYPE -command |
| * |
| */ |
| RETURNCODE_T ciStarMODEMTYPE( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciStarMODEMTYPE, "ciStarMODEMTYPE: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT*MODEMTYPE? */ |
| { |
| int modem_type; |
| unsigned long chipid; |
| char buf[100]; |
| |
| if (get_chipid(&chipid) > 0) |
| { |
| //DBGMSG(ciStarMODEMTYPE1, "ciStarMODEMTYPE: chip id = 0x%x.\n", chipid); |
| switch (chipid & MODEM_FLAG_MASK) |
| { |
| case PXA910_MODEM_FLAG: |
| modem_type = PXA910_MODEM; |
| break; |
| case PXA920_MODEM_FLAG: |
| modem_type = PXA920_MODEM; |
| break; |
| default: |
| modem_type = UNKNOWN_MODEM; |
| break; |
| } |
| |
| sprintf(buf, "*MODEMTYPE: %d\r\n", modem_type); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, buf); |
| } |
| else |
| { |
| WARNMSG(ciStarMODEMTYPE2, "ciStarMODEMTYPE: Can not get chip id.\n"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT*MODEMTYPE */ |
| case TEL_EXT_TEST_CMD: /* AT*MODEMTYPE=? */ |
| case TEL_EXT_SET_CMD: /* AT*MODEMTYPE= */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| /************************************************************************************ |
| * F@: ciStarHTCCTO - GLOBAL API for AT*HTCCTO -command |
| * |
| */ |
| RETURNCODE_T ciStarHTCCTO( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciStarHTCCTO, "ciStarHTCCTO: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*HTCCTO= */ |
| { |
| CHAR commandName[utlAT_MAX_COMMAND_LENGTH_WITH_PREFIX]; |
| INT16 len; |
| int mode, timeout; |
| BOOL cmdValid = FALSE; |
| if(getExtString(parameter_values_p, 0, commandName, utlAT_MAX_COMMAND_LENGTH_WITH_PREFIX - 1, &len, NULL) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 1, &mode, TEL_AT_HTCCTO_2_MODE_VAL_MIN, TEL_AT_HTCCTO_2_MODE_VAL_MAX, TEL_AT_HTCCTO_2_MODE_VAL_DEFAULT) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 2, &timeout, 0, 65536, 0) == TRUE) |
| { |
| cmdValid = TRUE; |
| } |
| } |
| } |
| if(cmdValid == TRUE) |
| { |
| if(utlAtCommandTimeoutModify((char *)commandName, mode, timeout)) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT*HTCCTO */ |
| case TEL_EXT_TEST_CMD: /* AT*HTCCTO=? */ |
| case TEL_EXT_GET_CMD: /* AT*HTCCTO? */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciStarSWITCHMODEM - GLOBAL API for AT*SWITCHMODEM -command |
| * |
| */ |
| RETURNCODE_T ciStarSWITCHMODEM( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| #if 0 |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| int type = 0, old_type = 0, size = 0; |
| unsigned int cp_type = 0, switch_cp_type = 0; |
| |
| *xid_p = atHandle; |
| |
| //DBGMSG(ciStarSWITCHMODEM, "ciStarSWITCHMODEM: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*SWITCHMODEM= */ |
| { |
| if(getExtValue( parameter_values_p, 0, &type, 3, 4, 3) == TRUE) |
| { |
| if((type != atoi(LWG_CP)) && (type != atoi(LTG_CP))) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| { |
| cp_type = get_cp_type(); |
| |
| if((cp_type == LWG_3MODE)||(cp_type == LTG_3MODE)) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| { |
| if(cp_type == LWG_5MODE) |
| { |
| old_type = atoi(LWG_CP); |
| switch_cp_type = LTG_5MODE; |
| } |
| else if(cp_type == LTG_5MODE) |
| { |
| old_type = atoi(LTG_CP); |
| switch_cp_type = LWG_5MODE; |
| } |
| else |
| { |
| old_type = 0; |
| } |
| |
| /* the cp wanna switched to is exist */ |
| if ((old_type != type) && (old_type != 0)) |
| { |
| /* Modem mode changed, save the new value and reset Modem */ |
| if(!save_cp_type(switch_cp_type)) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_SUPPRESS, 0, NULL); |
| if(cp_silent_reset_on_req("Switch Modem", 1) != 0) |
| { |
| /* Swtch failed, restore modem type */ |
| if(save_cp_type(cp_type)) |
| { |
| WARNMSG(ciStarSWITCHMODEM2, "Fail to restore old modem type 0x%x", cp_type); |
| } |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_NULL, 0, "OK"); |
| } |
| } |
| else |
| { |
| WARNMSG(ciStarSWITCHMODEM3, "save_cp_type error\n"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); |
| } |
| } |
| else /* Already in this Mode, return success*/ |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| } |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*SWITCHMODEM?*/ |
| { |
| int cp_prop = 0; |
| char buf[100] = {0}; |
| |
| cp_type = get_cp_type(); |
| switch(cp_type) |
| { |
| case LWG_3MODE: |
| case LWG_5MODE: |
| { |
| cp_prop = atoi(LWG_CP); |
| break; |
| } |
| |
| case LTG_3MODE: |
| case LTG_5MODE: |
| { |
| cp_prop = atoi(LTG_CP); |
| break; |
| } |
| |
| default: |
| { |
| cp_prop = 0; |
| break; |
| } |
| } |
| |
| if ((cp_prop != atoi(LWG_CP)) && (cp_prop != atoi(LTG_CP))) |
| { |
| WARNMSG(ciStarSWITCHMODEM3, "Wrong current cp type\n"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); |
| } |
| else |
| { |
| sprintf(buf, "*SWITCHMODEM: %d\r\n", cp_prop); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, buf); |
| } |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT*SWITCHMODEM */ |
| case TEL_EXT_TEST_CMD: /* AT*SWITCHMODEM=? */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| #endif |
| return 0; |
| } |
| |
| /************************************************************************************ |
| * F@: ciStarMODEMRESET - GLOBAL API for AT*MODEMRESET -command |
| * |
| */ |
| RETURNCODE_T ciStarMODEMRESET( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciStarMODEMRESET, "ciStarMODEMRESET: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*MODEMRESET= */ |
| { |
| char buf[512]; |
| INT16 len; |
| int force; |
| if(getExtString(parameter_values_p, 0, (CHAR *)buf, sizeof(buf) - 1, &len, NULL) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 1, &force, 0, 1, 0) == TRUE) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_SUPPRESS, 0, NULL); |
| if(cp_silent_reset_on_req(buf, force) != 0) |
| { |
| WARNMSG(ciStarMODEMRESET1, "cp silent reset req error\n"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_NULL, 0, "OK"); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT*MODEMRESET */ |
| case TEL_EXT_TEST_CMD: /* AT*MODEMRESET=? */ |
| case TEL_EXT_GET_CMD: /* AT*MODEMRESET?*/ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciStarEHSDPA - GLOBAL API for AT*EHSDPA -command |
| * |
| */ |
| RETURNCODE_T ciStarEHSDPA( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| NumericRange hspaConfig_TD[] = {{0, 3}}; |
| NumericRange dlCategory_TD[] = {{1, 11}, {13, 16}, {23, 23}, {35, 35}}; |
| NumericRange ulCategory_TD[] = {{6, 6}}; |
| NumericRange cpcState_TD[] = {{0, 0}}; |
| NumericRange dpaCategoryExt_TD[] = {{0, 0}}; |
| NumericRange edchCategoryExt_TD[] = {{0, 0}}; |
| NumericRange fdpchState_TD[] = {{0, 0}}; |
| NumericRange efdpchState_TD[] = {{0, 0}}; |
| NumericRange efachState_TD[] = {{0, 0}}; |
| |
| NumericRange hspaConfig_UMTS[] = {{0,2}, {4,4}}; |
| NumericRange dlCategory_UMTS[] = {{1, 12}}; |
| NumericRange ulCategory_UMTS[] = {{1, 6}}; |
| NumericRange cpcState_UMTS[] = {{0, 1}}; |
| NumericRange dpaCategoryExt_UMTS[] = {{1, 14}}; |
| NumericRange edchCategoryExt_UMTS[] = {{7, 7}}; |
| NumericRange fdpchState_UMTS[] = {{0, 1}}; |
| NumericRange efdpchState_UMTS[] = {{0, 1}}; |
| NumericRange efachState_UMTS[] = {{0, 1}}; |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciStarEHSDPA, "%s: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*EHSDPA= */ |
| { |
| int mode, dl_category, ul_category, cpc_state, dpaCategoryExt, edchCategoryExt, fdpchState, efdpchState, efachState; |
| BOOL cmdValid = FALSE; |
| if(Is_TD_mode()) |
| { |
| if(getExtValue( parameter_values_p, 0, &mode, 0, INT_MAX, TEL_AT_EHSDPA_0_MODE_VAL_DEFAULT) == TRUE |
| && IsInValidRange(mode, hspaConfig_TD, sizeof(hspaConfig_TD) / sizeof(hspaConfig_TD[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 1, &dl_category, 0, INT_MAX, TEL_AT_EHSDPA_1_DL_CATEGORY_VAL_DEFAULT_TD) == TRUE |
| && IsInValidRange(dl_category, dlCategory_TD, sizeof(dlCategory_TD) / sizeof(dlCategory_TD[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 2, &ul_category, 0, INT_MAX, TEL_AT_EHSDPA_2_UL_CATEGORY_VAL_DEFAULT_TD) == TRUE |
| && IsInValidRange(ul_category, ulCategory_TD, sizeof(ulCategory_TD) / sizeof(ulCategory_TD[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 3, &cpc_state, 0, INT_MAX, TEL_AT_EHSDPA_3_CPC_STATE_VAL_DEFAULT_TD) == TRUE |
| && IsInValidRange(cpc_state, cpcState_TD, sizeof(cpcState_TD) / sizeof(cpcState_TD[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 4, &dpaCategoryExt, 0, INT_MAX, TEL_AT_EHSDPA_4_DPA_CATEGORY_EXT_DEFAULT_TD) == TRUE |
| && IsInValidRange(dpaCategoryExt, dpaCategoryExt_TD, sizeof(dpaCategoryExt_TD) / sizeof(dpaCategoryExt_TD[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 5, &edchCategoryExt, 0, INT_MAX, TEL_AT_EHSDPA_5_EDCH_CATEGORY_EXT_DEFAULT_TD) == TRUE |
| && IsInValidRange(edchCategoryExt, edchCategoryExt_TD, sizeof(edchCategoryExt_TD) / sizeof(edchCategoryExt_TD[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 6, &fdpchState, 0, INT_MAX, TEL_AT_EHSDPA_6_FDPCH_STATE_DEFAULT_TD) == TRUE |
| && IsInValidRange(fdpchState, fdpchState_TD, sizeof(fdpchState_TD) / sizeof(fdpchState_TD[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 7, &efdpchState, 0, INT_MAX, TEL_AT_EHSDPA_7_EFDPCH_STATE_DEFAULT_TD) == TRUE |
| && IsInValidRange(efdpchState, efdpchState_TD, sizeof(efdpchState_TD) / sizeof(efdpchState_TD[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 7, &efachState, 0, INT_MAX, TEL_AT_EHSDPA_8_EFACH_STATE_DEFAULT_TD) == TRUE |
| && IsInValidRange(efachState, efachState_TD, sizeof(efachState_TD) / sizeof(efachState_TD[0])) == TRUE) |
| { |
| cmdValid = TRUE; |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| else |
| { |
| if(getExtValue( parameter_values_p, 0, &mode, 0, INT_MAX, TEL_AT_EHSDPA_0_MODE_VAL_DEFAULT) == TRUE |
| && IsInValidRange(mode, hspaConfig_UMTS, sizeof(hspaConfig_UMTS) / sizeof(hspaConfig_UMTS[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 1, &dl_category, 0, INT_MAX, TEL_AT_EHSDPA_1_DL_CATEGORY_VAL_DEFAULT_UMTS) == TRUE |
| && IsInValidRange(dl_category, dlCategory_UMTS, sizeof(dlCategory_UMTS) / sizeof(dlCategory_UMTS[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 2, &ul_category, 0, INT_MAX, TEL_AT_EHSDPA_2_UL_CATEGORY_VAL_DEFAULT_UMTS) == TRUE |
| && IsInValidRange(ul_category, ulCategory_UMTS, sizeof(ulCategory_UMTS) / sizeof(ulCategory_UMTS[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 3, &cpc_state, 0, INT_MAX, TEL_AT_EHSDPA_3_CPC_STATE_VAL_DEFAULT_UMTS) == TRUE |
| && IsInValidRange(cpc_state, cpcState_UMTS, sizeof(cpcState_UMTS) / sizeof(cpcState_UMTS[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 4, &dpaCategoryExt, 0, INT_MAX, TEL_AT_EHSDPA_4_DPA_CATEGORY_EXT_DEFAULT_UMTS) == TRUE |
| && IsInValidRange(dpaCategoryExt, dpaCategoryExt_UMTS, sizeof(dpaCategoryExt_UMTS) / sizeof(dpaCategoryExt_UMTS[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 5, &edchCategoryExt, 0, INT_MAX, TEL_AT_EHSDPA_5_EDCH_CATEGORY_EXT_DEFAULT_UMTS) == TRUE |
| && IsInValidRange(edchCategoryExt, edchCategoryExt_UMTS, sizeof(edchCategoryExt_UMTS) / sizeof(edchCategoryExt_UMTS[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 6, &fdpchState, 0, INT_MAX, TEL_AT_EHSDPA_6_FDPCH_STATE_DEFAULT_UMTS) == TRUE |
| && IsInValidRange(fdpchState, fdpchState_UMTS, sizeof(fdpchState_UMTS) / sizeof(fdpchState_UMTS[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 7, &efdpchState, 0, INT_MAX, TEL_AT_EHSDPA_7_EFDPCH_STATE_DEFAULT_UMTS) == TRUE |
| && IsInValidRange(efdpchState, efdpchState_UMTS, sizeof(efdpchState_UMTS) / sizeof(efdpchState_UMTS[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 7, &efdpchState, 0, INT_MAX, TEL_AT_EHSDPA_7_EFDPCH_STATE_DEFAULT_UMTS) == TRUE |
| && IsInValidRange(efdpchState, efdpchState_UMTS, sizeof(efdpchState_UMTS) / sizeof(efdpchState_UMTS[0])) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 7, &efachState, 0, INT_MAX, TEL_AT_EHSDPA_8_EFACH_STATE_DEFAULT_UMTS) == TRUE |
| && IsInValidRange(efachState, efachState_UMTS, sizeof(efachState_UMTS) / sizeof(efachState_UMTS[0])) == TRUE) |
| { |
| cmdValid = TRUE; |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| if(cmdValid) |
| { |
| ret = DEV_SetHsdpaModeReq(atHandle, (UINT8)mode, (UINT8)dl_category, (UINT8)ul_category, (UINT8)cpc_state, |
| (UINT8)dpaCategoryExt, (UINT8)edchCategoryExt, (UINT8)fdpchState, (UINT8)efdpchState, (UINT8)efachState); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*EHSDPA? */ |
| { |
| ret = DEV_GetHsdpaModeReq(atHandle); |
| break; |
| } |
| case TEL_EXT_TEST_CMD: /* AT*EHSDPA=? */ |
| { |
| if(Is_TD_mode()) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*EHSDPA: (0-3),(1-11,13-16,23,35),(6),(0),(0),(0),(0),(0)"); |
| else //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*EHSDPA: (0-2,4),(1-12),(1-6),(0,1),(1-14),(7),(0,1),(0,1)"); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT*EHSDPA*/ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| #ifdef AT_PRODUCTION_CMNDS |
| |
| /************************************************************************************ |
| * F@: ciTDTR - GLOBAL API for AT*TDTR command |
| * |
| */ |
| RETURNCODE_T ciTDTR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciTDTR, "ciTDTR: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*TDTR=? */ |
| { |
| ATRESP( atHandle, 0, 0, (char *)"*TDTR=<op>[,<gain>,<freq>]"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*TDTR= */ |
| { |
| int option; |
| int txRxGain; |
| char txRxGainStr[TEL_AT_TDTR_TX_RX_GAIN_STR_LEN_MAX + ATCI_NULL_TERMINATOR_LENGTH] = {0}; |
| INT16 txRxGainLen = 0; |
| int freq; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, TEL_AT_TDTR_OPTION_MIN, TEL_AT_TDTR_OPTION_MAX, TEL_AT_TDTR_OPTION_DEFAULT) == TRUE ) |
| { |
| int val_tbl[TEL_AT_TDTR_OPTION_MAX - TEL_AT_TDTR_OPTION_MIN + 1][3] = { |
| {TEL_AT_TDTR_TX_GAIN_MIN, TEL_AT_TDTR_TX_GAIN_MAX, TEL_AT_TDTR_TX_GAIN_DEFAULT}, |
| {TEL_AT_TDTR_RX_GAIN_MIN, TEL_AT_TDTR_RX_GAIN_MAX, TEL_AT_TDTR_RX_GAIN_DEFAULT}, |
| {INT_MIN, INT_MAX, 0} |
| }; |
| |
| if ( getExtString(parameter_values_p, 1, (CHAR *)txRxGainStr, TEL_AT_TDTR_TX_RX_GAIN_STR_LEN_MAX, &txRxGainLen, NULL) == TRUE ) |
| { |
| if(txRxGainLen) |
| txRxGain = atoi(txRxGainStr); |
| else |
| txRxGain = val_tbl[option - TEL_AT_TDTR_OPTION_MIN][2]; |
| |
| if(txRxGain >= val_tbl[option - TEL_AT_TDTR_OPTION_MIN][0] && txRxGain <= val_tbl[option - TEL_AT_TDTR_OPTION_MIN][1]) |
| { |
| if ( getExtValue(parameter_values_p, 2, &freq, TEL_AT_TDTR_FREQ_RANGE1_MIN, TEL_AT_TDTR_FREQ_RANGE2_MAX, TEL_AT_TDTR_FREQ_DEFAULT) == TRUE ) |
| { |
| if(freq > TEL_AT_TDTR_FREQ_RANGE1_MAX && freq < TEL_AT_TDTR_FREQ_RANGE2_MIN) |
| cmdValid = FALSE; |
| else |
| cmdValid = TRUE; |
| } |
| } |
| |
| } |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| ret = DEV_SetTdModeTxRxReq(atHandle, (CiDevTdTxRxOption)option, (INT16)txRxGain, (UINT16)freq); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*TDTR? */ |
| case TEL_EXT_ACTION_CMD: /* AT*TDTR */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| BOOL checkArfcnValue(int gsmBandMode, int arfcn) |
| { |
| /* refer to 3GPP TS 45005 */ |
| BOOL ret = FALSE; |
| if(gsmBandMode & (1 << CI_DEV_PGSM_900)) |
| { |
| ret |= (arfcn >= 1 && arfcn <= 124); |
| } |
| if(gsmBandMode & (1 << CI_DEV_DCS_GSM_1800)) |
| { |
| ret |= (arfcn >= 512 && arfcn < 885); |
| } |
| if(gsmBandMode & (1 << CI_DEV_PCS_GSM_1900)) |
| { |
| ret |= (arfcn >= 512 && arfcn <= 810); |
| } |
| if(gsmBandMode & (1 << CI_DEV_EGSM_900)) |
| { |
| ret |= ((arfcn >= 0 && arfcn <= 124) || (arfcn >= 975 && arfcn <= 1023)); |
| } |
| if(gsmBandMode & (1 << CI_DEV_GSM_450)) |
| { |
| ret |= (arfcn >= 259 && arfcn <= 293); |
| } |
| if(gsmBandMode & (1 << CI_DEV_GSM_480)) |
| { |
| ret |= (arfcn >= 306 && arfcn <= 340); |
| } |
| if(gsmBandMode & (1 << CI_DEV_GSM_850)) |
| { |
| ret |= (arfcn >= 128 && arfcn <= 251); |
| } |
| |
| return ret; |
| } |
| |
| /************************************************************************************ |
| * F@: ciGSMTR - GLOBAL API for AT*GSMTR command |
| * |
| */ |
| RETURNCODE_T ciGSMTR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciGSMTR, "ciGSMTR: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*GSMTR=? */ |
| { |
| ATRESP( atHandle, 0, 0, (char *)"*GSMTR=<op>[,<band>,<arfcn>,<afcDac>[,<txRampScale>,<rxGainCode>]]"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*GSMTR= */ |
| { |
| int option; |
| int gsmBandMode; |
| int arfcn; |
| int afcDac; |
| int txRampScale; |
| int rxGainCode; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, TEL_AT_GSMTR_OPTION_MIN, TEL_AT_GSMTR_OPTION_MAX, TEL_AT_GSMTR_OPTION_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 1, &gsmBandMode, TEL_AT_GSMTR_BAND_MODE_MIN, TEL_AT_GSMTR_BAND_MODE_MAX, TEL_AT_GSMTR_BAND_MODE_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, &arfcn, TEL_AT_GSMTR_ARFCN_MIN, TEL_AT_GSMTR_ARFCN_MAX, TEL_AT_GSMTR_ARFCN_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 3, &afcDac, TEL_AT_GSMTR_AFCDAC_MIN, TEL_AT_GSMTR_AFCDAC_MAX, TEL_AT_GSMTR_AFCDAC_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 4, &txRampScale, TEL_AT_GSMTR_TXRAMP_SCALE_MIN, TEL_AT_GSMTR_TXRAMP_SCALE_MAX, TEL_AT_GSMTR_TXRAMP_SCALE_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 5, &rxGainCode, TEL_AT_GSMTR_RXGAIN_CODE_MIN, TEL_AT_GSMTR_RXGAIN_CODE_MAX, TEL_AT_GSMTR_RXGAIN_CODE_DEFAULT) == TRUE ) |
| { |
| if((option == CI_DEV_GSM_TX_RX_STOP) || checkArfcnValue(gsmBandMode, arfcn)) |
| cmdValid = TRUE; |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| ret = DEV_SetGsmModeTxRxReq(atHandle, (CiDevGsmTxRxOption)option, (UINT8)gsmBandMode, |
| (UINT16)arfcn, (UINT32)afcDac, (UINT32)txRampScale, (UINT32)rxGainCode); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*GSMTR? */ |
| case TEL_EXT_ACTION_CMD: /* AT*GSMTR */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #if defined(ATCMD_UNIFY_CI) || defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) |
| |
| int commtrMode = 0; |
| RETURNCODE_T ciCOMMTR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciCOMMTR, "%s: atHandle = %d.\n", __FUNCTION__, atHandle); |
| |
| switch ( op ) |
| { |
| case TEL_EXT_SET_CMD: /* AT*COMMTR= */ |
| { |
| int mode = 0; |
| int option = 0; |
| int band = 0; |
| char powerStr[8] = {0}; |
| INT16 powerStr_length = 0; |
| int arfcn =0; |
| int slot = 0; |
| int bandwidth=0; |
| int cmdValid = 0; |
| |
| if ( getExtValue(parameter_values_p, 0, &mode, TEL_AT_COMMTR_1_MODE_MIN, TEL_AT_COMMTR_1_MODE_MAX, TEL_AT_COMMTR_1_MODE_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 1, &option, TEL_AT_COMMTR_2_OPTION_MIN, TEL_AT_COMMTR_2_OPTION_MAX, TEL_AT_COMMTR_2_OPTION_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, &band, TEL_AT_COMMTR_3_BAND_MIN, TEL_AT_COMMTR_3_BAND_MAX, TEL_AT_COMMTR_3_BAND_DEFAULT) == TRUE ) |
| { |
| if ( getExtString(parameter_values_p, 3, powerStr, TEL_AT_COMMTR_4_POWER_STR_MAX_LEN, &powerStr_length, TEL_AT_COMMTR_4_POWER_STR_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 4, &arfcn, TEL_AT_COMMTR_5_ARFCN_MIN, TEL_AT_COMMTR_5_ARFCN_MAX, TEL_AT_COMMTR_5_ARFCN_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 5, &bandwidth, TEL_AT_COMMTR_6_BANDWIDTH_MIN, TEL_AT_COMMTR_6_BANDWIDTH_MAX, TEL_AT_COMMTR_6_BANDWIDTH_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 6, &slot, TEL_AT_COMMTR_7_SLOT_MIN, TEL_AT_COMMTR_7_SLOT_MAX, TEL_AT_COMMTR_7_SLOT_DEFAULT) == TRUE ) |
| { |
| DBGMSG(ciCOMMTR1, "ciCOMMTR:mode is %d, option is %d, band is %d, power is %s, arfcn is %d, bandwidth is %d, slot is %d", mode, option, band, powerStr, arfcn, bandwidth, slot); |
| cmdValid = 1; |
| commtrMode = mode; |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| if(cmdValid) |
| { |
| if((mode == CI_DEV_EM_NETWORK_GSM) || (mode == CI_DEV_EM_NETWORK_UMTS) || ((mode == CI_DEV_EM_NETWORK_LTE) && (((band > 0) && (band <= 8)) || (band == 17)|| (band == 20)|| (band == 28) || |
| (band == 34) || ((band >= 38) && (band <= 41)) || (band == 65) || (band == 66) || (band == 68) || ((band >= 70) && (band <= 74)))) |
| #if defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) |
| || (mode == CI_DEV_EM_NETWORK_NR) |
| #endif |
| ) |
| { |
| |
| CiDevPrimSetNstTxRxReq *setNstTxRxReq=NULL; |
| |
| setNstTxRxReq = (CiDevPrimSetNstTxRxReq *)utlCalloc(1, sizeof(CiDevPrimSetNstTxRxReq)); |
| if (setNstTxRxReq == NULL) |
| return CIRC_FAIL; |
| |
| setNstTxRxReq->networkMode = mode; |
| setNstTxRxReq->option = option; |
| setNstTxRxReq->band = band; |
| |
| setNstTxRxReq->power = (INT16)atoi(powerStr); |
| DBGMSG(ciCOMMTR2, "ciCOMMTR: power is %s %d %d", powerStr, atoi(powerStr), setNstTxRxReq->power); |
| |
| setNstTxRxReq->arfcn = arfcn; |
| setNstTxRxReq->bandwidth= bandwidth; |
| setNstTxRxReq->slot = slot; |
| |
| ret = DEV_SetCommTxRxReq(atHandle, setNstTxRxReq); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*COMMTR? */ |
| case TEL_EXT_ACTION_CMD: /* AT*COMMTR */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| #endif |
| |
| /************************************************************************************ |
| * F@: ciTGCTRL - GLOBAL API for AT*TGCTRL command |
| * |
| */ |
| RETURNCODE_T ciTGCTRL( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciTGCTRL, "ciTGCTRL: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*TGCTRL=? */ |
| { |
| ATRESP( atHandle, 0, 0, (char *)"*TGCTRL=<nw>,<op>,<value>[,<addr>]"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*TGCTRL= */ |
| { |
| int network = 0; |
| int mode = 0; |
| int regValue = 0; |
| int addrReg = 0; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue(parameter_values_p, 0, &network, TEL_AT_TGCTRL_NETWORK_MIN, TEL_AT_TGCTRL_NETWORK_MAX, TEL_AT_TGCTRL_NETWORK_DEFAULT) == TRUE ) |
| { |
| int val_tbl[TEL_AT_TGCTRL_NETWORK_MAX-TEL_AT_TGCTRL_NETWORK_MIN+1][3] = { |
| {TEL_AT_TGCTRL_TD_OPTION_MIN, TEL_AT_TGCTRL_TD_OPTION_MAX, TEL_AT_TGCTRL_TD_OPTION_DEFAULT}, |
| {TEL_AT_TGCTRL_GSM_OPTION_MIN, TEL_AT_TGCTRL_GSM_OPTION_MAX, TEL_AT_TGCTRL_GSM_OPTION_DEFAULT}, |
| }; |
| |
| if ( getExtValue(parameter_values_p, 1, &mode, val_tbl[network-TEL_AT_TGCTRL_NETWORK_MIN][0], val_tbl[network-TEL_AT_TGCTRL_NETWORK_MIN][1], val_tbl[network-TEL_AT_TGCTRL_NETWORK_MIN][2]) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, ®Value, INT_MIN, INT_MAX, 0) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 3, &addrReg, TEL_AT_TGCTRL_GSM_REG_ADDR_MIN, TEL_AT_TGCTRL_GSM_REG_ADDR_MAX, TEL_AT_TGCTRL_GSM_REG_ADDR_DEFAULT) == TRUE ) |
| { |
| cmdValid = TRUE; |
| } |
| } |
| } |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| if(network == TEL_AT_TGCTRL_NETWORK_TD) /* TD network */ |
| { |
| ret = DEV_SetTdModeLoopbackReq(atHandle, (UINT32)regValue); |
| } |
| else /* GSM network */ |
| { |
| // CI_DEV_PRIM_SET_GSM_CONTROL_INTERFACE_REQ/CNF is not supported by DigRF |
| // ret = DEV_SetGsmControlInterfaceReq(atHandle, (CiDevGsmControlMode)mode, (UINT16)addrReg, (UINT16)regValue); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*TGCTRL? */ |
| case TEL_EXT_ACTION_CMD: /* AT*TGCTRL */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciGSMTR - GLOBAL API for AT*WBTR command |
| * |
| */ |
| RETURNCODE_T ciWBTR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciWBTR, "ciWBTR: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_SET_CMD: /* AT*WBTR= */ |
| { |
| int option, dlUarfcn, ulUarfcn, paMode, apcDac, afcDac; |
| CHAR afcDacStr[TEL_AT_WBTR_AFC_DAC_STR_MAX_LEN + ATCI_NULL_TERMINATOR_LENGTH]; |
| INT16 afcDacStrLen; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, TEL_AT_WBTR_OPTION_MIN, TEL_AT_WBTR_OPTION_MAX, TEL_AT_WBTR_OPTION_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 1, &dlUarfcn, TEL_AT_WBTR_DL_UARFCN_MIN, TEL_AT_WBTR_DL_UARFCN_MAX, TEL_AT_WBTR_DL_UARFCN_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, &ulUarfcn, TEL_AT_WBTR_UL_UARFCN_MIN, TEL_AT_WBTR_UL_UARFCN_MAX, TEL_AT_WBTR_UL_UARFCN_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 3, &paMode, TEL_AT_WBTR_PA_MODE_MIN, TEL_AT_WBTR_PA_MODE_MAX, TEL_AT_WBTR_PA_MODE_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 4, &apcDac, TEL_AT_WBTR_APC_DAC_MIN, TEL_AT_WBTR_APC_DAC_MAX, TEL_AT_WBTR_APC_DAC_DEFAULT) == TRUE ) |
| { |
| if ( getExtString(parameter_values_p, 5, afcDacStr, TEL_AT_WBTR_AFC_DAC_STR_MAX_LEN, &afcDacStrLen, (CHAR *)TEL_AT_WBTR_AFC_DAC_DEFAULT ) == TRUE ) |
| { |
| afcDac = atoi((char *)afcDacStr); |
| if(afcDac >= TEL_AT_WBTR_AFC_DAC_MIN && afcDac <= TEL_AT_WBTR_AFC_DAC_MAX) |
| { |
| cmdValid = TRUE; |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| ret = DEV_SetWcdmaModeTxRxReq(atHandle, (CiDevGsmTxRxOption)option, (UINT16)dlUarfcn, |
| (UINT16)ulUarfcn, (UINT8)paMode, (UINT16)apcDac, (INT16)afcDac); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| UINT16 EarfcnPro(UINT32 Earfcn) |
| { |
| UINT16 newEarfcn; |
| |
| if((Earfcn >= 65536) && (Earfcn <= 69465)) //band65-band74 DL |
| { |
| //58000 - 61929 |
| newEarfcn = Earfcn - 7536; |
| } |
| else if((Earfcn >= 131072) && (Earfcn <= 132671)) //band65 band66 UL |
| { |
| //58000 - 59599 |
| newEarfcn = Earfcn - 73072; |
| } |
| else if((Earfcn >= 132672) && (Earfcn <= 132971)) //band68 UL |
| { |
| //60000 - 60299 |
| newEarfcn = Earfcn - 72672; |
| } |
| else if((Earfcn >= 132972) && (Earfcn <= 133121)) //band70 UL |
| { |
| //60800 - 60949 |
| newEarfcn = Earfcn - 72172; |
| } |
| else if((Earfcn >= 133122) && (Earfcn <= 134001)) //band71 - band74 |
| { |
| //61050 - 61929 |
| newEarfcn = Earfcn - 72072; |
| } |
| else |
| newEarfcn = Earfcn; |
| |
| return newEarfcn; |
| } |
| |
| |
| |
| UINT8 ltepower_flag=0; |
| UINT8 ltepower_flag_1=0; |
| |
| /************************************************************************************ |
| * F@: ciLTEMaxPower - GLOBAL API for AT+LTEPOWER command |
| * |
| */ |
| RETURNCODE_T ciLTEMaxPower( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| UINT8 *p_ltepower_flag; |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciLTEMaxPower,"%s: atHandle = %d.\n", __FUNCTION__, atHandle); |
| |
| if (!GET_SIM1_FLAG(atHandle)) |
| { |
| p_ltepower_flag = <epower_flag; |
| } |
| else |
| { |
| p_ltepower_flag = <epower_flag_1; |
| } |
| /* |
| * process operation |
| */ |
| /*mischecked by klocwork*/ |
| /*klocwork[Inconsistent Case Labels]*/ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT+LTEPOWER=? */ |
| { |
| ATRESP( atHandle, 0, 0, (char *)"+LTEPOWER=<op>,<channel>,<power>"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT+LTEPOWER= */ |
| { |
| int option=0; |
| int channel=0; |
| int power=0; |
| INT16 txpower = 0; |
| UINT16 freq = 19500; |
| |
| //only support TX in AT+LTEPOWER |
| if ( getExtValue(parameter_values_p, 0, &option, TEL_AT_LTEPOWER_OPTION_MIN, TEL_AT_LTEPOWER_OPTION_MIN, TEL_AT_LTEPOWER_OPTION_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 1, &channel, TEL_AT_LTEPOWER_CHANNEL_MIN, TEL_AT_LTEPOWER_CHANNEL_MAX, TEL_AT_LTEPOWER_CHANNEL_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, &power, TEL_AT_LTEPOWER_POWER_MIN, TEL_AT_LTEPOWER_POWER_MAX, TEL_AT_LTEPOWER_POWER_DEFAULT) == TRUE ) |
| { |
| if(option == 1) |
| { |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_OK,0,(char*)"NG"); |
| break; |
| } |
| |
| if(((power == 0) || (power == 1) || (power == 9)) && (((channel > 0) && (channel <= 8)) || (channel == 17)|| (channel == 20)|| (channel == 28) || |
| (channel == 34) || ((channel >= 38) && (channel <= 41)) || (channel == 65) || (channel == 66) || (channel == 68) || ((channel >= 70) && (channel <= 74)))) |
| { |
| |
| if((option == 0) && (channel == 1) && (power == 9)) //turn off TX |
| { |
| *p_ltepower_flag=1; |
| ret = DEV_SetLTEModeTxRxReq(atHandle, 2, 0, 0, 0); |
| } |
| else |
| { |
| if(power == 0) //maxpower |
| txpower = 1900; |
| else //10dBm |
| txpower = 1700; |
| |
| switch(channel) |
| { |
| |
| case 1: |
| freq = 18300; |
| break; |
| |
| case 2: |
| freq = 18900; |
| break; |
| |
| case 3: |
| freq = 19500; |
| break; |
| |
| case 4: |
| freq = 20175; |
| break; |
| |
| case 5: |
| freq = 20525; |
| break; |
| |
| case 6: |
| freq = 20700; |
| break; |
| |
| case 7: |
| freq = 21100; |
| break; |
| |
| case 8: |
| freq = 21625; |
| break; |
| |
| case 17: |
| freq = 23790; |
| break; |
| |
| case 20: |
| freq = 24300; |
| break; |
| |
| case 28: |
| freq = 27435; |
| break; |
| case 34: |
| freq = 36275; |
| break; |
| case 38: |
| freq = 38000; |
| break; |
| case 39: |
| freq = 38450; |
| break; |
| case 40: |
| freq = 39150; |
| break; |
| |
| case 41: |
| freq = 40620; |
| break; |
| |
| case 65: |
| freq = EarfcnPro(131522); |
| break; |
| |
| case 66: |
| freq = EarfcnPro(132322); |
| break; |
| |
| case 68: |
| freq = EarfcnPro(132822); |
| break; |
| |
| case 70: |
| freq = EarfcnPro(133046); |
| break; |
| |
| case 71: |
| freq = EarfcnPro(133296); |
| break; |
| |
| case 72: |
| freq = EarfcnPro(133496); |
| break; |
| |
| case 73: |
| freq = EarfcnPro(133546); |
| break; |
| |
| case 74: |
| freq = EarfcnPro(133786); |
| break; |
| } |
| *p_ltepower_flag=1; |
| |
| ret = DEV_SetLTEModeTxRxReq(atHandle, option, freq, txpower,0); |
| } |
| } |
| else |
| { |
| |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_OK,0,(char*)"NG"); |
| } |
| } |
| else |
| { |
| |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_OK,0,(char*)"NG"); |
| } |
| } |
| else |
| { |
| |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_OK,0,(char*)"NG"); |
| } |
| } |
| else |
| { |
| //DBGMSG(ciLTEMaxPower,"%s: ltemaxpower error.\n", __FUNCTION__); |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_OK,0,(char*)"NG"); |
| } |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT+LTEPOWER? */ |
| case TEL_EXT_ACTION_CMD: /* AT+LTEPOWER */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| RETURNCODE_T ciLTETR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| UINT8 *p_ltepower_flag; |
| *xid_p = atHandle; |
| //DBGMSG(ciLTETR,"%s: atHandle = %d.\n", __FUNCTION__, atHandle); |
| if (!GET_SIM1_FLAG(atHandle)) |
| { |
| p_ltepower_flag = <epower_flag; |
| } |
| else |
| { |
| p_ltepower_flag = <epower_flag_1; |
| } |
| *xid_p = atHandle; |
| //DBGMSG(ciLTETR,"%s: atHandle = %d.\n", __FUNCTION__, atHandle); |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*LTETR=? */ |
| { |
| ATRESP( atHandle, 0, 0, (char *)"*LTETR=<op>,<channel>,<power>,<bandwidth>"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*LTETR= */ |
| { |
| int option=0; |
| int channel=0; |
| int power=0; |
| int rxpower_target =0; |
| INT16 txpower = 0; |
| UINT16 freq = 19500; |
| int bandwidth=0; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, TEL_AT_LTEPOWER_OPTION_MIN, TEL_AT_LTEPOWER_OPTION_MAX, TEL_AT_LTEPOWER_OPTION_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 1, &channel, TEL_AT_LTEPOWER_CHANNEL_MIN, TEL_AT_LTEPOWER_CHANNEL_MAX, TEL_AT_LTEPOWER_CHANNEL_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, &power, TEL_AT_LTEPOWER_POWER_MIN, TEL_AT_LTEPOWER_POWER_MAX, TEL_AT_LTEPOWER_POWER_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 3, &bandwidth, TEL_AT_LTEPOWER_BANDWIDTH_MIN, TEL_AT_LTEPOWER_BANDWIDTH_MAX, TEL_AT_LTEPOWER_BANDWIDTH_DEFAULT) == TRUE ) |
| { |
| if(((power == 0) || (power == 1) || (power == 9)) && (((channel > 0) && (channel <= 8)) || (channel == 17)|| (channel == 20)|| (channel == 28) || |
| (channel == 34) || ((channel >= 38) && (channel <= 41)) || (channel == 65) || (channel == 66) || (channel == 68) || ((channel >= 70) && (channel <= 74)))) |
| { |
| |
| //DBGMSG(ciLTETR,"ciLTETR:option is %d, channel is %d, power is %d, bandwidth is %d", option,channel, power,bandwidth); |
| if((option == 0) && (channel == 1) && (power == 9)) //turn off TX or RX |
| { |
| *p_ltepower_flag=1; |
| ret = DEV_SetLTEModeTxRxReq(atHandle, 2, 0, 0, 0); |
| } |
| else if (option == 0) //start TX test |
| { |
| if(power == 0) //maxpower |
| txpower = 1900; |
| else //10dBm |
| txpower = 1700; |
| switch(channel) |
| { |
| case 1: |
| freq = 18300; |
| break; |
| case 2: |
| freq = 18900; |
| break; |
| case 3: |
| freq = 19500; |
| break; |
| case 4: |
| freq = 20175; |
| break; |
| case 5: |
| freq = 20525; |
| break; |
| case 6: |
| freq = 20700; |
| break; |
| case 7: |
| freq = 21100; |
| break; |
| case 8: |
| freq = 21625; |
| break; |
| case 17: |
| freq = 23790; |
| break; |
| case 20: |
| freq = 24300; |
| break; |
| case 28: |
| freq = 27435; |
| break; |
| case 34: |
| freq = 36275; |
| break; |
| case 38: |
| freq = 38000; |
| break; |
| case 39: |
| freq = 38450; |
| break; |
| case 40: |
| freq = 39150; |
| break; |
| case 41: |
| freq = 40620; |
| break; |
| |
| case 65: |
| freq = EarfcnPro(131522); |
| break; |
| |
| case 66: |
| freq = EarfcnPro(132322); |
| break; |
| |
| case 68: |
| freq = EarfcnPro(132822); |
| break; |
| |
| case 70: |
| freq = EarfcnPro(133046); |
| break; |
| |
| case 71: |
| freq = EarfcnPro(133296); |
| break; |
| |
| case 72: |
| freq = EarfcnPro(133496); |
| break; |
| |
| case 73: |
| freq = EarfcnPro(133546); |
| break; |
| |
| case 74: |
| freq = EarfcnPro(133786); |
| break; |
| } |
| *p_ltepower_flag=1; |
| //DBGMSG(ciLTETR,"ciLTETR tx: freq is %d, txpower is %d", freq, txpower); |
| ret = DEV_SetLTEModeTxRxReq(atHandle, (CiDevLteTxRxOption)option, (UINT16)freq, (INT16)txpower,0); |
| } |
| else if (option == 1) //start RX test |
| { |
| if(power == 0) |
| rxpower_target = -800; |
| else |
| rxpower_target = -960; |
| switch(channel) |
| { |
| case 1: |
| freq = 300; //tx 18300 |
| break; |
| case 2: |
| freq = 900; //tx 18900 |
| break; |
| case 3: |
| freq = 1575; //tx 19500; |
| break; |
| case 4: |
| freq = 2175; //tx 20175; |
| break; |
| case 5: |
| freq = 2525; //tx 20525; |
| break; |
| case 6: |
| freq = 2700; //tx 20700; |
| break; |
| case 7: |
| freq = 3100; //tx 21100; |
| break; |
| case 8: |
| freq = 3625; //tx 21625; |
| break; |
| case 17: |
| freq = 5790; //tx 23790; |
| break; |
| case 20: |
| freq = 6300; //tx 24300; |
| break; |
| case 28: |
| freq = 9435; //27435; |
| break; |
| case 34: |
| freq = 36275; //tx 36275; |
| break; |
| case 38: |
| freq = 38000; |
| break; |
| case 39: |
| freq = 38450; |
| break; |
| case 40: |
| freq = 39150; |
| break; |
| case 41: |
| freq = 40620; |
| break; |
| |
| case 65: |
| freq = EarfcnPro(65986); |
| break; |
| |
| case 66: |
| freq = EarfcnPro(66886); |
| break; |
| |
| case 68: |
| freq = EarfcnPro(67686); |
| break; |
| |
| case 70: |
| freq = EarfcnPro(68460); |
| break; |
| |
| case 71: |
| freq = EarfcnPro(68760); |
| break; |
| |
| case 72: |
| freq = EarfcnPro(68960); |
| break; |
| |
| case 73: |
| freq = EarfcnPro(69010); |
| break; |
| |
| case 74: |
| freq = EarfcnPro(69250); |
| break; |
| } |
| *p_ltepower_flag=1; |
| //DBGMSG(ciLTETR,"ciLTETR rx: freq is %d, rx target power is %d,bandwidth is %d", freq, rxpower_target, bandwidth); |
| ret = DEV_SetLTEModeTxRxReq(atHandle, (CiDevLteTxRxOption)option, (UINT16)freq, (INT16)rxpower_target, (UINT8)bandwidth); |
| } |
| else if (option == 2) //turn off RX/TX |
| { |
| *p_ltepower_flag=1; |
| ret = DEV_SetLTEModeTxRxReq(atHandle, 2, 0, 0, 0); |
| } |
| } |
| } |
| else |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_SUPPRESS,0,(char*)"NA1"); |
| } |
| else |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_SUPPRESS,0,(char*)"NA2"); |
| } |
| else |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_SUPPRESS,0,(char*)"NA3"); |
| } |
| else |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_SUPPRESS,0,(char*)"NA4"); |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT+LTETR? */ |
| case TEL_EXT_ACTION_CMD: /* AT+LTETR */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| static int lastMode = 0; |
| |
| /************************************************************************************ |
| * F@: ciGsmWcdmaMaxPower - GLOBAL API for AT*MAXPOWER command |
| * |
| */ |
| RETURNCODE_T ciGsmWcdmaMaxPower( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciGsmWcdmaMaxPower,"%s: atHandle = %d.\n", __FUNCTION__, atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*MAXPOWER=? */ |
| { |
| ATRESP( atHandle, 0, 0, (char *)"+MAXPOWER=<op>,<para1>,<para2>"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*MAXPOWER= */ |
| { |
| int option; |
| int Para1; |
| int Para2; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, 0, 0, 0) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 1, &Para1, 0, 9, 0) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, &Para2, 0, 9, 0) == TRUE ) |
| { |
| if((Para2 == 0) || (Para2 == 1) || (Para2 == 9)) |
| { |
| #if 0 |
| if(PlatformIsLwgVersion() == TRUE) //WCDMA |
| { |
| SetCfunValue(0); |
| OSATaskSleep(200); |
| } |
| |
| CurOp = option; |
| #endif |
| if((option == 0) && (Para1 == 9) && (Para2 == 9)) //turn off TX |
| { |
| if(lastMode == 1) //UMTS |
| ret = DEV_SetWcdmaModeTxRxReq(atHandle, 2, 0, 0, 0, 0, 0); |
| else //GSM |
| ret = DEV_SetGsmModeTxRxReq(atHandle, 3, 0, 0, 0, 0, 0); |
| } |
| else if(option == 0) |
| { |
| switch(Para1) |
| { |
| case 0: //GSM900 |
| lastMode = 0; |
| if(!Para2) |
| ret = DEV_SetGsmModeTxRxReq(atHandle, 0, 8, 37, 13500, 920, 20); //max power |
| else |
| ret = DEV_SetGsmModeTxRxReq(atHandle, 0, 8, 37, 13500, 200, 20); //10dBm |
| |
| break; |
| |
| case 1: //GSM1800 |
| lastMode = 0; |
| if(!Para2) |
| ret = DEV_SetGsmModeTxRxReq(atHandle, 0, 2, 698, 13500, 800, 20); //max power |
| else |
| ret = DEV_SetGsmModeTxRxReq(atHandle, 0, 2, 698, 13500, 220, 20); //10dBm |
| |
| break; |
| |
| case 2: //GSM1900 |
| lastMode = 0; |
| if(!Para2) |
| ret = DEV_SetGsmModeTxRxReq(atHandle, 0, 4, 661, 13500, 800, 20); //max power |
| else |
| ret = DEV_SetGsmModeTxRxReq(atHandle, 0, 4, 661, 13500, 220, 20); //10dBm |
| |
| break; |
| |
| case 3: //GSM850 |
| lastMode = 0; |
| if(!Para2) |
| ret = DEV_SetGsmModeTxRxReq(atHandle, 0, 64, 128, 13500, 600, 20); //max power |
| else |
| ret = DEV_SetGsmModeTxRxReq(atHandle, 0, 64, 128, 13500, 200, 20); //10dBm |
| |
| break; |
| |
| case 4: //WCDMA band1 |
| lastMode = 1; |
| if(!Para2) |
| ret = DEV_SetWcdmaModeTxRxReq(atHandle, 0, 10700, 9750, 2, 2000, 13500); //max power |
| else |
| ret = DEV_SetWcdmaModeTxRxReq(atHandle, 0, 10700, 9750, 0, 1800, 13500); //10dBm |
| |
| break; |
| |
| case 5: //WCDMA band2 |
| lastMode = 1; |
| if(!Para2) |
| ret = DEV_SetWcdmaModeTxRxReq(atHandle, 0, 9800, 9400, 2, 2000, 13500); //max power |
| else |
| ret = DEV_SetWcdmaModeTxRxReq(atHandle, 0, 9800, 9400, 0, 1800, 13500); //10dBm |
| |
| break; |
| |
| case 7: //WCDMA band5 |
| lastMode = 1; |
| if(!Para2) |
| ret = DEV_SetWcdmaModeTxRxReq(atHandle, 0, 4407, 4182, 2, 2000, 13500); //max power |
| else |
| ret = DEV_SetWcdmaModeTxRxReq(atHandle, 0, 4407, 4182, 0, 1800, 13500); //10dBm |
| |
| break; |
| |
| case 8: //WCDMA band8 |
| lastMode = 1; |
| if(!Para2) |
| ret = DEV_SetWcdmaModeTxRxReq(atHandle, 0, 3013, 2788, 2, 2000, 13500); //max power |
| else |
| ret = DEV_SetWcdmaModeTxRxReq(atHandle, 0, 3013, 2788, 1, 1800, 13500); //10dBm |
| |
| break; |
| default: |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_SUPPRESS,0,(char*)"NA"); |
| } |
| } |
| } |
| else |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_SUPPRESS,0,(char*)"NA"); |
| } |
| else |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_SUPPRESS,0,(char*)"NA"); |
| } |
| else |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_SUPPRESS,0,(char*)"NA"); |
| } |
| else |
| ret = ATRESP(atHandle,ATCI_RESULT_CODE_SUPPRESS,0,(char*)"NA"); |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*MAXPOWER? */ |
| case TEL_EXT_ACTION_CMD: /* AT*MAXPOWER */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #endif |
| |
| /************************************************************************************ |
| * F@: ciTGCTRL - GLOBAL API for AT^HVER command |
| * |
| */ |
| RETURNCODE_T ciGetHVER( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| UNUSEDPARAM(parameter_values_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciGetHVER, "ciGetHVER: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT^HVER */ |
| { |
| char hardwareVerBuf[TEL_AT_HVER_MAX_HARDWARE_VERSION_LEN + ATCI_NULL_TERMINATOR_LENGTH]; |
| char buf[50]; |
| int getHVertRet; |
| if ( (getHVertRet = get_hardwareVersion(hardwareVerBuf, sizeof(hardwareVerBuf))) > 0) |
| { |
| //DBGMSG(ciGetHVER1, "ciGetHVER: hardware version = %s\n", hardwareVerBuf); |
| sprintf(buf, "^HVER:\"%s\"\r\n", hardwareVerBuf); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, buf); |
| } |
| else |
| { |
| WARNMSG(ciGetHVER2, "ciGetHVER: Can not get hardware version, ret = %d\n", getHVertRet); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT^HVER= */ |
| case TEL_EXT_GET_CMD: /* AT^HVER? */ |
| case TEL_EXT_TEST_CMD: /* AT^HVER=?*/ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #ifdef OPHONE |
| |
| /************************************************************************************ |
| * F@: ciDCTS - GLOBAL API for AT^DCTS command |
| * |
| */ |
| RETURNCODE_T ciDCTS( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciDCTS, "ciDCTS: atHandle = %d.\n", atHandle); |
| |
| #ifndef ATCMD_1802S_CI |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT^DCTS=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"^DCTS: (0),(16,96)"); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT^DCTS= */ |
| { |
| int option = 0; |
| int mode = 0; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, TEL_AT_DCTS_OPTION_MIN, TEL_AT_DCTS_OPTION_MAX, TEL_AT_DCTS_OPTION_DEFAULT) == TRUE ) |
| { |
| if ( (getExtValue(parameter_values_p, 1, &mode, TEL_AT_DCTS_MODE_MIN, TEL_AT_DCTS_MODE_MAX, TEL_AT_DCTS_MODE_DEFAULT) == TRUE) |
| && ((mode == CI_DEV_NW_MONIOTR_NORMAL) || (mode == CI_DEV_NW_MONIOTR_DETECT))) |
| { |
| cmdValid = TRUE; |
| } |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| ret = DEV_SetNetWorkMonitorOptReq(atHandle, (CiBoolean)option, (CiDevNwMonitorMode)mode); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT^DCTS? */ |
| { |
| ret = DEV_GetNetWorkMonitorOptReq(atHandle); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT^DCTS */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| #endif |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciDCTS - GLOBAL API for AT^DEELS command |
| * |
| */ |
| RETURNCODE_T ciDEELS( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciDEELS, "ciDEELS: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT^DEELS=? */ |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"^DEELS: (0,1)"); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT^DEELS= */ |
| { |
| int option = 0; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, TEL_AT_DEELS_OPTION_MIN, TEL_AT_DEELS_OPTION_MAX, TEL_AT_DEELS_OPTION_DEFAULT) == TRUE ) |
| { |
| cmdValid = TRUE; |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| ret = DEV_SetProtocolStatusConfigReq(atHandle, (CiBoolean)option); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT^DEELS? */ |
| { |
| ret = DEV_GetProtocolStatusConfigReq(atHandle); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT^DEELS */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciDCTS - GLOBAL API for AT^DEVEI command |
| * |
| */ |
| RETURNCODE_T ciDEVEI( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciDEVEI, "ciDEVEI: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT^DEVEI=? */ |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"^DEVEI: (0,1)"); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT^DEVEI= */ |
| { |
| int option = 0; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, TEL_AT_DEVEI_OPTION_MIN, TEL_AT_DEVEI_OPTION_MAX, TEL_AT_DEVEI_OPTION_DEFAULT) == TRUE ) |
| { |
| cmdValid = TRUE; |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| ret = DEV_SetEventIndConfigReq(atHandle, (CiBoolean)option); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT^DEVEI? */ |
| { |
| ret = DEV_GetEventIndConfigReq(atHandle); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT^DEVEI */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciDCTS - GLOBAL API for AT^DNPR command |
| * |
| */ |
| RETURNCODE_T ciDNPR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciDNPR, "ciDNPR: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT^DNPR=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"^DNPR: (0,1),(0,65535)"); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT^DNPR= */ |
| { |
| int option = 0; |
| int interval = 0; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, TEL_AT_DNPR_OPTION_MIN, TEL_AT_DNPR_OPTION_MAX, TEL_AT_DNPR_OPTION_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 1, &interval, TEL_AT_DNPR_INTERVAL_MIN, TEL_AT_DNPR_INTERVAL_MAX, TEL_AT_DNPR_INTERVAL_DEFAULT) == TRUE ) |
| { |
| cmdValid = TRUE; |
| } |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| ret = DEV_SetWirelessParamConfigReq(atHandle, (CiBoolean)option, (UINT16)interval); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT^DNPR? */ |
| { |
| ret = DEV_GetWirelessParamConfigReq(atHandle); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT^DNPR */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| /************************************************************************************ |
| * F@: ciDCTS - GLOBAL API for AT^DUSR command |
| * |
| */ |
| RETURNCODE_T ciDUSR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciDUSR, "ciDUSR: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT^DUSR=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"^DUSR: (0,1),(0,1)"); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT^DUSR= */ |
| { |
| int option = 0; |
| int mode = 0; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, TEL_AT_DUSR_OPTION_MIN, TEL_AT_DUSR_OPTION_MAX, TEL_AT_DUSR_OPTION_DEFAULT) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 1, &mode, TEL_AT_DUSR_MODE_MIN, TEL_AT_DUSR_MODE_MAX, TEL_AT_DUSR_MODE_DEFAULT) == TRUE ) |
| { |
| cmdValid = TRUE; |
| } |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| ret = DEV_SetSignalingReportConfigReq(atHandle, (CiBoolean)option, (CiBoolean)mode); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT^DUSR? */ |
| { |
| ret = DEV_GetSignalingReportConfigReq(atHandle); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT^DUSR */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| #endif |
| |
| |
| /************************************************************************************ |
| * F@: ciDCTS - GLOBAL API for AT*GRIP command |
| * |
| */ |
| RETURNCODE_T ciGRIP( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciGRIP, "ciGRIP: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_SET_CMD: /* AT*GRIP= */ |
| { |
| int opt = 0; |
| int value = 0; |
| int networkMode = 0; |
| int band = 0; |
| |
| BOOL cmdValid = FALSE; |
| #if defined(ATCMD_UNIFY_CI) |
| int bandwidth = 0; |
| #endif |
| |
| if ( getExtValue(parameter_values_p, 0, &opt, 0, 255, 0) == TRUE ) |
| { |
| if( getExtValue(parameter_values_p, 1, &value, 0, 255, 0)== TRUE ) |
| { |
| if( getExtValue(parameter_values_p, 2, &networkMode, 0, 6, 6)== TRUE ) |
| { |
| if( getExtValue(parameter_values_p, 3, &band, 0, 255, 255)== TRUE ) |
| { |
| #if defined(ATCMD_UNIFY_CI) |
| if( getExtValue(parameter_values_p, 4, &bandwidth, 0, 6, 0)== TRUE ) |
| { |
| cmdValid = TRUE; |
| DBGMSG(ciGRIP0, "ciGRIP: %d,%d,%d,%d,%d", opt, value, networkMode, band, bandwidth); |
| ret = DEV_SetPowerBackOffReq(atHandle, (UINT8)opt, (UINT8)value, (UINT8)networkMode, (UINT8)band, (UINT8)bandwidth); |
| } |
| #else |
| cmdValid = TRUE; |
| //DBGMSG(ciGRIP0, "ciGRIP: %d,%d,%d,%d", opt, value, networkMode, band); |
| ret = DEV_SetPowerBackOffReq(atHandle, (UINT8)opt, (UINT8)value, (UINT8)networkMode, (UINT8)band); |
| #endif |
| } |
| } |
| } |
| } |
| |
| if(FALSE == cmdValid) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciCGMR - GLOBAL API for AT*CGMR command |
| * |
| */ |
| RETURNCODE_T ciCGMR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciCGMR, "ciCGMR: atHandle = %d.\n", atHandle); |
| char respbuf[MAX_INTERNALREVISION_ID_LENGTH + MAX_BUILDTIME_STR_LENGTH + 20]; |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*CGMR */ |
| { |
| sprintf(respbuf, "*CGMR: \"%s\",\"%s\"", internalRevisionId, buildTimeStr); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, respbuf); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| UINT8 comcfg_flag = 0; |
| |
| BOOL set_COMCFG(UINT32 atHandle, const utlAtParameterValue_P2c parameter_values_p, BOOL *valid) |
| { |
| CiReturnCode ret = CIRC_FAIL; |
| |
| int umtsWbAmr = 0; |
| int gsmWbAmr = 0; |
| int vendor = 0; |
| int manufacture = 0; |
| int lteCategory = 0; |
| int mutiSlotPowerProfile = 0; |
| int lteSMSOnly = 0; |
| int ecSupported = 0; |
| int epcoSupported = 0; |
| int hccpSupported = 0; |
| int mdrbSupported = 0; |
| int cpBackoff = 0; |
| int nslp = 0; |
| int eab = 0; |
| int rohc = 0; |
| int attachWoPdn = 0; |
| int attachWithImsi = 0; |
| |
| ComConfig ComConfigData; |
| |
| UINT8 *p_comcfg_flag; |
| p_comcfg_flag = &comcfg_flag; |
| |
| |
| if ( getExtValue(parameter_values_p, 1, &umtsWbAmr, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, &gsmWbAmr, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 3, &vendor, 0, 2047, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 4, &manufacture, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 5, <eCategory, 1, 254, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 6, &mutiSlotPowerProfile, 1, 255, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 7, <eSMSOnly, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 8, &ecSupported, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 9, &epcoSupported, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 10, &hccpSupported, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 11, &mdrbSupported, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 12, &cpBackoff, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 13, &nslp, 0, 3, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 14, &eab, 0, 3, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 15, &rohc, 0, 511, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 16, &attachWoPdn, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 17, &attachWithImsi, 0, 1, 65535) == TRUE ) |
| { |
| *valid = TRUE; |
| *p_comcfg_flag = 1; |
| memset(&ComConfigData, 0 , sizeof(ComConfigData)); |
| |
| ComConfigData.umtsWbAmr = umtsWbAmr; |
| ComConfigData.gsmWbAmr = gsmWbAmr; |
| ComConfigData.vendor = vendor; |
| ComConfigData.manufacture = manufacture; |
| ComConfigData.lteCategory = lteCategory; |
| ComConfigData.mutiSlotPowerProfile = mutiSlotPowerProfile; |
| ComConfigData.lteSMSOnly = lteSMSOnly; |
| ComConfigData.ecSupported = ecSupported; |
| ComConfigData.epcoSupported = epcoSupported; |
| ComConfigData.hccpSupported = hccpSupported; |
| ComConfigData.mdrbSupported = mdrbSupported; |
| ComConfigData.cpBackoff = cpBackoff; |
| ComConfigData.nslp = nslp; |
| ComConfigData.eab = eab; |
| ComConfigData.rohc =rohc; |
| ComConfigData.attachWoPdn = attachWoPdn; |
| ComConfigData.attachWithImsi = attachWithImsi; |
| |
| ret = DEV_SetComConfigReq(atHandle, &ComConfigData); |
| |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| return ret; |
| } |
| |
| |
| BOOL set_COMCFG_v0001(UINT32 atHandle, const utlAtParameterValue_P2c parameter_values_p, BOOL *valid) |
| { |
| CiReturnCode ret = CIRC_FAIL; |
| |
| int umtsWbAmr = 0; |
| int gsmWbAmr = 0; |
| int vendor = 0; |
| int manufacture = 0; |
| int lteCategory = 0; |
| int mutiSlotPowerProfile = 0; |
| int lteSMSOnly = 0; |
| int ecSupported = 0; |
| int epcoSupported = 0; |
| int hccpSupported = 0; |
| int mdrbSupported = 0; |
| int cpBackoff = 0; |
| int nslp = 0; |
| int eab = 0; |
| int rohc = 0; |
| |
| ComConfig ComConfigData; |
| |
| UINT8 *p_comcfg_flag; |
| p_comcfg_flag = &comcfg_flag; |
| |
| |
| if ( getExtValue(parameter_values_p, 1, &umtsWbAmr, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 2, &gsmWbAmr, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 3, &vendor, 0, 2047, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 4, &manufacture, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 5, <eCategory, 1, 254, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 6, &mutiSlotPowerProfile, 1, 255, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 7, <eSMSOnly, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 8, &ecSupported, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 9, &epcoSupported, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 10, &hccpSupported, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 11, &mdrbSupported, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 12, &cpBackoff, 0, 1, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 13, &nslp, 0, 3, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 14, &eab, 0, 3, 65535) == TRUE ) |
| { |
| if ( getExtValue(parameter_values_p, 15, &rohc, 0, 511, 65535) == TRUE ) |
| { |
| *valid = TRUE; |
| *p_comcfg_flag = 1; |
| memset(&ComConfigData, 0 , sizeof(ComConfigData)); |
| |
| ComConfigData.umtsWbAmr = umtsWbAmr; |
| ComConfigData.gsmWbAmr = gsmWbAmr; |
| ComConfigData.vendor = vendor; |
| ComConfigData.manufacture = manufacture; |
| ComConfigData.lteCategory = lteCategory; |
| ComConfigData.mutiSlotPowerProfile = mutiSlotPowerProfile; |
| ComConfigData.lteSMSOnly = lteSMSOnly; |
| ComConfigData.ecSupported = ecSupported; |
| ComConfigData.epcoSupported = epcoSupported; |
| ComConfigData.hccpSupported = hccpSupported; |
| ComConfigData.mdrbSupported = mdrbSupported; |
| ComConfigData.cpBackoff = cpBackoff; |
| ComConfigData.nslp = nslp; |
| ComConfigData.eab = eab; |
| ComConfigData.rohc =rohc; |
| |
| ret = DEV_SetComConfigReq(atHandle, &ComConfigData); |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| return ret; |
| } |
| |
| /************************************************************************************ |
| * F@: ciCOMCFG - GLOBAL API for AT*COMCFG command |
| * |
| */ |
| RETURNCODE_T ciCOMCFG( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| UINT8 *p_comcfg_flag; |
| p_comcfg_flag = &comcfg_flag; |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciCOMCFG, "ciCOMCFG: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_SET_CMD: /* AT*COMCFG= */ |
| { |
| int option = 0; |
| int mode = 0; |
| unsigned int tokens = 0; |
| BOOL cmdValid = FALSE; |
| |
| |
| if ( getExtValue(parameter_values_p, 0, &mode, 0, 1, 0) == TRUE ) |
| { |
| /*get config*/ |
| if(mode == 0) |
| { |
| if ( getExtUValue(parameter_values_p, 1, &tokens, 0, 0xFFFFFFFF, 0) == TRUE ) |
| { |
| cmdValid = TRUE; |
| *p_comcfg_flag = 1; |
| ret = DEV_GetComConfigReq(atHandle, (UINT32)tokens); |
| } |
| } |
| /*set config*/ |
| else |
| { |
| #if defined(ATCMD_UNIFY_CI) |
| if(devVersion > 0x0001) |
| ret = set_COMCFG(atHandle, parameter_values_p, &cmdValid); |
| else |
| ret = set_COMCFG_v0001(atHandle, parameter_values_p, &cmdValid); |
| #else |
| ret = set_COMCFG(atHandle, parameter_values_p, &cmdValid); |
| #endif |
| } |
| } |
| |
| if (cmdValid != TRUE) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #ifdef OPERATOR_VERIZON |
| |
| /************************************************************************************ |
| * F@: ciVZWRSRP - GLOBAL API for AT+VZWRSRP command |
| * |
| */ |
| RETURNCODE_T ciVZWRSRP( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciVZWRSRP, "ciVZWRSRP: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT+VZWRSRP? */ |
| { |
| ret = DEV_GetVZWRsrpReq(atHandle); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciVZWRSRQ - GLOBAL API for AT+VZWRSRQ command |
| * |
| */ |
| RETURNCODE_T ciVZWRSRQ( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciVZWRSRQ, "ciVZWRSRQ: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT+VZWRSRQ? */ |
| { |
| ret = DEV_GetVZWRsrqReq(atHandle); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| #endif |
| |
| /************************************************************************************ |
| * F@: ciL1Debug - GLOBAL API for GCF AT*L1DEBUG command |
| * |
| */ |
| RETURNCODE_T ciL1Debug( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| //UNUSEDPARAM(command_name_p) |
| //UNUSEDPARAM(num_parameters) |
| //UNUSEDPARAM(info_text_p) |
| //UNUSEDPARAM(xid_p) |
| //UNUSEDPARAM(arg_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| CHAR strBuf[TEL_AT_L1DEBUG_ADDRESS_STR_MAX_LEN + ATCI_NULL_TERMINATOR_LENGTH]={0}; |
| INT16 addressLen = 0; |
| |
| *xid_p = atHandle; |
| |
| // INFOMSG(ciL1Debug1,"enter %s", __FUNCTION__); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*L1DEBUG=? */ |
| { |
| /* No CI primitive for this: print hard-coded reply */ |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*L1DEBUG: <info>" ); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*L1DEBUG= */ |
| { |
| if( getExtString( parameter_values_p, 0, strBuf, TEL_AT_L1DEBUG_ADDRESS_STR_MAX_LEN, &addressLen , (CHAR *)TEL_AT_L1DEBUG_ADDRESS_STR_DEFAULT) == TRUE ) |
| { |
| //INFOMSG(ciL1Debug1,"%s: addressLen is %d", __FUNCTION__,addressLen); |
| if(addressLen!=0) |
| ret = Dev_L1Debug(atHandle, strBuf, addressLen); |
| } |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: |
| default: |
| { |
| ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL ); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| /************************************************************************************ |
| * F@: atZIPPASS - GLOBAL API for GCF AT+ZIPPASS command |
| * |
| */ |
| RETURNCODE_T atZIPPASS( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| //UNUSEDPARAM(command_name_p) |
| //UNUSEDPARAM(num_parameters) |
| //UNUSEDPARAM(info_text_p) |
| //UNUSEDPARAM(xid_p) |
| //UNUSEDPARAM(arg_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| CHAR returnStr[20] = {0}; |
| CHAR strbuff[64] = {0}; |
| int ippass = 0; |
| |
| *xid_p = atHandle; |
| |
| // INFOMSG(ciL1Debug1,"enter %s", __FUNCTION__); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT+ZIPPASS? */ |
| { |
| memset(returnStr, 0, sizeof(returnStr)); |
| executeShellCMD("uci get cmdline.PIPE 2>/dev/null", returnStr); |
| sprintf(strbuff, "+ZIPPASS: %d", memcmp(returnStr, "1", 1) == 0 ? 1 : 0); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, strbuff); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT+ZIPPASS= */ |
| { |
| if(getExtValue(parameter_values_p, 0, &ippass, 0, 1, 0) == TRUE) |
| { |
| int rc; |
| ASR_flag tag; |
| rc = get_asr_flag(&tag); |
| if(rc < 0) |
| { |
| WARNMSG(ciACONFIG1, "read asr flag error\n"); |
| } |
| else |
| { |
| tag.pipe[0] = PIPEID; |
| tag.pipe[1] = ippass; |
| rc = write_asr_flag(&tag); |
| } |
| sprintf(strbuff, "zippass.sh %d", ippass); |
| executeShellCMD(strbuff, returnStr); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, NULL, NULL); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_TEST_CMD: /* AT+ZIPPASS=? */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"+ZIPPASS: <enable:0/1>" ); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| #if defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) || defined(ATCMD_UNIFY_CI) |
| |
| /************************************************************************************ |
| * F@: ciDspInfo - GLOBAL API for GCF AT*DSPINFO command |
| * |
| */ |
| RETURNCODE_T ciDspInfo( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| //UNUSEDPARAM(command_name_p) |
| //UNUSEDPARAM(num_parameters) |
| //UNUSEDPARAM(info_text_p) |
| //UNUSEDPARAM(xid_p) |
| //UNUSEDPARAM(arg_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| CHAR dataBuf[512]={0}; |
| INT16 dataStrLen = 0; |
| int cmdID=0, NwMode=0; |
| |
| *xid_p = atHandle; |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_SET_CMD: /* AT*DSPINFO= */ |
| { |
| if ( getExtUValue(parameter_values_p, 0, &cmdID, 0, 255, 0) == TRUE ) |
| { |
| if( getExtString( parameter_values_p, 1, dataBuf, TEL_AT_DSPINFO_STR_MAX_LEN, &dataStrLen , (CHAR *)TEL_AT_DSPINFO_STR_DEFAULT) == TRUE ) |
| { |
| ERRMSG(ciDspInfo0, "%s: dataBuf %s, dataStrLen %d", __FUNCTION__, dataBuf, dataStrLen); |
| |
| if ( getExtUValue(parameter_values_p, 2, &NwMode, 0, 255, 255) == TRUE ) |
| { |
| ret = Dev_SetDspInfo(atHandle, cmdID, dataBuf, NwMode); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| |
| break; |
| } |
| |
| default: |
| { |
| ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL ); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| #endif |
| |
| /************************************************************************************ |
| * F@: ciBAND - GLOBAL API for AT*LTEBAND command |
| * |
| */ |
| RETURNCODE_T ciSetLTEBand( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| // UNUSEDPARAM(command_name_p); |
| // UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| |
| UINT8 numOfLteBands=0; |
| // int lteBands[CI_DEV_MAX_LTE_BAND_ORDER_NUM]={0}; |
| int lteBands[32]={0}; |
| UINT8 index=0; |
| BOOL cmdValid = TRUE; |
| |
| |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| |
| case TEL_EXT_GET_CMD: /* AT*LTEBAND? */ |
| { |
| ret = DEV_GetLTEBand(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*LTEBAND= */ |
| { |
| for(index=0;index<num_parameters;index++) |
| { |
| if(parameter_values_p[index].is_default!=TRUE) |
| { |
| if(getExtValue(parameter_values_p, index, &(lteBands[index]), TEL_AT_LTEBAND_NW_MODE_VAL_MIN, TEL_AT_LTEBAND_NW_MODE_VAL_MAX, TEL_AT_LTEBAND_NW_MODE_VAL_DEFAULT ) != TRUE) |
| { |
| cmdValid=FALSE; |
| break; |
| |
| } |
| |
| } |
| else |
| { |
| if(index==0)cmdValid=FALSE; |
| break; |
| |
| |
| } |
| |
| |
| } |
| if(cmdValid==FALSE) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| |
| } |
| else |
| { |
| numOfLteBands=index; |
| ret = DEV_SetLTEBand(atHandle, numOfLteBands, lteBands); |
| |
| |
| } |
| break; |
| } |
| case TEL_EXT_TEST_CMD: |
| case TEL_EXT_ACTION_CMD: /* AT*LTEBAND */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| |
| /************************************************************************************ |
| * F@: ciRFTemperatureRead - GLOBAL API for AT*RFTEMP command |
| * |
| */ |
| RETURNCODE_T ciRFTemperatureRead( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciRFTemperatureRead, "ciRFTemperatureRead: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_SET_CMD: /* AT*RFTEMP= */ |
| { |
| int tempType = 0; |
| |
| if ( getExtValue(parameter_values_p, 0, &tempType, 0, 3, 0) == TRUE ) |
| { |
| ret = DEV_ReadRFTemperatureReq(atHandle, (UINT8)tempType); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciLteCoex - GLOBAL API for AT*LTECOEX command |
| * |
| */ |
| |
| RETURNCODE_T ciLteCoex( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciLteCoex, "ciLteCoex: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_SET_CMD: /* AT*LTECOEX= */ |
| { |
| int enable; |
| |
| if ( getExtValue(parameter_values_p, 0, &enable, 0, 1, 0) == TRUE ) |
| { |
| ret = DEV_SetLteCoexReportOptionReq(atHandle, (UINT8)enable); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*LTECOEX? */ |
| { |
| ret = DEV_GetLteCoexInfoReq(atHandle); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciL2RandFill - GLOBAL API for AT*RANDFILL command |
| * |
| */ |
| RETURNCODE_T ciL2RandFill( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciL2RandFill, "ciL2RandFill: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_SET_CMD: /* AT*RANDFILL= */ |
| { |
| int option = 0; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue(parameter_values_p, 0, &option, 0, 1, 0) == TRUE ) |
| { |
| cmdValid = TRUE; |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| ret = DEV_SetL2RandFillReq(atHandle, (CiBoolean)option); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*RANDFILL? */ |
| { |
| ret = DEV_GetL2RandFillReq(atHandle); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| static const char *const telMode[]= { |
| "NORMAL", //Normal |
| "APONLY", //only AP runs |
| "PRODUCT", //Product mode with GUI |
| "PRODUCT_NO_GUI", // Product mode without GUI |
| "L1V", //Layer one validation |
| "DIAG/AT", //Diag or AT command mode on UART |
| "IMSC", //IMS |
| }; |
| |
| void utlUpdateTelModeFromProperty() |
| { |
| #if defined (BIONIC) |
| UINT8 i; |
| char tmpBuf[PROPERTY_VALUE_MAX]; |
| property_get("persist.sys.telephony.testmode", tmpBuf, ""); |
| for(i = 0; i < sizeof(telMode)/sizeof(telMode[0]); i++) |
| { |
| if(strcmp(telMode[i], tmpBuf) == 0) |
| break; |
| } |
| if(i == sizeof(telMode)/sizeof(telMode[0])) |
| property_set("persist.sys.telephony.testmode", gTelMode); //property value is invalid |
| else |
| strcpy(gTelMode, tmpBuf); |
| #endif |
| } |
| |
| /************************************************************************************ |
| * F@: ciTelMode - GLOBAL API for AT*TELMODE command |
| * |
| */ |
| RETURNCODE_T ciTelMode( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| char tmpBuf[utlAT_MAX_LINE_LENGTH] = { 0 }; |
| INT16 len; |
| UINT8 i; |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciTelMode, "ciTelMode: atHandle = %d.\n", atHandle); |
| |
| /* No CI primitive for this at command: print hard-coded all reply */ |
| switch (op) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*TELMODE=? */ |
| { |
| int n = sprintf((char *)tmpBuf, "*TELMODE: "); |
| int size = sizeof(telMode)/sizeof(telMode[0]); |
| |
| len = 1; |
| for(i = 0; i < size && len > 0; i++) |
| { |
| if(i == 0) |
| len = snprintf(tmpBuf + n, utlAT_MAX_LINE_LENGTH - n, "(\"%d - %s\"", i, telMode[i]); |
| else |
| len = snprintf(tmpBuf + n, utlAT_MAX_LINE_LENGTH - n, ",\"%d - %s\"", i, telMode[i]); |
| n += len; |
| |
| if(i == size - 1) |
| len = snprintf(tmpBuf + n, utlAT_MAX_LINE_LENGTH - n, ")"); |
| } |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)tmpBuf); |
| |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*TELMODE? */ |
| { |
| utlUpdateTelModeFromProperty(); |
| sprintf((char *)tmpBuf, "*TELMODE: \"%s\"", gTelMode); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)tmpBuf); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*TELMODE= */ |
| { |
| int mode; |
| |
| if(getExtValue(parameter_values_p, 0, &mode, TEL_AT_TELMODE_VALUE_MIN, TEL_AT_TELMODE_VALUE_MAX, TEL_AT_TELMODE_VALUE_DEFAULT) == TRUE) |
| { |
| memset(gTelMode, 0, sizeof(gTelMode)); |
| //coverity[buffer_size_warning:SUPPRESS] |
| strncpy(gTelMode, telMode[mode], sizeof(gTelMode)); |
| |
| #if defined (BIONIC) |
| property_set("persist.sys.telephony.testmode", gTelMode); |
| #endif |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT*TELMODE */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| |
| void clearProxyLists(utlAtProxyCommand_P *pPListHead) |
| { |
| utlAtProxyCommand_P pHead, tmp; |
| |
| pHead = *pPListHead; |
| |
| //DBGMSG(clearProxyLists, "PROXY_DEBUG - clearProxyLists,%d - clear list %x\n ", __LINE__,pHead); |
| while(pHead != NULL) { |
| |
| tmp = pHead; |
| pHead = tmp->next_p; |
| //DBGMSG(clearProxyLists1, "PROXY_DEBUG - clearProxyLists,%d - free ptr %x \n ", __LINE__,tmp); |
| utlFree(tmp->commandName); |
| utlFree(tmp); |
| } |
| *pPListHead = NULL; |
| } |
| |
| |
| //add entry to klinked list. Command nam MUST be NULL terminated |
| BOOL addEntryToProxyList(char *commandName, UINT8 operationCode) |
| { |
| BOOL mallocResult = TRUE; |
| char *pAllocMemForCmdName; |
| utlAtProxyCommand_P pProxyCmd; |
| int commandSize; |
| utlAtProxyCommand_P pListHead; |
| |
| commandSize = strlen(commandName); |
| pAllocMemForCmdName = (char*)utlMalloc((commandSize +1)); |
| |
| if(pAllocMemForCmdName == NULL) |
| { |
| DBGMSG(addEntryToProxyList, "PROXY_DEBUG - addEntryToProxyList,%d - failed on memory allocation for CMD name\n", |
| __LINE__); |
| mallocResult = FALSE; |
| return mallocResult; |
| } |
| |
| pProxyCmd = (utlAtProxyCommand_P)utlMalloc(sizeof(utlAtProxyCommand_T)); |
| if(pProxyCmd == NULL) { |
| DBGMSG(addEntryToProxyList1, "PROXY_DEBUG - addEntryToProxyList,%d - failed on memory allocation for proxy struct\n", |
| __LINE__); |
| mallocResult = FALSE; |
| utlFree(pAllocMemForCmdName); |
| return mallocResult; |
| } |
| |
| pProxyCmd->operation = (unsigned char)operationCode; |
| pProxyCmd->commandName = pAllocMemForCmdName; |
| strcpy(pProxyCmd->commandName,commandName ); |
| |
| WARNMSG(addEntryToProxyList2, "PROXY_DEBUG - addEntryToProxyList,%d - entry name %s, entry operation %d\n ", |
| __LINE__, pProxyCmd->commandName, pProxyCmd->operation); |
| |
| //add to linked list |
| pProxyCmd->prev_p = NULL; |
| |
| pthread_mutex_lock(&gProxyAccessLock); |
| if(!operationCode) { |
| //add an indication |
| pListHead = atProxyInd; |
| } |
| else{ |
| //add a request |
| pListHead = atProxyReq; |
| } |
| |
| if(pListHead == NULL) { |
| pProxyCmd->next_p=NULL; |
| } else { |
| pProxyCmd->next_p=pListHead; |
| pListHead->prev_p=pProxyCmd; |
| } |
| |
| pListHead = pProxyCmd; |
| |
| if(!operationCode) { |
| atProxyInd = pListHead; |
| } |
| else{ |
| atProxyReq = pListHead; |
| } |
| |
| pthread_mutex_unlock(&gProxyAccessLock); |
| //DBGMSG(addEntryToProxyList3, "PROXY_DEBUG - addEntryToProxyList,%d - req head %x, ind head %x\n ", |
| // __LINE__,atProxyReq,atProxyInd); |
| |
| return mallocResult; |
| } |
| |
| //decode commands list |
| //formated as "At<command name>:S or G or T (or any combination)| |
| BOOL decodeProxyComandStr(char * commandStr) |
| { |
| int inputIndex = 0; |
| char *pEndCommand = NULL; |
| char *pStartCommnd = NULL; |
| char *pEndOpSupport = NULL; |
| char *pStartOpSupport = NULL; |
| char *pCommandStrEnd = NULL; |
| int commandSize = 0; |
| int operationSize = 0; |
| UINT8 operationCode; |
| int i,j; |
| BOOL parseResult = TRUE; |
| |
| char dots[] = ":"; |
| char line[] = "|"; |
| char s[] = "S"; |
| char t[] = "T"; |
| char g[] = "G"; |
| |
| DBGMSG(decodeProxyComandStr, "PROXY_DEBUG - decodeProxyComandStr,%d - string to pars %s\n", |
| __LINE__,commandStr); |
| |
| //get the end of the parsed string |
| pCommandStrEnd = commandStr + strlen(commandStr); |
| |
| //DBGMSG(decodeProxyComandStr1, "PROXY_DEBUG - decodeProxyComandStr,%d - final char is %s\n", |
| // __LINE__,pCommandStrEnd ); |
| |
| while(commandStr[inputIndex]!='\0') { |
| |
| //DBGMSG(decodeProxyComandStr2, "PROXY_DEBUG - decodeProxyComandStr,%d - inputIndex at %d, str to look for cmd at %s\n", |
| // __LINE__, inputIndex, &commandStr[inputIndex]); |
| |
| //find first occurance of ':' |
| pEndCommand = strstr(&commandStr[inputIndex],dots); |
| |
| if(!pEndCommand) { |
| DBGMSG(decodeProxyComandStr3, "PROXY_DEBUG - decodeProxyComandStr,%d - no : found for command end\n", |
| __LINE__); |
| parseResult = FALSE; |
| break; |
| } |
| //find command size |
| commandSize = pEndCommand - &commandStr[inputIndex]; |
| //DBGMSG(decodeProxyComandStr4, "PROXY_DEBUG - decodeProxyComandStr,%d - command size %d\n", |
| // __LINE__, commandSize); |
| |
| if((commandSize<=0)||(commandSize > (int)utlAT_MAX_COMMAND_LENGTH)) { |
| parseResult = FALSE; |
| break; |
| } |
| |
| //find command start (ignorre first 2 char - AT prefix) |
| pStartCommnd = &commandStr[inputIndex] + 2; |
| //set null terminator at command end |
| *pEndCommand = '\0'; |
| |
| //DBGMSG(decodeProxyComandStr5, "PROXY_DEBUG - decodeProxyComandStr,%d - parsed command after clear %s\n", |
| // __LINE__, pStartCommnd); |
| |
| //find operations: |
| inputIndex = inputIndex + commandSize+1; |
| |
| //DBGMSG(decodeProxyComandStr6, "PROXY_DEBUG - decodeProxyComandStr,%d - input index at %d string to parse %s\n", |
| // __LINE__, inputIndex, &commandStr[inputIndex]); |
| //check for operation |
| pEndOpSupport = strstr(&commandStr[inputIndex],line); |
| |
| if(!pEndOpSupport) { |
| //reached the end of the str |
| pEndOpSupport = pCommandStrEnd; |
| DBGMSG(decodeProxyComandStr7, "PROXY_DEBUG - decodeProxyComandStr,%d - reached str end", |
| __LINE__); |
| |
| } |
| //find operation string length |
| operationSize = pEndOpSupport - &commandStr[inputIndex]; |
| //DBGMSG(decodeProxyComandStr8, "PROXY_DEBUG - decodeProxyComandStr,%d - operation size %d", |
| // __LINE__,operationSize); |
| |
| |
| if((operationSize<=0)|| |
| (operationSize > (int)utlAT_MAX_LINE_LENGTH)||((unsigned int)operationSize > 3)) { |
| DBGMSG(decodeProxyComandStr9, "PROXY_DEBUG - decodeProxyComandStr,%d - no : found for operation end\n", |
| __LINE__); |
| parseResult = FALSE; |
| break; |
| } |
| //set null terminator at the end of operation |
| pStartOpSupport = &commandStr[inputIndex]; |
| *pEndOpSupport = '\0'; |
| |
| //DBGMSG(decodeProxyComandStr10, "PROXY_DEBUG - decodeProxyComandStr,%d - operation str %s\n ", __LINE__,pStartOpSupport); |
| |
| //check operation validity |
| operationCode = 0; |
| |
| if(strcasestr(pStartOpSupport,t)) { |
| operationCode = operationCode | (0x1 << TEL_EXT_TEST_CMD); |
| //DBGMSG(decodeProxyComandStr11, "PROXY_DEBUG - decodeProxyComandStr,%d - found operation T ", __LINE__); |
| } |
| |
| if(strcasestr(pStartOpSupport,s)) { |
| operationCode = operationCode | (0x1 << TEL_EXT_SET_CMD); |
| //DBGMSG(decodeProxyComandStr12, "PROXY_DEBUG - decodeProxyComandStr,%d - found operation S ", __LINE__); |
| } |
| |
| if(strcasestr(pStartOpSupport,g)) { |
| operationCode = operationCode | (0x1 << TEL_EXT_GET_CMD); |
| //DBGMSG(decodeProxyComandStr13, "PROXY_DEBUG - decodeProxyComandStr,%d - found operation G ", __LINE__); |
| } |
| |
| //DBGMSG(decodeProxyComandStr14, "PROXY_DEBUG - decodeProxyComandStr,%d - operation code %d\n", __LINE__,operationCode); |
| |
| if((!operationCode)||(!parseResult)) { |
| DBGMSG(decodeProxyComandStr15, "PROXY_DEBUG -decodeProxyComandStr,%d - operation code %d,parseResult %d\n", |
| __LINE__,operationCode,parseResult); |
| break; |
| } |
| |
| //forward index |
| if(pEndOpSupport != pCommandStrEnd) |
| { |
| inputIndex = inputIndex + operationSize+1; |
| } |
| else{ |
| inputIndex = inputIndex + operationSize; |
| } |
| |
| //create a new entry in the table |
| parseResult = addEntryToProxyList(pStartCommnd, operationCode); |
| |
| if(!parseResult) { |
| break; |
| } |
| } |
| |
| WARNMSG(decodeProxyComandStr16, "PROXY_DEBUG - decodeProxyComandStr,%d -parse result %d\n", |
| __LINE__,parseResult); |
| return parseResult ; |
| } |
| |
| BOOL decodeProxyIndStr(char * indStr) |
| { |
| char parseInd[utlAT_MAX_COMMAND_LENGTH]; |
| |
| int inputIndex = 0; |
| char *pEndInd = NULL; |
| char *pStartInd = NULL; |
| char *pIndStrEnd = NULL; |
| int indSize = 0; |
| BOOL parseResult = TRUE; |
| |
| char dots[] = ":"; |
| |
| //find the end of the parsed string |
| pIndStrEnd = indStr+ strlen(indStr); |
| |
| while(indStr[inputIndex]!='\0') { |
| |
| //DBGMSG(decodeProxyIndStr, "PROXY_DEBUG - decodeProxyIndStr,%d - string to look ind at %s\n", |
| // __LINE__, &indStr[inputIndex]); |
| |
| //find first occurance of ':' |
| pEndInd = strstr(&indStr[inputIndex],dots); |
| |
| if(!pEndInd) { |
| DBGMSG(decodeProxyIndStr1, "PROXY_DEBUG - decodeProxyIndStr,%d - reached end of str\n", |
| __LINE__); |
| pEndInd = pIndStrEnd; |
| } |
| //find command size |
| indSize = pEndInd - &indStr[inputIndex]; |
| //DBGMSG(decodeProxyIndStr2, "PROXY_DEBUG - decodeProxyIndStr,%d - indication size %d\n", |
| // __LINE__, indSize); |
| |
| if((indSize<=0)||(indSize > (int)utlAT_MAX_COMMAND_LENGTH)) { |
| parseResult = FALSE; |
| break; |
| } |
| pStartInd = &indStr[inputIndex]; |
| *pEndInd = '\0'; |
| |
| //DBGMSG(decodeProxyIndStr3, "PROXY_DEBUG - decodeProxyIndStr,%d - parsed indication %s\n", |
| // __LINE__,pStartInd); |
| |
| //forward index |
| if(pEndInd != pIndStrEnd) |
| { |
| inputIndex = inputIndex+ indSize+1; |
| } |
| else{ |
| inputIndex = inputIndex+ indSize; |
| } |
| |
| //create a new entry in the table |
| parseResult = addEntryToProxyList(pStartInd, 0); |
| |
| if(!parseResult) { |
| DBGMSG(decodeProxyIndStr4, "PROXY_DEBUG - decodeProxyIndStr,%d - break - parse result %d\n", |
| __LINE__, parseResult); |
| break; |
| } |
| } |
| WARNMSG(decodeProxyIndStr5, "PROXY_DEBUG - decodeProxyIndStr,%d -parse result %d\n", |
| __LINE__, parseResult); |
| return parseResult ; |
| } |
| |
| void generateProxyStatusChangeInd(unsigned int proxyStatusReg) |
| { |
| char buf[PROPERTY_VALUE_MAX] = {'\0'}; |
| int sim2Flag = 0; |
| unsigned int indHandle; |
| char proxyStatusInd[100]; |
| |
| //get the active SIM |
| #if defined (BIONIC) |
| property_get("persist.sys.sim2.master.enable", buf, "0"); |
| #endif |
| |
| sim2Flag = atoi(buf); |
| |
| if(sim2Flag) |
| { |
| //SIM2 active, use IND_HANDLE_1 |
| indHandle = IND_REQ_HANDLE_1; |
| } |
| else{ |
| //SIM1 active, use IND_HANDLE |
| indHandle = IND_REQ_HANDLE; |
| } |
| |
| if(proxyStatusReg) |
| { |
| sprintf(proxyStatusInd,"*PRXYREGSTATE: %d,%d",proxyStatusReg, gProxyChannelId); |
| } |
| else{ |
| sprintf(proxyStatusInd,"*PRXYREGSTATE: 0"); |
| } |
| |
| ATRESP(indHandle , ATCI_RESULT_CODE_NULL, 0, proxyStatusInd); |
| } |
| static int deregProxy(TelAtParserID origParserId) |
| { |
| /* |
| * return value: |
| * 0: success |
| * 1: no change(already in de-register status) |
| * -1: fail, try de-reg proxy that set in another channel |
| */ |
| if(gProxyChannelId < NUM_OF_TEL_ATP) //a proxy client is registered, clear proxy status and proxy commands/indications lists |
| { |
| //check that de-registration is from the current regsitered channel |
| if(origParserId == gProxyChannelId) { |
| aParser_p[gAtpCtrl[gProxyChannelId].index]->isProxy = FALSE; |
| |
| //clear prxy list |
| pthread_mutex_lock(&gProxyAccessLock); |
| clearProxyLists(&atProxyReq); |
| clearProxyLists(&atProxyInd); |
| pthread_mutex_unlock(&gProxyAccessLock); |
| |
| gProxyChannelId = NUM_OF_TEL_ATP; |
| |
| WARNMSG(ciProxySet2, "PROXY_DEBUG - ciProxySet,%d - after clear req head %x, ind head %d\n", __LINE__,atProxyReq,atProxyInd); |
| |
| return 0; |
| } |
| else{ |
| WARNMSG(ciProxySet3, "PROXY_DEBUG - ciProxySet,%d - deregistration from an AT channel different then original channel\n", __LINE__); |
| return -1; |
| } |
| } |
| else{ |
| //return OK at any case, even if cleint not registered |
| //ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| return 1; |
| } |
| } |
| static int RegProxyList( TelAtParserID origParserId,CHAR *commandsList, |
| const utlAtParameterValue_P2c parameter_values_p,CHAR *indList) |
| { |
| int proxyRegSupport = 1; |
| INT16 commandListLen = 0; |
| INT16 indListLen = 0; |
| BOOL indParsingRes = TRUE; |
| BOOL commandParsingRes = TRUE; |
| int ret = 0; |
| int retP = 0; |
| UINT32 atHandle = MAKE_AT_HANDLE(origParserId); |
| |
| //check if IMS is enabled |
| #if defined (BIONIC) |
| proxyRegSupport = 0; |
| retP = property_get("persist.sys.telephony.testmode", value, ""); |
| if (retP > 0 && (strcmp(value, "IMSC") == 0)) { |
| retP = property_get("persist.radio.ims.config", value, ""); |
| if (retP > 0 && ((atoi(value) & 0x2))) { |
| //IMS-C is enabled |
| proxyRegSupport = 1; |
| |
| } |
| } |
| #endif |
| |
| //get indication and commands list |
| if((proxyRegSupport) && (getExtString(parameter_values_p, 1, commandsList, utlAT_MAX_LINE_LENGTH, &commandListLen, NULL) == TRUE)){ |
| if(getExtString(parameter_values_p, 2, indList, utlAT_MAX_LINE_LENGTH, &indListLen, NULL) == TRUE) { |
| BOOL parseResult; |
| //at list one string must have value |
| if((!indListLen)&&(!commandListLen)) { |
| if(gNullPrxysetFlag) |
| { |
| //ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| DBGMSG(ciProxySet5, "PROXY_DEBUG - ciProxySet,%d - indication list and command lists are emplty\n ", __LINE__); |
| return -1; |
| } |
| else |
| { |
| //set gProxyChannelId when IMS send prxyset with NULL commandsList and indList in the beginning |
| aParser_p[gAtpCtrl[origParserId].index]->isProxy = TRUE; |
| gProxyChannelId = origParserId; |
| gNullPrxysetFlag = 1; |
| } |
| } |
| else{ |
| if((gNullPrxysetFlag == 1) || (gProxyChannelId == NUM_OF_TEL_ATP)) { |
| //no proxy channel is initialized |
| |
| if(commandListLen) { |
| // parse commands |
| commandsList[commandListLen] = '\0'; |
| commandParsingRes = decodeProxyComandStr((char*)commandsList); |
| } |
| if((indListLen)&&(commandParsingRes)) { |
| //parse indications |
| indParsingRes = decodeProxyIndStr((char*)indList); |
| } |
| if(indParsingRes && commandParsingRes) { |
| //successful parsing |
| DBGMSG(ciProxySet6, "PROXY_DEBUG - ciProxySet,%d - parsed OK, set isProxy to true\n ", __LINE__); |
| aParser_p[gAtpCtrl[origParserId].index]->isProxy = TRUE; |
| gProxyChannelId = origParserId; |
| //ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| //generate proxy status indication changed |
| generateProxyStatusChangeInd(1); |
| ret = 0; |
| } |
| else{ |
| //registration failed - clear lists |
| pthread_mutex_lock(&gProxyAccessLock); |
| clearProxyLists(&atProxyReq); |
| clearProxyLists(&atProxyInd); |
| pthread_mutex_unlock(&gProxyAccessLock); |
| //ret = ATRESP( atHandle, ATCI_RESULT_CODE_ERROR, 0, NULL); |
| ret = -1; |
| } |
| |
| if(gNullPrxysetFlag == 1) |
| gNullPrxysetFlag = 0; |
| |
| return ret; |
| } |
| else{ |
| //proxy channel allready opened |
| DBGMSG(ciProxySet7, "PROXY_DEBUG - ciProxySet,%d - proxy channel allready opened\n ", __LINE__); |
| return -1; |
| |
| //ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| } |
| else{ |
| //INFOMSG(ciProxySet8, "PROXY_DEBUG - ciProxySet,%d - failed on read ind list param\n ", __LINE__); |
| return -1; |
| //ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else{ |
| //INFOMSG(ciProxySet9, "PROXY_DEBUG - ciProxySet,%d - failed on read req list param\n ", __LINE__); |
| return -1; |
| |
| //ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| //registration request |
| return ret; |
| } |
| RETURNCODE_T ciProxySet( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| TelAtParserID origParserId = *(TelAtParserID *)arg_p; |
| //CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(origParserId); |
| INT32 registerStatus = 0; |
| utlAtParser_P parser_p; |
| CHAR commandsList[utlAT_MAX_LINE_LENGTH+1]; |
| CHAR indList[utlAT_MAX_LINE_LENGTH+1]; |
| INT16 indListLen = 0; |
| INT16 commandListLen = 0; |
| BOOL indParsingRes = TRUE; |
| BOOL commandParsingRes = TRUE; |
| BOOL proxyChannelOpen; |
| CHAR buf[utlAT_MAX_LINE_LENGTH]; |
| char value[PROPERTY_VALUE_MAX] = "\0"; |
| |
| *xid_p = atHandle; |
| //DBGMSG("%s: atHandle = %d.\n", __FUNCTION__, atHandle); |
| //DBGMSG(ciProxySet, "PROXY_DEBUG - ciProxySet: atHandle = %d.\n", atHandle); |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*PRXYSET=*/ |
| { |
| |
| //DBGMSG(ciProxySet1, "PROXY_DEBUG - ciProxySet,%d - receive PROXY SET\n ", __LINE__); |
| |
| if(getExtValue( parameter_values_p, 0, ®isterStatus, TEL_AT_PRXYSET_REG_MIN, TEL_AT_PRXYSET_REG_MAX, TEL_AT_PRXYSET_REG_DEFAULT) == TRUE) |
| { |
| if(registerStatus==0) { |
| //de - registration request |
| int dereg_result = deregProxy(origParserId); |
| if(dereg_result == 0){ |
| //generate proxy status indication changed |
| generateProxyStatusChangeInd(registerStatus); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| }else if(dereg_result == 1){ |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| }else{ |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else{ |
| //registration request |
| //1. dereg any way |
| //2. register |
| if(deregProxy( origParserId) < 0){ |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| }else{ |
| //DBGMSG(ciProxySet4, "PROXY_DEBUG - ciProxySet,%d - receive REG requeste\n ", __LINE__); |
| if(RegProxyList(origParserId,commandsList,parameter_values_p,indList)==0){ |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| }else{ |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| } |
| } |
| else{ |
| |
| //DBGMSG(ciProxySet10, "PROXY_DEBUG - ciProxySet,%d - failed on read registration param\n ", __LINE__); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*PRXYSET? */ |
| { |
| |
| if(gProxyChannelId < NUM_OF_TEL_ATP) { |
| sprintf(( char*)buf, "*PRXYSET: %d,%d\r\n", aParser_p[gAtpCtrl[gProxyChannelId].index]->isProxy, gProxyChannelId); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0,(char*) buf); |
| } |
| else{ |
| sprintf(( char*)buf, "*PRXYSET: 0\r\n"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0,(char*) buf); |
| } |
| break; |
| } |
| case TEL_EXT_TEST_CMD: /* AT*PRXYSET=? */ |
| case TEL_EXT_ACTION_CMD: /* AT*PRXYSET? */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #ifndef NO_AUDIO |
| #ifdef ECALL_SUPPORT |
| extern long gMsgID; |
| extern BOOL gMsgIDUpdateFlag; |
| #endif |
| #endif |
| |
| void checkPrxyCmd(UINT32 handle, char* str) |
| { |
| BOOL *pImsRegState = NULL; |
| |
| if (!GET_SIM1_FLAG(handle)) { |
| pImsRegState = &gImsRegState; |
| } |
| else{ |
| pImsRegState = &gImsRegState_1; |
| } |
| |
| DBGMSG(checkPrxyCmd1, "%s:input %s", __func__, str); |
| |
| if(strlen(str) <= utlAT_MAX_LINE_LENGTH) |
| { |
| if(strstr(str, "+CIREGU:")!= NULL) |
| { |
| char* index = NULL; |
| |
| index = strstr(str, ":"); |
| |
| *pImsRegState = atoi((char*)(index+1)); |
| DBGMSG(checkPrxyCmd2, "%s:pImsRegState %d", __func__, *pImsRegState); |
| } |
| #ifndef NO_AUDIO |
| #ifdef ECALL_SUPPORT |
| else if (strstr(str, "*ECALLDATA: 0,0") != NULL && gMsgIDUpdateFlag == FALSE) { |
| gMsgID++; |
| gMsgIDUpdateFlag = TRUE; |
| if (gMsgID > 255) { |
| gMsgID = 1; |
| } |
| DBGMSG(checkPrxyCmd0, "%s: recv %s, gMsgID %d\n", __FUNCTION__, gMsgID); |
| } |
| #endif |
| #endif |
| } |
| return; |
| } |
| |
| //handle response from proxy |
| RETURNCODE_T ciProxyRsp( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CiReturnCode retProxy = CIRC_FAIL; |
| |
| TelAtParserID origParserId = *(TelAtParserID *)arg_p; |
| |
| UINT32 atHandle = MAKE_AT_HANDLE(origParserId); |
| UINT32 xid = 0; |
| CHAR proxyMsgParam[utlAT_MAX_LINE_LENGTH + 7]; //+7 for PRXYRSP ending |
| INT16 proxyMsgParamLen; |
| INT32 intermediateFlag; |
| INT32 errorType; |
| INT32 errorCode; |
| UINT8 resultCodeForParser = ATCI_RESULT_CODE_OK; |
| UINT8 codeForProxyCahnnelFree = ATCI_RESULT_CODE_OK; |
| unsigned int proxyFlag = 0; |
| unsigned int forwardToProxy = 0; |
| char prxyRspEnd[] = "PRXYRSP"; |
| BOOL bSMSPrompt = FALSE; |
| |
| *xid_p = atHandle; |
| //DBGMSG("%s: atHandle = %d.\n", __FUNCTION__, atHandle); |
| //DBGMSG(ciProxyRsp, "PROXY_DEBUG - ciProxyRsp: atHandle = %d, from original parser ID %d\n", atHandle,origParserId ); |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*PRXYRSP=*/ |
| { |
| //DBGMSG(ciProxyRsp1, "PROXY_DEBUG - ciProxyRsp,%d - receive PROXY RSP\n ", __LINE__); |
| |
| if(getExtUValue( parameter_values_p, 0, &xid, TEL_AT_PRXYRSP_XID_MIN, TEL_AT_PRXYRSP_XID_MAX, TEL_AT_PRXYRSP_XID_DEFAULT) == TRUE) |
| { |
| //get indication and commands list |
| if(getExtString(parameter_values_p, 1, proxyMsgParam, utlAT_MAX_LINE_LENGTH, &proxyMsgParamLen, NULL) == TRUE){ |
| if(getExtValue( parameter_values_p, 2, &intermediateFlag, TEL_AT_PRXYRSP_INTER_MIN, TEL_AT_PRXYRSP_INTER_MAX, TEL_AT_PRXYRSP_INTER_DEFAULT) == TRUE){ |
| if(getExtValue( parameter_values_p, 3, &errorType, |
| TEL_AT_PRXYRSP_ERROR_TYEP_MIN, TEL_AT_PRXYRSP_ERROR_TYEP_MAX, TEL_AT_PRXYRSP_ERROR_TYEP_DEFAULT) == TRUE) { |
| if(getExtValue( parameter_values_p, 4, &errorCode, |
| TEL_AT_PRXYRSP_ERROR_CODE_MIN, TEL_AT_PRXYRSP_ERROR_CODE_MAX, TEL_AT_PRXYRSP_ERROR_CODE_DEFAULT) == TRUE) { |
| |
| DBGMSG(ciProxyRsp2, "PROXY_DEBUG - ciProxyRsp,%d - PRXY RSP with XID %d,str %s,strlen %d\n ", __LINE__,xid,proxyMsgParam, proxyMsgParamLen); |
| |
| //differ between indications to forward and response |
| if((xid == IND_REQ_HANDLE)||(xid == IND_REQ_HANDLE_1)) { |
| |
| //check if a registered proxy indication. |
| proxyFlag = utlIsProxyInd((char*)proxyMsgParam,xid); |
| |
| DBGMSG(ciProxyRsp3, "PROXY_DEBUG - ciProxyRsp,%d - proxy flag for str %s is %d \n ", __LINE__,proxyMsgParam , proxyFlag); |
| |
| if(proxyFlag) { |
| //VDBGMSG(ciProxyRsp4, "PROXY_DEBUG - ciProxyRsp,%d - forward indications %s to all channels but proxy \n ", __LINE__,proxyMsgParam ); |
| |
| checkPrxyCmd(xid, proxyMsgParam); |
| //add prox finish to show this string was generated by proxy |
| strcat((char*)proxyMsgParam,prxyRspEnd); |
| |
| //VDBGMSG(ciProxyRsp5, "PROXY_DEBUG - ciProxyRsp,%d - indications %s after concat \n ", __LINE__,proxyMsgParam ); |
| //send string to all channels |
| ret = ATRESP( xid, ATCI_RESULT_CODE_NULL, 0, (char*)proxyMsgParam); |
| } |
| //free the proxy channel |
| if(!ret) { |
| codeForProxyCahnnelFree = ATCI_RESULT_CODE_OK; |
| } |
| else{ |
| codeForProxyCahnnelFree = ATCI_RESULT_CODE_ERROR; |
| } |
| //VDBGMSG(ciProxyRsp6, "PROXY_DEBUG - ciProxyRsp,%d - write response to proxy channel with code %d \n ", __LINE__,codeForProxyCahnnelFree ); |
| retProxy = ATRESP( atHandle, codeForProxyCahnnelFree, 0, NULL); |
| //DBGMSG(ciProxyRsp7, "PROXY_DEBUG - ciProxyRsp,%d - result for free proxy %d \n ", __LINE__,retProxy ); |
| } |
| else{ |
| //repsons |
| //send to original parser ID |
| |
| DBGMSG(ciProxyRsp8, "PROXY_DEBUG - ciProxyRsp,%d - sending message to channel %d, str %s\n ", __LINE__,GET_ATP_INDEX(xid) ,proxyMsgParam); |
| |
| //check if we need to handle error |
| if(errorType != ATCI_RESULT_CODE_OK) { |
| //handle error. Check typeand send relevant error |
| switch(errorType) { |
| case ATCI_RESULT_CODE_ERROR: |
| resultCodeForParser = ATCI_RESULT_CODE_SUPPRESS; //the error message is part of the prxy string, no extra error needed from the parser |
| break; |
| case ATCI_RESULT_CODE_CME_ERROR_PROXY: |
| case ATCI_RESULT_CODE_CMS_ERROR_PROXY: |
| resultCodeForParser = errorType; |
| break; |
| default: |
| resultCodeForParser = ATCI_RESULT_CODE_SUPPRESS; |
| break; |
| } |
| //DBGMSG(ciProxyRsp9, "PROXY_DEBUG - ciProxyRsp,%d - handle error - result code %d, error code %d, str %s\n ", |
| // __LINE__,resultCodeForParser, errorCode,proxyMsgParam); |
| |
| //send error message to the original client |
| ret = ATRESP( xid, resultCodeForParser, errorCode, (proxyMsgParamLen == 0)? NULL:(char*)proxyMsgParam); |
| } |
| else{ |
| //this is a standard response |
| if(intermediateFlag) { |
| resultCodeForParser = ATCI_RESULT_CODE_NULL; |
| } |
| else{ |
| resultCodeForParser = ATCI_RESULT_CODE_OK; |
| } |
| |
| //check if the XID is part of the SMS transaction. |
| //if yes - set the datamode for the AT channel to true |
| if(gCurrentProxyTrsXid == xid){ |
| if(gCurrentPrxyFirstPhase == TRUE) |
| { |
| //first phase of the transaction expect SMS data |
| gAtpCtrl[GET_ATP_INDEX(xid)].pTelAtpDataEntry.smsDataEntryMode = gCurrentSmsDataMode; |
| //DBGMSG(ciProxyRsp10, "PROXY_SMS_DEBUG - ciProxyRsp,%d - channel %d mode %d, set to true, xid %d - \n ", __LINE__,GET_ATP_INDEX(xid),gAtpCtrl[GET_ATP_INDEX(xid)].pTelAtpDataEntry.smsDataEntryMode, xid ); |
| gCurrentPrxyFirstPhase = FALSE; |
| resetMsgOperFlag(GET_AT_HANDLE(xid)); |
| // PRXYRSP here must contain SMS prompt. Send OK to PRXYRSP before forwarding the |
| // prompt to app, to ensure that the SMS data from app reach the proxy later than |
| // this OK. |
| bSMSPrompt = TRUE; |
| retProxy = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| //INFOMSG(ciProxyRsp11, "PROXY_SMS_DEBUG -ciProxyRsp,%d - for channel %d mode %d, - \n ", __LINE__,GET_ATP_INDEX(xid),gAtpCtrl[GET_ATP_INDEX(xid)].pTelAtpDataEntry.smsDataEntryMode ); |
| } |
| if((ims_sms_data_invalid_report_error == TRUE) && (gCurrentProxyTrsXid == xid)) |
| { |
| ims_sms_data_invalid_report_error = FALSE; |
| ret = ATRESP( xid, ATCI_RESULT_CODE_CMS_ERROR, CMS_INVALID_TEXT_MODE_PARA, NULL); |
| } |
| else |
| { |
| ret = ATRESP( xid, resultCodeForParser, 0, (char*)proxyMsgParam); |
| } |
| } |
| |
| //free the proxy channel |
| if(!ret) { |
| codeForProxyCahnnelFree = ATCI_RESULT_CODE_OK; |
| } |
| else{ |
| codeForProxyCahnnelFree = ATCI_RESULT_CODE_ERROR; |
| } |
| |
| if (!bSMSPrompt) |
| retProxy = ATRESP( atHandle, codeForProxyCahnnelFree, 0, NULL); |
| } |
| } |
| else{ |
| //DBGMSG(ciProxyRsp12, "PROXY_DEBUG - ciProxyRsp,%d - proxy rsp failed on optionnal param\n ", __LINE__ ); |
| retProxy = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else{ |
| //DBGMSG(ciProxyRsp13, "PROXY_DEBUG - ciProxyRsp,%d - proxy rsp failed on optionnal param\n ", __LINE__ ); |
| retProxy = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else{ |
| //DBGMSG(ciProxyRsp14, "PROXY_DEBUG - ciProxyRsp,%d - proxy rsp failed on optionnal param\n ", __LINE__ ); |
| retProxy = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else{ |
| //DBGMSG(ciProxyRsp15, "PROXY_DEBUG - ciProxyRsp,%d - proxy rsp failed on receiving str\n ", __LINE__ ); |
| retProxy = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else{ |
| //DBGMSG(ciProxyRsp16, "PROXY_DEBUG - ciProxyRsp,%d - proxy rsp failed on receiving xid\n ", __LINE__ ); |
| retProxy = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: |
| case TEL_EXT_TEST_CMD: /* AT*PRXYSET=? */ |
| case TEL_EXT_ACTION_CMD: /* AT*PRXYSET? */ |
| default: |
| { |
| retProxy = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| //DBGMSG(ciProxyRsp17, "PROXY_DEBUG - ciProxyRsp,%d - ret value %d retProxy value %d \n ", __LINE__,ret ,retProxy); |
| |
| rc = HANDLE_RETURN_VALUE(retProxy); |
| return(rc); |
| } |
| |
| //create proxy message prefix |
| void createProxyExtStr(UINT32 xid, char *msgToProxy) |
| { |
| char xidBuf[13]; //number of digits for 2^32-1 +"," + Null |
| |
| //conver command XID to str |
| memset(xidBuf,0 ,sizeof(xidBuf)); |
| |
| sprintf(xidBuf,"%d,",xid); |
| |
| //copy PROXY init |
| sprintf(msgToProxy,"*PRXY: "); |
| |
| //add xid |
| strcat(msgToProxy,xidBuf); |
| |
| //DBGMSG(createProxyExtStr, "PROXY_DEBUG - createProxyExtStr,%d - create prefix %s\n ", __LINE__,msgToProxy); |
| } |
| |
| //For all strings, except strings starting with +CMT - go over parameter string, and replace special characters |
| //- " is replaced with \022 str |
| //for +CMT indication - add " in the middle to comply for IMS requests (and don't check |
| //for specific chars - MT SMS is supported only in PDU mode for proxy) |
| //Note - the input string lengthshould include the null termination, to allow handling strings that are not null terminated. |
| |
| unsigned int replaceSpacielCharForProxy(const char *srcParam, unsigned int srsParamLen,char *resParam, unsigned int resParamLength) |
| { |
| char quotStrReplace[] = "\\22" ; |
| char cmtStr[] = "+CMT"; |
| char quotStr[] = "\" "; |
| char lncrStr[] = "\r\n"; |
| unsigned int size; |
| char *pQuatLocation = NULL; |
| unsigned int numUsedCharsForRes = 0; |
| unsigned int srcCharIndex = 0; |
| unsigned int result = CIRC_SUCCESS; |
| |
| //check first if str is null terminated - if not, it cannot be +CMT indication, and we can't check for +CMT str |
| if(srcParam[srsParamLen-1] == '\0') |
| { |
| //DBGMSG(replaceSpacielCharForProxy, "PROXY_DEBUG - replaceSpacielCharForProxy,%d - Not SMS MO data \n ", __LINE__ ); |
| if(strcasestr(srcParam, cmtStr)) |
| { |
| pQuatLocation = (char *)strcasestr(srcParam,lncrStr); |
| } |
| } |
| else{ |
| //DBGMSG(replaceSpacielCharForProxy1, "PROXY_DEBUG - replaceSpacielCharForProxy,%d - handle SMS MO data \n ", __LINE__ ); |
| } |
| |
| while((*srcParam !='\0')&&(numUsedCharsForRes < resParamLength) && (srcCharIndex < srsParamLen)) |
| { |
| if((!pQuatLocation)&&(*srcParam == '\"')) |
| { |
| size = strlen(quotStrReplace); |
| strncpy(resParam,quotStrReplace,size); |
| resParam = resParam+size; |
| numUsedCharsForRes = numUsedCharsForRes + size; |
| } |
| else if(pQuatLocation){ //for +CMT indications - find \r\n and add " before |
| |
| if(srcParam == pQuatLocation) //" should be located before \r\n |
| { |
| //add " |
| *resParam= '\"'; |
| resParam++; |
| numUsedCharsForRes++; |
| } |
| //continue to copy |
| *resParam = *srcParam; |
| resParam++; |
| numUsedCharsForRes++; |
| } |
| else{ |
| //just copy |
| *resParam = *srcParam; |
| resParam++; |
| numUsedCharsForRes++; |
| } |
| //go to next char |
| srcParam++; |
| srcCharIndex++; |
| } |
| |
| if((*srcParam != '\0')&&(numUsedCharsForRes == resParamLength)) |
| { |
| ERRMSG(replaceSpacielCharForProxy2, "ERROR: failed replacing special string for proxy - dest array too short "); |
| resParam[numUsedCharsForRes-1] = '\0'; |
| result = CIRC_FAIL; |
| } |
| else{ |
| *resParam = '\0'; |
| } |
| |
| return result; |
| } |
| |
| //the function receives the command name string and command parameters string and operation, and concatenate them into a single string. Then - sends the |
| //string to proxy. |
| //*arg_p is the parser ID the command was received on, and is sent as a parameter |
| utlReturnCode_T createStringToProxy(const char *command_name_p,const utlAtParameterOp_T op, const char *parameters_string_p,unsigned int *xid_p,void *arg_p) |
| { |
| char *msgToProxy = NULL; //PROXY: <commandname>,<command param> |
| char setOp[] = "="; |
| char getOp[] = "?"; |
| char testOp[] = "=?"; |
| char exeOp[] = ""; |
| char quotes[] = "\""; |
| char atStr[] ="\"AT"; |
| char xidBuf[13]; //number of digits for 2^32-1 +"," + Null |
| char *paramToPrxy = NULL; |
| |
| TelAtParserID origParserId = *(TelAtParserID *)arg_p; |
| UINT32 xid = MAKE_AT_HANDLE(origParserId); |
| |
| UINT32 atHandleForProxyChannel = MAKE_AT_HANDLE(gProxyChannelId); |
| CiReturnCode ret = CIRC_FAIL; |
| CiReturnCode convertRes = CIRC_SUCCESS; |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| BOOL stringValid = TRUE; |
| char *parameters_string_p_new = NULL; |
| |
| if(xid_p !=NULL) { //async command |
| *xid_p = xid; |
| } |
| msgToProxy = utlCalloc(1, utlAT_PRXY_EXT_LENGTH + utlAT_MAX_COMMAND_LENGTH + utlAT_MAX_LINE_LENGTH); |
| if (msgToProxy == NULL) |
| return rc; |
| |
| paramToPrxy = utlCalloc(1, utlAT_MAX_LINE_LENGTH*2); |
| if (paramToPrxy == NULL) |
| { |
| utlFree(msgToProxy); |
| return rc; |
| } |
| //DBGMSG(createStringToProxy, "PROXY_DEBUG - createStringToProxy,%d - forward msg to proxy - cmd name %s, cmd param %s, op %d, in behalf of parser %d\n ", __LINE__, |
| // command_name_p, parameters_string_p,(int)op,origParserId ); |
| |
| if(!strncasecmp(command_name_p, "+CMGF", strlen("+CMGF"))) { |
| gOrigParserId = origParserId; |
| } |
| |
| memset(msgToProxy, 0, sizeof(msgToProxy)); |
| |
| //create prxy indication extention |
| createProxyExtStr(xid,msgToProxy); |
| |
| //DBGMSG(createStringToProxy1, "PROXY_DEBUG - createStringToProxy,%d - forward msg to prox - ext is %s\n ", __LINE__,msgToProxy); |
| |
| //add AT prefix and first " |
| strcat(msgToProxy,atStr); |
| //add command name |
| //coverity[parameter_as_source:SUPPRESS] |
| strcat(msgToProxy,command_name_p); |
| |
| //write op code |
| switch(op) { |
| case TEL_EXT_SET_CMD: |
| strcat(msgToProxy,setOp ); |
| break; |
| case TEL_EXT_GET_CMD: |
| strcat(msgToProxy,getOp); |
| break; |
| case TEL_EXT_TEST_CMD: |
| strcat(msgToProxy,testOp); |
| break; |
| case TEL_EXT_EXEC_CMD: |
| case TEL_EXT_ACTION_CMD: |
| strcat(msgToProxy,exeOp); |
| break; |
| default: |
| ret = ATRESP( xid, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); //send back to sending channel |
| stringValid = FALSE; |
| } |
| if(stringValid) { |
| //concatenate parameters |
| if(parameters_string_p!=NULL ) { |
| |
| //check for spaciel chars in string |
| if(!strcasecmp("+CMSS", (char*)command_name_p) && strstr(parameters_string_p,",")) |
| { |
| |
| parameters_string_p_new = utlCalloc(1, strlen(parameters_string_p)+1); |
| if(parameters_string_p_new == NULL) |
| convertRes = replaceSpacielCharForProxy(parameters_string_p,strlen(parameters_string_p)+1,paramToPrxy,utlAT_MAX_LINE_LENGTH*2); |
| |
| memset(parameters_string_p_new, 0, strlen(parameters_string_p)+1); |
| ret = processProxyCMSSDestAddr((char *)parameters_string_p, parameters_string_p_new, origParserId); |
| if(ret) |
| convertRes = replaceSpacielCharForProxy(parameters_string_p,strlen(parameters_string_p)+1,paramToPrxy,utlAT_MAX_LINE_LENGTH*2); |
| else |
| convertRes = replaceSpacielCharForProxy(parameters_string_p_new,strlen(parameters_string_p_new)+1,paramToPrxy,utlAT_MAX_LINE_LENGTH*2); |
| } |
| else |
| convertRes = replaceSpacielCharForProxy(parameters_string_p,strlen(parameters_string_p)+1,paramToPrxy,utlAT_MAX_LINE_LENGTH*2); |
| } |
| |
| if(convertRes == CIRC_SUCCESS ){ |
| |
| //parameter conversion either success, or didn't happen.. |
| if(parameters_string_p) |
| { |
| strncat(msgToProxy,paramToPrxy, sizeof(msgToProxy)-strlen(msgToProxy)-strlen(quotes)); |
| } |
| //add finel quotes |
| strcat(msgToProxy,quotes); |
| |
| //INFOMSG(createStringToProxy2, "PROXY_DEBUG - createStringToProxy,%d - str to proxy %s, xid to RSP %d - \n ", __LINE__,msgToProxy, atHandleForProxyChannel ); |
| |
| //save the XID sent to the proxy, incase for an ongoing transaction |
| if(utlIsProxySmsTrs(command_name_p)){ |
| DBGMSG(createStringToProxy3, "PROXY_SMS_DEBUG -createStringToProxy,%d - xid %d is for SMS transaction - \n ",__LINE__, xid ); |
| gCurrentProxyTrsXid = xid; |
| gCurrentPrxyFirstPhase = TRUE; |
| } |
| |
| //send to proxy - send it as an indication, noneed to free the parser pf the proxy channel since it wasn't locked at the first place... |
| ret = ATRESP( atHandleForProxyChannel, ATCI_RESULT_CODE_NULL, 0, msgToProxy); |
| } |
| else{ |
| //conversion for proxy chars failed - return error |
| ret = ATRESP( xid, ATCI_RESULT_CODE_CME_ERROR, CME_TEXT_STRING_TOO_LONG, NULL); //send back to sending channel |
| } |
| } |
| |
| rc = HANDLE_RETURN_VALUE(ret); |
| if(msgToProxy != NULL) |
| utlFree(msgToProxy); |
| |
| if(parameters_string_p_new != NULL) |
| utlFree(parameters_string_p_new); |
| |
| if(paramToPrxy != NULL) |
| utlFree(paramToPrxy); |
| return rc; |
| } |
| |
| /************************************************************************************ |
| / * F@: ciIMLCONFIG - GLOBAL API for AT*IMLCONFIG-command |
| * |
| */ |
| RETURNCODE_T ciIMLCONFIG( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciIMLCONFIG, "ciIMLCONFIG: atHandle = %d.\n", atHandle); |
| |
| |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*IMLCONFIG=*/ |
| { |
| int IMLType = 0; |
| INT16 len = 0; |
| CHAR data[CI_DEV_MAX_IML_CFG_LEN * 2 + ATCI_NULL_TERMINATOR_LENGTH]; |
| BOOL cmdValid = FALSE; |
| if(getExtValue( parameter_values_p, 0, &IMLType, TEL_AT_IMLCONFIG_TYPE_VAL_MIN, TEL_AT_IMLCONFIG_TYPE_VAL_MAX, TEL_AT_IMLCONFIG_TYPE_VAL_DEFAULT) == TRUE) |
| { |
| if(getExtString(parameter_values_p, 1, data, CI_DEV_MAX_IML_CFG_LEN * 2, &len, NULL) == TRUE) |
| { |
| cmdValid = TRUE; |
| ret = DEV_SetIMLConfigReq(atHandle, (UINT8)IMLType, (int)len, (char *)data); |
| } |
| } |
| if(!cmdValid) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*IMLCONFIG? */ |
| { |
| ret = DEV_GetIMLConfigReq(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_TEST_CMD: /* AT*IMLCONFIG=? */ |
| case TEL_EXT_ACTION_CMD: /* AT*IMLCONFIG */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| |
| /************************************************************************************ |
| * F@: ciSetSerialPortIndicationState - GLOBAL API for AT*SPIND-command |
| * |
| */ |
| RETURNCODE_T ciSetSerialPortIndicationState(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| TelAtParserID atpId = *(TelAtParserID *)arg_p; |
| TelAtpDesc *pTelAtpDesc = getTelAtpDesc(atpId); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciSetSerialPortIndicationState, "ciSetSerialPortIndicationState: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*SPIND= */ |
| { |
| int type; |
| if(getExtValue( parameter_values_p, 0, &type, 0, 1, 0) == TRUE) |
| { |
| pTelAtpDesc->needIndication = type == 0 ? FALSE : TRUE; |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*SPIND?*/ |
| { |
| char buf[100] = {0}; |
| int type; |
| type = pTelAtpDesc->needIndication == TRUE ? 1 : 0; |
| sprintf(buf, "*SPIND: %d\r\n", type); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, buf); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT*SPIND */ |
| case TEL_EXT_TEST_CMD: /* AT*SPIND=? */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #ifdef OPERATOR_ATT |
| |
| /************************************************************************* |
| * F@: ciIGNSwitch - GLOBAL API for AT*IGN |
| * |
| ************************************************************************/ |
| RETURNCODE_T ciIGNSwitch(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| BOOL cmdValid = FALSE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| |
| //DBGMSG(ciIGNSwitch, "ciIGNSwitch: atHandle = %d.\n", atHandle); |
| /* |
| ** Check the operation type. |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT*IGN? */ |
| { |
| ret = DEV_IGNGet(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*IGN= */ |
| { |
| INT32 ignitionOn; |
| INT32 slowFratTimer = TEL_AT_IGN_TIMER_SLOW_MIN; |
| INT32 fastFratTimer = TEL_AT_IGN_TIMER_FAST_MIN; |
| BOOL updateFastFratTimer = FALSE; |
| BOOL updateSlowFratTimer = FALSE; |
| |
| if ((getExtValue(parameter_values_p, 0, &ignitionOn, TEL_AT_IGN_MIN, TEL_AT_IGN_MAX, TEL_AT_IGN_DEFAULT)==TRUE) && |
| (getExtValue(parameter_values_p, 1, &slowFratTimer, TEL_AT_IGN_TIMER_SLOW_MIN, TEL_AT_IGN_TIMER_SLOW_MAX, TEL_AT_IGN_TIMER_ERROR_PARAM)==TRUE) && |
| (getExtValue(parameter_values_p, 2, &fastFratTimer, TEL_AT_IGN_TIMER_FAST_MIN, TEL_AT_IGN_TIMER_FAST_MAX, TEL_AT_IGN_TIMER_ERROR_PARAM)==TRUE)) |
| { |
| if ((fastFratTimer == TEL_AT_IGN_TIMER_ERROR_PARAM) && (slowFratTimer == TEL_AT_IGN_TIMER_ERROR_PARAM)) |
| { |
| cmdValid = TRUE; |
| } |
| else if ((fastFratTimer != TEL_AT_IGN_TIMER_ERROR_PARAM) && (slowFratTimer != TEL_AT_IGN_TIMER_ERROR_PARAM)) |
| { |
| updateFastFratTimer = TRUE; |
| updateSlowFratTimer = TRUE; |
| cmdValid = TRUE; |
| } |
| } |
| |
| if (cmdValid) |
| { |
| ret = DEV_IGNSet(atHandle, ignitionOn, slowFratTimer, fastFratTimer, updateSlowFratTimer, updateFastFratTimer); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciPlusRSRP - GLOBAL API for AT+RSRP command. |
| * Used in AT&T IDLE Mode Test cases |
| * |
| ************************************************************************************/ |
| RETURNCODE_T ciPlusRSRP(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| UNUSEDPARAM(parameter_values_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciPlusRSRP, "ciPlusRSRP: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT+RSRP? */ |
| { |
| ret = DEV_GetATTLteMeasReq(atHandle, RSRP_FLAG);//flag(0-RSRP,1-RSRQ) |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciPlusRSRQ - GLOBAL API for AT+RSRQ command. |
| * Used in AT&T IDLE Mode Test cases |
| * |
| ************************************************************************************/ |
| RETURNCODE_T ciPlusRSRQ(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| UNUSEDPARAM(parameter_values_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciPlusRSRQ, "ciPlusRSRQ: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT+RSRP? */ |
| { |
| ret = DEV_GetATTLteMeasReq(atHandle, RSRQ_FLAG);//flag(0-RSRP,1-RSRQ) |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciRSCP - GLOBAL API for AT+RSCP command. |
| * Used in AT&T IDLE Mode Test cases |
| * |
| ************************************************************************************/ |
| RETURNCODE_T ciPlusRSCP(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| UNUSEDPARAM(parameter_values_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciPlusRSCP, "ciPlusRSCP: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT+RSRP? */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciECNO - GLOBAL API for AT+ECNO command. |
| * Used in AT&T IDLE Mode Test cases |
| * |
| ************************************************************************************/ |
| RETURNCODE_T ciPlusECNO(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| UNUSEDPARAM(parameter_values_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciPlusECNO, "ciPlusECNO: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT+RSRP? */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| #endif |
| |
| /************************************************************************************ |
| / * F@: ciCELLINFO - GLOBAL API for AT*CELLINFO-command |
| * |
| */ |
| RETURNCODE_T ciCELLINFO(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, const char *info_text_p, unsigned int *xid_p, void *arg_p) |
| { |
| BOOL cmdValid = FALSE; |
| INT32 modeVal; |
| |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciCELLINFO, "ciCELLINFO: atHandle = %d.\n", atHandle); |
| |
| switch ((int)op) { |
| case TEL_EXT_TEST_CMD: /* AT*CELLINFO=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, |
| (char *)"*CELLINFO:<mode> [0:disable the periodic reporting; 1: enable the reporting]"); |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*CELLINFO? */ |
| { |
| /* Currently GET is NOT supported */ |
| |
| if (g_IsCgedOn) { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_ERROR, CME_OPERATION_NOT_SUPPORTED, |
| (char *)"*CELLINFO: ERROR - +CGED is working"); |
| } else { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_ERROR, CME_OPERATION_NOT_SUPPORTED, |
| (char *)"*CELLINFO? is not supported"); |
| } |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*CELLINFO= */ |
| { |
| /* The AT Command is: at*cellinfo=1 or at*cellinfo=0 */ |
| |
| if (g_IsCgedOn) { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_ERROR, CME_OPERATION_NOT_SUPPORTED, |
| (char *)"*CELLINFO: ERROR - +CGED is working"); |
| |
| } else if (getExtValue(parameter_values_p, 0, &modeVal, TEL_AT_CELLINFO_MODE_VAL_MIN, |
| TEL_AT_CELLINFO_MODE_VAL_MAX, TEL_AT_CELLINFO_MODE_VAL_DEFAULT) == TRUE) { |
| |
| ret = DEV_SetCellInfoReq(atHandle, modeVal); |
| |
| } else { |
| ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_OPERATION_NOT_SUPPORTED,NULL); |
| } |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT*CELLINFO */ |
| default: |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /* AT+OPERCFG command*/ |
| /************************************************************************************ |
| * F@: ciSetOperCfg - GLOBAL API for AT+OPERCFG command |
| * |
| */ |
| RETURNCODE_T ciSetOperCfg( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| CiDevPrimSetOperConfigReq *setOperCfgReq = NULL; |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciSetOperCfg, "ciSetOperCfg: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| |
| case TEL_EXT_GET_CMD: /* AT+OPERCFG? */ |
| { |
| ret = DEV_GetOperCfg_req(atHandle, 0, 0); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT+OPERCFG= */ |
| { |
| UINT8 mode; |
| int feature_id=0; |
| //int feature_value=0; |
| UINT8 index=0; |
| BOOL cmdValid = FALSE; |
| UINT8 numFeatures=0; |
| char feature_value[16] = {0}; |
| INT16 StrLen = 0; |
| |
| setOperCfgReq = (CiDevPrimSetOperConfigReq *)utlCalloc(1, sizeof(CiDevPrimSetOperConfigReq)); |
| |
| if(NULL == setOperCfgReq) |
| { |
| //ERRMSG(ciSetOperCfg1, "ciSetOperCfg: alloc fail\n"); |
| break; |
| } |
| |
| for(index = 0; index < num_parameters; index++) |
| { |
| if(parameter_values_p[index].is_default != TRUE) |
| { |
| if(index % 2 == 0) |
| { |
| if(getExtValue(parameter_values_p, index, &feature_id, TEL_AT_OPERCFG_FEATUREID_VAL_MIN, TEL_AT_OPERCFG_FEATUREID_VAL_MAX, TEL_AT_OPERCFG_FEATUREID_VAL_DEFAULT) == TRUE) |
| { |
| setOperCfgReq->feature[numFeatures].featureId = (UINT32)feature_id; |
| } |
| else |
| { |
| cmdValid=FALSE; |
| break; |
| } |
| } |
| else |
| { |
| if(getExtString(parameter_values_p, index, feature_value, 16, &StrLen, NULL) == TRUE) |
| { |
| setOperCfgReq->feature[numFeatures].featureValue = strtoul(feature_value,NULL,0); |
| numFeatures++; |
| if((UINT32)(index + 1) == num_parameters) |
| { |
| mode = 1; |
| setOperCfgReq->numFeatures = numFeatures; |
| cmdValid = TRUE; |
| } |
| } |
| else |
| { |
| cmdValid=FALSE; |
| break; |
| } |
| } |
| |
| } |
| else |
| { |
| if(index == 1) |
| { |
| mode = 0; |
| cmdValid = TRUE; |
| } |
| else if(index % 2 == 0) |
| { |
| mode = 1; |
| setOperCfgReq->numFeatures = numFeatures; |
| cmdValid = TRUE; |
| } |
| else |
| { |
| cmdValid = FALSE; |
| } |
| break; |
| } |
| } |
| if(cmdValid==FALSE) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| { |
| if(0 == mode) |
| { |
| ret = DEV_GetOperCfg_req(atHandle, 1, (UINT32)feature_id); |
| } |
| else |
| { |
| ret = DEV_SetOperCfg_req(atHandle, setOperCfgReq); |
| } |
| } |
| |
| if(NULL != setOperCfgReq) |
| utlFree(setOperCfgReq); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciUdconf - GLOBAL API for AT*DCONF command. |
| * |
| */ |
| RETURNCODE_T ciUdconf(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, const char *info_text_p, unsigned int *xid_p, void *arg_p) |
| { |
| BOOL cmdValid = FALSE; |
| INT32 commandId; |
| INT32 soar_enable; |
| INT32 speechCodec; |
| INT32 gprsProf; |
| INT32 edgeProf; |
| INT32 simHotIns; |
| INT32 simPrfProt; |
| INT32 fpdchEn; |
| INT32 ffdormancy; |
| INT32 ddtConfig; |
| INT32 posCap; |
| INT32 ciphoAlg; |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| |
| BOOL Check3Param = TRUE; |
| INT32 extraDefaultParam; |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| UNUSEDPARAM(arg_p); |
| |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| *xid_p = atHandle; |
| |
| #if 0 |
| |
| switch ((int)op) { |
| |
| case TEL_EXT_SET_CMD: /* AT+UDCONF= */ |
| { |
| if (getExtValue |
| (parameter_values_p, 0, &commandId, TEL_AT_UDCONF_VAL_MIN, TEL_AT_UDCONF_VAL_MAX, |
| TEL_AT_UDCONF_VAL_DEFAULT) == TRUE) { |
| //first parameter is command |
| switch (commandId) { |
| case 20: |
| { |
| if (getExtValue |
| (parameter_values_p, 1, &soar_enable, TEL_AT_UDCONF_ROAMENABLE_VAL_MIN, |
| TEL_AT_UDCONF_ROAMENABLE_VAL_MAX,TEL_AT_UDCONF_ROAMENABLE_VAL_DEFAULT) == TRUE) { |
| |
| if(soar_enable != TEL_AT_UDCONF_ROAMENABLE_VAL_DEFAULT) { |
| //SET command |
| ret = ciUdconf20Set(soar_enable,atHandle); |
| |
| cmdValid = TRUE; |
| |
| } |
| else{ |
| //GET |
| ret = ciUdconf20Get(atHandle); |
| cmdValid = TRUE; |
| } |
| } |
| break; |
| } |
| case 30: |
| if (getExtValue |
| (parameter_values_p, 1, &speechCodec, TEL_AT_UDCONF_SPEECHCO_VAL_MIN, TEL_AT_UDCONF_SPEECHCO_VAL_MAX, |
| TEL_AT_UDCONF_SPEECHCO_VAL_DEFAULT) == TRUE) { |
| if(speechCodec != TEL_AT_UDCONF_SPEECHCO_VAL_DEFAULT) { |
| //SET command |
| ret = ciUdconf30Set(speechCodec,atHandle); |
| cmdValid = TRUE; |
| } |
| else{ |
| //GET |
| ret = ciUdconf30Get(atHandle); |
| cmdValid = TRUE; |
| } |
| |
| break; |
| } |
| case 40: |
| if (getExtValue |
| (parameter_values_p, 1, &gprsProf, TEL_AT_UDCONF_GPRS_VAL_MIN, TEL_AT_UDCONF_GPRS_VAL_MAX, |
| TEL_AT_UDCONF_GPRS_VAL_DEFAULT) == TRUE) { |
| if(getExtValue |
| (parameter_values_p, 2, &edgeProf, TEL_AT_UDCONF_EDGE_VAL_MIN, TEL_AT_UDCONF_EDGE_VAL_MAX, |
| TEL_AT_UDCONF_EDGE_VAL_DEFAULT) == TRUE) { |
| |
| if((gprsProf == TEL_AT_UDCONF_GPRS_VAL_DEFAULT)&&(edgeProf == TEL_AT_UDCONF_EDGE_VAL_DEFAULT)){ |
| //GET |
| ret = ciUdconf40Get(atHandle); |
| cmdValid = TRUE; |
| Check3Param = FALSE; |
| } |
| else if(gprsProf != TEL_AT_UDCONF_GPRS_VAL_DEFAULT){//for set oper - first param is require |
| //SET command |
| ret = ciUdconf40Set(gprsProf, edgeProf,atHandle); |
| cmdValid = TRUE; |
| Check3Param = FALSE; |
| } |
| } |
| } |
| |
| if(!cmdValid) { |
| ret = CIRC_FAIL; |
| } |
| |
| break; |
| case 50: |
| if (getExtValue |
| (parameter_values_p, 1, &simHotIns, TEL_AT_UDCONF_SIMINS_VAL_MIN, TEL_AT_UDCONF_SIMINS_VAL_MAX, |
| TEL_AT_UDCONF_SIMINS_VAL_DEFAULT) == TRUE) { |
| |
| if(simHotIns!=TEL_AT_UDCONF_SIMINS_VAL_DEFAULT) { |
| //SET command |
| ret = ciUdconf50Set(simHotIns,atHandle); |
| cmdValid = TRUE; |
| } |
| else{ |
| //GET |
| ret = ciUdconf50Get(atHandle); |
| cmdValid = TRUE; |
| } |
| } |
| break; |
| case 51: |
| if (getExtValue |
| (parameter_values_p, 1, &simPrfProt, TEL_AT_UDCONF_SIMPRO_VAL_MIN, TEL_AT_UDCONF_SIMPRO_VAL_MAX, |
| TEL_AT_UDCONF_SIMPRO_VAL_DEFAULT) == TRUE) { |
| if(simPrfProt!= TEL_AT_UDCONF_SIMPRO_VAL_DEFAULT) { |
| |
| //SET command |
| ret = ciUdconf51Set(simPrfProt,atHandle); |
| cmdValid = TRUE; |
| } |
| else |
| { |
| ret = ciUdconf51Get(atHandle); |
| cmdValid = TRUE; |
| } |
| } |
| break; |
| case 60: |
| if (getExtValue |
| (parameter_values_p, 1, &fpdchEn, TEL_AT_UDCONF_FPDCHEN_VAL_MIN, TEL_AT_UDCONF_FPDCHEN_VAL_MAX, |
| TEL_AT_UDCONF_SIMPRO_VAL_DEFAULT) == TRUE) { |
| |
| if(fpdchEn != TEL_AT_UDCONF_SIMPRO_VAL_DEFAULT) { |
| //SET command |
| ret = ciUdconf60Set(fpdchEn,atHandle); |
| cmdValid = TRUE; |
| } |
| else |
| { |
| //GET |
| ret = ciUdconf60Get(atHandle); |
| cmdValid = TRUE; |
| } |
| } |
| break; |
| case 61: |
| if (getExtValue |
| (parameter_values_p, 1, &ffdormancy, TEL_AT_UDCONF_FFDRMNCY_VAL_MIN, TEL_AT_UDCONF_FFDRMNCY_VAL_MAX, |
| TEL_AT_UDCONF_FFDRMNCY_VAL_DEFAULT) == TRUE) { |
| |
| if(ffdormancy != TEL_AT_UDCONF_FFDRMNCY_VAL_DEFAULT) { |
| //SET command |
| ret = ciUdconf61Set(ffdormancy,atHandle); |
| cmdValid = TRUE; |
| } |
| else |
| { |
| //GET |
| ret = ciUdconf61Get(atHandle); |
| cmdValid = TRUE; |
| } |
| } |
| break; |
| case 62: |
| if (getExtValue |
| (parameter_values_p, 1, &ddtConfig, TEL_AT_UDCONF_DDTCNFG_VAL_MIN, TEL_AT_UDCONF_DDTCNFG_VAL_MAX, |
| TEL_AT_UDCONF_DDTCNFG_VAL_DEFAULT) == TRUE) { |
| |
| if(ddtConfig != TEL_AT_UDCONF_DDTCNFG_VAL_DEFAULT) { |
| //SET command |
| ret = ciUdconf62Set(ddtConfig,atHandle); |
| cmdValid = TRUE; |
| } |
| else |
| { |
| //GET |
| ret = ciUdconf62Get(atHandle); |
| cmdValid = TRUE; |
| } |
| } |
| |
| break; |
| case 70: |
| if (getExtValue |
| (parameter_values_p, 1, &posCap, TEL_AT_UDCONF_POSCAP_VAL_MIN, TEL_AT_UDCONF_POSCAP_VAL_MAX, |
| TEL_AT_UDCONF_POSCAP_VAL_DEFAULT) == TRUE) { |
| |
| if(posCap != TEL_AT_UDCONF_POSCAP_VAL_DEFAULT) { |
| //SET command |
| ret = ciUdconf70Set(posCap,atHandle); |
| cmdValid = TRUE; |
| } |
| else |
| { |
| //GET |
| ret = ciUdconf70Get(atHandle); |
| cmdValid = TRUE; |
| } |
| } |
| break; |
| case 80: |
| if (getExtValue |
| (parameter_values_p, 1, &ciphoAlg, TEL_AT_UDCONF_CIPHOALG_VAL_MIN, TEL_AT_UDCONF_CIPHOALG_VAL_MAX, |
| TEL_AT_UDCONF_CIPHOALG_VAL_DEFAULT) == TRUE) { |
| |
| if(ciphoAlg != TEL_AT_UDCONF_CIPHOALG_VAL_DEFAULT) { |
| //SET command |
| ret = ciUdconf80Set(ciphoAlg,atHandle); |
| cmdValid = TRUE; |
| } |
| else |
| { |
| //GET |
| ret = ciUdconf80Get(atHandle); |
| cmdValid = TRUE; |
| } |
| } |
| break; |
| case 81: |
| { |
| INT32 integrity; |
| if (getExtValue |
| (parameter_values_p, 1, &integrity, TEL_AT_UDCONF_INTEGRITY_VAL_MIN, TEL_AT_UDCONF_INTEGRITY_VAL_MAX, |
| TEL_AT_UDCONF_INTEGRITY_VAL_DEFAULT) == TRUE) { |
| |
| if(integrity != TEL_AT_UDCONF_INTEGRITY_VAL_DEFAULT) { |
| //SET command |
| ret = ciUdconf81Set(integrity,atHandle); |
| cmdValid = TRUE; |
| } |
| else |
| { |
| //GET |
| ret = ciUdconf81Get(atHandle); |
| cmdValid = TRUE; |
| } |
| } |
| break; |
| } |
| case 100: |
| { |
| INT32 imsi; |
| if (getExtValue |
| (parameter_values_p, 1, &imsi, TEL_AT_UDCONF_IMSI_VAL_MIN, TEL_AT_UDCONF_IMSI_VAL_MAX, |
| TEL_AT_UDCONF_IMSI_VAL_DEFAULT) == TRUE) { |
| |
| if(imsi != TEL_AT_UDCONF_IMSI_VAL_DEFAULT) { |
| //SET command |
| ret = ciUdconf100Set(imsi,atHandle); |
| cmdValid = TRUE; |
| } |
| else |
| { |
| //GET |
| ret = ciUdconf100Get(atHandle); |
| cmdValid = TRUE; |
| } |
| } |
| break; |
| } |
| default: |
| printf("*DCONF - command code %d not supported\n ", commandId); |
| break; |
| |
| } |
| //check for extra parameters |
| if(Check3Param) { |
| if(getExtValue |
| (parameter_values_p, 2, &extraDefaultParam, TEL_AT_UDCONF_EXTRA_PARAM_VAL_MIN, |
| TEL_AT_UDCONF_EXTRA_PARAM_VAL_MAX, |
| TEL_AT_UDCONF_EXTRA_PARAM_VAL_DEFAULT) == TRUE) { |
| if(extraDefaultParam != TEL_AT_UDCONF_EXTRA_PARAM_VAL_DEFAULT ) { |
| //extra parameter found |
| cmdValid = FALSE; |
| } |
| |
| } |
| |
| } |
| |
| } |
| break; |
| } |
| case TEL_EXT_GET_CMD: /*AT+UDCONF?*/ |
| case TEL_EXT_TEST_CMD: /* AT+UDCONF=? */ |
| default: /* AT+UDCONF */ |
| break; |
| } |
| #endif |
| if (cmdValid == FALSE) |
| ret = CIRC_FAIL; |
| |
| rc = HANDLE_RETURN_VALUE(ret); |
| |
| return (rc); |
| } |
| |
| RETURNCODE_T ciPARK(const utlAtParameterOp_T op, const char *command_name_p, const utlAtParameterValue_P2c parameter_values_p, const size_t num_parameters, const char *info_text_p, unsigned int *xid_p, void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| BOOL cmdValid = FALSE; |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p);; |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciPARK, "ciPARK: atHandle = %d.\n", atHandle); |
| |
| switch ( op ) { |
| case TEL_EXT_SET_CMD: /* AT*PARK= */ |
| { |
| int on; |
| int roamingTimer; |
| int emergencyTimer; |
| int oosTimer; |
| |
| if ( getExtValue( parameter_values_p, 0, &on, 0, 2, 0 ) == TRUE ) |
| { |
| if(on == 1) |
| { |
| if ( getExtValue( parameter_values_p, 1, &roamingTimer, 0, 65535, 0 ) == TRUE ) |
| { |
| if ( getExtValue( parameter_values_p, 2, &emergencyTimer, 0, 65535, 0 ) == TRUE ) |
| { |
| if ( getExtValue( parameter_values_p, 3, &oosTimer, 0, 65535, 0 ) == TRUE ) |
| { |
| cmdValid = TRUE; |
| //DBGMSG(ciPARK1, "roamingTimer:%d,emergencyTimer:%d,oosTimer:%d", |
| // roamingTimer, emergencyTimer, oosTimer); |
| } |
| } |
| } |
| |
| } |
| else if(on == 0) |
| { |
| cmdValid = TRUE; |
| } |
| } |
| |
| if(cmdValid == FALSE) |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| else |
| ret = DEV_SetPark(atHandle, on, roamingTimer, emergencyTimer, oosTimer); |
| |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*PARK? */ |
| { |
| ret = DEV_GetPark(atHandle); |
| break; |
| } |
| case TEL_EXT_TEST_CMD: /* AT*PARK=? */ |
| case TEL_EXT_ACTION_CMD: /* AT*PARK */ |
| default: |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return rc; |
| } |
| |
| |
| RETURNCODE_T ciTEMPTEST( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciTEMPTEST, "ciTEMPTEST: atHandle = %d.\n", atHandle); |
| |
| switch ( op ) { |
| case TEL_EXT_TEST_CMD: /* AT*TEMPTEST=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*TEMPTEST:(0-1)"); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*TEMPTEST= */ |
| { |
| int type; |
| if ( getExtValue( parameter_values_p, 0, &type, 0, 1, 0 ) == TRUE ) |
| { |
| if(type == 0) |
| { |
| char Buf[30]; |
| char str[10]; |
| memset(str, 0, sizeof(str)); |
| //read battery temperature |
| FILE *fp = fopen("/sys/class/power_supply/battery/temp", "rb"); |
| if (fp != NULL) |
| { |
| fread(str, 1, 4, fp); |
| fclose(fp); |
| sprintf(Buf, "*TEMPTEST:%sC\n\r", str); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, Buf); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); |
| } |
| else if(type == 1) |
| { |
| //read rf temperature |
| ret = DEV_ReadRFTemperatureReq(atHandle, 0); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*TEMPTEST? */ |
| case TEL_EXT_ACTION_CMD: /* AT*TEMPTEST */ |
| default: |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return rc; |
| } |
| |
| RETURNCODE_T ciFactoryReset( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciTEMPTEST, "ciZFactoryReset: atHandle = %d.\n", atHandle); |
| |
| switch ( op ) { |
| case TEL_EXT_TEST_CMD: /* AT*FACTORY=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*ciZFactoryReset"); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*FACTORY= */ |
| case TEL_EXT_GET_CMD: /* AT*FACTORY? */ |
| case TEL_EXT_ACTION_CMD: /* AT*FACTORY */ |
| { |
| ASR_flag tag; |
| int rs = get_asr_flag(&tag); |
| if(rs < 0) |
| { |
| WARNMSG(ciZFactoryReset, "read asr flag error\n"); |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_ERROR,CME_UNKNOWN,NULL); |
| } |
| else |
| { |
| tag.Production_Mode_Flag = 0; |
| |
| tag.ramdump[0] = RAMDUMPID; |
| tag.ramdump[1] = 0; |
| tag.cplog[0] = CPLOGID; |
| tag.cplog[1] = 0; |
| #ifdef CONFIG_EEH_FORCE_SILENT_RESET |
| tag.eehP[0] = EEHPID; |
| tag.eehP[1] = 0; |
| #endif |
| rs = write_asr_flag(&tag); |
| if (rs < 0) { |
| WARNMSG(ciZFactoryReset1, "write asr flag error\n"); |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_ERROR,CME_UNKNOWN,NULL); |
| } |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| break; |
| } |
| default: |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| static unsigned int hexstr2ul(char *str) |
| { |
| unsigned int num = 0; |
| char *cp = str; |
| for (cp; *cp != '\0'; cp++) |
| { |
| if ((*cp >= '0') && (*cp <= '9')) num = (16 * num) + (*cp - '0'); |
| else if ((*cp >= 'A') && (*cp <= 'F')) num = (16 * num) + (*cp - 'A') + 10; |
| else if ((*cp >= 'a') && (*cp <= 'f')) num = (16 * num) + (*cp - 'a') + 10; |
| else |
| ERRMSG(str2ul, "str is wrong"); |
| } |
| return num; |
| } |
| |
| static void getgwband(char *gw_mask, INT16 gwlen, UINT32 *gsmband, UINT32 *umtsband) |
| { |
| UINT32 gwl = 0, gwh = 0; |
| if (gwlen <= 8) |
| { |
| gwh = 0; |
| gwl = hexstr2ul(gw_mask); |
| } |
| else |
| { |
| gwl = hexstr2ul(&gw_mask[gwlen-8]); |
| char highra[9] = {0}; |
| memset(highra, '\0', 9); |
| memcpy(highra, gw_mask, gwlen-8); |
| gwh = hexstr2ul(highra); |
| } |
| |
| |
| UINT32 tmp = (gwl & 0x3FFFFF); |
| *umtsband = ((gwh & 0x70000)>>10)|(gwl >> 22); |
| |
| *gsmband = 0; |
| if(tmp & (1<<16)) //GSM450 |
| *gsmband += 16; |
| if(tmp & (1<<17)) //GSM480 |
| *gsmband += 32; |
| if(tmp & (1<<19)) //GSM850 |
| *gsmband += 64; |
| if(tmp & (1<<8)) //EGSM 900 |
| *gsmband += 8; |
| if(tmp & (1<<9)) //PGSM 900 |
| *gsmband += 1; |
| if(tmp & (1<<7)) //DCS 1800 |
| *gsmband += 2; |
| if(tmp & (1<<21)) //PCS 1900 |
| *gsmband += 4; |
| } |
| |
| /************************************************************************************ |
| * F@: ciACONFIG - GLOBAL API for AT+ACONFIG command |
| * |
| */ |
| RETURNCODE_T ciACONFIG( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| int obmdlset = 0; |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| *xid_p = atHandle; |
| char config_str[201]={0}; |
| int config_strlen = 0, err = 0; |
| CHAR returnStr[32] = {0}; |
| |
| switch(op) |
| { |
| case TEL_EXT_SET_CMD: /* AT+ACONFIG= */ |
| { |
| if(getExtString(parameter_values_p, 0, config_str, 200, &config_strlen, NULL) == TRUE) |
| { |
| if(config_strlen == 0) |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_INVALID_PARAM,NULL); |
| else |
| { |
| int rc, pipe, pipe_changed = 0; |
| //DBGMSG(ciACONFIG, "cfg:%s\n", config_str); |
| ASR_flag tag; |
| rc = get_asr_flag(&tag); |
| if(rc < 0) |
| { |
| WARNMSG(ciACONFIG1, "read asr flag error\n"); |
| } |
| else |
| { |
| pipe = tag.pipe[1]; |
| obmdlset = parseConfigString(config_str, config_strlen, (char*)&tag); |
| if (pipe != tag.pipe[1]) |
| pipe_changed = 1; |
| } |
| |
| rc = write_asr_flag(&tag); |
| if (rc < 0) |
| WARNMSG(ciACONFIG2, "write asr flag error\n"); |
| |
| if(rc < 0) |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_ERROR,0,NULL); |
| else |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_OK,0,NULL); |
| |
| if (pipe_changed) { |
| CHAR returnStr[30] = {0}; |
| if (pipe) { |
| executeShellCMD("cp -fp /etc/config/dhcp_mifi /etc/config/dhcp", returnStr); |
| executeShellCMD("cp -fp /etc/config/network_mifi /etc/config/network", returnStr); |
| } else { |
| executeShellCMD("cp -fp /etc/config/dhcp /etc/config/dhcp_mifi", returnStr); |
| executeShellCMD("cp -fp /etc/config/network /etc/config/network_mifi", returnStr); |
| } |
| executeShellCMD("sync && reboot", returnStr); |
| } |
| if (obmdlset == 1) |
| { |
| //system("reboot"); |
| memset(returnStr, 0x00, sizeof(returnStr)); |
| executeShellCMD("reboot", returnStr); |
| } |
| else if (obmdlset == 2) //set RDUP=0 |
| { |
| memset(returnStr, 0x00, sizeof(returnStr)); |
| err = executeShellCMD("echo 0 > /proc/sys/kernel/rdup", returnStr); |
| ERRMSG(ciACONFIG000, "%s: err=%d\n", __FUNCTION__, err); |
| } |
| else if (obmdlset == 3) //set RDUP=1 |
| { |
| memset(returnStr, 0x00, sizeof(returnStr)); |
| err = executeShellCMD("echo 1 > /proc/sys/kernel/rdup", returnStr); |
| ERRMSG(ciACONFIG001, "%s: err=%d\n", __FUNCTION__, err); |
| } |
| else if (obmdlset == 4) //set CPLOG=0 |
| { |
| DEV_SetIMLConfigReq(atHandle, 12, 0, NULL); //disable cp log |
| } |
| else if (obmdlset == 5) //set CPLOG=1 |
| { |
| DEV_SetIMLConfigReq(atHandle, 13, 0, NULL); //enable cp log |
| } |
| else |
| { |
| //nothing to be do |
| } |
| } |
| } |
| else |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_INVALID_PARAM,NULL); |
| |
| } |
| break; |
| case TEL_EXT_GET_CMD: /* AT+ZCONFIG? */ |
| { |
| ASR_flag tag; |
| rc = get_asr_flag(&tag); |
| sprintf(config_str, "PID=%X,VID=%X,IMSD=%d,PIPE=%d,FAST=%d,RDUP=%d,NOCP=%d,CPLOG=%d", |
| tag.pid[0] == PIDID?tag.pid[1]:0, |
| tag.vid[0] == VIDID?tag.vid[1]:0, |
| tag.imsd[0] == IMSDID?tag.imsd[1]:0, |
| tag.pipe[0] == PIPEID?tag.pipe[1]:0, |
| tag.fast[0] == FASTID?tag.fast[1]:0, |
| tag.ramdump[0] == RAMDUMPID?tag.ramdump[1]:0, |
| tag.nocp[0] == NOCPID?tag.nocp[1]:0, |
| tag.cplog[0] == CPLOGID?tag.cplog[1]:0); |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_OK,0,config_str); |
| break; |
| } |
| |
| default: |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_OPERATION_NOT_SUPPORTED,NULL); |
| |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| const struct blobmsg_policy ims_status_policy[] ={ |
| [0] = { |
| .name = "response_status", |
| .type = BLOBMSG_TYPE_STRING, |
| }, |
| [1] = { |
| .name = "normal_status", |
| .type = BLOBMSG_TYPE_STRING, |
| }, |
| [2] = { |
| .name = "emergency_status", |
| .type = BLOBMSG_TYPE_STRING, |
| }, |
| }; |
| |
| |
| void GetIMSStatus(struct ubus_request *req, int type, struct blob_attr *msg) |
| { |
| UNUSEDPARAM(type); |
| struct blob_attr *tb[3]; |
| struct blob_attr *cur; |
| char str[50]; |
| char *resp; |
| char *normal; |
| char *emergency; |
| UINT32 atHandle = *(int *)req->priv; |
| int rc; |
| |
| //DBGMSG(GetIMSStatus, "GetIMSStatus\n"); |
| |
| /*parsing blob to be accessed easily with tb array - parse "1" argument*/ |
| rc = blobmsg_parse(ims_status_policy, 3, tb, blob_data(msg), blob_len(msg)); |
| if (rc < 0) { |
| ERRMSG(GetIMSStatus0, "GetIMSStatus: blobmsg_parse fail\n"); |
| ATRESP(atHandle, ATCI_RESULT_CODE_ERROR, CME_UNKNOWN, NULL); |
| return; |
| } |
| |
| /*parse first parameter*/ |
| cur = tb[0]; |
| if (!cur) { |
| ERRMSG(GetIMSStatus1, "GetIMSStatus: missing parameter\n"); |
| ATRESP(atHandle, ATCI_RESULT_CODE_ERROR, CME_UNKNOWN, NULL); |
| return; |
| } |
| |
| resp = blobmsg_get_string(cur); |
| //DBGMSG(GetIMSStatus2, "GetIMSStatus, resp:%s\n", resp); |
| |
| if (strcmp(resp, "OK")==0) { |
| normal = blobmsg_get_string(tb[1]); |
| emergency = blobmsg_get_string(tb[2]); |
| sprintf(str, "+IMSFUNC: 1,%d,%d", strcmp(normal, "TRUE")==0?1:0, |
| strcmp(emergency, "TRUE")==0?1:0); |
| } |
| else |
| sprintf(str, "+IMSFUNC: 0,0,0"); |
| |
| ATRESP(atHandle, ATCI_RESULT_CODE_OK, 0, str); |
| |
| return; |
| } |
| |
| |
| /************************************************************************************ |
| * F@: ciIMSFUNC - GLOBAL API for AT+IMSFUNC command |
| * |
| */ |
| RETURNCODE_T ciIMSFUNC( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| *xid_p = atHandle; |
| TelAtParserID origParserId = *(TelAtParserID *)arg_p; |
| |
| switch(op) |
| { |
| case TEL_EXT_SET_CMD: /* AT+IMSFUNC= */ |
| { |
| int enable = 0; |
| int rc = 0; |
| if (getExtValue( parameter_values_p, 0, &enable, 0, 1, 0 ) == TRUE ) |
| { |
| //ubus call |
| struct blob_buf outBlob; |
| memset(&outBlob, 0, sizeof(outBlob)); |
| |
| blob_buf_init(&outBlob, 0); |
| blobmsg_add_string(&outBlob, "status", enable==0?"0":"1"); |
| |
| if (invoke_noreply_ril(origParserId, "ims", "ims_poweron", outBlob.head) == 0) { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| blob_buf_free(&outBlob); |
| } |
| } |
| break; |
| case TEL_EXT_GET_CMD: /* AT+IMSFUNC? */ |
| { |
| int val = invoke_reply_data_cb(origParserId, "ims", "ims_status_query", NULL, |
| (ubus_data_handler_t *)GetIMSStatus, &atHandle, 2000); |
| |
| if (val == UBUS_STATUS_OK) |
| ret = CIRC_SUCCESS; |
| |
| //DBGMSG(ciIMSFUNC2, "imsfuc get ret:%d", val); |
| } |
| break; |
| default: |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_OPERATION_NOT_SUPPORTED,NULL); |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciCGMR - GLOBAL API for AT+ZVN command |
| * |
| */ |
| RETURNCODE_T ciZVN( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciZVN, "ciZVN: atHandle = %d.\n", atHandle); |
| char respbuf[MAX_INTERNALREVISION_ID_LENGTH]; |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT+ZVN */ |
| { |
| #ifdef MBTK_AT_SUPPORT |
| sprintf(respbuf, "%s", MBTK_DEVICES_REVISION); |
| #else |
| sprintf(respbuf, "%s", VENDOR_SW_VERSION); |
| #endif |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, respbuf); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| |
| #ifdef CUSTZ |
| RETURNCODE_T ciZNLOCKBAND( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 gsmband, umtsband, eutranhband, eutranlband, gwl, gwh; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciZNLOCKBAND, "ciZNLOCKBAND: atHandle = %d.\n", atHandle); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT+ZNLOCKBAND? */ |
| { |
| ret = DEV_GetZNLOCKBANDReq(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT+ZNLOCKBAND= */ |
| { |
| BOOL cmdValid = FALSE; |
| int lte_band_enable = 0; |
| int gw_band_enable = 0; |
| char lte_mask[17] = {0}; |
| char gw_mask[17] = {0}; |
| INT16 ltelen = 0; |
| INT16 gwlen = 0; |
| |
| if ( getExtValue( parameter_values_p, 0, <e_band_enable, 0, 1, 0 ) == TRUE ) |
| { |
| if ( getExtValue( parameter_values_p, 1, &gw_band_enable, 0, 1, 0 ) == TRUE ) |
| { |
| if ( getExtString( parameter_values_p, 2, <e_mask, 17, <elen, NULL ) == TRUE ) |
| { |
| if ( getExtString( parameter_values_p, 3, &gw_mask, 17, &gwlen, NULL ) == TRUE ) |
| { |
| //DBGMSG(ciZNLOCKBAND0, "ciZNLOCKBAND0:%d,%d,%s,%s\n", lte_band_enable, |
| // gw_band_enable, lte_mask, gw_mask); |
| |
| cmdValid = TRUE; |
| if (lte_band_enable == 1 && gw_band_enable == 1) |
| { |
| if (ltelen <= 8) |
| { |
| eutranhband = 0; |
| eutranlband = hexstr2ul(lte_mask); |
| } |
| else |
| { |
| eutranlband = hexstr2ul(<e_mask[ltelen-8]); |
| char highra[9] = {0}; |
| memset(highra, '\0', 9); |
| memcpy(highra, lte_mask, ltelen-8); |
| eutranhband = hexstr2ul(highra); |
| } |
| |
| getgwband(gw_mask, gwlen, &gsmband, &umtsband); |
| |
| ret = DEV_SetBandModeReqExt(atHandle, CI_DEV_NW_UMTS_LTE, CI_DEV_NW_UMTS_LTE, gsmband, umtsband, eutranhband, eutranlband, |
| CI_DEV_SET_BAND_ROAMING_NOT_CHANGE, CI_DEV_SET_BAND_ANY_SERVICE, 0, 0, 0); |
| } |
| else if (lte_band_enable == 1) |
| { |
| if (ltelen <= 8) |
| { |
| eutranhband = 0; |
| eutranlband = hexstr2ul(lte_mask); |
| } |
| else |
| { |
| eutranlband = hexstr2ul(<e_mask[ltelen-8]); |
| char highra[9] = {0}; |
| memset(highra, '\0', 9); |
| memcpy(highra, lte_mask, ltelen-8); |
| eutranhband = hexstr2ul(highra); |
| } |
| ret = DEV_SetBandModeReqExt(atHandle, CI_DEV_NW_LTE, CI_DEV_NW_LTE, 0, 0, eutranhband, eutranlband, |
| CI_DEV_SET_BAND_ROAMING_NOT_CHANGE, CI_DEV_SET_BAND_ANY_SERVICE, 0, 0, 0); |
| } |
| else if (gw_band_enable == 1) |
| { |
| getgwband(gw_mask, gwlen, &gsmband, &umtsband); |
| ret = DEV_SetBandModeReqExt(atHandle, CI_DEV_NW_UMTS, CI_DEV_NW_UMTS, gsmband, umtsband, 0, 0, |
| CI_DEV_SET_BAND_ROAMING_NOT_CHANGE, CI_DEV_SET_BAND_ANY_SERVICE, 0, 0, 0); |
| } |
| else |
| cmdValid = FALSE; |
| } |
| } |
| } |
| } |
| |
| if(!cmdValid) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #if defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) |
| extern char ft_delim1[]; |
| void parseNrBandBitmap(CHAR *bandStr, UINT32 *nrFr1BandBitmap, UINT32* nrFr2BandBitmap) |
| { |
| char* p = NULL; |
| int band =0; |
| int bitMapNum =0; |
| |
| if(bandStr == NULL) |
| return; |
| |
| if((nrFr1BandBitmap == NULL) || (nrFr2BandBitmap == NULL) ) |
| return; |
| |
| //ERRMSG(parseNrBandBitmap0, "%s: bandStr %s", __FUNCTION__, bandStr); |
| |
| *nrFr2BandBitmap = 0; |
| memset(nrFr1BandBitmap, 0, CI_DEV_NR_FR1_BAND_LIST_NUM<<2); |
| |
| |
| p = strsep(&bandStr, ft_delim1); |
| |
| while(1) |
| { |
| if(p && strlen(p) && strcmp(p," ")) |
| { |
| |
| band = atoi(p); |
| bitMapNum = band >> 5; |
| |
| //ERRMSG(parseNrBandBitmap1, "%s: band %d, bitMapNum %d", __FUNCTION__, band, bitMapNum); |
| // ERRMSG(parseNrBandBitmap2, "%s: nrFr1BandBitmap[0] 0x%X, nrFr1BandBitmap[1] 0x%X, nrFr1BandBitmap[2] 0x%X, nrFr1BandBitmap[3] 0x%X, nrFr2BandBitmap 0x%X", __FUNCTION__, nrFr1BandBitmap[0], nrFr1BandBitmap[1], nrFr1BandBitmap[2], nrFr1BandBitmap[3], *nrFr2BandBitmap); |
| |
| if(band < 128) |
| { |
| // ERRMSG(parseNrBandBitmap3, "%s: %d, %d", __FUNCTION__, band - ((band>>5)<<5), (1 << ((band - ((band>>5)<<5))-1))); |
| |
| if(bitMapNum < CI_DEV_NR_FR1_BAND_LIST_NUM) |
| nrFr1BandBitmap[bitMapNum] += (1 << ((band - ((band>>5)<<5))-1)); |
| }else |
| { |
| //ERRMSG(parseNrBandBitmap4, "%s: %d", __FUNCTION__, 1 << (band - 129)); |
| |
| *nrFr2BandBitmap += 1 << (band - 129); |
| } |
| |
| |
| //ERRMSG(parseNrBandBitmap5, "%s: nrFr1BandBitmap[0] 0x%X, nrFr1BandBitmap[1] 0x%X, nrFr1BandBitmap[2] 0x%X, nrFr1BandBitmap[3] 0x%X, nrFr2BandBitmap 0x%X", __FUNCTION__, nrFr1BandBitmap[0], nrFr1BandBitmap[1], nrFr1BandBitmap[2], nrFr1BandBitmap[3], *nrFr2BandBitmap); |
| |
| p = strsep(&bandStr, ft_delim1); |
| } |
| else |
| break; |
| } |
| |
| } |
| |
| |
| RETURNCODE_T ciZNLOCKNRBAND( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| CHAR bandStr[202] = {0}; |
| int bandStrLen = 0; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT+ZNLOCKNRBAND? */ |
| { |
| ret = DEV_GetZNLOCKNRBANDReq(atHandle); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT+ZNLOCKNRBAND= */ |
| { |
| BOOL cmdValid = FALSE; |
| int type = 0; |
| CiBitRange nrFr1BandBitmap[CI_DEV_NR_FR1_BAND_LIST_NUM]; |
| CiBitRange nrFr2BandBitmap = 0; |
| |
| memset(nrFr1BandBitmap, 0, CI_DEV_NR_FR1_BAND_LIST_NUM<<2); |
| if ( getExtValue( parameter_values_p, 0, &type, 0, 0, 0 ) == TRUE ) |
| { |
| if( getExtString( parameter_values_p, 1, (CHAR *)bandStr, 200, &bandStrLen, NULL ) == TRUE ) |
| { |
| cmdValid = TRUE; |
| parseNrBandBitmap(bandStr, nrFr1BandBitmap,&nrFr2BandBitmap); |
| } |
| } |
| |
| if(!cmdValid) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| else |
| { |
| ret = DEV_SetBandModeReq(atHandle, |
| CI_DEV_NW_LTE_NR, |
| CI_DEV_NW_LTE_NR, |
| 0, |
| 0, |
| 0, |
| 0, |
| &nrFr1BandBitmap[0], |
| nrFr2BandBitmap, |
| CI_DEV_SET_BAND_ROAMING_NOT_CHANGE, |
| CI_DEV_SET_BAND_ANY_SERVICE, |
| 0, |
| 0); |
| } |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| #endif |
| |
| RETURNCODE_T ciZCELLINFO(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| UNUSEDPARAM(arg_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| *xid_p = atHandle; |
| |
| |
| switch ((int)op) { |
| case TEL_EXT_GET_CMD: /* AT+ZCELLINFO?*/ |
| { |
| ret = DEV_GetZCELLINFO(atHandle); |
| break; |
| } |
| case TEL_EXT_TEST_CMD: |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, |
| "+ZCELLINFO:SA:Global Cell ID,PCI,band,arfcnr\r\nNSA:Global Cell ID,lte PCI,band,dl Earfcn,nr5g pci,band,arfcn,nr5g bandwidth\r\nLTE:Global Cell ID,Physical Cell ID,Cell Band,DL Earfcn\r\nWCDMA:LAC,Cell ID,Cell Band\r\nGSM:LAC,Cell ID,Cell Band\r\n"); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| |
| /************************************************************************************ |
| * F@: ciZDOGREF - GLOBAL API for GCF AT+ZDOGREF command |
| * |
| */ |
| static int zdogrefmode = 0; |
| RETURNCODE_T ciZDOGREF( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| char atRspBuf[50]; |
| |
| *xid_p = atHandle; |
| //DBGMSG(cistarCTZR, "ciZDOGREF: atHandle = %d.\n", atHandle); |
| |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+ZDOGREF? */ |
| { |
| sprintf(atRspBuf, "+ZDOGREF: %d", zdogrefmode); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, atRspBuf); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT+ZDOGREF */ |
| { |
| int mode = 0; |
| if(getExtValue(parameter_values_p, 0, &mode, 0, 65535, 0) == TRUE) |
| { |
| if (mode == 0) |
| { |
| zdogrefmode = mode; |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, "+ZDOGREF: disabled"); |
| } |
| else if (mode == 1) |
| { |
| zdogrefmode = mode; |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, "+ZDOGREF:enabled"); |
| } |
| else if (mode == 2) |
| { |
| sprintf(atRspBuf, "+ZDOGREF: %d", zdogrefmode); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, atRspBuf); |
| } |
| else |
| { |
| zdogrefmode = mode; |
| sprintf(atRspBuf, "+ZDOGREF: %d", zdogrefmode); |
| ATRESP(1, 0, 0, atRspBuf); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, NULL, NULL); |
| } |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| break; |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| |
| /************************************************************************************ |
| * F@: ciZATNUM - GLOBAL API for GCF AT+ZATNUM command |
| * |
| */ |
| |
| RETURNCODE_T ciZATNUM( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(cistarCTZR, "ciZATNUM: atHandle = %d.\n", atHandle); |
| |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+ZATNUM? */ |
| { |
| char atRspBuf[50]; |
| sprintf(atRspBuf, "+ZATNUM: %d", gNumofAT); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, NULL, atRspBuf); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT+ZATNUM */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| break; |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciGETEL - GLOBAL API for GCF AT+GEFLAG command |
| * |
| */ |
| |
| RETURNCODE_T ciGEFLAG( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| CHAR returnStr[20] = {0}; |
| |
| *xid_p = atHandle; |
| |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+GEFLAG? */ |
| { |
| // system("uci get wan.getelcom>/tmp/getelcom"); |
| executeShellCMD("uci get wan.getelcom>/tmp/getelcom", returnStr); |
| |
| FILE * fp = fopen("/tmp/getelcom","r"); |
| if (fp) |
| { |
| char Buf[20]; |
| char str[2]; |
| memset(str, 0, sizeof(str)); |
| int re = fread(str, 1, 1, fp); |
| fclose(fp); |
| if (re > 0) |
| { |
| sprintf(Buf, "+GEFLAG:%d\n\r", atoi(str)); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, Buf); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, "Not Found Item"); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT+GEFLAG */ |
| { |
| int mode; |
| if(getExtValue(parameter_values_p, 0, &mode, 0, 1, 0) == TRUE) |
| { |
| char buf[100]; |
| sprintf(buf, "uci set wan.getelcom=%d", mode); |
| //system(buf); |
| //system("uci commit wan"); |
| executeShellCMD(buf, returnStr); |
| executeShellCMD("uci commit wan", returnStr); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, NULL, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciZCFG - GLOBAL API for GCF AT+ZCFG command |
| * |
| */ |
| |
| RETURNCODE_T ciZCFG( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+ZCFG? */ |
| { |
| ret = Dev_QueryZCFG(atHandle, 0xFF); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT+ZCFG */ |
| { |
| int featureId; |
| int featureValue; |
| if(getExtValue(parameter_values_p, 0, &featureId, 0, 255, 0) == TRUE) |
| { |
| if (parameter_values_p[1].is_default) |
| { |
| //query feature value |
| ret = Dev_QueryZCFG(atHandle, (UINT32)featureId); |
| break; |
| } |
| |
| if(getExtValue(parameter_values_p, 1, &featureValue, 0, 0x7FFFFFFF, 0) == TRUE) |
| { |
| //set feature value |
| ret = Dev_SetZCFG(atHandle, (UINT32)featureId, (UINT32)featureValue); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| |
| /************************************************************************************ |
| * F@: ciZROAM - GLOBAL API for GCF AT+ZROAM command |
| * |
| */ |
| |
| RETURNCODE_T ciZROAM( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+ZROAM? */ |
| { |
| ret = Dev_QueryZROAM(atHandle); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT+ZROAM */ |
| { |
| char plmn[10]; |
| INT16 len; |
| int pdptype; |
| memset(plmn, 0, sizeof(plmn)); |
| if(getExtString(parameter_values_p, 0, plmn, 9, &len, NULL) == TRUE) |
| { |
| //DBGMSG(ciZROAM, "%s: plmn:%s", __func__, plmn); |
| char tmp[4]; |
| memset(tmp, 0, sizeof(tmp)); |
| memcpy(tmp, plmn, 3); |
| UINT16 mcc = (UINT16)str2hex32(tmp); |
| UINT16 mnc = (UINT16)str2hex32(plmn+3); |
| UINT8 lenofmnc = len - 3; |
| |
| if (parameter_values_p[1].is_default) |
| { |
| //delete |
| ret = Dev_DeleteZROM(atHandle, mcc, mnc, lenofmnc); |
| break; |
| } |
| |
| if(getExtValue(parameter_values_p, 1, &pdptype, 1, 3, 1) == TRUE) |
| { |
| //set value |
| ret = Dev_SetZROM(atHandle, mcc, mnc, lenofmnc, pdptype); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| /************************************************************************************ |
| * F@: ciZDHCPLEASE - GLOBAL API for GCF AT+ZDHCPLEASE command |
| * |
| */ |
| |
| RETURNCODE_T ciZDHCPLEASE( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| CHAR returnStr[20] = {0}; |
| |
| *xid_p = atHandle; |
| |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+ZDHCPLEASE? */ |
| { |
| //system("uci get dhcp.lan.leasetime>/tmp/dhcpleasetime"); |
| executeShellCMD("uci get dhcp.lan.leasetime>/tmp/dhcpleasetime", returnStr); |
| |
| FILE * fp = fopen("/tmp/dhcpleasetime","r"); |
| if (fp) |
| { |
| char Buf[50]; |
| char str[20]; |
| memset(str, 0, sizeof(str)); |
| if (fgets(str, sizeof(str), fp) == NULL) |
| { |
| fclose(fp); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, "Not Found Item"); |
| } |
| else |
| { |
| int value = 0; |
| char *p = str; |
| sscanf(str, "%d", &value); |
| while (*p != '\0' && isdigit(*p)) |
| p++; |
| if (*p == 'h') |
| value *= 3600; |
| else if (*p == 'd') |
| value *= 3600*24; |
| else if (*p == 'm') |
| value *= 3600*24*30; |
| |
| sprintf(Buf, "+ZDHCPLEASE:%d", value); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, Buf); |
| fclose(fp); |
| } |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT+ZDHCPLEASE= */ |
| { |
| unsigned int time; |
| if(getExtUValue(parameter_values_p, 0, &time, 0, 0xFFFFFFFF, 0) == TRUE) |
| { |
| char buf[100]; |
| if (time == 0) |
| sprintf(buf, "uci set dhcp.lan.leasetime=7200"); |
| else |
| sprintf(buf, "uci set dhcp.lan.leasetime=%d", time); |
| //system(buf); |
| //system("/etc/init.d/dnsmasq restart"); |
| executeShellCMD(buf, returnStr); |
| executeShellCMD("/etc/init.d/dnsmasq restart", returnStr); |
| |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, NULL, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciCGMR - GLOBAL API for AT*ZCGMR command |
| * |
| */ |
| RETURNCODE_T ciZCGMR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| char buf[200]; |
| char printbuf[300] = {0}; |
| |
| FILE *fp = fopen("/etc/mversion","r"); |
| if(NULL == fp){ |
| WARNMSG(ciZCGMR,"open file failed!"); |
| return false; |
| } |
| |
| memset(buf, 0, sizeof(buf)); |
| fgets(buf,200,fp); |
| buf[strlen(buf) - 1] = '\0'; |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| //DBGMSG(ciCGMR, "ciZCGMR: atHandle = %d.\n", atHandle); |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*ZCGMR */ |
| { |
| sprintf(printbuf, "*ZCGMR: \"%s\"", buf); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, printbuf); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| fclose(fp); |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #endif |
| |
| |
| |
| /************************************************************************************ |
| * F@: ciSTRESS - GLOBAL API for GCF AT+STRESS command |
| * |
| */ |
| |
| RETURNCODE_T ciSTRESS( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| char atRspBuf[50]; |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciSTRESS, "ciSTRESS: atHandle = %d.\n", atHandle); |
| |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+STRESS? */ |
| { |
| ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT+STRESS */ |
| { |
| char p1[10],p2[10]; |
| INT16 p1len = 0; |
| INT16 p2len = 0; |
| if(getExtString(parameter_values_p, 0, &p1, 10, &p1len, "0") == TRUE) |
| { |
| if(getExtString(parameter_values_p, 1, &p2, 10, &p2len, "0") == TRUE) |
| { |
| pid_t pid; |
| int res = 0; |
| int error = 0; |
| if ((pid = fork()) < 0) |
| { |
| DBGMSG(ciSTRESS1, "fork error\n"); |
| error = 1; |
| } |
| else if (pid == 0) |
| { |
| if (execl("/sbin/stresstest.sh", "stresstest.sh", p1, p2, NULL) < 0) |
| { |
| WARNMSG(ciSTRESS2, "ciSTRESS: execl erro\n"); |
| error = 2; |
| } |
| } |
| |
| if (wait(&res) != pid) |
| { |
| WARNMSG(ciSTRESS3, "ciSTRESS: wait erro\n"); |
| error = 3; |
| } |
| |
| if (error == 0 && WIFEXITED(res)) |
| { |
| if (WEXITSTATUS(res) == 0) |
| sprintf(atRspBuf, "+STRESS: PASS"); |
| else |
| sprintf(atRspBuf, "+STRESS: FAIL"); |
| } |
| else |
| sprintf(atRspBuf, "+STRESS: %d", error); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, atRspBuf); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| break; |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| |
| |
| /************************************************************************************ |
| * F@: ciSULOG - GLOBAL API for GCF AT+SULOG command |
| * |
| */ |
| |
| RETURNCODE_T ciSULOG( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| char atRspBuf[50]; |
| |
| *xid_p = atHandle; |
| //DBGMSG(cistarCTZR, "ciSULOG: atHandle = %d.\n", atHandle); |
| |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT+SULOG */ |
| { |
| int mode = 0; |
| CHAR returnStr[20] = {0}; |
| if(getExtValue(parameter_values_p, 0, &mode, 0, 1, 0) == TRUE) |
| { |
| if (mode == 0) |
| { |
| //system("sulog -d 0"); |
| executeShellCMD("sulog -d 0", returnStr); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, NULL, NULL); |
| } |
| else if (mode == 1) |
| { |
| //system("sulog -d 1"); |
| executeShellCMD("sulog -d 1", returnStr); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, NULL, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| break; |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| /************************************************************************************ |
| * F@: ciMEDCR - GLOBAL API for AT+MEDCR command |
| * |
| * position 8, opt for specific IOT without 4G to fasten registration, #468. |
| * position 9, opt for no detach/attach for AT*BAND initated 23G NW mode change, # |
| * |
| */ |
| |
| RETURNCODE_T ciMEDCR( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(num_parameters); |
| |
| TelAtParserID sAtpIndex = * (TelAtParserID *) arg_p; |
| UINT32 atHandle = MAKE_AT_HANDLE( sAtpIndex ); |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| |
| int flag, position, value; |
| |
| //DBGMSG(ciMEDCR, "%s: sAtpIndex - %x, atHandle - %x", __func__, sAtpIndex, atHandle); |
| *xid_p = atHandle; |
| switch(op) |
| { |
| case TEL_EXT_SET_CMD: |
| |
| if( getExtValue( parameter_values_p, 0, &flag, 0, 1, 0) == FALSE ) |
| { |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| |
| #if defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) |
| if( getExtValue( parameter_values_p, 1, &position, 0, 65535, 8) == FALSE ) |
| #else |
| if( getExtValue( parameter_values_p, 1, &position, 0, 255, 8) == FALSE ) |
| #endif |
| { |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| |
| if( getExtValue( parameter_values_p, 2, &value, 0, 255, 1) == FALSE ) |
| { |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| break; |
| } |
| if(flag == 0) { //set |
| ret = DEV_SetMEDCR(atHandle, (UINT16)position, (UINT8)value); |
| } else if(flag == 1) { //get |
| ret = DEV_GetMEDCR(atHandle, (UINT16)position); |
| } |
| |
| break; |
| |
| case TEL_EXT_GET_CMD: |
| case TEL_EXT_TEST_CMD: |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_OK, 0, "+MEDCR=<flag>,<position>,<value>"); |
| break; |
| |
| default: |
| break; |
| } |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return rc; |
| } |
| |
| |
| /************************************************************************************ |
| * F@: ciSIMLOCKFUSE - GLOBAL API for GCF AT+SIMLOCKFUSE command |
| * |
| */ |
| |
| RETURNCODE_T ciSIMLOCKFUSE( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| UINT32 flag; |
| char param[16]; |
| INT16 param_len; |
| |
| *xid_p = atHandle; |
| |
| switch (op) |
| { |
| case TEL_EXT_GET_CMD: /* AT+SIMLOCKFUSE? */ |
| { |
| char Buf[50]; |
| //get sim lock fuse status |
| flag = SIM_ReadLockFuse(); |
| sprintf(Buf, "+SIMLOCKFUSE:%d", flag); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, Buf); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT+SIMLOCKFUSE=BURN */ |
| { |
| memset(param, 0, sizeof(param)); |
| if (getExtString(parameter_values_p, 0, param, sizeof(param), ¶m_len, NULL) != TRUE) |
| { |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_INVALID_PARAM,NULL); |
| break; |
| } |
| |
| if (((!strcmp(param, "BURN")) || (!strcmp(param, "burn"))) && (param_len == strlen("BURN"))) |
| { |
| if (SIM_ProgLockFuse()) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CMS_UNKNOWN_ERROR, NULL); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciAntennaTuner - GLOBAL API for GCF AT*ANTTUNER -command |
| * |
| */ |
| RETURNCODE_T ciAntennaTuner( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciAntennaTuner, "ciAntennaTuner: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| |
| case TEL_EXT_TEST_CMD: /* AT*ANTTUNER=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_OK,0,(char *)"*ANTTUNER: (0-3)\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*ANTTUNER= */ |
| { |
| int Val = 0; |
| |
| if ( getExtValue( parameter_values_p, 0, &Val, TEL_AT_ANTTUNER_0_VAL_MIN, TEL_AT_ANTTUNER_0_VAL_MAX, TEL_AT_ANTTUNER_0_VAL_DEFAULT ) == TRUE ) |
| { |
| ret = DEV_SetAntennaTuner(atHandle, (UINT8)Val); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*ANTTUNER? */ |
| case TEL_EXT_ACTION_CMD: /* AT*ANTTUNER */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciDdrFreq - GLOBAL API for GCF AT*DDRFREQ -command |
| * |
| */ |
| int gDdrFreqMode = 0; |
| RETURNCODE_T ciDdrFreq( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| CHAR returnStr[20] = {0}; |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciAntennaTuner, "ciDdrFreq: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| |
| case TEL_EXT_TEST_CMD: /* AT*DDRFREQ=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_OK,0,(char *)"*DDRFREQ: (0,1)\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*DDRFREQ= */ |
| { |
| int mode = 0; |
| |
| if ( getExtValue( parameter_values_p, 0, &mode, TEL_AT_DDRFREQ_0_VAL_MIN, TEL_AT_DDRFREQ_0_VAL_MAX, TEL_AT_DDRFREQ_0_VAL_DEFAULT ) == TRUE ) |
| { |
| gDdrFreqMode = mode; |
| if(!mode) |
| //system("echo cfun0ddr533 > /sys/power/ddr_devfreq_min_pm_unqos"); //clear high-freq 533 |
| executeShellCMD("echo cfun0ddr533 > /sys/power/ddr_devfreq_min_pm_unqos", returnStr); |
| else |
| //system("echo cfun0ddr533 533000 > /sys/power/ddr_devfreq_min_pm_qos"); //set high-freq 533 |
| executeShellCMD("echo cfun0ddr533 533000 > /sys/power/ddr_devfreq_min_pm_qos", returnStr); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, NULL, NULL); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*DDRFREQ? */ |
| { |
| char Buf[16]; |
| sprintf(Buf, "*DDRFREQ:%d", gDdrFreqMode); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, Buf); |
| break; |
| } |
| |
| case TEL_EXT_ACTION_CMD: /* AT*DDRFREQ */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciSocTemp - GLOBAL API for AT*SOCTEMP command |
| * |
| */ |
| RETURNCODE_T ciSocTemp( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| |
| int returnValue=0; |
| CHAR respStr[20] = "*SOCTEMP:"; |
| CHAR returnStr[20] = {0}; |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*SOCTEMP */ |
| { |
| executeShellCMD("cat /sys/class/thermal/thermal_zone0/temp", returnStr); |
| strcat(respStr, returnStr); |
| //DBGMSG(ciSocTemp1, "SOCTEMP: %s\n", returnStr); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, respStr); |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #if defined(ATCMD_UNIFY_CI) || defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) |
| |
| /************************************************************************************ |
| * F@: ciDelFbPlmn - GLOBAL API for GCF AT*DELFBPLMN -command |
| * |
| */ |
| RETURNCODE_T ciDelFbPlmn( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //INFOMSG(ciDelFbPlmn, "ciDelFbPlmn: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| |
| case TEL_EXT_TEST_CMD: /* AT*DELFBPLMN=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_OK,0,(char *)"*DELFBPLMN: (0-3)\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*DELFBPLMN= */ |
| { |
| int type; |
| if ( getExtValue(parameter_values_p, 0, &type, TEL_AT_DELFBPLMN_0_VAL_MIN, TEL_AT_DELFBPLMN_0_VAL_MAX, TEL_AT_DELFBPLMN_0_VAL_DEFAULT) == TRUE) |
| { |
| ret = DEV_DelFbPlmn(atHandle, (UINT8)type); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*DELFBPLMN? */ |
| case TEL_EXT_ACTION_CMD: /* AT*DELFBPLMN */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| /************************************************************************************ |
| * F@: ciComFeature - GLOBAL API for GCF AT*COMFEATURE -command |
| * |
| */ |
| RETURNCODE_T ciComFeature( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| |
| case TEL_EXT_SET_CMD: /* AT*COMFEATURE= */ |
| { |
| int id = 0; |
| int cmd = 0; |
| int index = 0; |
| INT16 len = 0; |
| CHAR data[TEL_AT_COMFEATURE_2_DATA_MAX_LEN + ATCI_NULL_TERMINATOR_LENGTH]; |
| CHAR arfcnList[TEL_AT_COMFEATURE_2_DATA_MAX_LEN + ATCI_NULL_TERMINATOR_LENGTH]; |
| INT16 arfcnlen = 0; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtValue( parameter_values_p, 0, &cmd, TEL_AT_COMFEATURE_0_CMD_VAL_MIN,TEL_AT_COMFEATURE_0_CMD_VAL_MAX, TEL_AT_COMFEATURE_0_CMD_VAL_DEFAULT ) == TRUE ) |
| { |
| if ( getExtValue( parameter_values_p, 1, &id, TEL_AT_COMFEATURE_1_ID_VAL_MIN,TEL_AT_COMFEATURE_1_ID_VAL_MAX, TEL_AT_COMFEATURE_1_ID_VAL_DEFAULT ) == TRUE ) |
| { |
| if(getExtString(parameter_values_p, 2, data, TEL_AT_COMFEATURE_2_DATA_MAX_LEN, &len, TEL_AT_COMFEATURE_2_DATA_DEFAULT) == TRUE) |
| { |
| if ( getExtValue( parameter_values_p, 3, &index, TEL_AT_COMFEATURE_3_INDEX_VAL_MIN,TEL_AT_COMFEATURE_3_INDEX_VAL_MAX, TEL_AT_COMFEATURE_3_INDEX_VAL_DEFAULT) == TRUE ) |
| { |
| if (getExtString(parameter_values_p, 4, arfcnList, TEL_AT_COMFEATURE_2_DATA_MAX_LEN, &arfcnlen, TEL_AT_COMFEATURE_2_DATA_DEFAULT) == TRUE) |
| cmdValid = TRUE; |
| } |
| } |
| } |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| if (cmd == DEV_COMMON_CMD_GET) //get operation |
| { |
| #if defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) |
| if (id == CI_DEV_FT_OPERATION_ARFCN_LIST) |
| { |
| if (parameter_values_p[2].is_default) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| else |
| ret = Dev_GetComFeature(atHandle, (UINT16)id, index, data); |
| } |
| else |
| #endif |
| { |
| if (parameter_values_p[3].is_default) //query all |
| ret = Dev_GetComFeature(atHandle, (UINT16)id, 65535, data); |
| else |
| ret = Dev_GetComFeature(atHandle, (UINT16)id, (UINT32)(index-1), data); //query one |
| } |
| } |
| else if((cmd == DEV_COMMON_CMD_SET) || (cmd == DEV_COMMON_CMD_DEL)) |
| { |
| #if defined(ATCMD_UNIFY_CI) |
| if(devVersion > 0x0001) |
| ret = Dev_SetComFeature(atHandle, (UINT8)cmd, (UINT16)id, data, index, arfcnList); |
| else |
| ret = Dev_SetComFeature_v0001(atHandle, (UINT8)cmd, (UINT16)id, data, index, arfcnList); |
| #else |
| ret = Dev_SetComFeature(atHandle, (UINT8)cmd, (UINT16)id, data, index, arfcnList); |
| #endif |
| } |
| else if ((cmd == DEV_COMMON_CMD_INSERT) || (cmd == DEV_COMMON_CMD_UPDATE)) |
| { |
| //id == 13 |
| ret = Dev_SetComFeature(atHandle, (UINT8)cmd, (UINT16)id, data, index, arfcnList); |
| } |
| else |
| DBGMSG(ciComFeature1,"%s: invalid cmd", __FUNCTION__); |
| |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*COMFEATURE? */ |
| case TEL_EXT_ACTION_CMD: /* AT*COMFEATURE */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| #endif |
| |
| |
| #if defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) |
| #ifdef ENABLE_WIFI_SCAN |
| static UINT8 g_wifi_curr_option = 0; |
| //ICAT EXPORTED ENUM |
| typedef enum { |
| Ps_High =0, |
| Wifi_High |
| }ScanPriority_te; |
| |
| //ICAT EXPORTED STRUCT |
| typedef struct{ |
| |
| UINT8 ScanRoundNum; //from 1 to 3. and the default value is 3 |
| UINT8 ScanMaxBssidNum; //from 4 to 10, and the default value is 5 |
| UINT8 ScanTimeout; // uint:second and the default value is 25s |
| ScanPriority_te ScanPriority; //the prioprity of PS and wifi |
| }MMWFScanStartReq_ts; |
| |
| MMWFScanStartReq_ts gWifiScanCfg = {3,5,25,Ps_High}; |
| |
| RETURNCODE_T ciWifiCtrl( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| BOOL cmdValid = FALSE; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| *xid_p = atHandle; |
| |
| |
| DBGMSG(ciWifiCtrl, "ciWifiCtrl: atHandle = %d.\n", atHandle); |
| |
| switch (op) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*WIFICTRL=? */ |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*WIFICTRL:(0-3),(1-255),(4-255),(0-255),(0-255)" ); |
| break; |
| } |
| case TEL_EXT_GET_CMD: /* AT*WIFICTRL? */ |
| { |
| char rspBuf[50]; |
| sprintf(rspBuf,"*WIFICTRL:%d\r\n",g_wifi_curr_option); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, rspBuf); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*WIFICTRL=*/ |
| { |
| INT32 option = 0; |
| int scanRoundNum = 0; |
| int scanMaxBssidNum = 0; |
| int sacnTimeout = 0; |
| int scanPri = 0; |
| UINT8 para_index = 0; |
| UINT8 queryFlag = 1; |
| |
| |
| if(getExtValue( parameter_values_p, 0, (int *)&option, TEL_AT_WIFLCTRL_OPTION_MIN, TEL_AT_WIFLCTRL_OPTION_MAX, TEL_AT_WIFLCTRL_OPTION_DEFAULT) == TRUE) |
| { |
| g_wifi_curr_option = option; |
| if(1 == option) |
| cmdValid = TRUE; |
| else if(0 == option) |
| cmdValid = TRUE; |
| else if(2 == option) |
| { |
| for(para_index = 1; para_index< num_parameters; para_index++) |
| { |
| if(parameter_values_p[para_index].is_default == FALSE) |
| { |
| queryFlag = 0; |
| break; |
| } |
| } |
| |
| if(1 == queryFlag) |
| { |
| |
| char rspBuf[50]; |
| sprintf(rspBuf,"*WIFICTRL:%d,%d,%d,%d\r\n",gWifiScanCfg.ScanRoundNum,gWifiScanCfg.ScanMaxBssidNum,gWifiScanCfg.ScanTimeout,gWifiScanCfg.ScanPriority); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, rspBuf); |
| goto exit; |
| } |
| else |
| { |
| if(getExtValue( parameter_values_p, 1, (int *)&scanRoundNum, 1, 255, 3) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 2, (int *)&scanMaxBssidNum, 4, 255, 5) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 3, (int *)&sacnTimeout, 0, 255, 25) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 4, (int *)&scanPri, 0, 255, 0) == TRUE) |
| { |
| gWifiScanCfg.ScanRoundNum= (UINT8)scanRoundNum; |
| gWifiScanCfg.ScanMaxBssidNum= (UINT8)scanMaxBssidNum; |
| gWifiScanCfg.ScanTimeout= (UINT8)sacnTimeout; |
| gWifiScanCfg.ScanPriority= (ScanPriority_te)scanPri; |
| cmdValid = TRUE; |
| } |
| } |
| } |
| } |
| } |
| } |
| else if (3 == option) |
| cmdValid = TRUE; |
| else if (4 == option) |
| { |
| if(getExtValue( parameter_values_p, 1, (int *)&scanRoundNum, 1, 255, 3) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 2, (int *)&scanMaxBssidNum, 4, 255, 5) == TRUE) |
| { |
| if(getExtValue( parameter_values_p, 3, (int *)&sacnTimeout, 0, 255, 25) == TRUE) |
| { |
| gWifiScanCfg.ScanRoundNum= (UINT8)scanRoundNum; |
| gWifiScanCfg.ScanMaxBssidNum= (UINT8)scanMaxBssidNum; |
| gWifiScanCfg.ScanTimeout= (UINT8)sacnTimeout; |
| gWifiScanCfg.ScanPriority = (ScanPriority_te)0; |
| cmdValid = TRUE; |
| } |
| } |
| } |
| } |
| |
| if(cmdValid) |
| { |
| ret = Dev_WifiScan(atHandle, option, scanRoundNum, scanMaxBssidNum, sacnTimeout, scanPri); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| exit: |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| |
| return(rc); |
| } |
| #endif |
| |
| /************************************************************************************ |
| * F@: ciOverheat - GLOBAL API for AT*OVERHEAT -command |
| * |
| */ |
| RETURNCODE_T ciOverheat( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| //DBGMSG(ciOverheat, "ciAntennaTuner: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*OVERHEAT= */ |
| { |
| int Val = 0; |
| |
| if ( getExtValue( parameter_values_p, 0, &Val, TEL_AT_OVERHEAT_0_VAL_MIN, TEL_AT_OVERHEAT_0_VAL_MAX, TEL_AT_OVERHEAT_0_VAL_DEFAULT ) == TRUE ) |
| { |
| ret = DEV_SetOverHeat(atHandle, (UINT8)Val); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| break; |
| } |
| |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciVoltageFreq - GLOBAL API for AT*VOLTAGEFREQ -command |
| * |
| */ |
| RETURNCODE_T ciVoltageFreq( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*VOLTAGEFREQ= */ |
| { |
| int Val = 0; |
| |
| if ( getExtValue( parameter_values_p, 0, &Val, TEL_AT_VOLTAGEFREQ_0_VAL_MIN, TEL_AT_VOLTAGEFREQ_0_VAL_MAX, TEL_AT_VOLTAGEFREQ_0_VAL_DEFAULT ) == TRUE ) |
| { |
| ret = DEV_SetVoltageFreq(atHandle, (UINT8)Val); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| } |
| break; |
| } |
| |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| #ifdef NR_POSITION_SUPPORT |
| |
| /************************************************************************************ |
| * F@: ciPositionFunc - GLOBAL API for GCF AT*POSFUN -command |
| * |
| */ |
| RETURNCODE_T ciPositionFunc( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| |
| case TEL_EXT_SET_CMD: /* AT*POSFUN = */ |
| { |
| int cmd=0; |
| int id = 0; |
| int nw_mode = 0; |
| int segment_total_num = 0; |
| int segment_sequence_num = 0; |
| INT16 len = 0; |
| CHAR data[TEL_AT_POSFUN_4_DATA_MAX_LEN + ATCI_NULL_TERMINATOR_LENGTH]; |
| BOOL cmdValid = FALSE; |
| |
| if( getExtValue( parameter_values_p, 0, &cmd, TEL_AT_POSFUN_0_CMD_VAL_MIN,TEL_AT_POSFUN_0_CMD_VAL_MAX, TEL_AT_POSFUN_0_CMD_VAL_DEFAULT ) == TRUE ) |
| { |
| if( getExtValue( parameter_values_p, 1, &nw_mode, TEL_AT_POSFUN_1_NW_MODE_VAL_MIN,TEL_AT_POSFUN_1_NW_MODE_VAL_MAX, TEL_AT_POSFUN_1_NW_MODE_VAL_DEFAULT ) == TRUE ) |
| { |
| if( getExtValue( parameter_values_p, 2, &id, TEL_AT_POSFUN_2_ID_VAL_MIN,TEL_AT_POSFUN_2_ID_VAL_MAX, TEL_AT_POSFUN_2_ID_VAL_DEFAULT ) == TRUE ) |
| { |
| if( getExtValue( parameter_values_p, 3, &segment_total_num, TEL_AT_POSFUN_3_SEGMENT_NUM_VAL_MIN,TEL_AT_POSFUN_3_SEGMENT_NUM_VAL_MAX, TEL_AT_POSFUN_3_SEGMENT_NUM_VAL_DEFAULT) == TRUE ) |
| { |
| if( getExtValue( parameter_values_p, 4, &segment_sequence_num, TEL_AT_POSFUN_3_SEGMENT_NUM_VAL_MIN,TEL_AT_POSFUN_3_SEGMENT_NUM_VAL_MAX, TEL_AT_POSFUN_3_SEGMENT_NUM_VAL_DEFAULT) == TRUE ) |
| { |
| ERRMSG(ciPositionFunc1,"%s: nw_mode %d, id %d, segment_total_num %d, segment_sequence_num %d", __FUNCTION__, nw_mode, id, segment_total_num, segment_sequence_num); |
| if( getExtString(parameter_values_p, 5, data, TEL_AT_POSFUN_4_DATA_MAX_LEN, &len, TEL_AT_POSFUN_4_DATA_DEFAULT) == TRUE) |
| { |
| cmdValid = TRUE; |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| if(cmd == 0) //get command |
| { |
| switch(id) |
| { |
| case CI_DEV_POSITION_ECID_MEAS: |
| ret = Dev_PosGet_ECID_MEAS(atHandle, (UINT8)nw_mode, data); |
| break; |
| |
| case CI_DEV_POSITION_MULTI_RTT_MEAS: |
| ret = Dev_PosGet_MULTI_RTT_MEAS(atHandle, (UINT8)nw_mode, (UINT8)segment_total_num, (UINT8)segment_sequence_num, data); |
| break; |
| |
| case CI_DEV_POSITION_DLAOD_MEAS: |
| ret = Dev_PosGet_DLAOD_MEAS(atHandle, (UINT8)nw_mode, (UINT8)segment_total_num, (UINT8)segment_sequence_num, data); |
| break; |
| |
| case CI_DEV_POSITION_DLTDOA_MEAS: |
| ret = Dev_PosGet_DLTDOA_MEAS(atHandle, (UINT8)nw_mode, (UINT8)segment_total_num, (UINT8)segment_sequence_num, data); |
| break; |
| |
| case CI_DEV_POSITION_POSSIB_MAPPING: |
| ret = Dev_PosGet_POSSIB_MAPPING(atHandle, (UINT8)nw_mode, (UINT8)segment_total_num, (UINT8)segment_sequence_num, data); |
| break; |
| |
| case CI_DEV_POSITION_POSSIB_INFO_ACQUIRE: |
| ret = Dev_PosGet_POSSIB_INFO_ACQUIRE(atHandle, (UINT8)nw_mode, (UINT8)segment_total_num, (UINT8)segment_sequence_num, data); |
| break; |
| |
| case CI_DEV_POSITION_POSSIB_INFO_VALIDITY: |
| ret = Dev_PosGet_POSSIB_INFO_VALIDITY(atHandle, (UINT8)nw_mode, (UINT8)segment_total_num, (UINT8)segment_sequence_num, data); |
| break; |
| |
| case CI_DEV_POSITION_POSSIB_ENC_KEY: |
| ret = Dev_PosGet_POSSIB_ENC_KEY(atHandle, (UINT8)nw_mode, (UINT8)segment_total_num, (UINT8)segment_sequence_num, data); |
| break; |
| |
| default: |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| else // stop command |
| { |
| switch(id) |
| { |
| case CI_DEV_POSITION_MULTI_RTT_MEAS: |
| case CI_DEV_POSITION_DLAOD_MEAS: |
| case CI_DEV_POSITION_DLTDOA_MEAS: |
| case CI_DEV_POSITION_POSSIB_INFO_ACQUIRE: |
| ret = Dev_PosStop_Common_Req(atHandle, (UINT8)id, (UINT8)nw_mode, (UINT8)segment_total_num, (UINT8)segment_sequence_num, data); |
| break; |
| |
| default: |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*POSFUN? */ |
| case TEL_EXT_ACTION_CMD: /* AT*POSFUN */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| #endif |
| |
| #endif |
| |
| /************************************************************************************ |
| * F@: ciSocTemp - GLOBAL API for AT*SELECTSIMSLOT command |
| * |
| */ |
| RETURNCODE_T ciSELECTSIMSLOT( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| |
| UNUSEDPARAM(command_name_p); |
| UNUSEDPARAM(parameter_values_p); |
| UNUSEDPARAM(num_parameters); |
| UNUSEDPARAM(info_text_p); |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| /* |
| * Put parser index into the variable |
| */ |
| *xid_p = atHandle; |
| |
| int simSlot=0; |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_GET_CMD: /* AT*SELECTSIMSLOT? */ |
| { |
| ret = DEV_GetSimSlot(atHandle); |
| break; |
| } |
| case TEL_EXT_SET_CMD: /* AT*SELECTSIMSLOT= */ |
| { |
| if(getExtValue(parameter_values_p, 0, &simSlot, 0, 1, 0) == TRUE) |
| { |
| ret = DEV_SetSimSlot(atHandle, simSlot); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| #if defined(ATCMD_UNIFY_CI) || defined(ATCMD_1802S_CI)|| defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) |
| #define BLACK_CELL_INFO_LENGTH 300 |
| RETURNCODE_T ciBLACKCELL(const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| int cmd = 0; |
| int nwMode = 0; |
| INT16 cellInfoLen = 0; |
| char *cellInfoBuffer = NULL; |
| *xid_p = atHandle; |
| |
| DBGMSG(ciCAG, "%s: atHandle = %d.\n", __FUNCTION__, atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*BLACKCELL= */ |
| { |
| if(getExtValue(parameter_values_p, 0, &cmd, 0, CI_DEV_CMD_NUM-1, 0) == TRUE) |
| { |
| if(getExtValue(parameter_values_p, 1, &nwMode, 0, CI_DEV_NUM_EM_NETWORKS-1, 0) == TRUE) |
| { |
| cellInfoBuffer = utlCalloc(1, BLACK_CELL_INFO_LENGTH); |
| if (cellInfoBuffer == NULL) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); |
| return utlFAILED; |
| } |
| |
| if(getExtString(parameter_values_p, 2, cellInfoBuffer, BLACK_CELL_INFO_LENGTH - 1, &cellInfoLen, NULL) == TRUE) |
| { |
| if((cellInfoLen == 0) || (strcasecmp(cellInfoBuffer, "") == 0) ) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| else |
| ret = Dev_SetBlackCell(atHandle, cmd, nwMode, cellInfoBuffer, cellInfoLen); |
| |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| |
| utlFree(cellInfoBuffer); |
| cellInfoBuffer = NULL; |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| |
| |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*BLACKCELL? */ |
| { |
| ret = Dev_GetBlackCell(atHandle); |
| break; |
| } |
| |
| default: |
| { |
| ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciCSCO - GLOBAL API for GCF AT*CSCO command |
| * |
| */ |
| RETURNCODE_T ciCSCO( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| //UNUSEDPARAM(command_name_p) |
| //UNUSEDPARAM(num_parameters) |
| //UNUSEDPARAM(info_text_p) |
| //UNUSEDPARAM(xid_p) |
| //UNUSEDPARAM(arg_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| |
| *xid_p = atHandle; |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_TEST_CMD: /* AT*CSCO=? */ |
| { |
| /* No CI primitive for this: print hard-coded reply */ |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, (char *)"*CSCO=<offset_scell>,<offset_scell_qual>,<offset_ncell_lte>,<offset_ncell_lte_qual>,<offset_ncell_umts>,<offset_ncell_umts_qual>,<offset_ncell_gsm>" ); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*CSCO= */ |
| { |
| UINT32 offset_scell = 0, offset_scell_qual = 0, offset_ncell_lte = 0, offset_ncell_lte_qual = 0, offset_ncell_umts = 0, offset_ncell_umts_qual = 0, offset_ncell_gsm = 0; |
| UINT32 paraStrLength = 0; |
| CHAR para1Str [10] = {0}, para2Str [10] = {0}, para3Str [10] = {0}, para4Str [10] = {0}, para5Str [10] = {0}, para6Str [10] = {0}, para7Str [10] = {0}; |
| BOOL cmdValid = FALSE; |
| |
| if ( getExtString(parameter_values_p, 0, para1Str, 5, ¶StrLength, NULL) == TRUE ) |
| { |
| if(paraStrLength) offset_scell = atoi(para1Str); |
| |
| if ( getExtString(parameter_values_p, 1, para2Str, 5, ¶StrLength, NULL) == TRUE ) |
| { |
| if(paraStrLength) offset_scell_qual = atoi(para2Str); |
| |
| if ( getExtString(parameter_values_p, 2, para3Str, 5, ¶StrLength, NULL) == TRUE ) |
| { |
| if(paraStrLength) offset_ncell_lte = atoi(para3Str); |
| |
| if ( getExtString(parameter_values_p, 3, para4Str, 5, ¶StrLength, NULL) == TRUE ) |
| { |
| if(paraStrLength) offset_ncell_lte_qual = atoi(para4Str); |
| |
| if ( getExtString(parameter_values_p, 4, para5Str, 5, ¶StrLength, NULL) == TRUE ) |
| { |
| if(paraStrLength) offset_ncell_umts = atoi(para5Str); |
| |
| if ( getExtString(parameter_values_p, 5, para6Str, 5, ¶StrLength, NULL) == TRUE ) |
| { |
| if(paraStrLength) offset_ncell_umts_qual = atoi(para6Str); |
| |
| if ( getExtString(parameter_values_p, 6, para7Str, 5, ¶StrLength, NULL) == TRUE ) |
| { |
| if(paraStrLength) offset_ncell_gsm = atoi(para7Str); |
| |
| if( (offset_scell > -100 && offset_scell < 100) && (offset_scell_qual > -20 && offset_scell_qual < 20) && |
| (offset_ncell_lte > -100 && offset_ncell_lte < 100) && (offset_ncell_lte_qual > -20 && offset_ncell_lte_qual < 20) && |
| (offset_ncell_umts > -100 && offset_ncell_umts < 100) && (offset_ncell_umts_qual > -20 && offset_ncell_umts_qual < 20) && |
| (offset_ncell_gsm > -100 && offset_ncell_gsm < 100) ) |
| { |
| cmdValid = TRUE; |
| ret = DEV_SetCellReselectConfigReq(atHandle, (INT8)offset_scell, (INT8)offset_scell_qual, (INT8)offset_ncell_lte, (INT8)offset_ncell_lte_qual, (INT8)offset_ncell_umts, (INT8)offset_ncell_umts_qual, (INT8)offset_ncell_gsm); |
| |
| WARNMSG(ciCSCO1, "%s ==== offset_scell=%d,offset_scell_qual=%d,offset_ncell_lte=%d,offset_ncell_lte_qual=%d,offset_ncell_umts=%d,offset_ncell_umts_qual=%d,offset_ncell_gsm=%d", |
| __FUNCTION__,offset_scell,offset_scell_qual,offset_ncell_lte,offset_ncell_lte_qual,offset_ncell_umts,offset_ncell_umts_qual,offset_ncell_gsm); |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| if (cmdValid != TRUE) |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: |
| ret = DEV_GetCellReselectConfigReq(atHandle); |
| break; |
| default: |
| { |
| ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL ); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| #endif |
| |
| /************************************************************************************ |
| * F@: cistarAVSIM - GLOBAL API for GCF AT*AVSIM -command |
| * |
| */ |
| typedef struct { |
| char VSIM_ICCID[10]; |
| UINT8 vsimIccidLen; |
| char VSIM_IMSI[8]; |
| UINT8 vsimImsiLen; |
| char VSIM_Para1[16]; |
| UINT8 vsimPara1Len; |
| char VSIM_Para2[16]; |
| UINT8 vsimPara2Len; |
| } VSIM_Para; |
| |
| static void VSIM_str2hex(int src_len, char *psrc, char *pdest, int dest_len) |
| { |
| int i = 0; |
| char highpart =0; |
| char lowpart = 0; |
| char result = 0; |
| |
| //ERRMSG(VSIM_str2hex0, "%s: src_len %d, dest_len %d", __func__,src_len, dest_len); |
| |
| if((psrc == NULL) || (pdest == NULL)) |
| return; |
| |
| if(src_len > dest_len<<1) |
| return; |
| |
| for (i = 0; i < src_len/2; i++) { |
| highpart = hexToNum(*psrc++); |
| //ERRMSG(VSIM_str2hex1, "%s: result[%d]: highpart %X\n", __FUNCTION__, i, highpart); |
| |
| lowpart = hexToNum(*psrc++); |
| // ERRMSG(VSIM_str2hex2, "%s: result[%d]: lowpart %X\n", __FUNCTION__, i, lowpart); |
| |
| result = (highpart<<4) | lowpart; |
| *pdest++ = result; |
| //ERRMSG(VSIM_str2hex3, "%s: result[%d]: %X, highpart %d, lowpart %d\n", __FUNCTION__, i, result, highpart, lowpart); |
| } |
| |
| if (src_len%2 == 1) |
| { |
| highpart = hexToNum(*psrc++); |
| |
| result = (highpart<<4) | 0xF; |
| *pdest++ = result; |
| } |
| } |
| |
| static char iccidStr[21] = {0}; |
| static char imsiStr[16] = {0}; |
| static char para1Str[33] = {0}; |
| static char para2Str[33] = {0}; |
| RETURNCODE_T cistarAVSIM( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| UINT16 iccidStrLen = 0, imsiStrLen = 0, para1StrLen = 0, para2StrLen = 0; |
| VSIM_Para *vsimPara = NULL; |
| |
| *xid_p = atHandle; |
| //INFOMSG(cistarAVSIM0, "cistarAVSIM: atHandle = %d.\n", atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| |
| case TEL_EXT_TEST_CMD: /* AT*AVSIM=? */ |
| { |
| //coverity[string_null:SUPPRESS] |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_OK,0,(char *)"*AVSIM: <iccid>,<imsi>,<para1>,<para2>\r\n"); |
| break; |
| } |
| |
| case TEL_EXT_SET_CMD: /* AT*AVSIM= */ |
| { |
| if(getExtString(parameter_values_p, 0, iccidStr, 21, &iccidStrLen, 0) == TRUE) |
| { |
| if(getExtString(parameter_values_p, 1, imsiStr, 16, &imsiStrLen, 0) == TRUE) |
| { |
| if(getExtString(parameter_values_p, 2, para1Str, 33, ¶1StrLen, 0) == TRUE) |
| { |
| if(getExtString(parameter_values_p, 3, para2Str, 33, ¶2StrLen, 0) == TRUE) |
| { |
| ERRMSG(cistarAVSIM0, "%s: iccidStr[%s], imsiStr[%s], para1Str[%s], para2Str[%s]",__FUNCTION__, iccidStr, imsiStr, para1Str, para2Str); |
| ERRMSG(cistarAVSIM1, "%s: iccidStrLen[%d], imsiStrLen[%d], para1StrLen[%d], para2StrLen[%d]", __FUNCTION__, iccidStrLen, imsiStrLen, para1StrLen, para2StrLen); |
| vsimPara = (VSIM_Para *)malloc(sizeof(VSIM_Para)); |
| if (vsimPara) |
| { |
| vsimPara->vsimIccidLen = iccidStrLen%2==0?(iccidStrLen/2):(iccidStrLen/2+1); |
| vsimPara->vsimImsiLen = imsiStrLen%2==0?(imsiStrLen/2):(imsiStrLen/2+1); |
| vsimPara->vsimPara1Len = para1StrLen/2; |
| vsimPara->vsimPara2Len = para2StrLen/2; |
| VSIM_str2hex(iccidStrLen, iccidStr, vsimPara->VSIM_ICCID, vsimPara->vsimIccidLen); |
| VSIM_str2hex(imsiStrLen, imsiStr, vsimPara->VSIM_IMSI, vsimPara->vsimImsiLen); |
| VSIM_str2hex(para1StrLen, para1Str, vsimPara->VSIM_Para1, vsimPara->vsimPara1Len); |
| VSIM_str2hex(para2StrLen, para2Str, vsimPara->VSIM_Para2, vsimPara->vsimPara2Len); |
| ret = DEV_SetAVSIM(atHandle, (void *)vsimPara, sizeof(VSIM_Para)); |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, 0, "malloc fail"); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT*AVSIM? */ |
| { |
| char resp_buf[128] = {0}; |
| memset(resp_buf, '\0', 128); |
| snprintf(resp_buf, sizeof(resp_buf)-1, "*AVSIM:%s,%s,%s,%s", iccidStr, imsiStr, para1Str, para2Str); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, resp_buf); |
| break; |
| } |
| case TEL_EXT_ACTION_CMD: /* AT*AVSIM */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| |
| if (vsimPara) |
| { |
| free(vsimPara); |
| vsimPara = NULL; |
| } |
| return(rc); |
| |
| } |
| |
| char manufactureName[10]="ASR"; |
| char HWVersionS[20] = "EVB_V2R2"; |
| /************************************************************************************ |
| * F@: ciREADVER - GLOBAL API for GCF AT*READVER command |
| * |
| */ |
| RETURNCODE_T ciREADVER( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| /* |
| * Put parser index into the variable |
| */ |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| char buf[200]; |
| |
| *xid_p = atHandle; |
| |
| FILE *fp = fopen("/etc/mversion","r"); |
| if(NULL == fp){ |
| WARNMSG(ciREADVER,"open file failed!"); |
| return false; |
| } |
| |
| memset(buf, 0, sizeof(buf)); |
| fgets(buf,200,fp); |
| buf[199] = '\0'; |
| fclose(fp); |
| |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_ACTION_CMD: /* AT*READVER */ |
| { |
| char tmpBuf[512]; |
| #if !defined(ATCMD_1901_CI) && !defined(ATCMD_1903_CI) |
| snprintf(tmpBuf, sizeof(tmpBuf) - 1,"*READVER: \r\nSW_Version: %s\r\n\r\nBaseband_Version: %s\r\n%s\r\n\r\nHW_Version: %s by %s\r\n", |
| buf,internalRevisionId, buildTimeStr, |
| HWVersionS,manufactureName); |
| #else |
| //KSTR_1.082.010X_A01901_::KESTREL_NLWG_M16_A0_GRF_MSA_1.082.010:: |
| char openwrt_ver[16] = { 0 }; |
| char project_ver[32] = { 0 }; |
| char other_ver[64] = { 0 }; |
| |
| if (strcmp(internalRevisionId, "unknown") != 0) |
| { |
| sscanf(internalRevisionId, "%[^_]_%[^_]_%s", openwrt_ver, project_ver, other_ver); |
| project_ver[5] = 0; |
| } |
| else |
| strcpy(project_ver, "unknown"); |
| |
| #ifndef ATCMD_1903_CI |
| #ifndef CI_RELEASE_FLAG |
| snprintf(tmpBuf, sizeof(tmpBuf) - 1,"*READVER: \r\nSW_Version: KSTR_%s\r\nBaseband_Version: KSTR_%s\r\nHW_Version: EVB_2.2 by %s\r\n", |
| project_ver,project_ver,manufactureName); |
| #else |
| snprintf(tmpBuf, sizeof(tmpBuf) - 1,"*READVER: \r\nSW_Version: %s\r\n\r\nBaseband_Version: %s\r\n%s\r\n\r\nHW_Version: %s by %s\r\n", |
| buf,internalRevisionId, buildTimeStr, |
| HWVersionS,manufactureName); |
| #endif |
| #else |
| snprintf(tmpBuf, sizeof(tmpBuf) - 1,"*READVER: \r\nSW_Version: LPW_%s\r\nBaseband_Version: LPW_%s\r\nHW_Version: EVB_V1R0 by %s\r\n", |
| project_ver,project_ver,manufactureName); |
| #endif |
| |
| #endif |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, tmpBuf); |
| break; |
| } |
| default: |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL ); |
| break; |
| } |
| |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciSENDIND - GLOBAL API for AT*IND command |
| * |
| */ |
| RETURNCODE_T ciSENDIND( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| /* |
| * Put parser index into the variable |
| */ |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| TelAtParserID sAtpIndex = *(TelAtParserID *)arg_p; |
| char *indBuf = NULL; |
| INT16 indLen = 0; |
| UINT32 IndHandler = IND_REQ_HANDLE; |
| |
| UINT8 sendIndFlag = 1; |
| |
| *xid_p = atHandle; |
| |
| if (!GET_SIM1_FLAG(atHandle)) { |
| IndHandler = IND_REQ_HANDLE; |
| } else { |
| IndHandler = IND_REQ_HANDLE_1; |
| } |
| |
| indBuf = (char*)calloc(1, 1024); |
| if(indBuf == NULL) |
| return RESULT_CODE_NULL; |
| /* |
| * process operation |
| */ |
| switch ( op ) |
| { |
| case TEL_EXT_SET_CMD: /* AT*IND= */ |
| { |
| if (getExtString(parameter_values_p, 0, indBuf, 1024, &indLen, NULL) == TRUE) |
| { |
| ATRESP(IndHandler, 0, 0, indBuf); |
| ret = ATRESP(atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| |
| break; |
| } |
| default: |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL ); |
| break; |
| } |
| |
| free(indBuf); |
| indBuf = NULL; |
| |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| |
| /************************************************************************************ |
| * F@: ciEEH - GLOBAL API for AT*EEH command |
| * |
| */ |
| extern configtype zconfigtype[]; |
| RETURNCODE_T ciEEH( |
| const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| INT16 StrLen = 0; |
| *xid_p = atHandle; |
| int action = 0; |
| FILE *configFile = NULL; |
| CHAR returnStr[20] = {0}; |
| |
| //DBGMSG(ciEEH, "%s: atHandle = %d.\n", __FUNCTION__, atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*EEH= */ |
| { |
| if(getExtValue(parameter_values_p, 0, &action, 0, 1, 0) == TRUE) |
| { |
| DBGMSG(ciEEH0, "%s: action:%d", __FUNCTION__, action); |
| if(action == 1) |
| { |
| ERRMSG(ciEEH1, "%s: restart EEH", __FUNCTION__); |
| |
| //system("killall eeh"); //kill eeh |
| //system("/bin/eeh -M yes &"); //restart eeh |
| executeShellCMD("killall eeh", returnStr); |
| executeShellCMD("/bin/eeh -M yes &", returnStr); |
| |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| |
| break; |
| } |
| |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| /************************************************************************************ |
| * F@: ciDevTest - GLOBAL API for AT*DEVTEST command |
| * |
| */ |
| RETURNCODE_T ciDevTest( |
| const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(parameter_values_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| *xid_p = atHandle; |
| int type = 0, cmd = 0; |
| CHAR returnStr[60] = {0}; |
| ASR_flag tag; |
| |
| DBGMSG(ciDevTest, "%s: atHandle = %d.\n", __FUNCTION__, atHandle); |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| case TEL_EXT_SET_CMD: /* AT*DEVTEST= */ |
| { |
| if(getExtValue(parameter_values_p, 0, &type, 0, 1, 0) == TRUE) |
| { |
| if(type == 1) // DDR test |
| { |
| if(getExtValue(parameter_values_p, 1, &cmd, 0, 1, 0) == TRUE) |
| { |
| if(cmd == 0) // start test |
| { |
| rc = get_asr_flag(&tag); |
| if(rc < 0) |
| { |
| WARNMSG(ciDevTest1, "read asr flag error\n"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); |
| } |
| else |
| { |
| tag.ddrt_state.bits.test_proc = 1; // start |
| tag.ddrt_state.bits.last_res = 1; //fail |
| |
| rc = write_asr_flag(&tag); |
| if (rc < 0) |
| { |
| WARNMSG(ciDevTest2, "write asr flag error\n"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); |
| } |
| else |
| { |
| //executeShellCMD("reboot", returnStr); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, NULL); |
| } |
| } |
| } |
| else if(cmd == 1) // query result |
| { |
| rc = get_asr_flag(&tag); |
| if(rc < 0) |
| { |
| WARNMSG(ciDevTest3, "read asr flag error\n"); |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); |
| } |
| else |
| { |
| UINT8 totalNum = 0; |
| UINT8 failNum = 0; |
| UINT8 result = 0; |
| |
| totalNum = tag.ddrt_state.bits.total_times; |
| failNum = tag.ddrt_state.bits.fail_times; |
| result = !((tag.ddrt_state.bits.test_proc == 0) && (tag.ddrt_state.bits.last_res == 0) && (totalNum > failNum)); |
| |
| WARNMSG(ciDevTest4, "test_proc %d\n", tag.ddrt_state.bits.test_proc); |
| WARNMSG(ciDevTest5, "last_res %d\n", tag.ddrt_state.bits.last_res); |
| WARNMSG(ciDevTest6, "total_times %d\n", tag.ddrt_state.bits.total_times); |
| WARNMSG(ciDevTest7, "fail_times %d\n", tag.ddrt_state.bits.fail_times); |
| |
| |
| sprintf(returnStr, "*devtest: result %d, pass %d, fail %d", result, totalNum - failNum, failNum); |
| ret = ATRESP( atHandle, NULL, 0, returnStr); |
| |
| if(!result) |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, "DDR PASS"); |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_OK, 0, "DDR FAIL"); |
| } |
| |
| } |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| else |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| |
| break; |
| } |
| |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| |
| |
| #if defined(ATCMD_UNIFY_CI) || defined(ATCMD_1901_CI) || defined(ATCMD_1903_CI) |
| |
| /************************************************************************************ |
| * F@: AtRegRW - GLOBAL API for AT*REGRW command |
| * |
| ************************************************************************************/ |
| RETURNCODE_T AtRegRW( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(* (TelAtParserID *) arg_p); |
| |
| if(devVersion > 0x0001) |
| { |
| CHAR aString[2]; |
| INT16 aStringLen; |
| CHAR RegAddr[12] = {'\0'}; |
| INT16 RegAddrLen; |
| CHAR RegData[12] = {'\0'}; |
| INT16 RegDataLen; |
| char *str; |
| UINT32 UIN32_RegAddr =0; |
| UINT32 UIN32_RegData =0; |
| |
| |
| *xid_p = atHandle; |
| |
| switch( op ) |
| { |
| case TEL_EXT_SET_CMD: |
| { |
| if (getExtString(parameter_values_p, 0, aString, 1, &aStringLen, NULL) == TRUE ) |
| { |
| |
| if ( !strcmp(aString,"r") || !strcmp(aString,"R")) |
| { |
| |
| // This is write request |
| // get write parameters |
| if (getExtString( parameter_values_p, 1, RegAddr, 10,&RegAddrLen, 0) == TRUE ) |
| { |
| CiDevPrimRwRegisterReq *pReqParms; |
| pReqParms = utlCalloc(1, sizeof(CiDevPrimRwRegisterReq)); |
| |
| if (pReqParms == NULL) |
| return CIRC_FAIL; |
| |
| |
| UIN32_RegAddr = strtoul(RegAddr,&str,16); |
| |
| memset(pReqParms, 0, sizeof(CiDevPrimRwRegisterReq)); |
| pReqParms->op = REG_READ; |
| pReqParms->addr = UIN32_RegAddr; |
| |
| ret = ciRequest( gAtciSvgHandle[CI_SG_ID_DEV], CI_DEV_PRIM_RW_REGISTER_REQ, |
| MAKE_CI_REQ_HANDLE(atHandle, CI_DEV_PRIM_RW_REGISTER_REQ), (void *)pReqParms ); |
| } |
| else |
| { |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_INVALID_PARAM,NULL); |
| } |
| |
| } |
| else if ( !strcmp(aString,"w")|| !strcmp(aString,"W")) |
| { |
| |
| // This is a read request with version and date |
| if (getExtString( parameter_values_p, 1, RegAddr, 10, &RegAddrLen, 0) == TRUE ) |
| { |
| |
| if (getExtString( parameter_values_p, 2, RegData, 10, &RegDataLen, 0) == TRUE ) |
| { |
| |
| CiDevPrimRwRegisterReq *pReqParms; |
| |
| pReqParms = utlCalloc(1, sizeof(CiDevPrimRwRegisterReq)); |
| |
| if (pReqParms == NULL) |
| return CIRC_FAIL; |
| |
| |
| UIN32_RegAddr = strtoul(RegAddr,&str,16); |
| UIN32_RegData = strtoul(RegData,&str,16); |
| |
| memset(pReqParms, 0, sizeof(CiDevPrimRwRegisterReq)); |
| pReqParms->op = REG_WRITE; |
| pReqParms->addr = UIN32_RegAddr; |
| pReqParms->value = UIN32_RegData; |
| |
| ret = ciRequest( gAtciSvgHandle[CI_SG_ID_DEV], CI_DEV_PRIM_RW_REGISTER_REQ, |
| MAKE_CI_REQ_HANDLE(atHandle, CI_DEV_PRIM_RW_REGISTER_REQ), (void *)pReqParms ); |
| } |
| else |
| { |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_INVALID_PARAM,NULL); |
| |
| } |
| } |
| else |
| { |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_INVALID_PARAM,NULL); |
| } |
| } |
| else |
| { |
| |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_INVALID_PARAM,NULL); |
| } |
| } |
| else |
| { |
| |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_INVALID_PARAM,NULL); |
| } |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: |
| { |
| |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_OK,0,0); |
| break; |
| } |
| |
| default: |
| { |
| //ret = OPER_NOT_SUPPORTED; |
| |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_INVALID_PARAM,NULL); |
| break; |
| } |
| } |
| } |
| else |
| ret = ATRESP( atHandle,ATCI_RESULT_CODE_CME_ERROR,CME_OPERATION_NOT_SUPPORTED,NULL); |
| |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| } |
| #endif |
| |
| #ifdef CUSTQ |
| #if defined(ATCMD_1903_CI) || defined(ATCMD_1901_CI) |
| #if !defined(CI_RELEASE_FLAG) |
| /************************************************************************************ |
| * F@: ciQnwPrefCfg - GLOBAL API for AT+QNWPREFCFG -command |
| * |
| */ |
| RETURNCODE_T ciQnwPrefCfg( const utlAtParameterOp_T op, |
| const char *command_name_p, |
| const utlAtParameterValue_P2c parameter_values_p, |
| const size_t num_parameters, |
| const char *info_text_p, |
| unsigned int *xid_p, |
| void *arg_p) |
| { |
| UNUSEDPARAM(command_name_p) |
| UNUSEDPARAM(num_parameters) |
| UNUSEDPARAM(info_text_p) |
| |
| RETURNCODE_T rc = INITIAL_RETURN_CODE; |
| CiReturnCode ret = CIRC_FAIL; |
| UINT32 atHandle = MAKE_AT_HANDLE(*(TelAtParserID *)arg_p); |
| |
| *xid_p = atHandle; |
| DBGMSG(ciQnwPrefCfg1,"%s: enter", __FUNCTION__); |
| |
| |
| /* |
| ** Check the format of the request. |
| */ |
| switch (op) |
| { |
| |
| case TEL_EXT_SET_CMD: /* AT+QNWPREFCFG= */ |
| { |
| int mode = 0; |
| CHAR setting[20] = {'\0'}; |
| INT16 settingLen = 0; |
| BOOL getFlag = FALSE; |
| BOOL cmdValid = FALSE; |
| if (getExtString( parameter_values_p, 0, setting, 20, &settingLen, 0) == TRUE ) |
| { |
| if((settingLen != 0) && (strcasecmp(setting,"ue_redcap_setting") == 0)) |
| { |
| if ( getExtValue( parameter_values_p, 1, &mode, 0, 2, 0 ) == TRUE ) |
| { |
| cmdValid = TRUE; |
| if(parameter_values_p[1].is_default == TRUE) |
| getFlag = TRUE; |
| } |
| } |
| } |
| |
| if (cmdValid == TRUE) |
| { |
| CHAR data[40] = {0}; |
| |
| if(getFlag == FALSE) //set operation |
| { |
| snprintf(data, 40, "0#%d#0#0", mode); |
| ret = Dev_SetComFeature(atHandle, (UINT8)CI_DEV_CMD_SET, (UINT16)CI_DEV_FT_SET_UE_MODE, data, 0, NULL); |
| } |
| else //get operation |
| { |
| ret = Dev_GetComFeature(atHandle, (UINT16)CI_DEV_FT_SET_UE_MODE, 0, NULL); |
| } |
| |
| } |
| else |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); |
| } |
| |
| break; |
| } |
| |
| case TEL_EXT_GET_CMD: /* AT+QNWPREFCFG? */ |
| case TEL_EXT_ACTION_CMD: /* AT+QNWPREFCFG */ |
| default: |
| { |
| ret = ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL); |
| break; |
| } |
| } |
| |
| /* handle the return value */ |
| rc = HANDLE_RETURN_VALUE(ret); |
| return(rc); |
| |
| } |
| #endif |
| #endif |
| #endif |
| |
| |