📄 halscsi.lst
字号:
C51 COMPILER V8.01 HALSCSI 04/17/2008 09:46:26 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE HALSCSI
OBJECT MODULE PLACED IN .\Debug\halscsi.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE usbhost\halscsi.c LARGE OPTIMIZE(9,SIZE) NOINTPROMOTE INCDIR(.\common;.\e2p
-rom;.\file;.\fmtx;.\ir;.\keyboard;.\lcm;.\led;.\main;.\matrixkey;.\mp3ctrl;.\sd;.\usbhost;.\include;.\lib) DEBUG OBJECTE
-XTEND PRINT(.\Debug\halscsi.lst) OBJECT(.\Debug\halscsi.obj)
line level source
1 /****************************************************************
2 * Viaon Technology (Suzhou) Co.,Ltd
3 *
4 * Copyright 2007, Viaon Technology (Suzhou) Co.,Ltd,Suzhou,China
5 * All rights reserved.
6 *
7 *
8 * Filename: halscsi.c
9 *
10 * Programmer: Greg
11 *
12 * Created: 1/2/2008
13 *
14 * Description: public functions
15 *
16 *
17 * Change History (most recent first): 2008.1.2
18 ****************************************************************/
19 #include "utiltypedef.h"
20 #include "common.h"
21 #include "halusbhost.h"
22 #include "halscsi.h"
23 #include "scsicmd.h"
24
25 TPB_STRUC TPBulk_Block;
26
27 extern XXGFLAGS bdata bXXGFlags; //union XXGFLAGS is defined in common.h
28 extern BYTE DBUF[SECT_LEN];
29 extern XXGPKG usbstack;
30
31 static void CBWSetup(BYTE flag, BYTE cdblen, DWORD datlen )
32 {
33 1 TPBulk_CBW.dCBW_Signature = CBW_SIGNATURE;
34 1 TPBulk_CBW.dCBW_Tag = 0x60a624de;
35 1 TPBulk_CBW.dCBW_DataXferLen = datlen;
36 1 TPBulk_CBW.bCBW_Flag = flag;
37 1 TPBulk_CBW.bCBW_LUN = 0;
38 1 TPBulk_CBW.bCBW_CDBLen = cdblen;
39 1
40 1 return;
41 1 }
42
43 static void CSWRcv(void)
44 {
45 1 bXXGFlags.bIN_ISR = 0x0;
46 1 usbstack.bRdFlag = RD_FLAG_BUF;
47 1
48 1 epBulkRcv((BYTE *)&TPBulk_CSW,13);
49 1
50 1 return;
51 1 }
52
53 ///////////////////////////////////////////////////////////////////////////
C51 COMPILER V8.01 HALSCSI 04/17/2008 09:46:26 PAGE 2
54 void EnumMassDev(void)
55 {
56 1
57 1 //BYTE countroot=0;
58 1 //fat[4],*pt;
59 1 //pMBR_BLOCK pMBR;
60 1 //pBPB_BLOCK pBPB;
61 1 //pBPB_BLOCK32 pBPB32;
62 1 ////////////////////////////////////////////////////
63 1 SPC_Inquiry();
64 1 UartOutText("SPC_Inquiry \r\n");
65 1
66 1 SPC_TestUnit();
67 1
68 1 DelayUs(5);
69 1
70 1 SPC_RequestSense();
71 1 UartOutText("SPC_RequestSense 1\r\n");
72 1
73 1 SPC_TestUnit();
74 1
75 1 DelayUs(5);
76 1 RBC_ReadCapacity();
77 1 UartOutText("RBC_ReadCapacity 1\r\n");
78 1
79 1 ////////////////////////////////////////////////////
80 1 #if 0
if(!SPC_RequestSense())
return FALSE;
UartOutText("SPC_RequestSense 2\r\n");
// DelayUs(5);
// if(!SPC_TestUnit())
// return FALSE;
DelayUs(5);
if(!RBC_ReadCapacity())
return FALSE;
UartOutText("RBC_ReadCapacity 2\r\n");
#endif
94 1 ///////////////////////////////////////////////////////
95 1 // return TRUE;
96 1 }
97
98 /*unsigned char TPBulk_GetMaxLUN(void)
99 {
100
101 usbstack.setup.bmRequest=0xa1;
102 usbstack.setup.bRequest=0xfe;
103 usbstack.setup.wValue=0;
104 usbstack.setup.wIndex=0;
105 usbstack.setup.wLength=1;
106 usbstack.buffer=DBUF;
107 return ep0Xfer();
108
109 }
110 */
111
112 void SPC_Inquiry(void)
113 {
114 1 #define cdbInquirySPC RBC_CDB.SpcCdb_Inquiry
115 1
C51 COMPILER V8.01 HALSCSI 04/17/2008 09:46:26 PAGE 3
116 1 //unsigned char len;
117 1 //unsigned char retStatus=FALSE;
118 1 CBWSetup(0x80, sizeof(INQUIRY_SPC), 0x24000000 );
119 1
120 1 /////////////////////////////////
121 1 cdbInquirySPC.OperationCode=SPC_CMD_INQUIRY;
122 1 cdbInquirySPC.EnableVPD=0;
123 1 cdbInquirySPC.CmdSupportData=0;
124 1 cdbInquirySPC.PageCode=0;
125 1 cdbInquirySPC.AllocationLen=0x24;
126 1 cdbInquirySPC.Control=0;
127 1 ////////////////////////////////
128 1 //if(!epBulkRcv(DBUF,5))
129 1 // return FALSE;
130 1 // if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
131 1 epBulkSend((unsigned char *)&TPBulk_CBW,31);
132 1
133 1 //DelayUs(150);
134 1 //len=36;
135 1 usbstack.bRdFlag = RD_FLAG_BUF;
136 1 epBulkRcv(DBUF,36); // FIXME: 38 including crc??, but here we get rid of crc via reset
137 1
138 1 #if (UART_DEBUG == UART_DEBUG_ENABLE)
UartOutText("Inquiry_PDT: "); UartOutValue(DBUF[0], 2);
UartOutText("Inquiry_RMB: "); UartOutValue(DBUF[1], 2);
UartOutText("Inquiry_SPC: "); UartOutValue(DBUF[2], 2);
#endif
143 1
144 1 CSWRcv();
145 1
146 1 // return TRUE;
147 1 #undef cdbInquirySPC
148 1 }
149
150 /*unsigned char SPC_READLONG(void)
151 {
152 #define cdbReadLong RBC_CDB.SpcCdb_ReadLong
153 //nsigned char retStatus=FALSE;
154 TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
155 TPBulk_CBW.dCBW_Tag=0x60a624de;
156 TPBulk_CBW.dCBW_DataXferLen=0xfc000000;
157 TPBulk_CBW.bCBW_Flag=0x80;
158 TPBulk_CBW.bCBW_LUN=0;
159 TPBulk_CBW.bCBW_CDBLen=sizeof(READ_LONG_CMD);
160
161 /////////////////////////////////////
162 cdbReadLong.OperationCode=SPC_CMD_READLONG;
163 cdbReadLong.LogicalUnitNum=0;
164 cdbReadLong.AllocationLen=0xfc;
165 //////////////////////////////////////
166 if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
167 return FALSE;
168 DelayUs(5);
169 //len=36;
170 if(!epBulkRcv(DBUF,0xfc))
171 return FALSE;
172
173 if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
174 return FALSE;
175 ////////////////////////////
176 return TRUE;
177 #undef cdbReadLong
C51 COMPILER V8.01 HALSCSI 04/17/2008 09:46:26 PAGE 4
178 } */
179 void SPC_RequestSense(void)
180 {
181 1 #define cdbRequestSenseSPC RBC_CDB.SpcCdb_RequestSense
182 1 //unsigned char retStatus=FALSE;
183 1 CBWSetup(0x80, sizeof(REQUEST_SENSE_SPC), 0x12000000 );
184 1
185 1 /////////////////////////////////////
186 1 cdbRequestSenseSPC.OperationCode=SPC_CMD_REQUESTSENSE;
187 1 cdbRequestSenseSPC.AllocationLen= 0x12;//0x0e;
188 1 //////////////////////////////////////
189 1 // if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
190 1 epBulkSend((BYTE *)&TPBulk_CBW,31);
191 1
192 1 //len=36;
193 1 usbstack.bRdFlag = RD_FLAG_BUF;
194 1 epBulkRcv(DBUF,0x12);
195 1
196 1 CSWRcv();
197 1
198 1 // return TRUE;
199 1 #undef cdbRequestSenseSPC
200 1 }
201
202 void SPC_TestUnit(void)
203 {
204 1 #define cdbTestUnit RBC_CDB.SpcCdb_TestUnit
205 1 //unsigned char retStatus=FALSE;
206 1 CBWSetup(0x00, sizeof(TEST_UNIT_SPC), 0x00000000 );
207 1
208 1 /////////////////////////////////////
209 1 cdbTestUnit.OperationCode=SPC_CMD_TESTUNITREADY;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -