www.pudn.com > LPC2200_USB.rar > OSFile.c, change:2005-03-25,size:26871b


/****************************************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" 
 
/* 简化接口函数编写的一个宏 */ 
/* 参数:a为请求的操作 */ 
/* b为不能提供服务(包括不能提交请求)时的返回值 */ 
/* c为服务器通过时的返回值。*/ 
#define  Together(a, b, c)                                      \ 
    Temp.Command = a;                                           \ 
    ThisRt = b;                                                 \ 
    Temp.Rt = OSMboxCreate(NULL);                               \ 
    if (Temp.Rt != NULL)                                        \ 
    {                                                           \ 
        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) 
    { 
        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); 
} 
 
 
 
/*********************************************************************************************************/ 
 
 
/********************************************************************************************************* 
** 函数名称: 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)) 
{ 
    OSFileParameter Temp; 
    uint8 err, ThisRt; 
 
    Temp.P1.Pvp = (void *)DiakCommand; 
    Together(OS_AddFileDriver, NOT_RUN, RETURN_OK); 
} 
 
/********************************************************************************************************* 
** 函数名称: OSRemoveFileDriver 
** 功能描述: 删除一个底层驱动程序 
** 
** 输 入: Drive:逻辑驱动器号 
** 
** 输 出: 无 
**          
** 全局变量:  
** 调用模块: OSQPost 
** 
** 作 者: 陈明计 
** 日 期: 2003年12月20日 
**------------------------------------------------------------------------------------------------------- 
** 修改人:  
** 日 期:  
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
        uint8 OSRemoveFileDriver(uint8 Drive) 
{ 
    OSFileParameter Temp; 
    uint8 err, ThisRt; 
 
    Temp.P1.Puint8 = Drive; 
    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); 
} 
 
 
 
/*********************************************************************************************************/ 
 
 
 
 
/********************************************************************************************************* 
** 函数名称: OSFileTask 
** 功能描述: 文件系统服务任务 
** 
** 输 入: 无 
** 
** 输 出: 无 
**          
** 全局变量:  
** 调用模块: OSQPost 
** 
** 作 者: 陈明计 
** 日 期: 2003年12月20日 
**------------------------------------------------------------------------------------------------------- 
** 修改人: 陈明计 
** 日 期: 2004年3月11日 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
 
        void OSFileTask(void *pdata) 
{ 
    uint8 err; 
    uint16 CacheIndex; 
    OSFileParameter *Command; 
     
    extern Disk_cache DiskCache[MAX_DISK_CACHES]; 
    pdata = pdata; 
     
    DiskInit();                                         /* 初始化磁盘管理模块 */ 
    FileInit();                                         /* 初始化文件系统 */ 
    FileCommad = OSQCreate(OSFileQ, FILE_Q_SIZE);       /* 初始化命令队列 */ 
    CacheIndex = 0; 
    while (1) 
    { 
        Command = (OSFileParameter *)OSQPend(FileCommad, 2, &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) 
        { 
            /* 实际执行各种操作  */ 
            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_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); 
                    break; 
                case OS_RemoveFileDriver:       /* 删除底层驱动 */ 
                    RemoveFileDriver(Command->P1.Puint8); 
                    break; 
                case OS_AllCacheWriteBack:      /* 同步cache与逻辑盘 */ 
                    AllCacheWriteBack(); 
                    break; 
                default: 
                    Command->P1.Puint8 = BAD_COMMAND; 
                    break; 
            } 
            OSMboxPost(Command->Rt, (void *)1);             /* 返回操作结果 */ 
        } 
    } 
} 
 
 
/********************************************************************************************************* 
**                            End Of File 
********************************************************************************************************/