📄 flashdisk.c
字号:
/* Copyright (C) 2006 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*
File : usb\Flash\Flash.c
Desc : 定义 Flash BLOCK 设备和 USB 的接口实现.
Author : Miaolf
Date :
Notes :
*
* 2007-11-28 15:37 Miaolf for rk27.
*
*/
/***************************************************************************/
#include "include.h"
#include "UsbBlock.h"
//SCSI命令INQUIRY格式
//下面两上必须 4 BYTE 对齐,目前在注册表里保证
UINT8 *SCSI_INQUIRY_Sys;
UINT8 *SCSI_INQUIRY_User;
#if 1
BOOLEAN FlashSysReadSector(UINT32 LBA, UINT32 SecCount, void *buf)
{
BOOLEAN err = TRUE;
UsbReadMulSec(0, LBA, buf, SecCount);
return(err);
}
BOOLEAN FlashUserReadSector(UINT32 LBA, UINT32 SecCount, void *buf)
{
BOOLEAN err = TRUE;
UsbReadMulSec(1, LBA, buf, SecCount);
return(err);
}
BOOLEAN FlashSysWriteSector(UINT32 LBA, UINT32 SecCount, void *buf)
{
BOOLEAN err = TRUE;
UsbWriteMulSec(0, LBA, buf, SecCount);
return(err);
}
BOOLEAN FlashUserWriteSector(UINT32 LBA, UINT32 SecCount, void *buf)
{
BOOLEAN err = TRUE;
UsbWriteMulSec(1, LBA, buf, SecCount);
return(err);
}
#endif
BOOLEAN FlashSysIoCtrl(MSC_IOCTL ioctl, void *pArg)
{
switch (ioctl)
{
case MSC_IOCTL_RESET:
break;
case MSC_IOCTL_GET_GEOMETRY:
{
MSC_GEOMETRY *p = (MSC_GEOMETRY*)pArg;
p->LbaSize = 512;
p->LbaMax = ((UINT32)GetCapacity(0));;
p->Loaded = TRUE;
}
break;
case MSC_IOCTL_FLUSH_CACHE:
UsbCacheFreeAll();
ExchBlkCloseAll();
break;
case MSC_IOCTL_GET_PROPERTIES:
{
MSC_PROPERTIES *p = (MSC_PROPERTIES*)pArg;
p->ProductID = "2007";
p->VendorID = "ffff";
p->Version = "0100";
p->SCSI_Inquiry = (char*)SCSI_INQUIRY_Sys;
p->Removable = FALSE;
}
break;
case MSC_IOCTL_CHECK_STATUS:
{
MSC_STATUS *p = (MSC_STATUS*)pArg;
*p = MSC_STATUS_NO_CHANGE;
}
break;
default:
return FALSE;
}
return TRUE;
}
BOOLEAN FlashUserIoCtrl(MSC_IOCTL ioctl, void *pArg)
{
switch (ioctl)
{
case MSC_IOCTL_RESET:
break;
case MSC_IOCTL_GET_GEOMETRY:
{
MSC_GEOMETRY *p = (MSC_GEOMETRY*)pArg;
p->LbaSize = 512;
p->LbaMax = ((UINT32)GetCapacity(1));;
p->Loaded = TRUE;
}
break;
case MSC_IOCTL_FLUSH_CACHE:
UsbCacheFreeAll();
ExchBlkCloseAll();
break;
case MSC_IOCTL_GET_PROPERTIES:
{
MSC_PROPERTIES *p = (MSC_PROPERTIES*)pArg;
p->ProductID = "2007";
p->VendorID = "ffff";
p->Version = "0100";
p->SCSI_Inquiry = (char*)SCSI_INQUIRY_User;
p->Removable = FALSE;
}
break;
case MSC_IOCTL_CHECK_STATUS:
{
MSC_STATUS *p = (MSC_STATUS*)pArg;
*p = MSC_STATUS_NO_CHANGE;
}
break;
default:
return FALSE;
}
return TRUE;
}
void FlashSysInitialize(MSC_DEVICE *pDev)
{
//memset(RAMDSK_STARTADDR /*RAMDSK_LBA2BUFF(0)*/ , 0xFF , RAMDSK_TOTALBYES );
if (pDev->IoCtrl)
{
pDev->IoCtrl(MSC_IOCTL_GET_LUNSTARTSEC, &pDev->LunStartSec);
}
}
void FlashUserInitialize(MSC_DEVICE *pDev)
{
//memset(RAMDSK_STARTADDR /*RAMDSK_LBA2BUFF(0)*/ , 0xFF , RAMDSK_TOTALBYES );
if (pDev->IoCtrl)
{
pDev->IoCtrl(MSC_IOCTL_GET_LUNSTARTSEC, &pDev->LunStartSec);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -