📄 hpi.lst
字号:
C51 COMPILER V7.06 HPI 11/22/2004 22:08:31 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE HPI
OBJECT MODULE PLACED IN HPI.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE HPI.C DEBUG OBJECTEXTEND CODE
stmt level source
1 #include "common.h"
2
3 extern XXGFLAGS bdata bXXGFlags;
4 extern unsigned char xdata DBUF[BUFFER_LENGTH];
5 //////////////////////////////////////////
6 //CH_CMD_BLOCK xdata inblock;
7 unsigned char xdata CHBUF[CHBUF_LENGTH];
8 SYS_INFO_BLOCK xdata DeviceInfo;
9 CH_CMD_BLOCK xdata CHCmdBlock;
10 CH_RSP_BLOCK xdata CHRspBlock;
11 FILE_INFO xdata ThisFile;
12 extern FREE_FAT_INFO xdata FreeFat;
13
14
15 unsigned char EnumMassDev(void)
16 {
17 1 PMBR_BLOCK pMBR;
18 1 PBPB_BLOCK pBPB;
19 1 if(mInitDisk( )!=USB_INT_SUCCESS)return 0 ; /* 初始化USB存储器 */
20 1 pMBR=(PMBR_BLOCK)DBUF;
21 1 DeviceInfo.BPB_BytesPerSec=512; //暂假设为512
22 1 //if(!SPC_RequestSense())
23 1 // return FALSE;
24 1 if(!SPC_TestUnit())
25 1 return FALSE;
26 1 if(!SPC_LockMedia())
27 1 return FALSE;
28 1 if(!ReadCapacity())
29 1 return FALSE;
30 1 if(!RBC_Read(0x0,1,DBUF))
31 1 return FALSE;
32 1 //////////////////////////////////
33 1 if(DBUF[0]==0xeb||DBUF[0]==0xe9){ //判断是否是BS_jmpBoot
34 2 DeviceInfo.StartSector=0;
35 2 //DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
36 2 }
37 1 else {
38 2 //////////////////////////////////
39 2 DeviceInfo.StartSector=SwapINT32(pMBR->StartSector);
40 2 //DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
41 2 }
42 1 ///////////////////////////////////////////////////////
43 1 pBPB=(PBPB_BLOCK)DBUF;
44 1 if(!RBC_Read(DeviceInfo.StartSector,1,DBUF))
45 1 return FALSE;
46 1 DeviceInfo.BPB_BytesPerSec=SwapINT16(pBPB->BPB_BytesPerSec);
47 1 DeviceInfo.BPB_SecPerClus=pBPB->BPB_SecPerClus;
48 1 DeviceInfo.BPB_NumFATs=pBPB->BPB_NumFATs;
49 1 DeviceInfo.BPB_RootEntCnt=SwapINT16(pBPB->BPB_RootEntCnt);
50 1 DeviceInfo.BPB_TotSec16=SwapINT16(pBPB->BPB_TotSec16);
51 1 DeviceInfo.BPB_FATSz16=SwapINT16(pBPB->BPB_FATSz16);
52 1 DeviceInfo.BPB_TotSec32=SwapINT32(pBPB->BPB_TotSec32);
53 1 DeviceInfo.FatStartSector=DeviceInfo.StartSector+pBPB->BPB_RsvdSecCn[0];
54 1 DeviceInfo.RootStartSector=DeviceInfo.StartSector+2*DeviceInfo.BPB_FATSz16+pBPB->BPB_RsvdSecCn[0];
55 1 DeviceInfo.FirstDataSector=DeviceInfo.FatStartSector+2*DeviceInfo.BPB_FATSz16+32;
C51 COMPILER V7.06 HPI 11/22/2004 22:08:31 PAGE 2
56 1 ///////////////////////////////////////////////////////
57 1 ThisFile.bFileOpen=0;
58 1 bXXGFlags.bits.SLAVE_IS_ATTACHED=1;
59 1 ///////////////////////////////////////////////////////
60 1 return TRUE;
61 1 }
62
63 //***********************************************
64 unsigned char DetectDevice(void) //检测设备
65 {
66 1 #define RspBlockDetectDevice CHRspBlock.RspBlock.Rsp_DetectDevice
67 1 return bXXGFlags.bits.SLAVE_IS_ATTACHED;
68 1
69 1 #undef RspBlockDetectDevice
70 1 }
71
72 unsigned char List(void) //列表文件
73 {
74 1 #define RspBlockList CHRspBlock.RspBlock.Rsp_List
75 1 unsigned int item,i;
76 1 unsigned char j,k,bstop,sector;
77 1 //RspBlockList.errcode=ERC_NODEVICE;
78 1 if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
79 1 {
80 2 CHRspBlock.errcode=ERC_NODEVICE;
81 2 return FALSE;
82 2 }
83 1 ///////////////////////////////////////////////////////////
84 1 item=0;
85 1 bstop=0;
86 1 //RspBlockList.result=0x1;
87 1 for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
88 1 {
89 2 //////////////////////////////////////////////////
90 2 if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
91 2 {
92 3 //item=0;
93 3 CHRspBlock.errcode=ERC_DEVICEERR;
94 3 return FALSE;
95 3 }
96 2 ///////////////////////////////////////////////////
97 2 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
98 2 {
99 3 if(DBUF[i]==0x00)
100 3 {bstop=1;
101 4 break;}
102 3 else if(DBUF[i]==0xE5)
103 3 continue;
104 3 else if((DBUF[i]&0x40==0x40)&&(DBUF[i+11]==0xff))
105 3 {
106 4 j=DBUF[i]&0x0F;
107 4 j=j+1;
108 4 for(k=0;k<j*32;k++)
109 4 CHBUF[item*32+k]=DBUF[i+k];
110 4 i=i+(j-1)*32;
111 4 item=item+j;
112 4 }
113 3 else
114 3 {
115 4 for(k=0;k<32;k++)
116 4 CHBUF[item*32+k]=DBUF[i+k];
117 4 item=item+1;
C51 COMPILER V7.06 HPI 11/22/2004 22:08:31 PAGE 3
118 4 }
119 3 }
120 2 ///////////////////////////////////////////////////////
121 2 if(bstop==1)break;
122 2
123 2 }
124 1
125 1 //pBuf=(PREAD_CAPACITY_RSP)DBUF;
126 1 ///////////////////////////////////////////
127 1 RspBlockList.len=SwapINT16(item*32);
128 1 CHRspBlock.len=item*32;
129 1 return TRUE;
130 1
131 1 #undef RspBlockList
132 1
133 1 }
134 unsigned char OpenFile(unsigned char *pBuffer)
135 {
136 1 #define RspBlockOpenFile CHRspBlock.RspBlock.Rsp_OpenFile
137 1 unsigned int i;
138 1 unsigned char j,bstop,sector;
139 1 PDIR_INFO pDirInfo;
140 1
141 1 if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
142 1 {
143 2 CHRspBlock.errcode=ERC_NODEVICE;
144 2 return FALSE;
145 2 }
146 1 ///////////////////////////////////////////////////////////
147 1
148 1 ThisFile.bFileOpen=0;
149 1 //RspBlockOpenFile.result=0x0;
150 1 //RspBlockOpenFile.errcode=ERC_OK;
151 1 for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
152 1 {
153 2 //////////////////////////////////////////////////
154 2 if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
155 2 {
156 3 CHRspBlock.errcode=ERC_DEVICEERR;
157 3 return FALSE;
158 3
159 3 }
160 2 ///////////////////////////////////////////////////
161 2 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
162 2 {
163 3 if(DBUF[i]==0x00)
164 3 {
165 4 CHRspBlock.errcode=ERC_FILENOTFOUND;
166 4 //CHRspBlock.errcode=ERC_DEVICEERR;
167 4 return FALSE;
168 4 }
169 3 ///////////////////////////////////////////
170 3 j=0;
171 3 while(DBUF[i+j]==*(pBuffer+j))
172 3 {
173 4 j=j+1;
174 4 if(j>10)
175 4 break;
176 4 }
177 3
178 3 if(j>10)
179 3 {
C51 COMPILER V7.06 HPI 11/22/2004 22:08:31 PAGE 4
180 4 for(j=0;j<32;j++)
181 4 RspBlockOpenFile.item[j]=DBUF[i+j];
182 4 //RspBlockOpenFile.result=0x1;
183 4 ThisFile.bFileOpen=1;
184 4 bstop=1;
185 4 break;}
186 3
187 3 }
188 2 ///////////////////////////////////////////////////////
189 2 if(bstop==1)break;
190 2 ///////////////////////////////////////////////////////
191 2 //if(DeviceInfo.BPB_RootEntCnt)
192 2
193 2 }
194 1
195 1 if(sector>=DeviceInfo.BPB_RootEntCnt)
196 1 {
197 2 CHRspBlock.errcode=ERC_FILENOTFOUND;
198 2 //CHRspBlock.errcode=ERC_DEVICEERR;
199 2 return FALSE;
200 2 }
201 1 ////////////////////////////////////////////
202 1 pDirInfo=(PDIR_INFO)RspBlockOpenFile.item;
203 1 ThisFile.StartCluster=SwapINT16(pDirInfo->startCluster);
204 1 ThisFile.LengthInByte=SwapINT32(pDirInfo->length);
205 1 ThisFile.ClusterPointer=ThisFile.StartCluster;
206 1 ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.StartCluster);
207 1 ThisFile.OffsetofSector=0;
208 1 ThisFile.SectorofCluster=0;
209 1 //=ThisFatSecNum(clusterNum);
210 1 //xxgFatEntOffset=ThisFatEntOffset(clusterNum);
211 1 ThisFile.FatSectorPointer=0;
212 1 //ThisFile.bFileOpen=1;
213 1 ThisFile.pointer=0;
214 1 ///////////////////////////////////////////
215 1 FreeFat.SectorNum=DeviceInfo.FatStartSector;
216 1 FreeFat.OldSectorNum=DeviceInfo.FatStartSector;
217 1 FreeFat.OffsetofSector=2;
218 1
219 1 return TRUE;
220 1 #undef RspBlockOpenFile
221 1 }
222
223 unsigned char ReadFile(unsigned int readLength,unsigned char *pBuffer)
224 {
225 1 #define RspBlockReadFile CHRspBlock.RspBlock.Rsp_ReadFile
226 1 unsigned int idata len,i;
227 1 unsigned char bSuccess;
228 1 //unsigned char sector;
229 1 //unsigned long lba;
230 1
231 1 if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
232 1 {
233 2 CHRspBlock.errcode=ERC_NODEVICE;
234 2 return FALSE;
235 2 }
236 1 if(!ThisFile.bFileOpen)
237 1 {
238 2 CHRspBlock.errcode=ERC_FILENOTOPENED;
239 2 return FALSE;
240 2 }
241 1 ///////////////////////////////////////////////////////////
C51 COMPILER V7.06 HPI 11/22/2004 22:08:31 PAGE 5
242 1 ThisFile.bFileOpen=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -