104 lines
3.0 KiB
C
Executable File
104 lines
3.0 KiB
C
Executable File
////////////////////////////////////////////////////////////////////////////////
|
|
#include "PrjInc.h"
|
|
#include "usb2dev.h"
|
|
#include <FreeRTOS_POSIX.h>
|
|
#include <FreeRTOS_POSIX/pthread.h>
|
|
#include <comm/hwpower.h>
|
|
#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 <kwrap/debug.h>
|
|
#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);
|
|
}
|
|
|