/*============================================================================ Copyright (c) 2022 Quectel Wireless Solution, Co., Ltd. All Rights Reserved. Quectel Wireless Solution Proprietary and Confidential. =============================================================================*/ /*=========================================================================== EDIT HISTORY FOR MODULE 此文件是用于实现移远的ci处理防止影响原厂的ci返回 WHEN WHO WHAT, WHERE, WHY ---------- ------------ ---------------------------------------------------- 01/04/2024 pony.ma create =============================================================================*/ #include "ci_dev.h" #include "quec_network.h" #include "teldef.h" #include "quec_atcmd_general.h" #include "quec_debug.h" #include "dev_api.h" extern UINT64 qcfg_cmd_type_bitmask; extern UINT64 quec_get_gsm_band(void); extern UINT64 quec_get_wcdma_band(void); extern UINT64 quec_get_lte_band(void); extern UINT64 quec_get_lte_band_ext(void); extern UINT64 qcfg_band[3]; extern void checkDevRet( CiRequestHandle reqHandle, CiDevRc result ); #ifdef QUECTEL_AT_QCFG_SUPPORT typedef struct { UINT64 quec_band; UINT32 asr_band; }quectel_band_type; quectel_band_type quectel_band_tbl_gsm[] = { {QUEC_BAND_GSM_900, ASR_BAND_EGSM_900}, {QUEC_BAND_GSM_1800, ASR_BAND_GSM_1800}, {QUEC_BAND_GSM_850, ASR_BAND_GSM_850}, {QUEC_BAND_GSM_1900, ASR_BAND_GSM_1900} }; quectel_band_type quectel_band_tbl_umts[] = { {QUEC_BAND_WCDMA_2100, ASR_BAND_UMTS_BAND1}, {QUEC_BAND_WCDMA_1900, ASR_BAND_UMTS_BAND2}, {QUEC_BAND_WCDMA_850, ASR_BAND_UMTS_BAND5}, {QUEC_BAND_WCDMA_900, ASR_BAND_UMTS_BAND8}, {QUEC_BAND_WCDMA_800, ASR_BAND_UMTS_BAND6}, {QUEC_BAND_WCDMA_1700, ASR_BAND_UMTS_BAND4} }; quectel_band_type quectel_band_tbl_lteh[] = { {QUEC_BAND_LTE_BAND33, ASR_BAND_LTE_BAND33}, {QUEC_BAND_LTE_BAND34, ASR_BAND_LTE_BAND34}, {QUEC_BAND_LTE_BAND38, ASR_BAND_LTE_BAND38}, {QUEC_BAND_LTE_BAND39, ASR_BAND_LTE_BAND39}, {QUEC_BAND_LTE_BAND40, ASR_BAND_LTE_BAND40}, {QUEC_BAND_LTE_BAND41, ASR_BAND_LTE_BAND41} }; quectel_band_type quectel_band_tbl_lte_ext[] = { {QUEC_BAND_LTE_BAND65, ASR_BAND_LTE_BAND65}, {QUEC_BAND_LTE_BAND66, ASR_BAND_LTE_BAND66}, {QUEC_BAND_LTE_BAND72, ASR_BAND_LTE_BAND72} }; typedef struct { UINT8 net_mode; //which is used to record the support mode UINT8 pref_mode; //which is used to record the prefer mode UINT8 update_flag; //which is used to record if it the mode had been update UINT8 gprsattach; UINT32 gsm_band; UINT32 umts_band; UINT32 lte_band_h; UINT32 lte_band_l; UINT32 lte_band_ext; UINT8 service_domain; UINT8 roamservice; UINT8 operation; UINT8 atp_index; }QuecNetModeCfgType; typedef enum { QUE_MODE_BIT_GSM = 0x0004, QUE_MODE_BIT_UMTS = 0x0008, QUE_MODE_BIT_LTE = 0x0010, #if QUEC_LTE_SUPPORT QUE_MODE_BIT_ALL = (QUE_MODE_BIT_GSM | QUE_MODE_BIT_UMTS | QUE_MODE_BIT_LTE), #else QUE_MODE_BIT_ALL = (QUE_MODE_BIT_GSM | QUE_MODE_BIT_UMTS), #endif }QUEC_MODE_BIT_MASK; typedef struct { UINT8 asr_mode; QUEC_MODE_BIT_MASK quec_mode_bitmask; }quectel_mode_match; #if QUEC_LTE_SUPPORT QuecNetModeCfgType QuecNetModeCfg = {CI_DEV_NW_GSM_UMTS_LTE,CI_DEV_NW_GSM_UMTS_LTE,0,1,0xFF,0xFF,0xFF,0xFF,0xFF,2,1,0xFF,0xFF}; #else QuecNetModeCfgType QuecNetModeCfg = {CI_DEV_NW_GSM_UMTS,CI_DEV_NW_GSM_UMTS,0,1,0xFF,0xFF,0xFF,0xFF,0xFF,2,1,0xFF,0xFF}; #endif UINT8 quec_match_mode_srdomain(UINT8 *net_mode, UINT8 *pref_mode, UINT8 *srdomain) { UINT8 ret=1; Network_Info_Log("net_mode=%d,pref_mode=%d,srdomain=%d",*net_mode,*pref_mode,*srdomain); if( *srdomain == 0)//set cs only we need to blind LTE { switch (*net_mode) { case CI_DEV_NW_GSM_LTE: *net_mode = CI_DEV_NW_GSM; break; case CI_DEV_NW_UMTS_LTE: *net_mode = CI_DEV_NW_UMTS; break; case CI_DEV_NW_GSM_UMTS_LTE: *net_mode = CI_DEV_NW_GSM_UMTS; break; case CI_DEV_NW_LTE: Network_Info_Log("ERROR CS ONLY IN LTE ONLY MODE!!!!!!!!"); ret=0; break; default: //do nothing break; } //set cs only we need to blind pref mode LTE to net mode if(*pref_mode == CI_DEV_NW_LTE) { *pref_mode = *net_mode; } } else { // *net_mode=QuecNetModePref.net_mode; // *pref_mode=QuecNetModePref.pref_mode; } Network_Info_Log("net_mode=%d,pref_mode=%d,srdomain=%d",*net_mode,*pref_mode,*srdomain); return ret; } quectel_mode_match quectel_match_nwmode_with_band_table[] = { {CI_DEV_NW_GSM, QUE_MODE_BIT_GSM}, {CI_DEV_NW_UMTS, QUE_MODE_BIT_UMTS}, {CI_DEV_NW_LTE, QUE_MODE_BIT_LTE}, {CI_DEV_NW_GSM_UMTS, (QUEC_MODE_BIT_MASK)(QUE_MODE_BIT_GSM | QUE_MODE_BIT_UMTS)}, {CI_DEV_NW_GSM_LTE, (QUEC_MODE_BIT_MASK)(QUE_MODE_BIT_GSM | QUE_MODE_BIT_LTE)}, {CI_DEV_NW_UMTS_LTE, (QUEC_MODE_BIT_MASK)(QUE_MODE_BIT_UMTS | QUE_MODE_BIT_LTE)}, {CI_DEV_NW_GSM_UMTS_LTE, (QUEC_MODE_BIT_MASK)(QUE_MODE_BIT_GSM | QUE_MODE_BIT_UMTS | QUE_MODE_BIT_LTE)} }; #ifndef QUEC_ARR_SIZE #define QUEC_ARR_SIZE(a) ( sizeof(a) / sizeof(a[0]) ) #endif UINT8 quec_match_nwmode_with_band(UINT8 nwmode) { UINT8 matched_nwmode=0xff; UINT16 quec_mode_bitmask=0; UINT16 quec_mode_bitmask_temp=0; UINT8 index=0; if(quec_get_lte_band() != 0) { quec_mode_bitmask |= QUE_MODE_BIT_LTE; } if(quec_get_lte_band_ext() != 0) { quec_mode_bitmask |= QUE_MODE_BIT_LTE; } if(quec_get_gsm_band() != 0) { quec_mode_bitmask |= QUE_MODE_BIT_GSM; } if(quec_get_wcdma_band() != 0) { quec_mode_bitmask |= QUE_MODE_BIT_UMTS; } for(index = 0; index < QUEC_ARR_SIZE(quectel_match_nwmode_with_band_table); index++) { if(nwmode == quectel_match_nwmode_with_band_table[index].asr_mode) { quec_mode_bitmask_temp = quectel_match_nwmode_with_band_table[index].quec_mode_bitmask; quec_mode_bitmask_temp &= quec_mode_bitmask; break; } } for(index = 0; index < QUEC_ARR_SIZE(quectel_match_nwmode_with_band_table); index++) { if(quec_mode_bitmask_temp == quectel_match_nwmode_with_band_table[index].quec_mode_bitmask) { matched_nwmode = quectel_match_nwmode_with_band_table[index].asr_mode; break; } } Network_Info_Log("nwmode=%d,matched_nwmode=%d,quec_mode_bitmask_temp=%x,quec_mode_bitmask=%x",nwmode,matched_nwmode,quec_mode_bitmask_temp,quec_mode_bitmask); return matched_nwmode; } int quec_update_mode_pref(QuecNetModeCfgType *p_quec_net_cfg) { //UINT8 ret=1; Network_Info_Log("net_mode[%d,%d]->[%d,%d], update_flag=%d",QuecNetModeCfg.net_mode,QuecNetModeCfg.pref_mode, p_quec_net_cfg->net_mode, p_quec_net_cfg->pref_mode,QuecNetModeCfg.update_flag); //the value is same we do not need to update if(memcmp(p_quec_net_cfg, &QuecNetModeCfg, sizeof(QuecNetModeCfgType)) == 0) { Network_Info_Log("net mode cfg same, nothing to update "); return 0; } else { p_quec_net_cfg->update_flag = 1; // if(QUEC_FAT_SUCCESS != quectel_nv_fat_write(QUEC_AT_MODE_BACKUP, p_quec_net_cfg, sizeof(QuecNetModeCfgType))) // { // atcmd_nw_log("net mode cfg save error !!! "); // QuecNetModeCfg.update_flag = 0; // return -1; // // } // if ((p_quec_net_cfg->net_mode != QuecNetModeCfg.pref_mode) || (p_quec_net_cfg->pref_mode != QuecNetModeCfg.pref_mode)) // { // if ((p_quec_net_cfg->net_mode >= CI_DEV_NW_LTE) && (p_quec_net_cfg->net_mode <= CI_DEV_NW_GSM_UMTS_LTE)) // { // atcmd_nw_log("update_lte set to 0"); // update_lte = 0; // } // #ifndef LTEONLY_THIN_SINGLE_SIM //锟斤拷锟斤拷锟斤拷2M Flash锟斤拷目锟斤拷支锟斤拷 // if ((p_quec_net_cfg->net_mode != CI_DEV_NW_LTE) && (p_quec_net_cfg->net_mode < CI_DEV_NUM_NW_MODES)) // { // atcmd_nw_log("update_2g_3g set to 0"); // update_2g_3g = 0; // } // #endif // } memcpy(&QuecNetModeCfg, p_quec_net_cfg, sizeof(QuecNetModeCfgType)); } return 1; } INT8 quec_mode_check(QuecNetModeCfgType *p_quec_net_cfg) { UINT8 mode_chk = p_quec_net_cfg->net_mode; UINT8 prefer_mode_chk = p_quec_net_cfg->pref_mode; UINT8 srv_domain_chk = p_quec_net_cfg->service_domain; if (quec_match_mode_srdomain(&mode_chk, &prefer_mode_chk, &srv_domain_chk) == 0) { Network_Info_Log("ERROR invalid mode or servicedomain!!!!!!!!"); return -1; } // connor 2019/01/25 return error when ipnut invalid a mode which the band is not support mode_chk = quec_match_nwmode_with_band(mode_chk); prefer_mode_chk = quec_match_nwmode_with_band(prefer_mode_chk); if (mode_chk == 0xff || prefer_mode_chk == 0xff) { Network_Info_Log(" mode set not match band config %d %d", mode_chk, prefer_mode_chk); return -1; } //we need to check nw mode and prefer mode, to ensure the prefer mode is the subset of nw mode //and prefer mode should be single mode switch (mode_chk) { case CI_DEV_NW_GSM: case CI_DEV_NW_UMTS: case CI_DEV_NW_LTE: if (mode_chk != prefer_mode_chk) { Network_Info_Log("nw/prefer mode not match %d %d, update prefer as nw mode", mode_chk, prefer_mode_chk); prefer_mode_chk = mode_chk; } break; case CI_DEV_NW_GSM_UMTS: if ((mode_chk != prefer_mode_chk) && (CI_DEV_NW_GSM != prefer_mode_chk) && (CI_DEV_NW_UMTS != prefer_mode_chk)) { Network_Info_Log("nw/prefer mode not match %d %d, update prefer as nw mode", mode_chk, prefer_mode_chk); prefer_mode_chk = mode_chk; } break; case CI_DEV_NW_GSM_LTE: if ((mode_chk != prefer_mode_chk) && (CI_DEV_NW_GSM != prefer_mode_chk) && (CI_DEV_NW_LTE != prefer_mode_chk)) { Network_Info_Log("nw/prefer mode not match %d %d, update prefer as nw mode", mode_chk, prefer_mode_chk); prefer_mode_chk = mode_chk; } break; case CI_DEV_NW_UMTS_LTE: if ((mode_chk != prefer_mode_chk) && (CI_DEV_NW_UMTS != prefer_mode_chk) && (CI_DEV_NW_LTE != prefer_mode_chk)) { Network_Info_Log("nw/prefer mode not match %d %d, update prefer as nw mode", mode_chk, prefer_mode_chk); prefer_mode_chk = mode_chk; } break; case CI_DEV_NW_GSM_UMTS_LTE: if ((mode_chk != prefer_mode_chk) && (CI_DEV_NW_GSM != prefer_mode_chk) && (CI_DEV_NW_UMTS != prefer_mode_chk) && (CI_DEV_NW_LTE != prefer_mode_chk)) { Network_Info_Log("nw/prefer mode not match %d %d, update prefer as nw mode", mode_chk, prefer_mode_chk); prefer_mode_chk = mode_chk; } break; default: Network_Info_Log("nw/prefer mode not match %d %d: nw mode is wrong!", mode_chk, prefer_mode_chk); return -1; } p_quec_net_cfg->net_mode = mode_chk; p_quec_net_cfg->pref_mode = prefer_mode_chk; //if the mode is valid, then to save it return quec_update_mode_pref(p_quec_net_cfg); } void quec_map_Quecband2Asrband(UINT64 quec_gw_band,UINT64 quec_lte_band,UINT64 quec_lte_band_ext,UINT32 *asr_gsm_band, UINT32 *asr_umts_band,UINT32 *asr_lte_band_h,UINT32 *asr_lte_band_l,UINT32 *asr_lte_band_ext) { Network_Info_Log("quec_map_Quecband2Asrband:quec_gw_band=0x%llx,quec_lte_band=0x%llx,0x%llx",quec_gw_band, quec_lte_band, quec_lte_band_ext); UINT8 index=0; for(index = 0; index < QUEC_ARR_SIZE(quectel_band_tbl_gsm); index++) { if((quec_gw_band & quectel_band_tbl_gsm[index].quec_band) != 0) { *asr_gsm_band |= quectel_band_tbl_gsm[index].asr_band; } } for(index = 0; index < QUEC_ARR_SIZE(quectel_band_tbl_umts); index++) { if((quec_gw_band & quectel_band_tbl_umts[index].quec_band) != 0) { *asr_umts_band |= quectel_band_tbl_umts[index].asr_band; } } for(index = 0; index < QUEC_ARR_SIZE(quectel_band_tbl_lteh); index++) { if((quec_lte_band & quectel_band_tbl_lteh[index].quec_band) != 0) { *asr_lte_band_h |= quectel_band_tbl_lteh[index].asr_band; } } *asr_lte_band_l |= quec_lte_band&0xFFFFFFFF;//band1-28 for(index = 0; index < QUEC_ARR_SIZE(quectel_band_tbl_lte_ext); index++) { if((quec_lte_band_ext & quectel_band_tbl_lte_ext[index].quec_band) != 0) { *asr_lte_band_ext |= quectel_band_tbl_lte_ext[index].asr_band; } } Network_Info_Log("quec_map_Quecband2Asrband:gsm_band=0x%x,umts_band=0x%x,lte_band_h=0x%x,lte_band_l=0x%x,lte_band_ext=0x%x",*asr_gsm_band,*asr_umts_band,*asr_lte_band_h,*asr_lte_band_l, asr_lte_band_ext); return; } void quec_map_AsrbandQuecband(UINT64 *quec_gw_band,UINT64 *quec_lte_band,UINT64 *quec_lte_band_ext,UINT32 asr_gsm_band ,UINT32 asr_umts_band,UINT32 asr_lte_band_h,UINT32 asr_lte_band_l,UINT32 asr_lte_band_ext) { UINT8 index=0; for(index = 0; index < QUEC_ARR_SIZE(quectel_band_tbl_gsm); index++) { if((asr_gsm_band & quectel_band_tbl_gsm[index].asr_band) != 0) { *quec_gw_band |= quectel_band_tbl_gsm[index].quec_band; } } for(index = 0; index < QUEC_ARR_SIZE(quectel_band_tbl_umts); index++) { if((asr_umts_band& quectel_band_tbl_umts[index].asr_band) != 0) { *quec_gw_band |= quectel_band_tbl_umts[index].quec_band; } } for(index = 0; index < QUEC_ARR_SIZE(quectel_band_tbl_lteh); index++) { if((asr_lte_band_h& quectel_band_tbl_lteh[index].asr_band) != 0) { *quec_lte_band |= quectel_band_tbl_lteh[index].quec_band; } } *quec_lte_band |=asr_lte_band_l; for(index = 0; index < QUEC_ARR_SIZE(quectel_band_tbl_lte_ext); index++) { if((asr_lte_band_ext& quectel_band_tbl_lte_ext[index].asr_band) != 0) { *quec_lte_band_ext |= quectel_band_tbl_lte_ext[index].quec_band; } } Network_Info_Log("quec_map_AsrbandQuecband:gw_band=0x%llx,lte_band=0x%llx,0x%llx", *quec_gw_band, *quec_lte_band, *quec_lte_band_ext); return; } #endif void quec_processGetBandModeConf(UINT32 atHandle, const void *paras) { CiDevPrimGetBandModeCnf* getBandModeCnf = (CiDevPrimGetBandModeCnf *)paras; char bandBuf[100]; INT8 mode_check_ret = -1; QuecNetModeCfgType quec_net_cfg_toWrite = {0}; memcpy(&quec_net_cfg_toWrite, &QuecNetModeCfg, sizeof(QuecNetModeCfgType)); Network_Info_Log("network mode:%d, prefer:%d ,srdomain:%d,roaming:%d,result=%d,bandPriority=%d,isLteDualLink=%d,qcfg_cmd_type_bitmask=%x", getBandModeCnf->networkMode, getBandModeCnf->preferredMode,getBandModeCnf->srvDomain, getBandModeCnf->roamingConfig,getBandModeCnf->result,getBandModeCnf->bandPriorityFlag, getBandModeCnf->isLteDualLink,qcfg_cmd_type_bitmask); Network_Info_Log("GSM:0x%x, UMTS:0x%x ,EUTRANH:0x%x,EUTRANL:0x%x,EUTRANExt=%x", getBandModeCnf->GSMBandMode, getBandModeCnf->UMTSBandMode,getBandModeCnf->EUTRANBandModeH,getBandModeCnf->EUTRANBandModeL,getBandModeCnf->EUTRANBandModeExt); if(getBandModeCnf->result == CIRC_DEV_SUCCESS) { if(getBandModeCnf->isLteDualLink) { switch(getBandModeCnf->networkMode) { case CI_DEV_NW_GSM_LTE: case CI_DEV_NW_UMTS_LTE: case CI_DEV_NW_GSM_UMTS_LTE: break; default: qcfg_cmd_type_bitmask=0; Network_Info_Log("isLteDualLink=%d networkMode=%d ERROR!", getBandModeCnf->isLteDualLink, getBandModeCnf->networkMode); ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); return; } } if (getBandModeCnf->networkMode == CI_DEV_NW_GSM) { } else if (getBandModeCnf->networkMode == CI_DEV_NW_UMTS) { } else if (getBandModeCnf->networkMode == CI_DEV_NW_GSM_UMTS) { } else if(getBandModeCnf->networkMode == CI_DEV_NW_LTE) { } else if(getBandModeCnf->networkMode == CI_DEV_NW_GSM_UMTS_LTE) { } else if(getBandModeCnf->networkMode == CI_DEV_NW_UMTS_LTE) { } else if(getBandModeCnf->networkMode == CI_DEV_NW_GSM_LTE) { } else { Network_Info_Log("networkMode=%d,bit=0x%X ERROR!", getBandModeCnf->networkMode, qcfg_cmd_type_bitmask); qcfg_cmd_type_bitmask=0; ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_UNKNOWN, NULL); return; } if(CHECK_BIT_SET(qcfg_cmd_type_bitmask ,QCFG_BAND_GET)) { UINT32 gsm_band=0; UINT32 umts_band=0; UINT64 quec_gw_band=0; UINT64 quec_lte_band=0; UINT64 quec_lte_band_ext=0; quec_map_AsrbandQuecband(&quec_gw_band,&quec_lte_band,&quec_lte_band_ext,getBandModeCnf->GSMBandMode,getBandModeCnf->UMTSBandMode,getBandModeCnf->EUTRANBandModeH,getBandModeCnf->EUTRANBandModeL,getBandModeCnf->EUTRANBandModeExt); //connor.wu 2018/12/13 fix the isuuse when the band is invalid it return ff but we expect it return 0 gsm_band=quec_get_gsm_band(); umts_band=quec_get_wcdma_band(); quec_gw_band=(quec_gw_band & (gsm_band | umts_band)); quec_lte_band=(quec_lte_band & quec_get_lte_band()); quec_lte_band_ext=(quec_lte_band_ext & quec_get_lte_band_ext()); #if !QUEC_LTE_SUPPORT sprintf((char *)bandBuf, "+QCFG: \"band\",0x%llx\r\n", quec_gw_band); #else if (quec_lte_band_ext > 0) { sprintf((char *)bandBuf, "+QCFG: \"band\",0x%llx,0x%llx%016llx\r\n", quec_gw_band, quec_lte_band_ext, quec_lte_band); } else { sprintf((char *)bandBuf, "+QCFG: \"band\",0x%llx,0x%llx\r\n", quec_gw_band, quec_lte_band); } #endif ATRESP(atHandle, ATCI_RESULT_CODE_OK, 0, bandBuf); BIT_CLR(qcfg_cmd_type_bitmask,QCFG_BAND_GET); } else if(CHECK_BIT_SET(qcfg_cmd_type_bitmask ,QCFG_BAND_SET)) { quec_net_cfg_toWrite.gsm_band = 0; quec_net_cfg_toWrite.umts_band = 0; quec_net_cfg_toWrite.lte_band_h = 0; quec_net_cfg_toWrite.lte_band_l = 0; quec_net_cfg_toWrite.lte_band_ext = 0; extern void quec_map_Quecband2Asrband(UINT64 quec_gw_band,UINT64 quec_lte_band,UINT64 quec_lte_band_ext,UINT32 *asr_gsm_band, UINT32 *asr_umts_band,UINT32 *asr_lte_band_h,UINT32 *asr_lte_band_l,UINT32 *asr_lte_band_ext); quec_map_Quecband2Asrband(qcfg_band[0],qcfg_band[1],qcfg_band[2],&(quec_net_cfg_toWrite.gsm_band),&(quec_net_cfg_toWrite.umts_band), &(quec_net_cfg_toWrite.lte_band_h),&(quec_net_cfg_toWrite.lte_band_l),&(quec_net_cfg_toWrite.lte_band_ext)); BIT_CLR(qcfg_cmd_type_bitmask,QCFG_BAND_SET); quec_net_cfg_toWrite.operation = QCFG_BAND_SET; quec_net_cfg_toWrite.atp_index = GET_ATP_INDEX(atHandle); mode_check_ret = quec_mode_check(&quec_net_cfg_toWrite); if (1 == mode_check_ret) { DEV_SetBandModeReq(atHandle, quec_net_cfg_toWrite.net_mode, quec_net_cfg_toWrite.pref_mode, quec_net_cfg_toWrite.gsm_band, quec_net_cfg_toWrite.umts_band, quec_net_cfg_toWrite.lte_band_h,quec_net_cfg_toWrite.lte_band_l, getBandModeCnf->roamingConfig, getBandModeCnf->srvDomain, getBandModeCnf->bandPriorityFlag, 0, quec_net_cfg_toWrite.lte_band_ext); } else if (0 == mode_check_ret) { ATRESP( atHandle, ATCI_RESULT_CODE_OK, NULL, NULL); return; } else { ATRESP( atHandle, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL); return; } } Network_Info_Log("processGetBandModeConf: qcfg_cmd_type_bitmask=%x",qcfg_cmd_type_bitmask); } else { qcfg_cmd_type_bitmask=0; checkDevRet(atHandle, getBandModeCnf->result); } return; }