📄 halscsi.lst
字号:
210 1 //////////////////////////////////////
211 1 // if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
212 1 epBulkSend((BYTE *)&TPBulk_CBW,31);
213 1
214 1 CSWRcv();
215 1
216 1 // return TRUE;
217 1 #undef cdbTestUnit
218 1 ////////////////////////////
219 1 }
220
221 /*
222 unsigned char SPC_LockMedia(void)
223 {
224 #define cdbLockSPC RBC_CDB.SpcCdb_Remove
225 //unsigned char retStatus=FALSE;
226 TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
227 TPBulk_CBW.dCBW_Tag=0x60a624de;
228 TPBulk_CBW.dCBW_DataXferLen=0x00000000;
229 TPBulk_CBW.bCBW_Flag=0x00;
230 TPBulk_CBW.bCBW_LUN=0;
231 TPBulk_CBW.bCBW_CDBLen=sizeof(MEDIA_REMOVAL_SPC);
232 ///////////////////////////////////////////
233 cdbLockSPC.OperationCode=SPC_CMD_PRVENTALLOWMEDIUMREMOVAL;
234 cdbLockSPC.Prevent=1;
235 ///////////////////////////////////////////
236 // if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
237 if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
238 return FALSE;
239 DelayUs(5);
C51 COMPILER V8.01 HALSCSI 04/17/2008 09:46:26 PAGE 5
240
241 if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
242 return FALSE;
243 #undef cdbLockSPC
244 /////////////////////////////
245 return TRUE;
246 }
247 */
248 void RBC_ReadCapacity(void)
249 {
250 1 DWORD blksize;
251 1
252 1 #define cdbReadCap RBC_CDB.RbcCdb_ReadCapacity
253 1 //unsigned char retStatus=FALSE;
254 1 CBWSetup(0x80, sizeof(READ_CAPACITY_RBC), 0x08000000 );
255 1 /////////////////////////////////////
256 1 memclr(&cdbReadCap, sizeof(READ_CAPACITY_RBC));
257 1 cdbReadCap.OperationCode=RBC_CMD_READCAPACITY;
258 1 /////////////////////////////////////
259 1 epBulkSend((BYTE *)&TPBulk_CBW,31);
260 1
261 1
262 1 usbstack.bRdFlag = RD_FLAG_BUF;
263 1 epBulkRcv(DBUF,8);
264 1
265 1 blksize = *((DWORD *)(&DBUF[4]));//(DBUF[4]<<24)|(DBUF[5]<<16)|(DBUF[6]<<8)|(DBUF[7]<<0);
266 1 UartOutText("bulk size:"); UartOutValue(blksize, 8);
267 1 halUsbPhyBlksize(blksize);
268 1 #if (UART_DEBUG == UART_DEBUG_ENABLE)
{
DWORD maxlba;
maxlba = *((DWORD *)(&DBUF[0])); //(DBUF[0]<<24)|(DBUF[1]<<16)|(DBUF[2]<<8)|(DBUF[3]<<0);
UartOutText("ReadCapacity_MaxLba: "); UartOutValue(maxlba, 8);
UartOutText("ReadCapacity_BlkSize: "); UartOutValue(blksize, 8);
}
#endif
276 1
277 1 CSWRcv();
278 1
279 1 // return TRUE;
280 1 #undef cdbReadCap
281 1 }
282
283 //lba, offset: Figure out the data to be read. The usb device will transfer the whole sector(maybe > 512B)
- according lba.
284 // But only 512B in this sector will be used accroding offset.
285 //flag: read to buffer, or read to mp3 decode buffer(HW)
286 BYTE RBC_ReadOneSec(DWORD lba, BYTE *pBuffer, BYTE flag, BYTE offset)
287 {
288 1 #define cdbRead RBC_CDB.RbcCdb_Read
289 1 BYTE cnt, i;
290 1 bXXGFlags.bIN_ISR = 0x0;
291 1 //usbstack.dwLba = lba;
292 1
293 1 //unsigned char retStatus=FALSE;
294 1 CBWSetup(0x80, sizeof(READ_RBC), SwapINT32(usbstack.wPhyBlkSize) );
295 1 /////////////////////////////////////
296 1 cdbRead.OperationCode=RBC_CMD_READ10;
297 1 cdbRead.VendorSpecific=0;
298 1 cdbRead.LBA.LBA_W32=lba;
299 1 cdbRead.XferLength=0x1;
300 1 //cdbRead.Reserved1[0]=0;
C51 COMPILER V8.01 HALSCSI 04/17/2008 09:46:26 PAGE 6
301 1 //cdbRead.Reserved1[1]=0;
302 1 //cdbRead.Reserved1[2]=0x40;
303 1 //////////////////////////////////////
304 1 if(flag == RBC_READ_BUF){
305 2 //UartOutText("-I-: /*-FAT-*/");
306 2 //UartOutText("-I-: offset=");UartOutValue(offset, 2);
307 2 //UartOutText("-I-: lba=");UartOutValue(lba, 2);
308 2 epBulkSend((BYTE *)&TPBulk_CBW,31);
309 2
310 2 //cnt = 1<<(usbstack.bPhyBlkSizeExp - BLKSIZE_512_EXP);
311 2 cnt = usbstack.bMaxOffset;
312 2 for(i=0; i<=cnt; i++){
313 3 if(i==offset){
314 4 usbstack.bRdFlag = RD_FLAG_BUF;
315 4 }else{
316 4 usbstack.bRdFlag = RD_FLAG_TEMP;
317 4 bXXGFlags.bIN_ISR = 0x0;
318 4 }
319 3 epBulkRcv(pBuffer,512);
320 3 }
321 2
322 2 CSWRcv();
323 2 }else{//RBC_READ_MP3
324 2 //UartOutText("-I-: /*-MP3-*/");
325 2 //UartOutText("-I-: offset=");UartOutValue(offset, 2);
326 2 //UartOutText("-I-: lba=");UartOutValue(lba, 2);
327 2 //UartOutText("-I-: bPhyBlkSizeExp=");UartOutValue(usbstack.bPhyBlkSizeExp, 2);
328 2 usbstack.bOffset = offset;
329 2 if(offset == 0){
330 3 epBulkSend((BYTE *)&TPBulk_CBW,31);
331 3 }
332 2
333 2 bXXGFlags.bIN_ISR = 0x1;
334 2 epBulkRcv(pBuffer,512);
335 2
336 2 if(offset == usbstack.bMaxOffset) // the last 512B block in this physical sector.
337 2 CSWRcv();
338 2 }
339 1
340 1 return TRUE;
341 1 #undef cdbRead
342 1 /////////////////////////////
343 1 }
344
345 BYTE RBC_ReadFlush(BOOL bSkip)
346 {
347 1 #if 0
BYTE i;
bXXGFlags.bIN_ISR = 0x0;
usbstack.bRdFlag = RD_FLAG_TEMP;
if(usbstack.bOffset != usbstack.bMaxOffset){ // there are some 512B block in physical sector should be fl
-ushed.
for(i=usbstack.bOffset; i<usbstack.bMaxOffset; i++){
epBulkRcv(DBUF,512);
}
CSWRcv();
}
usbstack.bOffset = usbstack.bMaxOffset;
return TRUE;
C51 COMPILER V8.01 HALSCSI 04/17/2008 09:46:26 PAGE 7
#else
363 1 BYTE byRet = TRUE;
364 1 BYTE i;
365 1 if(usbstack.bOffset != usbstack.bMaxOffset){ // there are some 512B block in physical sector should be fl
-ushed.
366 2 if(bSkip){
367 3 bXXGFlags.bIN_ISR = 0x0;
368 3 usbstack.bRdFlag = RD_FLAG_TEMP;
369 3 for(i=usbstack.bOffset; i<usbstack.bMaxOffset; i++){
370 4 epBulkRcv(DBUF,512);
371 4 }
372 3 CSWRcv();
373 3 }
374 2 else
375 2 byRet = FALSE;
376 2 }
377 1
378 1 return byRet;
379 1 #endif
380 1 }
381
382 #ifdef WRITE_ENABLE_FLAG
BYTE RBC_WriteOneSec(DWORD lba, BYTE *pBuffer)
{
#define cdbWrite RBC_CDB.RbcCdb_Write
BYTE i;
//bXXGFlags.bIN_ISR = 0x0;
CBWSetup(0x0, sizeof(WRITE_RBC), SwapINT32(512) );
/////////////////////////////////////
cdbWrite.OperationCode=RBC_CMD_WRITE10;
cdbWrite.VendorSpecific=0;
cdbWrite.LBA.LBA_W32=lba;
cdbWrite.XferLength=0x01; // One sector
cdbWrite.Reserved2=0;
cdbWrite.Control=0;
//////////////////////////////////////
epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW));
for(i=0; i<=usbstack.bMaxOffset; i++)
epBulkSend(pBuffer, 512);
epBulkRcv((unsigned char *)&TPBulk_CSW,13);
#undef cdbWrite
/////////////////////////////
return TRUE;
}
#endif
410
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 616 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 31 19
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -