📄 ffstask.c
字号:
IOP_MAILBOX_ETS,
IOP_CP_FFS_FILE_DELETE_ETS,
(void *)RspMsgP,
sizeof(FfsFileDeleteRspMsgT)
);
}
static void FFS_Sidb_Read_Item(SidbReadMsgT *RxMsgP)
{
uint32 status;
long msgsize;
uint32 fill_size;
uint32 read_size;
uint16 type = RxMsgP->type;
uint16 id = RxMsgP->id;
uint32 offset = RxMsgP->Offset;
uint32 length = RxMsgP->Length;
uint8 * data;
SidbReadRspMsgT * RspMsgP;
msgsize = sizeof(SidbReadRspMsgT) + RxMsgP->Length;
/* Allocate a msg buffer for response message */
RspMsgP = (SidbReadRspMsgT *) ExeMsgBufferGet(msgsize);
RspMsgP->Length = 0;
data = (uint8 *)&RspMsgP->Data[0];
read_size = FsmDataItemRead(type, id, offset, data, length);
if (read_size == length)
{
RspMsgP->Status = NU_SUCCESS;
RspMsgP->Length = read_size;
}
else
{
status = FsmDataItemGetError();
if(status == ERR_NONE)
{
fill_size = length - read_size;
memset(((uint8 *)data) + read_size, 0x0, fill_size);
RspMsgP->Status = NU_SUCCESS;
RspMsgP->Length = read_size;
}
else
{
RspMsgP->Status = status;
}
}
/* Send result back to sender of message */
ExeMsgSend(EXE_IOP_ID, IOP_MAILBOX_ETS, IOP_CP_FFS_SIDB_READ_ETS,
(void *)RspMsgP, msgsize);
}
static void FFS_Sidb_Write_Item(SidbWriteMsgT *RxMsgP)
{
uint32 write_len;
uint16 type = RxMsgP->type;
uint16 id = RxMsgP->id;
uint32 offset = RxMsgP->Offset;
uint32 length = RxMsgP->Length;
uint8 * data = (uint8 *)&RxMsgP->Data[0];
SidbWriteRspMsgT * RspMsgP;
/* Allocate a msg buffer for response message */
RspMsgP = (SidbWriteRspMsgT *) ExeMsgBufferGet(sizeof(SidbWriteRspMsgT));
write_len = FsmDataItemWrite(type, id, offset, data, length);
if(write_len == (uint32)length)
{
RspMsgP->Status = NU_SUCCESS;
}
else
{
RspMsgP->Status = ERR_WRITE;
}
/* Send result back to sender of message */
ExeMsgSend(EXE_IOP_ID, IOP_MAILBOX_ETS, IOP_CP_FFS_SIDB_WRITE_ETS,
(void *)RspMsgP, sizeof(SidbWriteRspMsgT));
}
static void FFS_Sidb_Delete_Item(SidbDeleteMsgT *RxMsgP)
{
uint32 status;
uint16 type = RxMsgP->type;
uint16 id = RxMsgP->id;
SidbDeleteRspMsgT * RspMsgP;
/* Allocate a msg buffer for response message */
RspMsgP = (SidbDeleteRspMsgT *) ExeMsgBufferGet(sizeof(SidbDeleteRspMsgT));
status = FsmDataItemDelete(type, id);
if(status == ERR_NONE)
{
RspMsgP->Status = NU_SUCCESS;
}
else
{
RspMsgP->Status = status;
}
/* Send result back to sender of message */
ExeMsgSend(EXE_IOP_ID, IOP_MAILBOX_ETS, IOP_CP_FFS_SIDB_DELETE_ETS,
(void *)RspMsgP, sizeof(SidbDeleteRspMsgT));
}
static void FFS_Sidb_List_Item(SidbListMsgT *RxMsgP)
{
uint32 fd;
FsmItemInfoT ItemInfo;
uint32 status;
SidbListRspMsgT *RspMsgP;
MonPrintf("\n In data item list");
fd = FsmDataItemFindFirst(RxMsgP->type, RxMsgP->id, &ItemInfo);
if(fd != INVALID_FILE_HANDLE)
{
while(1)
{
/* Allocate a msg buffer for response message */
RspMsgP = (SidbListRspMsgT *) ExeMsgBufferGet(sizeof(SidbListRspMsgT));
RspMsgP->type = ItemInfo.ItemType;
RspMsgP->id = ItemInfo.ItemId;
RspMsgP->length = ItemInfo.ItemLength;
RspMsgP->method = ItemInfo.Method;
/* Send result back to sender of message */
ExeMsgSend(EXE_IOP_ID, IOP_MAILBOX_ETS, IOP_CP_FFS_SIDB_LIST_ETS,
(void *)RspMsgP, sizeof(SidbListRspMsgT));
status = FsmDataItemFindNext(fd, &ItemInfo);
if(status != ERR_NONE)
{
FsmDataItemFindClose(fd);
break;
}
}
}
else
{
/* Allocate a msg buffer for response message */
RspMsgP = (SidbListRspMsgT *) ExeMsgBufferGet(sizeof(SidbListRspMsgT));
RspMsgP->type = -1;
RspMsgP->id = -1;
RspMsgP->length = -1;
RspMsgP->method = -1;
/* Send result back to sender of message */
ExeMsgSend(EXE_IOP_ID, IOP_MAILBOX_ETS, IOP_CP_FFS_SIDB_LIST_ETS,
(void *)RspMsgP, sizeof(SidbListRspMsgT));
}
}
static void FFS_File_Mkdir(FfsFileMkdirMsgT *RxMsgP)
{
FfsFileMkdirRspMsgT * RspMsgP;
char * NameP = (char *)RxMsgP->FileName;
/* Allocate a msg buffer for response message */
RspMsgP = (FfsFileMkdirRspMsgT *) ExeMsgBufferGet(sizeof(FfsFileMkdirRspMsgT));
/* Delete the file */
NameP[MAX_FILE_NAME_LENGTH] = 0;
RspMsgP->Status = FsmMakeDir(NameP);
if (RspMsgP->Status == 0)
{
MonPrintf("\nMake directory OK!\n");
}
else
{
MonPrintf("\nMake directory FAILURE! %d\n", RspMsgP->Status);
}
/* Send result back to sender of message */
ExeMsgSend(
EXE_IOP_ID,
IOP_MAILBOX_ETS,
IOP_CP_FFS_FILE_MKDIR_ETS,
(void *)RspMsgP,
sizeof(FfsFileMkdirRspMsgT)
);
}
static void FFS_File_Rmdir(FfsFileRmdirMsgT *RxMsgP)
{
FfsFileRmdirRspMsgT * RspMsgP;
char * NameP = (char *)RxMsgP->FileName;
/* Allocate a msg buffer for response message */
RspMsgP = (FfsFileRmdirRspMsgT *) ExeMsgBufferGet(sizeof(FfsFileRmdirRspMsgT));
NameP[MAX_FILE_NAME_LENGTH] = 0;
RspMsgP->Status = FsmRemoveDir(NameP);
if (RspMsgP->Status == 0)
{
MonPrintf("\nRemove directory OK!\n");
}
else
{
MonPrintf("\nRemove directory FAILURE! %d\n", RspMsgP->Status);
}
/* Send result back to sender of message */
ExeMsgSend(
EXE_IOP_ID,
IOP_MAILBOX_ETS,
IOP_CP_FFS_FILE_RMDIR_ETS,
(void *)RspMsgP,
sizeof(FfsFileRmdirRspMsgT)
);
}
static void FFS_File_Rename(FfsFileRenameMsgT *RxMsgP)
{
FfsFileRenameRspMsgT * RspMsgP;
char * OldNameP = (char *)RxMsgP->OldName;
char * NewNameP = (char *)RxMsgP->NewName;
/* Allocate a msg buffer for response message */
RspMsgP = (FfsFileRenameRspMsgT *) ExeMsgBufferGet(sizeof(FfsFileRenameRspMsgT));
OldNameP[MAX_FILE_NAME_LENGTH] = 0;
NewNameP[MAX_FILE_NAME_LENGTH] = 0;
RspMsgP->Status = FsmRename(OldNameP, NewNameP);
if (RspMsgP->Status == 0)
{
MonPrintf("\nFile rename OK!\n");
}
else
{
MonPrintf("\nFile rename FAILURE! %d\n", RspMsgP->Status);
}
/* Send result back to sender of message */
ExeMsgSend(
EXE_IOP_ID,
IOP_MAILBOX_ETS,
IOP_CP_FFS_FILE_RENAME_ETS,
(void *)RspMsgP,
sizeof(FfsFileRenameRspMsgT)
);
}
static void FFS_File_Truncate(FfsFileTruncateMsgT * RxMsgP)
{
uint32 fd;
FfsFileTruncateRspMsgT * RspMsgP;
/* Allocate a msg buffer for response message */
RspMsgP = (FfsFileTruncateRspMsgT *) ExeMsgBufferGet(sizeof(FfsFileTruncateRspMsgT));
RxMsgP->FileName[MAX_FILE_NAME_LENGTH] = 0;
fd = FsmOpen((char *)RxMsgP->FileName, FSM_OPEN_EXISTING | FSM_OPEN_WRITE | FSM_OPEN_READ);
if (fd == INVALID_FILE_HANDLE)
{
RspMsgP->Status = FFS_READ_ACTIVE;
MonPrintf("\nFile open FAILURE!\n");
}
else
{
RspMsgP->Status = FsmTruncate(fd, RxMsgP->Length);
if (RspMsgP->Status != 0)
{
MonPrintf("\nTruncate file FAILURE! %d\n", RspMsgP->Status);
}
FsmClose(fd);
}
/* Send response message back to sender of message */
ExeMsgSend(
EXE_IOP_ID,
IOP_MAILBOX_ETS,
IOP_CP_FFS_FILE_TRUNCATE_ETS,
(void *)RspMsgP,
sizeof(FfsFileTruncateRspMsgT)
);
}
static void FFS_File_Find(FfsFileFindMsgT * RxMsgP)
{
int count;
uint32 status;
FsmFileInfoT info;
HENUM hnum;
FfsFileFindRspMsgT * RspMsgP;
char * NameP = (char *)RxMsgP->FileName;
MonPrintf("\n list directory contents! \n");
NameP[MAX_FILE_NAME_LENGTH] = 0;
hnum = FsmFindFirstFile(NameP, &info);
if (hnum != NULL)
{
for ( count = 0; ; count++)
{
/* Allocate a msg buffer for response message */
RspMsgP = (FfsFileFindRspMsgT *) ExeMsgBufferGet(sizeof(FfsFileFindRspMsgT));
sprintf(
(char *)RspMsgP->FileEntry,
"%04d : %s %-4dBytes",
count,
info.FileName,
(int)info.FileLength
);
/* Send response message back to sender of message */
ExeMsgSend(
EXE_IOP_ID,
IOP_MAILBOX_ETS,
IOP_CP_FFS_FILE_FIND_ETS,
(void *)RspMsgP,
sizeof(FfsFileFindRspMsgT)
);
status = FsmFindNextFile(hnum, &info);
if (status != 0)
{
FsmFindClose(hnum);
break;
}
}
}
else
{
/* Let user know what is going on */
RspMsgP = (FfsFileFindRspMsgT *)ExeMsgBufferGet(sizeof(FfsFileFindRspMsgT));
sprintf(RspMsgP->FileEntry, "** Fsm dfs error %d", hnum);
RspMsgP->FileEntry[MAX_FILE_NAME_LENGTH] = 0;
ExeMsgSend(
EXE_IOP_ID,
IOP_MAILBOX_ETS,
IOP_CP_FFS_FILE_FIND_ETS,
(void *)RspMsgP,
sizeof(FfsFileFindRspMsgT)
);
}
}
static void FFS_Format()
{
FfsFormatRspMsgT * RspMsgP;
FsmFormatArgumentT FormatArg;
MonPrintf("\n Ffs format! \n");
RspMsgP = (FfsFormatRspMsgT *) ExeMsgBufferGet(sizeof(FfsFormatRspMsgT));
FormatArg.mode = FSM_FORMAT_DEV;
FormatArg.Param.DevArg.FsP = &FsmDfsDrv;
FormatArg.Param.DevArg.DevP = (FsmDevObjHdrT *)&FlashDev;
FsmStarting = TRUE;
RspMsgP->Status = FsmFormat(&FormatArg);
FsmStarting = FALSE;
ExeMsgSend(
EXE_IOP_ID,
IOP_MAILBOX_ETS,
IOP_CP_FFS_FORMAT_ETS,
(void *)RspMsgP,
sizeof(FfsFormatRspMsgT)
);
}
static void FFS_Get_Free_Space(FfsGetFreeSpaceMsgT * RxMsgP)
{
uint32 totalspace;
uint32 availablespace;
uint32 freespace;
FfsGetFreeSpaceRspMsgT * RspMsgP;
char * NameP = (char *)RxMsgP->VolumeName;
MonPrintf("\n get free space! \n");
/* Allocate a msg buffer for response message */
RspMsgP = (FfsGetFreeSpaceRspMsgT *) ExeMsgBufferGet(sizeof(FfsGetFreeSpaceRspMsgT));
NameP[MAX_FILE_NAME_LENGTH] = 0;
RspMsgP->Status = FsmGetFreeSpace(
NameP,
&totalspace,
&availablespace,
&freespace
);
RspMsgP->totalspace = totalspace;
RspMsgP->availablespace = availablespace;
RspMsgP->freespace = freespace;
/* Send response message back to sender of message */
ExeMsgSend(
EXE_IOP_ID,
IOP_MAILBOX_ETS,
IOP_CP_FFS_GET_FREE_SPACE_ETS,
(void *)RspMsgP,
sizeof(FfsGetFreeSpaceRspMsgT)
);
}
/*****************************************************************************
* $Log: ffstask.c $
* Revision 1.11 2004/03/17 12:53:05 zgy
* modify ffs format call.
* Revision 1.10 2004/02/19 11:12:08 zgy
* add fsm get free space support.
* Revision 1.9 2004/02/03 09:26:14 zgy
* include ffsapi.h
* Revision 1.8 2004/02/02 10:31:39 zgy
* replace naming fdi with ffs.
* Revision 1.7 2004/01/19 13:20:34 zgy
* Fix ffs_format function bug.
* Revision 1.6 2004/01/18 10:49:08 zgy
* add fsm format support.
* Revision 1.5 2003/11/26 16:59:22 zgy
* Revision 1.4 2003/11/25 16:14:39 zgy
* modify data item interface function.
* Revision 1.3 2003/11/25 13:54:45 zgy
* Add some interface function.
* Revision 1.2 2003/11/24 09:35:58 May
* Add VOLUME_PATH to file and dir path
* Revision 1.1 2003/11/07 19:00:07 xuhua
* Initial revision
* Revision 1.1 2003/10/21 16:05:00 hanxiao99
* Initial revision
* Revision 1.1 2003/10/08 14:44:01 hanxiao99
* Initial revision
* Revision 1.1 2003/09/03 15:06:41 hanxiao99
* Initial revision
* Revision 1.1 2003/07/31 05:22:38 javese
* Initial revision
* Revision 1.4 2003/04/09 20:08:21 vtc
* Revision 1.3 2003/03/17 19:19:29 vtc
* support sidb read/write for ets --- jingsong jin
* Revision 1.2 2002/11/22 11:29:58 wavis
* Remove includes for FMM and FILE.
* Remove call to FFS_fileinit, now done in kfs_lsi.c.
* Revision 1.1 2002/11/19 14:16:49 wavis
* Initial revision
*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -