📄 scmain.lst
字号:
171 3 return (rp->name);
172 3 }
173 2 }
174 1
175 1 return NULL;
176 1 }
177
178 /*
C51 COMPILER V8.06 SCMAIN 01/31/2008 22:24:27 PAGE 4
179 //--------------------------------------------------------------------------------
180 //lookup card name param
181 //--------------------------------------------------------------------------------
182 int lookup_return_val(struct command_param *pm, char *cmd_str)
183 {
184 struct command_param *rp;
185
186 for (rp = pm; rp->name; rp++) {
187 if (mydef_strcasecmp(rp->name, cmd_str) == 0) {
188 return (rp->val);
189 }
190 }
191
192 return (0);
193 }
194 */
195
196 //--------------------------------------------------------------------------------
197 //return current command & move to next
198 //--------------------------------------------------------------------------------
199 char *get_current_cmd(char *buff)
200 {
201 1 struct command_list *plist;
202 1
203 1 if (g_cmdlist!=NULL){
204 2 add_to_retlist(g_cmdlist->message);
205 2 strcpy(buff,g_cmdlist->message);
206 2 plist = g_cmdlist;
207 2 g_cmdlist = g_cmdlist->next;
208 2 free(plist);
209 2 return buff;
210 2 }
211 1
212 1 return(NULL);
213 1 }
214
215
216 //--------------------------------------------------------------------------------
217 //parse command come form serial input
218 //--------------------------------------------------------------------------------
219 int command_parse(char *command_str)
220 {
221 1 char *cmd;
222 1 int i,len;
223 1
224 1 len = strlen(command_str);
225 1 i=0;
226 1 while(i<len){
227 2 while ((command_str[i]==' ' || command_str[i]==0x0d || command_str[i]==0x0a) && i<len){
228 3 i++;
229 3 }
230 2
231 2 cmd = &command_str[i];
232 2 while (command_str[i]!=' ' && command_str[i]!=0x0d && command_str[i]!=0x0a && i<len){
233 3 i++;
234 3 }
235 2
236 2 command_str[i]='\0';
237 2 if (strlen(cmd)){
238 3 add_to_cmdlist(cmd);
239 3 command_str[i]=' ';
240 3 }
C51 COMPILER V8.06 SCMAIN 01/31/2008 22:24:27 PAGE 5
241 2 }
242 1
243 1 return 0;
244 1 }
245
246
247 //--------------------------------------------------------------------------------
248 //exec command come form serial input
249 //--------------------------------------------------------------------------------
250 char *command_exec()
251 {
252 1 char *ret_ptr = NULL; //return message pointer;
253 1 char cmd[MAX_CMD_LENGTH];
254 1 int (*cmd_func)();
255 1 int ret = RET_ERROR;
256 1
257 1 memset(cmd, '\0', sizeof (cmd));
258 1 if (get_current_cmd(cmd)!=NULL){
259 2 cmd_func = lookup_command_func(cmd_main,cmd);
260 2 if (cmd_func != NULL) {
261 3 ret = (*cmd_func)();
262 3 return(lookup_return_str(ret));
263 3 }else{
264 3 //do some card select
265 3 if (fp_card_selected != NULL) {
266 4 ret = (*fp_card_selected)(cmd);
267 4 }
268 3 return(lookup_return_str(ret));
269 3 }
270 2 }
271 1
272 1 return NULL;
273 1 }
274
275 //--------------------------------------------------------------------------------
276 //process led blinking
277 //--------------------------------------------------------------------------------
278 void sc_process_blinking()
279 {
280 1 static unsigned char xdata blinkonoff;
281 1
282 1 blinkonoff = !blinkonoff;
283 1 if (fp_blinking != NULL) {
284 2 (*fp_blinking)(blinkonoff);
285 2 }
286 1
287 1 return;
288 1 }
289
290
291 //=============================================================================-
292 //main function
293 //=============================================================================-
294 int sc_main(char *cmd_buff,int size)
295 {
296 1 struct command_list *plist;
297 1 char *cmd_ret;
298 1
299 1 if (size > BUFF_LENGTH) {
300 2 size=BUFF_LENGTH-1;
301 2 }
302 1 if (size > 0) {
C51 COMPILER V8.06 SCMAIN 01/31/2008 22:24:27 PAGE 6
303 2 cmd_buff[size] = '\0';
304 2 }
305 1
306 1 //PDEBUG("command recieve: %s\r\n", cmd_buff);
307 1 command_parse(cmd_buff);
308 1 if (g_cmdlist != NULL) {
309 2 //clear blinking
310 2 fp_blinking=(int(*)(unsigned char))NULL;
311 2 cmd_ret=command_exec();
312 2 }
313 1 //free command list
314 1 free_cmdlist();
315 1 //PDEBUG("command return: %s\r\n", cmd_ret);
316 1
317 1 //process return string
318 1 if (cmd_ret != NULL){
319 2 strcpy(g_in_buffer,cmd_ret);
320 2
321 2 plist = g_retlist;
322 2 while(plist != NULL && strlen(g_in_buffer) < BUFF_LENGTH-2){
323 3 strcat(g_in_buffer,plist->message);
324 3 strcat(g_in_buffer," ");
325 3 plist = plist->next;
326 3 }
327 2 free_retlist();
328 2 strcat(g_in_buffer,"\r\n");
329 2 }
330 1
331 1 return strlen(g_in_buffer);
332 1 }
333
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 980 ----
CONSTANT SIZE = 72 ----
XDATA SIZE = 71 ----
PDATA SIZE = ---- ----
DATA SIZE = 6 85
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -