207 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #include "PrjCfg.h"
 | |
| #if(UVC_MULTIMEDIA_FUNC == ENABLE)
 | |
| #include "UsbCmdInt.h"
 | |
| #include "UIApp/WifiCmdParser/WifiCmdParser.h"
 | |
| 
 | |
| #define PRI_USBCMD                 10
 | |
| #define STKSIZE_USBCMD             4096
 | |
| #define STKSIZE_USBCMD_DOWNLOAD    2048
 | |
| 
 | |
| #define MAX_USB_CMD_LEN            128
 | |
| 
 | |
| ID FLG_ID_USBCMD = 0;
 | |
| ID SEMID_USBCMD_1ST_COM = 0;
 | |
| static BOOL g_bUsbCmdTskOpened = FALSE;
 | |
| static THREAD_HANDLE USBCMDTSK_ID, USBCMDTSK2_ID, USBCMDDOWNLOADTSK_ID;
 | |
| static UINT32 usbcmd_tsk_run = 0, is_usbcmd_tsk_running = 0;
 | |
| static UINT32 usbcmd_tsk2_run = 0, is_usbcmd_tsk2_running = 0;
 | |
| static UINT32 usbcmddownload_tsk_run = 0, is_usbcmddownload_tsk_running = 0;
 | |
| 
 | |
| //for receving XML cmd
 | |
| THREAD_RETTYPE UsbCmdTsk(void)
 | |
| {
 | |
| 	INT32  ret_value;
 | |
| 	UINT32 CmdStrLen;
 | |
| 	INT32 timeout = -1;
 | |
| 
 | |
| 	THREAD_ENTRY();
 | |
| 	//DBG_FUNC_BEGIN("\r\n");
 | |
| 	is_usbcmd_tsk_running = TRUE;
 | |
| 	while (usbcmd_tsk_run) {
 | |
| 		CmdStrLen = MAX_USB_CMD_LEN;
 | |
| 		memset((void *)g_RecvBuf[0].addr_va, 0, CmdStrLen);
 | |
| 		hd_common_mem_flush_cache((void *)g_RecvBuf[0].addr_va, CmdStrLen);
 | |
| 		vos_flag_set(FLG_ID_USBCMD, FLGUSBCMD_IDLE);
 | |
| 		ret_value = UVAC_ReadCdcData(USB_CMD_PORT, (UINT8 *)g_RecvBuf[0].addr_pa, CmdStrLen, timeout);
 | |
| 		vos_flag_clr(FLG_ID_USBCMD, FLGUSBCMD_IDLE);
 | |
| 
 | |
| 		if (ret_value > 0) {
 | |
| 			hd_common_mem_flush_cache((void *)g_RecvBuf[0].addr_va, ret_value);
 | |
| 			UsbCmdHandler((UINT8 *)g_RecvBuf[0].addr_va, ret_value);
 | |
| 		} else {
 | |
| 			DBG_IND("Aobrt ReadCdc to exit (%d).\r\n", ret_value);
 | |
| 			break;
 | |
| 		}
 | |
| 	}
 | |
| 	is_usbcmd_tsk_running = FALSE;
 | |
| 	//DBG_FUNC_END("\r\n");
 | |
| 	THREAD_RETURN(0);
 | |
| }
 | |
| 
 | |
| //for receving raw data ?
 | |
| THREAD_RETTYPE UsbCmdTsk2(void)
 | |
| {
 | |
| 	INT32  ret_value;
 | |
| 	UINT32 DataLen;
 | |
| 	INT32 timeout = -1;
 | |
| 
 | |
| 	THREAD_ENTRY();
 | |
| 	//DBG_FUNC_BEGIN("\r\n");
 | |
| 	is_usbcmd_tsk2_running = TRUE;
 | |
| 	while (usbcmd_tsk2_run) {
 | |
| 		DataLen = g_RecvBuf[1].size;
 | |
| 		vos_flag_set(FLG_ID_USBCMD, FLGUSBCMD_IDLE2);
 | |
| 		ret_value = UVAC_ReadCdcData(USB_DATA_PORT, (UINT8 *)g_RecvBuf[1].addr_pa, DataLen, timeout);
 | |
| 		vos_flag_clr(FLG_ID_USBCMD, FLGUSBCMD_IDLE2);
 | |
| 
 | |
| 		if (ret_value > 0) {
 | |
| 			hd_common_mem_flush_cache((void *)g_RecvBuf[1].addr_va, ret_value);
 | |
| 			UsbRcvDataHandler((UINT32)g_RecvBuf[1].addr_va, DataLen);
 | |
| 		} else {
 | |
| 			DBG_IND("Aobrt ReadCdc to exit. (%d)\r\n", ret_value);
 | |
| 			break;
 | |
| 		}
 | |
| 	}
 | |
| 	is_usbcmd_tsk2_running = FALSE;
 | |
| 	//DBG_FUNC_END("\r\n");
 | |
| 	THREAD_RETURN(0);
 | |
| }
 | |
| 
 | |
| //for downloading file
 | |
| THREAD_RETTYPE UsbCmdDownloadTsk(void)
 | |
| {
 | |
| 	FLGPTN      uiFlag = 0;
 | |
| 
 | |
| 	THREAD_ENTRY();
 | |
| 	//DBG_FUNC_BEGIN("\r\n");
 | |
| 	is_usbcmddownload_tsk_running = TRUE;
 | |
| 	while (usbcmddownload_tsk_run) {
 | |
| 		vos_flag_set(FLG_ID_USBCMD, FLGUSBCMD_IDLE3);
 | |
| 		vos_flag_wait(&uiFlag, FLG_ID_USBCMD, FLGUSBCMD_DOWNLOAD, TWF_ORW | TWF_CLR);
 | |
| 		vos_flag_clr(FLG_ID_USBCMD, FLGUSBCMD_IDLE3);
 | |
| 		UsbCmdDownloadHandler();
 | |
| 	}
 | |
| 	is_usbcmddownload_tsk_running = FALSE;
 | |
| 	//DBG_FUNC_END("\r\n");
 | |
| 	THREAD_RETURN(0);
 | |
| }
 | |
| 
 | |
| ER UsbCmdTsk_Open(void)
 | |
| {
 | |
| 	ER ret = E_OK;
 | |
| 	T_CFLG cflg;
 | |
| 
 | |
| 	if (g_bUsbCmdTskOpened) {
 | |
| 		return E_SYS;
 | |
| 	}
 | |
| 
 | |
| 	WifiCmd_InstallID();
 | |
| 
 | |
| 	memset(&cflg, 0, sizeof(T_CFLG));
 | |
| 	if (vos_flag_create(&FLG_ID_USBCMD, &cflg, "USBCMD") != E_OK) {
 | |
| 		DBG_ERR("FLG_ID_USBCMD fail\r\n");
 | |
| 		ret = E_SYS;
 | |
| 	}
 | |
| 
 | |
| 	vos_flag_clr(FLG_ID_USBCMD, FLGUSBCMD_ALL);
 | |
| 
 | |
| 	if (vos_sem_create(&SEMID_USBCMD_1ST_COM, 1, "SEMID_USBCMD_1ST_COM") != E_OK) {
 | |
| 		DBG_ERR("Create SEMID_USBCMD_1ST_COM fail\r\n");
 | |
| 		ret = E_SYS;
 | |
| 	}
 | |
| 
 | |
| 	if ((USBCMDTSK_ID = vos_task_create(UsbCmdTsk, 0, "UsbCmdTsk", PRI_USBCMD, STKSIZE_USBCMD)) == 0) {
 | |
| 		DBG_ERR("UsbCmdTsk create failed.\r\n");
 | |
| 		ret = E_SYS;
 | |
| 	} else {
 | |
| 		usbcmd_tsk_run = TRUE;
 | |
| 		vos_task_resume(USBCMDTSK_ID);
 | |
| 	}
 | |
| 
 | |
| 	if ((USBCMDTSK2_ID = vos_task_create(UsbCmdTsk2, 0, "UsbCmdTsk2", PRI_USBCMD, STKSIZE_USBCMD)) == 0) {
 | |
| 		DBG_ERR("UsbCmdTsk2 create failed.\r\n");
 | |
| 		ret = E_SYS;
 | |
| 	} else {
 | |
| 		usbcmd_tsk2_run = TRUE;
 | |
| 		vos_task_resume(USBCMDTSK2_ID);
 | |
| 	}
 | |
| 
 | |
| 	if ((USBCMDDOWNLOADTSK_ID = vos_task_create(UsbCmdDownloadTsk, 0, "UsbCmdDownloadTsk", PRI_USBCMD, STKSIZE_USBCMD_DOWNLOAD)) == 0) {
 | |
| 		DBG_ERR("UsbCmdDownloadTsk create failed.\r\n");
 | |
| 		ret = E_SYS;
 | |
| 	} else {
 | |
| 		usbcmddownload_tsk_run = TRUE;
 | |
| 		vos_task_resume(USBCMDDOWNLOADTSK_ID);
 | |
| 	}
 | |
| 	g_bUsbCmdTskOpened = TRUE;
 | |
| 
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| ER UsbCmdTsk_Close(void)
 | |
| {
 | |
| 	FLGPTN  FlgPtn;
 | |
| 	UINT32 delay_cnt;
 | |
| 
 | |
| 	delay_cnt = 10;
 | |
| 
 | |
| 	if (!g_bUsbCmdTskOpened) {
 | |
| 		return E_SYS;
 | |
| 	}
 | |
| 
 | |
| 	vos_flag_wait(&FlgPtn, FLG_ID_USBCMD, FLGUSBCMD_IDLE, TWF_ORW);
 | |
| 	//use abort to exit task
 | |
| 	UVAC_AbortCdcRead(USB_CMD_PORT);
 | |
| 
 | |
| 	vos_flag_wait(&FlgPtn, FLG_ID_USBCMD, FLGUSBCMD_IDLE2, TWF_ORW);
 | |
| 	//use abort to exit task
 | |
| 	UVAC_AbortCdcRead(USB_DATA_PORT);
 | |
| 
 | |
| 	vos_flag_wait(&FlgPtn, FLG_ID_USBCMD, FLGUSBCMD_IDLE3, TWF_ORW);
 | |
| 
 | |
| 	usbcmd_tsk_run = FALSE;
 | |
| 	usbcmd_tsk2_run = FALSE;
 | |
| 	usbcmddownload_tsk_run = FALSE;
 | |
| 	delay_cnt = 10;
 | |
| 
 | |
| 	while ((is_usbcmd_tsk_running || is_usbcmd_tsk2_running || is_usbcmddownload_tsk_running) && delay_cnt) {
 | |
| 		vos_util_delay_ms(50);
 | |
| 		delay_cnt --;
 | |
| 	}
 | |
| 	if (is_usbcmd_tsk_running) {
 | |
| 		DBG_DUMP("Destroy UsbCmdTsk\r\n");
 | |
| 		vos_task_destroy(USBCMDTSK_ID);
 | |
| 	}
 | |
| 	if (is_usbcmd_tsk2_running) {
 | |
| 		DBG_DUMP("Destroy UsbCmdTsk2\r\n");
 | |
| 		vos_task_destroy(USBCMDTSK2_ID);
 | |
| 	}
 | |
| 	if (is_usbcmddownload_tsk_running) {
 | |
| 		DBG_DUMP("Destroy UsbCmdDownloadTsk\r\n");
 | |
| 		vos_task_destroy(USBCMDDOWNLOADTSK_ID);
 | |
| 	}
 | |
| 	if (vos_flag_destroy(FLG_ID_USBCMD) != E_OK) {
 | |
| 		DBG_ERR("FLG_ID_USBCMD destroy failed.\r\n");
 | |
| 	}
 | |
| 	vos_sem_destroy(SEMID_USBCMD_1ST_COM);
 | |
| 
 | |
| 	WifiCmd_UninstallID();
 | |
| 
 | |
| 	g_bUsbCmdTskOpened = FALSE;
 | |
| 
 | |
| 	return E_OK;
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | 
