📄 hpi.lst
字号:
116 1 }
117 unsigned char DetectDevice(void)
118 {
119 1 #define RspBlockDetectDevice UartRspBlock.RspBlock.Rsp_DetectDevice
120 1 return bXXGFlags.bits.SLAVE_IS_ATTACHED;
121 1
122 1 #undef RspBlockDetectDevice
123 1 }
124
125 unsigned char List(void)
126 {
127 1 #define RspBlockList UartRspBlock.RspBlock.Rsp_List
C51 COMPILER V7.20 HPI 12/13/2005 15:28:00 PAGE 5
128 1 unsigned int item,i;
129 1 unsigned char j,k,bstop,sector;
130 1 //RspBlockList.errcode=ERC_NODEVICE;
131 1 if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
132 1 {
133 2 UartRspBlock.errcode=ERC_NODEVICE;
134 2 return FALSE;
135 2 }
136 1 ///////////////////////////////////////////////////////////
137 1 item=0;
138 1 bstop=0;
139 1 //RspBlockList.result=0x1;
140 1 for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
141 1 {
142 2 //////////////////////////////////////////////////
143 2 if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
144 2 {
145 3 //item=0;
146 3 UartRspBlock.errcode=ERC_DEVICEERR;
147 3 return FALSE;
148 3 }
149 2 ///////////////////////////////////////////////////
150 2 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
151 2 {
152 3 if(DBUF[i]==0x00)
153 3 {bstop=1;
154 4 break;}
155 3 else if(DBUF[i]==0xE5)
156 3 continue;
157 3 else if((DBUF[i]&0x40==0x40)&&(DBUF[i+11]==0xff))
158 3 {
159 4 j=DBUF[i]&0x0F;
160 4 j=j+1;
161 4 for(k=0;k<j*32;k++)
162 4 UARTBUF[item*32+k]=DBUF[i+k];
163 4 i=i+(j-1)*32;
164 4 item=item+j;
165 4 }
166 3 else
167 3 {
168 4 for(k=0;k<32;k++)
169 4 UARTBUF[item*32+k]=DBUF[i+k];
170 4 item=item+1;
171 4 }
172 3 }
173 2 ///////////////////////////////////////////////////////
174 2 if(bstop==1)break;
175 2
176 2 }
177 1
178 1 //pBuf=(PREAD_CAPACITY_RSP)DBUF;
179 1 ///////////////////////////////////////////
180 1 RspBlockList.len=SwapINT16(item*32);
181 1 UartRspBlock.len=item*32;
182 1 return TRUE;
183 1
184 1 #undef RspBlockList
185 1
186 1 }
187 unsigned char OpenFile(unsigned char *pBuffer)
188 {
189 1 #define RspBlockOpenFile UartRspBlock.RspBlock.Rsp_OpenFile
C51 COMPILER V7.20 HPI 12/13/2005 15:28:00 PAGE 6
190 1 unsigned int i;
191 1 unsigned char j,bstop,sector;
192 1 PDIR_INFO pDirInfo;
193 1
194 1 if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
195 1 {
196 2 UartRspBlock.errcode=ERC_NODEVICE;
197 2 return FALSE;
198 2 }
199 1 ///////////////////////////////////////////////////////////
200 1
201 1 ThisFile.bFileOpen=0;
202 1 //RspBlockOpenFile.result=0x0;
203 1 //RspBlockOpenFile.errcode=ERC_OK;
204 1 for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
205 1 {
206 2 //////////////////////////////////////////////////
207 2 if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
208 2 {
209 3 UartRspBlock.errcode=ERC_DEVICEERR;
210 3 return FALSE;
211 3
212 3 }
213 2 ///////////////////////////////////////////////////
214 2 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
215 2 {
216 3 if(DBUF[i]==0x00)
217 3 {
218 4 UartRspBlock.errcode=ERC_FILENOTFOUND;
219 4 //UartRspBlock.errcode=ERC_DEVICEERR;
220 4 return FALSE;
221 4 }
222 3 ///////////////////////////////////////////
223 3 j=0;
224 3 while(DBUF[i+j]==*(pBuffer+j))
225 3 {
226 4 j=j+1;
227 4 if(j>10)
228 4 break;
229 4 }
230 3
231 3 if(j>10)
232 3 {
233 4 for(j=0;j<32;j++)
234 4 RspBlockOpenFile.item[j]=DBUF[i+j];
235 4 //RspBlockOpenFile.result=0x1;
236 4 ThisFile.bFileOpen=1;
237 4 bstop=1;
238 4 break;}
239 3
240 3 }
241 2 ///////////////////////////////////////////////////////
242 2 if(bstop==1)break;
243 2 ///////////////////////////////////////////////////////
244 2 //if(DeviceInfo.BPB_RootEntCnt)
245 2
246 2 }
247 1
248 1 if(sector>=DeviceInfo.BPB_RootEntCnt)
249 1 {
250 2 UartRspBlock.errcode=ERC_FILENOTFOUND;
251 2 //UartRspBlock.errcode=ERC_DEVICEERR;
C51 COMPILER V7.20 HPI 12/13/2005 15:28:00 PAGE 7
252 2 return FALSE;
253 2 }
254 1 ////////////////////////////////////////////
255 1 pDirInfo=(PDIR_INFO)RspBlockOpenFile.item;
256 1 ThisFile.StartCluster=SwapINT16(pDirInfo->startCluster);
257 1 ThisFile.LengthInByte=SwapINT32(pDirInfo->length);
258 1 ThisFile.ClusterPointer=ThisFile.StartCluster;
259 1 ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.StartCluster);
260 1 ThisFile.OffsetofSector=0;
261 1 ThisFile.SectorofCluster=0;
262 1 //=ThisFatSecNum(clusterNum);
263 1 //xxgFatEntOffset=ThisFatEntOffset(clusterNum);
264 1 ThisFile.FatSectorPointer=0;
265 1 //ThisFile.bFileOpen=1;
266 1 ThisFile.pointer=0;
267 1 ///////////////////////////////////////////
268 1 return TRUE;
269 1 #undef RspBlockOpenFile
270 1 }
271
272 unsigned char ReadFile(unsigned int readLength,unsigned char *pBuffer)
273 {
274 1 #define RspBlockReadFile UartRspBlock.RspBlock.Rsp_ReadFile
275 1 unsigned int idata len,i;
276 1 unsigned char bSuccess;
277 1 //unsigned char sector;
278 1 //unsigned long lba;
279 1
280 1 if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
281 1 {
282 2 UartRspBlock.errcode=ERC_NODEVICE;
283 2 return FALSE;
284 2 }
285 1 if(!ThisFile.bFileOpen)
286 1 {
287 2 UartRspBlock.errcode=ERC_FILENOTOPENED;
288 2 return FALSE;
289 2 }
290 1 ///////////////////////////////////////////////////////////
291 1 ThisFile.bFileOpen=0;
292 1 bSuccess=1;
293 1 UartRspBlock.len=0;
294 1 //lba=GetSecNumFromPointer();
295 1 //cluster=GetClusterNumFromSectorNum(lba);
296 1 //cluster=ThisFile.StartCluster;
297 1 //lba=FirstSectorofCluster(ThisFile.StartCluster);
298 1 //readLength=SwapINT16(UartCmdBlock.CmdBlock.Cmd_ReadFile.readLength);
299 1 if(readLength>MAX_READ_LENGTH)
300 1 {
301 2 UartRspBlock.errcode=ERC_LENGTHEXCEED;
302 2 return FALSE;
303 2 }
304 1 if(readLength+ThisFile.pointer>ThisFile.LengthInByte)
305 1 {
306 2 UartRspBlock.errcode=ERC_LENGTHEXCEED;
307 2 return FALSE;
308 2 }
309 1 ////////////////////////////////////////////
310 1
311 1 ///////////////////////////////////////////////////
312 1 while(readLength>0)
313 1 {
C51 COMPILER V7.20 HPI 12/13/2005 15:28:00 PAGE 8
314 2 if(readLength+ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec)
315 2 len=DeviceInfo.BPB_BytesPerSec;
316 2 else
317 2 len=readLength+ThisFile.OffsetofSector;
318 2
319 2 //////////////////////////////////////////////////////
320 2 if(ThisFile.OffsetofSector>0)
321 2 {
322 3 if(RBC_Read(ThisFile.SectorPointer,1,DBUF))
323 3 {
324 4 //ThisFile.OffsetofSector=len;
325 4 len=len-ThisFile.OffsetofSector;
326 4 for(i=0;i<len;i++)
327 4 //UARTBUF[i]=DBUF[ThisFile.OffsetofSector+i];
328 4 *(pBuffer+i)=DBUF[ThisFile.OffsetofSector+i];
329 4 ThisFile.OffsetofSector=ThisFile.OffsetofSector+len;
330 4 }
331 3 else
332 3 {
333 4 UartRspBlock.errcode=ERC_DEVICEERR;
334 4 return FALSE;
335 4 }
336 3 }
337 2 else
338 2 {
339 3 if(!RBC_Read(ThisFile.SectorPointer,1,pBuffer+UartRspBlock.len))
340 3 {
341 4 UartRspBlock.errcode=ERC_DEVICEERR;
342 4 return FALSE;
343 4 }
344 3 ThisFile.OffsetofSector=len;
345 3 }
346 2 ////////////////////////////////////////////////////////////
347 2 // if(ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec-1)
348 2 // ThisFile.OffsetofSector-=DeviceInfo.BPB_BytesPerSec;
349 2 readLength-=len;
350 2 UartRspBlock.len+=len;
351 2 // ThisFile.OffsetofSector=;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -