⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flashdisk.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 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 + -