📄 hpi.lst
字号:
C51 COMPILER V7.00 HPI 09/22/2005 17:15:31 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE HPI
OBJECT MODULE PLACED IN .\out\HPI.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HPI.C LARGE BROWSE DEBUG OBJECTEXTEND OBJECT(.\out\HPI.obj)
stmt level source
1 #define HPI_FILE
2 #include "include.h"
3
4 //extern XXGFLAGS bdata bXXGFlags;
5 //extern unsigned char xdata DBUF[BUFFER_LENGTH];
6 //////////////////////////////////////////
7 //UART_CMD_BLOCK xdata inblock;
8 //unsigned char xdata UARTBUF[UARTBUF_LENGTH];
9 //extern SYS_INFO_BLOCK xdata DeviceInfo;
10 //UART_CMD_BLOCK xdata UartCmdBlock;
11 //UART_RSP_BLOCK xdata UartRspBlock;
12 //extern FILE_INFO xdata ThisFile;
13 //extern FREE_FAT_INFO xdata FreeFat;
14
15 unsigned char UartHandler(uchar cmd,uchar package,uint buf_len,uchar *para)
16 {
17 1 unsigned char retStatus;
18 1 unsigned int len;
19 1 unsigned long pointer;
20 1
21 1 switch(cmd)
22 1 {
23 2 case CMD_RESET:
24 2
25 2 break;
26 2
27 2 case CMD_DETECT_DEVICE:
28 2 file_point.file_open_flag=0;
29 2 para[0]=DetectDevice();
30 2 retStatus=send_data(0,1,para);
31 2 break;
32 2
33 2 case CMD_LIST:
34 2 file_point.file_open_flag=0;
35 2 retStatus=List(para);
36 2 break;
37 2
38 2 case CMD_OPEN_FILE:
39 2 retStatus=OpenFile(buf_len,para);
40 2 // if(!retStatus)
41 2 // send_data(0,32,para);
42 2 break;
43 2
44 2 case CMD_CREATE_FILE:
45 2
46 2 retStatus=CreateFile(buf_len,para);
47 2 if(retStatus==FILE_EXIST){
48 3 retStatus=OpenFile(11,para);
49 3 if(retStatus) break;
50 3 }
51 2 if(!retStatus)
52 2 send_data(0,32,para);
53 2 break;
54 2
55 2 case CMD_READ_FILE:
C51 COMPILER V7.00 HPI 09/22/2005 17:15:31 PAGE 2
56 2 len=*((uint *)para);
57 2 retStatus=ReadFile(len,para);
58 2 if(!retStatus)
59 2 send_data(0,len,para);
60 2 break;
61 2
62 2 case CMD_WRITE_FILE:
63 2 len=*((uint *)para);
64 2 retStatus=WriteFile(len,¶[2]);
65 2 if(!retStatus)
66 2 send_data(0,0,para);
67 2 break;
68 2
69 2 case CMD_REMOVE_FILE:
70 2 if(len!=11){
71 3 retStatus=RECE_DATA_ERR;
72 3 break;
73 3 }
74 2 file_point.file_open_flag=0;
75 2 retStatus=RemoveFile(para);
76 2 if(!retStatus)
77 2 send_data(0,0,para);
78 2 break;
79 2
80 2 // case CMD_GET_CAPACITY:
81 2 // ThisFile.bFileOpen=0;
82 2 // retStatus=GetCapacity();
83 2 //// UartRspBlock.cmd=CMD_GET_CAPACITY_RSP;
84 2 // break;
85 2 //
86 2 // case CMD_GET_FREE_CAPACITY:
87 2 // ThisFile.bFileOpen=0;
88 2 // retStatus=GetFreeCapacity();
89 2 //// UartRspBlock.cmd=CMD_GET_FREE_CAPACITY_RSP;
90 2 // break;
91 2 //
92 2 case CMD_SET_FILE_POINTER:
93 2 pointer=*((ulong *)para);
94 2 retStatus=SetFilePointer(pointer);
95 2 if(!retStatus)
96 2 send_data(0,0,para);
97 2 break;
98 2 //
99 2 // case CMD_GET_VERSION:
100 2 // ThisFile.bFileOpen=0;
101 2 // retStatus=GetFirmwareVersion();
102 2 //// UartRspBlock.cmd=CMD_GET_VERSION_RSP;
103 2 // break;
104 2
105 2 default:
106 2 retStatus=CMD_ERROR;
107 2 break;
108 2 }
109 1 if(retStatus)
110 1 send_error(retStatus);
111 1 return TRUE;
112 1 }
*** WARNING C280 IN LINE 15 OF HPI.C: 'package': unreferenced local variable
113
114 unsigned char DetectDevice(void)
115 {
116 1 return bXXGFlags.bits.SLAVE_IS_ATTACHED;
C51 COMPILER V7.00 HPI 09/22/2005 17:15:31 PAGE 3
117 1
118 1 }
119
120 /******************************************************
121 在当前目录下查找文件
122 入口参数:flag==1 找到文件后更新文件目录项
123 ==0 找到文件后返回目录项
124 ******************************************************/
125 uchar find_file(uchar *file_name,uchar *file_item,uchar flag)
126 {
127 1 uint i;
128 1 uchar bstop,end_sector,find_flag;
129 1 uchar package=1;
130 1 uchar sector_temp;
131 1 ulong start_sec,clus_temp;
132 1
133 1 find_flag=0;
134 1 bstop=0;
135 1 start_sec=cur_dir_info.start_sec;
136 1 clus_temp=cur_dir_info.start_clue;
137 1 end_sector=(uchar)(deviceinfo.RootEntCnt>>4);
138 1
139 1 sector_temp=0;
140 1 while(1){
141 2
142 2 if(!RBC_Read(start_sec,1,DBUF))
143 2 return DEVICEC_OP_ERR;
144 2
145 2 for(i=0;i<deviceinfo.BytePerSec;i=i+32){
146 3 if(DBUF[i]==0x00){
147 4 bstop=1;
148 4 break;
149 4 }
150 3 if((DBUF[i]==0xE5)||(DBUF[i+11]==0x0f))
151 3 continue;
152 3 else{
153 4 if(DBUF[i]==0x05) DBUF[i]=0xe5;
154 4 if(!memcmp_cur(&DBUF[i], file_name, 11)) {
155 5 if(flag){
156 6 memcpy_cur(&DBUF[i],file_item,32);
157 6 //更新目录信息
158 6 if(!RBC_Write(start_sec,1,DBUF))
159 6 return DEVICEC_OP_ERR;
160 6 }else{
161 6 memcpy_cur( file_item,&DBUF[i],32);
162 6 }
163 5 find_flag=1;
164 5 bstop=1;
165 5 break;
166 5 }
167 4 }
168 3 }
169 2
170 2 if(bstop==1)break;
171 2 start_sec++;
172 2 sector_temp++;
173 2 if((deviceinfo.type)||(!cur_dir_info.root_flag)){
174 3 if(sector_temp==deviceinfo.SecPerClus){
175 4 sector_temp=0;
176 4 clus_temp=GetNextClusterNum(clus_temp);
177 4 if(clus_temp>0x0fffffef) break;
178 4 start_sec=FirstSectorofCluster(clus_temp);
C51 COMPILER V7.00 HPI 09/22/2005 17:15:31 PAGE 4
179 4 }
180 3 }else{
181 3 if(sector_temp==end_sector) break;
182 3 }
183 2 }
184 1
185 1 if(!find_flag) return FILE_NON_EXIST;
186 1
187 1 return 0;
188 1 }
189
190 /******************************************************
191 在当前目录下插入文件目录项
192 说明:直接在目录尾插入文件目录项
193 ******************************************************/
194 uchar add_file_item(uchar *file_item)
195 {
196 1 uint i;
197 1 uchar bstop,end_sector,find_flag;
198 1 uchar package=1;
199 1 uchar sector_temp;
200 1 ulong start_sec,clus_temp;
201 1
202 1 find_flag=0;
203 1 bstop=0;
204 1 // start_sec=cur_dir_info.start_sec;
205 1 clus_temp=cur_dir_info.start_clue;
206 1 end_sector=(uchar)(deviceinfo.RootEntCnt>>4);
207 1
208 1 //目录没有文件长度,故需要重新搜索
209 1 if((deviceinfo.type)||(!cur_dir_info.root_flag)){
210 2 //得到最后一个簇号
211 2 while(1){
212 3 clus_temp=GetNextClusterNum(clus_temp);
213 3 if(clus_temp>0x0fffffef) break;
214 3 }
215 2 start_sec=FirstSectorofCluster(clus_temp);
216 2 }else{
217 2 start_sec=cur_dir_info.start_sec;
218 2 }
219 1
220 1 while(1){
221 2
222 2 if(!RBC_Read(start_sec,1,DBUF))
223 2 return DEVICEC_OP_ERR;
224 2
225 2 for(i=0;i<deviceinfo.BytePerSec;i=i+32){
226 3 if(DBUF[i]==0x00){
227 4 bstop=1;
228 4 memcpy_cur(&DBUF[i], file_item,32);
229 4 break;
230 4 }
231 3 }
232 2
233 2 if(bstop==1)break;
234 2 start_sec++;
235 2 if((deviceinfo.type)||(!cur_dir_info.root_flag)){
236 3 if(start_sec==deviceinfo.SecPerClus){
237 4 start_sec=FirstSectorofCluster(fat_info.next_free_clus);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -