[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/lib/libatext/ext_wdt_func.c b/ap/lib/libatext/ext_wdt_func.c
new file mode 100644
index 0000000..e289b5f
--- /dev/null
+++ b/ap/lib/libatext/ext_wdt_func.c
@@ -0,0 +1,180 @@
+#include "ext_regist.h"

+

+#include "NvParam_drv.h"

+#include "libcpnv.h"

+#define ZOSS_ERROR              0xffffffff

+#define ZOSS_SUCCESS            0x0

+

+/*wdt  nv  flag*/

+#define WDT_OFF 			(0x57445446) //ascii:WDTF

+#define WDT_ON 				(0x5744544F) //ascii:WDTO

+

+#define ZX_WDT_IOC_MAGIC     'W'

+

+/*ioctl cmd usd by device*/

+#define ZX_WDT_SET_INTERNAL         	_IOW(ZX_WDT_IOC_MAGIC, 1, char *)

+#define ZX_WDT_SET_WAKEUP            	_IOW(ZX_WDT_IOC_MAGIC, 2, char *)

+#define ZX_WDT_FEED_DOG            		_IOW(ZX_WDT_IOC_MAGIC, 3, char *)

+#define ZX_WDT_GET_HANDLE_TIMEOUT     	_IOWR(ZX_WDT_IOC_MAGIC, 4, char *)

+#define ZX_WDT_GET_GLOBAL_CNT       	_IOWR(ZX_WDT_IOC_MAGIC, 5, char *)

+#define ZX_WDT_GET_AP_TIMEOUT       	_IOWR(ZX_WDT_IOC_MAGIC, 6, char *)

+#define ZX_WDT_SET_AP_SWITCH      		_IOWR(ZX_WDT_IOC_MAGIC, 7, char *)

+#define ZX_WDT_SET_NV      				_IOWR(ZX_WDT_IOC_MAGIC, 8, char *)

+#define ZX_WDT_GET_NV      				_IOWR(ZX_WDT_IOC_MAGIC, 9, char *)

+#define ZX_WDT_SET_CHECK				_IOWR(ZX_WDT_IOC_MAGIC, 10, char *)

+

+#define ZX_SOFT_WDT_DEV    				"/dev/zx_soft_wdt"

+

+

+extern int zx_wdt_set_nv(BOOL nv_flag);

+extern BOOL zx_wdt_get_wdtnv_for_ctrm(void);

+//static long int wdt_fd;

+

+int wdt_act_func(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)

+{

+    char			*at_str  		= NULL;

+    unsigned long   retCode 		= ZOSS_ERROR;

+	int	    		nv_value 		= 0;

+	unsigned int wdt_nvdata = 0;

+

+	assert(at_paras!=NULL);

+	at_str = at_paras; 	

+

+	 get_at_cmd_param_int(at_str, &nv_value, &at_str);

+	 at_print(AT_DEBUG,"wdt_act_func:nv_value == %d\n", nv_value);

+	 

+	 if(0 == nv_value )

+	 {

+	 	

+	 	//ioctl(wdt_fd, ZX_WDT_SET_NV, FALSE);

+	 	wdt_nvdata=WDT_OFF;

+	 	retCode = cpnv_NvItemWrite(DRV_SYS_NV_ITEM_ADDR(wdtSwitch), (unsigned char *)(&wdt_nvdata), DRV_SYS_NV_ITEM_SIZE(wdtSwitch));

+		if(ZOSS_SUCCESS == retCode ){

+			retCode= cpnv_NvramFlush();

+		}

+

+	 }

+	 else if(1 == nv_value )

+	 {

+	 	//ioctl(wdt_fd, ZX_WDT_SET_NV, TRUE);

+	 	wdt_nvdata=WDT_ON;	

+	 	retCode = cpnv_NvItemWrite(DRV_SYS_NV_ITEM_ADDR(wdtSwitch), (unsigned char *)(&wdt_nvdata), DRV_SYS_NV_ITEM_SIZE(wdtSwitch));

+		if(ZOSS_SUCCESS == retCode ){

+			retCode= cpnv_NvramFlush();

+		}

+	 }

+	 else 

+	 {

+		 *res_msg = at_err_build(ATERR_PARAM_INVALID);

+		 *res_msglen = strlen(*res_msg);

+		 return AT_END;

+	 }

+	 

+	if (retCode == ZOSS_SUCCESS)

+	{

+		*res_msg = at_query_result_build("WDT=",at_str);

+	}

+	else

+	{

+		*res_msg = at_err_build(ATERR_PROC_FAILED); 	

+	}

+	   

+	*res_msglen = strlen(*res_msg);

+    return AT_END;

+}

+

+int wdt_get_nv_state(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)

+{

+

+	unsigned int wdt_nvdata = 0;

+    long retCode = CPNV_ERROR;

+

+	//ioctl(wdt_fd, ZX_WDT_GET_NV, &retCode);

+	

+	retCode =cpnv_NvItemRead(DRV_SYS_NV_ITEM_ADDR(wdtSwitch), (unsigned char *)(&wdt_nvdata), DRV_SYS_NV_ITEM_SIZE(wdtSwitch));

+	if(CPNV_ERROR == retCode) softap_assert("");

+	if (WDT_OFF == wdt_nvdata )

+	{

+		*res_msg = at_query_result_build("WDT","WDT OFF");

+		

+	} else if(WDT_ON== wdt_nvdata ) 

+	{

+		*res_msg = at_query_result_build("WDT","WDT ON");

+	}

+	else

+	{

+		*res_msg = at_err_build(ATERR_PROC_FAILED);

+	}

+		

+	*res_msglen = strlen(*res_msg);

+	return AT_END;

+}

+

+int wdt_set_nv_priority(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)

+{

+    char			*at_str  		= NULL;

+    unsigned long   retCode 		= ZOSS_ERROR;

+	int	    		nv_value 		= 0;

+	char strCmd[AT_CMD_MAX] = {0};

+

+	assert(at_paras!=NULL);

+	at_str = at_paras; 	

+

+	 get_at_cmd_param_int(at_str, &nv_value, &at_str);

+	 at_print(AT_DEBUG,"wdt_set_nv_priority:nv_value == %d\n", nv_value);

+	 

+	 if((nv_value > 0)&&(nv_value <= 99))//priority

+	 {

+	 	retCode = cpnv_NvItemWrite(DRV_SYS_NV_ITEM_ADDR(wdtPriority), (unsigned char *)(&nv_value), DRV_SYS_NV_ITEM_SIZE(wdtPriority));

+		if(ZOSS_SUCCESS == retCode ){

+			retCode= cpnv_NvramFlush();

+		}

+	 }

+	 else 

+	 {

+		 *res_msg = at_err_build(ATERR_PARAM_INVALID);

+		 *res_msglen = strlen(*res_msg);

+		 return AT_END;

+	 }

+	 

+	if (retCode == ZOSS_SUCCESS)

+	{

+		sprintf(strCmd,"%d", nv_value); 

+		*res_msg = at_query_result_build("WDTP=",strCmd);

+	}

+	else

+	{

+		*res_msg = at_err_build(ATERR_PROC_FAILED); 	

+	}

+	   

+	*res_msglen = strlen(*res_msg);

+    return AT_END;

+}

+

+int wdt_get_nv_priority(int at_fd,char * at_paras,void * *res_msg,int * res_msglen)

+{

+	unsigned int wdt_nvdata = 0;

+    long retCode = CPNV_ERROR;

+	char strCmd[AT_CMD_MAX] = {0};

+	

+	retCode =cpnv_NvItemRead(DRV_SYS_NV_ITEM_ADDR(wdtPriority), (unsigned char *)(&wdt_nvdata), DRV_SYS_NV_ITEM_SIZE(wdtPriority));

+	if(CPNV_ERROR == retCode) softap_assert("");

+

+	sprintf(strCmd,"%d", wdt_nvdata);

+

+	*res_msg = at_query_result_build("WDTP",strCmd);

+	*res_msglen = strlen(*res_msg);

+	return AT_END;

+}

+

+void ext_wdt_regist_init(void)

+{

+	//wdt_fd = open(ZX_SOFT_WDT_DEV, O_RDWR);

+	//ioctl(wdt_fd, ZX_WDT_SET_CHECK, FALSE);

+

+	register_serv_func2("WDT=", 0, 0, 0, wdt_act_func, NULL);

+    register_serv_func2("WDT?", 0, 0, 0,wdt_get_nv_state,NULL);

+	register_serv_func2("WDTP=", 0, 0, 0, wdt_set_nv_priority, NULL);

+    register_serv_func2("WDTP?", 0, 0, 0,wdt_get_nv_priority,NULL);

+}

+