📄 m32.lst
字号:
509 2 pDst++;
510 2
511 2 }
512 1
513 1
514 1 #if 0
for(i=0; i<nSrcLength; i+=2)
{
// 输出高4位
if((*pSrc>='0') && (*pSrc<='9'))
{
*pDst = (*pSrc - '0') << 4;
}
else
{
*pDst = (*pSrc - 'A' + 10) << 4;
}
pSrc++;
// 输出低4位
if(*pSrc>='0' && *pSrc<='9')
{
*pDst = *pSrc - '0';
}
else
{
*pDst = *pSrc - 'A' + 10;
C51 COMPILER V7.50 M32 04/04/2007 15:01:44 PAGE 10
}
pSrc++;
pDst++;
}
#endif
547 1 // 返回目标数据长度
548 1 return nSrcLength / 2;
549 1 }
550
551
552
553 /**************************************************************************************************
554 //PDU串中的号码和时间,都是两两颠倒的字符串。利用下面两个函数可进行正反变换:
555 // 正常顺序的字符串转换为两两颠倒的字符串,若长度为奇数,补''F''凑成偶数 // 如:"8613851872468" --> "6831588
-12764F8"
556 // pSrc: 源字符串指针
557 // pDst: 目标字符串指针
558 // nSrcLength: 源字符串长度
559 // 返回: 目标字符串长度
560 ****************************************************************************************************/
561 //int gsmInvertNumbers(const char* pSrc, char* pDst, int nSrcLength)
562 int gsmInvertNumbers(char xdata* pSrc, char xdata* pDst, int nSrcLength)
563 {
564 1
565 1
566 1 int nDstLength; // 目标字符串长度
567 1 char ch; // 用于保存一个字符
568 1 int i;
569 1
570 1 // 复制串长度
571 1 nDstLength = nSrcLength;
572 1 // 两两颠倒
573 1 for(i=0; i<nSrcLength;i+=2)
574 1 {
575 2 ch = *pSrc++; // 保存先出现的字符
576 2 *pDst++ = *pSrc++; // 复制后出现的字符
577 2 *pDst++ = ch; // 复制先出现的字符
578 2 }
579 1 // 源串长度是奇数吗?
580 1 if(nSrcLength & 1)
581 1 {
582 2 *(pDst-2) = 'F'; // 补''F''
583 2 nDstLength++; // 目标串长度加1
584 2 }
585 1 // 输出字符串加个结束符
586 1 *pDst = '\0';
587 1 // 返回目标字符串长度
588 1 return nDstLength;
589 1 }
590
591
592 // 两两颠倒的字符串转换为正常顺序的字符串
593 // 如:"683158812764F8" --> "8613851872468"
594 // pSrc: 源字符串指针
595 // pDst: 目标字符串指针
596 // nSrcLength: 源字符串长度
597 // 返回: 目标字符串长度
598 int gsmSerializeNumbers(char* pSrc, char* pDst, int nSrcLength)
599 {
600 1 int i,nDstLength; // 目标字符串长度
601 1 char ch; // 用于保存一个字符
C51 COMPILER V7.50 M32 04/04/2007 15:01:44 PAGE 11
602 1
603 1 // 复制串长度
604 1 nDstLength = nSrcLength;
605 1
606 1 // 两两颠倒
607 1 for(i=0; i<nSrcLength;i+=2)
608 1 {
609 2 ch = *pSrc++; // 保存先出现的字符
610 2 *pDst++ = *pSrc++; // 复制后出现的字符
611 2 *pDst++ = ch; // 复制先出现的字符
612 2 }
613 1
614 1 // 最后的字符是'F'吗?
615 1 if(*(pDst-1) == 'F')
616 1 {
617 2 pDst--;
618 2 nDstLength--; // 目标字符串长度减1
619 2 }
620 1
621 1 // 输出字符串加个结束符
622 1 *pDst = '\0';
623 1
624 1 // 返回目标字符串长度
625 1 return nDstLength;
626 1 }
627
628
629
630
631
632
633 uchar gsmDoUserTask(uchar* task)
634 {
635 1
636 1 uchar xdata* ptr;
637 1 if(task[0]!='M' && task[0] != 'A' && task[0] != 'B' && task[0] != 'C' && task[0]!='D'&& task[0]!='
-T')
638 1 { //如果你编辑了错误短信:check ok
639 2 sprintf(TP_UD,"Fail"); //gsmSendMessage("Fail");
640 2 return 0;
641 2 }
642 1 if(strncmp(task,"TM30S",5)==0)
643 1 {//定时跟踪:设置追踪器每隔30 S回复一条地理位置信息
644 2 if(gsmCheckRightNumber("M",0)==NULL && gsmCheckRightNumber("A",0)==NULL \
645 2 && gsmCheckRightNumber("B",0)==NULL && gsmCheckRightNumber("C",0)==NULL \
646 2 && gsmCheckRightNumber("D",0)==NULL)
647 2 {
648 3 //如果不是已授权号码,追踪器不会回应
649 3 return 2;
650 3 }
651 2
652 2 GPSTimerReq=1;
653 2 GPSTimer30=0;
654 2 sprintf(TP_UD,"Timer 30 s!");
655 2 return 1;
656 2 }
657 1 else
658 1 if(strncmp(task,"TM",2)==0)
659 1 {//取消自动回复功能方法:发送一条短信"TM"到追踪器,就可以完成删除。
660 2
661 2 if(gsmCheckRightNumber("M",0)==NULL && gsmCheckRightNumber("A",0)==NULL \
662 2 && gsmCheckRightNumber("B",0)==NULL && gsmCheckRightNumber("C",0)==NULL \
C51 COMPILER V7.50 M32 04/04/2007 15:01:44 PAGE 12
663 2 && gsmCheckRightNumber("D",0)==NULL)
664 2 {
665 3 //如果不是已授权号码,追踪器不会回应
666 3 return 2;
667 3 }
668 2
669 2 GPSTimerReq=0;
670 2 GPSTimer30=0;
671 2 sprintf(TP_UD,"Cancel Timer 30 s!");
672 2 return 1;
673 2 }
674 1
675 1
676 1 putstring1("Del Right Number:");
677 1
678 1 if(task[1] == '\0')
679 1 {
680 2 //delete:
681 2 if(gsmSearchPhone(task)==0)
682 2 { //非授权号码,不能删除
683 3 sprintf(TP_UD,"You are not master!");
684 3 return 0;
685 3 }
686 2
687 2 if(gsmDeletePhone(gsmSearchPhone(task)))
688 2 {
689 3 sprintf(TP_UD,"OK");
690 3 return 1;
691 3 }
692 2 else
693 2 {
694 3 sprintf(TP_UD,"Fail"); //gsmSendMessage("Fail");
695 3 return 0;
696 3 }
697 2 }
698 1
699 1
700 1 putstring1("Set Right Number:");
701 1
702 1 if((ptr=strstr(task,"M")) != NULL) //设置主授权号码
703 1 { //设置授权:Master
704 2 ptr++;
705 2 putstring1("Phone Number to Save:\r\n");
706 2 putstring1(ptr);
707 2 putstring1("\r\n");
708 2
709 2 if(gsmSavePhone(ptr,"M")==TRUE) //起名为:M
710 2 //if(gsmPhoneBookTask(GSM_SAVE_PHONE,ptr,"M",PhoneNumber))
711 2 {
712 3
713 3 putstring1("Save Phone Ok,Number is:\r\n");
714 3 sprintf(TPA,"++");
715 3 strcat(TPA, ptr);
716 3 putstring1(TPA);
717 3 putstring1("\r\n");
718 3
719 3 sprintf(TP_UD,"OK");
720 3
721 3 return 1; //gsmSendMessage("OK");
722 3
723 3 }
724 2 else
C51 COMPILER V7.50 M32 04/04/2007 15:01:44 PAGE 13
725 2 {
726 3 putstring1("Save Phone Fail!");
727 3 sprintf(TP_UD,"Fail"); //gsmSendMessage("Fail");
728 3 return 0;
729 3
730 3 }
731 2
732 2 }
733 1
734 1 if(task[0] == 'A') //设置第一个受权号码
735 1 {
736 2 //if(gsmPhoneBookTask(GSM_SEARCH_PHONE,NULL,"M",0))
737 2 if(gsmSearchPhone("M")) //是否有主授权号码?
738 2 {
739 3 if((ptr=strstr(task,"A")) != NULL)
740 3 {
741 4 //增加授权:
742 4
743 4 ptr++;
744 4 putstring1("Phone Number to Save:\r\n");
745 4 putstring1(ptr);
746 4 putstring1("\r\n");
747 4 PhoneNumber=2;
748 4 //if(gsmPhoneBookTask(GSM_SAVE_PHONE,ptr,"A",PhoneNumber))
749 4 if(gsmSavePhone(ptr,"A")==TRUE) //第一个授权,起名为:A
750 4 {
751 5
752 5 putstring1("Save Phone Ok,Number is:\r\n");
753 5 sprintf(TPA,"++");
754 5 strcat(TPA, ptr);
755 5 putstring1(TPA);
756 5 putstring1("\r\n");
757 5
758 5 sprintf(TP_UD,"OK");
759 5
760 5 return 1; //gsmSendMessage("OK");
761 5
762 5 }
763 4 else
764 4 {
765 5 putstring1("Save Phone Fail!");
766 5 sprintf(TP_UD,"Fail"); //gsmSendMessage("Fail");
767 5 return 0;
768 5
769 5 }
770 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -