📄 config.lst
字号:
366 3 }
367 2 }
368 1 return TRUE;
369 1 }
370
371 /*
372 *****************************************************************************************************
373 *FUNC:
374 *NOTE:
375 ;
376 *****************************************************************************************************
377 */
378 unsigned char Copy_Config_Data(unsigned char com,unsigned char id,unsigned char length)reentrant
379 {
380 1 unsigned char i;
381 1
382 1 //拷贝数据到缓冲,准备存入FALSH
383 1 if (id < CONFIG_PARSE_NUM) {
384 2 for (i=0; i<length; i++) {
385 3 ConfigRegPtr[id][i] = *(ComparePtr+i);
386 3 }
387 2 ConfigRegPtr[id][length] = 0; //结束符
388 2 } else if (id == ID_PINGIP){
389 2 for (i=0; i<length; i++) {
390 3 PingIpStr[i] = *(ComparePtr+i); //PINPIP作为回显用,不作为存入FLASH用
391 3 }
392 2 PingIpStr[length] = 0; //结束符
393 2 } else {
394 2 return COM_ERROR;
395 2 }
396 1
397 1 if (com == UART_COM) { //串口配置须要回显配置信息
398 2 if (id == ID_HEARTTIME) {
399 3 Uart0Putf(pHeartTime[*ComparePtr-0x31]); //'1' ...
400 3 } else if (id == ID_BAUDRATE) {
401 3 Uart0Putf(pBaudRate[*ComparePtr-0x31]); //'1' ...
402 3 } else if (id == ID_DHCPMODE) {
403 3 Uart0Putf(pDhcpMode[*ComparePtr-0x30]); //只能,'0'跟'1'
404 3 } else if (id == ID_COMC){ // 0: NONE 1:OLD 2:EVEN
405 3 Uart0Putf(pComcBit[*ComparePtr-0x30]); //提示信息
406 3 } else {
407 3 Uart0Putsl(ComparePtr,length);
408 3 }
409 2
410 2 /*
411 2 Uart0Putf("\r\n2:\r\n");
412 2 if (id == ID_PINGIP) {
413 2 Uart0Puts(PingIpStr);
414 2 } else {
415 2 Uart0Putsl(ConfigRegPtr[id],length);
416 2 }*/
417 2 }
418 1 return TRUE;
419 1 }
420
421 /*
422 *****************************************************************************************************
423 *FUNC: 解析IP地址
C51 COMPILER V7.06 CONFIG 09/26/2008 13:36:16 PAGE 8
424 *NOTE: 字符串化为10进制数据,返回相应的错错误类型
425 *****************************************************************************************************
426 */
427 typedef struct _IP_STRING_STRUCT_
428 {
429 unsigned char bit_num; //几位
430 unsigned char bytes[4]; //'1''9''2'
431 }IP_STRING_STRUCT;
432 IP_STRING_STRUCT xdata ip_string[4];
433
434
435 unsigned char Parse_Ip(unsigned char com,unsigned char id, unsigned char xdata *ipbytes) reentrant
436 {
437 1 unsigned char length=0;
438 1 unsigned char dotnum=0;
439 1
440 1 unsigned char i,ch;
441 1 unsigned char j,k;
442 1 unsigned int result=0;
443 1
444 1
445 1 if (com >= END_CHAR_NUM) {
446 2 return COM_ERROR;
447 2 }
448 1
449 1 if ((ComparePtr == NULL) || (*ComparePtr == '\r')
450 1 || (*ComparePtr == '\0') || (*ComparePtr == '&')) { //ComparePtr指向匹配后的有效数据
451 2 return VALUE_NULL;
452 2 }
453 1
454 1 if (Parse_Length(ComparePtr,15,EndChar[com],&length) == FALSE) { //IP最大度为15位,255.255.255.255
455 2 return LENGTH_ERROR;
456 2 }
457 1
458 1 if (Parse_Value(ComparePtr,length,PARSE_IP_TYPE,&dotnum) == FALSE) { //判断值是否在0-9之内,如果是IP统计'.
-'个数
459 2 return VALUE_ERROR;
460 2 }
461 1
462 1 if (dotnum != 3) {
463 2 return VALUE_ERROR;
464 2 }
465 1
466 1 //以下解析IP为10进制数
467 1 k=0;
468 1 j=0;
469 1 for (i=0; i<4; i++) {
470 2 ip_string[i].bit_num = 0; //初始化
471 2 }
472 1 for (i=0; i<length; i++) {
473 2 ch = *(ComparePtr+i);
474 2 if (ch != '.') {
475 3 if (++j < 4) { //记下没找到'.'此时的长度如IP:255. 最大为255即3位,超出即出错
476 4 ip_string[k].bytes[j-1] = ch;
477 4 if (k == 3) {
478 5 ip_string[k].bit_num = j; //几位数,如IP:192.即3位数
479 5 }
480 4 } else {
481 4 return VALUE_ERROR;
482 4 }
483 3 } else { //找到一个合法的如IP:192.
484 3 if (k > 3) {
C51 COMPILER V7.06 CONFIG 09/26/2008 13:36:16 PAGE 9
485 4 return VALUE_ERROR;
486 4 }
487 3 ip_string[k++].bit_num = j; //几位数,如IP:192.即3位数
488 3 if (j == 0) {
489 4 return VALUE_ERROR; //这种情况,可以判断出连续..或,第一个是.的情况
490 4 }
491 3 j = 0;
492 3 }
493 2 }
494 1 if (ip_string[3].bit_num == 0) { //第四字节没有'.'做为结束符判断
495 2 return VALUE_ERROR;
496 2 }
497 1
498 1 for (i=0; i<4; i++) {
499 2 result = DecToHex(ip_string[i].bytes,ip_string[i].bit_num);
500 2 if (result > 255) {
501 3 return VALUE_ERROR;
502 3 }
503 2 }
504 1
505 1 if (com == READ_COM) { //第一次从FLASH读出时要转换为HEX
506 2 for (i=0; i<4; i++) {
507 3 result = DecToHex(ip_string[i].bytes,ip_string[i].bit_num);
508 3 ipbytes[i] = result;
509 3 }
510 2 return TRUE; //第一次从FLASH读出时无须再拷贝
511 2 } else if (id == ID_PINGIP){ //PING IP须要解析
512 2 for (i=0; i<4; i++) {
513 3 result = DecToHex(ip_string[i].bytes,ip_string[i].bit_num);
514 3 ipbytes[i] = result;
515 3 }
516 2 }
517 1 return (Copy_Config_Data(com,id,length));
518 1 }
519
520
521 /*
522 *****************************************************************************************************
523 *FUNC: 解析PORT
524 *NOTE: 字符串化为10进制数据,返回相应的错错误类型
525 portbytes[0]=*((unsigned char*)&temp);
526 portbytes[1]= *(((unsigned char*)&temp)+1);
527
528 *****1:第一次从FLASH读出时要转换为HEX
529 2:后面通过串口修改及HTTP修改须复位重起才有效
530 *****************************************************************************************************
531 */
532 unsigned char Parse_Port(unsigned char com,unsigned char id, unsigned char xdata *portbytes)reentrant
533 {
534 1 unsigned char length=0;
535 1 unsigned char dotnum=0;
536 1 static unsigned long xdata temp;
537 1
538 1 if (com >= END_CHAR_NUM) {
539 2 return COM_ERROR;
540 2 }
541 1
542 1 if ((ComparePtr == NULL) || (*ComparePtr == '\r')
543 1 || (*ComparePtr == '\0') || (*ComparePtr == '&')) { //ComparePtr指向匹配后的有效数据
544 2 return VALUE_NULL;
545 2 }
546 1
C51 COMPILER V7.06 CONFIG 09/26/2008 13:36:16 PAGE 10
547 1 if (Parse_Length(ComparePtr,5,EndChar[com],&length) == FALSE) { //端口最大度为5位,1-65535
548 2 return LENGTH_ERROR;
549 2 }
550 1
551 1 if (Parse_Value(ComparePtr,length,PARSE_OTHER_TYPE,&dotnum) == FALSE) { //判断值是否在0-9之内,如果是IP统
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -