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

📄 rbc.c

📁 smartARM2400 USB OTG例程
💻 C
📖 第 1 页 / 共 4 页
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               Rbc.c
** Latest modified Date:    2007-10-8
** Latest Version:          1.0
** Descriptions:            这是SCSI基本命令的子集。这部分代码用于对主机发出的SCSI命令进行解码
**
**--------------------------------------------------------------------------------------------------------
** Created by:              Lizhenming
** Created date:            2007-09-14
** Version:                 1.0
** Descriptions:            The original version
**
*********************************************************************************************************/
#include "RbcBasicType.h"
#include "Hal4Rbc.h"                                                                    
#include "RBC.h"
#include "RBCCmd.h"
#include "massStorage.h"
#include "tpbulk.h"                                                                 
                                                                     

/*********************************************************************************************************
  Private Data
*********************************************************************************************************/
#if 1
typedef __packed union _RBC_PROP {
	 __packed struct {
        unsigned    MediumRemovFlag : 2;
	    unsigned    MediumState : 2;
	    unsigned    PowerState : 4;
    } bits;

    __uint8 value;
} __RBC_PROPERTY, * __PRBC_PROPERTY;

#define __GrbcPropertyData   __GrbcPropertyDatas[__GbCurLun]
static __RBC_PROPERTY        __GrbcPropertyDatas[__MAXLUN+1];           /*  储存器的状态属性            */

#endif

/*
 *  储存设备存储每个命令块的执行结果状态作为判别数据,判别数据通过请求判别命令被返回到主机。判别数据包括
 *  三层越来越详细的错误代码。判别键(SenseKey)提供可反映出错误和异常条件的普通范畴。附加判别代码(ASC)提
 *  供描述判别键的更多信息。附加判别代码限定词(ASCQ)为附加判别代码增添更多详细的内容。
 */

static __REQUEST_SENSE_DATA  __GrbcSenseData = 
{
    /*
     *  0x70, 0x00, 0x06, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x29,
     *  0x00, 0x00, 0x00, 0x00, 0x00
     */
    
     0xf0,                                                              /*  INT8 ResponseCode : 7;      */
	 0,                                                                 /*  INT8 Valid : 1;             */

	 0,                                                                 /*  INT8 SegmentNum;            */

	 0x5,                                                               /*  INT8 SenseKey : 4;5=        */
	                                                                    /*       illegal request        */
	 0,                                                                 /*  INT8 Reserved0 : 1;         */
	 0,                                                                 /*  INT8 WrongLenIndicator : 1; */
	 0,                                                                 /*  INT8 EndofMedium : 1;       */
	 0,                                                                 /*  INT8 FileMark : 1;          */

	 0,                                                                 /*  INT8 Info_0;                */
	 0,                                                                 /*  INT8 Info_1;                */
	 0,                                                                 /*  INT8 Info_2;                */
	 0,                                                                 /*  INT8 Info_3;                */

	0xA,                                                                /*  INT8 AdditionalSenseLen;    */

	0,                                                                  /*  INT8 CommandSpecInfo_0;     */
	0,                                                                  /*  INT8 CommandSpecInfo_1;     */
	0,                                                                  /*  INT8 CommandSpecInfo_2;     */
	0,                                                                  /*  INT8 CommandSpecInfo_3;     */    

	0x20,                                                               /*  INT8 ASC;                   */
	0,                                                                  /*  INT8 ASCQ;                  */
	0,                                                                  /*  INT8 ReplacableUnitCode;    */
	0,                                                                  /*  INT8 SenseKeySpec_0 : 7;    */
	0,                                                                  /*  INT8 SenseKeySpecValid : 1; */
	0,                                                                  /*  INT8 SenseKeySpec_1;        */
	0                                                                   /*  INT8 SenseKeySpec_2;        */
    

};                      

/*********************************************************************************************************
  模式参数页
*********************************************************************************************************/
/*
 *  模式参量列表包含一个表头,后面跟随着设备参数页
 */
#define __PARAMETER_LIST_LENGTH (sizeof(__MODE_PARAMETER_HEAD)+sizeof(__MODE_RBC_DEVICE_PARAMETERS_PAGE))
                                                                        /*  Default Device Para. Page   */

#define __DEFAULT_DEV_PAGE {                                            /*  Mode parameter header(6)   */\
    {\
    	__PARAMETER_LIST_LENGTH-1,                                      /*  mode data length (exclude */\
    	                                                                /*  the number of bytes in the */\
                                                                        /*  MODE DATA LENGTH field.    */\
    	0,                                                              /*  medium type                */\
    	0,                                                              /*  device spec Param          */\
    	0                                                               /*  block Descriptor length    */\
    },\
                                                                        /*  device  parameter page     */\
    {\
    	__MODE_PAGE_RBC_DEVICE_PARAMETERS,                              /*  Page Code                  */\
    	0,                                                              /*  Reserved                   */\
    	1,                                                              /*  PageSavable                */\
\
    	0x0B,                                                           /*  PageLength                 */\
\
    	0,                                                              /*  WriteCacheDisable          */\
    	00,                                                             /*  Reserved                   */\
\
    	{	                                                            /*  Logical block Size =       */\
    		0x02,                                                       /*  512 Bytes                  */\
    		0x00\
    	},\
\
    	{		                                                        /*  Number of logical blocks   */\
    		0x00,\
    		0x00,\
            0x00,\
    		0x00,\
            0x00\
        },\
\
        0xFF,                                                           /*  Power/Peformance           */\
\
        0,                                                              /*  LockDisable                */\
        0,                                                              /*  FormatDisable              */\
        0,                                                              /*  WriteDisable               */\
        0,                                                              /*  ReadDisable                */\
        0x0,                                                            /*  Reserved                   */\
\
    	0x00                                                            /*  Reserved                   */\
	}\
}

#define __GdefaultParaPage  __GdefaultParaPages[__GbCurLun]
static const __MODE_PAGE __GdefaultParaPages[__MAXLUN+1] =
{
     __DEFAULT_DEV_PAGE
#if __MAXLUN > 0
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 1
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 2
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 3
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 4
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 5
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 6
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 7
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 8
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 9
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 10
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 11
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 12
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 13
    ,__DEFAULT_DEV_PAGE
#endif
#if __MAXLUN > 14
    ,__DEFAULT_DEV_PAGE
#endif
};

/*
 *  可变的模式参数的掩码。在这个掩码里,可变的模式参数字段将全部设置为1位,以及不可变的模式参数字段
 *  将全部设置为0位。
 */
static const __MODE_PARAMETER_HEAD __GparaHeadMask =                                
{
	__PARAMETER_LIST_LENGTH - 1,                                        /*  mode data length (exclude  */
	                                                                    /*  the number of bytes in the  */
                                                                        /*  MODE DATA LENGTH field.     */
	0,                                                                  /*  medium type                 */
	0,                                                                  /*  device spec Param           */
	0                                                                   /*  block Descriptor length     */
};
                                                                       
static const __MODE_RBC_DEVICE_PARAMETERS_PAGE __GparaPageMask =
{
	__MODE_PAGE_RBC_DEVICE_PARAMETERS,                                  /*  Page Code                   */
	0,                                                                  /*  Reserved                    */
	0,                                                                  /*  PageSavable                 */

	0x00,                                                               /*  PageLength                  */

	0,                                                                  /*  WriteCacheDisable           */
	00,                                                                 /*  Reserved                    */

	{                                                                   /*  Logical block Size =        */
		0x00,                                                           /*  512 Bytes                   */
		0x00
	},

	{                                                                   /*  Number of logical blocks    */
		0x00,
		0x00,
		0x00,
		0x00,
		0x00
	},

	0x00,                                                               /*  Power/Peformance            */

	0,                                                                  /*  LockDisable                 */
	0,                                                                  /*  FormatDisable               */
	0,                                                                  /*  WriteDisable                */
	0,                                                                  /*  ReadDisable                 */
	0x0,                                                                /*  Reserved                    */

	0x00                                                                /*  Reserved                    */
};

#define __DEFAULT_VPD_SERIAL_PAGE   \
{\
	__RBC_DEVICE,\
	0x00,\
\
    __VPDPAGE_SERIAL_NUMBER,\
\
    0x00,\
\
    24,                                                                 /*  size of SerialNumber       */\
\
    {                                                                   /*  SerialNumber               */\
    	'0',0,\
	    '0',0,\
	    '0',0,\
	    '0',0,\
\
    	'0',0,\
	    '0',0,\
	    '0',0,\
	    '0',0,\
\
    	'0',0,\
    	'0',0,\
	    '0',0,\
	    '0',0\
    }\
  }


#define __GserialPage   __GserialPages[__GbCurLun]
static const __VPD_SERIAL_PAGE __GserialPages[__MAXLUN+1] =
{
     __DEFAULT_VPD_SERIAL_PAGE
#if __MAXLUN > 0
    ,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 1
    ,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 2
    ,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 3
    ,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 4
    ,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 5
    ,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 6
    ,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 7
    ,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 8
    ,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 9
    ,__DEFAULT_VPD_SERIAL_PAGE
#endif
#if __MAXLUN > 10

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -