?? ufi.lst
字號:
219 1 }
220
221
222 /**************************************************************************
223 * Function Name:
224 *
225 * Descriptions:
226 *
227 * Arguments:
228 *
229 * Returns: None
230 **************************************************************************/
231 UINT8 ufiReadFormatCapacities(void)
232 {
233 1
234 1 LongByte TotalSectors;
235 1 Usb_sel_ep(1);
236 1
237 1 TotalSectors.ULONG =stGetCapacity(gCmdBlock.CB1.LUN) ;
238 1
239 1 //*Capacity List
240 1 //Reserved
C51 COMPILER V8.05a UFI 05/22/2009 15:28:38 PAGE 5
241 1 UEPDATX=0x00;
242 1 UEPDATX=0x00;
243 1 UEPDATX=0x00;
244 1 //Capacity List Length
245 1 UEPDATX= 16 ;
246 1
247 1 //*Current/Maximum Capacity descriptor
248 1 //Number of Blocks
249 1 UEPDATX= TotalSectors.BYTE.B3 ;
250 1 UEPDATX= TotalSectors.BYTE.B2 ;
251 1 UEPDATX= TotalSectors.BYTE.B1 ;
252 1 UEPDATX= TotalSectors.BYTE.B0 ;
253 1
254 1 //Descriptor Code 10b Formatted Media
255 1 UEPDATX= 0x02 ;
256 1
257 1 //Block Length
258 1 UEPDATX= 0x00 ;
259 1 UEPDATX= 0x02 ;
260 1 UEPDATX= 0x00 ;
261 1
262 1 //*Formattable Capacity Descriptor
263 1
264 1 //Number of Block
265 1 UEPDATX= TotalSectors.BYTE.B3 ;
266 1 UEPDATX= TotalSectors.BYTE.B2 ;
267 1 UEPDATX= TotalSectors.BYTE.B1 ;
268 1 UEPDATX= TotalSectors.BYTE.B0 ;
269 1 //Reserved
270 1 UEPDATX= 0x00 ;
271 1 //Block Length
272 1 UEPDATX= 0x00 ;
273 1 UEPDATX= 0x02 ;
274 1 UEPDATX= 0x00 ;
275 1 Usb_set_TXRDY_bit();
276 1 while (!(Usb_tx_complete_bit()));
277 1 Usb_clear_TXCMPL_bit();
278 1 gCBWDataLen-=20;
279 1 if(TotalSectors.ULONG==0)return(1);
280 1 else return(0);
281 1
282 1 }
283
284 /**************************************************************************
285 * Function Name:
286 *
287 * Descriptions:
288 *
289 * Arguments:
290 *
291 * Returns: None
292 **************************************************************************/
293 UINT8 ufiTestUnitReady(void)
294 {
295 1 gCBWDataLen=0;
296 1 return 0;
297 1 }
298
299 /**************************************************************************
300 * Function Name:
301 *
302 * Descriptions:
C51 COMPILER V8.05a UFI 05/22/2009 15:28:38 PAGE 6
303 *
304 * Arguments:
305 *
306 * Returns: None
307 **************************************************************************/
308 UINT8 ufiModeSense6(void)
309 {
310 1
311 1 Usb_sel_ep(1);
312 1 Usb_set_TXRDY_bit();
313 1 while (!(Usb_tx_complete_bit()));
314 1 Usb_clear_TXCMPL_bit();
315 1 return 1;
316 1 }
317 /**************************************************************************
318 * Function Name:
319 *
320 * Descriptions:
321 *
322 * Arguments:
323 *
324 * Returns: None
325 **************************************************************************/
326 UINT8 ufiModeSelect(void)
327 {
328 1 Usb_sel_ep(1);
329 1 Usb_set_TXRDY_bit();
330 1 while (!(Usb_tx_complete_bit()));
331 1 Usb_clear_TXCMPL_bit();
332 1 return 1;
333 1
334 1 }
335
336 /**************************************************************************
337 * Function Name:
338 *
339 * Descriptions:
340 *
341 * Arguments:
342 *
343 * Returns: None
344 **************************************************************************/
345 UINT8 ufiModeSense10(void)
346 {
347 1
348 1 Usb_sel_ep(1);
349 1 Usb_set_TXRDY_bit();
350 1 while (!(Usb_tx_complete_bit()));
351 1 Usb_clear_TXCMPL_bit();
352 1 return 1;
353 1 }
354
355 /**************************************************************************
356 * Function Name:
357 *
358 * Descriptions:
359 *
360 * Arguments:
361 *
362 * Returns: None
363 **************************************************************************/
364 UINT8 UFI_NOTSUPPORT_CMD(void)
C51 COMPILER V8.05a UFI 05/22/2009 15:28:38 PAGE 7
365 {
366 1
367 1 if(gCBWDataLen!=0)
368 1 {
369 2 if(gCBWFlags)//send NULL data on bulk in endpoint.
370 2 {
371 3 Usb_sel_ep(1);
372 3 Usb_set_TXRDY_bit();
373 3 while (!(Usb_tx_complete_bit()));
374 3 Usb_clear_TXCMPL_bit();
375 3 return 1;
376 3 }
377 2 else //STALL bulk-out endpoint.
378 2 { Usb_sel_ep(2);
379 3 Usb_set_STALLRQ();
380 3 return 1;
381 3 }
382 2 }
383 1 else return 1;
384 1
385 1 }
386 /**************************************************************************
387 * Function Name:
388 *
389 * Descriptions:
390 *
391 * Arguments:
392 *
393 * Returns: None
394 **************************************************************************/
395 UINT8 ufiCommandDecoder(void)
396 {
397 1
398 1 //printf("UFICMD:%#X\n",gCmdBlock.CB1.OPcode);
399 1 switch (gCmdBlock.CB1.OPcode) {
400 2 case UFI_RequestSense : //0x03
401 2 return ufiRequestSense();
402 2 case UFI_Inquiry : //0x12
403 2 return ufiInquiry();
404 2 case UFI_ModeSense : //0x5a
405 2 return ufiModeSense10();
406 2 case UFI_ModeSense_ : //0x1a
407 2 return ufiModeSense6();
408 2 case UFI_ModeSelect : //0x55
409 2 case UFI_ModeSelect_ : //0x15
410 2 return ufiModeSelect();
411 2 case UFI_Read10 : //0X28
412 2 return ufiRead10();
413 2 case UFI_ReadCapacity : //0x25
414 2 return ufiReadCapacity();
415 2 case UFI_Write10 :
416 2 return ufiWrite10(); //0X2A
417 2 case UFI_TestUnitReady: //0x00
418 2 return ufiTestUnitReady();
419 2 case UFI_ReadFormatCapacities : //0x23
420 2 return ufiReadFormatCapacities();
421 2 case UFI_AllowMediaRemove : //0x1e
422 2 case UFI_Verify : //0x2f
423 2 return (0);
424 2 default:
425 2 return UFI_NOTSUPPORT_CMD();
426 2 }
C51 COMPILER V8.05a UFI 05/22/2009 15:28:38 PAGE 8
427 1 }
428
429
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 816 ----
CONSTANT SIZE = 36 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 21
IDATA SIZE = 3 ----
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 + -