512 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			512 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*
 | ||
|     System Usb Callback
 | ||
| 
 | ||
|     System Callback for USb Module.
 | ||
| 
 | ||
|     @file       SysUsb_Exe.c
 | ||
|     @ingroup    mIPRJSYS
 | ||
| 
 | ||
|     @note
 | ||
| 
 | ||
|     Copyright   Novatek Microelectronics Corp. 2010.  All rights reserved.
 | ||
| */
 | ||
| 
 | ||
| #include "PrjInc.h"
 | ||
| #include "GxUSB.h"
 | ||
| #include "UsbDevDef.h"
 | ||
| #include "usb2dev.h"
 | ||
| #include <stdio.h>
 | ||
| #include <stdlib.h>
 | ||
| 
 | ||
| #if HUNTING_CAMERA_MCU == ENABLE
 | ||
| #include <sf_led.h>
 | ||
| #include <sf_common.h>
 | ||
| #endif
 | ||
| 
 | ||
| #define THIS_DBGLVL         2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
 | ||
| ///////////////////////////////////////////////////////////////////////////////
 | ||
| #define __MODULE__          SysUsbExe
 | ||
| #define __DBGLVL__          ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL)
 | ||
| #define __DBGFLT__          "*" //*=All, [mark]=CustomClass
 | ||
| #include <kwrap/debug.h>
 | ||
| ///////////////////////////////////////////////////////////////////////////////
 | ||
| 
 | ||
| static char driver_path_prefix[64] = "/etc/lib/modules/4.19.91";
 | ||
| static char* usb_host_drivers[] = {
 | ||
|                 "kernel/drivers/usb/common/usb-common.ko",
 | ||
|                 "kernel/drivers/usb/core/usbcore.ko",
 | ||
|                 "kernel/drivers/usb/host/ehci-hcd.ko",
 | ||
|                 "kernel/drivers/net/mii.ko",
 | ||
|                 "kernel/drivers/net/usb/usbnet.ko",
 | ||
|                 "extra/net/GobiNet/drv_gobi_net.ko",
 | ||
|                 "kernel/drivers/net/usb/cdc_ether.ko",
 | ||
|                 "kernel/drivers/net/usb/rndis_host.ko",
 | ||
|                 "kernel/drivers/usb/serial/usbserial.ko",
 | ||
|                 "kernel/drivers/usb/serial/usb_wwan.ko",
 | ||
|                 "kernel/drivers/usb/serial/option.ko",
 | ||
|                 "kernel/drivers/usb/class/cdc-wdm.ko",
 | ||
|                 "kernel/drivers/net/usb/qmi_wwan.ko",
 | ||
|                 NULL
 | ||
| };
 | ||
| 
 | ||
| static char* usb_dev_drivers[] = {
 | ||
| 		"hdal/comm/usb2dev/nvt_usb2dev.ko",
 | ||
| 		"hdal/comm/uvcp/nvt_uvcp.ko",
 | ||
| 		NULL
 | ||
| };
 | ||
| 
 | ||
| static BOOL is_usb_host_driver_inserted = FALSE;
 | ||
| static BOOL is_usb_dev_driver_inserted = FALSE;
 | ||
| 
 | ||
| 
 | ||
| static BOOL System_WaitUsbDev(void)
 | ||
| {
 | ||
| 	int exit_code = -1;
 | ||
| 	BOOL ret;
 | ||
| 	UINT8 cnt = 0;
 | ||
| 	UINT8 timeout = 100;
 | ||
| 
 | ||
| 	do{
 | ||
| 		exit_code = system("ls /dev/nvt_usb2dev0");
 | ||
| 		if(exit_code == 0)
 | ||
| 			break;
 | ||
| 
 | ||
| 		vos_util_delay_ms(10);
 | ||
| 	} while(cnt < timeout);
 | ||
| 
 | ||
| 	if(exit_code == 0)
 | ||
| 		ret = TRUE;
 | ||
| 	else
 | ||
| 		ret = FALSE;
 | ||
| 
 | ||
| 	usb2dev_state_change();
 | ||
| 
 | ||
| 	return ret;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| static BOOL System_check_usb_host(void)
 | ||
| {
 | ||
|     char command[26] = "lsmod | grep usbcore";
 | ||
|     FILE *fp = popen(command, "r");
 | ||
|     char result[256];
 | ||
|     fgets(result, sizeof(result), fp);
 | ||
|     pclose(fp);
 | ||
|     if (result[0] == '\0') {
 | ||
|         printf("usbcore module is not loaded.\n");
 | ||
|         return FALSE;
 | ||
|     } else {
 | ||
|         printf("usbcore module is loaded.\n");
 | ||
|         return TRUE;
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| static BOOL System_InsmodUsb(BOOL isHost)
 | ||
| {
 | ||
| 	char** usb_drivers = NULL;
 | ||
| 	char* driver_path = NULL;
 | ||
| 	UINT8 cnt = 0;
 | ||
| 	char cmd[256] = {'\0'};
 | ||
| 
 | ||
| 	if(isHost){
 | ||
| 
 | ||
| 		if(is_usb_host_driver_inserted == TRUE)
 | ||
| 			return TRUE;
 | ||
|         if(System_check_usb_host() == TRUE)
 | ||
|         {
 | ||
|             is_usb_host_driver_inserted = TRUE;
 | ||
|             return TRUE;
 | ||
|         }
 | ||
| 		usb_drivers = usb_host_drivers;
 | ||
| 	}
 | ||
| 	else{
 | ||
| 
 | ||
| 		if(is_usb_dev_driver_inserted == TRUE)
 | ||
| 			return TRUE;
 | ||
|         memset(driver_path_prefix, '\0', sizeof(driver_path_prefix));
 | ||
|         snprintf(driver_path_prefix, sizeof(driver_path_prefix), "/lib/modules/4.19.91");
 | ||
| 		usb_drivers = usb_dev_drivers;
 | ||
| 	}
 | ||
| 
 | ||
| 	while(usb_drivers[cnt++])
 | ||
| 	{
 | ||
| 	}
 | ||
| 
 | ||
| 	DBG_DUMP("cnt = %lu\n", cnt);
 | ||
| 
 | ||
| 	for(int i = 0 ; i < cnt ; i++)
 | ||
| 	{
 | ||
| 		driver_path = usb_drivers[i];
 | ||
| 
 | ||
| 		if(driver_path){
 | ||
|             memset(cmd, '\0', sizeof(cmd));
 | ||
| 			snprintf(cmd, sizeof(cmd), "insmod %s/%s", driver_path_prefix, driver_path);
 | ||
| 			//DBG_DUMP("%s\n", cmd);
 | ||
|             printf("[%s:%d] %s\n", __FUNCTION__, __LINE__, cmd);
 | ||
|             system(cmd);
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	if(isHost == FALSE){
 | ||
| #if HUNTING_CAMERA_MCU == ENABLE
 | ||
|         sf_usb_mux_s(0);
 | ||
|         vos_util_delay_ms(200);
 | ||
| #endif
 | ||
| 
 | ||
| 		is_usb_dev_driver_inserted = TRUE;
 | ||
| 		return System_WaitUsbDev();
 | ||
| 	}
 | ||
| 	else{
 | ||
| #if HUNTING_CAMERA_MCU == ENABLE
 | ||
|         sf_usb_mux_s(1);
 | ||
| #endif
 | ||
| 
 | ||
| 		is_usb_host_driver_inserted = TRUE;
 | ||
| 		return TRUE;
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| static BOOL System_RmmodUsb(BOOL isHost)
 | ||
| {
 | ||
| 	char** usb_drivers = NULL;
 | ||
| 	char* driver_path = NULL;
 | ||
| 	UINT8 cnt = 0;
 | ||
| 	char cmd[256] = {'\0'};
 | ||
| 
 | ||
| 	if(isHost){
 | ||
| 
 | ||
| 		if(is_usb_host_driver_inserted == FALSE)
 | ||
| 			return TRUE;
 | ||
| 
 | ||
| 		usb_drivers = usb_host_drivers;
 | ||
| 	}
 | ||
| 	else{
 | ||
| 		if(is_usb_dev_driver_inserted == FALSE)
 | ||
| 			return TRUE;
 | ||
| 
 | ||
| 		usb_drivers = usb_dev_drivers;
 | ||
| 	}
 | ||
| 
 | ||
| 	while(usb_drivers[cnt++])
 | ||
| 	{
 | ||
| 	}
 | ||
| 
 | ||
| 	DBG_DUMP("cnt = %lu\n", cnt);
 | ||
| 
 | ||
| 	for(int i = cnt - 1 ; i >= 0 ; i--)
 | ||
| 	{
 | ||
| 		driver_path = usb_drivers[i];
 | ||
| 
 | ||
| 		if(driver_path){
 | ||
| 			snprintf(cmd, sizeof(cmd), "rmmod %s/%s", driver_path_prefix, driver_path);
 | ||
| 			DBG_DUMP("%s\n", cmd);
 | ||
| 			system(cmd);
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	if(isHost == FALSE){
 | ||
| 		is_usb_dev_driver_inserted = FALSE;
 | ||
| 	}
 | ||
| 	else{
 | ||
| 		is_usb_host_driver_inserted = FALSE;
 | ||
| 	}
 | ||
| 
 | ||
| 	return TRUE;
 | ||
| }
 | ||
| 
 | ||
| #if (USB_MODE == ENABLE)
 | ||
| 
 | ||
| //Using USB Plug-In + DOWN Key to enter to Msdc Vendor Spy Mode
 | ||
| #if (MSDCVENDOR_UPDFW==ENABLE)
 | ||
| static BOOL m_bForceMsdcNvt = TRUE;
 | ||
| #else
 | ||
| static BOOL m_bForceMsdcNvt = FALSE;
 | ||
| #endif
 | ||
| 
 | ||
| int SX_TIMER_DET_USB_ID = -1;
 | ||
| #if (USB_MODE==ENABLE)
 | ||
| static BOOL m_bVendorConnected = FALSE;
 | ||
| #endif
 | ||
| UINT32 gUsbSrc = USB_SRC_NONE;
 | ||
| 
 | ||
| void USB_CB(UINT32 event, UINT32 param1, UINT32 param2);
 | ||
| void UI_DetUSB(void);
 | ||
| 
 | ||
| #if (USBINSERT_FUNCTION == ENABLE)
 | ||
| SX_TIMER_ITEM(USB_Det, UI_DetUSB, 5, FALSE)
 | ||
| #endif
 | ||
| 
 | ||
| void System_OnUsbPreInit(void)
 | ||
| {
 | ||
| 	#if 0
 | ||
| 	if (GxSystem_GetPowerOnSource() == GX_PWRON_SRC_PWR_VBUS) {
 | ||
| 		GxUSB_Init((UINT32)Dx_GetObject(DX_CLASS_USB_EXT), TRUE);
 | ||
| 	} else {
 | ||
| 		GxUSB_Init((UINT32)Dx_GetObject(DX_CLASS_USB_EXT), FALSE);
 | ||
| 	}
 | ||
| 	#else
 | ||
| 	GxUSB_Init((UINT32)Dx_GetObject(DX_CLASS_USB_EXT), FALSE);
 | ||
| 	#endif
 | ||
| 	//Charger type setting should be invoked once prior to GxUSB_GetIsUSBPlug() which
 | ||
| 	//has been called in System_OnPowerPreInit() at the earliest time.
 | ||
| //	GxUSB_SetChargerType(FALSE);
 | ||
| }
 | ||
| 
 | ||
| void System_OnUsbInit(void)
 | ||
| {
 | ||
| 	TM_BOOT_BEGIN("usb", "init");
 | ||
| 	//PHASE-1 : Init & Open Drv or DrvExt
 | ||
| 	{
 | ||
| 		//init GxUSB module
 | ||
| 		GxUSB_RegCB(USB_CB);         //Register CB function of GxUSB
 | ||
| #if (USBINSERT_FUNCTION == ENABLE)
 | ||
| 		SX_TIMER_DET_USB_ID = SxTimer_AddItem(&Timer_USB_Det);
 | ||
| #endif
 | ||
| 	}
 | ||
| 	//PHASE-2 : Init & Open Lib or LibExt
 | ||
| 	{
 | ||
| #if (USBINSERT_FUNCTION == ENABLE)
 | ||
| 		SxTimer_SetFuncActive(SX_TIMER_DET_USB_ID, TRUE);
 | ||
| #endif
 | ||
| 	}
 | ||
| 
 | ||
| 	//force check USB connect type
 | ||
| 	if (GxUSB_GetIsUSBPlug()) {
 | ||
|         
 | ||
|         #if (HW_S530 == ENABLE) && (HUNTING_CAMERA_MCU == ENABLE)
 | ||
|         sf_sys_status_led_set(SF_LED_SYS_STATE_USB_IN);
 | ||
|         #endif
 | ||
|         
 | ||
| 		System_InsmodUsb(FALSE); /* insmod usb dev ko */
 | ||
| 		GxUSB_UpdateConnectType();
 | ||
| 		GxUSB_SetChargerType(FALSE);
 | ||
| 	}
 | ||
| 	else{
 | ||
| 		System_InsmodUsb(TRUE); /* insmod usb host ko */
 | ||
| 	}
 | ||
| 	TM_BOOT_END("usb", "init");
 | ||
| }
 | ||
| 
 | ||
| void System_OnUsbExit(void)
 | ||
| {
 | ||
| 	//PHASE-2 : Close Lib or LibExt
 | ||
| 	{
 | ||
| 	}
 | ||
| 	//PHASE-1 : Close Drv or DrvExt
 | ||
| 	{
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| /////////////////////////////////////////////////////////////////////////////
 | ||
| void UI_DetUSB(void)
 | ||
| {
 | ||
| 	if (!UI_IsForceLock()) {
 | ||
| 		GxUSB_DetConnect();
 | ||
| 	}
 | ||
| }
 | ||
| //---------------------SysUSB Public API  ----------------------------------
 | ||
| void USB_UpdateSource(void)
 | ||
| {
 | ||
| #if (USB_CHARGE_FUNCTION == ENABLE)
 | ||
| 	UINT32 ctype = GxUSB_GetConnectType();
 | ||
| 	if (ctype == USB_CONNECT_NONE) { //<2F>S<EFBFBD><53>USB
 | ||
| 		DBG_MSG("  USB Src = (None)\r\n");
 | ||
| 		gUsbSrc = USB_SRC_NONE;
 | ||
| 	} else if (ctype == USB_CONNECT_PC) { //USB<53><42><EFBFBD><EFBFBD>PC
 | ||
| 		DBG_MSG("  USB Src = PC\r\n");
 | ||
| 		gUsbSrc = USB_SRC_USB_PC;
 | ||
| 	} else if (ctype == USB_CONNECT_CHARGER) { //USB<53><42><EFBFBD>ۥR<DBA5>q<EFBFBD><71>
 | ||
| 		DBG_MSG("  USB Src = Adapter\r\n");
 | ||
| 		gUsbSrc = USB_SRC_USB_ADAPTER;
 | ||
| 	} else if (ctype == USB_CONNECT_CHARGING_PC) { //USB<53><42><EFBFBD>ۦ<EFBFBD><DBA6>j<EFBFBD>q<EFBFBD>yport<72><74>PC
 | ||
| 		DBG_MSG("  USB Src = Charging PC\r\n");
 | ||
| 		gUsbSrc = USB_SRC_USB_CHARGING_PC;
 | ||
| 	} else { //USB<53><42><EFBFBD>ۥ<EFBFBD><DBA5><EFBFBD> (<28>w<EFBFBD>g<EFBFBD>ް<EFBFBD><DEB0>L<EFBFBD>k<EFBFBD>P<EFBFBD>_)
 | ||
| 		DBG_ERR("  USB Src = Unknown?\r\n");
 | ||
| 		gUsbSrc = USB_SRC_UNKNOWN;
 | ||
| 	}
 | ||
| #else
 | ||
| 	BOOL bInsert = GxUSB_GetIsUSBPlug();
 | ||
| 	if (!bInsert) { //<2F>S<EFBFBD><53>USB
 | ||
| 		DBG_MSG("  USB Src = (None)\r\n");
 | ||
| 		gUsbSrc = USB_SRC_NONE;
 | ||
| 	} else { //USB<53><42><EFBFBD><EFBFBD>PC
 | ||
| 		DBG_MSG("  USB Src = PC\r\n");
 | ||
| 		gUsbSrc = USB_SRC_USB_PC;
 | ||
| 	}
 | ||
| #endif
 | ||
| }
 | ||
| UINT32 USB_GetSource(void)
 | ||
| {
 | ||
| 	return gUsbSrc;
 | ||
| }
 | ||
| ///////////////////////////////////////////////////////////////////////
 | ||
| //Device flow event
 | ||
| #if (USB_MODE==ENABLE)
 | ||
| static BOOL m_bACPlug = FALSE;
 | ||
| #endif
 | ||
| INT32 System_OnUsbInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
 | ||
| {
 | ||
| 	//usb plug in
 | ||
| 	DBG_IND("USB plug - begin\r\n");
 | ||
|     #if (HW_S530 == ENABLE) && (HUNTING_CAMERA_MCU == ENABLE)
 | ||
|     sf_sys_status_led_set(SF_LED_SYS_STATE_USB_IN);
 | ||
|     sf_4g_usb_remove();
 | ||
|     #endif
 | ||
| 	System_RmmodUsb(TRUE); /* rmmod usb host ko */
 | ||
| 	System_InsmodUsb(FALSE); /* insmod usb dev ko */
 | ||
|     //vos_util_delay_ms(1000);
 | ||
| 	GxUSB_SetChargerType(FALSE);
 | ||
| 
 | ||
| 	USB_UpdateSource();
 | ||
| 	Ux_PostEvent(NVTEVT_BATTERY, 0, 0);
 | ||
| #if (USB_MODE == ENABLE)
 | ||
| 	if (!USB_GetIsMsdcNvt()) {
 | ||
| 		DBG_DUMP("USBConnectType=%d\r\n", GxUSB_GetConnectType());
 | ||
| 		if ((GxUSB_GetConnectType() == USB_CONNECT_PC) || (GxUSB_GetConnectType() == USB_CONNECT_CHARGING_PC)) {
 | ||
| #if (MOVIE_UVAC_FUNC == ENABLE)
 | ||
| 			// temporarily do nothing for Movie + UVC
 | ||
| #else
 | ||
| 
 | ||
| #if HUNTING_CAMERA_MCU == ENABLE //temporally support MSDC only
 | ||
|             //vos_util_delay_ms(1000);
 | ||
| 			Ux_SendEvent(0, NVTEVT_SYSTEM_MODE, 1, PRIMARY_MODE_USBMSDC);
 | ||
| #else
 | ||
| 			Ux_SendEvent(0, NVTEVT_SYSTEM_MODE, 1, PRIMARY_MODE_USBMENU);
 | ||
| #endif
 | ||
| 			USB_PlugInSetFunc();
 | ||
| #endif
 | ||
| 		} else if (GxUSB_GetConnectType() == USB_CONNECT_CHARGER) {
 | ||
| 			if (System_GetState(SYS_STATE_CURRMODE) == PRIMARY_MODE_MOVIE) {
 | ||
| 				m_bACPlug = TRUE;
 | ||
| 				Ux_PostEvent(NVTEVT_AC_Plug, 0, 0);
 | ||
| 			}
 | ||
| 		}
 | ||
| 		m_bVendorConnected = FALSE;
 | ||
| 	} else {
 | ||
| #if (MSDCVENDOR_NVT == ENABLE)
 | ||
| 		MSDCNVTCB_OPEN Open = {0};
 | ||
| 		Open.fpUSBMakerInit = USBMakerInit_UMSD;
 | ||
| 		msdcnvt_open(&Open);
 | ||
| 		m_bVendorConnected = TRUE;
 | ||
| #endif
 | ||
| 	}
 | ||
| #elif (IPCAM_UVC_FUNC==ENABLE)
 | ||
| 	//do nothing
 | ||
| #else
 | ||
| 	{
 | ||
| #if (MSDCVENDOR_NVT == ENABLE)
 | ||
| 		MSDCNVTCB_OPEN Open = {0};
 | ||
| 		Open.fpUSBMakerInit = NULL;
 | ||
| 		msdcnvt_open(&Open);
 | ||
| #endif
 | ||
| 	}
 | ||
| #endif
 | ||
| 	DBG_IND("USB plug - end\r\n");
 | ||
| 	return NVTEVT_CONSUME;
 | ||
| }
 | ||
| 
 | ||
| INT32 System_OnUsbRemove(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
 | ||
| {
 | ||
| 	//usb unplug
 | ||
| 
 | ||
| 	DBG_IND("USB unplug - begin\r\n");
 | ||
| #if (USB_MODE==ENABLE)
 | ||
| 
 | ||
| 	if (m_bVendorConnected == FALSE) {
 | ||
| 		if (System_GetState(SYS_STATE_CURRMODE) == PRIMARY_MODE_MOVIE) {
 | ||
| 			if (m_bACPlug == TRUE) {
 | ||
| 				m_bACPlug = FALSE;
 | ||
| 				Ux_PostEvent(NVTEVT_AC_UnPlug, 0, 0);
 | ||
| 			}
 | ||
| 		}
 | ||
| 		FlowMode_OnUsbUnplug();
 | ||
| 	} else {
 | ||
| #if (MSDCVENDOR_NVT == ENABLE)
 | ||
| 		msdcnvt_close();
 | ||
| #endif
 | ||
| 		m_bVendorConnected = FALSE;
 | ||
| 	}
 | ||
| #elif (IPCAM_UVC_FUNC==ENABLE)
 | ||
| 	//do nothing
 | ||
| #else
 | ||
| 	{
 | ||
| #if (MSDCVENDOR_NVT == ENABLE)
 | ||
| 		msdcnvt_close();
 | ||
| #endif
 | ||
| 	}
 | ||
| #endif
 | ||
| 	USB_UpdateSource();
 | ||
| 	Ux_PostEvent(NVTEVT_BATTERY, 0, 0);
 | ||
| 
 | ||
| 	System_RmmodUsb(FALSE); /* rmmod usb device ko */
 | ||
| 	System_InsmodUsb(TRUE); /* insmod usb host ko */
 | ||
| 
 | ||
| 	DBG_IND("USB unplug - end\r\n");
 | ||
| 	return NVTEVT_CONSUME;
 | ||
| }
 | ||
| 
 | ||
| INT32 System_OnUsbChargeCurrent(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
 | ||
| {
 | ||
| 	UINT32 uiChargeCurrent;
 | ||
| 	DBG_IND("USB charging current(%d)\r\n", paramArray[0]);
 | ||
| 	uiChargeCurrent = paramArray[0];
 | ||
| 	switch (uiChargeCurrent) {
 | ||
| 	case USB_CHARGE_CURRENT_2P5MA:
 | ||
| #if (USB_CHARGE_FUNCTION == ENABLE)
 | ||
| 		Power_StopUSBCharge();
 | ||
| #endif
 | ||
| 		break;
 | ||
| 	case USB_CHARGE_CURRENT_100MA:
 | ||
| 		break;
 | ||
| 	case USB_CHARGE_CURRENT_500MA:
 | ||
| 	case USB_CHARGE_CURRENT_1500MA:
 | ||
| #if (USB_CHARGE_FUNCTION == ENABLE)
 | ||
| 		Power_StartUSBCharge();
 | ||
| #endif
 | ||
| 		break;
 | ||
| 	default:
 | ||
| 		break;
 | ||
| 	}
 | ||
| 
 | ||
| 	return NVTEVT_CONSUME;
 | ||
| }
 | ||
| 
 | ||
| void USB_PlugInSetFunc(void)
 | ||
| {
 | ||
| 	//GxPower_SetControl(GXPWR_CTRL_AUTOPOWEROFF_RESET, 0);
 | ||
| 	//GxPower_SetControl(GXPWR_CTRL_SLEEP_RESET, 0);
 | ||
| 	SxTimer_SetFuncActive(SX_TIMER_DET_SLEEP_ID, FALSE);
 | ||
| 	SxTimer_SetFuncActive(SX_TIMER_DET_AUTOPOWEROFF_ID, FALSE);
 | ||
| 	SxTimer_SetFuncActive(SX_TIMER_DET_MODE_ID, FALSE);
 | ||
| }
 | ||
| 
 | ||
| void USB_SetForceMsdcNvt(BOOL bEn)
 | ||
| {
 | ||
| 	m_bForceMsdcNvt = bEn;
 | ||
| }
 | ||
| 
 | ||
| BOOL USB_GetIsMsdcNvt(void)
 | ||
| {
 | ||
| 	//#NT#2016/06/03#Niven Cho -begin
 | ||
| 	//#NT#open MsdcNvt with detecting specific file
 | ||
| #if defined(MSDCVENDOR_IDENTITY_FILE)
 | ||
| 	BOOL bMsdcNvt = FALSE;
 | ||
| 	if (System_GetState(SYS_STATE_CARD)  == CARD_INSERTED) {
 | ||
| 		FST_FILE filehdl = FileSys_OpenFile(MSDCVENDOR_IDENTITY_FILE, FST_OPEN_READ);
 | ||
| 		if (filehdl != NULL) {
 | ||
| 			FileSys_CloseFile(filehdl);
 | ||
| 			bMsdcNvt = TRUE;
 | ||
| 		}
 | ||
| 	}
 | ||
| 	return (m_bForceMsdcNvt || GxKey_GetData(GXKEY_NORMAL_KEY) == FLGKEY_DOWN || bMsdcNvt);
 | ||
| #else
 | ||
| 	return (m_bForceMsdcNvt || GxKey_GetData(GXKEY_NORMAL_KEY) == FLGKEY_DOWN);
 | ||
| #endif
 | ||
| 	//#NT#2016/06/03#Niven Cho -end
 | ||
| }
 | ||
| 
 | ||
| #endif
 |