nt9856x/code/application/source/cardv/SrcCode/Gx/GxStrg/GxStrg_p1.c
2023-03-28 15:07:53 +08:00

91 lines
2.3 KiB
C
Executable File

#include "GxStrg.h"
#include "GxStrgInt.h"
#include "FileSysTsk.h"
// Strg callback function pointer
GX_CALLBACK_PTR g_fpStrgCB = NULL;
// Current storage object pointer (pointer from struct DX_OBJECT)
DX_HANDLE g_pCurStrgDXH[GXSTRG_STRG_NUM] = {0};
// Current storage object pointer (pointer from struct STORAGE_OBJ)
DX_HANDLE g_pCurStrgOBJ[GXSTRG_STRG_NUM] = {0};
FST_FS_TYPE g_FsType = FST_FS_TYPE_UITRON;
UINT32 g_FsOpsHdl = 0;
FILE_TSK_INIT_PARAM g_FSInitParam[] = {
{{0, 0, FALSE, {0}, 0, 0}, (FileSys_CB)GxStrg_InitCB0},
{{0, 0, FALSE, {0}, 0, 0}, (FileSys_CB)GxStrg_InitCB1},
{{0, 0, FALSE, {0}, 0, 0}, (FileSys_CB)GxStrg_InitCB2},
{{0, 0, FALSE, {0}, 0, 0}, (FileSys_CB)GxStrg_InitCB3},
{{0, 0, FALSE, {0}, 0, 0}, (FileSys_CB)GxStrg_InitCB4},
};
STATIC_ASSERT(GXSTRG_STRG_NUM == sizeof(g_FSInitParam) / sizeof(FILE_TSK_INIT_PARAM));
BOOL GxStrg_IsValidDevID(UINT32 DevID)
{
if (DevID < GXSTRG_STRG_NUM) {
return TRUE;
} else {
return FALSE;
}
}
/*
FILE_CFG_DEVICE1:
Initialize card storage object
@param pStrgObj Pointer to Card's STRG_TAB type object.
FILE_CFG_DEVICE2:
Initialize nand storage object
@param pStrgObj Pointer to Nand's STRG_TAB type object.
*/
void GxStrg_SetConfigEx(UINT32 DevID, UINT32 cfg, UINT32 value)
{
if (FALSE == GxStrg_IsValidDevID(DevID)) {
return;
}
switch (cfg) {
case FILE_CFG_BUF:
if (value) {
MEM_RANGE *pBuf = (MEM_RANGE *)value;
g_FSInitParam[DevID].FSParam.WorkBuf = pBuf->addr;
g_FSInitParam[DevID].FSParam.WorkBufSize = pBuf->size;
}
break;
case FILE_CFG_SUPPORT_EXFAT:
g_FSInitParam[DevID].FSParam.bSupportExFAT = ((value != 0) ? TRUE : FALSE);
break;
case FILE_CFG_FS_TYPE:
g_FsOpsHdl = value;
g_FsType = FileSys_GetType(g_FsOpsHdl);
break;
case FILE_CFG_MOUNT_PATH:
strncpy(g_FSInitParam[DevID].FSParam.szMountPath, (char *)value, KFS_LONGNAME_PATH_MAX_LENG - 1);
g_FSInitParam[DevID].FSParam.szMountPath[KFS_LONGNAME_PATH_MAX_LENG - 1] = '\0';
break;
case FILE_CFG_MAX_OPEN_FILE:
g_FSInitParam[DevID].FSParam.MaxOpenedFileNum = value;
break;
case FILE_CFG_ALIGNED_SIZE:
g_FSInitParam[DevID].FSParam.AlignedSize = value;
break;
case FILE_CFG_STRG_OBJECT:
g_pCurStrgDXH[DevID] = (DX_HANDLE)value;
break;
default:
DBG_ERR("Invalid cfg %d\r\n", cfg);
break;
}
}
void GxStrg_RegCB(GX_CALLBACK_PTR fpStrgCB)
{
g_fpStrgCB = fpStrgCB;
}