📄 hpi32.lst
字号:
C51 COMPILER V7.06 HPI32 08/10/2005 23:25:29 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE HPI32
OBJECT MODULE PLACED IN HPI32.OBJ
COMPILER INVOKED BY: D:\Keil51\C51\BIN\C51.EXE HPI32.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "common.h"
2 #include "TPBULK.H"
3 #include "HPI.H"
4 #include "HAL.H"
5 #include "Fat.h"
6 #include "Fat32.h"
7 #include "HPI32.H"
8
9 extern FLAGS bdata bFlags;
10 extern unsigned char xdata DBUF[BUFFER_LENGTH];
11 //////////////////////////////////////////
12 extern unsigned char xdata UARTBUF[UARTBUF_LENGTH];
13 extern SYS_INFO_BLOCK xdata DeviceInfo;
14 extern FILE_INFO xdata ThisFile;
15
16 extern Command_Def xdata Command;
17 extern Response_Def xdata Response;
18
19 unsigned long xdata DirStartCluster32,NowCluster32;
20 extern unsigned long xdata NowSector;
21 extern ShowFileName_Def xdata ShowFileName[MaxLFNum]; //long file struct
22 /////////////////////////////////////////////
23
24 unsigned char UartHandler32(void)
25 {
26 1 Response.Result=0;Response.len=0;
27 1 switch(Command.CLass)
28 1 {
29 2 case 0x00: //List
30 2 Response.Result=List32();
31 2 break;
32 2 case 0x01: //Open File
33 2 Response.Result=OpenFile32(Command.Parameter);
34 2 break;
35 2 case 0x02: //Read File
36 2 Response.Result=ReadFile32(Command.len,UARTBUF);
37 2 break;
38 2 case 0x03: //Set Pointer
39 2 Response.Result=SetFilePointer32(Command.len);
40 2 break;
41 2 case 0x04: //Great File
42 2 Response.Result=OpenFile32(Command.Parameter);
43 2 if(Response.Result)
44 2 {
45 3 Response.Result=SetFilePointer32(ThisFile.LengthInByte);
46 3 }
47 2 else
48 2 Response.Result=CreateFile32(Command.len,Command.Parameter,UARTBUF);
49 2 break;
50 2 case 0x05: //Write File
51 2 Response.Result=WriteFile32(Command.len,UARTBUF);
52 2 break;
53 2 case 0x06: //Remove File
54 2 ThisFile.bFileOpen=0;
55 2 Response.Result=RemoveFile32(Command.Parameter);
C51 COMPILER V7.06 HPI32 08/10/2005 23:25:29 PAGE 2
56 2 break;
57 2 case 0x07: //Get Space
58 2 Response.Result=GetCapacity32();
59 2 break;
60 2 case 0x08: //DetectDisk
61 2 if(bFlags.bits.SLAVE_IS_ATTACHED)
62 2 Response.Result=1;
63 2 break;
64 2 case 0x09: //Great Dir
65 2 Response.Result=DownDir32(Command.Parameter);
66 2 if(!Response.Result)
67 2 Response.Result=CreateDir32(Command.len,Command.Parameter,UARTBUF);
68 2 break;
69 2 case 0x0a: //Down Dir
70 2 Response.Result=DownDir32(Command.Parameter);
71 2 break;
72 2 case 0x0b: //Up Dir
73 2 Response.Result=UpDir32();
74 2 break;
75 2 case 0x0c: //Up RootDir
76 2 Response.Result=UpRootDir32();
77 2 break;
78 2 case 0x0d: //Get DriveNum
79 2 Response.Result=GetDriveNum();
80 2 break;
81 2 case 0x0e: //SelectDrive [0,1,2,....]
82 2 Response.Result=SelectDrive(Command.Parameter[0]);
83 2 break;
84 2 }
85 1
86 1 UartSendRsp();
87 1 ///////////////////////////////
88 1 return TRUE;
89 1 }
90
91 unsigned char List32(void)
92 {
93 1 unsigned int item,i;
94 1 unsigned char k,bstop,sector;
95 1 unsigned char Lcount,Ncount,base;
96 1
97 1 if(!bFlags.bits.SLAVE_IS_ATTACHED)
98 1 return FALSE;
99 1 item=0;
100 1 bstop=0;
101 1 ////////////////////////////////////
102 1 Lcount=0;
103 1 for(i=0;i<MaxLFNum;i++)
104 1 {
105 2 ShowFileName[i].LongName[0]=0x00;
106 2 ShowFileName[i].LongName[1]=0x00;
107 2 }
108 1 //////////////////////////////////////////////////////////////////
109 1 NowCluster32=DirStartCluster32;
110 1 do
111 1 {
112 2 NowSector=FirstSectorofCluster32(NowCluster32);
113 2 for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
114 2 {
115 3 if(!RBC_Read(NowSector+sector,1,DBUF))
116 3 return FALSE;
117 3 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
C51 COMPILER V7.06 HPI32 08/10/2005 23:25:29 PAGE 3
118 3 {
119 4 if(DBUF[i]==0x00)
120 4 {bstop=1;break;}
121 4 else if(DBUF[i]==0xE5)
122 4 continue;
123 4 else
124 4 {
125 5 for(k=0;k<32;k++)
126 5 UARTBUF[item*32+k]=DBUF[i+k];
127 5 item=item+1;
128 5 /////////////////////////////////
129 5 if(DBUF[i+11]==0x0F)
130 5 {
131 6 base=((DBUF[i]&0x1F)-1)*26;
132 6 if(base<=224)
133 6 {
134 7 Ncount=0;
135 7 for(k=1;k<11;k++)
136 7 {
137 8 ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
138 8 Ncount++;
139 8 }
140 7 for(k=14;k<26;k++)
141 7 {
142 8 ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
143 8 Ncount++;
144 8 }
145 7 for(k=28;k<32;k++)
146 7 {
147 8 ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
148 8 Ncount++;
149 8 }
150 7 }
151 6 }
152 5 else
153 5 {
154 6 for(k=0;k<32;k++)
155 6 ShowFileName[Lcount].item[k]=DBUF[i+k];
156 6 Lcount++;
157 6 }
158 5 /////////////////////////////////
159 5 }
160 4 }
161 3 if(bstop==1)break;
162 3 }
163 2 if(bstop==1)break;
164 2
165 2 NowCluster32=GetNextClusterNum32(NowCluster32);
166 2
167 2 }while(NowCluster32<=DeviceInfo.TotCluster);
168 1
169 1 Response.len=item*32;
170 1 return TRUE;
171 1 }
172
173 unsigned char OpenFile32(unsigned char *pBuffer)
174 {
175 1 unsigned int i;
176 1 unsigned char j,bstop,sector;
177 1
178 1 if(!bFlags.bits.SLAVE_IS_ATTACHED)
179 1 return FALSE;
C51 COMPILER V7.06 HPI32 08/10/2005 23:25:29 PAGE 4
180 1 ThisFile.bFileOpen=0;
181 1 NowCluster32=DirStartCluster32;
182 1 do
183 1 {
184 2 NowSector=FirstSectorofCluster32(NowCluster32);
185 2 for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
186 2 {
187 3 if(!RBC_Read(NowSector+sector,1,DBUF))
188 3 return FALSE;
189 3 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
190 3 {
191 4 if(DBUF[i]==0x00)
192 4 return FALSE;
193 4 j=0;
194 4 while(DBUF[i+j]==*(pBuffer+j))
195 4 {
196 5 j=j+1;
197 5 if(j>10)
198 5 break;
199 5 }
200 4 if(j>10&&(DBUF[i+11]&0x10)!=0x10)
201 4 {
202 5 for(j=0;j<32;j++)
203 5 UARTBUF[j]=DBUF[i+j];
204 5 bstop=1;
205 5 break;
206 5 }
207 4 }
208 3 if(bstop==1)break;
209 3 }
210 2 if(bstop==1)break;
211 2 NowCluster32=GetNextClusterNum32(NowCluster32);
212 2 }while(NowCluster32<=DeviceInfo.TotCluster);
213 1
214 1 if(NowCluster32>DeviceInfo.TotCluster)
215 1 return FALSE;
216 1
217 1 ThisFile.bFileOpen=1;
218 1 ThisFile.StartCluster=LSwapINT32(UARTBUF[26],UARTBUF[27],UARTBUF[20],UARTBUF[21]);
219 1 ThisFile.LengthInByte=LSwapINT32(UARTBUF[28],UARTBUF[29],UARTBUF[30],UARTBUF[31]);
220 1 ThisFile.ClusterPointer=ThisFile.StartCluster;
221 1 ThisFile.SectorPointer=FirstSectorofCluster32(ThisFile.StartCluster);
222 1 ThisFile.OffsetofSector=0;
223 1 ThisFile.SectorofCluster=0;
224 1 ThisFile.FatSectorPointer=0;
225 1 ThisFile.pointer=0;
226 1
227 1 Response.len=32;
228 1 return TRUE;
229 1 }
230
231
232 unsigned char ReadFile32(unsigned long readLength,unsigned char *pBuffer)
233 {
234 1
235 1 unsigned int len,i;
236 1 unsigned int tlen;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -