📄 mscuser.lst
字号:
294 1 BulkBuf[ 1] = 0x00;
295 1 BulkBuf[ 2] = 0x02; /* Sense Key */
296 1 BulkBuf[ 3] = 0x00;
297 1 BulkBuf[ 4] = 0x00;
298 1 BulkBuf[ 5] = 0x00;
299 1 BulkBuf[ 6] = 0x00;
300 1 BulkBuf[ 7] = 0x0A; /* Additional Length */
301 1 BulkBuf[ 8] = 0x00;
302 1 BulkBuf[ 9] = 0x00;
303 1 BulkBuf[10] = 0x00;
304 1 BulkBuf[11] = 0x00;
305 1 BulkBuf[12] = 0x30; /* ASC */
306 1 BulkBuf[13] = 0x01; /* ASCQ */
307 1 BulkBuf[14] = 0x00;
308 1 BulkBuf[15] = 0x00;
309 1 BulkBuf[16] = 0x00;
310 1 BulkBuf[17] = 0x00;
311 1
312 1 BulkLen = 18;
313 1 DataInTransfer();
314 1 }
315
316
317 /*
318 * MSC SCSI Inquiry Callback
319 * Parameters: None (global variables)
320 * Return Value: None
321 */
322
ARM COMPILER V2.53, mscuser 12/06/06 10:18:25 PAGE 6
323 void MSC_Inquiry (void) {
324 1
325 1 if (!DataInFormat()) return;
326 1
327 1 BulkBuf[ 0] = 0x00; /* Direct Access Device */
328 1 BulkBuf[ 1] = 0x80; /* RMB = 1: Removable Medium */
329 1 BulkBuf[ 2] = 0x00; /* Version: No conformance claim to standard */
330 1 BulkBuf[ 3] = 0x01;
331 1
332 1 BulkBuf[ 4] = 36-4; /* Additional Length */
333 1 BulkBuf[ 5] = 0x80; /* SCCS = 1: Storage Controller Component */
334 1 BulkBuf[ 6] = 0x00;
335 1 BulkBuf[ 7] = 0x00;
336 1
337 1 BulkBuf[ 8] = 'M'; /* Vendor Identification */
338 1 BulkBuf[ 9] = 'C';
339 1 BulkBuf[10] = 'U';
340 1 BulkBuf[11] = 'Z';
341 1 BulkBuf[12] = 'o';
342 1 BulkBuf[13] = 'n';
343 1 BulkBuf[14] = 'e';
344 1 BulkBuf[15] = ' ';
345 1
346 1 BulkBuf[16] = 'L'; /* Product Identification */
347 1 BulkBuf[17] = 'P';
348 1 BulkBuf[18] = 'C';
349 1 BulkBuf[19] = '2';
350 1 BulkBuf[20] = '1';
351 1 BulkBuf[21] = '4';
352 1 BulkBuf[22] = '2';
353 1 BulkBuf[23] = ' ';
354 1 BulkBuf[24] = 'D';
355 1 BulkBuf[25] = 'i';
356 1 BulkBuf[26] = 's';
357 1 BulkBuf[27] = 'k';
358 1 BulkBuf[28] = ' ';
359 1 BulkBuf[29] = ' ';
360 1 BulkBuf[30] = ' ';
361 1 BulkBuf[31] = ' ';
362 1
363 1 BulkBuf[32] = '1'; /* Product Revision Level */
364 1 BulkBuf[33] = '.';
365 1 BulkBuf[34] = '0';
366 1 BulkBuf[35] = ' ';
367 1
368 1 BulkLen = 36;
369 1 DataInTransfer();
370 1 }
371
372
373 /*
374 * MSC SCSI Mode Sense (6-Byte) Callback
375 * Parameters: None (global variables)
376 * Return Value: None
377 */
378
379 void MSC_ModeSense6 (void) {
380 1
381 1 if (!DataInFormat()) return;
382 1
383 1 BulkBuf[ 0] = 0x03;
384 1 BulkBuf[ 1] = 0x00;
385 1 BulkBuf[ 2] = 0x00;
386 1 BulkBuf[ 3] = 0x00;
387 1
388 1 BulkLen = 4;
ARM COMPILER V2.53, mscuser 12/06/06 10:18:25 PAGE 7
389 1 DataInTransfer();
390 1 }
391
392
393 /*
394 * MSC SCSI Mode Sense (10-Byte) Callback
395 * Parameters: None (global variables)
396 * Return Value: None
397 */
398
399 void MSC_ModeSense10 (void) {
400 1
401 1 if (!DataInFormat()) return;
402 1
403 1 BulkBuf[ 0] = 0x00;
404 1 BulkBuf[ 1] = 0x06;
405 1 BulkBuf[ 2] = 0x00;
406 1 BulkBuf[ 3] = 0x00;
407 1 BulkBuf[ 4] = 0x00;
408 1 BulkBuf[ 5] = 0x00;
409 1 BulkBuf[ 6] = 0x00;
410 1 BulkBuf[ 7] = 0x00;
411 1
412 1 BulkLen = 8;
413 1 DataInTransfer();
414 1 }
415
416
417 /*
418 * MSC SCSI Read Capacity Callback
419 * Parameters: None (global variables)
420 * Return Value: None
421 */
422
423 void MSC_ReadCapacity (void) {
424 1
425 1 if (!DataInFormat()) return;
426 1
427 1 /* Last Logical Block */
428 1 BulkBuf[ 0] = ((MSC_BlockCount - 1) >> 24) & 0xFF;
429 1 BulkBuf[ 1] = ((MSC_BlockCount - 1) >> 16) & 0xFF;
430 1 BulkBuf[ 2] = ((MSC_BlockCount - 1) >> 8) & 0xFF;
431 1 BulkBuf[ 3] = ((MSC_BlockCount - 1) >> 0) & 0xFF;
432 1
433 1 /* Block Length */
434 1 BulkBuf[ 4] = (MSC_BlockSize >> 24) & 0xFF;
435 1 BulkBuf[ 5] = (MSC_BlockSize >> 16) & 0xFF;
436 1 BulkBuf[ 6] = (MSC_BlockSize >> 8) & 0xFF;
437 1 BulkBuf[ 7] = (MSC_BlockSize >> 0) & 0xFF;
438 1
439 1 BulkLen = 8;
440 1 DataInTransfer();
441 1 }
442
443
444 /*
445 * MSC SCSI Read Format Capacity Callback
446 * Parameters: None (global variables)
447 * Return Value: None
448 */
449
450 void MSC_ReadFormatCapacity (void) {
451 1
452 1 if (!DataInFormat()) return;
453 1
454 1 BulkBuf[ 0] = 0x00;
ARM COMPILER V2.53, mscuser 12/06/06 10:18:25 PAGE 8
455 1 BulkBuf[ 1] = 0x00;
456 1 BulkBuf[ 2] = 0x00;
457 1 BulkBuf[ 3] = 0x08; /* Capacity List Length */
458 1
459 1 /* Block Count */
460 1 BulkBuf[ 4] = (MSC_BlockCount >> 24) & 0xFF;
461 1 BulkBuf[ 5] = (MSC_BlockCount >> 16) & 0xFF;
462 1 BulkBuf[ 6] = (MSC_BlockCount >> 8) & 0xFF;
463 1 BulkBuf[ 7] = (MSC_BlockCount >> 0) & 0xFF;
464 1
465 1 /* Block Length */
466 1 BulkBuf[ 8] = 0x02; /* Descriptor Code: Formatted Media */
467 1 BulkBuf[ 9] = (MSC_BlockSize >> 16) & 0xFF;
468 1 BulkBuf[10] = (MSC_BlockSize >> 8) & 0xFF;
469 1 BulkBuf[11] = (MSC_BlockSize >> 0) & 0xFF;
470 1
471 1 BulkLen = 12;
472 1 DataInTransfer();
473 1 }
474
475
476 /*
477 * MSC Get Command Block Wrapper Callback
478 * Parameters: None (global variables)
479 * Return Value: None
480 */
481
482 void MSC_GetCBW (void) {
483 1 DWORD n;
484 1
485 1 for (n = 0; n < BulkLen; n++) {
486 2 *((BYTE *)&CBW + n) = BulkBuf[n];
487 2 }
488 1 if ((BulkLen == sizeof(CBW)) && (CBW.dSignature == MSC_CBW_Signature)) {
489 2 /* Valid CBW */
490 2 CSW.dTag = CBW.dTag;
491 2 CSW.dDataResidue = CBW.dDataLength;
492 2 if ((CBW.bLUN != 0) || (CBW.bCBLength < 1) || CBW.bCBLength > 16) {
493 3 fail: CSW.bStatus = CSW_CMD_FAILED;
494 3 MSC_SetCSW();
495 3 } else {
496 3 switch (CBW.CB[0]) {
497 4 case SCSI_TEST_UNIT_READY:
498 4 MSC_TestUnitReady();
499 4 break;
500 4 case SCSI_REQUEST_SENSE:
501 4 MSC_RequestSense();
502 4 break;
503 4 case SCSI_FORMAT_UNIT:
504 4 goto fail;
505 4 case SCSI_INQUIRY:
506 4 MSC_Inquiry();
507 4 break;
508 4 case SCSI_START_STOP_UNIT:
509 4 goto fail;
510 4 case SCSI_MEDIA_REMOVAL:
511 4 goto fail;
512 4 case SCSI_MODE_SELECT6:
513 4 goto fail;
514 4 case SCSI_MODE_SENSE6:
515 4 MSC_ModeSense6();
516 4 break;
517 4 case SCSI_MODE_SELECT10:
518 4 goto fail;
519 4 case SCSI_MODE_SENSE10:
520 4 MSC_ModeSense10();
ARM COMPILER V2.53, mscuser 12/06/06 10:18:25 PAGE 9
521 4 break;
522 4 case SCSI_READ_FORMAT_CAPACITIES:
523 4 MSC_ReadFormatCapacity();
524 4 break;
525 4 case SCSI_READ_CAPACITY:
526 4 MSC_ReadCapacity();
527 4 break;
528 4 case SCSI_READ10:
529 4 if (MSC_RWSetup()) {
530 5 if ((CBW.bmFlags & 0x80) != 0) {
531 6 IOSET1 = LED_RD; /* Turn On Read LED */
532 6 BulkStage = MSC_BS_DATA_IN;
533 6 MSC_MemoryRead();
534 6 } else {
535 6 USB_SetStallEP(MSC_EP_OUT);
536 6 CSW.bStatus = CSW_PHASE_ERROR;
537 6 MSC_SetCSW();
538 6 }
539 5 }
540 4 break;
541 4 case SCSI_WRITE10:
542 4 if (MSC_RWSetup()) {
543 5 if ((CBW.bmFlags & 0x80) == 0) {
544 6 IOSET1 = LED_WR; /* Turn On Write LED */
545 6 BulkStage = MSC_BS_DATA_OUT;
546 6 } else {
547 6 USB_SetStallEP(MSC_EP_IN);
548 6 CSW.bStatus = CSW_PHASE_ERROR;
549 6 MSC_SetCSW();
550 6 }
551 5 }
552 4 break;
553 4 case SCSI_VERIFY10:
554 4 if (MSC_RWSetup()) {
555 5 if ((CBW.bmFlags & 0x80) == 0) {
556 6 BulkStage = MSC_BS_DATA_OUT;
557 6 MemOK = TRUE;
558 6 } else {
559 6 USB_SetStallEP(MSC_EP_IN);
560 6 CSW.bStatus = CSW_PHASE_ERROR;
561 6 MSC_SetCSW();
562 6 }
563 5 }
564 4 break;
565 4 default:
566 4 goto fail;
567 4 }
568 3 }
569 2 } else {
570 2 /* Invalid CBW */
571 2 USB_SetStallEP(MSC_EP_IN);
572 2 USB_SetStallEP(MSC_EP_OUT);
573 2 BulkStage = MSC_BS_ERROR;
574 2 }
575 1 }
576
577
578 /*
579 * MSC Set Command Status Wrapper Callback
580 * Parameters: None (global variables)
581 * Return Value: None
582 */
583
584 void MSC_SetCSW (void) {
585 1
586 1 CSW.dSignature = MSC_CSW_Signature;
ARM COMPILER V2.53, mscuser 12/06/06 10:18:25 PAGE 10
587 1 USB_WriteEP(MSC_EP_IN, (BYTE *)&CSW, sizeof(CSW));
588 1 BulkStage = MSC_BS_CSW;
589 1 }
590
591
592 /*
593 * MSC Bulk In Callback
594 * Parameters: None (global variables)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -