command_unit.c
来自「USBUSB开发资料类」· C语言 代码 · 共 578 行 · 第 1/2 页
C
578 行
{
vCMD_pCommand->Parameter[1] = FilePointer;
vCMD_pCommand->Parameter[2] = FilePointer>>8;
vCMD_pCommand->Parameter[3] = FilePointer>>16;
vCMD_pCommand->Parameter[4] = FilePointer>>24;
vCMD_pCommand->Command = cCMD_CMD_SET_FILE_POINTER;
if (!CMD_DoCommand(66, 64, cCMD_CMD_SET_FILE_POINTER_RSP))
{ return FALSE; }
else
{
return ((vCMD_pStatus->Command == cCMD_CMD_SET_FILE_POINTER_RSP) && (vCMD_pStatus->Result));
}
}
//============================================================================================================
//函数名: CMD_Detect
//
//调用关系: 被 外部函数 调用。
//
//功能描述: 检查,是否有U盘。
//
//入口参数: 无
//
//返回值: 是否有U盘。
//============================================================================================================
BOOL CMD_Detect( void )
{
DWORD i;
vCMD_pCommand->Command = cCMD_CMD_DETECT_DEVICE;
for (i=0;i<63;i++)
{
vCMD_pCommand->Parameter[i] = i;
}
if (!CMD_DoCommand(66, 64, cCMD_CMD_DETECT_DEVICE_RSP))
{ return FALSE; }
else
{
//return vCMD_pStatus->Result;
/*if (vCMD_pStatus->Result)
{
if ((vCMD_pStatus->Result) != 1)
{
vCMD_pStatus->Result = 0;
}
//vCMD_pStatus->Result = 1;
}
else
{
vCMD_pCommand->Parameter[0] == cCMD_CMD_DETECT_DEVICE_RSP;
}*/
return ((vCMD_pStatus->Command == cCMD_CMD_DETECT_DEVICE_RSP) && (vCMD_pStatus->Result));
}
}
//============================================================================================================
//函数名: CMD_GetVersion
//
//调用关系: 被 外部函数 调用。
//
//功能描述: 得到版本号。
//
//出口参数: 无
//
//返回值: 是否有U盘。
//============================================================================================================
BOOL CMD_GetVersion( WORD* pVersion )
{
vCMD_pCommand->Command = cCMD_CMD_GET_VERSION;
if (!CMD_DoCommand(66, 64, cCMD_CMD_GET_VERSION_RSP))
{ return FALSE; }
else
{
if (((vCMD_pStatus->Command == cCMD_CMD_GET_VERSION_RSP) && (vCMD_pStatus->Result)))
{
*pVersion = (vCMD_pStatus->Parameter[0])<<8 + vCMD_pStatus->Parameter[1];
return TRUE;
}
else
{ return FALSE; }
}
}
//============================================================================================================
//函数名: CMD_InDir
//
//调用关系: 被 外部函数 调用。
//
//功能描述: 进入子目录。
//
//入口参数: pDirName 目录名,必须8个字节
//
//返回值: 是否成功。
//============================================================================================================
BOOL CMD_InDir( char* pDirName )
{
DWORD i;
//复制文件名和扩展名
for (i=0; i<8; i++)
vCMD_pCommand->Parameter[i] = pDirName[i];
vCMD_pCommand->Command = cCMD_CMD_IN_DIR;
if (!CMD_DoCommand(66, 64, cCMD_CMD_IN_DIR_RSP))
{ return FALSE; }
else
{
return ((vCMD_pStatus->Command == cCMD_CMD_IN_DIR_RSP) && (vCMD_pStatus->Result));
}
}
//============================================================================================================
//函数名: CMD_OutDir
//
//调用关系: 被 外部函数 调用。
//
//功能描述: 返回上级目录。
//
//入口参数: 无
//
//返回值: 是否成功。
//============================================================================================================
BOOL CMD_OutDir( void )
{
vCMD_pCommand->Command = cCMD_CMD_OUT_DIR;
if (!CMD_DoCommand(66, 64, cCMD_CMD_OUT_DIR_RSP))
{ return FALSE; }
else
{
return ((vCMD_pStatus->Command == cCMD_CMD_OUT_DIR_RSP) && (vCMD_pStatus->Result));
}
}
//============================================================================================================
//函数名: CMD_RootDir
//
//调用关系: 被 外部函数 调用。
//
//功能描述: 返回根目录。
//
//入口参数: 无
//
//返回值: 是否成功。
//============================================================================================================
BOOL CMD_RootDir( void )
{
vCMD_pCommand->Command = cCMD_CMD_ROOT_DIR;
if (!CMD_DoCommand(66, 64, cCMD_CMD_ROOT_DIR_RSP))
{ return FALSE; }
else
{
return ((vCMD_pStatus->Command == cCMD_CMD_ROOT_DIR_RSP) && (vCMD_pStatus->Result));
}
}
//============================================================================================================
//函数名: CMD_MakeDir
//
//调用关系: 被 外部函数 调用。
//
//功能描述: 创建目录。
//
//入口参数: pDirName 目录名,必须8个字节
//
//返回值: 是否创建成功。
//============================================================================================================
BOOL CMD_MakeDir( char* pDirName )
{
PFS_DirItem pItem;
DWORD i;
pItem = (PFS_DirItem)&(vCMD_pCommand->Parameter[0]);
//清空
for (i=0; i<11; i++)
{
vCMD_pCommand->Parameter[i] = 0x20;
}
for (i=12; i<63; i++)
{
vCMD_pCommand->Parameter[i] = 0;
}
//复制文件名和扩展名
for (i=0; i<8; i++)
{
if (pDirName[i] == 0)
break;
pItem->FileName[i] = pDirName[i];
}
pItem->Attribute = cFS_ATTR_DIRECTORY;
pItem->ResForNT = 0;
pItem->CreateTimeTenth = 88;
pItem->CreateTime = 0x4104;
pItem->CreateDate = 0x3908;
pItem->LastAccDate = 0x3908;
pItem->StartClusterHI = 0;
pItem->Time = 0x4104;
pItem->Data = 0x3908;
pItem->StartClusterLO = 0;
pItem->FileLength = 0;
vCMD_pCommand->Command = cCMD_CMD_MAKE_DIR;
if (!CMD_DoCommand(66, 64, cCMD_CMD_MAKE_DIR_RSP))
{ return FALSE; }
else
{
return ((vCMD_pStatus->Command == cCMD_CMD_MAKE_DIR_RSP) && (vCMD_pStatus->Result));
}
}
//============================================================================================================
//函数名: CMD_Remove
//
//调用关系: 被 外部函数 调用。
//
//功能描述: 删除文件。
//
//入口参数: pFileName 文件名,必须8个字节
// pExtName 扩展名,必须3个字节
//
//返回值: 是否删除成功。
//============================================================================================================
BOOL CMD_Remove( char* pFileName, char* pExtName )
{
DWORD i;
//复制文件名和扩展名
for (i=0; i<8; i++)
vCMD_pCommand->Parameter[i] = pFileName[i];
for (i=0; i<3; i++)
vCMD_pCommand->Parameter[i+8] = pExtName[i];
vCMD_pCommand->Command = cCMD_CMD_REMOVE_FILE;
if (!CMD_DoCommand(66, 64, cCMD_CMD_REMOVE_FILE_RSP))
{ return FALSE; }
else
{
return ((vCMD_pStatus->Command == cCMD_CMD_REMOVE_FILE_RSP) && (vCMD_pStatus->Result));
}
}
//============================================================================================================
//函数名: CMD_GetCapacity
//
//调用关系: 被 外部函数 调用。
//
//功能描述: 得到U盘容量和剩余空间。
//
//出口参数: 无
//
//返回值: U盘容量和剩余空间。
//============================================================================================================
BOOL CMD_GetCapacity( DWORD* AvailableSpace, DWORD* FreeSpace )
{
vCMD_pCommand->Command = cCMD_CMD_GET_CAPACITY;
if (!CMD_DoCommand(66, 64, cCMD_CMD_GET_CAPACITY_RSP))
{ return FALSE; }
else
{
if (((vCMD_pStatus->Command == cCMD_CMD_GET_CAPACITY_RSP) && (vCMD_pStatus->Result)))
{
*AvailableSpace = (vCMD_pStatus->Parameter[0]) + (vCMD_pStatus->Parameter[1])<<8
+ (vCMD_pStatus->Parameter[2])<<16 + (vCMD_pStatus->Parameter[3])<<24;
*FreeSpace = (vCMD_pStatus->Parameter[4]) + (vCMD_pStatus->Parameter[5])<<8
+ (vCMD_pStatus->Parameter[6])<<16 + (vCMD_pStatus->Parameter[7])<<24;
return TRUE;
}
else
{ return FALSE; }
}
}
//============================================================================================================
//============================================================================================================
//
// End of File
//
//============================================================================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?