www.pudn.com > File_SD_OS.rar > OSFile.c
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** ARM开发组
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: OSFile.c
**创 建 人: 陈明计
**最后修改日期: 2004年7月9日
**描 述: ZLG/FS在μCOS-II下使用的接口
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 陈明计
** 版 本: V1.0
** 日 期: 2003年12月20日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2004年7月9日
** 描 述: 修改注释
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define IN_OSFILE
#include "config.h"
static uint32 PathSave[OS_LOWEST_PRIO][MAX_DRIVES];
static uint8 DriveSave[OS_LOWEST_PRIO];
/* 简化接口函数编写的一个宏 */
/* 参数:a为请求的操作 */
/* b为不能提供服务(包括不能提交请求)时的返回值 */
/* c为服务器通过时的返回值。*/
#define Together(a, b, c) \
Temp.Command = a; \
ThisRt = b; \
Temp.Rt = OSMboxCreate(NULL); \
if (Temp.Rt != NULL) \
{ \
Temp.PathSave = PathSave[OSTCBCur->OSTCBPrio]; \
Temp.DriveSave = DriveSave + OSTCBCur->OSTCBPrio; \
if (OSQPost(FileCommad, (void *)(&Temp)) == OS_NO_ERR) \
{ \
OSMboxPend(Temp.Rt, 0, &err); \
if (err == OS_NO_ERR) \
{ \
OSMboxDel(Temp.Rt, OS_DEL_ALWAYS, &err); \
ThisRt = c; \
} \
} \
} \
return ThisRt;
static void *OSFileQ[FILE_Q_SIZE]; /* 消息队列的消息存储空间 */
static OS_EVENT *FileCommad; /* 消息队列指针 */
/*********************************************************************************************************
** 函数名称: OSRemoveFile
** 功能描述: 删除文件
**
** 输 入: DirFileName:用户使用的文件名
**
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSRemoveFile(char *DirFileName)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = DirFileName;
Together(OS_RemoveFile, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSFileOpen
** 功能描述: 以指定方式打开文件
**
** 输 入: DirFileName:用户使用的文件名
** Type:打开方式
** 输 出: 文件句柄,Not_Open_FILE为不能打开
**
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
HANDLE OSFileOpen(char *DirFileName, char *Type)
{
OSFileParameter Temp;
uint8 err;
HANDLE ThisRt;
Temp.P1.cp = DirFileName;
Temp.P2.cp = Type;
Temp.Command = OS_FileOpen;
ThisRt = Not_Open_FILE;
Temp.Rt = OSMboxCreate(NULL);
if (Temp.Rt != NULL)
{
Temp.PathSave = PathSave[OSTCBCur->OSTCBPrio];
Temp.DriveSave = DriveSave + OSTCBCur->OSTCBPrio;
if (OSQPost(FileCommad, (void *)(&Temp)) == OS_NO_ERR)
{
OSMboxPend(Temp.Rt, 0, &err);
if (err == OS_NO_ERR)
{
OSMboxDel(Temp.Rt, OS_DEL_ALWAYS, &err);
ThisRt = Temp.P1.Handle;
}
}
}
return ThisRt;
}
/*********************************************************************************************************
** 函数名称: OSFileClose
** 功能描述: 关闭指定文件
**
** 输 入: Handle:文件句柄
**
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSFileClose(HANDLE Handle)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.Handle = Handle;
Together(OS_FileClose, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSFileGetCh
** 功能描述: 从文件读一个字节
**
** 输 入: Ch:返回读到的数据
** Handle:文件句柄
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSFileGetCh(char *Ch, HANDLE Handle)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Ch;
Temp.P2.Handle = Handle;
Together(OS_FileGetCh, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSFileRead
** 功能描述: 读取文件
**
** 输 入: Buf:保存读回的数据
** Size:要读的字节数
** Handle:文件句柄
** 输 出: 实际读到的字节数
**
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint32 OSFileRead(void *Buf, uint32 Size, HANDLE Handle)
{
OSFileParameter Temp;
uint8 err;
uint32 ThisRt;
Temp.P1.cp = Buf;
Temp.P2.Puint32 = Size;
Temp.P3.Handle = Handle;
Together(OS_FileRead, 0, Temp.P1.Puint32);
}
/*********************************************************************************************************
** 函数名称: OSFilePutCh
** 功能描述: 写一个字节到文件
**
** 输 入: Ch:要写的数据
** Handle:文件句柄
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSFilePutCh(uint8 Ch, HANDLE Handle)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.Puint8 = Ch;
Temp.P2.Handle = Handle;
Together(OS_FilePutCh, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSFileWrite
** 功能描述: 写文件
**
** 输 入: Buf:要写的数据
** Size:要写的字节数
** Handle:文件句柄
** 输 出: 实际写的字节数
**
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint32 OSFileWrite(void *Buf, uint32 Size, HANDLE Handle)
{
OSFileParameter Temp;
uint8 err;
uint32 ThisRt;
Temp.P1.cp = Buf;
Temp.P2.Puint32 = Size;
Temp.P3.Handle = Handle;
Together(OS_FileWrite, 0, Temp.P1.Puint32);
}
/*********************************************************************************************************
** 函数名称: OSFileCloseAll
** 功能描述: 关闭所有打开的文件
**
** 输 入: 无
**
** 输 出: NOT_RUN:未执行
** RETURN_OK:成功
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSFileCloseAll(void)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Together(OS_FileCloseAll, NOT_RUN, RETURN_OK);
}
/*********************************************************************************************************
** 函数名称: OSFileEof
** 功能描述: 判断文件是否到读\写到文件尾
**
** 输 入: Handle:文件句柄
**
** 输 出: 0:否
** 1:是
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSFileEof(HANDLE Handle)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.Handle = Handle;
Together(OS_FileEof, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSFileSeek
** 功能描述: 移动文件读\写位置
**
** 输 入: Handle:文件句柄
** offset:移动偏移量
** Whence:移动模式SEEK_SET:从文件头计算SEEK_CUR:从当前位置计算SEEK_END:从文件尾计算
** 输 出: 无
**
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSFileSeek(HANDLE Handle, int32 offset, uint8 Whence)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.Handle = Handle;
Temp.P2.Pint32 = offset;
Temp.P3.Puint8 = Whence;
Together(OS_FileSeek, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************/
/*********************************************************************************************************
** 函数名称: OSMakeDir
** 功能描述: 建立目录
**
** 输 入: Path:绝对路径名
**
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSMakeDir(char *Path)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Path;
Together(OS_MakeDir, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSRemoveDir
** 功能描述: 删除目录
**
** 输 入: Path:绝对路径名
**
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSRemoveDir(char *Path)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Path;
Together(OS_RemoveDir, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSChangeDir
** 功能描述: 改变当前目录
**
** 输 入: Path:路径名
**
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSChangeDir(char *Path)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Path;
Together(OS_ChangeDir, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSGetDrive
** 功能描述: 获取指定目录的驱动器
**
** 输 入: Path:路径名
**
** 输 出: 驱动器号
**
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSGetDrive(char *Path)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Path;
Together(OS_GetDrive, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSChangeDrive
** 功能描述: 改变当前逻辑盘
**
** 输 入: Drive:逻辑盘符字符串
**
** 输 出: RETURN_OK:成功
** NOT_FIND_DISK:逻辑盘不存在
** PARAMETER_ERR:非法参数
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSChangeDrive(char *Drive)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Drive;
Together(OS_ChangeDrive, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSmount
** 功能描述: 加载卷(已分配盘符),允许读写。
**
** 输 入: DriveName:包含逻辑盘的字符串
**
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
**
** 作 者: 陈明计
** 日 期: 2004年12月31日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSmount(char *DriveName)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = DriveName;
Together(OS_mount, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函数名称: OSumount
** 功能描述: 卸载卷(已分配盘符),禁止读写。
**
** 输 入: DriveName:包含逻辑盘的字符串
**
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
**
** 作 者: 陈明计
** 日 期: 2004年12月31日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSumount(char *DriveName)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = DriveName;
Together(OS_umount, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************/
/*********************************************************************************************************
** 函数名称: OSGetFDTInfo
** 功能描述: 获取指定目录指定文件(目录)信息
**
** 输 入: Rt:存储返回信息的指针
** Drive:驱动器号
** ClusIndex:目录首簇号
** Index:文件(目录)在FDT中的位置
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSGetFDTInfo(FDT *Rt,uint8 Drive, uint32 ClusIndex, uint32 Index)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.Pvp= (void *)Rt;
Temp.P2.Puint8= Drive;
Temp.P3.Puint32= ClusIndex;
Temp.P4.Puint32= Index;
Together(OS_GetFDTInfo, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************/
/*********************************************************************************************************
** 函数名称: OSAddFileDriver
** 功能描述: 增加一个底层驱动程序
**
** 输 入: DiakCommand:驱动程序接口函数
**
** 输 出: NOT_RUN:没有执行
** RETURN_OK:执行成功
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSAddFileDriver(uint16 (* DiakCommand)(uint8 Cammand, void *Parameter), void *RsvdForLow)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.Pvp = (void *)DiakCommand;
Temp.P2.Pvp = RsvdForLow;
Together(OS_AddFileDriver, NOT_RUN, RETURN_OK);
}
/*********************************************************************************************************
** 函数名称: OSRemoveFileDriver
** 功能描述: 删除一个底层驱动程序
**
** 输 入: Drive:逻辑驱动器号
**
** 输 出: 无
**
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSRemoveFileDriver(uint16 (* DiakCommand)(uint8 Cammand, void *Parameter))
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.Pvp = (void *)DiakCommand;
Together(OS_RemoveFileDriver, NOT_RUN, RETURN_OK);
}
/*********************************************************************************************************/
/*********************************************************************************************************
** 函数名称: OSAllCacheWriteBack
** 功能描述: 把所有已改变的扇区写回逻辑盘
**
** 输 入: 无
**
** 输 出: NOT_RUN:没有执行
** RETURN_OK:执行成功
**
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSAllCacheWriteBack(void)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Together(OS_AllCacheWriteBack, NOT_RUN, RETURN_OK);
}
/*********************************************************************************************************
** 函数名称: OSGetDirClusIndex
** 功能描述: 获取指定目录的开始簇号
**
** 输 入: 目录字符串
**
** 输 出: 簇号:没有执行
**
**
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint32 OSGetDirClusIndex(char *Path)
{
OSFileParameter Temp;
uint32 ThisRt;
uint8 err;
Temp.P1.cp = Path;
Together(OS_GetDirClusIndex, BAD_CLUS, Temp.P1.Puint32);
}
/*********************************************************************************************************/
/*********************************************************************************************************
** 函数名称: OSFileTask
** 功能描述: 文件系统服务任务
**
** 输 入: 无
**
** 输 出: 无
**
** 全局变量:
** 调用模块: OSQPost
**
** 作 者: 陈明计
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2004年3月11日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void OSFileTask(void *pdata)
{
uint8 err;
uint16 CacheIndex;
unsigned int i, j;
OSFileParameter *Command;
uint32 *Save;
Disk_Info *Info;
extern Disk_Info DiskInfo[MAX_DRIVES];
extern uint8 CurrentDrive;
extern Disk_cache DiskCache[MAX_DISK_CACHES];
pdata = pdata;
for (i = 0; i < OS_LOWEST_PRIO; i++)
{
for (j = 0; j < MAX_DRIVES; j++)
{
PathSave[i][j] = 0;
}
DriveSave[i] = 0;
}
DiskInit(); /* 初始化磁盘管理模块 */
FileInit(); /* 初始化文件系统 */
FileCommad = OSQCreate(OSFileQ, FILE_Q_SIZE); /* 初始化命令队列 */
CacheIndex = 0;
while (1)
{
Command = (OSFileParameter *)OSQPend(FileCommad, 1, &err); /* 等待命令 */
if (err == OS_TIMEOUT)
{
if ((DiskCache[CacheIndex].Flag & CACHE_WRITED) != 0)
{
CacheWriteBack2(CacheIndex); /* 回写cache */
}
CacheIndex++;
if (CacheIndex >= MAX_DISK_CACHES)
{
CacheIndex = 0;
}
continue;
}
if (err == OS_NO_ERR)
{
Save = Command->PathSave;
CurrentDrive = *(Command->DriveSave);
Info = DiskInfo;
i = MAX_DRIVES;
do
{
Info->PathClusIndex = *Save++;
Info++;
} while( --i != 0);
/* 实际执行各种操作 */
switch(Command->Command)
{
case OS_RemoveFile: /* 删除文件 */
Command->P1.Puint8 = RemoveFile(Command->P1.cp);
break;
case OS_FileOpen: /* 打开文件 */
Command->P1.Handle = FileOpen(Command->P1.cp, Command->P2.cp);
break;
case OS_FileClose: /* 关闭文件 */
Command->P1.Puint8 = FileClose(Command->P1.Handle);
break;
case OS_FileGetCh: /* 从文件中读一个字节数据 */
Command->P1.Puint8 = FileGetCh(Command->P1.ucp, Command->P2.Handle);
break;
case OS_FileRead: /* 从文件中读数据 */
Command->P1.Puint32 = FileRead(Command->P1.Pvp, Command->P2.Puint32, Command->P3.Handle);
break;
case OS_FilePutCh: /* 写一个直接数据到文件 */
Command->P1.Puint8 = FilePutCh(Command->P1.Puint8, Command->P2.Handle);
break;
case OS_FileWrite: /* 写数据到文件 */
Command->P1.Puint32 = FileWrite(Command->P1.Pvp, Command->P2.Puint32, Command->P3.Handle);
break;
case OS_FileCloseAll: /* 关闭所有文件 */
FileCloseAll();
break;
case OS_FileEof: /* 判断文件是否结束 */
Command->P1.Puint8 = FileEof(Command->P1.Handle);
break;
case OS_FileSeek: /* 调整文件指针 */
Command->P1.Puint8 = FileSeek(Command->P1.Handle, Command->P2.Puint32, Command->P3.Puint8);
break;
case OS_MakeDir: /* 建立目录 */
Command->P1.Puint8 = MakeDir(Command->P1.cp);
break;
case OS_RemoveDir: /* 删除空目录 */
Command->P1.Puint8 = RemoveDir(Command->P1.cp);
break;
case OS_ChangeDir: /* 改变当前目录 */
Command->P1.Puint8 = ChangeDir(Command->P1.cp);
break;
case OS_GetDrive: /* 获取逻辑盘内部表示法 */
Command->P1.Puint8 = GetDrive(Command->P1.cp);
break;
case OS_ChangeDrive: /* 改变当前逻辑盘 */
Command->P1.Puint8 = ChangeDrive(Command->P1.cp);
break;
case OS_mount: /* 加载卷 */
Command->P1.Puint8 = mount(Command->P1.cp);
break;
case OS_umount: /* 卸载卷 */
Command->P1.Puint8 = umount(Command->P1.cp);
break;
case OS_GetFDTInfo: /* 获取指定fdt信息 */
Command->P1.Puint8 = GetFDTInfo(Command->P1.Pvp, Command->P2.Puint8, Command->P3.Puint32, Command->P4.Puint32);
break;
case OS_AddFileDriver: /* 增加底层驱动 */
AddFileDriver((uint16 (*)(uint8 Cammand, void *Parameter))Command->P1.Pvp, Command->P2.Pvp);
break;
case OS_RemoveFileDriver: /* 删除底层驱动 */
RemoveFileDriver((uint16 (*)(uint8 Cammand, void *Parameter))Command->P1.Pvp);
break;
case OS_AllCacheWriteBack: /* 同步cache与逻辑盘 */
AllCacheWriteBack();
break;
case OS_GetDirClusIndex:
Command->P1.Puint32 = GetDirClusIndex(Command->P1.cp);
break;
default:
Command->P1.Puint8 = BAD_COMMAND;
break;
}
Save = Command->PathSave;
Info = DiskInfo;
i = MAX_DRIVES;
do
{
*Save++ = Info->PathClusIndex;
Info++;
} while (--i != 0);
*(Command->DriveSave) = CurrentDrive;
OSMboxPost(Command->Rt, (void *)1); /* 返回操作结果 */
continue;
}
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/