fat.lst
来自「51环境下的FAT及FAT32文件系统源码」· LST 代码 · 共 1,534 行 · 第 1/5 页
LST
1,534 行
530 =2 unsigned char name[8]; //0
531 =2 unsigned char extension[3]; //9
532 =2 unsigned char attribute; //11
533 =2 unsigned char Reserved[10]; //21
534 =2 unsigned int lastUpdateDate; //23
535 =2 unsigned int lastUpdateTime; //25
536 =2 unsigned int startCluster; //27
537 =2 unsigned long length; //28
538 =2 } DIR_INFO, *pDIR_INFO;
539 =2 /*
540 =2 // Mode Sense
541 =2 */
542 =2 typedef struct _MODE_SENSE_SPC {
543 =2 UINT8 OperationCode; // 1AH
544 =2 UINT8 Reseved0 : 3 ;
545 =2 UINT8 DisableBlockDescriptor : 1 ;
546 =2 UINT8 Reserved0 : 4 ;
547 =2 UINT8 PageCode:6 ;
548 =2 UINT8 PageControl : 2 ;
549 =2 UINT8 Reserved1;
550 =2 UINT8 ParameterLen;
551 =2 UINT8 Control;
552 =2 } MODE_SENSE_SPC, *pMODE_SENSE_SPC;
553 =2
554 =2 /*
555 =2 typedef struct _MODE_PARAMETER_HEAD {
556 =2 UINT8 DataLen;
557 =2 UINT8 MediumType;
558 =2 UINT8 DeviceParameter;
559 =2 UINT8 BlockDescriptorLen;
560 =2 } MODE_PARAMETER_HEAD, *pMODE_PARAMETER_HEAD;
561 =2 */
562 =2 /*
563 =2 // Define Device Capabilities page.
564 =2 */
565 =2 /*
566 =2 typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE {
567 =2 UINT8 PageCode : 6;
568 =2 UINT8 Reserved : 1;
C51 COMPILER V8.02 FAT 09/19/2006 15:01:23 PAGE 16
569 =2 UINT8 PageSavable : 1;
570 =2 UINT8 PageLength;
571 =2 UINT8 WriteCacheDisable : 1;
572 =2 UINT8 Reserved1 : 7;
573 =2 UINT8 LogicalBlockSize[2];
574 =2 UINT8 NumberOfLogicalBlocks[5];
575 =2 UINT8 PowerPerformance;
576 =2 UINT8 Lockable : 1;
577 =2 UINT8 Formattable : 1;
578 =2 UINT8 Writable : 1;
579 =2 UINT8 Readable : 1;
580 =2 UINT8 Reserved2 : 4;
581 =2 UINT8 Reserved3;
582 =2 }MODE_RBC_DEVICE_PARAMETERS_PAGE, *pMODE_RBC_DEVICE_PARAMETERS_PAGE;
583 =2 */
584 =2 /*
585 =2 // prevent/allow medium removal
586 =2 */
587 =2 typedef struct _MEDIA_REMOVAL_SPC {
588 =2 UINT8 OperationCode; // 1EH
589 =2 UINT8 Reserved0[3];
590 =2 UINT8 Prevent;
591 =2 //UINT8 Reserved1:6 ;
592 =2 //UINT8 Control;
593 =2 } MEDIA_REMOVAL_SPC, *pMEDIA_REMOVAL_SPC;
594 =2
595 =2 /*
596 =2 // Request Sense
597 =2 */
598 =2 typedef struct _REQUEST_SENSE_SPC {
599 =2 UINT8 OperationCode; // 03H
600 =2 UINT8 Reserved[3];
601 =2 UINT8 AllocationLen;
602 =2 UINT8 Control;
603 =2 } REQUEST_SENSE_SPC, *pREQUEST_SENSE_SPC;
604 =2 /*
605 =2 typedef struct _REQUEST_SENSE_DATA {
606 =2 UINT8 ResponseCode : 7;
607 =2 UINT8 Valid : 1;
608 =2
609 =2 UINT8 SegmentNum;
610 =2
611 =2 UINT8 SenseKey : 4;
612 =2 UINT8 Reserved0 : 1;
613 =2 UINT8 WrongLenIndicator : 1;
614 =2 UINT8 EndofMedium : 1;
615 =2 UINT8 FileMark : 1;
616 =2
617 =2 UINT8 Info_0;
618 =2 UINT8 Info_1;
619 =2 UINT8 Info_2;
620 =2 UINT8 Info_3;
621 =2
622 =2 UINT8 AdditionalSenseLen;
623 =2
624 =2 UINT8 CommandSpecInfo_0;
625 =2 UINT8 CommandSpecInfo_1;
626 =2 UINT8 CommandSpecInfo_2;
627 =2 UINT8 CommandSpecInfo_3;
628 =2
629 =2 UINT8 ASC;
630 =2 UINT8 ASCQ;
C51 COMPILER V8.02 FAT 09/19/2006 15:01:23 PAGE 17
631 =2 UINT8 FieldReplacableUnitCode;
632 =2 UINT8 SenseKeySpec_0 : 7;
633 =2 UINT8 SenseKeySpecValid : 1;
634 =2 UINT8 SenseKeySpec_1;
635 =2 UINT8 SenseKeySpec_2;
636 =2
637 =2 } REQUEST_SENSE_DATA, *pREQUEST_SENSE_DATA;
638 =2 */
639 =2 /*
640 =2 // Test Unit Ready
641 =2 */
642 =2 typedef struct _TEST_UNIT_SPC {
643 =2 UINT8 OperationCode; // 00H
644 =2 UINT8 Reserved[4];
645 =2 UINT8 Control;
646 =2 } TEST_UNIT_SPC, *pTEST_UNIT_SPC;
647 =2
648 =2 /*
649 =2 // Write Buffer
650 =2 */
651 =2
652 =2 typedef struct _WRITE_BUFFER_SPC {
653 =2 UINT8 OperationCode;
654 =2 UINT8 Mod:4 ;
655 =2 UINT8 Reserved0:4 ;
656 =2 UINT8 BufferID;
657 =2 UINT8 BufferOff_2;
658 =2 UINT8 BufferOff_1;
659 =2 UINT8 BufferOff_0;
660 =2 UINT8 ParameterLen_2;
661 =2 UINT8 ParameterLen_1;
662 =2 UINT8 ParameterLen_0;
663 =2 UINT8 Control;
664 =2 } WRITE_BUFFER_SPC, *pWRITE_BUFFER_SPC;
665 =2
666 =2 typedef union _CDB_RBC {
667 =2 GENERIC_CDB Cdb_Generic;
668 =2
669 =2 // RBC commands
670 =2 GENERIC_RBC RbcCdb_Generic;
671 =2
672 =2 FORMAT_RBC RbcCdb_Format;
673 =2 READ_RBC RbcCdb_Read;
674 =2 READ_CAPACITY_RBC RbcCdb_ReadCapacity;
675 =2 START_STOP_RBC RbcCdb_OnOffUnit;
676 =2 SYNCHRONIZE_CACHE_RBC RbcCdb_SyncCache;
677 =2 VERIFY_RBC RbcCdb_Verify;
678 =2 WRITE_RBC RbcCdb_Write;
679 =2
680 =2
681 =2 // SPC-2 commands
682 =2
683 =2 INQUIRY_SPC SpcCdb_Inquiry;
684 =2 MODE_SELECT_SPC SpcCdb_ModeSelect;
685 =2 MODE_SENSE_SPC SpcCdb_ModeSense;
686 =2 MEDIA_REMOVAL_SPC SpcCdb_Remove;
687 =2 REQUEST_SENSE_SPC SpcCdb_RequestSense;
688 =2 TEST_UNIT_SPC SpcCdb_TestUnit;
689 =2 WRITE_BUFFER_SPC SpcCdb_WriteBuffer;
690 =2
691 =2 // ATAPI Commands
692 =2 READ_10 CmdRead10;
C51 COMPILER V8.02 FAT 09/19/2006 15:01:23 PAGE 18
693 =2 WRITE_10 CmdWrite10;
694 =2 MODE_SELECT_10 CmdModeSel10;
695 =2 MODE_SENSE_10 CmdModeSen10;
696 =2 //////////////////////////////////////
697 =2 READ_LONG_CMD SpcCdb_ReadLong;
698 =2
699 =2 } CDB_RBC, *pCDB_RBC;
700 =2
701 =2
2 =1 ///////////////////////////////////
3 =1 #define CBW_SIGNATURE 0x55534243
4 =1 #define CSW_SIGNATURE 0x55534253
5 =1
6 =1 #define TPBulk_CBW TPBulk_Block.TPBulk_CommandBlock
7 =1 #define CBW_wXferLen TPBulk_CBW.dCBW_DataXferLen
8 =1 #define RBC_CDB TPBulk_CBW.cdbRBC
9 =1 #define RBC_LUN TPBulk_CBW.bCBW_LUN
10 =1 #define TPBulk_CSW TPBulk_Block.TPBulk_CommandStatus
11 =1
12 =1 typedef struct _COMMAND_BLOCK_WRAPPER{
13 =1 UINT32 dCBW_Signature;
14 =1 UINT32 dCBW_Tag;
15 =1 UINT32 dCBW_DataXferLen;
16 =1 UINT8 bCBW_Flag;
17 =1 UINT8 bCBW_LUN;
18 =1 UINT8 bCBW_CDBLen;
19 =1 CDB_RBC cdbRBC;
20 =1 } CBW, *pCBW;
21 =1
22 =1 typedef struct _COMMAND_STATUS_WRAPPER{
23 =1 UINT32 dCSW_Signature;
24 =1 UINT32 dCSW_Tag;
25 =1 UINT32 dCSW_DataResidue;
26 =1 UINT8 bCSW_Status;
27 =1 } CSW, *pCSW;
28 =1
29 =1 typedef union _TPBULK_STRUC {
30 =1 CBW TPBulk_CommandBlock;
31 =1 CSW TPBulk_CommandStatus;
32 =1
33 =1 }TPB_STRUC, *pTPB_STRUC;
34 =1 ///////////////////////////////////
35 =1 unsigned char EnumMassDev(void);
36 =1 unsigned char TPBulk_GetMaxLUN(void);
37 =1 unsigned char SPC_Inquiry(void);
38 =1 unsigned char SPC_READLONG(void);
39 =1 unsigned char SPC_RequestSense(void);
40 =1 unsigned char SPC_TestUnit(void);
41 =1 unsigned char SPC_LockMedia(void);
42 =1 unsigned char RBC_ReadCapacity(void);
43 =1 unsigned char RBC_ReadOneSec(unsigned long lba, unsigned char *pBuffer);
44 =1 unsigned char RBC_Write(unsigned long lba,unsigned char len,unsigned char *pBuffer);
45 =1
46 =1
4 #include "usb.h"
1 =1 #include "ABSACC.H"
1 =2 /*--------------------------------------------------------------------------
2 =2 ABSACC.H
3 =2
4 =2 Direct access to 8051, extended 8051 and Philips 80C51MX memory areas.
5 =2 Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
6 =2 All rights reserved.
C51 COMPILER V8.02 FAT 09/19/2006 15:01:23 PAGE 19
7 =2 --------------------------------------------------------------------------*/
8 =2
9 =2 #ifndef __ABSACC_H__
=2 #define __ABSACC_H__
=2
=2 #define CBYTE ((unsigned char volatile code *) 0)
=2 #define DBYTE ((unsigned char volatile data *) 0)
=2 #define PBYTE ((unsigned char volatile pdata *) 0)
=2 #define XBYTE ((unsigned char volatile xdata *) 0)
=2
=2 #define CWORD ((unsigned int volatile code *) 0)
=2 #define DWORD ((unsigned int volatile data *) 0)
=2 #define PWORD ((unsigned int volatile pdata *) 0)
=2 #define XWORD ((unsigned int volatile xdata *) 0)
=2
=2
=2 #ifdef __CX51__
=2 #define FVAR(object, addr) (*((object volatile far *) (addr)))
=2 #define FARRAY(object, base) ((object volatile far *) (base))
=2 #define FCVAR(object, addr) (*((object const far *) (addr)))
=2 #define FCARRAY(object, base) ((object const far *) (base))
=2 #else
=2 #define FVAR(object, addr) (*((object volatile far *) ((addr)+0x10000L)))
=2 #define FCVAR(object, addr) (*((object const far *) ((addr)+0x810000L)))
=2 #define FARRAY(object, base) ((object volatile far *) ((base)+0x10000L))
=2 #define FCARRAY(object, base) ((object const far *) ((base)+0x810000L))
=2 #endif
=2
=2 #endif
2 =1
3 =1 #define ISO_BIT 0x10
4 =1 #define MAX_EP 0x05 // maximum number of endpoints (Ep0 + max of 4 data endpoints)
5 =1 #define INT_CLEAR 0xff
6 =1 //*****************************************************************************************
7 =1 // Constant Defines
8 =1 //*****************************************************************************************
9 =1
10 =1 #define TIMEOUT_RETRY 0x06 // Maximum no. of timeout retries during USB xfer
11 =1 // USB device descriptors
12 =1 typedef struct
13 =1 {
14 =1 WORD wVID, wPID; // Vendor ID and Product ID
15 =1 BYTE bClass; //
16 =1 BYTE bNumOfEPs; // actual number endpoint from slave
17 =1 BYTE iMfg; // Manufacturer ID
18 =1 BYTE iPdt; // Product ID
19 =1 BYTE bId1;
20 =1 BYTE bId2;
21 =1 BYTE bEPAddr[MAX_EP]; // bit 7 = 1 = use PID_IN,
22 =1 BYTE bAttr[MAX_EP]; // ISO | Bulk | Interrupt | Control
23 =1 WORD wPayLoad[MAX_EP]; // ISO range: 1-1023, Bulk: 1-64, etc
24 =1 WORD bInterval[MAX_EP]; // polling interval (for LS)
25 =1 BYTE bData1[MAX_EP]; // DataToggle value
26 =1 } USBDEV, *pUSBDEV;
27 =1
28 =1 // USB specific request
29 =1 typedef struct
30 =1 {
31 =1 BYTE bmRequest;
32 =1 BYTE bRequest;
33 =1 WORD wValue;
34 =1 WORD wIndex;
C51 COMPILER V8.02 FAT 09/19/2006 15:01:23 PAGE 20
35 =1 WORD wLength;
36 =1 } SetupPKG, *pSetupPKG;
37 =1
38 =1 typedef struct
39 =1 {
40 =1 unsigned char usbaddr;
41 =1 // unsigned char endpoint;
42 =1 unsigned char pid;
43 =1 unsigned char wPayload;
44 =1 unsigned int wLen;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?