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