//////////////////////////////////////////////////////////////////////////////// #include "PrjInc.h" #include "usb2dev.h" #include #include #include #include "sdio.h" #define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #if 1//_TODO #define __MODULE__ UsbCamFast #define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #define __DBGFLT__ "*" //*=All, [mark]=CustomClass #include #endif extern BOOL DrvCARD_DetStrgCard(void); extern BOOL DrvCARD_DetStrgCardWP(void); extern void USBMakerInit_UMSD(USB_MSDC_INFO *pUSBMSDCInfo); static UINT32 msdcbuf_pa = 0, msdcbuf_va = 0, msdcbuf_size = 0; ER AppInit_ModeFastUSBMSDC(void) { USB_MSDC_INFO MSDCInfo = {0}; MSDC_OBJ *p_msdc = Msdc_getObject(MSDC_ID_USB20); ER retV = E_OK; // Get buffer memory for MSDC task, MSDC share the same buffer memory with SIDC, // make sure the buffer memory size is enough for both MSDCInfo.uiMsdcBufAddr = msdcbuf_va; MSDCInfo.uiMsdcBufSize = MSDC_MIN_BUFFER_SIZE; USBMakerInit_UMSD(&MSDCInfo); //The callback functions for the MSDC Vendor command. //If project doesn't need the MSDC Vendor command, set this callback function as NULL. MSDCInfo.msdc_check_cb = NULL; MSDCInfo.msdc_vendor_cb = NULL; MSDCInfo.pStrgHandle[0] = (PSTRG_TAB)sdio_getStorageObject(STRG_OBJ_FAT1); MSDCInfo.msdc_storage_detCB[0] = (MSDC_StorageDet_CB)DrvCARD_DetStrgCard; MSDCInfo.msdc_strgLock_detCB[0] = (MSDC_StrgLockDet_CB)DrvCARD_DetStrgCardWP; MSDCInfo.msdc_type[0] = MSDC_STRG; MSDCInfo.LUNs = 1; FileSys_CloseEx('A', FST_TIME_INFINITE); p_msdc->SetConfig(USBMSDC_CONFIG_ID_SELECT_POWER, USBMSDC_POW_BUSPOWER); p_msdc->SetConfig(USBMSDC_CONFIG_ID_RC_DISABLESTALL, FALSE); retV = p_msdc->Open(&MSDCInfo); if (retV != E_OK) { DBG_ERR("Error open USB MSDC task:%d\r\n", retV); } return retV; } THREAD_RETTYPE UsbDiskFast_InitMsdcModeThread(void *arg) { UINT32 pa; void *va; HD_RESULT hd_ret; HD_COMMON_MEM_DDR_ID ddr_id = DDR_ID0; printf("Enter UsbDiskFast mode...\r\n"); msdcbuf_size = MSDC_MIN_BUFFER_SIZE; if ((hd_ret = hd_common_mem_alloc("msdcbuf", &pa, (void **)&va, msdcbuf_size, ddr_id)) != HD_OK) { DBG_ERR("hd_common_mem_alloc failed(%d)\r\n", hd_ret); msdcbuf_va = 0; msdcbuf_pa = 0; msdcbuf_size = 0; } else { msdcbuf_va = (UINT32)va; msdcbuf_pa = (UINT32)pa; } //System_SetState(SYS_STATE_FS, FS_NOT_INIT); AppInit_ModeFastUSBMSDC(); while(1) { if (usb2dev_state_change() && DrvCARD_DetStrgCard()) { vos_util_delay_ms(200); } else { MSDC_OBJ *p_msdc = Msdc_getObject(MSDC_ID_USB20); p_msdc->Close(); if ((hd_ret = hd_common_mem_free(msdcbuf_pa, (void *)msdcbuf_va)) != HD_OK) { DBG_ERR("hd_common_mem_free failed(%d)\r\n", hd_ret); } msdcbuf_pa = 0; msdcbuf_va = 0; msdcbuf_size = 0; hwpower_set_power_key(POWER_ID_PSW1, 0xFF); } } THREAD_RETURN(0); }