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