[Feature][R305E][task-view-1773][project] Add R305E project

Change-Id: I35ae48d4057adc29786295fa3dea8e93f9747170
diff --git a/Makefile b/Makefile
index 0733ca6..b26f9a0 100755
--- a/Makefile
+++ b/Makefile
@@ -62,6 +62,7 @@
 	@echo example prj_cpe_aic8800dw : make AP_PRJ=prj_cpe PATH_PRJ=lynq/CPE_AIC8800DW
 	@echo example prj_mifi_min_aic8800dw : make AP_PRJ=prj_mifi_min_aic8800dw BOOT_PRJ=mifi_mini_64 PATH_PRJ=lynq/MIFI/ PACK_PRJ=prj_mifi
 	@echo example R305 : make AP_PRJ=prj_cpe_min BOOT_PRJ=ufi_mini PACK_PRJ=prj_cpe PATH_PRJ=lynq/R305
+	@echo example R305E: make AP_PRJ=prj_cpe_min BOOT_PRJ=ufi_mini PACK_PRJ=prj_cpe PATH_PRJ=lynq/R305 CUST=R305E
 	@echo example R306 : make AP_PRJ=prj_mifi_min BOOT_PRJ=mifi_mini_64 PACK_PRJ=prj_mifi PATH_PRJ=lynq/R306
 	@echo example CPE_COMMON : make AP_PRJ=prj_mifi_min BOOT_PRJ=mifi_mini_64 PACK_PRJ=prj_mifi PATH_PRJ=lynq/CPE_COMMON
 	@echo example R306-HKM : make AP_PRJ=prj_mifi_min BOOT_PRJ=mifi_mini_64 PACK_PRJ=prj_mifi PATH_PRJ=lynq/CPE_COMMON CUST=HKM
diff --git a/lynq/R305/R305E/ap/app/zte_comm/at_ctl/src/atconfig/ps_normal.c b/lynq/R305/R305E/ap/app/zte_comm/at_ctl/src/atconfig/ps_normal.c
new file mode 100755
index 0000000..801b3b1
--- /dev/null
+++ b/lynq/R305/R305E/ap/app/zte_comm/at_ctl/src/atconfig/ps_normal.c
@@ -0,0 +1,5858 @@
+

+/************************************************************************

+*¹¦ÄܽéÉÜ£ºat_ctlºÍPSÏà¹ØµÄʼþʵÏÖºÍÃüÁî´¦Àí½Ó¿Ú£¬°üÀ¨¿ª»ú×Ô¶¯²¦ºÅµÄʼþÁ÷¡¢web ui¾ßÌåµÄÒµÎñ´¦Àí

+*¸ºÔðÈË£º

+*ÐÞ¸ÄÈÕ£º

+*ÐÞ¸ÄÄÚÈÝ£º

+*°æ±¾ºÅ£º

+************************************************************************/

+

+#include "ps_normal.h"

+#include "ps_pdp.h"

+#include "at_context.h"

+#include <sys/time.h>

+#include <time.h>

+#include <limits.h>

+

+#include "rtc_timer.h"

+#if (APP_OS_TYPE == APP_OS_TOS)

+#include "zctrm_ext_locknet.h"

+#endif

+

+//bsim

+#include <openssl/aes.h>

+

+typedef struct

+{

+	unsigned int pubKeyRsaE[32];

+	unsigned int pubKeyRsaN[32];

+	unsigned int secureFlag;

+	unsigned int pubKeyHash[4];

+	unsigned int secureDevId[3];

+}T_ZDrvEfuse_Secure;

+

+#define EFUSE_IOC_MAGIC 	'E'

+#define EFUSE_GET_DATA 		_IOWR(EFUSE_IOC_MAGIC, 1, char *)

+#define PPPOE_CODE_LEN 		32 //webui limit 30

+

+static unsigned char atctl_aes_key[16] = {0};

+

+#define PROFILE_APN_LEN 65

+#define PROFILE_APN_AES_LEN 129

+

+static int apn_encrypt_code(void);

+static int ipv6apn_encrypt_code(void);

+//bsim end

+

+/*CNUMÉϱ¨*/

+typedef struct

+{

+    char    alpha[80];

+    char    number[80];

+    unsigned char  type;

+} T_zAt_CnumRes;

+

+struct time_info{

+	SINT32 time_zone;

+	SINT32 sav_time;

+	char univer_time[64];

+};

+

+//extern AT_PDP_ACT_REQ_INFO * g_pdp_set_info;

+psnormal_state psinfo={0};

+static T_zAt_Zsec_Res g_LockZsec = {0};

+static int cfun_state=0;//ÓÃÓÚ±ê¼Çcfun״̬

+static int g_plmnLen = 5;//ccmnc³¤¶È

+static char mccNum[10] 		= {0};

+static char mncNum[10] 		= {0};

+static int g_zUfi_Mode=-1;//ModeÉϱ¨±ä»¯£¬Óбä³É²Å²éѯSysinfo

+static int g_zUfi_SubMode=-1;//ModeÉϱ¨±ä»¯£¬Óбä³É²Å²éѯSysinfo

+static int g_zUfi_Stat=-1;//CEREG\CREG\CGREG±ä»¯£¬Óб仯²Å²éѯSysinfo

+static int g_isSearchingNetwork = FALSE;

+static int g_zUfi_canPdpDail = TRUE;

+static int g_zUfi_firstCsq = TRUE;

+static char *crsmrsp=NULL;//ÓÃÓڼǼcrsm»Ø¸´½á¹û

+static char *mactozssid=NULL;//¼Ç¼ÊÕµ½µÄMACµØÖ·

+static BOOL g_SimSlotFlag = TRUE;//¼Ç¼sim¿¨²åÈë°Î³ö״̬

+static int sysinfo_flag = 0;

+int g_modem_model = 0;

+int g_support_sms = 0;

+int g_support_pb = 0;

+int g_smspb_init = 0;//Éϱ¨pbÍê³É³õʼ»¯±êÖ¾ 0:δÉϱ¨ 1:ÒÑÉϱ¨

+int g_need_smspb_init = 0;//smsºÍpbÊÇ·ñ¿ÉÒÔ½øÐгõʼ»¯£¬Ã¿´Î¿ª»ú½öÄܽøÐÐÒ»´Î³õʼ»¯²Ù×÷£¬ÖÃΪ0ʱ±íʾ¿ÉÒÔ³õʼ»¯£¬Ò»µ©³õʼ»¯ºó£¬ÖÃΪ1

+#if (APP_OS_TYPE == APP_OS_TOS)

+extern T_zCtrm_LockListPara simLockListPara;

+extern T_zCtrm_SIMPara simPara;

+extern SINT32 g_Sec_Status;

+extern int crsm_reason;

+#endif

+extern struct defcid_mng_t g_defcid_mng;

+char imsi[50] = {0};

+//zdm ÇëÕ×·áÈ·ÈÏÊÇ·ñÐèҪͬ²½µ½AP²à

+//ºóÐøÓÃËøÍøÌæ´ú£¬ÆÕͨ°æ±¾²»Ëø

+char* zurdy_convert_cmd(void *msg,struct at_context *context)

+{   

+    char *at_str = NULL;

+    

+    at_str = (char *)malloc(20);

+    if(at_str == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    strcpy(at_str, "AT+ZSCHPLMN=1\r\n");

+    return at_str;

+}

+

+int zmmi_auto_act(char *at_paras ,int is_query_report)

+{

+	

+	char mode[10] = {0};

+	struct time_info timeinfo = {0};

+	struct tm set_tm = {0};

+	struct timeval time_tv = {0};

+	char temp1[256] = {0};

+	char temp2[256] = {0};

+	void *p[5] = {&timeinfo.time_zone,&timeinfo.sav_time,temp1,temp2,timeinfo.univer_time};

+	int time_zone = 0;

+	

+    cfg_get_item("sntp_time_set_mode", mode, sizeof(mode));

+	if(strcmp(mode, "manual") == 0)

+	{

+		at_print(AT_ERR,"zmmi_auto_act: do not need to nitz \n");

+		return AT_END;

+	}

+	parse_param2("%d,%d,%256s,%256s,%64s", at_paras, p);

+	time_zone = timeinfo.time_zone;// / 4;time_zoneµÄ¼ÆË㷽ʽ²»¶Ô£¬Èç¹ûÊ±ÇøÊÇ+22µÄ»°£¬¾Í»á¶ªÊ§0.5£¬¸Äµ½ÏÂÃæ³ý

+	set_tm.tm_isdst = timeinfo.sav_time;

+	if(0 == strlen(timeinfo.univer_time))

+	{

+		at_print(AT_ERR,"zmmi_auto_act,univer_time invalid");

+		return AT_END;

+	}

+	sscanf(timeinfo.univer_time,"%2d/%2d/%2d,%2d:%2d:%2d",&set_tm.tm_year,

+		&set_tm.tm_mon,&set_tm.tm_mday,&set_tm.tm_hour,&set_tm.tm_min,&set_tm.tm_sec);

+	

+	at_print(AT_ERR, "zmmi_auto_act, year:%d, month:%d, day:%d, hour:%d, min:%d, sec:%d, wday:%d \n", 

+		set_tm.tm_year, set_tm.tm_mon, set_tm.tm_mday, set_tm.tm_hour, set_tm.tm_min, set_tm.tm_sec, set_tm.tm_wday);

+

+	if(set_tm.tm_year < 0 || set_tm.tm_year > INT_MAX-1) // kw 3

+	{

+		set_tm.tm_year = 0;

+	}

+

+	if(set_tm.tm_mon < 0 || set_tm.tm_mon > INT_MAX-1)

+	{

+		set_tm.tm_mon = 0;

+	}

+

+		

+	set_tm.tm_year = set_tm.tm_year + 100;

+	set_tm.tm_mon = set_tm.tm_mon - 1;	

+

+	time_tv.tv_sec = mktime(&set_tm);

+	time_tv.tv_sec = time_tv.tv_sec +	time_zone * 3600 /4;

+		

+	

+	if (0 != settimeofday(&time_tv,NULL))

+	{

+		at_print(AT_ERR,"zmmi_auto_act,set time of system wrong");

+		return AT_END;

+	}

+	rtc_set_time(MODULE_ID_AT_CTL);

+	return AT_END;

+}

+

+char* normal_getsysconfigread()

+{

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+    sprintf(at_next,"AT^SYSCONFIG?\r\n");

+	return at_next;

+}

+

+/***********atÃüÁî»ñÈ¡****************/

+//pin/pukÂëÊ£Óà´ÎÊý²éѯÃüÁî

+char* normal_getzrapread()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+	if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+ZRAP?\r\n");

+	return at_next;

+}

+

+//pinÂë²éѯÃüÁî

+char* normal_getcpinread()

+{

+    char *at_next=NULL;

+    at_next=malloc(16);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,16);

+	sprintf(at_next,"AT+CPIN?\r\n");

+	return at_next;

+}

+

+//pinÂëÉèÖÃÃüÁî

+char* normal_getcpinset(char *pin)

+{

+    if(pin == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+	sprintf(at_next,"AT+CPIN=\"%s\"\r\n",pin);

+	return at_next;

+}

+

+//½âpukÂëÃüÁî

+char* normal_getcpukset(char *puk,char *newpin)

+{

+    if(puk == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+	sprintf(at_next,"AT+CPIN=\"%s\",\"%s\"\r\n",puk,newpin);

+	return at_next;

+}

+

+//IMEIºÅ»ñÈ¡ÃüÁî

+char* normal_getcgsn()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+CGSN\r\n");

+	return at_next;

+}

+

+//ZICCID»ñÈ¡

+char* normal_getziccid()

+{

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+	sprintf(at_next,"AT+ZICCID?\r\n");

+	return at_next;

+}

+

+//ÉèÖÃÓÐÏÞSIM¿¨·ÃÎÊ£¬µ±Ç°×÷ÓÃÖ÷ÒªÊÇ»ñÈ¡PLMNµÄλÊý

+char* normal_getcrsmset(char *param)

+{

+    if(param == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+	sprintf(at_next,"AT+CRSM=%s\r\n",param);

+	return at_next;

+}

+

+//IMSIºÅ»ñÈ¡

+char* normal_getcimi()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+CIMI\r\n");

+	return at_next;

+}

+

+//Óû§ºÅÂë»ñÈ¡£¬Ä¿Ç°·µ»ØµÄ¶àΪERROR

+char* normal_CnumRead()

+{

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+	sprintf(at_next,"AT+CNUM\r\n");

+    if(AT_CMD_MAX <= strlen(at_next)){softap_assert("");}

+	return at_next;

+}

+

+/*¸ù¾Ýµ±Ç°NVÖµ,·µ»ØsysconfigÉèÖÃÃüÁî*/

+char* normal_getsysconfigset()

+{

+    char *at_next=NULL;

+    int mode = ZAT_SYSCONFIG_MODE_AUTO;

+    int acqorder = ZAT_SYSCONFIG_PREF_ACQ_AUTO;

+	int roam = 1;

+    normal_getsysconfigsetParam(&mode, &acqorder, &roam);

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+    sprintf(at_next,"AT^SYSCONFIG=%d,%d,%d,2\r\n", mode, acqorder, roam);

+	return at_next;

+}

+

+/*¸ù¾Ýµ±Ç°NVÖµ,·µ»Øcgdcont PDPÉÏÏÂÎÄÉèÖÃÃüÁî*/

+char* normal_getcgdcontset(int cid)

+{

+    char *at_next=NULL;

+    char strPdptype[10] = {0};

+    char strAPN[APN_MAX_LEN] = {0};

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+    at_print(AT_DEBUG,"normal_getcgdcontset cid=%d\n",cid);

+    //ÉèÖÃipv4v6µÄÖ§³Ö

+    cfg_get_item(NV_PDP_TYPE,strPdptype,sizeof(strPdptype));

+    cfg_get_item(NV_WAN_APN,strAPN,sizeof(strAPN)); 

+    if(strcmp("IPV6", strPdptype) == 0 || strcmp(strPdptype,"IPv6") == 0)

+    {

+        strncpy(strPdptype, "IPV6",sizeof(strPdptype)-1);

+        cfg_get_item(NV_IPV6_WAN_APN,strAPN,sizeof(strAPN)); 

+    }

+    else if(strcmp(strPdptype,"IPV4V6") == 0 || strcmp(strPdptype,"IPv4v6") == 0)

+    {

+        strncpy(strPdptype, "IPV4V6",sizeof(strPdptype)-1);

+        cfg_get_item(NV_IPV6_WAN_APN,strAPN,sizeof(strAPN)); 

+    }

+    sprintf(at_next,"AT+CGDCONT=%d,\"%s\",\"%s\"\r\n", cid, strPdptype, strAPN);

+    return at_next;

+}

+

+/*¸ù¾Ýµ±Ç°NVÖµ,·µ»Øzgpcoauth¼øÈ¨ÉèÖÃÃüÁî*/

+char* normal_getzgpcoauthset(int cid)

+{

+    char *at_next=NULL;

+    char strAuthtype[10]             = {0};

+    char strPdptype[20 ]  = {0};

+    char strUsename[PDP_AUTH_USER_PWD_LENGTH]  = {0};

+    char strPawd[PDP_AUTH_USER_PWD_LENGTH] = {0};

+    int auth_type = -1;

+    at_print(AT_DEBUG,"normal_getzgpcoauthset cid=%d\n",cid);

+

+    cfg_get_item(NV_PDP_TYPE,strPdptype,sizeof(strPdptype));

+    

+    if(strcmp("IPV6", strPdptype) == 0 || strcmp(strPdptype,"IPv6") == 0)

+    {

+        cfg_get_item(NV_IPV6_PPP_AUTH_MODE,strAuthtype,sizeof(strAuthtype));

+    	cfg_get_item(NV_IPV6_PPP_USERNAME,strUsename,sizeof(strUsename));

+    	cfg_get_item(NV_IPV6_PPP_PASSWD,strPawd,sizeof(strPawd));

+    

+    }

+    else if(strcmp(strPdptype,"IPV4V6") == 0 || strcmp(strPdptype,"IPv4v6") == 0)

+    {

+        cfg_get_item(NV_IPV6_PPP_AUTH_MODE,strAuthtype,sizeof(strAuthtype));

+    	cfg_get_item(NV_IPV6_PPP_USERNAME,strUsename,sizeof(strUsename));

+    	cfg_get_item(NV_IPV6_PPP_PASSWD,strPawd,sizeof(strPawd));

+    }

+    else 

+    {

+

+        cfg_get_item(NV_PPP_AUTH_MODE,strAuthtype,sizeof(strAuthtype));

+        cfg_get_item(NV_PPP_USERNAME,strUsename,sizeof(strUsename));

+        cfg_get_item(NV_PPP_PASSWD,strPawd,sizeof(strPawd));

+    }

+    auth_type = normal_getauthtype(strAuthtype);

+

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+    sprintf(at_next,"AT+ZGPCOAUTH=%d,\"%s\",\"%s\",%d\r\n", cid, strUsename, strPawd, auth_type);

+    return at_next;

+}

+

+

+char* normal_getcfunset(char *cmdtype)

+{

+    char *at_next=NULL;

+

+    at_next=malloc(128);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,128);

+    if(cmdtype != ZUFI_NULL)//ÅжÏÊÇ¿ªÉ䯵»¹ÊǽøÈë·ÉÐÐģʽ²Ù×÷

+    {  

+        if(memcmp(cmdtype, ZAT_POWEROFF, strlen(ZAT_POWEROFF)) == 0)

+        {

+            cfun_state=0;

+        }

+        else if(memcmp(cmdtype, ZAT_AIRMODE, strlen(ZAT_AIRMODE)) == 0)

+        {

+            cfun_state=4;

+			cfg_set(NV_NETWORK_TYPE, "No Service");

+			cfg_set(NV_SUB_NETWORK_TYPE, "No Service");

+        }

+        else

+        {

+            cfun_state=1;

+        }

+    }

+	else

+	{

+        cfun_state=1;	

+	}

+	if(cfun_state == 1)

+    {   	    

+	   	sprintf(at_next,"AT+ZSCHPLMN=1;+CFUN=%d\r\n",cfun_state);

+    }

+	else

+	    sprintf(at_next,"AT+CFUN=%d\r\n",cfun_state);

+	cfg_set("cfun_work", "work");

+	return at_next;

+}

+

+//ÉèÖÃCGREGÖ÷¶¯Éϱ¨

+char* normal_getcgregset(char *param)

+{

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+	sprintf(at_next,"AT+CGREG=%s\r\n",param);

+	return at_next;

+}

+

+//ÉèÖÃCEREGÖ÷¶¯Éϱ¨

+char* normal_getceregset(char *param)

+{

+    char *at_next=NULL;

+    at_next=malloc(16);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,16);

+	sprintf(at_next,"AT+CEREG=%s\r\n",param);

+	return at_next;

+}

+

+//×Ô¶¯ËÑÍø»òÊÖ¶¯ËÑÍøÉèÖÃ

+char* normal_getcopsset(int paramnum,...)

+{

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+    va_list ap;    

+    va_start(ap, paramnum);

+    if(paramnum==1)

+    {

+        sprintf(at_next,"AT+COPS=%s\r\n",va_arg(ap,char*));//ÉèÖÃÑ¡ÍøÄ£Ê½£¬Ò»°ã²ÎÊýÖÃΪ0£¬±íʾ×Ô¶¯ËÑÍø

+    }

+    else if(paramnum==2)

+    {

+        sprintf(at_next,"AT+COPS=1,2,\"%s\",%d\r\n",va_arg(ap,char*),va_arg(ap,int));//ÊÖ¶¯ËÑÍøÉèÖ㬲»Ð¯´ø×ÓÖÆÊ½

+    }

+    else if(paramnum==3)

+    {

+        sprintf(at_next,"AT+COPS=1,2,\"%s\",%d,%d\r\n",va_arg(ap,char*),va_arg(ap,int),va_arg(ap,int));	//ÊÖ¶¯ËÑÍøÉèÖã¬Ð¯´ø×ÓÖÆÊ½

+    }

+    else

+    {

+    	free(at_next);

+		va_end(ap);

+        return NULL;

+    }

+    va_end(ap);

+    at_print(AT_DEBUG,"normal_getcopsset %s!\n",at_next);

+    return at_next;

+}

+

+//ÊÖ¶¯ËÑÍøÊ±£¬»ñÈ¡µ±Ç°ÍøÂçÖдæÔÚµÄÔËÓªÉÌÁбí

+char* normal_getcopstest()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+COPS=?\r\n");

+	return at_next;

+}

+

+//·µ»Øµ±Ç°µÄÍøÂçģʽ

+char* normal_getcopsread()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+COPS?\r\n");

+	return at_next;

+}

+

+//²éѯÐźÅÇ¿¶È

+char* normal_getcsq()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+CSQ\r\n");

+    cfg_set(NV_CSQ_DONE, "1");

+	return at_next;

+}

+

+//²éѯÈí¼þÄÚ²¿°æ±¾ºÅÃüÁî

+char* normal_getzversion()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT^ZVERSION\r\n");

+	return at_next;

+}

+

+//ÉèÖÃʱ¼äÃüÁî

+char* normal_getsyctimeset(long sec,long usec)

+{

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+    sprintf(at_next,"AT+SYCTIME=%ld,%ld\r\n",sec,usec);

+    return at_next;

+}

+

+//ÉèÖÃmtnet²âÊÔÃüÁî

+char* normal_getmtnetset(char *mcc)

+{

+    char *at_next=NULL;

+	char mcc_list[256] = {0};

+	

+    cfg_get_item("mtnet_test_mcc", mcc_list, sizeof(mcc_list));

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+	if(strlen(mcc_list) > 3 && mcc && strlen(mcc) == 3 && strstr(mcc_list,mcc) != NULL)

+	{

+		sprintf(at_next,"AT+ZSET=\"MTNET_TEST\",1\r\n");

+	}

+	else

+	{

+		sprintf(at_next,"AT+ZSET=\"MTNET_TEST\",0\r\n");

+	}

+    return at_next;

+}

+

+//¶ÁÈ¡°åºÅ(Ŀǰ½á¹ûΪ¿Õ£¬ÊÇ·ñÊDZØÐëÃüÁî??)

+char* normal_getboardnumread()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+BOARDNUM?\r\n");

+	return at_next;

+}

+

+//ϵͳÐÅÏ¢»ñÈ¡

+char* normal_getsysinfo()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT^SYSINFO\r\n");

+	return at_next;

+}

+

+//USSDÈ¡ÏûÃüÁî

+char* normal_getcusdset_clean()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+CUSD=2\r\n");

+	return at_next;

+}

+

+//USSD·¢ËÍÃüÁî

+char* normal_getcusdset(char *param)

+{

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+	sprintf(at_next,"AT+CUSD=1,\"%s\",15\r\n",param);

+	return at_next;

+}

+

+char* normal_getclckset(int paramnum,...)

+{

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+    va_list ap;    

+    va_start(ap, paramnum);

+    if(paramnum==2)//²éѯµ±Ç°SIM¿¨×´Ì¬

+    {

+        sprintf(at_next,"AT+CLCK=\"%s\",%d\r\n",va_arg(ap,char*),va_arg(ap,int));

+    }

+    else if(paramnum==3)//¹Ø±Õ»òÕß´ò¿ªPINÂ빦ÄÜ

+    {

+        sprintf(at_next,"AT+CLCK=\"%s\",%d,\"%s\"\r\n",va_arg(ap,char*),va_arg(ap,int),va_arg(ap,char*));

+    }

+    else

+    {

+    	free(at_next);

+		va_end(ap);

+        return NULL;

+    }

+    va_end(ap);

+    return at_next;

+}

+

+char* normal_getcpwdset(char *type,char *oldPin,char *newPin)

+{

+    char *at_next=NULL;

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+	sprintf(at_next,"AT+CPWD=\"%s\",\"%s\",\"%s\"\r\n",type,oldPin,newPin);

+	return at_next;

+}

+

+char* normal_getmacread()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+MAC?\r\n");

+	return at_next;

+}

+

+char* normal_getmac2read()

+{

+    char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+MAC2?\r\n");

+	return at_next;

+}

+

+//LTEËøÆµ,δʹÓÃ

+char *normal_getzltelcset()

+{

+    char *at_next=NULL;

+    T_zAt_ZltelcPara zltelcPara = {0};

+    char actionLte[30] = {0};

+    char uarfcnLte[30] = {0};

+    char cellPara[30] = {0};

+    at_next=malloc(AT_CMD_MAX);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,AT_CMD_MAX);

+    cfg_get_item(NV_ACTIONLTE,actionLte,sizeof(actionLte));

+    cfg_get_item(NV_UARFCNLTE,uarfcnLte,sizeof(uarfcnLte));

+	cfg_get_item(NV_CELLPARAIDLTE,cellPara,sizeof(cellPara));

+    zltelcPara.actionlte        = atoi(actionLte);

+    zltelcPara.uarfcnlte        = atoi(uarfcnLte);

+    zltelcPara.cellParaIdlte    = atoi(cellPara); 

+    sprintf(at_next,"AT+ZLTELC=%d,%d,%d\r\n", (int)zltelcPara.actionlte, (int)zltelcPara.uarfcnlte, (int)zltelcPara.cellParaIdlte); 

+    return at_next;

+}

+/***********atÃüÁî»ñÈ¡****************/

+//»ñÈ¡cidʱÐè´«Èëpdpsetinfo

+int normal_getcurparam(struct pdp_act_req *pdpsetinfo)

+{

+    char strPdptype[10] = {0};

+    char strAPN[APN_MAX_LEN] = {0};

+    //pdpsetinfo->pdp_type=PDP_NORMAL;

+    

+    cfg_get_item(NV_PDP_TYPE,strPdptype,sizeof(strPdptype));

+    cfg_get_item(NV_WAN_APN,strAPN,sizeof(strAPN)); 

+    if(strcmp("IPV6", strPdptype) == 0 || strcmp(strPdptype,"IPv6") == 0)

+    {

+        strncpy(strPdptype, "IPV6",sizeof(strPdptype)-1);

+        cfg_get_item(NV_IPV6_WAN_APN,strAPN,sizeof(strAPN)); 

+    }

+    else if(strcmp(strPdptype,"IPV4V6") == 0 || strcmp(strPdptype,"IPv4v6") == 0)

+    {

+        strncpy(strPdptype, "IPV4V6",sizeof(strPdptype)-1);

+        cfg_get_item(NV_IPV6_WAN_APN,strAPN,sizeof(strAPN)); 

+    }

+    strncpy(pdpsetinfo->comm_info.apn,strAPN,sizeof(pdpsetinfo->comm_info.apn)-1);

+    strncpy(pdpsetinfo->comm_info.ip_type,strPdptype,sizeof(pdpsetinfo->comm_info.ip_type)-1);

+    at_print(AT_DEBUG,"normal_getcurparam apn=%s,apntype=%s\n",pdpsetinfo->comm_info.apn,pdpsetinfo->comm_info.ip_type);

+    

+    char strAuthtype[10]             = {0};

+    char strUsename[PDP_AUTH_USER_PWD_LENGTH]  = {0};

+    char strPawd[PDP_AUTH_USER_PWD_LENGTH] = {0};

+    if(strcmp("IPV6", strPdptype) == 0 || strcmp(strPdptype,"IPv6") == 0)

+    {

+        cfg_get_item(NV_IPV6_PPP_AUTH_MODE,strAuthtype,sizeof(strAuthtype));

+        cfg_get_item(NV_IPV6_PPP_USERNAME,strUsename,sizeof(strUsename));

+        cfg_get_item(NV_IPV6_PPP_PASSWD,strPawd,sizeof(strPawd));

+        

+    }

+    else if(strcmp(strPdptype,"IPV4V6") == 0 || strcmp(strPdptype,"IPv4v6") == 0)

+    {

+        cfg_get_item(NV_IPV6_PPP_AUTH_MODE,strAuthtype,sizeof(strAuthtype));

+        cfg_get_item(NV_IPV6_PPP_USERNAME,strUsename,sizeof(strUsename));

+        cfg_get_item(NV_IPV6_PPP_PASSWD,strPawd,sizeof(strPawd));

+    }

+    else 

+    {

+        

+        cfg_get_item(NV_PPP_AUTH_MODE,strAuthtype,sizeof(strAuthtype));

+        cfg_get_item(NV_PPP_USERNAME,strUsename,sizeof(strUsename));

+        cfg_get_item(NV_PPP_PASSWD,strPawd,sizeof(strPawd));

+    }

+    pdpsetinfo->comm_info.auth_type = normal_getauthtype(strAuthtype);

+    strncpy(pdpsetinfo->comm_info.username,strUsename,sizeof(pdpsetinfo->comm_info.username)-1);

+    strncpy(pdpsetinfo->comm_info.password,strPawd,sizeof(pdpsetinfo->comm_info.password)-1);

+    at_print(AT_DEBUG,"normal_getcurparam authtype=%d,user=%s,psw=%s\n",pdpsetinfo->comm_info.auth_type,pdpsetinfo->comm_info.username,pdpsetinfo->comm_info.password);

+    return 0;

+}

+

+DbResult noraml_dbopen(char *filename, sqlite3**pDb)

+{

+	//zdm tosÁ¬½Ó²»¹ý

+	#if (APP_OS_TYPE == APP_OS_LINUX)

+    sqlite3* pTmpDb = NULL;

+    if(NULL == pDb)

+    {

+        at_print(AT_ERR,"noraml_dbopen:invalide inputs.");/*lint  !e26*/

+        return DB_ERROR_INVALIDPTR;

+    }

+    at_print(AT_DEBUG,"noraml_dbopen:sqlite3_open call");/*lint  !e26*/

+    if(sqlite3_open(filename, &pTmpDb))

+    {

+        at_print(AT_DEBUG,"noraml_dbopen:can not open db,sqlite3_errmsg:%s.",sqlite3_errmsg(pTmpDb));

+        (VOID) sqlite3_close(pTmpDb);

+        return DB_ERROR_NOTOPENDB;

+    }

+    *pDb = pTmpDb;

+	#else

+    softap_assert("");

+	#endif

+	

+    return DB_OK;

+}

+

+DbResult normal_dbclose(sqlite3 *pDb)

+{

+	#if (APP_OS_TYPE == APP_OS_LINUX)

+	

+    if(sqlite3_close(pDb))

+    {

+        at_print(AT_ERR,"normal_dbclose:can not close db");/*lint  !e26*/

+        return DB_ERROR;

+    }

+	#else

+		softap_assert("");

+	#endif

+    return DB_OK;

+}

+

+DbResult normal_execdbsql(char *filename, const char *pSql, sqlite3_callback callback,VOID *pFvarg)

+{

+    sqlite3 *pDb = NULL;

+    char dbErrMsg[128] = {0};

+	#if (APP_OS_TYPE == APP_OS_LINUX)

+    

+    if(DB_OK != noraml_dbopen(filename, &pDb))

+    {

+        at_print(AT_ERR,"normal_execdbsql:open pbm.db failed.");

+        return DB_ERROR_NOTOPENDB;

+    }

+    at_print(AT_DEBUG,"normal_execdbsql:atPb_ExecDbSql:%s\n",pSql);

+    if(sqlite3_exec(pDb,pSql,callback,pFvarg,NULL))

+    {

+        strncpy(dbErrMsg,sqlite3_errmsg(pDb),sizeof(dbErrMsg)-1);

+        at_print(AT_ERR,"normal_execdbsql:can not exec sql,sqlite3_errmsg:%s.",dbErrMsg);

+        (VOID)sqlite3_close(pDb);

+        return DB_ERROR;

+    }

+    (VOID)normal_dbclose(pDb);

+	#else

+		softap_assert("");

+	#endif

+    return DB_OK;

+}

+

+int normal_count_callback(void *fvarg,int line,char **zresult,char **lname)

+{

+	if(1 > line)

+	{

+		at_print(AT_DEBUG,"atBase:record no data.");

+		return -1;

+	}

+	*(int*)fvarg = atoi(zresult[0]);

+	return 0;

+}

+

+/*¸ù¾ÝÉ豸ÐͺźÍplmn,²éѯlocknet.db*/

+int normal_islocknetwhitelist(char *pmodel, char *pplmn)

+{

+    char sql[128] = {0};

+	int lcount = 0;

+    int result = DB_OK;

+    

+    snprintf(sql,128-1,"select count(*) from net_list where product_model=\'%s\' and plmn=\'%s\'", pmodel, pplmn);

+    result = normal_execdbsql(ZLOCKNET_DB_PATH, sql, normal_count_callback, &lcount);

+    if(DB_OK != result)

+    {

+        at_print(AT_DEBUG,"atBase_isLockNetWhiteList error:%d !\n", result); 

+        return -1;

+    }

+    if(lcount > 0)

+    {

+        at_print(AT_DEBUG,"atBase_isLockNetWhiteList succ:%d !\n", lcount); 

+		return 0;

+	}

+	at_print(AT_DEBUG,"atBase_isLockNetWhiteList not int list:%d, model:%s, plmn:%s !\n", lcount, pmodel, pplmn); 

+    return -1;

+}

+

+/*ËøÍø¼ì²â*/

+BOOL normal_locknetmatch(const char* mcc, const char* mnc)

+{

+	char plmn[LOCK_NET_PLMN_LEN] = {0};

+	char product_model[LOCK_NET_PLMN_LEN] = {0};

+	char useLockNet[10] = {0};

+	snprintf(plmn, LOCK_NET_PLMN_LEN-1, "%s%s", mcc, mnc);

+	cfg_get_item("product_model", product_model, sizeof(product_model));

+    cfg_get_item("use_lock_net", useLockNet, sizeof(useLockNet));

+	if(0 == strcmp("yes", useLockNet))

+	{

+		if(normal_islocknetwhitelist(product_model, plmn) == 0)

+		{

+			return TRUE;

+		}

+		return FALSE;

+	}

+	else

+	{

+		return TRUE;

+	}	

+}

+

+/*Ñ¡ÔñÓëwebui NVÅäÖÃÒ»ÖµÄsysconfig²ÎÊý*/

+int normal_getsysconfigsetParam(int *mode, int *acqOrder, int *roam)

+{

+    long  i                           = 0;

+    char    netSelect[20]  = {0};

+    char    modeSelect[20] = {0};

+    long  tableSize                   = sizeof(G_ZAT_SYSCONFIG_CFGPARA_SET)/sizeof(T_zAt_SysConfigParaSet);

+	char needTds[50] = {0};

+    char needGsm[50] = {0};

+    char roamSet[10] = {0};

+    

+    cfg_get_item(NV_NET_SELECT,netSelect,sizeof(netSelect));

+    cfg_get_item(NV_PRE_MODE,modeSelect,sizeof(modeSelect));

+    cfg_get_item(NV_NETWORK_NEED_TDS,needTds,sizeof(needTds));

+    cfg_get_item(NV_NETWORK_NEED_GSM,needGsm,sizeof(needGsm));

+    cfg_get_item(NV_ROAM_SETTING_OPTION,roamSet,sizeof(roamSet));

+	at_print(AT_DEBUG,"atBase_AtSysconfigSet:netSelect:%s! modeSelect:%s roamSet:%s.\n",netSelect,modeSelect,roamSet);

+    if(0 == strcmp(roamSet, "on"))

+	{

+		*roam = 1;

+	}

+	else if(0 == strcmp(roamSet, "off"))

+	{

+		*roam = 0;

+	}

+	else

+	{

+		*roam = 2;

+	}

+    if(0 == strcmp(netSelect, "NETWORK_auto"))  

+    {

+        if(0 == strcmp(modeSelect, "LTE_TD_pre"))

+        {

+            *mode       = ZAT_SYSCONFIG_MODE_GSM_TD_LTE;

+            *acqOrder   = ZAT_SYSCONFIG_PREF_ACQ_LTEPRE;

+            return TRUE;

+        }

+        else if(0 == strcmp(modeSelect, "TD_GSM_pre"))

+        {

+            *mode       = ZAT_SYSCONFIG_MODE_GSM_TD_LTE;

+            *acqOrder   = ZAT_SYSCONFIG_PREF_ACQ_TDPRE;

+            return TRUE;

+        }

+		else if(0 == strcmp(modeSelect, "")) 

+        {        	

+			char auto_acqorder[50] = {0};

+        	

+			cfg_get_item("auto_acqorder",auto_acqorder,sizeof(auto_acqorder));

+

+			//Óû§Ñ¡Ôñ×Ô¶¯ËÑÍø£¬Ê¹ÓÃNV±£´æµÄÍøÂç½ÓÈë´ÎÐò£¬¸ÃNVÓ¦ÔÚ°æ±¾¿ª»úµÚÒ»´Î±£´æÆðÀ´ÁË

+			if(0 == strlen(auto_acqorder))

+			{

+				//softap_assert("");

+				at_print(AT_ERR,"normal_getsysconfigsetParam auto_acqorder null\n");

+			}

+			*mode       = ZAT_SYSCONFIG_MODE_AUTO;

+            *acqOrder   = atoi(auto_acqorder);

+#if 0

+			if((strcmp("yes", needTds) == 0) && (strcmp("yes", needGsm) == 0))

+			{

+				*mode       = ZAT_SYSCONFIG_MODE_AUTO;

+                *acqOrder   = ZAT_SYSCONFIG_PREF_ACQ_AUTO;

+			}

+			else if(strcmp("yes", needGsm) == 0)

+			{

+				*mode       = ZAT_SYSCONFIG_MODE_W_GSM_LTE;

+                *acqOrder   = ZAT_SYSCONFIG_PREF_ACQ_AUTO;

+			}

+			else if(strcmp("yes", needTds) == 0)

+			{

+				*mode       = ZAT_SYSCONFIG_MODE_TD_W_LTE;

+                *acqOrder   = ZAT_SYSCONFIG_PREF_ACQ_AUTO;

+			}

+			else

+			{

+				*mode       = ZAT_SYSCONFIG_MODE_WCDMA_LTE;

+                *acqOrder   = ZAT_SYSCONFIG_PREF_ACQ_LTE_W_GSM;

+			}			

+            return TRUE;

+#endif

+        }

+        else

+        {

+            at_print(AT_DEBUG,"atBase_AtSysconfigSet Value Is not support!\n");

+            return FALSE;

+        }

+    }

+    else

+    {

+        for(i = 0; i < tableSize; i++)

+        {

+            if( 0 ==  strcmp(G_ZAT_SYSCONFIG_CFGPARA_SET[i].netselect, netSelect))

+            {

+                *mode       = G_ZAT_SYSCONFIG_CFGPARA_SET[i].modeValue;

+                *acqOrder   = G_ZAT_SYSCONFIG_CFGPARA_SET[i].acqOrder;

+                

+                at_print(AT_DEBUG,"atBase_AtSysconfigSet:mode:%d/acqOrder:%d.\n",*mode,*acqOrder);

+                return TRUE;

+            }

+        }

+        at_print(AT_DEBUG,"atBase_AtSysconfigSet Error\n");

+        return FALSE;

+    }

+	return FALSE;

+}

+

+int normal_getauthtype(char* pAuthType)

+{

+

+	if(strcmp(PDP_AUTH_TYPE_PAP, pAuthType) == 0 || strcmp("PAP", pAuthType) == 0)

+	{

+		return PAP_AUTH;

+	}

+	else if(strcmp(PDP_AUTH_TYPE_CHAP, pAuthType) == 0 || strcmp("CHAP", pAuthType) == 0)

+	{

+		return CHAP_AUTH;

+	}

+	else if(strcmp(PDP_AUTH_TYPE_PAP_CHAP, pAuthType) == 0)

+	{

+		return PAP_CHAP_AUTH;

+	}

+

+	return NONE_AUTH;

+}

+

+

+//10Ãë²é´ÎÐźţ¬pdpÖØ²¦Ê±ÑÓ0S,5S,10S,10S...

+VOID  *normal_pdptimeractstart(VOID *arg)

+{

+    static UINT32  iCount = 0;

+    iCount++;

+    if(iCount%10 == 0)

+    {

+        char csqDone[50]={0};

+        char networkType[50]={0};

+        cfg_get_item(NV_CSQ_DONE,csqDone,sizeof(csqDone));

+        cfg_get_item(NV_NETWORK_TYPE,networkType,sizeof(networkType));

+        if(0==strcmp("1",csqDone)&&strcmp("No Service",networkType))

+        {   

+            cfg_set(NV_CSQ_DONE, "0");

+            if(0!=ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_AT_CTL,MSG_CMD_QUERY_CSQ_REQ, 0, NULL,04000))

+            {

+                cfg_set(NV_CSQ_DONE, "1");

+            }

+        }	

+    }

+    return ZUFI_NULL;

+}

+

+void normal_cfunOkSet()

+{

+#if(APP_OS_TYPE == APP_OS_TOS)

+	softap_assert("");

+#else 

+    /*´´½¨¶¨Ê±PDPÔÚÏß¶¨Ê±Æ÷*/

+    CreateSoftTimer(PdpTimerID,

+                        TIMER_FLAG_RESTART,

+                        PdpTimer_INTERVAL,

+                        normal_pdptimeractstart,

+                        NULL);

+#endif   

+}

+

+void* normal_copstimeractstart(VOID *arg)

+{

+    static UINT32  iCount = 0;

+    iCount++;

+    if(iCount>=2)

+    {

+        at_print(AT_DEBUG,"normal_copstimeractstart Timeout!\n");

+        struct at_context * context = context_head[NEAR_PS];

+        char at_str[AT_CMD_MAX]="AT\r\n";//¸ù¾Ýmsg_bufÉú³ÉatÖжÏÃüÁÍõÕ׷ḺÔð

+        for(;context;context = context->next)

+        {

+            if(context->context_type == AT_CLIENT && 0 == at_strcmp(context->at_cmd_prefix,"COPS=?"))

+            {

+                at_print(AT_DEBUG,"normal_copstimeractstart write AT!\n");

+                write(context->at_channel->at_fd,at_str, strlen(at_str));//for cov ¶¨Ê±Æ÷Àï²»ÄÜÓÐsleep

+                //at_write(context->at_channel->at_fd,at_str, strlen(at_str));//·¢ËÍÖÕÖ¹at£¬ÍõÕ׷ḺÔðÌîд¾ßÌåµÄat_stlÈ¡ÏûÃüÁî

+            }

+        }

+        iCount=0;

+    }

+    cfg_set(NV_NET_NUM, "0");

+    cfg_set(NV_M_NETSELECT_STATUS, "manual_search_fail");

+    return 0;

+}

+

+void normal_copstest_timerout(void *msg)

+{

+	//zdm º¯Êý¼´Ê¹²»²ÎÓëµ÷Óã¬Ò²»áÁ¬½Ó²»¹ý£¬ÐèÒªÇëÖ§³Ö°ïæ½â¾ö

+	#if (APP_OS_TYPE == APP_OS_LINUX)

+    /*AT+COPS=?¶¨Ê±Æ÷*/

+    CreateSoftTimer(CopstestTimerID,

+                        TIMER_FLAG_RESTART,

+                        CopstestTimer_INTERVAL,

+                        normal_copstimeractstart,

+                        NULL);

+	#endif

+}

+

+void normal_getsignalbarinfo(T_zAt_SignalBarInfo* signalBarInfo, T_zAt_SignalBar_Type signalBarType)

+{

+	UINT8 tableSize = 0;

+	int i, prefixIndex = -1;

+	char signalBarName[30] = {0};

+	int signalBarVal[SIGNALBAR_NUM_MAX] = {0};

+	char strSigbar[10] = { 0 };	

+	       

+	prefixIndex = (int)	signalBarType; 	

+	tableSize = sizeof(suffixSignalBarNV) / 20;

+    at_print(AT_DEBUG,"atBase_GetSignalBarInfo enter, tableSize = %d, prefixIndex = %d!\n", tableSize, prefixIndex); 

+#if 0  // kw 3 UNREACH.RETURN  

+    if(tableSize > SIGNALBAR_NUM_MAX)

+	{

+		return;

+	}

+#endif    

+	for(i = 0; i < tableSize; i++)

+	{

+		memset(strSigbar, 0, 10);

+		memset(signalBarName, 0, 30);

+		snprintf(signalBarName, 30, "%s%s", prefixSignalBarNV[prefixIndex], suffixSignalBarNV[i]);	

+			    

+		cfg_get_item(signalBarName, strSigbar,sizeof(strSigbar));

+		if(strlen(strSigbar) > 0)

+		{

+			signalBarVal[i] = atoi(strSigbar);

+		}

+		else

+		{

+			signalBarVal[i] = -1;

+		}

+	}

+   signalBarInfo->signalbar0_low =  signalBarVal[0];

+   signalBarInfo->signalbar0_high = signalBarVal[1];

+   signalBarInfo->signalbar1_low =  signalBarVal[2];

+   signalBarInfo->signalbar1_high = signalBarVal[3];

+   signalBarInfo->signalbar2_low =  signalBarVal[4];

+   signalBarInfo->signalbar2_high = signalBarVal[5];

+   signalBarInfo->signalbar3_low =  signalBarVal[6];

+   signalBarInfo->signalbar3_high = signalBarVal[7];

+   signalBarInfo->signalbar4_low =  signalBarVal[8];

+   signalBarInfo->signalbar4_high = signalBarVal[9];

+   signalBarInfo->signalbar5_low =  signalBarVal[10];

+   signalBarInfo->signalbar5_high = signalBarVal[11];

+}

+

+/**

+**                 RSSI < - 115dBm     1¸ñ(0-25)

+**  -115dBm <= RSSI < -108 dBm   2¸ñ(26-32)

+**  -108dBm <= RSSI < -102 dBm   3¸ñ(33-38)    

+**  -102dBm <= RSSI < -96 dBm     4¸ñ(39-44)    

+**  -96dBm <= RSSI                      5¸ñ(>=45)    

+**  

+**/

+void normal_calcltesignalbar(long rssi)

+{

+	T_zAt_SignalBarInfo signalBarInfo = {0};

+	normal_getsignalbarinfo(&signalBarInfo, ZAT_SIGNALBAR_TYPE_LTE);

+    printf("atBase_CalcLteSignalBar: %d <= sigbar0 <= %d, %d <= sigbar1 <= %d, %d <= sigbar2 <= %d, %d <= sigbar3 <= %d,%d <= sigbar4 <= %d, %d <= sigbar5 <= %d,!\n", \

+		         signalBarInfo.signalbar0_low, signalBarInfo.signalbar0_high, signalBarInfo.signalbar1_low, signalBarInfo.signalbar1_high,signalBarInfo.signalbar2_low, \

+				 signalBarInfo.signalbar2_high,signalBarInfo.signalbar3_low,signalBarInfo.signalbar3_high,signalBarInfo.signalbar4_low, signalBarInfo.signalbar4_high, \

+		         signalBarInfo.signalbar5_low, signalBarInfo.signalbar5_high); 

+	if((rssi >= signalBarInfo.signalbar0_low) && (rssi <= signalBarInfo.signalbar0_high))

+    {

+        cfg_set("signalbar", "0");

+    }

+	else if((rssi >= signalBarInfo.signalbar1_low) && (rssi <= signalBarInfo.signalbar1_high))

+    {

+        cfg_set("signalbar", "1");

+    }

+    else if((rssi >= signalBarInfo.signalbar2_low) && (rssi <= signalBarInfo.signalbar2_high))

+    {

+        cfg_set("signalbar", "2");

+    }

+    else if((rssi >= signalBarInfo.signalbar3_low) && (rssi <= signalBarInfo.signalbar3_high))

+    {

+        cfg_set("signalbar", "3");

+    }

+    else if((rssi >= signalBarInfo.signalbar4_low) && (rssi <= signalBarInfo.signalbar4_high))

+    {

+        cfg_set("signalbar", "4");

+    }

+	else if(rssi==99)

+    {

+        normal_calcunknowsignalbar();	

+        return;

+    }		

+    else

+    {

+        cfg_set("signalbar", "5");

+    }   

+}

+

+/**

+**            RSSI <= -110dBm   0¸ñ(0-6)

+**  -110dBm < RSSI <= -104 dBm  1¸ñ(7-12)

+**  -104dBm < RSSI <= -98 dBm   2¸ñ(13-18)    

+**  -98dBm < RSSI <= -90 dBm    3¸ñ(19-26)    

+**  -90dBm < RSSI <= -80 dBm    4¸ñ(27-36)    

+**  -80dBm < RSSI               5¸ñ(>=37   )

+**/

+void normal_calctdsignalbar(long rssi)

+{

+	T_zAt_SignalBarInfo signalBarInfo = {0};

+	normal_getsignalbarinfo(&signalBarInfo, ZAT_SIGNALBAR_TYPE_TDS);

+    printf("atBase_CalcTdSignalBar: %d <= sigbar0 <= %d, %d <= sigbar1 <= %d, %d <= sigbar2 <= %d, %d <= sigbar3 <= %d,%d <= sigbar4 <= %d, %d <= sigbar5 <= %d!\n", \

+		         signalBarInfo.signalbar0_low, signalBarInfo.signalbar0_high, signalBarInfo.signalbar1_low, signalBarInfo.signalbar1_high,signalBarInfo.signalbar2_low, \

+				 signalBarInfo.signalbar2_high,signalBarInfo.signalbar3_low,signalBarInfo.signalbar3_high,signalBarInfo.signalbar4_low, signalBarInfo.signalbar4_high, \

+		         signalBarInfo.signalbar5_low, signalBarInfo.signalbar5_high); 

+	if((rssi >= signalBarInfo.signalbar0_low) && (rssi <= signalBarInfo.signalbar0_high))

+    {

+        cfg_set("signalbar", "0");

+    }

+	else if((rssi >= signalBarInfo.signalbar1_low) && (rssi <= signalBarInfo.signalbar1_high))

+    {

+        cfg_set("signalbar", "1");

+    }

+    else if((rssi >= signalBarInfo.signalbar2_low) && (rssi <= signalBarInfo.signalbar2_high))

+    {

+        cfg_set("signalbar", "2");

+    }

+    else if((rssi >= signalBarInfo.signalbar3_low) && (rssi <= signalBarInfo.signalbar3_high))

+    {

+        cfg_set("signalbar", "3");

+    }

+    else if((rssi >= signalBarInfo.signalbar4_low) && (rssi <= signalBarInfo.signalbar4_high))

+    {

+        cfg_set("signalbar", "4");

+    }

+	else if(rssi==99)

+    {

+        normal_calcunknowsignalbar();	

+        return;

+    }

+    else

+    {

+        cfg_set("signalbar", "5");

+    }  

+}

+

+/**

+**                 RSSI <= -110dBm   0¸ñ(0-1)

+**  -110dBm < RSSI <= -104 dBm  1¸ñ(2-4)

+**  -104dBm < RSSI <= -98 dBm   2¸ñ(5-7)    

+**  -98dBm < RSSI <= -90 dBm    3¸ñ(8-11)    

+**  -90dBm < RSSI <= -80 dBm    4¸ñ(12-16)    

+**  -80dBm < RSSI               5¸ñ(>=17   )

+**/

+void normal_calcothersignalbar(long rssi)

+{

+	T_zAt_SignalBarInfo signalBarInfo = {0};

+

+	normal_getsignalbarinfo(&signalBarInfo, ZAT_SIGNALBAR_TYPE_GSM);

+    printf("atBase_CalcOtherSignalBar: %d <= sigbar0 <= %d, %d <= sigbar1 <= %d, %d <= sigbar2 <= %d, %d <= sigbar3 <= %d,%d <= sigbar4 <= %d, %d <= sigbar5 <= %d,!\n", \

+		         signalBarInfo.signalbar0_low, signalBarInfo.signalbar0_high, signalBarInfo.signalbar1_low, signalBarInfo.signalbar1_high,signalBarInfo.signalbar2_low, \

+				 signalBarInfo.signalbar2_high,signalBarInfo.signalbar3_low,signalBarInfo.signalbar3_high,signalBarInfo.signalbar4_low, signalBarInfo.signalbar4_high, \

+		         signalBarInfo.signalbar5_low, signalBarInfo.signalbar5_high); 

+    if(rssi==99)

+    {

+		normal_calcunknowsignalbar();			

+        return;

+    }

+	if((rssi >= signalBarInfo.signalbar0_low) && (rssi <= signalBarInfo.signalbar0_high))

+    {

+        cfg_set("signalbar", "0");

+    }

+	else if((rssi >= signalBarInfo.signalbar1_low) && (rssi <= signalBarInfo.signalbar1_high))

+    {

+        cfg_set("signalbar", "1");

+    }

+    else if((rssi >= signalBarInfo.signalbar2_low) && (rssi <= signalBarInfo.signalbar2_high))

+    {

+        cfg_set("signalbar", "2");

+    }

+    else if((rssi >= signalBarInfo.signalbar3_low) && (rssi <= signalBarInfo.signalbar3_high))

+    {

+        cfg_set("signalbar", "3");

+    }

+    else if((rssi >= signalBarInfo.signalbar4_low) && (rssi <= signalBarInfo.signalbar4_high))

+    {

+        cfg_set("signalbar", "4");

+    }

+    else if((rssi>=signalBarInfo.signalbar5_low) && (rssi<=signalBarInfo.signalbar5_high))

+    {

+        cfg_set("signalbar", "5");

+    }

+}

+

+void normal_calcunknowsignalbar(void)

+{

+    char signalbar_99[30] = {0};

+    char netType[50]={0};

+    cfg_get_item(NV_NETWORK_TYPE,netType,sizeof(netType));

+    cfg_get_item("signalbar_99", signalbar_99,sizeof(signalbar_99));

+    if(strcmp("0", signalbar_99) == 0)

+    {

+        cfg_set("signalbar", "0");

+    }

+    else if (g_zUfi_firstCsq

+            &&0!=strcmp("No Service",netType)

+            &&0!=strcmp("Limited Service",netType)

+            &&0!=strcmp(NETWORK_TYPE_INIT,netType))

+    {

+        cfg_set("signalbar", "3");

+    }

+}

+

+void normal_calcsignalbar(T_zAt_SignalBar_Type signalBarType)

+{	

+    char netType[30] = {0};

+    char strRssi[30] = { 0 };

+    long  csq  = 0;

+    at_print(AT_DEBUG,"normal_calcsignalbar!\n");

+    UINT32 signalbar = 0;

+    char oldSignalbar[10] = {0};

+    char newSignalbar[10] = {0};

+    cfg_get_item("signalbar",oldSignalbar,sizeof(oldSignalbar));

+    at_print(AT_DEBUG,"oldSignalbar=%s!\n",oldSignalbar);

+    

+    cfg_get_item("csq",strRssi,sizeof(strRssi));

+    csq = atoi(strRssi);

+	if(csq < 0 || csq > INT_MAX-1) // kw 3

+	{

+	    csq = 0;

+	}

+    cfg_get_item("network_type",netType,sizeof(netType));

+    if(signalBarType == ZAT_SIGNALBAR_TYPE_LTE)

+    {

+        normal_calcltesignalbar(csq - 100);

+    }

+    else if(signalBarType == ZAT_SIGNALBAR_TYPE_WCDMA)

+    {

+        normal_calctdsignalbar(csq - 100);

+    }

+    else if(signalBarType == ZAT_SIGNALBAR_TYPE_TDS)

+    {

+        normal_calctdsignalbar(csq - 100);

+    }

+    else if(signalBarType == ZAT_SIGNALBAR_TYPE_GSM)

+    {

+        normal_calcothersignalbar(csq);

+    }

+    else if(signalBarType == ZAT_SIGNALBAR_TYPE_NONE)

+    {

+        if(csq == 99 || csq == 199)

+        {

+            normal_calcunknowsignalbar();	

+        }

+    }

+    cfg_get_item("signalbar",newSignalbar,sizeof(newSignalbar));

+    at_print(AT_DEBUG,"newSignalbar=%s!\n",newSignalbar);

+    if(strcmp(newSignalbar, oldSignalbar))

+    {

+        signalbar = atoi(newSignalbar);

+    	if(signalbar > UINT_MAX-1)  // kw 3 cov M

+    	{

+    	    signalbar = UINT_MAX;

+    	}		

+        // int result = ipc_send_message(MODULE_ID_AT_CTL,MODULE_ID_MMI,MSG_CMD_OUT_REG_GET_SIGNAL_NUM, sizeof(signalbar), (UINT8 *)&signalbar,0);

+        // at_print(AT_DEBUG,"normal_calcsignalbar %d!\n", result);

+    }

+}

+

+void normal_calcltesignalstrength(long rssi)

+{

+	CHAR rssi_buf[20] = {0};

+	int dbm_val = 0;

+	static int last_signal_state = 0;    // 0-weak, 1-normal, 2-strong

+	int new_signal_state = 0;

+	if(0 == rssi)

+    {

+        snprintf(rssi_buf, 20, "%s", "<-140");

+        new_signal_state = 0;

+    }

+	else if(97 == rssi)

+	{

+		snprintf(rssi_buf, 20, "%s", ">=-44");

+		new_signal_state = 2;

+	}

+	else if(99 == rssi)

+	{

+       return;

+	}

+	else if((rssi > 0) && (rssi < 97))

+	{

+		dbm_val = 141 - rssi;

+		snprintf(rssi_buf, 20, "-%d", dbm_val);

+		if (atoi(rssi_buf) < -95)

+		{

+			new_signal_state = 0;

+		}

+		else if ((atoi(rssi_buf) >= -95) && (atoi(rssi_buf) <= -85))

+		{

+			new_signal_state = 1;

+		}

+		else if (atoi(rssi_buf) > -85)

+		{

+			new_signal_state = 2;

+		}

+

+		if (last_signal_state != new_signal_state)

+		{

+			at_print(AT_DEBUG, "normal_calcltesignalstrength, the signal status has changed, new singnal state:%d, send msg to mmi\n", new_signal_state);

+			int result = ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_MMI, MSG_CMD_OUT_REG_GET_SIGNAL_NUM, sizeof(new_signal_state), (UINT8 *)&new_signal_state, 0);

+			at_print(AT_DEBUG,"normal_calcltesignalstrength, send msg result:%d!\n", result);

+			last_signal_state = new_signal_state;

+		}

+	}

+	cfg_set("lte_rsrp", rssi_buf);

+	cfg_set("rssi", rssi_buf);

+}

+

+void normal_calctdsignalstrength(long rssi)

+{

+	char rssi_buf[20] = {0};

+	int dbm_val = 0;

+	if(0 == rssi)

+    {

+        snprintf(rssi_buf, 20, "%s", "<-115");		

+    }

+	else if(91 == rssi)

+	{

+		snprintf(rssi_buf, 20, "%s", ">=-25");

+	}

+	else if(99 == rssi)

+	{

+       return;

+	}

+	else if((rssi > 0) && (rssi < 91))

+	{

+		dbm_val = 116 - rssi;

+		snprintf(rssi_buf, 20, "-%d", dbm_val);

+	}

+	cfg_set("rscp", rssi_buf);

+	cfg_set("rssi", rssi_buf);

+	cfg_set("lte_rsrp", "");

+}

+

+void normal_calcothersignalstrength(long rssi)

+{

+	char rssi_buf[20] = {0};

+	int dbm_val = 0;

+	if(0 == rssi)

+    {

+        snprintf(rssi_buf, 20, "%s", "<=-113");		

+    }

+	else if(31 == rssi)

+	{

+		snprintf(rssi_buf, 20, "%s", ">=-51");

+	}

+	else if(99 == rssi)

+	{

+       return;

+	}

+	else if((rssi > 0) && (rssi < 31))

+	{

+		dbm_val = 113 - 2*rssi;

+		snprintf(rssi_buf, 20, "-%d", dbm_val);

+	}

+	cfg_set("rssi", rssi_buf);

+	cfg_set("lte_rsrp", "");

+}

+

+void normal_calcsignalstrength(T_zAt_SignalBar_Type signalBarType, long  rssi)

+{	

+	if(signalBarType == ZAT_SIGNALBAR_TYPE_LTE)

+	{

+		normal_calcltesignalstrength(rssi - 100);

+	}

+    else if((signalBarType == ZAT_SIGNALBAR_TYPE_WCDMA) || (signalBarType == ZAT_SIGNALBAR_TYPE_TDS))

+    {

+        normal_calctdsignalstrength(rssi - 100);

+	}

+	else if(signalBarType == ZAT_SIGNALBAR_TYPE_GSM)

+	{

+		normal_calcothersignalstrength(rssi);

+	}

+}

+

+VOID normal_sysinfosysmodecfgset(long sysModeIn, long sysSubModeIn)

+{

+    UINT32 i            =   0;

+    UINT32 tableSize = sizeof(G_ZAT_SYSINFO_SET_NETTYPE)/sizeof(T_zAt_SysInfoSetNetType);

+

+	for(i = 0; i < tableSize; i++)

+    {

+        if(G_ZAT_SYSINFO_SET_NETTYPE[i].sysmode == sysModeIn)

+        {

+            cfg_set(NV_NETWORK_TYPE,G_ZAT_SYSINFO_SET_NETTYPE[i].netType);

+        }

+    }

+	

+	tableSize = sizeof(G_ZAT_SYSINFO_SET_SUBNETTYPE)/sizeof(T_zAt_SysInfoSetNetType);

+	for(i = 0; i < tableSize; i++)

+    {

+        if(G_ZAT_SYSINFO_SET_SUBNETTYPE[i].sysmode == sysSubModeIn)

+        {

+            cfg_set(NV_SUB_NETWORK_TYPE,G_ZAT_SYSINFO_SET_SUBNETTYPE[i].netType);

+        }

+    }

+	

+	return;

+}

+

+VOID normal_sysinfonetworktypeSet(long sysMode,long sysSubmode)

+{

+    UINT32 i            =   0;

+    UINT32 tableSize = sizeof(G_ZAT_SYSINFO_CMCC_NETTYPE)/sizeof(T_zAt_SysInfoSetNetType);

+    if(sysMode==ZAT_SYSINFORES_SYSMODE_GSM && sysSubmode==3)

+    {

+        cfg_set(NV_NETWORK_TYPE,"E");

+        return;

+    }

+    for(i = 0; i < tableSize; i++)

+    {

+        if(G_ZAT_SYSINFO_CMCC_NETTYPE[i].sysmode == sysMode)

+        {

+            cfg_set(NV_NETWORK_TYPE,G_ZAT_SYSINFO_CMCC_NETTYPE[i].netType);

+        }

+    }

+}

+

+long normal_isroam(char *sim_plmn, char *net_plmn)

+{

+    char sql[128] = {0};

+	int lcount = 0;

+    int result = DB_OK;

+	

+    if(ZUFI_NULL == sim_plmn || ZUFI_NULL == net_plmn)

+    {

+		at_print(AT_DEBUG,"atBase_IsRoam paraments error !\n"); 

+        return -1;

+    }

+

+    snprintf(sql,128-1,"select count(*) from roam_list where sim_plmn=\'%s\' and net_plmn=\'%s\'", sim_plmn, net_plmn);

+    result = normal_execdbsql(ZROAM_DB_PATH, sql, normal_count_callback, &lcount);

+    if(DB_OK != result)

+    {

+        at_print(AT_DEBUG,"atBase_IsRoam error:%d !\n", result); 

+        return -1;

+    }

+    if(lcount > 0)

+    {

+        at_print(AT_DEBUG,"atBase_IsRoam succ:%d !\n", lcount); 

+		return 0;

+	}

+	at_print(AT_DEBUG,"atBase_IsRoam not int list:%d, sim_plmn:%s, net_plmn:%s !\n", lcount, sim_plmn, net_plmn); 

+    return -1;

+}

+

+BOOL normal_checkroam(const char* mcc, const char* mnc)

+{

+    char imcc[10] = {0};

+    char imnc[10] = {0};

+	char checkRoam[10] = {0};

+	char sim_plmn[10] = {0};

+	char net_plmn[10] = {0};

+

+    cfg_get_item("check_roam", checkRoam,sizeof(checkRoam));

+	cfg_get_item("mcc", imcc,sizeof(imcc));

+	cfg_get_item("mnc", imnc,sizeof(imnc));

+	if(0 == strcmp("yes", checkRoam))

+	{

+	    snprintf(sim_plmn, 10-1, "%s%s", mcc, mnc);

+	    snprintf(net_plmn, 10-1, "%s%s", imcc, imnc);

+		

+		if(normal_isroam(sim_plmn, net_plmn) == 0)

+		{

+			return TRUE;

+		}

+

+		return FALSE;

+	}

+	else

+	{

+		return FALSE;

+	}	

+

+}

+

+VOID normal_simcardcfgreset()

+{

+	cfg_set(NV_MODEM_MAIN_STATE,"modem_sim_undetected");

+    cfg_set("lte_pci", "");

+	cfg_set("lte_earfcn", "");

+	cfg_set("lte_rsrp", "");

+	cfg_set("lte_sinr", "");

+	cfg_set("sim_zpbic_status","no_card");

+	cfg_set(NV_MSISDN,"");

+	cfg_set(NV_SIMCARD_TYPE,"");

+	cfg_set(NV_IMEI, "");

+	cfg_set(NV_OPER_NUM, "");

+	cfg_set(NV_PDP_STATUS, "0");

+    cfg_set(NV_NETWORK_PROVIDER, "");

+    cfg_set(NV_NETWORK_TYPE, "");

+	cfg_set(NV_SUB_NETWORK_TYPE, "");

+    cfg_set(NV_SIMCARD_ROAM, "");

+    cfg_set(NV_CSQ, "");

+    cfg_set(NV_RSSI, "");

+    cfg_set(NV_ECIO, "");

+    cfg_set(NV_LAC_CODE,"");

+    cfg_set(NV_CELL_ID,"");

+    cfg_set(NV_WAN_IPADDR, "0.0.0.0");

+    cfg_set(NV_WAN_NETMASK,"0.0.0.0");

+    cfg_set(NV_WAN_GATEWAY,"0.0.0.0");

+    cfg_set(NV_PREFER_DNS_AUTO, "0.0.0.0");

+    cfg_set(NV_STANDBY_DNS_AUTO, "0.0.0.0");

+    cfg_set(NV_SIM_PIN, "0");

+    cfg_set(NV_SIM_PUK, "0");

+    cfg_set(NV_PIN_MANAGE_RESULT,"");

+    cfg_set(NV_PINNUMBER,"3");

+    cfg_set(NV_PUKNUMBER,"10");

+    cfg_set(NV_PIN_STATUS,"");

+    cfg_set(NV_PIN_PUK_PROCESS,"");

+    cfg_set(NV_PIN_MANAGE_PROCESS,"");

+    cfg_set(NV_UNLOCK_AT_WAIT,"0");

+    cfg_set(NV_SIM_SPN,"");

+    cfg_set(NV_SEND_PIN_FLAG,"0"); //0:±íʾ±£´æµÄPINÂëûÓз¢ËÍ  £¬1±íʾÒѾ­·¢ËÍ

+    cfg_set(NV_MCC,"");

+    cfg_set(NV_MNC,"");

+    cfg_set(NV_LOCK_UI,"" );

+    cfg_set(NV_ACTION,"");

+    cfg_set(NV_UARFCN,"");

+    cfg_set(NV_CELLPARAID,"");

+    cfg_set(NV_BANDLOCKSET,"");

+    cfg_set(NV_BANDLOCKSTATE,"UnLocked");

+    cfg_set(NV_PPP_DIAL,"");

+    cfg_set(NV_ZCELL_RESULT,"");

+    cfg_set(NV_ZCONSTAT_UP_RESULT, "");

+    cfg_set(NV_CGATT_SET_RESULT, "");

+    cfg_set(NV_ZGIPDNS_RESULT_DEFAULTCID,"0");

+    cfg_set(NV_ZGIPDNS_RESULT_PPPDCID,"0");

+	cfg_set(NV_ZGACT_RESULT_DEFAULTCID,"0");

+	cfg_set(NV_ZGACT_RESULT_PPPDCID,"0");

+    cfg_set(NV_RESETMODEM,"");

+    cfg_set(NV_SIGNALBAR,"");// ÇåÁ㣬·ÀÖ¹²»²åsim¿¨ÖØÆôºó»¹ÓÐÐźŸñÊý

+    //cfg_set(NV_AUTO_RECONNECT,"");//·ÀÖ¹×Ô¶¯²¦ºÅʧ°Ü

+    cfg_set(NV_IPV6_WAN_IPADDR,"");

+    cfg_set(NV_IPV6_WAN_DEFAULT_GW_ADDR,"");

+    cfg_set(NV_IPV6_PREFER_DNS_AUTO,"");

+    cfg_set(NV_IPV6_STANDBY_DNS_AUTO,"");

+    cfg_set(NV_CFUN_STATE,"1");

+    cfg_set(NV_CSQ_DONE, "1");

+    //cfg_set(NV_SD_CARD_STATE,"0");	

+    cfg_set(NV_SIM_IMSI, "");

+    cfg_set(NV_SIM_ICCID,"");

+	cfg_set(NV_ZICCID,"");

+    cfg_set(NV_M_NETSELECT_MODE, "0");

+    cfg_set(NV_SYS_MODE, "");

+    cfg_set(NV_SYS_SUBMODE, "");

+    cfg_set(NV_DAIL_STEP, "1");

+

+    cfg_set(LOCK_CELL_STATE_FLAG, "0");

+    cfg_set("ussd_cancel_flag","no");//ussd

+    cfg_set("fota_update_flag", "");

+	

+}

+

+char *normal_findsubstr(const char *pStr, const char *pSubStr)

+{

+    long  i = 0;

+    long  flg = 0;

+    long  nLengthStr = 0;

+    long  nLengthSubStr = 0;

+    const char *pchTemp = ZUFI_NULL;

+    

+    /* È¡µÃÁ½¸ö×Ö·û´®µÄ³¤¶È */

+    nLengthStr      = (long)strlen(pStr);

+    nLengthSubStr   = (long)strlen(pSubStr);

+    if (nLengthStr < nLengthSubStr)

+    {

+        return NULL;

+    }

+    pchTemp = pStr;

+    /* ¿ªÊ¼²éÕÒ */

+    for (i = 0; i <= nLengthStr - nLengthSubStr; i++)

+    {

+        if ('"' == *pchTemp)

+        {

+            if (0 == flg)

+            {

+                flg = 1;

+            }

+            else

+            {

+                flg = 0;

+            }

+        }

+        if ((*pchTemp == *pSubStr) && (0 == flg))

+        {

+            if (0 == at_strncmp(pchTemp, pSubStr, (UINT32)nLengthSubStr))

+            {

+                return (char *) pchTemp;

+            }

+        }

+        pchTemp++;

+    }

+    return NULL;

+}

+

+/*Ô¤´¦Àí*/

+VOID normal_preprocresparalineex(char *pParaLine,int paraSize)

+{

+    UINT32 i = 0;

+    UINT32 length = 0;

+    char *pSource = ZUFI_NULL;

+    char *pDest = ZUFI_NULL;

+    char strDestLine[AT_CMD_MAX] = {0};

+	

+    if (AT_CMD_MAX <= strlen(pParaLine)) /* ²ÎÊý¼ì²é ¡¢³¤¶È¼ì²é*/

+    {

+    	softap_assert("");

+        return;

+    }

+	if(0 == strlen(pParaLine))

+		return;

+    length = (UINT32)strlen(pParaLine);

+    pSource = pParaLine;                /* Ñ­»·´¦Àí */

+    pDest = strDestLine;

+    for (i = 0; i < length; i++)

+    {

+        if ('(' == *pSource)

+        {

+            ;                           /* ×óÀ¨»¡ ɾ³ý */

+        }

+        else if (')' == *pSource)

+        {

+            if (',' == *(pSource + 1))  /* ÓÒÀ¨»¡,ÅжϽô¸úÆäºóµÄÊÇ·ñ¶ººÅ                    */

+            {

+                pSource++;              /* ÊǶººÅ£¬É¾³ýÓÒÀ¨»¡²¢ÔÚÄ¿µÄ´®Öн«¶ººÅת»»Îª·ÖºÅ   */

+                *pDest = ';';

+                pDest++;

+            }

+        }

+        else

+        {

+            *pDest = *pSource;

+            pDest++;

+        }

+        pSource++;

+    }

+    /* ½«Ô¤´¦ÀíºóµÄÄÚÈÝ¿½±´»Ø²ÎÊýÐÐÖÐ */

+    memset(pParaLine, 0, paraSize);

+    strncpy(pParaLine, strDestLine,paraSize-1);

+}

+

+/*Ô¤´¦Àí*/

+void normal_preprocresparalist(T_zAt_RES_PARAS_LIST *pParaList, const char *pParas)

+{

+    long i = 0;

+    char *pHead = ZUFI_NULL;

+    char *pEnd = ZUFI_NULL;

+	

+	if(!at_strcmp(pParas, "OK"))

+	{

+		pParaList->listCount = 0;

+		return;

+	}

+	

+    /* Ñ­»·²éÕÒ';' */

+	

+    pHead = pEnd = (char *) pParas;

+    pEnd = normal_findsubstr(pHead, ";");

+    while (pEnd != ZUFI_NULL)

+    {

+        /* ÕÒµ½';' */

+        /* Ô½½ç±£»¤ */

+        if ((pParaList->listCount >= ZAT_RES_PARAM_MAX_NUM)

+            || (pEnd - pHead >= ZAT_RES_PARAM_MAX_LEN))

+        {

+            return;

+        }

+        /* ¿½±´ÄÚÈÝ */

+        strncpy(pParaList->strParasLine[i], pHead, (UINT32)(pEnd - pHead));

+        pParaList->listCount++;

+        i++;

+        pHead = pEnd + 1;

+        pEnd = normal_findsubstr(pHead, ";");// yx  new  add  2013-5-20

+    }

+	

+    if ((strlen(pHead) != 0) && (pParaList->listCount < ZAT_RES_PARAM_MAX_NUM))

+    {

+        strncpy(pParaList->strParasLine[i], pHead,ZAT_RES_PARAM_MAX_LEN-1);

+        pParaList->listCount++;

+    }

+}

+

+//cops=?ÃüÁîÉϱ¨½á¹û´¦Àí

+VOID normal_recvcopstestrsp(char *at_paras)

+{

+	UINT32 listIndex = 0;

+	UINT32 copsIndex = 0;

+	T_zAt_CopsTestRes		 tPara		 = {0};

+	T_zAt_RES_PARAS_LIST	tParasList	= {0};

+	const char *pCopHeader = NULL;

+	char *pCopEnd = NULL;

+	int len = 0;

+			

+	pCopHeader = at_paras;

+	pCopEnd = normal_findsubstr(pCopHeader, ",,");

+	{

+		char copsContent[AT_CMD_MAX] = {0};

+		if(pCopEnd == NULL)

+		{

+			strncpy(copsContent, at_paras,sizeof(copsContent)-1);

+		}

+		else

+		{

+		    if(pCopEnd - pCopHeader >= sizeof(copsContent))

+			{

+			    len = sizeof(copsContent)-1;

+			}

+		    else

+			{

+			    len = pCopEnd - pCopHeader;

+			}

+			snprintf(copsContent,len+1,"%s",at_paras);

+			//strncpy(copsContent, at_paras, len);

+		}

+		

+		normal_preprocresparalineex(copsContent,sizeof(copsContent));			   /* Ô¤´¦Àí¸´ÔÓ²ÎÊýÐÐ */

+		normal_preprocresparalist(&tParasList, copsContent);   /* Ô¤´¦Àí²ÎÊýÁÐ±í   */

+	}

+	{

+		char operatorInfo[256]	= {0};

+		char copsList[512] = {0};

+		char copsList_tmp[512] = {0};

+		for(listIndex = 0; listIndex < tParasList.listCount; listIndex++)

+		{	

+			void *p[6] = {&tPara.oplist[copsIndex].stat,tPara.oplist[copsIndex].lalphaOper,tPara.oplist[copsIndex].salphaOper,

+					tPara.oplist[copsIndex].numericOper,&tPara.oplist[copsIndex].netType,&tPara.oplist[copsIndex].subType};

+			at_print(AT_DEBUG,"normal_recvcopstestrsp at_paras=%s!\n",tParasList.strParasLine[listIndex]);

+		    parse_param2("%d,%s,%s,%s,%d,%d", tParasList.strParasLine[listIndex], p);

+		    at_print(AT_DEBUG,"normal_recvcopstestrsp stat=%d,lalphaOper=%s,salphaOper=%s,numericOper=%s,netType=%d,subType=%d!\n",

+		    tPara.oplist[copsIndex].stat,tPara.oplist[copsIndex].lalphaOper,tPara.oplist[copsIndex].salphaOper,

+			tPara.oplist[copsIndex].numericOper,tPara.oplist[copsIndex].netType,tPara.oplist[copsIndex].subType);  

+			

+			if(0 == tPara.oplist[copsIndex].stat && 0 ==strcmp("", tPara.oplist[copsIndex].numericOper))

+			{

+				continue;

+			}

+			snprintf(operatorInfo, sizeof(operatorInfo), "%d,%s,%s,%d,%d", 

+				tPara.oplist[copsIndex].stat, tPara.oplist[copsIndex].salphaOper, 

+				tPara.oplist[copsIndex].numericOper, tPara.oplist[copsIndex].netType, tPara.oplist[copsIndex].subType);

+			if(0 == copsIndex)

+			{

+				snprintf(copsList,sizeof(copsList),"%s", operatorInfo);	

+			}

+			else

+			{

+				memcpy(copsList_tmp,copsList,sizeof(copsList_tmp));

+				snprintf(copsList,sizeof(copsList),"%s;%s", copsList_tmp ,operatorInfo); 

+			}

+		    copsIndex++;

+		}

+		char strValue[20] = {0};

+		snprintf(strValue,sizeof(strValue), "%ld", copsIndex);

+		cfg_set(NV_NET_NUM, strValue);

+		cfg_set(NV_M_NETSELECT_CONTENTS, copsList);

+		cfg_set(NV_M_NETSELECT_STATUS, "manual_selected");

+	}

+}

+

+int normal_netprovider_callback(void *fvarg,int line,char **zresult,char **lname)

+{

+	T_zAt_OperatorName operatorName = {0};

+	if(1 > line)

+	{

+		at_print(AT_DEBUG,"atBase: NetProvider record no data.");

+		return -1;

+	}

+    if(zresult[0] != NULL)

+    {

+    	strncpy(operatorName.OperFullName,  zresult[0], sizeof(operatorName.OperFullName)-1);

+    }

+    if(zresult[1] != NULL)

+	{

+    	strncpy(operatorName.OperShortName, zresult[1], sizeof(operatorName.OperShortName)-1);

+		

+	}

+	memcpy(fvarg,&operatorName,sizeof(operatorName));

+	return 0;

+}

+

+

+long normal_number2networkprovider(char *pplmn, T_zAt_OperatorName *opraName)

+{

+    char sql[128] = {0};

+	T_zAt_OperatorName operatorName = {0};

+    int result = DB_OK;

+	

+    if(ZUFI_NULL == pplmn)

+    {

+        return -1;

+    }

+

+    snprintf(sql,128-1,"select full_name,short_name from net_list where plmn=\'%s\' limit 1", pplmn);

+    result = normal_execdbsql(ZNETPROVIDER_DB_PATH, sql, normal_netprovider_callback, &operatorName);

+    if(DB_OK != result)

+    {

+        return ZUFI_FAIL;

+    }

+    at_print(AT_DEBUG,"normal_number2networkprovider OperShortName=%s\n",operatorName.OperShortName);

+	strncpy(opraName->OperShortName, operatorName.OperShortName, sizeof(opraName->OperShortName)-1);

+    if(operatorName.OperFullName[0] == '\0')

+    {

+        return ZUFI_FAIL;

+    }

+	strncpy(opraName->OperFullName, operatorName.OperFullName, sizeof(opraName->OperFullName)-1);

+		

+	return ZUFI_SUCC;

+

+}

+

+long normal_getnetworkprovidername(char *MCC, char *MNC,char *Net_Provider_Name,int len)

+{

+    long   listSize       = 0;

+    long   iCount         = 0;

+    long   mccNum         = 0;

+    long   mncNum         = 0;

+    long   qualListMcc    = 0;

+    long   quallistMnc    = 0;

+	

+    if(ZUFI_NULL == MCC || ZUFI_NULL == MNC ||  ZUFI_NULL == Net_Provider_Name)

+    {

+        at_print(AT_ERR,"the paraments of function is wrong!");

+        return ZUFI_FAIL;

+    }

+    mccNum = atoi( MCC );

+    mncNum = atoi( MNC );

+	

+    listSize = sizeof(G_ZAT_QUALCOMMLISTNODE)/sizeof(T_zAt_QualcommListNode);

+	

+    for(iCount = 0; iCount< listSize; iCount++)

+    {

+        qualListMcc = atoi( G_ZAT_QUALCOMMLISTNODE[iCount].mcc );

+        quallistMnc = atoi( G_ZAT_QUALCOMMLISTNODE[iCount].mnc );

+        if( (qualListMcc == mccNum)  && (quallistMnc == mncNum))

+        {

+            strncpy(Net_Provider_Name,G_ZAT_QUALCOMMLISTNODE[iCount].networkProvider,len-1);

+            break;

+        }

+    }

+	

+    if (iCount < listSize)

+    {

+        /* ÕÒµ½Æ¥ÅäÔËÓªÉÌÃû³Æ */

+        at_print(AT_DEBUG,"get provider name in list  ok !\n");

+        return ZUFI_SUCC;

+    }

+    else

+    {

+        /* δÕÒµ½Æ¥ÅäÔËÓªÉÌÃû³Æ */

+        at_print(AT_DEBUG,"can not get provider name in list!\n");

+        return  ZUFI_FAIL;

+    }

+}

+

+

+VOID normal_recvcopsreadrsp(char * at_paras)

+{

+    char sProvider[70]       = {0};

+    char netProviderName[70] = {0};

+    char sMCC[10]            = {0};

+    char sMNC[10]            = {0};

+	char needCopsNumFormat[10] = {0};

+	T_zAt_CopsReadRes  copsReadPara = {0};

+	T_zAt_OperatorName operatorName = {0};

+	

+	void *p[5] = {&copsReadPara.mode,&copsReadPara.format,copsReadPara.oper,&copsReadPara.act,&copsReadPara.subact};

+	at_print(AT_DEBUG,"normal_recvcopsreadrsp at_paras=%s!\n",at_paras);

+	parse_param2("%d,%d,%s,%d,%d", at_paras, p);

+	at_print(AT_DEBUG,"normal_recvcopsreadrsp mode=%ld,format=%ld,oper=%s,act=%ld,subact=%ld!\n",

+	copsReadPara.mode,copsReadPara.format,copsReadPara.oper,copsReadPara.act,copsReadPara.subact);	

+

+    strncpy(sProvider, copsReadPara.oper, sizeof(sProvider)-1);

+	

+    strncpy(sMCC, sProvider, 3);

+    at_print(AT_DEBUG,"MCC is %s\n", sMCC);

+	

+    strncpy(sMNC, sProvider+3,sizeof(sMNC)-1);

+    at_print(AT_DEBUG,"MNC is %s\n", sMNC);

+	

+    cfg_set(NV_MCC, sMCC);

+    cfg_set(NV_MNC, sMNC);

+    cfg_set(NV_OPER_NUM, copsReadPara.oper);

+    cfg_get_item("need_cops_number_format", needCopsNumFormat, sizeof(needCopsNumFormat));

+    if(0 == strcmp("yes", needCopsNumFormat))

+	{

+		if(2 == copsReadPara.format && ZUFI_SUCC == normal_number2networkprovider(sProvider, &operatorName))

+		{

+			strncpy(netProviderName,operatorName.OperFullName,sizeof(netProviderName)-1);

+			cfg_set("network_provider",netProviderName);

+            at_print(AT_DEBUG,"operator brand found in the Qualcomm list ! \n");

+		}

+		else

+	    {

+	        if(0 == strcmp(copsReadPara.oper,"CHINA MOBILE"))

+	        {

+	            strcpy(copsReadPara.oper, "China Mobile");

+	        }

+	        cfg_set("network_provider",copsReadPara.oper);

+	        at_print(AT_DEBUG,"operator brand not found in the Qualcomm list ! \n");

+	    }

+	}

+	else

+    {

+        if(2 == copsReadPara.format && ZUFI_SUCC == normal_getnetworkprovidername(sMCC, sMNC,netProviderName,sizeof(netProviderName)))

+        {

+            cfg_set(NV_NETWORK_PROVIDER,netProviderName);

+        }

+        else

+        {

+            if(0 == strcmp(copsReadPara.oper,"CHINA MOBILE"))

+            {

+                strncpy(copsReadPara.oper, "China Mobile",sizeof(copsReadPara.oper)-1);

+            }

+            cfg_set(NV_NETWORK_PROVIDER,copsReadPara.oper);    

+            at_print(AT_DEBUG,"operator brand not found in the Qualcomm list ! \n");

+        }

+    }

+    at_print(AT_DEBUG,"normal_recvcopsreadrsp send to mmi MSG_CMD_GET_NET_PROVIDER\n");

+    ipc_send_message(MODULE_ID_AT_CTL,MODULE_ID_MMI,MSG_CMD_GET_NET_PROVIDER, 0, NULL,0);   

+}

+

+

+int normal_getautoapn_callback(void *fvarg,int line,char **zresult,char **lname)

+{

+    T_zAt_APN_PROFILE para = {0};

+    if(1 > line)

+    {

+        at_print(AT_DEBUG,"zte_sms:record no data.\n");

+        cfg_get_item(NV_PDP_TYPE,para.pdp_type,sizeof(para.pdp_type));

+        return -1;

+    }

+    if(zresult[0] != NULL)

+    {

+        strncpy(para.profile_name, zresult[0], ZAT_PROFILE_MEMBER_LEN - 1);

+    }

+    if(zresult[1] != NULL)

+    {

+        strncpy(para.apn_name, zresult[1], ZAT_PROFILE_MEMBER_LEN - 1);

+        at_print(AT_DEBUG,"atBase_GetAutoApn_Callback: apn_name != NULL!\n");

+    }

+    if(zresult[2] != NULL)

+    {

+        strncpy(para.dial_num, zresult[2], ZAT_PROFILE_MEMBER_LEN - 1);

+    }

+    if(zresult[3] != NULL)

+    {

+        strncpy(para.ppp_auth_mode, zresult[3], ZAT_PROFILE_MEMBER_LEN - 1);

+    }

+    if(zresult[4] != NULL)

+    {

+        strncpy(para.ppp_username, zresult[4], ZAT_PROFILE_MEMBER_LEN - 1);

+        at_print(AT_DEBUG,"atBase_GetAutoApn_Callback: para.ppp_username != NULL!\n");

+    }

+    if(zresult[5] != NULL)

+    {

+        strncpy(para.ppp_passwd, zresult[5], ZAT_PROFILE_MEMBER_LEN - 1);

+    }

+    if(zresult[6] != NULL)

+    {

+        strncpy(para.pdp_type, zresult[6], ZAT_PROFILE_MEMBER_LEN - 1);

+    }    

+    memcpy(fvarg,&para,sizeof(para));

+    

+    return 0;

+}

+

+void normal_get_cardtype(char *ccmnc)

+{

+	if (strcmp(ccmnc, "46000") == 0 || 

+        strcmp(ccmnc, "46002") == 0 || 

+        strcmp(ccmnc, "46007") == 0 ||

+        strcmp(ccmnc, "46008") == 0)

+	{

+		cfg_set(NV_SIMCARD_TYPE, "1");

+	}

+	else if (strcmp(ccmnc, "46001") == 0 || 

+        strcmp(ccmnc, "46006") == 0)

+	{

+		cfg_set(NV_SIMCARD_TYPE, "2");

+	}

+	else if (strcmp(ccmnc, "46003") == 0 || 

+        strcmp(ccmnc, "46005") == 0 ||

+        strcmp(ccmnc, "46011") == 0 )

+	{

+		cfg_set(NV_SIMCARD_TYPE, "3");

+	}

+	else

+	{

+		cfg_set(NV_SIMCARD_TYPE, "4");

+

+	}

+

+}

+

+/*»ñÈ¡auto apn*/

+long normal_getautoapn(char *CCMNC)

+{

+    char sql[128] = {0};

+    char apn_auto_config[256];

+    T_zAt_APN_PROFILE apnpara = {0};

+    DbResult result = DB_OK;

+    char apnMode[50] = {0};

+    cfg_get_item(NV_APN_MODE,apnMode,sizeof(apnMode));

+    

+    snprintf(sql,sizeof(sql),"select ConfigFileName,APN,LoginNumber,AuthType,UserName,Password,PDPType from apn_list where CCMNC='%s' limit 1",CCMNC);

+    result = normal_execdbsql(ZAPN_DB_PATH,sql, normal_getautoapn_callback, &apnpara);

+	

+    at_print(AT_DEBUG,"atBase_GetAutoApn CCMNC:%s!\n",CCMNC);

+    if(DB_OK != result)

+    {

+        return -1;

+    }

+	if(strlen(apnpara.profile_name) == 0)

+	{

+		at_print(AT_ERR,"normal_getautoapn no item CCMNC:%s!\n",CCMNC);

+		return -1;

+	}

+    if(strlen(apnpara.pdp_type) == 0)

+    {

+        strncpy(apnpara.pdp_type, "IP", ZAT_PROFILE_MEMBER_LEN - 1);

+    }

+    

+    if(0 == strcmp("auto", apnMode))

+    {

+        cfg_set(NV_PDP_TYPE, apnpara.pdp_type);

+        if(strcmp("IPv6", apnpara.pdp_type) == 0 || strcmp(apnpara.pdp_type, "IPv4v6") == 0)

+        {

+            cfg_set(NV_IPV6_WAN_APN, apnpara.apn_name);

+    	    cfg_set(NV_IPV6_PDP_TYPE, apnpara.pdp_type);

+    	    cfg_set(NV_WAN_APN, apnpara.apn_name);

+    	    cfg_set(NV_IPV6_PPP_AUTH_MODE, apnpara.ppp_auth_mode);

+			cfg_set(NV_IPV6_PPP_USERNAME,apnpara.ppp_username);

+			cfg_set(NV_IPV6_PPP_PASSWD,apnpara.ppp_passwd);

+			ipv6apn_encrypt_code();

+        }

+        else

+        {

+            cfg_set(NV_WAN_APN, apnpara.apn_name);

+	        cfg_set(NV_PPP_AUTH_MODE, apnpara.ppp_auth_mode);

+			cfg_set(NV_PPP_USERNAME,apnpara.ppp_username);

+			cfg_set(NV_PPP_PASSWD,apnpara.ppp_passwd);

+			apn_encrypt_code();

+        }	

+        cfg_set(NV_M_PROFILE_NAME, apnpara.profile_name);

+		if(g_modem_model)

+		{

+			cfg_set("default_apn", apnpara.apn_name);

+			MSG_BUF *buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_APN_SET_REQ,0,NULL);

+			rcv_clt_req_msg_proc(buf);

+			free(buf);

+		}

+    }

+    snprintf(apn_auto_config, sizeof(apn_auto_config),"%s($)%s($)auto($)%s($)%s($)%s($)%s($)%s($)auto($)($)auto($)($)", 

+		apnpara.profile_name, apnpara.apn_name, apnpara.dial_num, apnpara.ppp_auth_mode, apnpara.ppp_username, 

+		apnpara.ppp_passwd, apnpara.pdp_type);	

+    at_print(AT_DEBUG,"atBase_GetAutoApn apn_auto_config = %s!\n",apn_auto_config);

+    cfg_set(NV_APN_AUTO_CONFIG, apn_auto_config);

+#ifdef MULTI_CPU

+	sync_default_apn(NULL);

+#endif

+    return 0;

+}

+

+void normal_recvzrapok()

+{

+    char modemState[50] = {0};

+    char pinProcess[50] = {0};

+    char pinManage[50] = {0};

+    cfg_get_item(NV_MODEM_MAIN_STATE,modemState,sizeof(modemState));

+    cfg_get_item(NV_PIN_PUK_PROCESS,pinProcess,sizeof(pinProcess));

+    cfg_get_item(NV_PIN_MANAGE_PROCESS,pinManage,sizeof(pinManage));

+    

+    if(strcmp(pinProcess,"begin") == 0

+	    &&0 == strcmp("modem_init_complete",modemState))

+    {

+        cfg_set(NV_PIN_PUK_PROCESS, "end");

+        printf("pin_puk_process = end --- modem_init_complete"); 

+    }

+    /*web pin¡¢pukÂëÑéÖ¤¶¯×÷½áÊøºó£¬·¢ZAT_SYSCONFIGREAD_CMD*/

+    else if(strcmp(pinProcess,"begin") == 0)

+    {

+        cfg_set(NV_PIN_PUK_PROCESS, "end");

+        printf("pin_puk_process = end"); 

+    }

+		

+    /*web pinÂë¹ÜÀí¶¯×÷´¥·¢ZrapºóÎÞÏÂÒ»ÌõAT£¬½«ATÃüÁîÔ´¸³ÖµÎªATMIAN*/

+    if(strcmp(pinManage,"begin") == 0)

+    {

+        printf("pin_manage_process = end");        

+        cfg_set(NV_PIN_MANAGE_PROCESS, "end");

+    }

+}

+

+MSG_BUF *normal_getmsg(unsigned short src_id,unsigned short dst_id,unsigned short Msg_cmd,unsigned short us_DataLen,unsigned char *pData)

+{

+    MSG_BUF *buf=malloc(sizeof(MSG_BUF));

+    if(buf == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(buf, 0, sizeof(MSG_BUF));

+    buf->ulMagic = MSG_MAGIC_WORD;

+    buf->lMsgType = MSG_TYPE_DEFAULT;

+    buf->src_id = src_id;

+    buf->dst_id = dst_id;

+    buf->usMsgCmd = Msg_cmd;

+    buf->usDataLen = us_DataLen;

+    if(us_DataLen > 0)

+    {

+        memcpy(buf->aucDataBuf, pData, us_DataLen);

+    }

+    return buf;

+}

+

+char* normal_zschplmnset(int mode)

+{

+	char *at_next=NULL;

+	at_next=malloc(20);

+ 	if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+ 	memset(at_next,0,20);

+	snprintf(at_next,20,"AT+ZSCHPLMN=%d\r\n",mode);

+	return at_next;

+

+}

+

+int zupci_auto_act(char *at_paras ,int is_query_report)

+{

+    at_print(AT_ERR,"zupci=%s\n",at_paras);

+	MSG_BUF *buf=NULL;

+	buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_ZUTR_REQ,strlen(at_paras),(unsigned char *)at_paras);

+	rcv_clt_req_msg_proc(buf);

+	free(buf);

+    return AT_END;

+}

+

+char* start_zutr_cmd(void *msg,struct at_context *context)

+{

+	int cmd_type=0;

+	int cmd_num=0;

+	int cmd_qual=0;

+	MSG_BUF *buf=NULL;

+	char *at_paras=malloc(strlen((char *)((MSG_BUF*)msg)->aucDataBuf)+1);

+	if(at_paras == NULL)

+		return NULL;

+	memset(at_paras,0,strlen((char *)((MSG_BUF*)msg)->aucDataBuf)+1);

+	strcpy(at_paras,(char *)((MSG_BUF*)msg)->aucDataBuf);

+	

+	void *p[3] = {&cmd_type,&cmd_num,&cmd_qual};

+	at_print(AT_DEBUG,"start_zutr_cmd at_paras=%s!\n",at_paras);

+	parse_param2("%d,%d,%d", at_paras, p);

+	at_print(AT_ERR,"start_zutr_cmd %d,%d,%d!\n",cmd_type,cmd_num,cmd_qual);

+	free(at_paras);

+

+	if(cmd_type == 33 || cmd_type == 34 || cmd_type == 35 || cmd_type == 36 || cmd_type == 37)

+	{

+		char *at_next=NULL;

+		at_next=malloc(64);

+		if(at_next == NULL){

+			softap_assert("");

+			return NULL;

+		}

+		memset(at_next,0,64);

+		if(cmd_type == 33)

+			snprintf(at_next,64,"AT+ZUTR=%d,%d,%d,0\r\n",cmd_type,cmd_qual,cmd_num);

+		else

+			snprintf(at_next,64,"AT+ZUTR=%d,%d,%d,32\r\n",cmd_type,cmd_qual,cmd_num);

+		return at_next;

+	}

+		

+	return NULL;

+}

+

+int zmsri_auto_act(char *at_paras ,int is_query_report)

+{

+    at_print(AT_DEBUG,"modem init start!\n");

+	MSG_BUF *buf=NULL;

+	//int guodian = 0;

+	normal_simcardcfgreset();

+	buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,ATCTL_INNER_ZCHNELSET_MSG,0,NULL);

+	rcv_clt_req_msg_proc(buf);

+	free(buf);

+	

+	buf = normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_IMEI_REQ,0,NULL);//modem³õʼ»¯Íê³Éºó£¬²éѯimeiºÅ

+	rcv_clt_req_msg_proc(buf);

+	free(buf);

+	buf = NULL;

+//#ifdef GUODIAN

+//	guodian = 1;

+//#endif

+	if(g_customer_type)

+	{

+		buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,ATCTL_INNER_CVMOD_MSG,0,NULL);

+		rcv_clt_req_msg_proc(buf);

+		free(buf);

+	}

+	if(g_modem_model || g_customer_type)

+	{

+		buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,ATCTL_INNER_ZMSRI_MSG,0,NULL);

+		rcv_clt_req_msg_proc(buf);

+		free(buf);

+	}

+	if(!g_modem_model)

+	{

+		buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_NITZ_REQ,2,"1");

+		rcv_clt_req_msg_proc(buf);

+		free(buf);

+	}

+    return AT_END;

+}

+

+int zrefreshind_auto_act(char *at_paras ,int is_query_report)

+{

+	at_print(AT_ERR,"zrefreshind start!\n");

+	if(g_modem_model)

+	{

+		char needrestart[50]  = {0};

+		cfg_get_item("need_restart_when_sim_insert",needrestart,sizeof(needrestart));

+		if(strcmp("yes", needrestart) == 0)//ÖØÆô²Ù×÷

+		{

+			at_print(AT_DEBUG,"zrefreshind_auto_act RESTART\n");

+			ipc_send_message(MODULE_ID_AT_CTL,MODULE_ID_MAIN_CTRL, MSG_CMD_RESTART_REQUEST, 0, NULL,0);

+		}

+		else//²»ÖØÆô²Ù×÷£¬ÖØÐÂ×ßÒ»±é¿ª»úÁ÷³Ì£¬TODO

+		{

+			MSG_BUF *buf=NULL;

+			T_zAt_ZuslotRes zuslotPara = {0};//¸´Óðο¨Á÷³Ì

+			if(g_support_sms)	

+			ipc_send_message2(MODULE_ID_AT_CTL,MODULE_ID_SMS,MSG_CMD_ZUSLOT_IND,sizeof(zuslotPara),(unsigned char *)&zuslotPara,0);

+			if(g_support_pb)	

+			ipc_send_message2(MODULE_ID_AT_CTL,MODULE_ID_PB,MSG_CMD_ZUSLOT_IND,sizeof(zuslotPara),(unsigned char *)&zuslotPara,0);

+			buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,ATCTL_INNER_ZMSRI_MSG,0,NULL);

+			rcv_clt_req_msg_proc(buf);

+			free(buf);

+		}

+	}

+	return AT_END;

+}

+

+int zuslot_auto_act(char *at_paras ,int is_query_report)

+{

+    at_print(AT_DEBUG,"zuslot:%s start!\n",at_paras);

+	if(g_modem_model)

+	{

+		MSG_BUF *buf=NULL;

+		buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,ATCTL_INNER_ZUSLOT_MSG,strlen(at_paras),(unsigned char *)at_paras);

+		rcv_clt_req_msg_proc(buf);

+		free(buf);

+	}

+	else

+	{

+		cfg_set(NV_AUTO_RECONNECT,"");

+	}

+    return AT_END;

+}

+

+char* start_start_zmsri(void *msg,struct at_context *context)

+{

+	cfg_set("ppp_status", "ppp_disconnected");

+    //psinfo.zrap_state = ZRAP_READ_FIR_CMD;

+    //return normal_getzrapread();

+    return normal_getcfunset(ZAT_POWERON);

+}

+

+//²éѯÐźÅÇ¿¶Èat+csq

+char* start_query_csq(void *msg,struct at_context *context)

+{

+    return normal_getcsq();

+}

+

+

+char* start_verifypin_cmd(void *msg,struct at_context *context)

+{

+    char modemState[50] = {0};

+    if (msg == NULL)

+    {

+        return NULL;

+    }

+    cfg_get_item(NV_MODEM_MAIN_STATE,modemState,sizeof(modemState));

+    at_print(AT_DEBUG,"VerifyPin %s.modem_main_state is %s.\n",((MSG_BUF*)msg)->aucDataBuf,modemState);

+    if(0 == strcmp("modem_waitpin",modemState))//ÐèÒªpinÂë

+    {

+        if(strcmp((char *)((MSG_BUF*)msg)->aucDataBuf, "") != 0)

+        {

+            return normal_getcpinset((char *)((MSG_BUF*)msg)->aucDataBuf);

+        }

+    }

+    return NULL;

+}

+

+char* start_verifypuk_cmd(void *msg,struct at_context *context)

+{

+    T_zAt_CpinPukSet tCpinSet = {0};

+    char modemState[50]   = {0};

+    char pinNumber[50] = {0};

+	

+    if (msg == ZUFI_NULL)

+    {

+		return NULL;

+    }

+    cfg_get_item(NV_MODEM_MAIN_STATE,modemState,sizeof(modemState));

+    cfg_get_item(NV_PINNUMBER,pinNumber,sizeof(pinNumber));

+	at_print(AT_DEBUG,"VerifyPuk modem_main_state is %s.\n", modemState);

+ 	if(0 == strcmp("modem_waitpuk",modemState) || 0 == strcmp("0",pinNumber)) //ÐèÒªpukÂë

+	{

+		memcpy(&tCpinSet,((MSG_BUF*)msg)->aucDataBuf, sizeof(T_zAt_CpinPukSet));

+		

+		at_print(AT_DEBUG,"VerifyPuk puk=%s,newpin=%s\n", tCpinSet.pin, tCpinSet.newpin);

+		if (0 != strcmp(tCpinSet.pin,"") && 0 != strcmp(tCpinSet.newpin,""))

+		{        

+            return normal_getcpukset(tCpinSet.pin, tCpinSet.newpin);

+        }

+    }

+    return NULL;

+}

+

+char* start_netselect_cmd(void *msg,struct at_context *context)

+{

+    char *at_next = NULL;

+    char netMode[50] = {0};

+    cfg_get_item(NV_NET_SELECT_MODE,netMode,sizeof(netMode));

+    if(0 == strcmp("manual_select", netMode))//ÊÖ¶¯ËÑÍø

+    {

+        at_print(AT_DEBUG,"atWeb_NetSelect manual_select!\n");

+        cfg_set("manual_search_network_status", "searching");

+        at_next=normal_getcopstest();

+        normal_copstest_timerout(msg);

+    }

+    else if(0 == strcmp("auto_select", netMode))

+    {

+        at_print(AT_DEBUG,"atWeb_NetSelect auto_select!\n");

+        at_next=normal_getcfunset(ZAT_AIRMODE);

+    }

+	else

+	{

+        at_print(AT_DEBUG,"atWeb_NetSelect ???!\n");

+        at_next=normal_getcfunset(ZAT_AIRMODE);

+	}

+    return at_next;

+}

+

+char *start_pinmanage_cmd(void *msg,struct at_context *context)

+{

+    char *at_next=NULL;

+    char pinMode[10] = {0};

+    T_zAt_PinManage *ptPara = ZUFI_NULL;

+    if(msg == NULL)

+    {

+        return NULL;

+    }

+    ptPara = (T_zAt_PinManage*)(((MSG_BUF*)msg)->aucDataBuf);

+	at_print(AT_DEBUG,"start_pinmanage_webui action=%d,pincode=%s,newpincode=%s!\n",ptPara->action,ptPara->oldPin,ptPara->newPin);

+    if(ZAT_PIN_MANAGE_ENABLE == ptPara->action || ZAT_PIN_MANAGE_DISABLE == ptPara->action)

+    {

+        at_next=normal_getclckset(3,"SC",ptPara->action,ptPara->oldPin);

+        psinfo.clck_state=CLCK_SET_CMD;

+        snprintf(pinMode,sizeof(pinMode), "%d",ptPara->action);

+        cfg_set(NV_CLCK_SET_MODE,pinMode);

+    }

+    else if (ZAT_PIN_MANAGE_MODIFY == ptPara->action)

+    {

+        at_next=normal_getcpwdset("SC",ptPara->oldPin,ptPara->newPin);

+    }

+    return at_next;

+}

+

+char* start_setnetwork_cmd(void *msg,struct at_context *context)

+{

+    char *at_next=NULL;

+    char subType[10] = {0};

+    T_zAt_CopsSet copsSetPara = {0};

+    char netType[30] = {0};

+    cfg_get_item("current_subrat_tmp",subType,sizeof(subType));

+    cfg_get_item(NV_STR_NUM_RPLMN_TMP,copsSetPara.oper,sizeof(copsSetPara.oper));

+    cfg_get_item(NV_CURRENT_RAT_TMP,netType,sizeof(netType));

+    copsSetPara.nettype=atoi(netType);

+    if(0 == strcmp(subType, ""))

+    {

+        copsSetPara.subtype = -1;;

+    }

+    else

+    {

+        copsSetPara.subtype = atoi(subType);

+    }

+    at_print(AT_DEBUG, "atWeb_NetManualselect: %s,--%ld--,%ld\n",copsSetPara.oper,copsSetPara.nettype,copsSetPara.subtype);

+    if(-1 == copsSetPara.subtype)

+    {

+        at_next=normal_getcopsset(2,copsSetPara.oper,copsSetPara.nettype);

+    }

+    else

+    {

+        at_next=normal_getcopsset(3,copsSetPara.oper,copsSetPara.nettype,copsSetPara.subtype);			

+    }	

+    cfg_set(NV_NETWORK_TYPE, "No Service");

+	cfg_set(NV_SUB_NETWORK_TYPE, "No Service");

+

+    return at_next;

+}

+

+char* start_syctimeset_cmd(void *msg,struct at_context *context)

+{

+    struct timeval tp;

+

+    if (0 != gettimeofday(&tp,NULL))

+    {

+        at_print(AT_ERR,"get time of system wrong");

+        return NULL;

+    }

+    return normal_getsyctimeset(tp.tv_sec, tp.tv_usec);

+}

+

+char *start_ussdset_cmd(void *msg,struct at_context *context)

+{

+    char networktype[50]  = {0};

+    char ussdstring[50]  = {0};

+	cfg_get_item("network_type",networktype,sizeof(networktype));

+    if((strcmp("No Service",networktype) == 0) || (strcmp("Limited Service",networktype) == 0) || (strcmp("Searching",networktype) == 0))

+    {

+        cfg_set("ussd_write_flag","1");

+        return NULL;

+    }

+    cfg_get_item("ussd_string",ussdstring,sizeof(ussdstring));

+    return normal_getcusdset(ussdstring);

+}

+

+char *start_ussdcancel_cmd(void *msg,struct at_context *context)

+{

+    char *at_next=NULL;

+    char cancelflag[50]  = {0};

+	cfg_get_item("ussd_cancel_flag",cancelflag,sizeof(cancelflag));

+    if(strcmp(cancelflag,"yes") == 0)

+    {

+        at_next=normal_getcusdset_clean();

+    }

+    else

+    {

+        cfg_set("ussd_write_flag","13");

+    }

+    return at_next;

+}

+

+char *start_airmode_cmd(void *msg,struct at_context *context)

+{

+    char *at_next=NULL;

+    int par = *((int *)(((MSG_BUF*)msg)->aucDataBuf));

+    if(1 == par)

+    {

+        at_next=normal_getcfunset(ZAT_AIRMODE);

+    }

+    else if(0 == par)

+    {

+        at_next=normal_getcfunset(ZAT_POWERON);

+    }

+    return at_next;

+}

+

+//LTEËøÆµ,δʹÓÃ

+char *start_celllock_cmd(void *msg,struct at_context *context)

+{

+    return normal_getzltelcset();

+}

+

+char *start_imeireq_cmd(void *msg,struct at_context *context)

+{

+    return normal_getcgsn();

+}

+

+char *start_zversionreq_cmd(void *msg,struct at_context *context)

+{

+    return normal_getzversion();

+}

+

+char *start_cgdcontset_cmd(void *msg,struct at_context *context)

+{

+	char creg_stat[20] = {0};

+	char cereg_stat[20] = {0};

+	

+	cfg_get_item("cgreg_stat", creg_stat, sizeof(creg_stat));

+	cfg_get_item("cereg_stat", cereg_stat, sizeof(cereg_stat));

+	at_print(AT_ERR,"cgdcontset cgreg =%s, cereg =%s!\n",creg_stat,cereg_stat);

+	if(1 != atoi(creg_stat) && 5 != atoi(creg_stat) && 1 != atoi(cereg_stat) && 5 != atoi(cereg_stat))

+	{//ûËѵ½ÍøÔòÒªÁ¢¼´ÅäÖÃAPN£¬autoapnºÍwebuiÅäÖÃʱÓÐЧ

+		return normal_getcgdcontset(1);

+	}

+	return NULL;

+}

+

+//ϵͳÐÅÏ¢»ñÈ¡ÃüÁîat^sysinfo

+char *start_query_sysinfo(void *msg,struct at_context *context)

+{

+    return normal_getsysinfo();

+}

+

+//zuslotÖ÷¶¯Éϱ¨ÃüÁîµÄ´¦Àí

+char *start_start_zuslot(void *msg,struct at_context *context)

+{

+    T_zAt_ZuslotRes   zuslotPara = {0};

+    char needrestart[50]  = {0};

+    MSG_BUF *buf=NULL;

+    char *at_paras=malloc(strlen((char *)((MSG_BUF*)msg)->aucDataBuf)+1);

+	if(at_paras == NULL)

+		return NULL;

+    memset(at_paras,0,strlen((char *)((MSG_BUF*)msg)->aucDataBuf)+1);

+    strcpy(at_paras,(char *)((MSG_BUF*)msg)->aucDataBuf);

+	

+	void *p[2] = {&zuslotPara.slot,&zuslotPara.slot_state};

+	at_print(AT_DEBUG,"start_start_zuslot at_paras=%s!\n",at_paras);

+	parse_param2("%d,%d", at_paras, p);

+	at_print(AT_DEBUG,"start_start_zuslot slot=%ld,slot_state=%ld!\n",zuslotPara.slot,zuslotPara.slot_state);

+    free(at_paras);

+    if(zuslotPara.slot_state == 0)//°Î¿¨²Ù×÷

+    {	

+        at_print(AT_DEBUG,"zuslot simcard plugout\n");

+		//you.chen@20250708 temp support switch card by Analog Switch IC -- begin

+		cfg_get_item("need_restart_when_sim_insert",needrestart,sizeof(needrestart));

+		if(strcmp("yes", needrestart) == 0)//ÖØÆô²Ù×÷

+		{

+		    at_print(AT_DEBUG,"zuslot simcard plugout,sendmsg to MODULE_ID_MAIN_CTRL\n");

+		    ipc_send_message(MODULE_ID_AT_CTL,MODULE_ID_MAIN_CTRL, MSG_CMD_RESTART_REQUEST, 0, NULL,0);

+		}

+		//you.chen@20250708 temp support switch card by Analog Switch IC -- end

+        cfg_set(NV_NEED_SIM_PIN,"");

+	    g_SimSlotFlag = FALSE;

+        normal_simcardcfgreset();

+        //¸øsms¡¢pbÄ£¿é·¢ÏûÏ¢£¬nvÖØÖ㬿¨²à¶ÌÐÅ¡¢ÁªÏµÈËɾ³ý

+	    if(g_modem_model)

+	    {

+			if(g_support_sms)	

+            ipc_send_message2(MODULE_ID_AT_CTL,MODULE_ID_SMS,MSG_CMD_ZUSLOT_IND,sizeof(zuslotPara),(unsigned char *)&zuslotPara,0);

+			if(g_support_pb)	

+            ipc_send_message2(MODULE_ID_AT_CTL,MODULE_ID_PB,MSG_CMD_ZUSLOT_IND,sizeof(zuslotPara),(unsigned char *)&zuslotPara,0);

+	    }

+        //psinfo.powersave_state=POWERSAVE_CARDREMOVE_CMD;

+        //return normal_getpowersave();

+    }

+    else if(zuslotPara.slot_state == 1)//²å¿¨²Ù×÷

+    {

+        at_print(AT_DEBUG,"zuslot simcard plugin\n");

+        cfg_get_item("need_restart_when_sim_insert",needrestart,sizeof(needrestart));

+        if(strcmp("yes", needrestart) == 0)//ÖØÆô²Ù×÷

+        {

+            at_print(AT_DEBUG,"zuslot simcard plugin,sendmsg to MODULE_ID_MAIN_CTRL\n");

+            ipc_send_message(MODULE_ID_AT_CTL,MODULE_ID_MAIN_CTRL, MSG_CMD_RESTART_REQUEST, 0, NULL,0);

+        }

+        else//²»ÖØÆô²Ù×÷£¬ÖØÐÂ×ßÒ»±é¿ª»úÁ÷³Ì

+        {

+            g_SimSlotFlag = TRUE;

+		    g_zUfi_canPdpDail = TRUE;

+			g_need_smspb_init = 0;

+            buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,ATCTL_INNER_ZMSRI_MSG,0,NULL);

+            rcv_clt_req_msg_proc(buf);

+            free(buf);

+        }

+    }	

+    return NULL;

+}

+

+char *start_setroam_cmd(void *msg,struct at_context *context)

+{

+    return normal_getsysconfigset();

+}

+

+int sysconfigread_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_DEBUG,"sysconfigread_ok_act msg_id=%x!\n",context->msg_id);

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            psinfo.zrap_state = ZRAP_READ_FIR_CMD;

+            *next_req = normal_getzrapread();

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+    }

+    return AT_END;

+}

+

+int sysconfigread_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_DEBUG,"zrap_err_act msg_id=%x!\n",context->msg_id);

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            psinfo.zrap_state = ZRAP_READ_FIR_CMD;

+            *next_req = normal_getzrapread();

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+    }

+    return AT_END;

+}

+

+int  zrap_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_DEBUG,"zrap_ok_act msg_id=%x!\n",context->msg_id);

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        case MSG_CMD_VERIFY_PIN_REQ:

+        case MSG_CMD_VERIFY_PUK_REQ:

+        {

+            if(psinfo.zrap_state == ZRAP_READ_FIR_CMD)//¿ª»úÁ÷³Ì×ߵķÖÖ§

+            {

+                *next_req = normal_getcpinread();

+				if(*next_req){

+                *next_len = strlen(*next_req);

+                return AT_CONTINUE;

+				}

+            }

+            else if(psinfo.zrap_state == ZRAP_READ_SEC_CMD)//pinºÍpukÂëÑéÖ¤ºó×ߵķÖÖ§

+            {

+                char pinSet[50]={0};

+                normal_recvzrapok();

+                cfg_get_item(NV_PINSET_RESULT,pinSet,sizeof(pinSet));

+                if(0 == strcmp(pinSet,"succ"))

+                {

+                    *next_req = normal_getcgsn();

+					if(*next_req){

+                        *next_len = strlen(*next_req);

+                        return AT_CONTINUE;

+					}

+                }

+            }

+            psinfo.zrap_state=ZRAP_OTHER_CMD;

+            return AT_END;

+        }

+        case MSG_CMD_PIN_NUM_REQ:

+        {

+            *next_req=malloc(10);

+			if(*next_req){

+                *next_len=10;

+                cfg_get_item("pinnumber",*next_req, 10-1);

+                return AT_END;

+			}

+			break; // cov 	M

+        }

+        case MSG_CMD_PIN_MANAGE_REQ:

+        {

+            normal_recvzrapok();

+            return AT_END;

+        }

+    }

+    return AT_END;

+}

+

+int  zrap_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        case MSG_CMD_PIN_MANAGE_REQ:

+        case MSG_CMD_VERIFY_PIN_REQ:

+        case MSG_CMD_VERIFY_PUK_REQ:

+        {

+            psinfo.zrap_state=ZRAP_OTHER_CMD;

+            if ((0 == strcmp(at_str, "10"))    /*no sim card*/

+                             ||(0 == strcmp(at_str, "13"))    /*card initialize failed*/

+                             ||(0 == strcmp(at_str, "15")))    /*card error*/

+            {

+                if(0 == strcmp(at_str, "13"))

+                {

+                    cfg_set(NV_MODEM_MAIN_STATE,"modem_sim_destroy");

+                    at_print(AT_DEBUG,"modem_sim_destroy:%s\n",at_str);

+                }

+                else

+                {

+                    cfg_set(NV_MODEM_MAIN_STATE,"modem_sim_undetected");

+                    at_print(AT_DEBUG,"modem_sim_undetected:%s\n",at_str);

+                }

+

+				

+				ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_MMI, MSG_CMD_SIM_ABNORMAL_IND, 0, NULL,0);

+				

+                /*³õʼ»¯pbmµÄAP ²àµç»°±¾×¼±¸³É¹¦£¬·ñÔòÎÞ¿¨Ê±webuiתȦ*/

+                cfg_set("pbm_init_flag","0");

+                

+                //½ø·ÉÐÐģʽ

+                //*next_req = normal_getpowersave();

+                //*next_len = strlen(*next_req);

+                //psinfo.powersave_state=POWERSAVE_CARDERROR_CMD;

+                /*struct timeval tp;

+                if (0 != gettimeofday(&tp,NULL))

+                {

+                    at_print(AT_DEBUG,"get time of system wrong");

+                    return AT_END;

+                }

+                *next_req = normal_getsyctimeset(tp.tv_sec, tp.tv_usec);*/

+				*next_req = normal_getmtnetset(mccNum);

+				if(*next_req){

+                *next_len = strlen(*next_req);

+                return AT_CONTINUE;

+				}

+            }

+            return AT_END;

+        }

+        case MSG_CMD_PIN_NUM_REQ:

+        {

+            *next_req=malloc(10);

+			if(*next_req){

+            *next_len=10;

+            strcpy(*next_req,"0");

+            return AT_END;

+			}

+        }

+    }

+    return AT_END;

+}

+

+int sysconfig_auto_act( char *at_paras ,int is_query_report)

+{

+    int mode = ZAT_SYSCONFIG_MODE_AUTO;

+    int acqorder = ZAT_SYSCONFIG_PREF_ACQ_AUTO;

+    int  modenow = -1;

+    int  acqordernow = -1;

+    int  roam = -1;

+    int  roamnow = -1;

+    int  srvdomain = -1;	

+	char auto_acqorder[50] = {0};

+	char strTemp[10] = {0};

+	

+	cfg_get_item("auto_acqorder",auto_acqorder,sizeof(auto_acqorder));

+

+	at_print(AT_DEBUG,"sysconfig_auto_act\n");	

+    sscanf(at_paras,"%d,%d,%d,%d",&modenow,&acqordernow,&roamnow,&srvdomain);

+

+	at_print(AT_DEBUG,"sysconfig_auto_act modenow=%d, acqordernow=%d, auto_acqorder=%s\n",modenow, acqordernow, auto_acqorder);	

+

+	//×Ô¶¯ËÑÍøµÄÍøÂç½ÓÈë´ÎÐòΪ¿Õ£¬¶øµ±Ç°²éѯµ½µÄËÑÍø·½Ê½ÊÇ×Ô¶¯£¬Ôò±£´æÍøÂç½ÓÈë´ÎÐò

+	if(0 == strlen(auto_acqorder) && modenow == 2)

+	{		

+	    snprintf(strTemp, sizeof(strTemp), "%d", acqordernow);

+	    cfg_set("auto_acqorder", strTemp);

+	}

+	

+	normal_getsysconfigsetParam(&mode, &acqorder, &roam);

+	if(mode != modenow || acqorder != acqordernow || roam != roamnow)

+	{

+		MSG_BUF *msg_buf = NULL;

+		msg_buf=normal_getmsg(MODULE_ID_AT_CTL, MODULE_ID_AT_CTL, MSG_CMD_NET_SELECT_REQ, 0, NULL);

+		rcv_msg_proc(msg_buf);

+		free(msg_buf);

+	}

+

+    return AT_END;

+}

+

+int zrap_auto_act( char *at_paras ,int is_query_report)

+{

+    char strTemp[10] = {0};

+    int  pinNum1 = -1;

+    int  pinNum2 = -1;

+    int  pukNum1 = -1;

+    int  pukNum2 = -1;

+    at_print(AT_DEBUG,"zrap_auto_act\n");	

+    sscanf(at_paras,"%d,%d,%d,%d",&pinNum1,&pinNum2,&pukNum1,&pukNum2);

+

+    snprintf(strTemp, sizeof(strTemp),"%d", pinNum1);

+    cfg_set(NV_PINNUMBER, strTemp);

+	

+    snprintf(strTemp, sizeof(strTemp),"%d", pukNum1);

+    cfg_set(NV_PUKNUMBER, strTemp);

+    return AT_END;

+}

+

+//cpin²éѯ·µ»Øok´¦Àíº¯Êý

+int cpin_read_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            char simPin[50] = {0};

+            char simPuk[50] = {0};

+            char autoSimpin[50] = {0};

+            char autoCode[50] = {0};

+            char pinNumber[50] = {0};

+            cfg_get_item(NV_SIM_PIN,simPin,sizeof(simPin));

+            cfg_get_item(NV_SIM_PUK,simPuk,sizeof(simPuk));

+            

+            /*²»ÐèÒªPINÂ룬·¢CGSN²éѯÃüÁî*/

+            if(strcmp("0",simPin) == 0 && strcmp("0",simPuk) == 0 )

+            {	

+				*next_req = normal_getcgregset("2");

+				if(*next_req){

+                *next_len = strlen(*next_req);

+                return AT_CONTINUE;

+				}

+            }

+            /*ÐèÒªÑéÖ¤*/

+            else if(strcmp("1",simPin)==0)

+            {

+            	ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_MMI, MSG_CMD_SIM_ABNORMAL_IND, 0, NULL,0);

+

+                cfg_get_item(NV_AUTO_SIMPIN,autoSimpin,sizeof(autoSimpin));

+                cfg_get_item(NV_AUTO_SIMPIN_CODE,autoCode,sizeof(autoCode));

+                cfg_get_item(NV_PINNUMBER,pinNumber,sizeof(pinNumber));

+                /*×Ô¶¯pinÂëÑéÖ¤*/

+                if((0 == strcmp(autoSimpin,"1")) && (strcmp(autoCode,"") != 0))

+                {

+                    *next_req = normal_getcpinset(autoCode);

+					if(*next_req){

+                    *next_len = strlen(*next_req);

+                    return AT_CONTINUE;

+					}

+                }

+                /*ÈôpinµÄÊ£Óà´ÎÊýΪ0£¬Ôò½«ÊÇ·ñÐèÒªPukÂë¸ÄΪ1*/

+                else if(strcmp("0",pinNumber)==0)

+                {

+                    cfg_set(NV_MODEM_MAIN_STATE,"modem_waitpuk");

+                    return AT_END;

+                }

+                return AT_END;

+            }

+

+			break; // cov M MISSING_BREAK

+        }

+        case MSG_CMD_PIN_STATUS_REQ:

+        {

+            char simPin[50] = {0};

+            char simPuk[50] = {0};

+            

+            cfg_get_item("sim_pin",simPin,sizeof(simPin));

+            cfg_get_item("sim_puk",simPuk,sizeof(simPuk));  

+            *next_req=malloc(10);

+			if(*next_req){

+            *next_len=10;

+            if(strcmp("0", simPin) == 0 && strcmp("0", simPuk) == 0 )

+            {

+                sprintf(*next_req,"%d", PIN_STATUS_NO_PIN);

+            }

+            else if(strcmp("1", simPin)==0)

+            {

+                sprintf(*next_req,"%d", PIN_STATUS_PIN1);

+            }  

+            else if(strcmp("1", simPuk)==0)

+            {

+                sprintf(*next_req,"%d", PIN_STATUS_PUK1);

+            }  

+            return AT_END;

+			}

+        }

+    }

+    return AT_END;

+}

+

+int cpin_read_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            if ((0 == strcmp(at_str, "10"))    /*no sim card*/

+                             ||(0 == strcmp(at_str, "13"))    /*card initialize failed*/

+                             ||(0 == strcmp(at_str, "15")))    /*card error*/

+            {

+                if(0 == strcmp(at_str, "13"))

+                {

+                    cfg_set(NV_MODEM_MAIN_STATE,"modem_sim_destroy");

+                    at_print(AT_DEBUG,"modem_sim_destroy:%s\n",at_str);

+                }

+                else

+                {

+                    cfg_set(NV_MODEM_MAIN_STATE,"modem_sim_undetected");

+                    at_print(AT_DEBUG,"modem_sim_undetected:%s\n",at_str);					

+                }

+

+				ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_MMI, MSG_CMD_SIM_ABNORMAL_IND, 0, NULL,0);

+

+                /*³õʼ»¯pbmµÄAP ²àµç»°±¾×¼±¸³É¹¦£¬·ñÔòÎÞ¿¨Ê±webuiתȦ*/

+                cfg_set("pbm_init_flag","0");

+                

+                //½ø·ÉÐÐģʽ

+                //*next_req = normal_getpowersave();

+                //*next_len = strlen(*next_req);

+                /*struct timeval tp;

+                if (0 != gettimeofday(&tp,NULL))

+                {

+                    at_print(AT_DEBUG,"get time of system wrong");

+                    return AT_END;

+                }

+                *next_req = normal_getsyctimeset(tp.tv_sec, tp.tv_usec);*/

+				*next_req = normal_getmtnetset(mccNum);

+				if(*next_req){

+                *next_len = strlen(*next_req);

+                //psinfo.powersave_state=POWERSAVE_CARDERROR_CMD;

+                return AT_CONTINUE;

+				}

+            }

+            return AT_END;

+        }

+        case MSG_CMD_PIN_STATUS_REQ:

+        {

+            *next_req=malloc(10);

+			if(*next_req){

+            *next_len=10;

+            sprintf(*next_req,"%d", PIN_STATUS_NO_PIN);

+            return AT_END;

+			}

+        }

+    }

+    return AT_END;

+}

+

+

+int cpin_set_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        case MSG_CMD_VERIFY_PIN_REQ:

+        {

+            char pinProcess[50] = {0};

+            MSG_BUF *buf=NULL;

+            cfg_get_item(NV_PIN_PUK_PROCESS,pinProcess,sizeof(pinProcess));

+            if(strcmp(pinProcess,"begin") == 0)

+            {

+                cfg_set(NV_PIN_PUK_PROCESS, "end");        

+            }

+            cfg_set(NV_PINSET_RESULT,"succ");

+            cfg_set(NV_MODEM_MAIN_STATE,"modem_ready");

+            /*at_next=malloc(AT_CMD_MAX);

+            //PINÂëÉèÖóɹ¦£¬·¢AT+ZRAP?ÊÇΪÁ˸üÐÂPINÂëºÍpukÂëÊ£Óà´ÎÊý

+            sprintf(at_next,"AT+ZRAP?\r\n");

+            *next_req = at_next;

+            *next_len = strlen(at_next);

+            psinfo.zrap_state = ZRAP_READ_SEC_CMD;

+            return AT_CONTINUE;*/

+            buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,ATCTL_INNER_ZMSRI_MSG,0,NULL);

+            rcv_clt_req_msg_proc(buf);

+            free(buf);

+            return AT_END;

+        }

+        case MSG_CMD_VERIFY_PUK_REQ:

+        {

+            char modemState[50] = {0};

+			char pinProcess[50] = {0};

+

+			cfg_set(NV_PINSET_RESULT,"succ");

+			cfg_get_item(NV_PIN_PUK_PROCESS,pinProcess,sizeof(pinProcess));

+			if(strcmp(pinProcess,"begin") == 0)

+		    {

+		        cfg_set(NV_PIN_PUK_PROCESS, "end");

+		    }

+            

+            cfg_get_item(NV_MODEM_MAIN_STATE,modemState,sizeof(modemState));

+            if(strcmp("modem_init_complete",modemState))

+            {

+                cfg_set(NV_MODEM_MAIN_STATE,"modem_ready");

+            }

+            *next_req = normal_getclckset(2,"SC",2);

+			if(*next_req){

+                *next_len = strlen(*next_req);

+                return AT_CONTINUE;

+			}

+			break;

+        }

+        case MSG_CMD_PIN_VERIFY_REQ:

+        {

+            *next_req=malloc(10);

+			if(*next_req){

+                *next_len=10;

+                strcpy(*next_req,"0");

+                return AT_END;

+			}

+			break;

+        }

+    }

+    return AT_END;

+}

+

+int cpin_set_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        case MSG_CMD_VERIFY_PIN_REQ://PINÂëÑéÖ¤

+        {

+            char autoSimpin[50] = {0};

+            cfg_get_item(NV_AUTO_SIMPIN,autoSimpin,sizeof(autoSimpin));

+            if(0 == strcmp(autoSimpin,"1"))

+            {

+                cfg_set(NV_AUTO_SIMPIN,"0");

+            }

+            if(0 == strcmp(at_str, "16"))

+            {

+                cfg_set(NV_MODEM_MAIN_STATE,"modem_waitpin");

+            }

+            else if (0 == strcmp(at_str, "12"))	

+            {

+                /*Êä´í3´Îpin£¬½«±äΪwaitpuk*/

+                cfg_set(NV_MODEM_MAIN_STATE,"modem_waitpuk");

+            }

+            cfg_set(NV_PINSET_RESULT,"fail");

+            *next_req = normal_getzrapread();

+			if(*next_req){

+                *next_len = strlen(*next_req);

+                psinfo.zrap_state = ZRAP_READ_SEC_CMD;

+                return AT_CONTINUE;

+			}

+

+			break; // cov M MISSING_BREAK

+        }

+        case MSG_CMD_VERIFY_PUK_REQ://PUKÂëÑéÖ¤

+        {

+            char modemState[50] = {0};

+            if (0 == strcmp(at_str, "16"))       

+            {

+                cfg_get_item(NV_MODEM_MAIN_STATE,modemState,sizeof(modemState));

+                if(strcmp("modem_init_complete",modemState))

+        	    {

+                    cfg_set(NV_MODEM_MAIN_STATE,"modem_waitpuk");

+        	    }		

+            }

+			else if (0 == strcmp(at_str, "13"))

+            {

+                cfg_set(NV_MODEM_MAIN_STATE,"modem_sim_destroy");

+                at_print(AT_DEBUG,"modem_sim_destroy:%s\n",at_str);

+            }

+        	cfg_set(NV_PINSET_RESULT,"fail");

+            *next_req = normal_getzrapread();

+			if(*next_req){

+                *next_len = strlen(*next_req);

+                psinfo.zrap_state = ZRAP_READ_SEC_CMD;

+                return AT_CONTINUE;

+			}

+

+			break; // cov M MISSING_BREAK

+        }

+        case MSG_CMD_PIN_VERIFY_REQ://wifiÄ£¿é·¢¹ýÀ´µÄÏûÏ¢

+        {

+            *next_req=malloc(10);

+			if(*next_req){

+                *next_len=10;

+                strcpy(*next_req,"1");

+                return AT_END;

+			}

+

+			break;

+        }

+    }

+    return AT_END;

+}

+

+//ÀàËÆcopsÅжÏǰ׺£¬·À´íÎó´¦Àí

+int cpin_auto_act(char *at_paras ,int is_query_report)

+{

+    /*ÏìӦΪReady£¬²»ÐèÒªPInÂëÑéÖ¤*/

+    if (strcmp("READY", at_paras) == 0)

+    {

+        cfg_set(NV_SIM_PIN, "0");

+        cfg_set(NV_SIM_PUK, "0");

+		//cfg_set(NV_NEED_SIM_PIN,"");

+    }

+    /*Èç¹ûµ±Ç°ÃÜÂëÊäÈëÇëÇóΪPIN»òPIN2£¬ÔòÊäÈë+CPIN=<pin>½øÐÐУÑé*/

+    else if(strcmp("SIM PIN",at_paras) == 0 || strcmp("SIM PIN2",at_paras) == 0)

+    {

+        cfg_set(NV_SIM_PIN, "1");

+        cfg_set(NV_MODEM_MAIN_STATE,"modem_waitpin");

+		cfg_set(NV_NEED_SIM_PIN,"yes");

+    }

+    /*Èç¹ûµ±Ç°ÃÜÂëÊäÈëÇëÇóΪPUK»òPUK2£¬ÔòÊäÈë+CPIN=<pin>,<newpin>½øÐнâËø*/

+    else if(strcmp("SIM PUK",at_paras) == 0 || strcmp("SIM PUK2",at_paras) == 0)

+    {

+        cfg_set(NV_SIM_PUK, "1");

+        cfg_set(NV_MODEM_MAIN_STATE,"modem_waitpuk");

+		cfg_set(NV_NEED_SIM_PIN,"yes");

+    }

+

+    return AT_END;

+}

+

+

+int  cgsn_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case MSG_CMD_GET_MAC_REQ:

+        {

+#if 0        

+            *next_req=normal_getmacread();

+            *next_len=strlen(*next_req);

+            return AT_CONTINUE;

+#endif			

+        }

+    }

+    return AT_END;

+}

+

+int  cgsn_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case MSG_CMD_GET_MAC_REQ:

+        {

+#if 0        

+            *next_req=normal_getmacread();

+            *next_len=strlen(*next_req);

+            return AT_CONTINUE;

+#endif			

+        }

+    }

+    return AT_END;

+}

+

+int cgsn_auto_act(char *at_paras ,int is_query_report)

+{

+	at_print(AT_DEBUG,"cgsn_auto_act\n");	

+    cfg_set(NV_IMEI,at_paras);

+    return AT_END;

+}

+

+int ziccid_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {        

+		case MSG_CMD_MODEMREG_INFO_REQ:

+		{

+			*next_req = normal_getcimi();

+			if(*next_req){

+			*next_len = strlen(*next_req);

+			return AT_CONTINUE;

+			}

+		}

+    }

+    return AT_END;

+}

+

+int ziccid_auto_act( char *at_paras ,int is_query_report)

+{

+    cfg_set(NV_ZICCID, at_paras);

+    return AT_END;

+}

+

+int  crsm_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_DEBUG,"crsm_ok_act msg_id=%d\n",context->msg_id);

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            char strPlmn[70] = {0};

+            char *pRes=NULL;

+            char strPlmnLast[10] = {0};

+            cfg_get_item("crsm_plmn", strPlmn, sizeof(strPlmn));

+            pRes = strstr(strPlmn, "144,0,");//±íʾÕýÈ·¶ÁÈ¡

+            if(0 == strlen(strPlmn) || NULL == pRes)

+            {

+                g_plmnLen = 5;

+            }

+            strncpy(strPlmnLast, &strPlmn[strlen(strPlmn)-2], 2);

+            if(0 == strcmp("03", strPlmnLast))

+            {

+                g_plmnLen = 6;

+            }

+            else

+            {

+                g_plmnLen = 5;

+            }

+            at_print(AT_DEBUG,"crsm_ok_act, g_plmnLen = %d \n", g_plmnLen);

+            *next_req = normal_getcimi();;

+			if(*next_req){

+                *next_len = strlen(*next_req);

+                return  AT_CONTINUE;

+			}

+			break; // cov M MISSING_BREAK

+        }

+        case MSG_CMD_CRSM_REQ:

+        {

+            if(crsmrsp == NULL){

+				softap_assert("");

+				return AT_END;

+			}

+            *next_req=crsmrsp;

+            *next_len=strlen(*next_req);

+            return AT_END;

+        }

+    }

+    return AT_END;

+}

+

+int  crsm_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            at_print(AT_DEBUG,"Recv CrsmPlmnlen ERR.\n");

+            *next_req = normal_getcimi();

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return  AT_CONTINUE;

+			}

+        }

+        case MSG_CMD_CRSM_REQ:

+        {

+            return AT_END;

+        }

+    }

+    return AT_END;

+}

+

+

+int crsm_auto_act(char *at_paras ,int is_query_report)

+{  

+    struct at_context *context = (struct at_context *)is_query_report;

+

+    if(context == NULL)

+        return AT_END;   

+    

+    at_print(AT_DEBUG,"crsm_auto_act msg_id=%x,at_paras=%s!\n",context->msg_id,at_paras);

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            cfg_set("crsm_plmn",at_paras);

+            return AT_END;

+        }

+        case MSG_CMD_CRSM_REQ:

+        {

+            crsmrsp=malloc(256);

+            if(crsmrsp == NULL){

+				softap_assert("");

+				return AT_END;

+			}

+            memset(crsmrsp,0,256);

+            sprintf(crsmrsp,at_paras);

+            return AT_END;

+        }

+    }

+    return AT_END;

+}

+

+int  cimi_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            if(normal_locknetmatch(mccNum, mncNum) == TRUE)

+            {

+	            /*struct timeval tp;

+	            if (0 != gettimeofday(&tp,NULL))

+	            {

+	                at_print(AT_DEBUG,"get time of system wrong");

+	                return AT_END;

+	            }

+	            *next_req = normal_getsyctimeset(tp.tv_sec, tp.tv_usec);*/

+				*next_req = normal_getmtnetset(mccNum);

+				if(*next_req){

+    	            *next_len = strlen(*next_req);

+    	            return AT_CONTINUE;

+				}

+	        }

+            else

+            {

+                cfg_set("modem_main_state","modem_imsi_waitnck"); 

+                return  AT_END;

+            }

+

+			break; // cov M

+        }

+        case MSG_CMD_CIMI_REQ:

+        {

+            *next_req=malloc(50);

+			if(*next_req){

+                *next_len=50;

+                cfg_get_item(NV_SIM_IMSI,*next_req,50);

+                return AT_END;

+			}

+

+			break; // cov M

+        }

+		case MSG_CMD_MODEMREG_INFO_REQ:

+		{

+			*next_req = normal_CnumRead();

+			if(*next_req){

+                *next_len = strlen(*next_req);

+    			return AT_CONTINUE;

+			}

+

+			break; // cov M

+		}

+    }

+    return AT_END;

+}

+

+int  cimi_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            if(normal_locknetmatch(mccNum, mncNum) == TRUE)

+            {

+	            /*struct timeval tp;

+	            if (0 != gettimeofday(&tp,NULL))

+	            {

+	                at_print(AT_DEBUG,"get time of system wrong");

+	                return AT_END;

+	            }

+	            *next_req = normal_getsyctimeset(tp.tv_sec, tp.tv_usec);*/

+				*next_req = normal_getmtnetset(mccNum);

+				if(*next_req){

+    	            *next_len = strlen(*next_req);

+    	            return AT_CONTINUE;

+				}

+	        }

+            else

+            {

+                cfg_set("modem_main_state","modem_imsi_waitnck"); 

+                return  AT_END;

+            }

+

+			break; // cov M MISSING_BREAK

+        }

+        case MSG_CMD_CIMI_REQ:

+        {

+            return AT_END;

+        }

+		case MSG_CMD_MODEMREG_INFO_REQ:

+		{

+			*next_req = normal_CnumRead();

+			if(*next_req){

+                *next_len = strlen(*next_req);

+    			return AT_CONTINUE;

+			}

+

+			break; // cov M MISSING_BREAK

+		}

+    }

+    return AT_END;

+}

+

+/*

+int  zapnsave_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case MSG_CMD_INNER_PDP_INIT:

+        {

+            return AT_END;

+        }

+		//case MSG_CMD_SET_DEFAULT_APN_REQ:

+        //{

+        //    return AT_END;

+        //}

+        default:

+            softap_assert("");

+        

+    }

+    return AT_END;

+}

+

+int  zapnsave_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    softap_assert("");

+    return AT_END;

+}

+*/

+int cimi_auto_act(char *at_paras, int is_query_report)

+{  

+    char ccmncNum[10]         = {0};

+    struct at_context *context = (struct at_context *)is_query_report;

+    

+    strncpy(imsi,at_paras,sizeof(imsi)-1);

+	imsi[49]=0;

+    strncpy(mccNum, imsi, 3);

+    at_print(AT_DEBUG,"mcc is %s", mccNum);

+#if (APP_OS_TYPE == APP_OS_LINUX)	

+    if(6 == g_plmnLen)

+	{

+		strncpy(mncNum, imsi+3, 3);

+	}

+	else

+	{

+		strncpy(mncNum, imsi+3, 2);

+	}

+    

+    snprintf(ccmncNum, 10-1, "%s%s", mccNum, mncNum);

+	cfg_set(NV_SIM_IMSI, imsi);

+	normal_get_cardtype(ccmncNum);

+    switch(context->msg_id)

+    {		

+		case ATCTL_INNER_ZMSRI_MSG:

+		case MSG_CMD_CIMI_REQ:

+		{

+			normal_getautoapn(ccmncNum);

+			break;

+		}

+	  	default:

+        {           

+            break;

+        }

+    }

+#endif

+    return AT_END;

+}

+

+int sysconfig_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case MSG_CMD_NET_SELECT_REQ:

+        {

+            *next_req = normal_getcfunset(ZAT_POWERON);

+			if(*next_req){

+                *next_len = strlen(*next_req);

+                cfg_set(NV_NET_SELECT_RESULT, "sucess");

+                return  AT_CONTINUE;

+			}

+

+			break; // cov M MISSING_BREAK

+        }

+

+		default:

+		{

+		    break;

+		}

+    }

+    return AT_END;

+}

+

+int sysconfig_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+     switch(context->msg_id)

+     {

+        case MSG_CMD_NET_SELECT_REQ:

+        {

+            *next_req = normal_getcfunset(ZAT_POWERON);

+			if(*next_req){

+                *next_len = strlen(*next_req);

+                cfg_set(NV_NET_SELECT_RESULT, "fail");

+                return  AT_CONTINUE;

+			}

+

+			break; // cov M MISSING_BREAK

+        }

+

+		default:

+		{

+		    break;

+		}

+     }

+     return AT_END;

+}

+

+int cfun_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+	cfg_set("cfun_work", "none");

+    switch(context->msg_id)

+    {

+        //¿ª»úÁ÷³ÌÖÐAT+CFUN=1

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            char modemState[50]  = {0};

+            normal_cfunOkSet();

+            cfg_get_item(NV_MODEM_MAIN_STATE,modemState,sizeof(modemState));

+            if(0 == strcmp("modem_syscfg_exption",modemState))

+            {

+                cfg_set(NV_MODEM_MAIN_STATE,"modem_destroy"); 

+            }

+            else

+            {

+                cfg_set(NV_MODEM_MAIN_STATE,"modem_init_complete");      

+            }

+            //*next_req = normal_getcgregset("2");

+            //psinfo.zrap_state = ZRAP_READ_FIR_CMD;

+            //*next_req = normal_getzrapread();

+        //#ifdef GUODIAN

+            if(g_customer_type == CUSTOMER_GUODIAN || g_customer_type == CUSTOMER_NANDIAN)

+            {

+			    return  AT_END;

+            }

+		//#else

+		    else

+            {      

+    			*next_req = normal_getsysconfigread();

+				if(*next_req){

+                    *next_len = strlen(*next_req);

+                    return  AT_CONTINUE;

+				}

+            }

+

+			break; // cov M MISSING_BREAK

+		//#endif

+        }

+        //×Ô¶¯ËÑÍø

+        case MSG_CMD_NET_SELECT_REQ:

+        {

+            if(cfun_state==4)

+            {

+                *next_req = normal_getsysconfigset();

+				if(*next_req){

+                    *next_len = strlen(*next_req);

+                    return  AT_CONTINUE;

+				}

+            }

+            else if(cfun_state==1)

+            {

+                char mMode[50] = {0};

+                cfg_get_item(NV_M_NETSELECT_MODE,mMode,sizeof(mMode));

+                if(0 == strcmp("1", mMode))

+                {

+                    *next_req = normal_getcopsset(1,"0");

+					if(*next_req){

+                    *next_len = strlen(*next_req);

+                    return  AT_CONTINUE;

+					}

+                }

+                else

+                {

+                    return AT_END;

+                }

+            }

+			

+            return AT_END;

+        }

+        case MSG_CMD_AIRMODE_SET_REQ:

+        {

+            return AT_END;

+        }

+    }

+    return AT_END;

+}

+

+int cfun_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+	cfg_set("cfun_work", "none");

+    switch(context->msg_id)

+    {

+        //¿ª»úÁ÷³ÌÖÐAT+CFUN=1

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            cfg_set(NV_MODEM_MAIN_STATE,"modem_destroy");

+            return  AT_END;

+        }

+        //×Ô¶¯ËÑÍø

+        case MSG_CMD_NET_SELECT_REQ:

+        {

+            if(cfun_state==4)

+            {

+                *next_req = normal_getsysconfigset();

+				if(*next_req){

+                    *next_len = strlen(*next_req);

+                    return  AT_CONTINUE;

+				}

+            }

+            else if(cfun_state==1)

+            {

+                char mMode[50] = {0};

+                cfg_get_item(NV_M_NETSELECT_MODE,mMode,sizeof(mMode));

+                if(0 == strcmp("1", mMode))

+                {

+                    *next_req = normal_getcopsset(1,"0");

+					if(*next_req){

+                    *next_len = strlen(*next_req);

+                    return  AT_CONTINUE;

+					}

+                }

+                else

+                {

+                    return AT_END;

+                }

+            }

+            return AT_END;

+        }

+        case MSG_CMD_AIRMODE_SET_REQ:

+        {

+            return AT_END;

+        }

+    }

+    return AT_END;

+}

+

+int cgreg_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    *next_req = normal_getceregset("2");

+	if(*next_req)

+    *next_len = strlen(*next_req);

+    return  AT_CONTINUE;

+}

+

+int cgreg_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    *next_req = normal_getceregset("2");

+	if(*next_req)

+    *next_len = strlen(*next_req);

+    return  AT_CONTINUE;

+}

+

+int cereg_set_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+

+    char *at_next = NULL;

+    

+    //at_next=normal_getcgmr();

+    at_next=normal_getcrsmset("176,28589,0,0,4");

+

+    *next_req = at_next;

+    //*next_req = normal_getzsqrset("0");

+	if(*next_req)

+    *next_len = strlen(*next_req);

+    return  AT_CONTINUE;

+}

+

+int cereg_set_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    char *at_next = NULL;

+    

+    //at_next=normal_getcgmr();

+    at_next=normal_getcrsmset("176,28589,0,0,4");

+    

+    *next_req = at_next;

+    //*next_req = normal_getzsqrset("0");

+	if(*next_req)

+    *next_len = strlen(*next_req);

+    return  AT_CONTINUE;

+}

+

+int zsqr_auto_act(char *at_paras ,int is_query_report)

+{

+    char strBuf[10] = {0};

+    T_zAt_CsqUnSolicite zsqrResPara = {0};

+    sscanf(at_paras, "%ld,%ld,%ld", &zsqrResPara.rssi, &zsqrResPara.ber, &zsqrResPara.act);

+

+#if 1    // kw 3 SV.TAINTED.CALL.BINOP

+    if(zsqrResPara.rssi < 0 || zsqrResPara.rssi > LONG_MAX-1)

+    {

+        zsqrResPara.rssi = 0;

+    }

+

+    if(zsqrResPara.ber < 0 || zsqrResPara.ber > LONG_MAX-1)

+    {

+        zsqrResPara.ber = 0;

+    }

+

+    if(zsqrResPara.act < 0 || zsqrResPara.act > LONG_MAX-1)

+    {

+        zsqrResPara.act = 0;

+    }    

+#endif 

+

+    snprintf(strBuf, sizeof(strBuf),"%ld", zsqrResPara.rssi);

+    cfg_set(NV_CSQ, strBuf);

+    if(zsqrResPara.act == 3) 

+	{

+		normal_calcsignalbar(ZAT_SIGNALBAR_TYPE_GSM);

+		normal_calcsignalstrength(ZAT_SIGNALBAR_TYPE_GSM, zsqrResPara.rssi);

+	}

+	else if(zsqrResPara.act == 5)

+	{

+		normal_calcsignalbar(ZAT_SIGNALBAR_TYPE_WCDMA);

+		normal_calcsignalstrength(ZAT_SIGNALBAR_TYPE_WCDMA, zsqrResPara.rssi);

+	}

+	else if(zsqrResPara.act == 15)

+	{

+		normal_calcsignalbar(ZAT_SIGNALBAR_TYPE_TDS);

+		normal_calcsignalstrength(ZAT_SIGNALBAR_TYPE_TDS, zsqrResPara.rssi);

+	}

+	else if(zsqrResPara.act == 17)

+	{		

+		normal_calcsignalbar(ZAT_SIGNALBAR_TYPE_LTE);

+		normal_calcsignalstrength(ZAT_SIGNALBAR_TYPE_LTE, zsqrResPara.rssi);

+	}

+    else if(zsqrResPara.act == 0)

+    {

+        normal_calcsignalbar(ZAT_SIGNALBAR_TYPE_NONE);

+    }

+    return AT_END;

+}

+

+int cops_set_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case MSG_CMD_QUERY_SYSINFO_REQ:

+        {

+            //*next_req = normal_getcgmr();

+			*next_req = normal_getcopsread();

+			if(*next_req){

+                *next_len = strlen(*next_req);

+                return AT_CONTINUE;

+			}

+			break; // cov M

+        }

+        case MSG_CMD_NET_SELECT_REQ:

+        {

+            cfg_set(NV_M_NETSELECT_MODE, "0");

+            return AT_END;

+        }

+        case MSG_CMD_NETWORK_SET_REQ:

+        {

+            char    rplmnTmp[50]  = {0};

+            char    ratTmp[50]  = {0};

+            cfg_get_item(NV_STR_NUM_RPLMN_TMP,rplmnTmp,sizeof(rplmnTmp));

+            cfg_get_item(NV_CURRENT_RAT_TMP,ratTmp,sizeof(ratTmp));

+            cfg_set(NV_M_NETSELECT_RESULT, "manual_success");

+            cfg_set(NV_STR_NUM_RPLMN,rplmnTmp);

+            cfg_set(NV_CURRENT_RAT,ratTmp);

+            cfg_set(NV_M_NETSELECT_MODE, "1");

+            *next_req = normal_getsysinfo();

+			if(*next_req){

+                *next_len = strlen(*next_req);

+                return AT_CONTINUE;

+			}

+

+			break; // cov M

+        }

+    }

+    return AT_END;

+}

+

+int cops_set_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case MSG_CMD_QUERY_SYSINFO_REQ:

+        {

+            //*next_req = normal_getcgmr();

+			*next_req = normal_getcopsread();

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+        case MSG_CMD_NET_SELECT_REQ:

+        {

+            return AT_END;

+        }

+        case MSG_CMD_NETWORK_SET_REQ:

+        {

+            cfg_set(NV_M_NETSELECT_RESULT, "manual_fail");

+            *next_req = normal_getsysinfo();

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+    }

+    return AT_END;

+}

+

+int cops_read_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_DEBUG,"cops_read_ok_act %x\n",context->msg_id);

+    switch(context->msg_id)

+    {

+        case MSG_CMD_QUERY_SYSINFO_REQ:

+        case MSG_CMD_NETWORK_SET_REQ:

+        {

+            if(g_zUfi_firstCsq)

+            {

+                g_zUfi_firstCsq = FALSE;

+                *next_req = normal_getcsq();

+				if(*next_req){

+                *next_len = strlen(*next_req);

+                return  AT_CONTINUE;

+				}

+            }

+            return AT_END;

+        }

+	}

+    return AT_END;

+}

+

+int cops_read_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_DEBUG,"cops_read_ok_act %x\n",context->msg_id);

+    switch(context->msg_id)

+    {

+        case MSG_CMD_QUERY_SYSINFO_REQ:

+        {

+            if(g_zUfi_firstCsq)

+            {

+                g_zUfi_firstCsq = FALSE;

+                *next_req = normal_getcsq();

+				if(*next_req){

+                *next_len = strlen(*next_req);

+                return  AT_CONTINUE;

+				}

+            }

+            return AT_END;

+        }

+		case MSG_CMD_MODEMREG_INFO_REQ:

+		{

+			*next_req = normal_getcsq();

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return  AT_CONTINUE;

+			}

+		}

+    }

+    return AT_END;

+}

+

+int cops_test_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    cfg_set("manual_search_network_status", "finished");

+    return AT_END;

+}

+

+int cops_test_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    cfg_set(NV_NET_NUM, "0");

+    cfg_set(NV_M_NETSELECT_STATUS, "manual_search_fail");

+    DeleteSoftTimer(CopstestTimerID);

+    return AT_END;

+}

+

+int cops_auto_act(char *at_paras ,int is_query_report)

+{

+    //at+cops=?·µ»ØÖµ

+    //zdm ²»µ÷Óã¬Ò²Á¬½Ó²»¹ý

+    #if (APP_OS_TYPE == APP_OS_TOS)

+		softap_assert("");

+	#else

+    

+    struct at_context *context = (struct at_context *)is_query_report;

+

+    if(context == NULL)

+        return AT_END;   

+

+    at_print(AT_DEBUG,"cops_auto_act prefix=%s!\n",context->at_cmd_prefix);

+    if(strstr(context->at_cmd_prefix,"=?"))

+    {

+#if (APP_OS_TYPE == APP_OS_LINUX)	

+		DeleteSoftTimer(CopstestTimerID);

+#elif (APP_OS_TYPE == APP_OS_TOS)	

+		zOss_StopTimer(CopstestTimerID);

+#endif

+        at_print(AT_DEBUG,"come in222!\n");

+        normal_recvcopstestrsp(at_paras);

+    }

+    else if(strstr(context->at_cmd_prefix,"?"))

+    {

+        normal_recvcopsreadrsp(at_paras);

+    }

+	#endif

+    return AT_END;

+}

+

+int  zversion_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_DEBUG,"zversion_ok_act\n");

+/*

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            struct timeval tp;

+            if (0 != gettimeofday(&tp,NULL))

+            {

+                at_print(AT_DEBUG,"get time of system wrong");

+                return AT_END;

+            }

+            *next_req = normal_getsyctimeset(tp.tv_sec, tp.tv_usec);

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+	}

+*/	

+    return AT_END;

+}

+

+int  zversion_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_DEBUG,"zversion_err_act\n");

+/*

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            struct timeval tp;

+            if (0 != gettimeofday(&tp,NULL))

+            {

+                at_print(AT_DEBUG,"get time of system wrong");

+                return AT_END;

+            }

+            *next_req = normal_getsyctimeset(tp.tv_sec, tp.tv_usec);

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+    }

+*/	

+    return AT_END;

+}

+

+int zversion_auto_act(char *at_paras ,int is_query_report)

+{

+    cfg_set(NV_CR_INNER_VERSION,at_paras);

+    return AT_END;

+}

+

+int  syctime_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            *next_req = normal_getclckset(2,"SC",2);

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+        case MSG_CMD_SYCTIME_SET_REQ:

+        {

+            return AT_END;

+        }

+    }

+    return AT_END;

+}

+

+int  syctime_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            *next_req = normal_getclckset(2,"SC",2);

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+        case MSG_CMD_SYCTIME_SET_REQ:

+        {

+            return AT_END;

+        }

+    }

+    return AT_END;

+}

+

+int  zsetmtnet_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            *next_req = normal_getclckset(2,"SC",2);

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+        default:

+        {

+            return AT_END;

+        }

+    }

+    return AT_END;

+}

+

+int  zsetmtnet_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case ATCTL_INNER_ZMSRI_MSG:

+        {

+            *next_req = normal_getclckset(2,"SC",2);

+			if(*next_req){

+            *next_len = strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+        default:

+        {

+            return AT_END;

+        }

+    }

+    return AT_END;

+}

+

+int  mac_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_DEBUG,"mac_ok_act\n");

+    *next_req=normal_getmac2read();

+	if(*next_req)

+    *next_len=strlen(*next_req);

+    return AT_CONTINUE;

+}

+

+int  mac_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_ERR,"mac_err_act\n");

+    if(mactozssid != NULL)

+        free(mactozssid);

+    mactozssid=NULL;

+    return AT_END;

+}

+

+int  mac2_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_DEBUG,"mac2_ok_act\n");

+    cfg_set("at_wifi_mac",mactozssid);

+	cfg_save();

+    free(mactozssid);

+    mactozssid=NULL;

+    return AT_END;

+}

+

+int  mac2_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    at_print(AT_ERR,"mac2_err_act\n");

+    if(mactozssid != NULL)

+        free(mactozssid);

+    mactozssid=NULL;

+    return AT_END;

+}

+

+int  zltelc_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    long action = 0;

+    char actionLte[30]= {0};

+    cfg_get_item(NV_ACTIONLTE,actionLte,sizeof(actionLte));

+    action  = atoi(actionLte);

+    cfg_set(NV_CELLLOCKSET,"CellSuccess");

+    if(1 == action)

+    {

+        cfg_set(NV_CELLLOCKSTATE,"Locked");

+    }

+    else if(0 == action)

+    {

+        cfg_set(NV_CELLLOCKSTATE,"UnLocked");

+    }

+    return AT_END;

+}

+

+int  zltelc_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    cfg_set(NV_CELLLOCKSET,"CellFail");

+    return AT_END;

+}

+

+int  sysinfo_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    char netType[50]={0};

+	char needCopsNumFormt[10] = {0};

+    cfg_get_item(NV_NETWORK_TYPE,netType,sizeof(netType));

+    cfg_get_item("need_cops_number_format",needCopsNumFormt,sizeof(needCopsNumFormt));

+	sysinfo_flag = 0;

+    if (0!=strcmp("No Service",netType)&&0!=strcmp("Limited Service",netType)

+        &&0!=strcmp(NETWORK_TYPE_INIT,netType))

+    {

+        if(0 == strcmp("yes", needCopsNumFormt) && context->msg_id != MSG_CMD_NETWORK_SET_REQ)//ÉèÖÃÔËÓªÉÌÐÅÏ¢¸ñʽ

+        {

+            *next_req =normal_getcopsset(1,"3,2");

+			if(*next_req)

+			*next_len = strlen(*next_req);

+        }

+        else

+        {

+            *next_req = normal_getcopsread();

+			if(*next_req)

+            *next_len = strlen(*next_req);

+        }

+        return AT_CONTINUE;

+    }

+    return AT_END;

+}

+

+int  sysinfo_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    char netType[50]={0};

+	char needCopsNumFormt[10] = {0};

+    cfg_get_item(NV_NETWORK_TYPE,netType,sizeof(netType));

+	cfg_get_item("need_cops_number_format",needCopsNumFormt,sizeof(needCopsNumFormt));

+	sysinfo_flag = 0;

+    if (0!=strcmp("No Service",netType)&&0!=strcmp("Limited Service",netType)

+        &&0!=strcmp(NETWORK_TYPE_INIT,netType))

+    {

+        if(0 == strcmp("yes", needCopsNumFormt))//ÉèÖÃÔËÓªÉÌÐÅÏ¢¸ñʽ

+        {

+            *next_req =normal_getcopsset(1,"3,2");

+			if(*next_req)

+			*next_len = strlen(*next_req);

+        }

+        else

+        {

+            *next_req = normal_getcopsread();

+			if(*next_req)

+            *next_len = strlen(*next_req);

+        }

+        return AT_CONTINUE;

+    }

+    return AT_END;

+}

+

+int  cusd_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    cfg_set("ussd_write_flag","4");

+    cfg_set("ussd_cancel_flag","no");

+    return AT_END;

+}

+

+int  clck_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case MSG_CMD_PIN_MANAGE_REQ:

+        {

+            if(psinfo.clck_state==CLCK_SET_CMD)

+            {

+                char clckMode[10] = {0};

+                cfg_get_item(NV_CLCK_SET_MODE,clckMode,sizeof(clckMode));

+                if (0==strcmp(clckMode,"0"))

+                {

+                    cfg_set(NV_NEED_SIM_PIN,"");

+                }

+                else if (0==strcmp(clckMode,"1"))

+                {

+                    cfg_set(NV_NEED_SIM_PIN,"yes");

+                }

+                cfg_set(NV_PIN_MANAGE_RESULT, "0");

+                *next_req=normal_getclckset(2,"SC",2);

+				if(*next_req){

+                *next_len=strlen(*next_req);

+                psinfo.clck_state=CLCK_REQ_CMD;

+                return AT_CONTINUE;

+				}

+            }

+            else if(psinfo.clck_state==CLCK_REQ_CMD)

+            {

+                *next_req=normal_getzrapread();

+				if(*next_req){

+                *next_len=strlen(*next_req);

+                psinfo.clck_state=CLCK_OTHER_CMD;

+                return AT_CONTINUE;

+				}

+            }

+            return AT_END;

+        }

+        case MSG_CMD_VERIFY_PUK_REQ:

+        {

+            MSG_BUF *buf=NULL;

+            buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,ATCTL_INNER_ZMSRI_MSG,0,NULL);

+            rcv_clt_req_msg_proc(buf);

+            free(buf);

+            return AT_END;

+        }

+#if (APP_OS_TYPE == APP_OS_LINUX)

+		case MSG_CMD_CLCK_REQ:

+		{

+//			return atCcapp_RecvOk(at_str,context,next_req,next_len);

+		}

+#endif		

+    }

+    return AT_END;

+}

+

+int  clck_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case MSG_CMD_PIN_MANAGE_REQ:

+        {

+            if(psinfo.clck_state==CLCK_SET_CMD)

+            {

+                cfg_set(NV_PIN_MANAGE_RESULT, "1");

+                *next_req=normal_getzrapread();

+				if(*next_req){

+                *next_len=strlen(*next_req);

+                psinfo.clck_state=CLCK_OTHER_CMD;

+                return AT_CONTINUE;

+				}

+            }

+            else if(psinfo.clck_state==CLCK_REQ_CMD)

+            {

+                cfg_set(NV_PIN_MANAGE_RESULT, "1");

+                *next_req=normal_getzrapread();

+				if(*next_req){

+                *next_len=strlen(*next_req);

+                psinfo.clck_state=CLCK_OTHER_CMD;

+                return AT_CONTINUE;

+				}

+            }

+            return AT_END;

+        }

+        

+        case MSG_CMD_VERIFY_PUK_REQ:

+        {

+            MSG_BUF *buf=NULL;

+            buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,ATCTL_INNER_ZMSRI_MSG,0,NULL);

+            rcv_clt_req_msg_proc(buf);

+            return AT_END;

+        }

+#if (APP_OS_TYPE == APP_OS_LINUX)

+		case MSG_CMD_CLCK_REQ:

+		{

+// for porting at_ctrl 

+// 			return atCcapp_RecvErr(at_str,context,next_req,next_len);

+		}

+#endif		

+    }

+    return AT_END;

+}

+

+int  cpwd_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case MSG_CMD_PIN_MANAGE_REQ:

+        {

+            cfg_set(NV_PIN_MANAGE_RESULT, "0");

+            *next_req=normal_getzrapread();

+			if(*next_req){

+            *next_len=strlen(*next_req);

+            return AT_CONTINUE;

+			}

+        }

+    }

+    return AT_END;

+}

+

+int  cpwd_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    switch(context->msg_id)

+    {

+        case MSG_CMD_PIN_MANAGE_REQ:

+        {

+            cfg_set(NV_PIN_MANAGE_RESULT, "1");

+            *next_req=normal_getzrapread();

+			if(*next_req){

+            *next_len=strlen(*next_req);

+            return AT_CONTINUE;

+			}	

+        }

+    }

+    return AT_END;

+}

+

+int mode_auto_act(char *at_paras ,int is_query_report)

+{

+    T_zUfi_ModeInfoInd   tAtRes      = {0};

+    char strTemp[10]    = {0};

+    char cfunState[50] = {0};

+	char versionmode[2] = {0};

+    MSG_BUF *buf=NULL;

+    

+    at_print(AT_DEBUG,"atBase_RecvModeRsp MODE \n");

+    cfg_get_item(NV_CFUN_STATE,cfunState,sizeof(cfunState));

+    if(!strcmp(cfunState,"0"))

+    {

+        return AT_END;

+    }

+	

+    void *p[2] = {&tAtRes.sys_mode, &tAtRes.sys_submode};

+    at_print(AT_DEBUG,"mode_auto_act at_paras=%s!\n",at_paras);

+    parse_param2("%d,%d", at_paras, p);

+    at_print(AT_DEBUG,"mode_auto_act sys_mode=%ld,sys_submode=%ld!\n",tAtRes.sys_mode,tAtRes.sys_submode);  

+    

+    snprintf(strTemp, sizeof(strTemp),"%ld", tAtRes.sys_mode);

+    cfg_set(NV_SYS_MODE, strTemp);

+    memset(strTemp, 0, 10);

+    snprintf(strTemp, sizeof(strTemp),"%ld", tAtRes.sys_submode);

+    cfg_set(NV_SYS_SUBMODE, strTemp);

+    

+    at_print(AT_DEBUG,"atBase_RecvModeRsp per=%d,cur=%ld!\n",g_zUfi_Mode,tAtRes.sys_mode);

+	//оƬÈÏÖ¤´úÂë

+	cfg_get_item("version_mode", versionmode, sizeof(versionmode));

+	if(0 == strcmp(versionmode, "0"))

+	{

+		if(g_zUfi_Mode != tAtRes.sys_mode || g_zUfi_SubMode != tAtRes.sys_submode)

+	    {

+	        g_zUfi_Mode = tAtRes.sys_mode;

+			g_zUfi_SubMode = tAtRes.sys_submode;

+			if(sysinfo_flag == 0)

+			{

+		        buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_QUERY_SYSINFO_REQ,0,NULL);

+		        rcv_clt_req_msg_proc(buf);

+		        free(buf);

+				sysinfo_flag = 1;//sysinfoÖ»·¢Ò»´Î

+			}

+	    }

+	}

+    return AT_END;

+}

+

+int cereg_auto_act(char *at_paras ,int is_query_report)

+{

+    T_zAt_CeregRes tAtRes = {0};

+    MSG_BUF *buf=NULL;

+	int tac = 0, ci = 0;

+    char strBuf[20] = {0};

+	char versionmode[2] = {0};

+

+    void *p[5] = {&tAtRes.stat, tAtRes.tac, tAtRes.ci, &tAtRes.act,&tAtRes.subact};

+    at_print(AT_DEBUG,"atBase_RecvCeregRsp at_paras=%s!\n",at_paras);

+    parse_param2("%d,%s,%s,%d,%d", at_paras, p);

+    at_print(AT_DEBUG,"atBase_RecvCeregRsp stat=%d,tac=%s,ci=%s,res=%d,sub=%d!\n",

+    tAtRes.stat, tAtRes.tac, tAtRes.ci, tAtRes.act,tAtRes.subact);  

+    sprintf(strBuf, "%d", tAtRes.stat);

+    cfg_set("cereg_stat", strBuf);

+

+	if(tAtRes.act == 7)

+	{

+		trans_Str2Value(tAtRes.tac, FALSE, &tac);

+		memset(strBuf, 0x00, 20);

+		sprintf(strBuf, "%d", tac);

+		cfg_set(NV_TAC_CODE, strBuf);

+		

+		trans_Str2Value(tAtRes.ci, FALSE, &ci);

+		memset(strBuf, 0x00, 20);

+		sprintf(strBuf, "%d", ci);

+		cfg_set(NV_CELL_ID, strBuf);

+	}

+	

+    /*×¢²áÁËÂþÓÎÍøÂç»ò±¾µØÍøÂç*/

+    if( (5 == tAtRes.stat ) || ( 1 == tAtRes.stat ))

+    {

+		buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_QUERY_CGCONTRDP_REQ,0,NULL);

+		rcv_clt_req_msg_proc(buf);

+		free(buf);

+        cfg_set(NV_REG_STATUS,"ok");

+		//zhangfen 1106 EPSÍøÂç×¢²á³É¹¦½øÐÐPDP×Ô¶¯²¦ºÅ

+		if(g_modem_model)

+    	{

+			start_pdp_auto_dial();//Æô¶¯¶¨Ê±Æ÷½øÐÐpdp¼¤»î

+    	}

+    }

+    else

+    {

+        cfg_set(NV_REG_STATUS,"no");

+    }

+    at_print(AT_DEBUG,"atBase_RecvCeregRsp per=%d,cur=%d!\n",g_zUfi_Stat,tAtRes.stat);

+

+	//оƬÈÏÖ¤´úÂë

+	cfg_get_item("version_mode", versionmode, sizeof(versionmode));

+	if(0 == strcmp(versionmode, "0"))

+	{

+		if(g_zUfi_Stat != tAtRes.stat)

+		{

+	        g_zUfi_Stat = tAtRes.stat;

+			if(sysinfo_flag == 0)

+			{

+		        buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_QUERY_SYSINFO_REQ,0,NULL);

+		        rcv_clt_req_msg_proc(buf);

+		        free(buf);

+				sysinfo_flag = 1;//sysinfoÖ»·¢Ò»´Î

+			}

+	    }

+		else

+		{

+			char networkType[50] = {0};

+        	cfg_get_item(NV_NETWORK_TYPE,networkType,sizeof(networkType));

+			if((5 == tAtRes.stat || 1 == tAtRes.stat) && (0 == strcmp("No Service",networkType) || 0 == strcmp("Limited Service",networkType)))

+			{

+				if(sysinfo_flag == 0)

+				{

+			        buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_QUERY_SYSINFO_REQ,0,NULL);

+			        rcv_clt_req_msg_proc(buf);

+			        free(buf);

+					sysinfo_flag = 1;//sysinfoÖ»·¢Ò»´Î

+				}

+			}

+		}

+	}

+    return AT_END;

+}

+

+int can_poweron_dail = 0;

+extern int apn_is_ims;

+int cgreg_auto_act(char *at_paras ,int is_query_report)

+{

+    T_zAt_CgregRes   tAtRes  = {0};

+    MSG_BUF *buf=NULL;

+    char strBuf[10] = {0};

+	char versionmode[2] = {0};

+

+    void *p[6] = {&tAtRes.stat, tAtRes.lac, tAtRes.rac, &tAtRes.act, tAtRes.ci, &tAtRes.subact};

+    at_print(AT_DEBUG,"cgreg_auto_act at_paras=%s!\n",at_paras);

+    parse_param2("%d,%s,%s,%d,%s,%d", at_paras, p);

+    at_print(AT_DEBUG,"cgreg_auto_act stat=%d,lac=%s,rac=%s,act=%d,ci=%s,subact=%d!\n",

+    tAtRes.stat, tAtRes.lac, tAtRes.rac, tAtRes.act, tAtRes.ci, tAtRes.subact);  

+

+    snprintf(strBuf,sizeof(strBuf),"%d", tAtRes.stat);

+    cfg_set("cgreg_stat", strBuf);

+	

+    if(cfun_state==0)

+    {

+        at_print(AT_ERR,"query cgreg err!\n");

+        return AT_END;

+    }

+    /*×¢²áÁËÂþÓÎÍøÂç»ò±¾µØÍøÂç*/

+    if( (5 == tAtRes.stat ) || ( 1 == tAtRes.stat ))

+    {

+		MSG_BUF *msg_buf = NULL;

+		char ppp_status[20] = {0};

+		cfg_get_item(NV_PPP_STATUS, ppp_status, sizeof(ppp_status));

+		//Ö»Óе±Ê״請úºó£¬Ö÷¿ØÔø¾­Ö÷¶¯·¢Æð¹ý²¦ºÅ²¢ÇÒûÓв¦ºÅ³É¹¦£¬´ËʱÔÚÓÐÍøÂçºó

+		//at_ctlÄ£Äâ³ÉÖ÷¿ØÖØÐ·¢Æðpdp¼¤»î

+		if((can_poweron_dail == 0) && (g_defcid_mng.modid == MODULE_ID_MAIN_CTRL) && (0 == strcmp(PPP_DISCONNECTED, ppp_status)))

+		{

+			can_poweron_dail = 1;

+			at_print(AT_ERR,"cgreg_auto_act begin dial!!!\n");

+			msg_buf=normal_getmsg(g_defcid_mng.modid ,MODULE_ID_AT_CTL,MSG_CMD_PDP_ACT_REQ, 0, NULL);

+			rcv_msg_proc(msg_buf);

+			free(msg_buf);

+			msg_buf = NULL;

+		}

+    	if(g_modem_model)

+    	{

+			start_pdp_auto_dial();

+    	}

+        cfg_set(NV_TDREG_STATUS,"ok");

+		//apn_is_ims=-1;//4GºÍ2-3G¿ÉÄÜͬʱ´æÔÚEC:616000620973

+    }

+    else

+    {

+        cfg_set(NV_TDREG_STATUS,"no");

+    }

+    at_print(AT_DEBUG,"atBase_RecvCgregRsp per=%d,cur=%d!\n",g_zUfi_Stat,tAtRes.stat);

+

+	//оƬÈÏÖ¤´úÂë

+	cfg_get_item("version_mode", versionmode, sizeof(versionmode));

+	if(0 == strcmp(versionmode, "0"))

+	{

+	    if(g_zUfi_Stat != tAtRes.stat && g_modem_model)

+	    {

+	        g_zUfi_Stat = tAtRes.stat;

+			if(sysinfo_flag == 0)

+			{

+		        buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_QUERY_SYSINFO_REQ,0,NULL);

+		        rcv_clt_req_msg_proc(buf);

+		        free(buf);

+				sysinfo_flag = 1;//sysinfoÖ»·¢Ò»´Î

+			}

+	    }

+		else

+		{

+			char networkType[50] = {0};

+        	cfg_get_item(NV_NETWORK_TYPE,networkType,sizeof(networkType));

+			if((5 == tAtRes.stat || 1 == tAtRes.stat) && (0 == strcmp("No Service",networkType) || 0 == strcmp("Limited Service",networkType)))

+			{

+				if(sysinfo_flag == 0)

+				{

+			        buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_QUERY_SYSINFO_REQ,0,NULL);

+			        rcv_clt_req_msg_proc(buf);

+			        free(buf);

+					sysinfo_flag = 1;//sysinfoÖ»·¢Ò»´Î

+				}

+			}

+		}

+	}

+    return AT_END;

+}

+

+

+int creg_auto_act(char *at_paras ,int is_query_report)

+{

+    T_zAt_CregRes   tAtRes      = {0};

+    MSG_BUF *buf=NULL;

+	int lac = 0, ci = 0;

+    char strBuf[20] = {0};

+	char versionmode[2] = {0};

+	

+    void *p[5] = {&tAtRes.stat, tAtRes.tac, tAtRes.ci, &tAtRes.act,&tAtRes.subact};

+    at_print(AT_DEBUG,"creg_auto_act at_paras=%s!\n",at_paras);

+    parse_param2("%d,%s,%s,%d,%d", at_paras, p);

+    at_print(AT_DEBUG,"creg_auto_act stat=%d,tac=%s,ci=%s,act=%d,subact=%d!\n",

+    tAtRes.stat, tAtRes.tac, tAtRes.ci, tAtRes.act, tAtRes.subact);  

+

+    sprintf(strBuf, "%d", tAtRes.stat);

+    cfg_set("creg_stat", strBuf);

+

+	if(tAtRes.act != 7)

+	{

+		trans_Str2Value(tAtRes.tac, FALSE, &lac);

+		memset(strBuf, 0x00, 20);

+		sprintf(strBuf, "%d", lac);

+		cfg_set(NV_LAC_CODE, strBuf);

+		

+		trans_Str2Value(tAtRes.ci, FALSE, &ci);

+		memset(strBuf, 0x00, 20);

+		sprintf(strBuf, "%d", ci);

+		cfg_set(NV_CELL_ID, strBuf);

+	}

+	

+    /*×¢²áÁËÂþÓÎÍøÂç»ò±¾µØÍøÂç*/

+    if( (5 == tAtRes.stat ) || ( 1 == tAtRes.stat ))

+    {

+    	if(g_modem_model)

+    	{

+			start_pdp_auto_dial();

+    	}

+    	//zhangfen for PDP

+		//ipc_send_message(MODULE_ID_AT_CTL,MODULE_ID_MAIN_CTRL, MSG_CMD_NET_AUTO_DIAL, 0, NULL, 0);

+        cfg_set(NV_REG_STATUS,"ok");

+

+		ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_DMREG, MSG_CMD_CREG_IND, 0, NULL, 0);

+    }

+    else

+    {

+        cfg_set(NV_REG_STATUS,"no");

+    }

+    at_print(AT_DEBUG,"atBase_RecvCregRsp per=%d,cur=%d!\n",g_zUfi_Stat,tAtRes.stat);

+	

+    //оƬÈÏÖ¤´úÂë

+	cfg_get_item("version_mode", versionmode, sizeof(versionmode));

+	if(0 == strcmp(versionmode, "0"))

+	{

+	    if(g_zUfi_Stat != tAtRes.stat)

+	    {

+			if(cfun_state==0 && g_modem_model)

+		    {

+		        at_print(AT_ERR,"query creg err!\n");

+		        return AT_END;

+		    }

+	        g_zUfi_Stat = tAtRes.stat;

+			if(sysinfo_flag == 0)

+			{

+		        buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_QUERY_SYSINFO_REQ,0,NULL);

+		        rcv_clt_req_msg_proc(buf);

+		        free(buf);

+				sysinfo_flag = 1;//sysinfoÖ»·¢Ò»´Î

+			}

+	    }

+		else

+		{

+			char networkType[50] = {0};

+        	cfg_get_item(NV_NETWORK_TYPE,networkType,sizeof(networkType));

+			if((5 == tAtRes.stat || 1 == tAtRes.stat) && (0 == strcmp("No Service",networkType) || 0 == strcmp("Limited Service",networkType)))

+			{

+				if(sysinfo_flag == 0)

+				{

+			        buf=normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_QUERY_SYSINFO_REQ,0,NULL);

+			        rcv_clt_req_msg_proc(buf);

+			        free(buf);

+					sysinfo_flag = 1;//sysinfoÖ»·¢Ò»´Î

+				}

+			}

+		}

+	}

+    return AT_END;

+}

+

+//»ñÈ¡ÍøÂçÐźÅ״̬£¬ÖÃNV

+int sysinfo_auto_act(char *at_paras ,int is_query_report)

+{

+    T_zAt_SysinfoRes tPara                       = {0};

+	UINT32 signalbar = 0;

+	char needDispSearching[10] = {0};

+	char modemMainState[50] = {0};

+	char networkCategoryBasedOn[10] = {0};

+	char strSignalbar[10] = {0};

+	char perRoamStatus[10] = {0};

+	char curRoamStatus[10] = {0};

+

+    void *p[7] = {&tPara.srvStatus, &tPara.srvDomain,&tPara.roamStatus,&tPara.sysMode, &tPara.simState,&tPara.reserve,&tPara.sysSubmode};

+    at_print(AT_DEBUG,"sysinfo_auto_act at_paras=%s!\n",at_paras);

+    parse_param2("%d,%d,%d,%d,%d,%d,%d", at_paras, p);

+    at_print(AT_DEBUG,"sysinfo_auto_act srvStatus=%ld,srvDomain=%ld,roamStatus=%ld,sysMode=%ld,simState=%ld,reserve=%ld,sysSubmode=%ld!\n",

+    tPara.srvStatus,tPara.srvDomain,tPara.roamStatus,tPara.sysMode,tPara.simState,tPara.reserve,tPara.sysSubmode);  

+

+	cfg_get_item("need_display_searching_status", needDispSearching, sizeof(needDispSearching));

+	cfg_get_item("modem_main_state", modemMainState, sizeof(modemMainState));

+	cfg_get_item("network_category_based_on", networkCategoryBasedOn, sizeof(networkCategoryBasedOn));

+	if(0 == tPara.srvStatus)//ÎÞ·þÎñ

+    {

+	    if(0 == strcmp("yes", needDispSearching))

+		{

+			if(g_isSearchingNetwork == TRUE)

+			{

+	            if(strcmp(modemMainState,"modem_init_complete") == 0)

+	            {

+					cfg_set(NV_NETWORK_TYPE, NETWORK_TYPE_INIT);

+					cfg_set(NV_SUB_NETWORK_TYPE, NETWORK_TYPE_INIT);

+	            }

+				else

+				{

+					cfg_set(NV_NETWORK_TYPE, "No Service");

+					cfg_set(NV_SUB_NETWORK_TYPE, "No Service");

+				}

+			}

+			else

+			{

+	        	cfg_set(NV_NETWORK_TYPE, "No Service");

+				cfg_set(NV_SUB_NETWORK_TYPE, "No Service");

+			}

+		}		

+		else

+		{

+			cfg_set(NV_NETWORK_TYPE, "No Service");

+			cfg_set(NV_SUB_NETWORK_TYPE, "No Service");

+		}  		

+		signalbar = 0;

+        ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_MMI,MSG_CMD_OUT_REG_GET_SIGNAL_NUM, sizeof(signalbar), (UINT8 *)&signalbar,0);

+    }

+    else if( 1 == tPara.srvStatus )

+    {

+        if(0 == strcmp("yes", needDispSearching))

+		{

+			if(g_isSearchingNetwork == TRUE)

+			{

+				if(strcmp(modemMainState,"modem_init_complete") == 0)

+	            {

+					cfg_set(NV_NETWORK_TYPE, NETWORK_TYPE_INIT);

+					cfg_set(NV_SUB_NETWORK_TYPE, NETWORK_TYPE_INIT);

+	            }

+				else

+				{

+					cfg_set(NV_NETWORK_TYPE, "Limited Service");

+					cfg_set(NV_SUB_NETWORK_TYPE, "Limited Service");

+                }

+			}

+			else

+			{

+	 	       cfg_set(NV_NETWORK_TYPE, "Limited Service");

+			   cfg_set(NV_SUB_NETWORK_TYPE, "Limited Service");

+ 			}

+		}		

+		else

+		{

+			cfg_set(NV_NETWORK_TYPE, "Limited Service");

+			cfg_set(NV_SUB_NETWORK_TYPE, "Limited Service");

+		}		

+		signalbar = 0;

+        ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_MMI,MSG_CMD_OUT_REG_GET_SIGNAL_NUM, sizeof(signalbar), (UINT8 *)&signalbar,0);

+    }

+    else

+    {

+    	if(0 == strcmp("yes", needDispSearching))

+	    {

+			g_isSearchingNetwork = FALSE;

+        }

+        char    netCategory[50]  = {0};

+        char    connectLogic[50]  = {0};

+        cfg_get_item(NV_NETWORK_CATEGORY_BASED_ON,netCategory,sizeof(netCategory));

+        cfg_get_item(NV_CONNECT_LOGIC,connectLogic,sizeof(connectLogic));

+        

+        //normal_sysinfosetdomainstat(tPara.srvDomain);

+        if(0 == strcmp("act", netCategory))

+		{

+			normal_sysinfosysmodecfgset(tPara.sysMode,tPara.sysSubmode);

+		}

+        else

+        {

+			normal_sysinfonetworktypeSet(tPara.sysMode,tPara.sysSubmode);

+		}

+        

+        //if(0!=strcmp("cpe",connectLogic) && 0!=strcmp("five_times",connectLogic))

+        //{

+        //    normal_sysinfodomainpdpdail(tPara.srvDomain);

+        //}

+		cfg_get_item("signalbar", strSignalbar, sizeof(strSignalbar));

+        signalbar = atoi(strSignalbar);

+        ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_MMI,MSG_CMD_OUT_REG_GET_SIGNAL_NUM, sizeof(signalbar), (UINT8 *)&signalbar,0);

+

+		//zhangfen for PDP

+		//ipc_send_message(MODULE_ID_AT_CTL,MODULE_ID_MAIN_CTRL, MSG_CMD_NET_AUTO_DIAL, 0, NULL, 0);

+				

+		if(g_modem_model)

+		{

+			//static int can_poweron_dail = 0;

+			MSG_BUF *msg_buf = NULL;

+			char ppp_status[20] = {0};

+			cfg_get_item(NV_PPP_STATUS, ppp_status, sizeof(ppp_status));

+			//Ö»Óе±Ê״請úºó£¬Ö÷¿ØÔø¾­Ö÷¶¯·¢Æð¹ý²¦ºÅ²¢ÇÒûÓв¦ºÅ³É¹¦£¬´ËʱÔÚÓÐÍøÂçºó

+			//at_ctlÄ£Äâ³ÉÖ÷¿ØÖØÐ·¢Æðpdp¼¤»î

+			if((can_poweron_dail == 0) && (g_defcid_mng.modid == MODULE_ID_MAIN_CTRL) && (0 == strcmp(PPP_DISCONNECTED, ppp_status)))

+		    {

+				char creg_stat[20] = {0};

+				char cereg_stat[20] = {0};

+				

+				cfg_get_item("cgreg_stat", creg_stat, sizeof(creg_stat));

+				cfg_get_item("cereg_stat", cereg_stat, sizeof(cereg_stat));

+				at_print(AT_DEBUG,"@@@@@@@@@@@@@sysinfo_auto_act  creg stat=%s, cereg stat=%s!\n",creg_stat,cereg_stat);

+				//zpr 1218 GPRSS&EPSûע²áºÃ£¬²»·¢Æð

+				if(1 != atoi(creg_stat) && 5 != atoi(creg_stat) && 1 != atoi(cereg_stat) && 5 != atoi(cereg_stat))

+				{

+					//return 0;

+				}

+				else

+				{

+		        can_poweron_dail = 1;

+				#if 0

+		        struct pdp_act_req *pdpsetinfo=NULL;

+		        pdpsetinfo=malloc(sizeof(struct pdp_act_req));

+		        if(pdpsetinfo == NULL){softap_assert("");}

+		        memset(pdpsetinfo,0,sizeof(struct pdp_act_req));

+		        normal_getcurparam(pdpsetinfo);

+		        cfg_set("auto_reconnect", "1");

+				#endif

+				

+				at_print(AT_ERR,"sysinfo_auto_act begin dial!!!\n");

+				msg_buf=normal_getmsg(g_defcid_mng.modid ,MODULE_ID_AT_CTL,MSG_CMD_PDP_ACT_REQ, 0, NULL);

+				rcv_msg_proc(msg_buf);

+				free(msg_buf);

+				msg_buf = NULL;

+				}

+		    }

+		}

+	}

+

+	cfg_get_item(NV_SIMCARD_ROAM, perRoamStatus, sizeof(perRoamStatus));

+    if(0 == tPara.roamStatus)

+    {

+		cfg_set(NV_SIMCARD_ROAM,"Home");

+	}

+	else

+	{

+		if(TRUE == normal_checkroam(mccNum, mncNum))

+		{

+		    cfg_set(NV_SIMCARD_ROAM,"Home");

+			tPara.roamStatus = 0;

+		}

+	    else

+		{

+		    cfg_set(NV_SIMCARD_ROAM,"Internal"); 

+		}

+    }

+

+	cfg_get_item(NV_SIMCARD_ROAM, curRoamStatus, sizeof(curRoamStatus));

+	if(strcmp(perRoamStatus, curRoamStatus) != 0)

+	{

+		ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_DMREG, MSG_CMD_ROAM_STATUS_IND, 0, NULL, 0);

+	}

+	

+    if(0 == strcmp("yes", needDispSearching))

+	{

+	   if(g_isSearchingNetwork == FALSE)

+	   {

+			at_print(AT_DEBUG,"atBase_RecvSysInfoRsp, MSG_MMICHANNEL_NETWORK_MODE, tPara.srvStatus = %ld \n", tPara.srvStatus);

+		    ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_MMI,MSG_CMD_CHANNEL_NETWORK_MODE, sizeof(tPara), (UCHAR *)&tPara,0);

+	   }

+	}   

+	else

+    {

+        ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_MMI,MSG_CMD_CHANNEL_NETWORK_MODE, sizeof(tPara), (UCHAR *)&tPara,0);

+    }

+    return AT_END;

+}

+

+int mac_auto_act(char *at_paras ,int is_query_report)

+{

+    mactozssid=malloc(128);

+    if(mactozssid == NULL){

+		softap_assert("");

+		return AT_END;

+	}

+    memset(mactozssid, 0, 128);    

+    snprintf(mactozssid,128,"+MAC:%s",at_paras);

+    return AT_END;

+}

+

+int mac2_auto_act(char *at_paras ,int is_query_report)

+{

+    if(mactozssid == NULL || strlen(mactozssid) >= 128){

+		softap_assert("");

+		return AT_END;

+	}

+    snprintf(mactozssid+strlen(mactozssid),128-strlen(mactozssid),";%s",at_paras);

+    return AT_END;

+}

+

+int clck_auto_act(char *at_paras ,int is_query_report)

+{

+    char strMode[10] = {0};

+    T_zAt_ClckSet_RES clckRspPara = {0};

+    int classVale = 0;

+    int status = 0;

+    sscanf(at_paras, "%d,%d",&status,&classVale);

+    clckRspPara.uclass  = (unsigned char)classVale;

+    clckRspPara.status  = (unsigned char)status;

+    sprintf(strMode,"%d", clckRspPara.status);

+    at_print(AT_DEBUG,"clck_auto_act uclass=%d,status=%d\n",status,classVale);

+    /*0£ºÎ´¼¤»î, 1£º¼¤»î*/

+    cfg_set(NV_PIN_STATUS, strMode);

+    return AT_END;

+}

+

+int zpbic_auto_act(char *at_paras ,int is_query_report)

+{

+    T_zAt_ZpbicRes AtRes = {0};

+    char ismsSwitch[2] = {0};

+    sscanf(at_paras, "%ld,%ld", &AtRes.result, &AtRes.opertype);

+    at_print(AT_DEBUG,"zpbic_auto_act str:%s,result:%ld,opertype:%ld\n",at_paras,AtRes.result, AtRes.opertype);

+

+    if((1 == AtRes.result) && (1 == AtRes.opertype))

+    {

+    	cfg_set("zpbic_pb", "ready");

+	    if(g_modem_model)

+	    {

+	    	g_smspb_init |= (1<<AtRes.opertype);

+			at_print(AT_NORMAL,"1.sms_pb init flag: %d\n", g_smspb_init);

+			if(((g_smspb_init & 0x03) == 0x03) && (g_need_smspb_init == 0))

+			{

+				char ppp_status[20] = {0};

+				cfg_get_item(NV_PPP_STATUS, ppp_status, sizeof(ppp_status));

+				if(0 == strcmp("ppp_connected", ppp_status))

+					pbsms_init_msg_proc();//Èç¹ûÒѾ­²¦ºÅ³É¹¦£¬Ö±½Ó¸øpbºÍsmsÓ¦Ó÷¢Æð³õʼ»¯ÏûÏ¢

+				else

+					pbsms_init_timerout(&AtRes);//pbºÍsms¶¼³õʼ»¯Íê³Éºó²ÅÄÜÆð¶¨Ê±Æ÷

+			}

+	    }

+		

+		char versionmode[2] = {0};

+		MSG_BUF *buf = NULL;

+        //оƬÈÏÖ¤´úÂë

+		cfg_get_item("version_mode", versionmode, sizeof(versionmode));

+		if(0 == strcmp(versionmode, "0"))	

+		{

+	    	buf = normal_getmsg(MODULE_ID_AT_CTL,MODULE_ID_AT_CTL,MSG_CMD_MODEMREG_INFO_REQ,0,NULL);

+	    	rcv_clt_req_msg_proc(buf);

+	    	free(buf);

+		}

+

+        at_print(AT_DEBUG,"zpbic_auto_act cnum\n");

+    }

+    else if((1 == AtRes.result) && (0 == AtRes.opertype))

+    {

+        at_print(AT_DEBUG,"zpbic_auto_act sms\n");

+#if (APP_OS_TYPE == APP_OS_LINUX)			

+#if 1 

+        cfg_get_item("isms_enable",ismsSwitch,sizeof(ismsSwitch));

+        if(1 == AtRes.result && 0==strcmp(ismsSwitch, "1"))

+        {

+/*        	cfg_set("isms_state", "0");

+            if(fork() == 0)

+            {

+        		cfg_set("isms_state", "1");

+                if(execv("/bin/zte_isms", NULL) < 0)

+                {

+        			cfg_set("isms_state", "2");

+                    at_print(AT_DEBUG,"execv error(%d)\n", errno);

+                    exit(0);

+                }

+            }

+            

+        	cfg_set("isms_state", "3");*/

+			if(system("/bin/zte_isms &") == 0)

+			{

+				cfg_set("isms_state", "3");

+			}

+			else

+			{

+				cfg_set("isms_state", "2");

+			}

+        }

+#endif

+#endif

+	    if(g_modem_model)

+	    {

+	    	g_smspb_init |= (1<<AtRes.opertype);

+	    	at_print(AT_NORMAL,"2.sms_pb init flag: %d\n", g_smspb_init);

+	    	if(((g_smspb_init & 0x03) == 0x03) && (g_need_smspb_init == 0))

+			{

+				char ppp_status[20] = {0};

+				cfg_get_item(NV_PPP_STATUS, ppp_status, sizeof(ppp_status));

+				if(0 == strcmp("ppp_connected", ppp_status))

+					pbsms_init_msg_proc();//Èç¹ûÒѾ­²¦ºÅ³É¹¦£¬Ö±½Ó¸øpbºÍsmsÓ¦Ó÷¢Æð³õʼ»¯ÏûÏ¢

+				else

+					pbsms_init_timerout(&AtRes);//pbºÍsms¶¼³õʼ»¯Íê³Éºó²ÅÄÜÆð¶¨Ê±Æ÷

+			}

+	    }

+    }

+    return AT_END;

+}

+//add corem0620 begin

+#define ZAT_CUSD_MAXLEN                     320

+#define ZAT_MAX_LEN                 7168 //1024

+#define AT_USSD_DATA_TO_WEB_LEN  900//ussd

+#define ZAT_TAB_REPLACE                     ((unsigned char )(0xFC))    /* ÖÆ±í·ûÌæ»»·û     */

+#define ZAT_NULL_FILL                       ((unsigned char )(0xFD))    /* ¿Õ´®Õ¼Î»·û       */

+#define ZAT_SPACE_REPLACE                   ((unsigned char )(0xFE))    /* ¿Õ¸ñÌæ»»·û       */

+#define ZAT_LF_REPLACE                      ((unsigned char )(0xFB))    /* LFÌæ»»·û         */

+#define ZAT_CR_REPLACE                      ((unsigned char )(0xFA))    /* CRÌæ»»·û */

+

+typedef struct

+{

+    SINT16  replyMsg;

+    CHAR    cusdDataStr[ZAT_CUSD_MAXLEN + 1];

+    SINT16  bDcs;

+} T_zAt_CusdRes;

+

+typedef enum

+{

+    ZAT_GSM7BIT = 0,

+    ZAT_8BIT,

+    ZAT_UCS2,

+    ZAT_INVALID,

+} T_zAt_CBSCodeType;

+VOID atBase_PreProcRes(CHAR *pParaLine, int paraSize)

+{

+    SINT32  flg                                     = 0;

+    UINT32  i                                       = 0;

+    UINT32  length                                  = 0;

+    CHAR    *pSource                                = pParaLine;

+    CHAR    *pDest                                  = NULL;

+    

+    CHAR    *pStrDestMalloc = (CHAR *)malloc(ZAT_MAX_LEN);

+    if(NULL == pStrDestMalloc)

+    {

+        return;

+    }

+    memset(pStrDestMalloc, 0, ZAT_MAX_LEN); 

+    

+    assert(pParaLine != NULL);

+    pDest = pStrDestMalloc;

+    length = strlen(pParaLine);

+    if ((length == 0) || (length >= ZAT_MAX_LEN))

+    {

+        free(pStrDestMalloc);

+        return;

+    }

+    for (i = 0; (i < length )&& (pDest - pStrDestMalloc < ZAT_MAX_LEN); i++)

+    {

+        if ('"' == *pSource)

+        {

+            flg = (0 == flg)?1:0;                           /* Ë«ÒýºÅ ɾ³ý  */

+            if ('"' == *(pSource + 1))                      /* ÐǺźóÃæ½ô¸úÐǺţ¬²åÈë¿Õ´®Õ¼Î»·û */

+            {

+                *pDest++ = (CHAR)ZAT_NULL_FILL;

+            }

+        }

+        else if ((',' == *pSource) && (0 == flg))

+        {

+            *pDest++ = ' ';                                 /* Ë«ÒýºÅÍâÃæµÄ¶ººÅ£¬Ìæ»»³É¿Õ¸ñ */

+            if(',' == *(pSource + 1))                       /* ¶ººÅºóÃæ½ô¸ú¶ººÅ£¬»òÕßÒÔ¶ººÅ½á⣬²åÈë¿Õ´®Õ¼Î»·û */

+            {

+                *pDest++ = '9';                             //±£Áô²ÎÊýÓÃ9ÔÝʱ´úÌæ

+            }

+            else if('\0' == *(pSource + 1))                 /* ¶ººÅºóÃæ½ô¸ú¶ººÅ£¬»òÕßÒÔ¶ººÅ½á⣬²åÈë¿Õ´®Õ¼Î»·û */

+            {

+                *pDest++ = (CHAR)ZAT_NULL_FILL;

+            }

+        }

+        else

+        {

+            //*pDest++ = ((' ' == *pSource) && (1 == flg))?(CHAR)ZAT_SPACE_REPLACE:((('\t' == *pSource) && (1 == flg))?(CHAR)ZAT_TAB_REPLACE:((('\n' == *pSource) && (1 == flg))?(CHAR)ZAT_LF_REPLACE:((('\r' == *pSource) && (1 == flg))?(CHAR)ZAT_CR_REPLACE:(*pSource))));

+            if((' ' == *pSource) && (1 == flg))

+			{

+				*pDest++ = (CHAR)ZAT_SPACE_REPLACE;

+			}

+			else if(('\t' == *pSource) && (1 == flg))

+			{

+				*pDest++ = (CHAR)ZAT_TAB_REPLACE;

+			}

+			else if(('\n' == *pSource) && (1 == flg))

+			{

+				*pDest++ = (CHAR)ZAT_LF_REPLACE;

+			}

+			else if(('\r' == *pSource) && (1 == flg))

+			{

+				*pDest++ = (CHAR)ZAT_CR_REPLACE;

+			}

+			else

+			{

+				*pDest++ = *pSource;

+			}

+        }

+        pSource++;

+    }

+    memset(pParaLine, 0, paraSize);                           /* ½«Ô¤´¦ÀíºóµÄÄÚÈÝ¿½±´»Ø²ÎÊýÐÐÖÐ */

+    strncpy(pParaLine, pStrDestMalloc,paraSize-1);

+    free(pStrDestMalloc);

+}

+

+

+VOID atBase_RestoreString(CHAR *pStringPara)

+{

+    SINT32  i           = 0;

+    SINT32  length      = 0;

+    CHAR*   pstrTemp    = 0;

+    /* ²ÎÊý¼ì²é ¡¢ ³¤¶È¼ì²é*/

+    assert(pStringPara != NULL);

+	

+    length = (SINT32)strlen(pStringPara);

+	if ( 0 == length)

+    {

+        return;

+    }

+	

+    /* ¿Õ´®Õ¼Î»·û»Ö¸´ */

+    if ((1 == length) && ((CHAR) ZAT_NULL_FILL == *pStringPara))

+    {

+        *pStringPara = '\0';

+        return;

+    }

+    /* Ñ­»·»Ö¸´¿Õ¸ñÌæ»»·ûºÍÖÆ±í·ûÌæ»»·û */

+    pstrTemp = pStringPara;

+    for (i = 0; i < length; i++)

+    {

+        if ((CHAR) ZAT_SPACE_REPLACE == *pstrTemp)

+        {

+            *pstrTemp = ' ';

+        }

+        else if ((CHAR) ZAT_TAB_REPLACE == *pstrTemp)

+        {

+            *pstrTemp = '\t';

+        }

+        else if((CHAR) ZAT_LF_REPLACE == *pstrTemp)

+        {

+            *pstrTemp = '\n';

+        }

+        else if((CHAR) ZAT_CR_REPLACE == *pstrTemp)

+        {

+            *pstrTemp = '\r';

+        }

+        else

+        {

+            ;

+        }

+        pstrTemp++;

+    }

+}

+//USSD

+T_zAt_CBSCodeType atBase_CheckDataCodeType(SINT16 bDcs)

+{

+    UINT16 value76 = (bDcs & 0xC0) >> 6;

+    UINT16 value74 = (bDcs & 0xF0) >> 4;

+    UINT16 value30 = (bDcs & 0x0F);

+    UINT16 value32 = (bDcs & 0x0C) >> 2;

+    UINT16 value2  = (bDcs & 0x04) >> 2;

+

+    if((value74 == 0) || (value74 == 2) || (value74 == 3) || (value74 == 8) ||

+        (value74 == 10) || (value74 == 11) || (value74 == 12))

+    {

+        return ZAT_GSM7BIT;

+    }

+    else if((value74 == 1) && (value30 == 1))

+    {

+        return ZAT_UCS2;

+    }

+    else if((value74 == 1) && (value30 != 1))

+    {

+        return ZAT_GSM7BIT;

+    }

+    else if((value76 == 1) && ((value32 == 0) || (value32 == 3)))

+    {

+        return ZAT_GSM7BIT;

+    }

+    else if((value76 == 1) && (value32 == 1))

+    {

+        return ZAT_8BIT;

+    }

+    else if((value76 == 1) && (value32 == 2))

+    {

+        return ZAT_UCS2;

+    }

+    else if((value74 == 9) && ((value32 == 0) || (value32 == 3)))

+    {

+        return ZAT_GSM7BIT;

+    }

+    else if((value74 == 9) && (value32 == 1))

+    {

+        return ZAT_8BIT;

+    }

+    else if((value74 == 9) && (value32 == 2))

+    {

+        return ZAT_UCS2;

+    }

+    else if((value74 == 15) && (value2 == 0))

+    {

+        return ZAT_GSM7BIT;

+    }

+    else if((value74 == 15) && (value2 == 1))

+    {

+        return ZAT_8BIT;

+    }

+    return ZAT_INVALID;

+}

+

+VOID atBase_ConvertAsciiToUCS2(const CHAR *dataStr,CHAR *convertDataStr,UINT16 dataLen)

+{

+    UINT16 iDataLen = 0;

+    

+    if((dataStr == NULL) || (convertDataStr == NULL) || (dataLen <= 0))

+    {

+        return;

+    }

+    for(iDataLen = 0;iDataLen < dataLen;iDataLen++)

+    {

+        snprintf(convertDataStr+strlen(convertDataStr),AT_USSD_DATA_TO_WEB_LEN,"%04x",dataStr[iDataLen]);

+    }

+    printf("%s\n",convertDataStr);

+}

+

+VOID atBase_Convert8BitToUCS2(const CHAR *dataStr,CHAR *convertDataStr,UINT16 dataLen)

+{

+    UINT16 iDataLen = 0;

+    

+    if((dataStr == NULL) || (convertDataStr == NULL) || (dataLen <= 0))

+    {

+        return;

+    }

+    for(iDataLen = 0;iDataLen < dataLen;iDataLen++)

+    {

+        if(iDataLen%2 == 0)

+	 {

+	      snprintf(convertDataStr+strlen(convertDataStr),AT_USSD_DATA_TO_WEB_LEN,"00%c",dataStr[iDataLen]);

+	 }

+	 else

+	 {

+	      snprintf(convertDataStr+strlen(convertDataStr),AT_USSD_DATA_TO_WEB_LEN,"%c",dataStr[iDataLen]);

+	 }

+     }

+     printf("%s\n",convertDataStr);

+}

+

+

+BOOL atBase_ConvertUCS2SetNV(T_zAt_CBSCodeType cbsCodeType,const CHAR *cusdDataStr,CHAR *convertDataStr,UINT16 dataLen)

+{

+    if((cbsCodeType == ZAT_INVALID) || (cusdDataStr == NULL) || (convertDataStr == NULL) || (dataLen <= 0))

+    {

+        return FALSE;

+    }

+    if(cbsCodeType == ZAT_GSM7BIT)

+    {

+        atBase_ConvertAsciiToUCS2(cusdDataStr,convertDataStr,dataLen);

+        cfg_set("ussd_content",convertDataStr);

+        return TRUE;

+    }

+    else if(cbsCodeType == ZAT_8BIT)

+    {

+        atBase_Convert8BitToUCS2(cusdDataStr,convertDataStr,dataLen);

+        cfg_set("ussd_content",convertDataStr);

+        return TRUE;

+    }

+    else if(cbsCodeType == ZAT_UCS2)

+    {

+        cfg_set("ussd_content",cusdDataStr);

+        return TRUE;

+    }

+    else

+    {

+        printf("DCS Reported can't be processed!!!!\n");

+        return FALSE;

+    }

+}

+

+static int get_param_count_for_ussd(const char *str){//corem0418

+    int fmt_param_count = 0;

+    

+    for(; *str != '\0'; str++){

+        if(*str == ','){

+            fmt_param_count++;

+        }

+    }

+    return fmt_param_count;

+}

+

+int cusd_auto_act(char *at_paras ,int is_query_report)

+{

+    T_zAt_CusdRes                    cusdParam = {0};

+    T_zAt_CBSCodeType            cbsCodeType = ZAT_INVALID;

+    CHAR convertDataStr[AT_USSD_DATA_TO_WEB_LEN] = {0};

+    //static int flag = 0;

+

+	at_print(AT_ERR,"!!!!cusd_auto_act start.\n");

+    if(at_paras == NULL)

+    {

+        return AT_END;

+    }

+	

+

+    at_print(AT_ERR,"!!!!cusd_auto_act Gets %s.\n", at_paras);

+

+//    void *p[3] = {&cusdParam.replyMsg,  cusdParam.cusdDataStr, &cusdParam.bDcs};

+

+//    parse_param("%d %s %d", at_paras, p);

+	

+//    at_print(AT_DEBUG,"cusd_auto_act  replyMsg=%d, cusdDataStr=%s, bDcs=%d!\n",  cusdParam.replyMsg, cusdParam.cusdDataStr, cusdParam.bDcs);  	

+    

+    if(get_param_count_for_ussd(at_paras) > 0){//corem0418           

+           atBase_PreProcRes(at_paras, strlen(at_paras));

+	    at_print(AT_ERR,"!!!!cusd_auto_act Gets 3 para:%s\n", at_paras);

+	    sscanf(at_paras, "%hd %320s %hd",&cusdParam.replyMsg,cusdParam.cusdDataStr,&cusdParam.bDcs);

+	    

+    }else{

+           at_print(AT_ERR,"!!!!cusd_auto_act Gets 1 para:%s\n", at_paras);         

+	   sscanf(at_paras, "%hd",&cusdParam.replyMsg);

+    }

+

+    at_print(AT_ERR,"cusd_auto_act before restore MSG  replyMsg=%d, cusdDataStr=%s, bDcs=%d!\n",  cusdParam.replyMsg, cusdParam.cusdDataStr, cusdParam.bDcs);  

+

+    atBase_RestoreString(cusdParam.cusdDataStr);

+	

+    at_print(AT_ERR,"cusd_auto_act after restore MSG replyMsg=%d, cusdDataStr=%s, bDcs=%d!\n",  cusdParam.replyMsg, cusdParam.cusdDataStr, cusdParam.bDcs);

+	

+    //printf("atBase_RecvCusdRsp :%d,%s,%d",cusdParam.replyMsg,cusdParam.cusdDataStr,cusdParam.bDcs);

+    if((cusdParam.replyMsg == 0) || (cusdParam.replyMsg == 1))

+    {

+        cbsCodeType = atBase_CheckDataCodeType((SINT16)cusdParam.bDcs);

+        at_print(AT_ERR,"Code Type:%d\n",cbsCodeType);

+        if(atBase_ConvertUCS2SetNV(cbsCodeType,cusdParam.cusdDataStr,convertDataStr,(UINT16)strlen(cusdParam.cusdDataStr)))

+        {

+            cfg_set("ussd_write_flag","16");

+            cfg_set("ussd_dcs","72");

+            if(cusdParam.replyMsg == 0)

+            {

+                cfg_set("ussd_mode","0");

+                cfg_set("ussd_cancel_flag","no");

+            }

+            else

+            {

+                cfg_set("ussd_mode","1");

+                cfg_set("ussd_cancel_flag","yes");

+            }

+			//½«Êý¾Ý´æ´¢µ½Êý¾Ý¿â

+			//store_ussd_data_to_db(convertDataStr);//corem0625

+        }

+        else

+        {

+            cfg_set("ussd_write_flag","99");

+            cfg_set("ussd_cancel_flag","no");

+			return AT_END;

+        }

+    }

+    else if(cusdParam.replyMsg == 2)

+    {

+        cfg_set("ussd_write_flag","13");

+        cfg_set("ussd_cancel_flag","no");

+    }

+    else if(cusdParam.replyMsg == 3)

+    {

+        cfg_set("ussd_write_flag","4");

+        cfg_set("ussd_cancel_flag","no");

+    }

+    else if(cusdParam.replyMsg == 4)

+    {

+        cfg_set("ussd_write_flag","99");

+        cfg_set("ussd_cancel_flag","no");

+    }

+    else if(cusdParam.replyMsg == 5)

+    {

+        cfg_set("ussd_write_flag","4");

+        cfg_set("ussd_cancel_flag","no");

+    }

+    else

+    {

+        cfg_set("ussd_write_flag","99");

+        cfg_set("ussd_cancel_flag","no");

+    }

+	return AT_END;

+}

+

+//add corem0620 end

+

+int cnum_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+    return AT_END;

+}

+//const char *at_paras

+int cnum_auto_act( char *at_paras ,int is_query_report)

+{

+    T_zAt_CnumRes   tAtRes  = {0};

+    CHAR tcnum[256] = {0};

+    CHAR *mslsdm = NULL;

+    UINT32 len=0;

+	

+    void *p[3] = {tAtRes.alpha, tAtRes.number, &tAtRes.type};

+    at_print(AT_DEBUG,"cnum_auto_act at_paras=%s!\n",at_paras);

+    parse_param2("%s,%s,%d", at_paras, p);

+    at_print(AT_DEBUG,"cnum_auto_act alpha=%s,number=%s,type=%d!\n",

+    tAtRes.alpha, tAtRes.number, tAtRes.type); 

+	

+	if(strlen(tAtRes.number) == 0){//corem20201209

+		return AT_END;

+	}

+

+    cfg_get_item(NV_SIM_ICCID,tcnum,sizeof(tcnum));

+    if(0 == strcmp("", tcnum))

+    {

+        cfg_set(NV_SIM_ICCID, tAtRes.number);

+		cfg_set(NV_MSISDN, tAtRes.number);

+    }

+    else

+    {

+	    char *pos = strstr(tcnum, tAtRes.number);//corem20201209

+		if(pos != NULL && (*(pos + strlen(tAtRes.number)) == '\0' || *(pos + strlen(tAtRes.number)) == ',')){

+		    return AT_END;

+		}

+		

+        len = strlen(tcnum)+strlen(tAtRes.number)+strlen(", ")+1;

+        mslsdm = malloc(len);

+	    if(mslsdm == NULL)

+	    {

+	        return AT_END;

+	    }

+        memset(mslsdm, 0, len); 

+        snprintf(mslsdm, len,"%s, %s", tcnum, tAtRes.number);

+        cfg_set(NV_SIM_ICCID, mslsdm);

+		cfg_set(NV_MSISDN, mslsdm);

+        free(mslsdm);

+	    mslsdm = NULL;

+    }

+    return AT_END;

+}

+

+char* start_query_cnum(void *msg,struct at_context *context)

+{

+    at_print(AT_DEBUG,"start_query_cnum\n");

+    return normal_CnumRead();

+}

+

+/* ЭÒéÕ»¹Ì¶¨ÐÅÏ¢»ñȡʼþÁ´ZICCID CIMI CNUM  */

+char *start_getmodeminfo(void *msg,struct at_context *context)

+{

+	return normal_getziccid();

+}

+

+

+char* start_pdpact_cmd(void *msg,struct at_context *context)

+{

+	char creg_stat[20] = {0};

+	MSG_BUF *p_msg = (MSG_BUF *)msg;

+    struct pdp_act_req *pdpsetinfo = NULL;

+	char *pstr = NULL;

+

+	cfg_get_item("creg_stat", creg_stat, sizeof(creg_stat));

+	at_print(AT_DEBUG,"@@@@@@@@@@@@@start_pdpact_cmd creg stat=%s!\n",creg_stat);

+

+	/*¶ÔÓÚÍø¹ØÀàÓ¦Óã¬ÀýÈçwebui¡¢Ö÷¿Ø¡¢TR069£¬Æä½ö¿ØÖÆÆÕͨÉÏÍøÒµÎñµÄmodemÁªÍøÓë¶Ï¿ª£¬

+	ÔÚpdp¼¤»îÐÅÏ¢Öв»Ð¯´øÈκβÎÊý£¬pdp¼¤»î¾ßÌåʹÓõÄapn¡¢ip type¡¢Óû§Ãû¡¢ÃÜÂëµÈÐÅÏ¢

+	ÐèÒªÓÉat_ctl×Ô¼ºÈ·¶¨*/

+	if(p_msg->usDataLen == 0)

+	{	

+		//zhangfen for PDP		

+		cfg_set("auto_reconnect", "1");		

+		

+	 	pdpsetinfo=malloc(sizeof(struct pdp_act_req));

+        if(pdpsetinfo == NULL){

+			softap_assert("");

+			return NULL;

+		}

+        memset(pdpsetinfo,0,sizeof(struct pdp_act_req));

+		//at_ctl¸ù¾Ý±£´æµÄĬÈÏpdp¼¤»îÐÅÏ¢£¬×é×°pdp¼¤»îÏûÏ¢ÄÚÈÝ£¬²¢Ìî³äµ½ÏûÏ¢ÖÐ

+        normal_getcurparam(pdpsetinfo);

+		

+		set_default_apn(pdpsetinfo->comm_info.apn);

+		pdpsetinfo->default_flag = 1;//¿ÉÒÔʹÓÃĬÈϳÐÔØ

+		memcpy(p_msg->aucDataBuf, pdpsetinfo, sizeof(struct pdp_act_req));

+		p_msg->usDataLen = sizeof(struct pdp_act_req);

+		pstr = pdp_act_func(p_msg,context); 

+		free(pdpsetinfo);

+	#if 0

+		if(1 == atoi(creg_stat) || 5 == atoi(creg_stat))

+	    {      

+	    	//set_pppstatus(PPP_CONNECTING);

+	       

+	        memcpy(p_msg->aucDataBuf, pdpsetinfo, sizeof(struct pdp_act_req));

+			p_msg->usDataLen = sizeof(struct pdp_act_req);

+			pstr = pdp_act_func(p_msg,context); 	       

+	    }

+		else

+		{		  	

+			/*Ϊ¼õÉÙ²»±ØÒªµÄ²¦ºÅatÃüÁîÁ÷³Ì£¬Èç¹ûµ±Ç°²»Âú×㲦ºÅÌõ¼þ£¬ÔòÖ±½Ó±¨´í¸øÍø¹ØÓ¦Óã¬

+			֪ͨÆäµ±Ç°ÎÞ·¨²¦ºÅ*/

+			send_rsp_msg(context->source,context->msg_id,MSG_CMD_PDP_ACT_RSP,0,0);

+		}

+#endif

+		

+	}

+	else

+	{

+		/*·ÇÍø¹ÜÀàÓ¦ÓõÄpdp¼¤»î£¬Óë±¾ÉíÒµÎñÓйأ¬²»ÊÜÍø¹Ø¿ØÖÆ£¬Í¬Ê±»áÖ¸¶¨apn¡¢ip typeµÈÐÅÏ¢£¬Òò´Ë

+		ÔÚpdp¼¤»îʱÐèÒª½«pdp¼¤»îÐÅϢЯ´ø¹ýÀ´£¬ÓÉat_ctlÖ±½Ó·¢Æðpdp¼¤»î*/

+		pstr = pdp_act_func(msg,context);	

+	}		

+	return pstr;   

+}

+

+extern struct defcid_mng_t g_defcid_mng;

+

+char* start_pdpdeact_cmd(void *msg,struct at_context *context)

+{

+    char pppStatus[50] = {0};

+	MSG_BUF *p_msg = (MSG_BUF *)msg;

+	AT_PDP_DEACT_REQ_INFO req = {0};

+	char *pstr = NULL;

+	

+	/*¶ÔÓÚÍø¹ØÀàÓ¦Óã¬ÀýÈçwebui¡¢Ö÷¿Ø¡¢TR069£¬Æä¿ØÖÆÆÕͨÉÏÍøÒµÎñµÄmodemÁªÍøÓë¶Ï¿ª£¬

+	ÔÚpdpÈ¥¼¤»îʱ£¬½öָʾat_ctl¶Ï¿ªmodemÁªÍø£¬¾ßÌå¶Ï¿ªµÄcid£¬ÓÉat_ctl±£´æµÄĬÈÏcid¾ö¶¨*/

+	if(p_msg->usDataLen == 0)

+	{

+		cfg_get_item("ppp_status", pppStatus, sizeof(pppStatus));

+	    if((strcmp("ppp_disconnecting", pppStatus)== 0) || (strcmp("ppp_disconnected", pppStatus) == 0))

+	    {

+	    	AT_PDP_DEACT_RSP_INFO rsp = {0};

+			rsp.result = AT_RSP_OK;

+			send_rsp_msg(context->source,context->msg_id,MSG_CMD_PDP_DEACT_RSP,sizeof(AT_PDP_DEACT_RSP_INFO),&rsp);

+	        return NULL;		

+	    }

+	    if(strcmp("ppp_connecting", pppStatus)== 0)

+	    {

+			at_print(AT_ERR,"start_pdpdeact_cmd is acting ,start timer to wait\n");

+			add_one_delayed_msg(msg);

+	        return NULL;		

+	    }

+		

+		set_pppstatus(PPP_DISCONNECTING);

+	

+		req.c_id = g_defcid_mng.cid;

+		memcpy(p_msg->aucDataBuf, &req, sizeof(AT_PDP_DEACT_REQ_INFO));

+		p_msg->usDataLen = sizeof(AT_PDP_DEACT_REQ_INFO);

+		pstr = pdp_deact_func(p_msg, context);

+	}

+	else

+	{

+		pstr = pdp_deact_func(msg, context);

+	}

+	return pstr;	

+}

+

+//ÒÔÏÂÊÇоƬÈÏÖ¤´úÂë

+char* start_zeact_cmd(void *msg,struct at_context *context)

+{

+	char *at_next=NULL;

+	

+	at_next=malloc(20);

+	if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	snprintf(at_next,20,"AT+ZEACT=%s\r\n",((MSG_BUF*)msg)->aucDataBuf); 

+	return at_next;

+	

+}

+

+char* start_zmmi_cmd(void *msg,struct at_context *context)

+{

+	char *at_next=NULL;

+	

+	at_next=malloc(20);

+	if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	snprintf(at_next,20,"AT+ZMMI=%s\r\n",((MSG_BUF*)msg)->aucDataBuf); 

+	return at_next;

+	

+}

+

+char* start_zimsamrw_cmd(void *msg,struct at_context *context)

+{

+	char *at_next=NULL;

+	

+	at_next=malloc(20);

+	if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	snprintf(at_next,20,"AT+ZIMSAMRW=%s\r\n",((MSG_BUF*)msg)->aucDataBuf); 

+	return at_next;

+	

+}

+

+int  cmd_ok_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+	*next_req=malloc(10);

+	if(*next_req){

+    *next_len=10;

+    strcpy(*next_req,"1");

+	}

+    return AT_END;

+}

+

+int  cmd_err_act(char *at_str,struct at_context *context,void **next_req,int *next_len)

+{

+	*next_req=malloc(10);

+	if(*next_req){

+    *next_len=10;

+    strcpy(*next_req,"0");

+	}

+    return AT_END;

+}

+

+/**

+ * @brief Æô¶¯×ÔÄܶÌÐŽø³Ì

+ * @param 

+ * @return 

+ * @note   

+ * @warning 

+ */

+void at_ctl_startisms(void)

+{

+	at_print(AT_NORMAL,"[TEST]at_ctl_startisms\n");

+#if (APP_OS_TYPE == APP_OS_LINUX)

+/*

+	if(fork() == 0)

+	{

+		if(execv("/bin/zte_isms", NULL) < 0)

+		{

+			at_print(AT_ERR,"[TEST]execv error(%d)\n", errno);

+			exit(0);

+		}

+	}

+*/

+	if(system("/bin/zte_isms &") != 0)

+	{

+		at_print(AT_ERR,"[TEST]execv error(%d)\n", errno);

+	}

+#endif	

+}

+

+int atd_req_rcv_act( char *at_paras,int at_fd,struct at_context *context)

+{

+	if(is_ppp_dial_atd(at_paras, at_fd) == 0)

+		return AT_END;

+	else

+		return AT_CONTINUE;//ÆÕͨµÄATDÃüÁֱ½Óת·¢

+}

+

+char* start_cvmod_cmd(void *msg,struct at_context *context)

+{

+	char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+CVMOD=0\r\n");

+    

+	return at_next;

+}

+

+char* start_zchnelset_cmd(void *msg,struct at_context *context)

+{

+	char *at_next=NULL;

+    at_next=malloc(40);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,40);

+	sprintf(at_next,"AT+ZCHNELSET=0,37,38,39,40,41\r\n");

+    

+	return at_next;

+}

+

+char *start_querycgdcont_cmd(void *msg,struct at_context *context)

+{

+	char *at_next=NULL;

+    at_next=malloc(20);

+    if(at_next == NULL){

+		softap_assert("");

+		return NULL;

+	}

+    memset(at_next,0,20);

+	sprintf(at_next,"AT+CGDCONT?\r\n");

+	return at_next;

+}

+

+//bsim

+static int bs_aes_init_key(unsigned char *aes_key, int k_len)

+{

+	int efuse_fd = -1;

+	T_ZDrvEfuse_Secure efuse = {0};

+	

+	memset(&efuse, 0, sizeof(efuse));

+	efuse_fd = open("/dev/efuse", O_RDWR);

+	if (efuse_fd < 0) {

+		printf("wifi_aes_init_key efuse open errno=%d\n", errno);

+		return 0;

+	}

+	if(ioctl(efuse_fd , EFUSE_GET_DATA, &efuse) != 0) {

+		printf("wifi_aes_init_key efuse ioctl errno=%d\n", errno);

+		close(efuse_fd);

+		return 0;

+	}

+	close(efuse_fd);

+	memcpy(aes_key, efuse.pubKeyHash, k_len);

+	

+	return 1;

+}

+

+static int bs_aes_encrypt(char* in, int len, char* out, unsigned char* key, int key_len)

+{

+    if (!in || !out || !key || len <=0 || (len%AES_BLOCK_SIZE)!=0 || (key_len!=16 && key_len!=24 && key_len!=32)) {

+		printf("bs_aes_encrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);

+        return 0;

+    }

+ 

+    AES_KEY aes = {0}; //cov h

+    if (AES_set_encrypt_key(key, key_len*8, &aes) < 0) {

+		printf("bs_aes_encrypt AES_set_encrypt_key err\n");

+        return 0;

+    }

+ 

+    int en_len = 0;

+    while (en_len < len) {

+        AES_encrypt((unsigned char*)in, (unsigned char*)out, &aes);

+        in	+= AES_BLOCK_SIZE;

+        out += AES_BLOCK_SIZE;

+        en_len += AES_BLOCK_SIZE;

+    }

+ 

+    return 1;

+}

+

+static int bs_aes_decrypt(char* in, int len, char* out, char* key, int key_len)

+{

+    if (!in || !out || !key || len <=0 || (len%AES_BLOCK_SIZE)!=0 || (key_len!=16 && key_len!=24 && key_len!=32)) {

+		printf("bs_aes_decrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);

+        return 0;

+    }

+ 

+    AES_KEY aes = {0}; //cov h

+    if (AES_set_decrypt_key((unsigned char*)key, key_len*8, &aes) < 0) {

+		printf("bs_aes_decrypt AES_set_decrypt_key err\n");

+        return 0;

+    }

+ 

+    int en_len = 0;

+    while (en_len < len) {

+        AES_decrypt((unsigned char*)in, (unsigned char*)out, &aes);

+        in	+= AES_BLOCK_SIZE;

+        out += AES_BLOCK_SIZE;

+        en_len += AES_BLOCK_SIZE;

+    }

+ 

+    return 1;

+}

+

+static int apn_encrypt_code(void)

+{

+	char w_code[PROFILE_APN_LEN] = {0};

+	char b_aes[PROFILE_APN_LEN] = {0};

+	char s_aes[PROFILE_APN_AES_LEN] = {0};

+

+	cfg_get_item("ppp_passtmp", w_code, sizeof(w_code));

+	bs_aes_encrypt(w_code, PROFILE_APN_LEN - 1, b_aes, atctl_aes_key, sizeof(atctl_aes_key));

+	bytes2string(b_aes, s_aes, PROFILE_APN_LEN - 1); //libatutils

+	cfg_set("ppp_passwd", s_aes);

+	printf("apn_encrypt_code w_code=%s, s_aes=%s\n", w_code, s_aes);

+

+	return 1;

+}

+

+static int ipv6apn_encrypt_code(void)

+{

+	char w_code[PROFILE_APN_LEN] = {0};

+	char b_aes[PROFILE_APN_LEN] = {0};

+	char s_aes[PROFILE_APN_AES_LEN] = {0};

+

+	cfg_get_item("ipv6_ppp_passtmp", w_code, sizeof(w_code));

+	bs_aes_encrypt(w_code, PROFILE_APN_LEN - 1, b_aes, atctl_aes_key, sizeof(atctl_aes_key));

+	bytes2string(b_aes, s_aes, PROFILE_APN_LEN - 1);

+	cfg_set("ipv6_ppp_passwd", s_aes);

+	printf("ipv6apn_encrypt_code w_code=%s, s_aes=%s\n", w_code, s_aes);

+

+	return 1;

+}

+

+//2±íʾfota´ÓÀϰ汾ÍùÉÏÉý¼¶£¬ppp_password´æµÄÊÇÃ÷ÎÄÃÜÂ룬а汾ÊÇÃÜÎÄ

+static int apn_decrypt_code(void)

+{

+	char w_code[PROFILE_APN_LEN]= {0};

+	char b_aes[PROFILE_APN_LEN] = {0};

+	char s_aes[PROFILE_APN_AES_LEN] = {0};

+	int flag = 0;

+

+	cfg_get_item("ppp_passwd", s_aes, sizeof(s_aes));

+	if (strlen(s_aes) == (PROFILE_APN_AES_LEN - 1)) {

+		string2bytes(s_aes, b_aes, PROFILE_APN_AES_LEN - 1);

+		bs_aes_decrypt(b_aes, PROFILE_APN_LEN - 1, w_code, atctl_aes_key, sizeof(atctl_aes_key));

+		cfg_set("ppp_passtmp", w_code);

+//		printf("apn_decrypt_code w_code=%s, s_aes=%s\n", w_code, s_aes);

+	} else if (strlen(s_aes) > 0){

+		cfg_set("ppp_passtmp", s_aes);

+		return 2;

+	}

+

+	return 1;

+}

+

+static int ipv6apn_decrypt_code(void)

+{

+	char w_code[PROFILE_APN_LEN]= {0};

+	char b_aes[PROFILE_APN_LEN] = {0};

+	char s_aes[PROFILE_APN_AES_LEN] = {0};

+	int flag = 0;

+

+	cfg_get_item("ipv6_ppp_passwd", s_aes, sizeof(s_aes));

+	if (strlen(s_aes) == (PROFILE_APN_AES_LEN - 1)) {

+		string2bytes(s_aes, b_aes, PROFILE_APN_AES_LEN - 1);

+		bs_aes_decrypt(b_aes, PROFILE_APN_LEN - 1, w_code, atctl_aes_key, sizeof(atctl_aes_key));

+		cfg_set("ipv6_ppp_passtmp", w_code);

+//		printf("apn_decrypt_code w_code=%s, s_aes=%s\n", w_code, s_aes);

+	} else if (strlen(s_aes) > 0){

+		cfg_set("ipv6_ppp_passtmp", s_aes);

+		return 2;

+	}

+

+	return 1;

+}

+

+int atctl_aes_init(void)

+{

+	bs_aes_init_key(atctl_aes_key, sizeof(atctl_aes_key));

+	

+	if (2 == apn_decrypt_code())

+		apn_encrypt_code();

+	if (2 == ipv6apn_decrypt_code())

+		ipv6apn_encrypt_code();

+

+	return 1;

+}

+

+

diff --git a/lynq/R305/R305E/ap/app/zte_ufi/zte_ufi.c b/lynq/R305/R305E/ap/app/zte_ufi/zte_ufi.c
new file mode 100755
index 0000000..35359b2
--- /dev/null
+++ b/lynq/R305/R305E/ap/app/zte_ufi/zte_ufi.c
@@ -0,0 +1,367 @@
+#define _GNU_SOURCE /**/
+
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <time.h>
+#include <syslog.h>
+#include <unistd.h>
+#include <errno.h>
+#include <signal.h>
+#include <netdb.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <sys/uio.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/sysctl.h>
+#include <net/if.h>
+#include <poll.h>
+#include <stddef.h>
+#include <linux/if_packet.h>
+#include <netinet/ether.h>
+#include <netinet/if_ether.h>
+#include <arpa/inet.h>
+#include <pthread.h>
+#include <zte_ufi.h>
+#include "softap_api.h"
+#include "libcpnv.h"
+#include "NvParam_drv.h"
+
+void nvserver_entry(void)
+{
+	nvserver_main(0,NULL);
+	return;
+}
+
+void at_ctl_entry(char *arg)
+{
+	//printf("at_ctl_entry boot:%s\n", arg);
+	char *argv[2];
+	argv[0] = NULL;
+	argv[1] = arg;
+
+	at_ctl_main(2, argv);
+	return;
+}
+
+void rtc_service_entry(char *arg)
+{
+	rtc_service_main(0,NULL);
+	return;
+}
+
+void zte_mainctrl_entry(char *arg)
+{
+	/*if (0 == strcmp(arg, "2")) {
+		char *argv[2];
+		argv[0] = NULL;
+		argv[1] = "poweroff_charger";
+
+		zte_mainctrl_main(2, argv);
+	} else {*/
+		zte_mainctrl_main(0,NULL);
+	//}
+
+	return;
+}
+
+void zte_hotplug_entry(char *arg)
+{
+	zte_hotplug_main(0,NULL);
+	return;
+}
+
+void zte_audio_res_ctrl_entry(char *arg)
+{
+	zte_audio_res_ctrl_main(0,NULL);
+	return;
+}
+
+void zte_drv_serial_ctrl_entry(char *arg)
+{
+	zte_drv_serial_ctrl_main();
+	return;
+}
+
+void zte_drv_usb_ctrl_entry(char *arg)
+{
+	if(arg)
+		zte_drv_usb_ctrl_main(3,NULL);
+	else
+		zte_drv_usb_ctrl_main(0,NULL);
+	return;
+}
+
+void zte_mmi_entry(char *arg)
+{
+	//printf("zte_mmi_entry boot:%s\n", arg);
+/*	if (0 == strcmp(arg, "2")) {
+		char *argv[2];
+		argv[0] = NULL;
+		argv[1] = "poweroff_charger";
+
+		zte_mmi_main(2, argv);
+	} else {*/
+		zte_mmi_main(0,NULL);
+	//}
+	return;
+}
+
+void zte_locknet_entry(char *arg)
+{
+	zte_locknet_main(0,NULL);
+	//return; //klocwork
+}
+
+void zte_watchdog_entry(char *arg)
+{
+	zte_watchdog_main(0,NULL);
+	return;
+}
+
+void fluxstat_entry(char *arg)
+{
+	fluxstat_main(0,NULL);
+	return;
+}
+
+void sntp_entry(char *arg)
+{
+	sntp_main(0,NULL);
+	return;
+}
+
+/*
+void schedule_restart_entry(char *arg)
+{
+	schedule_restart_main(0,NULL);
+	return;
+}
+*/
+
+/*
+void sd_hotplug_entry(char *arg)
+{
+	sd_hotplug_main(0,NULL);
+	return;
+}
+*/
+void sms_entry(char *arg)
+{
+	sms_main(0,NULL);
+}
+
+void phonebook_entry(char *arg)
+{
+	phonebook_main(0,NULL);
+	return;
+}
+
+void wlan_entry(char *arg)
+{
+	wlan_main(0,NULL);
+	return;
+}
+
+void sim_detect_entry(char *arg)
+{
+	int simCardFlag = 0;
+	int set_simCard = 0;
+	int sim_ready = 1;
+	char rsp_code[2];
+	char buffer[128];
+	FILE *fp = NULL;
+	unsigned long retCode = CPNV_ERROR;
+
+	retCode =cpnv_NvItemRead(DRV_SYS_NV_ITEM_ADDR(uiccmodeSwitch), (unsigned char *)(&simCardFlag), DRV_SYS_NV_ITEM_SIZE(uiccmodeSwitch));
+	if(CPNV_ERROR == retCode) 
+	{
+		printf("sim_detect_entry cpnv read error\n");
+		return;
+	}
+	fp = popen("cat /sys/kernel/debug/zx29_gpio | grep \"GPIO49_\"", "r");
+	if (fp != NULL)
+	{
+		fgets(buffer, sizeof(buffer), fp);
+		if (strstr(buffer, "GPIO_LOW"))
+		{
+			sim_ready = 1;
+		}
+		else
+		{
+			sim_ready = 0;
+		}
+		pclose(fp);
+	}
+	else
+	{
+		printf("sim_detect_entry popen error\n");
+		return;
+	}
+
+	if ((0 == simCardFlag) && (0 == sim_ready))
+	{
+		set_simCard = 3;
+		retCode = cpnv_NvItemWrite(DRV_SYS_NV_ITEM_ADDR(uiccPreSwitch), (unsigned char *)(&set_simCard), DRV_SYS_NV_ITEM_SIZE(uiccPreSwitch));
+		if(CPNV_OK == retCode )
+		{
+			retCode= cpnv_NvramFlush();
+			printf("sim_detect_entry set cpnv simCard = 3 OK, cpnv_NvramFlush ret:%lu\n", retCode);
+			sleep(2);
+			system("reboot");
+		}
+		else
+		{
+			printf("sim_detect_entry set cpnv simCard = 3 error\n");
+		}
+
+	}
+	if ((3 == simCardFlag) && (1 == sim_ready))
+	{
+		set_simCard = 0;
+		retCode = cpnv_NvItemWrite(DRV_SYS_NV_ITEM_ADDR(uiccPreSwitch), (unsigned char *)(&set_simCard), DRV_SYS_NV_ITEM_SIZE(uiccPreSwitch));
+		if(CPNV_OK == retCode )
+		{
+			retCode= cpnv_NvramFlush();
+			printf("sim_detect_entry set cpnv simCard = 0 OK, cpnv_NvramFlush ret:%lu\n", retCode);
+			sleep(2);
+			system("reboot");
+		}
+		else
+		{
+			printf("sim_detect_entry set cpnv simCard = 0 error\n");
+		}
+	}
+
+	return;
+}
+
+#ifndef FOTA_DISABLE
+void fota_dm_entry(char *arg)
+{
+	fota_dm_main(0,NULL);
+}
+#endif
+
+int main(int argc, char *argv[])
+{
+	int ret = 0;
+	/* nvserver */
+    pthread_t nvserver_thread_tid;
+    pthread_create(&nvserver_thread_tid, NULL, (void *)nvserver_entry, NULL);
+	
+	/* zte_hotplug */
+	pthread_t zte_hotplug_thread_tid;
+	pthread_create(&zte_hotplug_thread_tid, NULL, (void *)zte_hotplug_entry, NULL);
+	
+    /* zte_drv_serial_ctrl */
+	pthread_t zte_drv_serial_ctrl_thread_tid;
+	pthread_create(&zte_drv_serial_ctrl_thread_tid, NULL, (void *)zte_drv_serial_ctrl_entry, NULL);
+	if (0 == strcmp(argv[2], "amt")) {
+		ret = cfg_set("ver_mode", "0");
+		if(ret < 0)
+			printf("zte_ufi set vermode fail\n");
+		else
+			cfg_save();
+		printf("---set ver mode to 0\n");
+	}
+	/* zte_drv_usb_ctrl */
+	pthread_t zte_drv_usb_ctrl_thread_tid;
+
+	if (0 != strcmp(argv[2], "amt")) { //³äµç»òÕý³£¿ª»úģʽ
+		char LanEnable[10] = {0};
+		/* at_ctl */
+		pthread_t at_ctl_thread_tid;
+		pthread_create(&at_ctl_thread_tid, NULL, (void *)at_ctl_entry, argv[1]);
+		/* rtc_service */
+		pthread_t rtc_service_thread_tid;
+		pthread_create(&rtc_service_thread_tid, NULL, (void *)rtc_service_entry, NULL);
+		/* zte_mainctrl */
+		pthread_t zte_mainctrl_thread_tid;
+		pthread_create(&zte_mainctrl_thread_tid, NULL, (void *)zte_mainctrl_entry, argv[1]);
+			
+		/* zte_audio_res_ctrl */
+		pthread_t zte_audio_res_ctrl_thread_tid;
+		pthread_create(&zte_audio_res_ctrl_thread_tid, NULL, (void *)zte_audio_res_ctrl_entry, NULL);
+	
+		cfg_get_item("LanEnable", LanEnable, sizeof(LanEnable));
+		if(atoi(LanEnable) == 1) { //mifiÐÎ̬
+			/* zte_mmi */
+			pthread_t zte_mmi_thread_tid;
+			pthread_create(&zte_mmi_thread_tid, NULL, (void *)zte_mmi_entry, argv[1]);
+		}	
+		
+		//if(0 != strcmp(argv[1], "2")){
+			pthread_create(&zte_drv_usb_ctrl_thread_tid, NULL, (void *)zte_drv_usb_ctrl_entry, NULL);
+			
+			if(atoi(LanEnable) == 1) { //mifiÐÎ̬
+					/* zte_locknet */
+				pthread_t zte_locknet_thread_tid;
+				pthread_create(&zte_locknet_thread_tid, NULL, (void *)zte_locknet_entry, NULL);
+				/* fluxstat */
+
+								
+				pthread_t fluxstat_thread_tid;
+				pthread_create(&fluxstat_thread_tid, NULL, (void *)fluxstat_entry, NULL);
+				/* sntp */
+				pthread_t sntp_thread_tid;
+				pthread_create(&sntp_thread_tid, NULL, (void *)sntp_entry, NULL);
+				/* schedule_restart */
+				// pthread_t schedule_restart_thread_tid;
+				// pthread_create(&schedule_restart_thread_tid, NULL, (void *)schedule_restart_entry, NULL);
+				/* sd_hotplug */
+				//pthread_t sd_hotplug_thread_tid;
+				//pthread_create(&sd_hotplug_thread_tid, NULL, (void *)sd_hotplug_entry, NULL);
+				//sd_hotplug_init();
+				/* sms */
+				pthread_t sms_thread_tid;
+				pthread_create(&sms_thread_tid, NULL, (void *)sms_entry, NULL);
+				/* phonebook */
+				//NV_NEED_SUPPORT_PB
+				pthread_t phonebook_thread_tid;
+				pthread_create(&phonebook_thread_tid, NULL, (void *)phonebook_entry, NULL);
+
+				/* wifi_manager */
+				pthread_t wlan_thread_tid;
+				pthread_create(&wlan_thread_tid, NULL, (void *)wlan_entry, NULL);
+
+				//you.chen@20250708 temp support switch card by Analog Switch IC -- begin
+				//pthread_t sim_thread_tid;
+				//pthread_create(&sim_thread_tid, NULL, (void *)sim_detect_entry, NULL);
+				//pthread_detach(sim_thread_tid);
+				//you.chen@20250708 temp support switch card by Analog Switch IC -- end
+				
+			}	
+#ifndef FOTA_DISABLE
+			/* fota_dm */
+			// pthread_t fota_dm_thread_tid;
+			// pthread_create(&fota_dm_thread_tid, NULL, (void *)fota_dm_entry, NULL);			
+#endif
+/*		}else{
+			pthread_create(&zte_drv_usb_ctrl_thread_tid, NULL, (void *)zte_drv_usb_ctrl_entry, "poweroff_charger");
+		}*/
+
+		
+		/* zte_watchdog */
+		pthread_t zte_watchdog_thread_tid;
+		pthread_create(&zte_watchdog_thread_tid, NULL, (void *)zte_watchdog_entry, NULL);
+	}
+	else
+	{
+		pthread_create(&zte_drv_usb_ctrl_thread_tid, NULL, (void *)zte_drv_usb_ctrl_entry, NULL);
+	}
+
+
+	while(1)
+	{
+		sleep(20);
+		//printf("zte app test -1 \n");
+	}
+
+	return 0;
+}
+
diff --git a/lynq/R305/R305E/ap/app/zte_webui/js/ext/set_aic8800.js b/lynq/R305/R305E/ap/app/zte_webui/js/ext/set_aic8800.js
new file mode 100755
index 0000000..fd75edf
--- /dev/null
+++ b/lynq/R305/R305E/ap/app/zte_webui/js/ext/set_aic8800.js
@@ -0,0 +1,74 @@
+define(function () {

+    var config = {

+        WEBUI_TITLE: 'Mobiletek 4G CPE',

+        PRODUCT_TYPE: 'CPE', // ²úÆ·ÀàÐÍUFI¡¢CPE

+        HAS_BLACK_AND_WHITE_FILTER: true, //ÊÇ·ñÖ§³ÖºÚ°×Ãûµ¥

+        AP_STATION_SUPPORT: false,

+        MAX_STATION_NUMBER: 8,

+        STATION_BLOCK_SUPPORT: true, // ÒÑÁ¬½ÓÉ豸ÊÇ·ñÖ§³ÖBlock¹¦ÄÜ

+        HAS_MULTI_SSID: false, //¶àssid¹¦ÄÜ

+        WIFI_BANDWIDTH_SUPPORT_40MHZ: true, //Ƶ´ø¿í¶ÈÊÇ·ñÖ§³Ö40MHZ,reltekоƬ֧³Ö

+        WIFI_BANDWIDTH_SUPPORT: true,

+        WIFI_BAND_SUPPORT: true,

+        SD_CARD_SUPPORT: false, //ÊÇ·ñÖ§³ÖSD¿¨

+        DDNS_SUPPORT: false, //DDNS

+        NETWORK_UNLOCK_SUPPORT: true,

+        NETWORK_MODES : [ {

+            name : '802.11 b/g/n/ax',

+            value : '6'

+        } ],

+        WIFI_SUPPORT_QR_CODE: false,

+        HAS_PHONEBOOK: false,

+        HAS_BATTERY: true, //ÊÇ·ñÓÐµç³Ø

+		FAST_BOOT_SUPPORT: false, //ÊÇ·ñÖ§³Ö¿ìËÙ¿ª»ú

+        TURN_OFF_SUPPORT: true, //ÊÇ·ñÖ§³Ö¹Ø»ú

+		WIFI_SLEEP_SUPPORT: true, // ÊÇ·ñÖ§³ÖwifiÐÝÃß

+        HAS_USSD: false, // ÊÇ·ñÖ§³ÖUSSD

+	HAS_URL: true, // 是否支持URL过滤

+        //station¼ÓÃÜģʽ

+        AUTH_MODES_ALL: [{

+                name: 'NO ENCRYPTION',

+                value: 'OPEN'

+            }, {

+                name: 'SHARED',

+                value: 'SHARED'

+            }, {

+                name: 'WPA-PSK',

+                value: 'WPAPSK'

+            }, {

+                name: 'WPA2-PSK',

+                value: 'WPA2PSK'

+            }, {

+                name: 'WPA-PSK/WPA2-PSK',

+                value: 'WPAPSKWPA2PSK'

+            }, {

+                name: 'WPA3-Personal',

+                value: 'WPA3Personal'

+            }, {

+                name: 'WPA2(AES)/WPA3-Personal',

+                value: 'WPA2WPA3'

+            }

+        ],

+        AUTO_MODES: [{

+                name: 'Automatic',

+                value: 'NETWORK_auto'

+            }, {

+                name: '4G Only',

+                value: 'Only_LTE'

+            }, {

+                name: '3G Only',

+                value: 'Only_WCDMA'

+            }

+        ],

+        WIFI_SLEEP_MODES: [{

+                name: 'turn off',

+                value: '1'

+            }, {

+                name: 'sleep',

+                value: '0'

+            }

+        ]

+    };

+

+    return config;

+});

diff --git a/lynq/R305/R305E/ap/app/zte_webui/subpg/adm_others.html b/lynq/R305/R305E/ap/app/zte_webui/subpg/adm_others.html
new file mode 100755
index 0000000..beca5b2
--- /dev/null
+++ b/lynq/R305/R305E/ap/app/zte_webui/subpg/adm_others.html
@@ -0,0 +1,249 @@
+<div id="innerContainer">

+    <div class="row header-row">

+        <div class="col-xs-1">

+            <a href="#main">

+                <img alt="" src="pic/direct-back.png">

+            </a>

+        </div>

+        <div class="col-xs-11">

+            <div class="form-title">

+                <h1 data-trans='advanced_settings'></h1>

+            </div>

+        </div>

+    </div>

+    <div class="row">

+        <div class="col-xs-2">

+		    <div class="nav_right">

+		    <ul>

+				<li><a href="#wlan_sleep" data-trans="sleep_mode"></a></li>

+				<li><a href="#route_set" data-trans="router_setting"></a></li>

+				<li><a href="#filter_main" data-trans="firewall"></a></li>

+				<li data-bind="visible:hasUpdateCheck"><a href="#fota" data-trans="update_settings"></a></li>

+				<!-- <li data-bind="visible:hasUssd"><a href="#usat" data-trans="USSD"></a></li> -->

+				<li data-bind="visible:hasDdns"><a href="#dynamic_dns" data-trans="DDNS"></a></li>      

+				<li class="active"><a href="#more" data-trans="others"></a></li>

+			</ul>

+			</div>

+		</div>

+        <div class="col-xs-10">

+        <form id="frmRestoreReset">

+            <div class="form-body">

+                <h3 data-trans="others_restart_reset" class="form-title"></h3>

+				<div class="row form-group">

+                    <div data-trans="others_note_info" class="col-xs-12"></div>

+                </div>

+                <div class="row form-group">				    

+                    <div class="col-xs-12 align-right">

+                        <input data-trans="restart_button" data-bind="click: restart" type="button" class="btn btn-primary margin-right-20"/>

+                        <input data-trans="restore_button" data-bind="visible: currentUserInChildGroup() == false, click: restore" type="button" class="btn btn-primary margin-right-20"/>

+                    </div>

+                </div>

+            </div>

+        </form>

+

+		<!-- add by qumengjia for schedule restart start -->

+		<form id="frmScheduleRestart" style="display:none">

+			<div class="form-body">

+				<h3 data-trans="restart_schedule" class="form-title"></h3>

+				<div class="row form-group">

+					<label data-trans="enable_reboot_switch" class="col-xs-4 side-right"></label>

+					<div class="col-xs-8">

+						<div class="row">

+							<div class="col-xs-3">

+								<input id="restartEnable" data-bind="checked: scheduleSetting" type="radio" value="1"/>

+								<label data-trans="enable" for="restartEnable"></label>

+							</div>

+							<div class="col-xs-3">

+								<input id="restartDidable" data-bind="checked: scheduleSetting" type="radio" value="0"/>

+								<label data-trans="disable" for="restartDidable"></label>

+							</div>

+						</div>

+					</div>

+				</div>

+				<div data-bind='visible: scheduleSetting() == "1"' class="row form-group">

+					<label class="col-xs-4 side-right" data-trans='restart_schedule_time'></label>

+					<div class="col-xs-8">

+						<label data-trans="everyday" style="display:inline-block; width:auto; padding-right:0"></label>

+						<select id="restartHour" data-bind="options: scr_hours, value: scheduleHour, optionsText: 'text', optionsValue: 'value'" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px" class="form-control"></select> 

+						<label data-trans="hour" for="restartHour" style="display:inline-block; width:auto; padding-right:0"></label>

+						<select id="restartMinute" data-bind="options: scr_minutes, value: scheduleMinute, optionsText: 'text', optionsValue: 'value'" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px" class="form-control"></select> 

+						<label data-trans="minute" for="restartMinute" style="display:inline-block; width:auto; padding-right:0"></label>

+					</div>

+				</div>

+				<div class="form-buttons">

+					<input data-bind="click:scheduleRestart" data-trans="apply" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>

+				</div>

+			</div>

+		</form>

+		<!-- add by qumengjia for schedule restart end -->

+

+        <form id="frmtrunOffDevice" data-bind="visible: turnOffSupport">

+            <div class="form-body">

+                <h3 data-trans="others_turn_off" class="form-title"></h3>

+                <div class="row form-group">

+                    <div class="col-xs-12 align-right">

+                        <input data-bind="click: turnoff" data-trans="turnoff_button" type="button" class="btn btn-primary margin-right-20"/>

+                    </div>

+                </div>

+            </div>

+        </form>

+		

+        <form data-bind="visible: fastbootSupport">

+            <div class="form-body">

+                <h3 class="form-title" data-trans="fastboot_setting"></h3>

+                <div class="row form-group">

+                    <label data-trans="fastboot_setting" class="col-xs-4 side-right"></label>

+                    <div class="col-xs-8">

+                        <div class="row">

+                            <div class="col-xs-3">

+                                <input id="fastEnable" name="fastboot" data-bind="checked: fastbootSetting, enable: fastbootEnableFlag" type="radio" value="1"/>

+                                <label data-trans="enable" for="fastEnable"></label>

+                            </div>

+                            <div class="col-xs-3">

+                                <input id="fastDisable" name="fastboot" data-bind="checked: fastbootSetting, enable: fastbootEnableFlag" type="radio" value="0"/>

+                                <label data-trans="disable" for="fastDisable"></label>

+                            </div>

+                        </div>

+                    </div>

+                </div>

+                <div class="row form-group">

+                    <div class="col-xs-12" data-trans="fastboot_note"></div>

+                </div>

+                <div class="row form-group">

+                    <div class="col-xs-12 align-right">

+                        <input data-bind="click: saveFastBoot, enable: fastbootEnableFlag" data-trans="apply" type="button" class="btn btn-primary margin-right-20"/>

+                    </div>

+                </div>

+            </div>

+        </form>

+

+		

+		<form id="sntpForm" data-bind="visible: SNTPSupport">

+			<div class="form-body">

+				<h3 class="form-title">SNTP</h3>

+				<div class="content">

+					<div class="row form-group">

+						<label class="col-xs-4 side-right" data-trans='local_current_time'></label>

+						<div class="col-xs-8">

+							<span class="span3" data-bind="text: localTime"></span>

+							<span>&nbsp;</span>

+							<span id="weekday" data-bind="text: day"></span>

+						</div>

+					</div>

+					<div class="row form-group">

+						<label class="col-xs-4 side-right" data-trans='time_set_mode' for="sntpSetTimeMode"></label>

+						<div class="col-xs-4">

+							<select id="sntpSetTimeMode" class="form-control" data-transid="time_set_time" data-bind="options: timeSetModes, value: currentMode, optionsText: transOption('time_set_time'), optionsValue: 'value', event:{change: changeSetTimeMode}"></select>

+						</div>					

+					</div>

+					<div id="manualSetTime" data-bind="visible: isManualSetTime">

+						<div class="row form-group">

+							<label class="col-xs-4 side-right" data-trans='time_set_time_manual'></label>							

+						

+							<div class="col-xs-8">

+									<select id="manualYear" data-bind="options: years, value: currentYear, optionsText: 'text', optionsValue: 'value', event:{change: initDateList}" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px"  class="form-control"></select> 

+								    <label data-trans="year" for="manualYear" style="display:inline-block; width:auto; padding-right:0"></label>

+								

+								    <select id="manualMonth" data-bind="options: months, value: currentMonth, optionsText: 'text', optionsValue: 'value', event: {change: initDateList}" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px" class="form-control"></select> 

+								    <label data-trans="month" for="manualMonth" style="display:inline-block; width:auto; padding-right:0"></label>

+								

+									<select id="manualDate" data-bind="options: dates, value: currentDate, optionsText: 'text', optionsValue: 'value'" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px" class="form-control"></select> 

+								    <label data-trans="date" for="manualDate" style="display:inline-block; width:auto; padding-right:0"></label>

+								

+									<select id="manualHour" data-bind="options: hours, value: currentHour, optionsText: 'text', optionsValue: 'value'" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px" class="form-control"></select> 

+								    <label data-trans="hour" for="manualHour" style="display:inline-block; width:auto; padding-right:0"></label>

+								

+									<select id="manualMinute" data-bind="options: minutes, value: currentMinute, optionsText: 'text', optionsValue: 'value'" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px" class="form-control"></select> 

+									<label data-trans="minute" for="manualMinute" style="display:inline-block; width:auto; padding-right:0"></label>

+							</div>

+                        </div>						

+					</div>

+					<div id="autoSntpTime" data-bind="visible: isAutoSntpTime">

+						<div id="sntp_server0" class="row form-group">

+							<label data-trans='stnp_server1' for="sntp_server1_select" class="col-xs-4 side-right"></label>

+							<div class="col-xs-4">

+								<select id="sntp_server1_select" data-bind="options: serverList, value: currentServer0, optionsText: 'text', optionsValue: 'value', event: {change: changeServerSelect}" class="form-control"></select>

+							</div>

+							<div class="col-xs-4">

+							    <input id="sntp_other_server0" name="sntp_other_server0" data-bind="value:customServer0, visible:isOther0" type="text" class="required form-control"/>

+							</div>

+						</div>

+						<div id="sntp_server1" class="row form-group">

+							<label class="col-xs-4 side-right" data-trans='stnp_server2' for="stnp_server2_select"></label>

+							<div class="col-xs-4">

+								<select id="stnp_server2_select" data-bind="options: serverList, value: currentServer1, optionsText: 'text', optionsValue: 'value', event: {change: changeServerSelect}" class="form-control"></select>

+	                        </div>

+							<div class="col-xs-4">						

+    							<input id="sntp_other_server1" name="sntp_other_server1"  data-bind="value:customServer1, visible:isOther1" type="text" class="required form-control"/>

+							</div>

+						</div>

+						<div id="sntp_server2" class="row form-group">

+							<label data-trans='stnp_server3' for="stnp_server3_select" class="col-xs-4 side-right"></label>

+							<div class="col-xs-4">

+								<select id="stnp_server3_select" class="form-control" data-bind="options: serverList, value: currentServer2, optionsText: 'text', optionsValue: 'value', event: {change: changeServerSelect}"></select>

+							</div>

+							<div class="col-xs-4">

+								<input id="sntp_other_server2" name="sntp_other_server2" data-bind="value:customServer2, visible:isOther2" type="text" class="required form-control"/>

+							</div>

+						</div>

+						<div class="row form-group">

+							<label data-trans='time_zone' for="time_zone_select" class="col-xs-4 side-right"></label>

+							<div class="col-xs-4">

+								<select id="time_zone_select" data-bind="options: timeZones, value: currentTimeZone, optionsText: transOption('time_zone'), optionsValue: 'value'" data-transid="time_zone" class="form-control"></select>

+							</div>

+						</div>

+	

+					</div>		

+				</div>

+				<div class="form-buttons">

+					<input data-bind="" data-trans="apply" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>

+				</div>

+			</div>

+		</form>

+

+		<!-- add by qumengjia for ping diagnostics start -->

+		<form id="frmPingDiagnostics">

+			<div class="form-body">

+				<h3 data-trans="ping_diagnostics" class="form-title"></h3>

+				<div class="content">

+					<div class="row form-group">

+						<label data-trans="ping_times" for="txtPingTimes" class="col-xs-4 side-right"></label>

+						<div class="col-xs-3">

+							<select id="restartHour" data-bind="options: src_times, value: pingTimes, optionsText: 'text', optionsValue: 'value'" style="display:inline-block; width:167.5px; padding-right:5px; padding-left:5px" class="form-control"></select> 

+							<!-- <input id="txtPingTimes" maxlength="15" type="text" class="required form-control"/> -->

+						</div>

+					</div>

+					<div class="row form-group">

+						<label data-trans="ping_url" for="txtPingURL" class="col-xs-4 side-right"></label>

+						<div class="col-xs-3">

+							<input id="txtPingURL" name="txtPingURL" data-bind="value: pingURL" type="text" class="required form-control"/>

+							<!-- <input id="txtPingURL" maxlength="15" type="text" class="required form-control"/> -->

+						</div>

+					</div>

+					<div class="row form-group">

+						<textarea id="fileContent" readonly  data-bind="value: pingResult" style="width: 760px; height: 190px; border-radius: 6px;" class="col-xs-4 side-right"></textarea>

+					</div>	

+				</div>

+				<div class="form-buttons">

+					<input data-bind="click:pingStart" data-trans="ping_start" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>

+					<input data-bind="click:pingClear" data-trans="ping_clear" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>

+					<!-- <input data-trans="ping_start" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/> -->

+					<!-- <input data-trans="ping_end" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/> -->

+				</div>

+			</div>

+		</form>

+		<!-- add by qumengjia for schedule ping diagnostics end -->

+		

+        <div class="form-body">

+            <div class="content margin-top-20 line-height-30">

+                <div class="row">

+                    <a href="#pin_mode">

+                        <div data-trans="pin_management" class="col-xs-3 arrow-right">

+                        </div>

+                    </a>

+                </div>

+            </div>

+        </div>

+    </div>

+</div>

+</div>
\ No newline at end of file
diff --git a/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/config/normal/config_app.mk b/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/config/normal/config_app.mk
new file mode 100755
index 0000000..0ba669a
--- /dev/null
+++ b/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/config/normal/config_app.mk
@@ -0,0 +1,94 @@
+

+zte_app := busybox

+

+ifeq ($(USE_FOTA),yes)

+zte_app += busybox_recovery fota_upi

+endif

+

+zte_app += fs_check zte_log_agent\

+			dnsmasq \

+			Script \

+			zte_amt \

+			zte_webui clatd at_tool cgi

+

+#yes only when klocwork static analysis 

+ifneq ($(KW_SKIP),yes)

+zte_app += iproute2 iptables c-ares

+endif

+

+ifneq ($(CONFIG_WIFI_FUNCTION)), )

+ifeq ($(findstring sta,$(CONFIG_WIFI_FUNCTION)), sta)

+ifneq ($(KW_SKIP),yes)

+ifneq ($(MK_SDK_VERSION),yes)

+ifeq ($(CONFIG_WIFI_MODULE), ssv6x5x)

+#zte_app += wpa_supplicant-2.6

+endif

+ifeq ($(CONFIG_WIFI_MODULE), aic8800)

+zte_app += wpa_supplicant-2.10

+endif

+endif

+endif

+endif

+

+ifeq ($(findstring ap,$(CONFIG_WIFI_FUNCTION)), ap)

+

+ifeq ($(CONFIG_WIFI_MODULE), xr819)

+ifneq ($(KW_SKIP),yes)

+ifneq ($(MK_SDK_VERSION),yes)

+zte_app += hostapd-2.6

+endif

+endif

+endif

+

+ifeq ($(CONFIG_WIFI_MODULE), ssv6x5x)

+ifneq ($(KW_SKIP),yes)

+ifneq ($(MK_SDK_VERSION),yes)

+zte_app += hostapd-2.6

+endif

+endif

+endif

+

+ifeq ($(CONFIG_WIFI_MODULE), aic8800)

+ifneq ($(KW_SKIP),yes)

+ifneq ($(MK_SDK_VERSION),yes)

+zte_app += hostapd-2.10

+endif

+endif

+endif

+

+endif

+

+#zte_app += wlan

+endif

+

+ifeq ($(CONFIG_USE_WEBUI),yes)

+zte_app += goahead

+endif

+zte_app += zte_ufi

+ifneq ($(MK_SDK_VERSION),yes)

+zte_app += cfg_tool zte_arp_proxy zte_ipv6_addr_conver zte_ipv6_slaac zte_ndp

+ifneq ($(KW_SKIP),yes)

+zte_app += zte_volte adb dhcp6 radvd-2.14

+endif

+endif

+

+

+zte_app += dmp-test

+

+#for app/zte_mainctrl&Script

+export CONFIG_USER_ZTE_APP=y

+

+#for app/iptables

+export CONFIG_USER_IPTABLES_IPTABLES=y

+export CONFIG_USER_IPTABLES_IP6TABLES=y

+

+#for app/iproute2

+export CONFIG_USER_IPROUTE2_TC_TC=y

+export CONFIG_USER_IPROUTE2_IP_RTACCT=y

+export CONFIG_USER_IPROUTE2_IP_IFCFG=y

+export CONFIG_USER_IPROUTE2_IP_IP=y

+export CONFIG_USER_IPROUTE2_IP_ROUTEF=y

+export CONFIG_USER_IPROUTE2_IP_ROUTEL=y

+export CONFIG_USER_IPROUTE2_IP_RTMON=y

+

+export CONFIG_USER_FOTA_OPEN_SOURCE=n

diff --git a/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/config/normal/config_lib.mk b/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/config/normal/config_lib.mk
new file mode 100755
index 0000000..2e67852
--- /dev/null
+++ b/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/config/normal/config_lib.mk
@@ -0,0 +1,33 @@
+

+zte_lib := libsoftap \

+libatutils libatext libcpnv libamt libkey

+

+ifeq ($(USE_FOTA),yes)

+zte_lib += libzte_dmapp

+endif

+

+#yes only  when klocwork static analysis 

+ifneq ($(KW_SKIP),yes)

+zte_lib += libsqlite libssl libnl libcurl

+

+ifeq ($(USE_FOTA),yes)

+zte_lib += liblzma

+endif

+

+endif

+

+ifneq ($(CONFIG_WIFI_MODULE),)

+zte_lib += libwlan_interface

+endif

+

+ifneq ($(MK_SDK_VERSION),yes)

+zte_lib += libsoft_timer libnvram libzte_pbm

+

+ifeq ($(USE_FOTA),yes)

+zte_lib += libdmgr libupi

+endif

+endif

+

+ifeq ($(USE_MIXDATA_SUPPORT),yes)

+zte_lib += libaudiomix

+endif

diff --git a/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc/rc b/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc/rc
new file mode 100755
index 0000000..a489fdf
--- /dev/null
+++ b/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc/rc
@@ -0,0 +1,305 @@
+#!/bin/sh
+
+/bin/mount -t proc proc /proc
+
+echo "Starting mdevd..."
+/bin/mount -t tmpfs mdev /dev
+/bin/mount -t sysfs sysfs /sys
+echo /sbin/mdev > /proc/sys/kernel/hotplug
+#/sbin/mdev -s
+
+
+/bin/mount   -t  tmpfs   tmpfs    /tmp
+mkdir /dev/pts
+#mkdir /dev/shm
+/bin/mount   -t  devpts  devpts   /dev/pts
+#/bin/mount   -t  tmpfs   tmpfs    /dev/shm
+/bin/mount   -t  debugfs none     /sys/kernel/debug
+#mount -t jffs2 -o ro mtd:nvrofs /mnt/nvrofs
+mount -t jffs2 -o ro mtd:imagefs /mnt/imagefs
+#mount -t jffs2 mtd:userdata /mnt/userdata
+mdev -s
+fs_check "normal"
+
+#insmod /lib/cpko/cpko.ko
+
+###############zram#################
+echo 80 > /proc/sys/vm/swappiness
+echo 12582912 > /sys/block/zram0/disksize
+mkswap /dev/zram0
+swapon /dev/zram0
+
+#cat /etc/motd
+mkdir -p /mnt/userdata/cache /mnt/userdata/etc_rw /mnt/userdata/var
+echo 1 > /proc/sys/kernel/sysentry
+
+ln -s /tmp /tmp/local
+ln -s /tmp /tmp/tmp
+
+mkdir -p /tmp/mnt
+
+#####sunquan start
+mkdir -p /var/local/tmp/ppp/status
+mkdir -p /var/local/tmp/ppp/peers
+#####sunquan end
+
+mkdir -p /var/run
+mkdir -p /var/log
+mkdir -p /var/db
+mkdir -p /var/ct/tmp
+
+############TZ Support##############
+if [ ! -e /etc_rw/TZ ];then
+    cp /etc/TZ /etc_rw/TZ
+fi
+
+#echo off > /sys/kernel/debug/kmemleak
+echo 32768 > /proc/sys/kernel/msgmnb
+#####sunquan start
+ifconfig lo 127.0.0.1 up
+#####sunquan end
+
+# insmod drivers
+#KVER=`uname -r | cut -f 1 -d '-'`
+KVER=`uname -r`
+
+#####sunquan start
+mknod /dev/myioctl   c 222 0
+#####sunquan end
+
+MODULE_PATH=/lib/modules/$KVER/net
+
+#####sunquan start
+#insert ipt modules
+if [ -f $MODULE_PATH/nf_conntrack_rtsp.ko ]; then
+	insmod $MODULE_PATH/nf_conntrack_rtsp.ko
+fi
+if [ -f $MODULE_PATH/nf_nat_rtsp.ko ]; then
+	insmod $MODULE_PATH/nf_nat_rtsp.ko
+fi
+if [ -f $MODULE_PATH/ipt_classify.ko ]; then
+	insmod $MODULE_PATH/ipt_classify.ko
+fi
+if [ -f $MODULE_PATH/xt_webstr.ko ]; then
+	insmod $MODULE_PATH/xt_webstr.ko
+fi
+#####sunquan end
+
+SOUND_PATH=/lib/modules/$KVER/kernel/sound
+#insert sound modules
+#snd-soc-core.ko depends on regmap-i2c.ko
+if [ -f /lib/modules/$KVER/kernel/drivers/base/regmap/regmap-i2c.ko ]; then
+	insmod /lib/modules/$KVER/kernel/drivers/base/regmap/regmap-i2c.ko
+fi
+if [ -f $SOUND_PATH/soundcore.ko ]; then
+	insmod $SOUND_PATH/soundcore.ko
+fi
+if [ -f $SOUND_PATH/core/snd.ko ]; then
+	insmod $SOUND_PATH/core/snd.ko
+fi
+if [ -f $SOUND_PATH/core/snd-timer.ko ]; then
+	insmod $SOUND_PATH/core/snd-timer.ko
+fi
+if [ -f $SOUND_PATH/core/snd-page-alloc.ko ]; then
+	insmod $SOUND_PATH/core/snd-page-alloc.ko
+fi
+if [ -f $SOUND_PATH/core/snd-pcm.ko ]; then
+	insmod $SOUND_PATH/core/snd-pcm.ko
+fi
+if [ -f $SOUND_PATH/soc/snd-soc-core.ko ]; then
+	insmod $SOUND_PATH/soc/snd-soc-core.ko
+fi
+if [ -f $SOUND_PATH/soc/codecs/snd-soc-tlv320aic31XX.ko ]; then
+	insmod $SOUND_PATH/soc/codecs/snd-soc-tlv320aic31XX.ko
+fi
+if [ -f $SOUND_PATH/soc/sanechips/snd-soc-zx29-i2s.ko ]; then
+	insmod $SOUND_PATH/soc/sanechips/snd-soc-zx29-i2s.ko
+fi
+if [ -f $SOUND_PATH/soc/sanechips/snd-soc-zx29-pcm.ko ]; then
+	insmod $SOUND_PATH/soc/sanechips/snd-soc-zx29-pcm.ko
+fi
+if [ -f $SOUND_PATH/soc/sanechips/snd-soc-zx297520v3-ti3100.ko ]; then
+	insmod $SOUND_PATH/soc/sanechips/snd-soc-zx297520v3-ti3100.ko
+fi
+
+##### for app core dump start
+#ulimit -c unlimited 
+#mkdir -p /cache/pid-core-dumps
+#echo /cache/pid-core-dumps/core.%e > /proc/sys/kernel/core_pattern
+##### for app core dump end
+
+echo 2048 > /proc/sys/vm/min_free_kbytes
+echo 2 > /proc/sys/vm/min_free_order_shift
+
+#nvserver &
+
+cmdline=$(cat /proc/cmdline)
+result=$(echo $cmdline | grep "bootmode=")
+if [[ "$result" != "" ]]; then
+ bootmode=${cmdline##*bootmode=}
+ bootmode=${bootmode%% *}
+else
+ bootmode="0"
+fi
+bootreason="${cmdline##*boot_reason=}"
+bootreason=${bootreason%% *}
+
+#nvserver &
+echo 0 > /etc_rw/wifiStatus
+echo 0 > /etc_rw/wpsStatus
+echo F > /etc_rw/staStatus
+echo 0 > /etc_rw/qrStatus
+echo 0 > /etc_rw/wpsdisplayStatus
+zte_ufi $bootreason $bootmode &
+nv set bootreason=$bootreason
+#echo 1 >/sys/dwc_usb/usbconfig/usbPlug
+
+
+if [[ $bootmode == "amt" ]]; then
+ nv set ver_mode=0
+#zte_usbCfgMng &
+zte_log_agent &
+
+ zte_amt -p 10027 &
+ 
+ 
+adbd &
+
+ exit 0
+fi
+modetype=$(nv getro usb_modetype)
+nv set ver_mode=1
+
+
+#####sunquan start
+#syslogd -O /syslogd.log -l 2 -s 1024 &
+sysctl -w net.unix.max_dgram_qlen=5000
+#syslogd -l 2 -s 10240 -f /etc/syslog.conf &
+#####sunquan end
+
+#zte_locknet &
+#at_ctl $bootreason 2>&1 1>/dev/null &
+
+zte_volte_main &
+
+#zte_drvComMng &
+#rtc-service &
+
+bootflag=$(nv get LanEnable)
+
+if [[ $bootreason == "10" ]]; then
+ nv set ver_mode=2
+fi
+
+if [[ $bootflag == "1" ]]; then
+if [[ $bootreason == "2" ]]; then
+ #zte_mmi poweroff_charger &
+# zte_usbCfgMng poweroff_charger &
+# zte_mainctrl poweroff_charger &
+ #zte_watchdog &
+ if [[ $modetype != "user" ]]; then
+adbd &
+fi
+ #zte_log_agent &
+ exit 0
+fi
+fi
+
+#zte_usbCfgMng &
+
+#if [[ $bootflag == "1" ]]; then
+#zte_mmi &
+#fi
+
+echo /sbin/modprobe -d /lib/modules/$KVER > /proc/sys/kernel/modprobe
+
+#####sunquan start
+echo 2 > /proc/sys/net/ipv6/conf/default/accept_dad
+echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
+#####sunquan end
+
+# start the page cache/kmem cache cleanup timer in the kernel
+echo 1 > /proc/sys/vm/drop_caches
+
+#####sunquan start
+# Change default NAT policy of UDP sessions, per Win7 Logo
+# requirement for Xbox-Live. The defaut session timeout on
+# linux 3.4.5 was 30 seconds. Win7 logo requires at least
+# 70.
+echo 120 > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout
+
+# treat reset close session as fin close session, set same timeout
+# this is required to pass CDRouter NAT timeout test case.
+echo 120 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close
+
+# add this to support up to 20 PPTP tunnel
+echo 40 > /proc/sys/net/netfilter/nf_conntrack_expect_max
+#####sunquan end
+
+echo 0 > /proc/sys/kernel/panic
+echo 1 > /proc/sys/kernel/panic_on_oops
+echo 2 > /proc/sys/vm/panic_on_oom
+
+#add for adbd
+chmod a+rw /dev/android_adb /dev/ptmx
+chmod 640  /etc/shadow
+#mkdir -p /system/bin
+#ln -s /bin/busybox /system/bin/sh
+
+# apps start
+#internet.sh
+#zte_mainctrl &
+
+#if [[ $bootflag == "1" ]]; then
+# wifiÒª»ùÓÚÄÚÍø×öÅäÖ㬱ØÐëÆô¶¯ÔÚÄÚÍøºóÃæ
+#wifi_manager &
+#fi
+
+zte_log_agent &
+
+#zte_hotplug &
+
+#zte_watchdog &
+
+if [[ $bootflag == "1" ]]; then
+#fluxstat &
+#sntp &
+goahead &
+dongle_dmp &
+#sd_hotplug &
+#ccapp &
+#sms &
+#phonebook &
+fi
+
+if [[ $modetype != "user" ]]; then
+	use_network_adb=$(nv get use_network_adb)
+	if echo "$use_network_adb" | grep -q "network"; then
+		nv set service.adb.tcp.port=5555
+		adbd tcp:5555 &
+	else
+		adbd &
+	fi
+fi
+#mode_test&
+
+echo "Starting FOTA apps......!!"
+#/sbin/start_update_app.sh &
+
+if [[ $bootflag == "1" ]]; then
+#/usr/sbin/telnetd -p 4719 &
+/sbin/start_telnetd.sh &
+fi
+
+# for debug
+netdog_init_set.sh
+#chmod +x /sbin/app_monitor.sh
+#app_monitor.sh open
+
+echo 0 > /proc/sys/kernel/hung_task_timeout_secs
+rm -rf /etc_rw/udhcpd*.pid
+sh /sbin/rm_dev.sh
+echo 1800 > /sys/module/net_ext_modul/parameters/skb_num_limit
+echo 700 > /sys/module/net_ext_modul/parameters/skb_max_panic
+echo 2000 > /proc/sys/net/nf_conntrack_max
+#echo "ufiwakelock" >/sys/power/wake_lock
diff --git a/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_user b/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_user
new file mode 100755
index 0000000..a19258d
--- /dev/null
+++ b/lynq/R305/R305E/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_user
@@ -0,0 +1,490 @@
+apn_auto_config=CMCC($)cmnet($)manual($)*99#($)pap($)($)($)IP($)auto($)($)auto($)($)
+APN_config0=Default($)Default($)manual($)($)($)($)($)IP($)auto($)($)auto($)($)
+APN_config1=
+APN_config2=
+APN_config3=
+APN_config4=
+APN_config5=
+APN_config6=
+APN_config7=
+APN_config8=
+APN_config9=
+apn_index=0
+apn_mode=auto
+at_snap_flag=3
+at_wifi_mac=0
+auto_apn_index=0
+cid_reserved=0
+clear_pb_when_restore=no
+clear_sms_when_restore=no
+default_apn=3gnet
+ipv6_APN_config1=
+ipv6_APN_config2=
+ipv6_APN_config3=
+ipv6_APN_config4=
+ipv6_APN_config5=
+ipv6_APN_config6=
+ipv6_APN_config7=
+ipv6_APN_config8=
+ipv6_APN_config9=
+m_profile_name=Internux
+need_init_modem=yes
+net_select=NETWORK_auto
+pdp_type=IP
+ppp_apn=
+max_reconnect_time=3000000
+pppd_auth=noauth
+ppp_auth_mode=none
+ppp_passwd=
+ppp_pdp_type=
+ppp_username=
+ipv6_ppp_auth_mode=none
+ipv6_ppp_passwd=
+ipv6_ppp_username=
+pre_mode=
+prefer_dns_manual=0.0.0.0
+standby_dns_manual=0.0.0.0
+wan_apn=internet
+wan_dial=
+cta_test=0
+safecare_enbale=0
+safecare_hostname=mob.3gcare.cn
+safecare_registed_imei=
+safecare_registed_iccid=
+safecare_contimestart1=
+safecare_contimestart2=
+safecare_contimestart3=
+safecare_contimestop1=
+safecare_contimestop2=
+safecare_contimestop3=
+safecare_contimeinterval=
+safecare_mobsite=http://mob.3gcare.cn
+safecare_chatsite=
+safecare_platno=
+safecare_mobilenumber=
+safecare_version=
+ethwan_dns_mode=auto
+pswan_dns_mode=auto
+wifiwan_dns_mode=auto
+ethwan_ipv6_dns_mode=auto
+wifiwan_ipv6_dns_mode=auto
+pswan_ipv6_dns_mode=auto
+admin_Password=admin
+psw_changed=1
+alg_ftp_enable=0
+alg_sip_enable=0
+blc_wan_auto_mode=AUTO_PPP
+blc_wan_mode=AUTO
+br_ipchange_flag=
+br_node=usblan0
+clat_fake_subnet=192.0.168.0
+clat_frag_collect_timeout=300
+clat_local_mapping_timeout=300
+clat_mapping_record_timeout=3000
+clat_query_server_port=1464
+DefaultFirewallPolicy=0
+dev_coexist=0
+dhcpDns=192.168.0.1
+dhcpEnabled=1
+dhcpEnd=192.168.0.200
+dhcpLease_hour=24
+dhcpStart=192.168.0.100
+dhcpv6stateEnabled=0
+dhcpv6statelessEnabled=1
+dhcpv6statePdEnabled=0
+dial_mode=auto_dial
+DMZEnable=0
+DMZIPAddress=
+dns_extern=
+ipv6_dns_extern=
+eth_act_type=
+eth_type=wan
+ethlan=
+ethwan=
+ethwan_dialmode=auto
+ethwan_mode=auto
+ethwan_priority=3
+fast_usb=usblan0
+fastnat_level=2
+IPPortFilterEnable=0
+IPPortFilterRules_0=
+IPPortFilterRules_1=
+IPPortFilterRules_2=
+IPPortFilterRules_3=
+IPPortFilterRules_4=
+IPPortFilterRules_5=
+IPPortFilterRules_6=
+IPPortFilterRules_7=
+IPPortFilterRules_8=
+IPPortFilterRules_9=
+IPPortFilterRulesv6_0=
+IPPortFilterRulesv6_1=
+IPPortFilterRulesv6_2=
+IPPortFilterRulesv6_3=
+IPPortFilterRulesv6_4=
+IPPortFilterRulesv6_5=
+IPPortFilterRulesv6_6=
+IPPortFilterRulesv6_7=
+IPPortFilterRulesv6_8=
+IPPortFilterRulesv6_9=
+ipv4_fake_subnet=192.0.0.0
+ipv6_fake_subnet=2016::1
+lan_ipaddr=192.168.0.1
+lan_name=br0
+lan_netmask=255.255.255.0
+LanEnable=1
+mac_ip_list=
+mgmt_quicken_power_on=0
+mtu=1400
+natenable=
+dosenable=0
+need_jilian=1
+nofast_port=21+22+23+25+53+67+68+69+110+115+123+443+500+1352+1723+1990+1991+1992+1993+1994+1995+1996+1997+1998+4500+5060
+nv_save_interval=300
+path_conf=/etc_rw
+path_ro=/etc_ro
+path_log=/var/log/
+path_sh=/sbin
+path_tmp=/tmp
+permit_gw=
+permit_ip6=
+permit_nm=255.255.255.0
+PortForwardEnable=0
+PortForwardRules_0=
+PortForwardRules_1=
+PortForwardRules_2=
+PortForwardRules_3=
+PortForwardRules_4=
+PortForwardRules_5=
+PortForwardRules_6=
+PortForwardRules_7=
+PortForwardRules_8=
+PortForwardRules_9=
+PortMapEnable=0
+PortMapRules_0=
+PortMapRules_1=
+PortMapRules_2=
+PortMapRules_3=
+PortMapRules_4=
+PortMapRules_5=
+PortMapRules_6=
+PortMapRules_7=
+PortMapRules_8=
+PortMapRules_9=
+ppp_name=ppp0
+pppoe_password=
+pppoe_username=
+ps_ext1=usblan0
+ps_ext2=usblan0
+ps_ext3=usblan0
+ps_ext4=usblan0
+ps_ext5=usblan0
+ps_ext6=usblan0
+ps_ext7=usblan0
+ps_ext8=usblan0
+pswan=wan
+pswan_mode=pdp
+pswan_priority=1
+RemoteManagement=0
+rj45_plugstate_path=/sys/kernel/eth_debug/eth_state
+rootdev_friendlyname=MBB-UPnP
+rootdev_manufacturer=LYNQ
+rootdev_modeldes=MBB
+rootdev_modelname=MBB
+os_url=http://m.home
+serialnumber=See-IMEI
+static_dhcp_enable=1
+static_ethwan_gw=
+static_ethwan_ip=
+static_ethwan_nm=
+static_ethwan_pridns=
+static_ethwan_secdns=
+static_wifiwan_ipaddr=
+static_wifiwan_netmask=
+static_wifiwan_gateway=
+wifiwan_pridns_manual=
+wifiwan_secdns_manual=
+static_wan_gateway=0.0.0.0
+static_wan_ipaddr=0.0.0.0
+static_wan_netmask=0.0.0.0
+static_wan_primary_dns=0.0.0.0
+static_wan_secondary_dns=0.0.0.0
+swlanstr=sw0_lan
+swvlan=sw0
+swwanstr=sw0_wan
+tc_downlink=
+tc_uplink=
+tc_local=1310720
+tc_enable=0
+time_limited=
+time_to_2000_when_restore=yes
+upnpEnabled=0
+usblan=usblan0
+WANPingFilter=0
+websURLFilters=
+wifiwan_priority=2
+DDNS=
+DDNS_Enable=0
+DDNSAccount=
+DDNSPassword=
+DDNSProvider=
+iccidPrevious=
+imeiPrevious=
+registerFlag=0
+registeredRound=
+secsEveryRound=1
+secsEveryTime=1
+regver=4.0
+meid=
+uetype=1
+LocalDomain=m.home
+data_volume_alert_percent=
+data_volume_limit_size=
+data_volume_limit_switch=0
+data_volume_limit_unit=0
+flux_day_total=0
+flux_last_day=
+flux_last_month=
+flux_last_year=
+flux_month_total=0
+flux_set_day=
+flux_set_month=
+flux_set_year=
+monthly_rx_bytes=0
+monthly_time=0
+monthly_tx_bytes=0
+MonthlyConTime_Last=
+dm_nextpollingtime=
+fota_allowRoamingUpdate=0
+fota_dl_pkg_size=0
+fota_update_flag=
+fota_updateIntervalDay=15
+fota_upgrade_result=
+fota_version_delta_id=
+fota_version_delta_url=
+fota_pkg_total_size=0
+fota_version_file_size=
+fota_version_md5sum=
+fota_version_name=
+fota_need_user_confirm_update=0
+fota_need_user_confirm_download=1
+fota_version_force_install=0
+polling_nexttime=0
+pwron_auto_check=1
+fota_updateMode=1
+fota_test_mode=0
+fota_pkg_downloaded=0
+fota_upgrade_result_internal=
+mmi_battery_voltage_line=3090+3330+3502+3548+3571+3605+3616+3639+3651+3674+3696+3731+3754+3799+3834+3880+3960+4017+4074+4131+4200
+mmi_fast_poweron=
+mmi_led_mode=sleep_mode
+mmi_new_sms_blink_flag=0
+mmi_show_pagetab=page1+page2+page3
+mmi_showmode=led
+mmi_task_tab=net_task+wifi_task+key_task+battery_task+ctrl_task
+mmi_temp_voltage_line=411+587+1327+1583
+mmi_use_protect=temp_protect+discharge_protect
+mmi_use_wifi_usernum=1
+leak_full_panic=
+leak_list_max=
+leak_set_flag=
+monitor_period=300
+netinf_flag=
+skb_all_max=
+skb_data_max=
+skb_fromcp_max=
+skb_max_fail=
+skb_max_panic=
+skb_size_max=
+skb_tocp_max=
+sntp_default_ip=134.170.185.211;131.107.13.100;202.112.31.197;202.112.29.82;202.112.10.36;ntp.gwadar.cn;ntp-sz.chl.la;dns.sjtu.edu.cn;news.neu.edu.cn;dns1.synet.edu.cn;time-nw.nist.gov;pool.ntp.org;europe.pool.ntp.org
+sntp_dst_enable=0
+sntp_other_server0=
+sntp_other_server1=
+sntp_other_server2=
+sntp_server0=time-nw.nist.gov
+sntp_server1=pool.ntp.org
+sntp_server2=europe.pool.ntp.org
+sntp_sync_select_interval_time=30
+sntp_time_set_mode=auto
+sntp_timezone=CST-8
+sntp_timezone_index=0
+assert_errno=
+comm_logsize=16384
+cr_inner_version=V1.0.0B08
+cr_version=V1.0.0B01
+hw_version=PCBMF29S2V1.0.0
+TURNOFF_CHR_NUM=
+watchdog_app=0
+HTTP_SHARE_FILE=
+HTTP_SHARE_STATUS=
+HTTP_SHARE_WR_AUTH=readWrite
+ipv6_pdp_type=
+ipv6_wan_apn=
+Language=zh-cn
+manual_time_day=
+manual_time_hour=
+manual_time_minute=
+manual_time_month=
+manual_time_second=
+manual_time_year=
+sdcard_mode_option=0
+AccessControlList0=
+AccessPolicy0=0
+ACL_mode=0
+AuthMode=WPA2PSK
+Channel=0
+wifi_acs_num=8
+closeEnable=0
+closeTime=
+CountryCode=CN
+DefaultKeyID=0
+DtimPeriod=1
+EncrypType=AES
+EX_APLIST=
+EX_APLIST1=
+EX_AuthMode=
+EX_DefaultKeyID=
+EX_EncrypType=
+EX_mac=
+EX_SSID1=AAA
+EX_WEPKEY=
+EX_wifi_profile=
+EX_WPAPSK1=
+FragThreshold=2346
+HideSSID=0
+HT_GI=1
+Key1Str1=12345
+Key2Str1=
+Key3Str1=
+Key4Str1=
+Key1Type=1
+Key2Type=
+Key3Type=
+Key4Type=
+m_AuthMode=WPA2PSK
+m_DefaultKeyID=
+m_EncrypType=AES
+m_HideSSID=0
+m_Key1Str1=1234
+m_Key2Str1=
+m_Key3Str1=
+m_Key4Str1=
+m_Key1Type=1
+m_Key2Type=
+m_Key3Type=
+m_Key4Type=
+m_MAX_Access_num=0
+m_NoForwarding=
+m_show_qrcode_flag=0
+m_SSID=AAA
+m_ssid_enable=0
+m_wapiType=
+m_wifi_mac=901D45692A5C
+m_WPAPSK1_aes=
+m_WPAPSK1_encode=MTIzNDU2Nzg=
+MAX_Access_num=8
+MAX_Access_num_bak=8
+NoForwarding=0
+openEnable=0
+openTime=
+operater_ap=
+RekeyInterval=3600
+RTSThreshold=2347
+show_qrcode_flag=0
+Sleep_interval=-1
+Sleep_ratio=0.6
+ssid_write_flag=0
+SSID1=AAA
+tsw_sleep_time_hour=
+tsw_sleep_time_min=
+tsw_wake_time_hour=
+tsw_wake_time_min=
+wapiType=
+wifi_force_40m=1
+wifi_11n_cap=1
+wifi_band=b
+wifi_coverage=long_mode
+wifi_hostname_black_list=
+wifi_hostname_white_list=
+wifi_mac=901D45692A5B
+wifi_mac_black_list=
+wifi_mac_white_list=
+wifi_profile=
+wifi_profile1=
+wifi_profile2=
+wifi_profile3=
+wifi_profile4=
+wifi_profile5=
+wifi_profile6=
+wifi_profile7=
+wifi_profile8=
+wifi_profile9=
+wifi_profile_num=0
+wifi_root_dir=
+wifi_sta_connection=0
+wifi_wps_index=1
+wifiEnabled=1
+wifilan=wlan0-va0
+wifilan2=wlan0-va1
+mac_wlan0=
+wifi_ft=
+wifi_coupling=
+WirelessMode=6
+WPAPSK1_aes=
+WPAPSK1_encode=MTIzNDU2Nzg=
+wps_mode=PBC
+WPS_SSID=
+WscModeOption=0
+monitor_apps=
+at_netdog=
+autorspchannel_list=all
+soctime_switch=0
+uart_control=0
+uart_ctstrs_enable=
+special_cmd_list=$MYNETREAD
+##为入网入库芯片认证版本添加 begin
+atcmd_stream1=AT+ZSET="w_instrument",1
+atcmd_stream2=AT^SYSCONFIG=24,0,1,2
+atcmd_stream3=AT+ZSET="csiiot",2
+atcmd_stream4=AT+ZSET="dlparaflg",0
+atcmd_stream5=AT+ZSET="MTNET_TEST",1;AT+ZGAAT=0;AT+ZSET="CMCC_TEST",1;AT+ZSET="LTE_INFO",6348;AT+ZSET="VOICE_SUPPORT",1;AT+ZSET="FDD_RELEASE",7;AT+ZSET="LTE_RELEASE",1;AT+ZSET="UE_PS_RELEASE",5;AT+ZSET="QOS_RELEASE",4;AT+ZSET="TEBS_THRESHOLD",0
+atcmd_stream6=AT+ZSET="MTNET_TEST",1;AT+ZGAAT=0;AT+ZSET="LTE_INFO",6348;AT+ZSET="VOICE_SUPPORT",1;AT+ZSET="FDD_RELEASE",7;AT+ZSET="LTE_RELEASE",1;AT+ZSET="UE_PS_RELEASE",5;AT+ZSET="QOS_RELEASE",4;AT+ZSET="TEBS_THRESHOLD",0;AT+ZSET="IGNORE_SECURITY_SUPPORT",0;AT+ZSET="csifilter",0;AT+ZSET="csrhobandflg",0;AT+ZSET="dlparaflg",1;AT+ZSET="csiup",1;AT+ZSET="rfparaflag",0,0,1,0;AT+ZSET="csiiot",1;AT+ZSET="EXCEPT_RESET",0;AT+ZSET="ISIM_SUPPORT",1;AT+ZIMSTEST="MTNET_TEST",1;AT+ZSET="MANUAL_SEARCH",0
+##为入网入库芯片认证版本添加 end
+#for audio ctrl 
+audio_priority=0123
+customer_type=sdk_min
+debug_mode=
+cpIndCmdList=+ZMMI+ZURDY+ZUSLOT+ZICCID^MODE+ZPBIC+ZMSRI+CREG+CEREG+CGREG+CGEV
+zephyr_filter_ip=
+wait_timeout=2
+sntp_sync_time=1
+sntp_static_server0=time-nw.nist.gov
+sntp_static_server1=pool.ntp.org
+sntp_static_server2=europe.pool.ntp.org
+vsim_bin_path=/mnt/userdata/vSim.bin
+webv6_enable=
+lan_ipv6addr=fe80::1
+sms_vp=
+at_select_timeout=
+mtnet_test_mcc=
+at_atv=
+at_atq=
+at_at_d=
+base_ip_on_mac=0
+quick_dial=1
+xlat_enable=0
+#for schedule_restart start
+schedule_restart_enable=0
+schedule_restart_option=everyday
+schedule_restart_day=0
+schedule_restart_hour=0
+schedule_restart_minute=0
+schedule_restart_weekday=Mon
+#for schedule_restart end
+wifi_sleep_mode=0
+ping_repetition_count=4
+ping_diag_addr=
+ping_result=
+use_network_adb=usb
+SSIDbak=
diff --git a/lynq/R305/R305E/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_ufi_mini.c b/lynq/R305/R305E/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_ufi_mini.c
new file mode 100755
index 0000000..e50a093
--- /dev/null
+++ b/lynq/R305/R305E/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_ufi_mini.c
@@ -0,0 +1,612 @@
+/*********************************************************************
+ Copyright 2016 by	ZIXC Corporation.
+*
+* FileName::	zx297520.c
+* File Mark:
+* Description:
+* Others:
+* Version:	 v1.0
+* Author:	zhouqi
+* Date:	  2014-1-15
+
+* History 1:
+*	  Date:
+*	  Version:
+*	  Author:
+*	  Modification:
+* History 2:
+**********************************************************************/
+
+#include <common.h>
+#include <errno.h>
+#include <nand.h>
+#include <asm/arch/nand.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/uart.h>
+#include <asm/arch/lsp_crpm.h>
+#include <power.h>
+#include <partition_table.h>
+
+#include <mmc.h>
+#include <dwmmc.h>
+#include <boot_mode.h>
+#include <load_image.h>
+#include <zx234290.h>
+#include <charge.h>
+//#include <led.h>
+#include <lcd.h>
+#include <peripheral.h>
+#include "board.h"
+
+#include <drvs_gpio.h>
+
+#include <asm/arch/gmac.h>
+#include <command.h>
+#include <version.h>
+#include <secure_verify.h>
+#include <asm/arch/efuse.h>
+
+#include "cmd_downver.h"
+#include <../drivers/dma/zx29_dma.h>
+
+#include <watchdog.h>
+#include <linux/mtd/partitions.h>
+
+
+#define RET_BOOT_READY		1
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if	TIME_DEBUG
+#define time_debug_reset(fmt)	fmt = get_timer(0)
+#define time_debug_printf(fmt, val)	printf(fmt ,get_timer(val))
+#else
+#define time_debug_reset(fmt)
+#define time_debug_printf(fmt, val)
+#endif	/* TIME_DEBUG */
+
+typedef struct {
+	int 	(*Init)(void);
+	char	func_name[20];
+}sys_init_func_t;
+
+extern boot_reason_t g_boot_reason;
+extern uint32_t g_gmac_init_flag;
+extern uint32_t g_gmac_init_overtime;
+extern unsigned char g_ddr_size_flag;
+
+unsigned int g_uiDebugLevel = UBOOT_NOTICE;
+unsigned int g_sys_kernel_sdram_size = CONFIG_SYS_SDRAM32_A9_SIZE;
+
+
+#ifndef CFG_TEMP_ADDR
+#define CFG_TEMP_ADDR	0x22000000
+#endif
+
+#define reg32(addr)			(*(volatile unsigned long *)(addr))
+
+#define UDELAY_PARAM_1SEC	(100000/3)
+
+/* DebugLevel - Controlled at compile time
+ * UBOOT_ERR	-> Noncritical error conditions.
+ * UBOOT_WARN	-> Warning conditions that should be taken care of.
+ * UBOOT_NOTICE -> Normal, but significant events.
+ * UBOOT_DBG	-> Informational messages that require no action.
+ * UBOOT_INFO	-> Debugging messages, output if the developer enabled debugging.
+ */
+//unsigned int g_uiDebugLevel = UBOOT_NOTICE;
+extern int copy_ddr_allbin(void);
+
+/*******************************************************************************
+ * Function:	board_init
+ * Description:
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+int board_init(void)
+{
+	return 0;
+}
+
+/*******************************************************************************
+ * Function:	dram_init_banksize
+ * Description:
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+void dram_init_banksize(void)
+{
+	gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+	gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
+}
+
+/*******************************************************************************
+ * Function:	dram_init
+ * Description:
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+int dram_init(void)
+{
+	gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
+				PHYS_SDRAM_1_SIZE);
+
+	return 0;
+}
+
+/*******************************************************************************
+ * Function:	checkboard
+ * Description:
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+int checkboard(void)
+{
+#ifdef CONFIG_DISPLAY_BOARDINFO
+	printf("Board: ZX297520V3\n");
+#endif
+
+	return 0;
+}
+
+void clear_iram(uint32_t addr, uint32_t len)
+{
+	uint32_t i = 0;
+	for(i = addr; i < addr + len; i+=4)
+	{
+		writel(0x0, i);
+	}
+}
+
+void clear_tmp_buf(void)
+{
+	clear_iram(CONFIG_SYS_SDRAM_TEMP_BASE, 0x800);
+}
+
+/*
+ * EC: 616000510470
+ */
+static int mdl_poweron(void)
+{
+	pmu_pull_on_ps_hold();
+
+    zDrvGpio_PullUpDown(GPIO119, 0);
+    zDrvGpio_SetFunc(GPIO119,GPIO119_GPIO119);
+    zDrvGpio_SetDirection(GPIO119,GPIO_OUT);
+    zDrvGpio_SetOutputValue(GPIO119,GPIO_LOW);
+
+    zDrvGpio_PullUpDown(GPIO120, 0);
+    //gpio_set_reuse(PS_HOLD_PIN, 0);
+    zDrvGpio_SetFunc(GPIO120,GPIO120_GPIO120);
+    zDrvGpio_SetDirection(GPIO120,GPIO_OUT);
+    zDrvGpio_SetOutputValue(GPIO120,GPIO_LOW);
+
+	
+    zDrvGpio_PullUpDown(GPIO27, 0);
+    zDrvGpio_SetFunc(GPIO27,GPIO27_GPIO27);
+    zDrvGpio_SetDirection(GPIO27,GPIO_OUT);
+    zDrvGpio_SetOutputValue(GPIO27,GPIO_LOW);
+
+    //you.chen@20250708 temp support switch card by Analog Switch IC -- begin
+    zDrvGpio_PullUpDown(GPIO49, GPIO_PULL_UP);
+    zDrvGpio_SetFunc(GPIO49,GPIO49_GPIO49);
+    zDrvGpio_SetDirection(GPIO49,GPIO_IN);
+
+    zDrvGpio_PullUpDown(GPIO35, 0);
+    zDrvGpio_SetFunc(GPIO35,GPIO35_GPIO35);
+    zDrvGpio_SetDirection(GPIO35, GPIO_OUT);
+
+    if (GPIO_LOW == zDrvGpio_GetInputValue(GPIO49))
+    {
+	    zDrvGpio_SetOutputValue(GPIO35,GPIO_HIGH);
+    }
+    else
+    {
+	    zDrvGpio_SetOutputValue(GPIO35, GPIO_LOW);
+    }
+    //you.chen@20250708 temp support switch card by Analog Switch IC -- end
+
+    zDrvGpio_PullUpDown(GPIO52, GPIO_PULL_DOWN);
+    zDrvGpio_SetFunc(GPIO52,GPIO52_GPIO52);
+    zDrvGpio_SetDirection(GPIO52,GPIO_IN);
+
+    zDrvGpio_PullUpDown(GPIO125, GPIO_PULL_DOWN);
+    zDrvGpio_SetFunc(GPIO125,GPIO125_GPIO125);
+    zDrvGpio_SetDirection(GPIO125,GPIO_IN);
+
+    zDrvGpio_PullUpDown(GPIO36, 0);
+    zDrvGpio_SetFunc(GPIO36,GPIO36_GPIO36);
+    zDrvGpio_SetDirection(GPIO36, GPIO_OUT);
+    if (GPIO_HIGH == zDrvGpio_GetInputValue(GPIO125))
+    {
+	    zDrvGpio_SetOutputValue(GPIO36,GPIO_HIGH);
+    }
+    else
+    {
+	    zDrvGpio_SetOutputValue(GPIO36, GPIO_LOW);
+    }
+
+    zDrvGpio_PullUpDown(GPIO121, 0);
+    zDrvGpio_SetFunc(GPIO121,GPIO121_GPIO121);
+    zDrvGpio_SetDirection(GPIO121,GPIO_OUT);
+    zDrvGpio_SetOutputValue(GPIO121,GPIO_HIGH);
+	return 0;
+}
+
+static int gmac_download_init(void)
+{
+	int ret = 0;
+
+	get_gmac_init_flag();
+	BOOT_PRINTF(UBOOT_DBG, "get_gmac_init_flag = 0x%x, read_gmac_init_flag = 0x%x.\n", get_gmac_init_flag(), read_gmac_init_flag());
+	if(1 == read_gmac_init_flag())
+	{
+		BOOT_PRINTF(UBOOT_NOTICE, "gmac init overtime[%ds].....$$$$$$$$$$$$$$\n", read_gmac_init_overtime());
+
+		puts("Net:	");
+		eth_initialize(gd->bd);
+
+		if (run_command ("downver allbins", 0) >= 0)
+		{
+			ret = copy_ddr_allbin();
+			if(ret != 0)
+			{
+				BOOT_PRINTF(UBOOT_ERR, "net load write from ddr to nand FAILED !!!\n");
+			}
+		}
+		else
+		{
+			BOOT_PRINTF(UBOOT_ERR, "run_command downver allbins FAILED !!!\n");
+		}
+	}
+
+	return 0;
+}
+
+static int test_env_entry(void)
+{
+	/* Ó²¼þ²âÊÔ */
+#if CONFIG_HARDWARE_TEST
+	hardware_test();
+#endif
+
+#if CONFIG_MUTUAL_DEBUG	//ÖÃ1Ö®ºó¾Í¿ÉÒÔ½øÈëUBoot¿ØÖÆÌ¨ÃüÁîÐÐ
+	for (;;)
+	{
+		main_loop();
+	}
+#endif
+
+	return 0;
+}
+
+static int boot_reason_init(void)
+{
+	int ret = 0;
+	unsigned int amt_flag = 0;
+	unsigned int key_times = 0;
+	unsigned int *poweron_type = (unsigned int *)POWERON_TYPE_ADDR;	 //ÁÙʱʹÓÃ
+
+	BOOT_PRINTF(UBOOT_DBG, "Normal mode.\n");
+
+	amt_flag = readl(POWERON_TYPE_ADDR);
+	BOOT_PRINTF(UBOOT_NOTICE, "VALUE = 0x%x!\n", amt_flag);
+	if(amt_flag == AMT_MODE_FLAG)
+	{
+		BOOT_PRINTF(UBOOT_NOTICE, "AMT VALUE = AMT_MODE_FLAG!\n");
+		g_boot_reason = RB_AMT;
+	}
+	else
+	{
+		ret = get_boot_reason();
+		if(ret != 0)
+		{
+			BOOT_PRINTF(UBOOT_ERR, "get boot reason ERROR !!!\n");
+			/* TBD: Error Return. */
+		}
+	}
+
+	if(read_fota_update_flag() == FOTA_RECOVERY)
+	{
+		*poweron_type = POWER_ON_FOTA;
+	}
+	else if(read_fota_update_flag() == FOTA_LOCALUPDATE)
+	{
+		*poweron_type = POWER_ON_LOCALUPDATE;
+	}
+	else if(g_boot_reason == RB_AMT)
+	{
+		*poweron_type = POWER_ON_AMT;
+	}
+	else if(g_boot_reason == RB_PRODUCTION)
+	{
+		*poweron_type = POWER_ON_PRODUCTION;
+	}
+	else if((g_boot_reason & 0xF0) == ZX234290_WDT_RST_FLAG)
+	{
+		*poweron_type = g_boot_reason & 0x0F;
+	}
+	else if(g_boot_reason == RB_RESET_NOMAL)
+	{
+		*poweron_type = POWER_ON_NORMAL;
+	}
+	else if(g_boot_reason == RB_RTC)
+	{
+		*poweron_type = POWER_ON_RTC; //POWER_ON_NORMAL;
+	}
+	else if(g_boot_reason == RB_RESET_EXCEPT)
+	{
+		*poweron_type = POWER_ON_EXCEPTRESET;
+	}
+	else if(g_boot_reason == RB_POWER_BOOST_IN)
+	{
+		*poweron_type = POWER_ON_BOOST_IN;
+	}
+	else if(g_boot_reason == RB_RESET_ALARM)
+	{
+		*poweron_type = POWER_ON_NORMAL;
+	}
+	else
+	{
+		*poweron_type = POWER_ON_NORMAL;
+	}
+	BOOT_PRINTF(UBOOT_NOTICE, "poweron_type=0x%x.\n", *poweron_type);
+	zx234290_write_flag(ZX234290_WDT_RST_FLAG | *poweron_type);
+
+	return 0;
+}
+
+static int boot_prepare(void)
+{
+
+#if 1
+	zx234290_set_softon(1);
+#else
+	zx234290_set_softon(0);
+	pmu_pull_off_ps_hold();
+#endif
+
+	return 0;
+}
+
+static int boot_entry(void)
+{
+	int ret = 0;
+	unsigned int poweron_type = reg32(POWERON_TYPE_ADDR);	 //ÁÙʱʹÓÃ
+
+	g_ddr_size_flag = CHIP_DDR_IS_32M;
+
+	switch (poweron_type) {
+
+	case POWER_ON_LOCALUPDATE:
+		break;
+	case POWER_ON_FOTA:
+		BOOT_PRINTF(UBOOT_NOTICE, "Fota entry!\n");
+		if(g_ddr_size_flag == CHIP_DDR_IS_32M)
+		{
+			g_sys_kernel_sdram_size = CONFIG_SYS_SDRAM32_RECOVERY_A9_SIZE;
+		}
+		else if(g_ddr_size_flag == CHIP_DDR_IS_64M)
+		{
+			g_sys_kernel_sdram_size = CONFIG_SYS_SDRAM64_RECOVERY_A9_SIZE;
+		}
+		else if(g_ddr_size_flag == CHIP_DDR_IS_128M)
+		{
+			g_sys_kernel_sdram_size = CONFIG_SYS_SDRAM128_RECOVERY_A9_SIZE;
+		}		
+		else
+		{
+			g_sys_kernel_sdram_size = CONFIG_SYS_SDRAM256_RECOVERY_A9_SIZE;
+		}
+		
+		ret = fs_load_arm_image_linux(ARM_RECOVERY_USERDATA_IMAGE);	/*FOTA-UPDATE*/
+		break;
+	default:
+		BOOT_PRINTF(UBOOT_NOTICE, "Normal entry!\n");
+		if(g_ddr_size_flag == CHIP_DDR_IS_32M)
+		{
+			g_sys_kernel_sdram_size = CONFIG_SYS_SDRAM32_A9_SIZE;
+		}
+		else if(g_ddr_size_flag == CHIP_DDR_IS_64M)
+
+		{
+			g_sys_kernel_sdram_size = CONFIG_SYS_SDRAM64_A9_SIZE;
+		}
+		else if(g_ddr_size_flag == CHIP_DDR_IS_128M)
+		{
+			g_sys_kernel_sdram_size = CONFIG_SYS_SDRAM128_A9_SIZE;
+		}
+		else
+		{
+			g_sys_kernel_sdram_size = CONFIG_SYS_SDRAM256_A9_SIZE;
+		}
+		ret = fs_load_m0_image();
+		ret += fs_load_zsp_image();
+		ret += fs_load_arm_image_linux(ARM_APP_IMAGE);
+		break;
+	}
+
+#if VERSION_RELEASE
+	if( ret != 0 )
+	{
+		BOOT_PRINTF(UBOOT_ERR, "load images ERROR !!!\n");
+	}
+#endif
+
+	return 0;
+}
+
+static const sys_init_func_t uboot_init_func_tbl[] =
+{
+	{mdl_poweron,			"pull on pshold"},
+	{wdt_get_reboot_reason,	"wdt_reboot"},
+	{dma_init,				"dma"},
+	{i2c_init,				"i2c"},
+	{peripheral_init,		"peri"},
+	{nand_init,				"nand"},
+	{partition_init,		"partition"},	
+	{gmac_download_init,	"gmac"},
+	{test_env_entry,		"test"},
+	{efuse_init,			"efuse"},
+	{nvrw_flag_init,		"nvrw_flag"},
+	{boot_reason_init,		"boot_reason"},
+	{wdt_init,				"wdt"},
+	{boot_prepare,			"boot_prepare"},
+	{NULL,					{}}
+};
+
+static const sys_init_func_t tboot_init_func_tbl[] =
+{
+	{wdt_get_reboot_reason,	"wdt_reboot"},
+	{dma_init,				"dma"},
+	{i2c_init,				"i2c"},
+	{peripheral_init,		"peri"},
+	{nand_init,				"nand"},
+	{NULL,					{}}
+};
+
+int uboot_init_func(void)
+{
+	unsigned int dev_index;
+	int ret;
+
+	BOOT_PRINTF(UBOOT_NOTICE, "go into uboot init func\n");
+
+	for (dev_index = 0; (uboot_init_func_tbl[dev_index].Init != NULL); dev_index++)
+	{
+		ret = uboot_init_func_tbl[dev_index].Init();
+
+		if (ret < 0) {
+			BOOT_PRINTF(UBOOT_ERR, "uboot init %s fail, ret = %d\n",
+				uboot_init_func_tbl[dev_index].func_name, ret);
+			BUG();
+			return ret;
+		} else {
+			BOOT_PRINTF(UBOOT_NOTICE, "uboot init %s success\n",
+				uboot_init_func_tbl[dev_index].func_name);
+		}
+	}
+
+	return SUCCESS;
+}
+
+int tboot_init_func(void)
+{
+	unsigned int dev_index;
+	int ret;
+
+	BOOT_PRINTF(UBOOT_NOTICE, "go into tboot init func\n");
+
+	for (dev_index = 0; (tboot_init_func_tbl[dev_index].Init != NULL); dev_index++)
+	{
+		ret = tboot_init_func_tbl[dev_index].Init();
+		if (ret < 0) {
+			BOOT_PRINTF(UBOOT_ERR, "tboot init %s fail, ret = %d\n",
+				tboot_init_func_tbl[dev_index].func_name, ret);
+			BUG();
+			return ret;
+		} else {
+			BOOT_PRINTF(UBOOT_NOTICE, "tboot init %s success\n",
+				tboot_init_func_tbl[dev_index].func_name);
+		}
+	}
+
+	return SUCCESS;
+}
+
+#if defined(CONFIG_I2S0_TO_32K)
+void i2s_to_32k(void)
+{
+	REG32(LSP_CRPM_BASE + 0x58) = 0x01000075;
+	REG32(LSP_CRPM_BASE + 0x5C) = 0x00010319;
+	REG32(PIN_MUX_CTRL_PD_BASE) &= ~(0x3 << 15);
+	REG32(PIN_MUX_CTRL_PD_BASE) |= (0x1 << 15);
+	REG32(PAD_CTRL_AO_BASE + 0x30) |= (0x1);
+}
+#endif
+
+#if defined(CONFIG_I2S1_TO_32K)	
+void i2s_to_32k(void)
+{
+	REG32(LSP_CRPM_BASE + 0x60) = 0x01000075;
+	REG32(LSP_CRPM_BASE + 0x64) = 0x00010319;
+	REG32(PIN_MUX_CTRL_PD_BASE) &= ~(0x3 << 15);
+	REG32(PIN_MUX_CTRL_PD_BASE) |= (0x2 << 15);
+	REG32(PAD_CTRL_AO_BASE + 0x30) |= (0x1);
+}
+#endif
+
+/*******************************************************************************
+ * Function:	sys_entry
+ * Description: ϵͳÖ÷Á÷³Ì
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+void sys_entry(void)
+{
+
+	BOOT_PRINTF(UBOOT_NOTICE, "sys_entry ...\n");
+
+#if defined(CONFIG_I2S0_TO_32K) || defined(CONFIG_I2S1_TO_32K)
+		i2s_to_32k();
+#endif	
+
+	switch (get_load_mode()) {
+	case TLOAD_MODE:
+		tboot_init_func();
+		run_command("downloader", 0);
+		break;
+	case ZLOAD_MODE:
+		uboot_init_func();
+		boot_entry();
+		//clear_tmp_buf();
+		break;
+	default:
+		break;
+	}
+
+	add_partition_to_bootargs();
+	for (;;)
+	{
+		main_loop();
+	}
+
+	hang();
+	/* NOTREACHED - no way out of command loop except booting */
+}
+