GSMGPS9.CPP
上传用户:b2s168
上传日期:2007-10-24
资源大小:9k
文件大小:18k
开发平台:

DOS

  1. //read gps in com1;
  2. //read gsm in com2
  3. #include <dos.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <conio.h>
  8. #include <ctype.h>
  9. #include "gserial2.h"
  10. //#define VERSION 0x0101
  11. #define FALSE           0
  12. #define TRUE            1
  13. #define NO_ERROR         0       /* No error               */
  14. #define BUF_OVFL         1       /* Buffer overflowed      */
  15. //#define ESC             0x1B    /* ASCII Escape character */
  16. //#define ASCII           0x007F  /* Mask ASCII characters  */
  17. //#define SBUFSIZ         0x4000  /* Serial buffer size     */
  18. //#define AKEY            0x41
  19. //int SError=NO_ERROR;
  20. int selfmadegps=TRUE;
  21. int gpspro=FALSE;
  22. char STRGPGGA[100];
  23. char STRGPRMC[100];
  24. int gpscount=0;
  25. //static   char  ccbuf[SBUFSIZ];
  26. //unsigned int   startbuf        = 0;
  27. //unsigned int   endbuf          = 0;
  28. //char c;
  29. //char   value1[50];
  30. char GpsBuf[100];
  31. char tempchar[3]="0";
  32. //int            portbase        = 0;
  33. int test;
  34. void clearstring(char* a,int l)
  35. { int i;
  36.   for(i=0;i<=l-1;i++)
  37.   a[i]='';
  38. }
  39. void   interrupt(*oldvects[2])(...);
  40. struct PA
  41. { double lon;
  42.   double lat;
  43. // int gpsstate;
  44. // long timenow;
  45.   double freq;
  46.   double output;
  47.   double hu;
  48.  char slon[30];
  49.  char slat[30];
  50.  char gpsstatus;
  51.  char gpstime[12];
  52.  } mypa;
  53. /* Handle communications interrupts and put them in ccbuf */
  54. void interrupt com1_int(...)
  55. {    disable();
  56.      char c;
  57.      static int EOT_flag=1;//end of a fram flag,set to 1 to indicate a end of frame
  58.  if ((inportb(COM1BASE + IIR) & IIR_MASK) == IIR_RX_ID)
  59.     {    c= inportb(COM1BASE + RXR);
  60.  if (c=='$' /*&& EOT_flag*/)
  61.   {      EOT_flag=0;
  62. *GpsBuf='';
  63. //  clearstring(tread,45);
  64.   }
  65.   tempchar[0]=c;
  66.   strcat(GpsBuf,tempchar);
  67.  if (c=='n'&&EOT_flag==0)
  68.   {
  69.      if ((strstr(GpsBuf,"GPGGA")-GpsBuf)==1)
  70. { *STRGPGGA='';
  71. //   clearstring(STRGPGGA,100);
  72.   strcpy(STRGPGGA,GpsBuf);
  73.   //fprintf (stdout,"interrupt");
  74.   //gpsworkflag=1;
  75.   //GpsShow=1;
  76.     //   printf("gps is here");
  77.   gpscount++;
  78.   EOT_flag=1;
  79. }
  80. /* if (strstr(tread,"GPRMC")!=NULL)
  81.   { clearstring(STRGPRMC,100);
  82.  strcpy(STRGPRMC,tread);
  83. // gpsworkflag=1;
  84. // GpsShow=1;
  85.  EOT_flag=1;
  86.        }*/
  87.  }
  88.     }
  89.     /* Signal end of hardware interrupt */
  90.     outportb(PIC8259_ICR, PIC8259_EOI);
  91.     enable();
  92. }
  93. void interrupt com2_int(...)
  94. {
  95.  int temp;
  96. disable();
  97. temp = (inportb(COM2BASE+IIR)) & IIR_MASK; // why interrupt was called
  98. switch(temp)
  99. {   case 0x00:  // modem status changed
  100. inportb(COM2BASE+MSR);   // read in useless char
  101. break;
  102. /*case 0x02:  // Request To Send char
  103. if (outhead != outtail) // there's a char to send
  104. {
  105. outportb(portbase+TXR,outbuf[outhead++]); // send the character
  106. if (outhead == OBUF_LEN)
  107. outhead=0; // if at end of buffer, reset pointer
  108. }
  109. break;*/
  110. case 0x04:  // character ready to be read in
  111. inbuf[inhead++] = inportb(COM2BASE+RXR);// read character into inbuffer
  112. if (inhead == IBUF_LEN) // if at end of buffer
  113. inhead=0;           // reset pointer
  114. break;
  115. case 0x06:  // line status has changed
  116. inportb(COM2BASE+LSR);     // read in useless char
  117. break;
  118. default:
  119. break;
  120. }
  121. outportb(PIC8259_ICR, PIC8259_EOI); // Signal end of hardware interrupt
  122. enable(); // reenable interrupts at the end of the handler
  123. }
  124.  char* stringcopy(char* a,int start,int end)
  125.    {static char temp[20];
  126.      char s;
  127.      int i;
  128. //     clearstring(temp,50);
  129.      for (i=start;i<=end;i++)
  130.      {temp[i-start]=a[i];
  131.      }
  132.   temp[end-start+1]='';
  133.    // strcpy(a,temp);
  134.   return temp;
  135.    }
  136. double getvalue(char* a,int i)
  137. {  char temp[20];
  138.    char temp2[20];
  139.    char temp1[20];
  140.    double tempa;
  141.    double tempb;
  142.    double tempc;
  143.    clearstring(temp,20);
  144.    clearstring(temp1,20);
  145. //down is main swich to set different value
  146.   switch(i)
  147.   { case 1:
  148.   if (selfmadegps)
  149.   {
  150.    strcpy(temp,stringcopy(a,14,22));
  151.    strcpy(temp2,temp);
  152.       //    printf("nprint the temp of gpgga lat:%s",STRGPGGA);
  153.    strcpy(temp1,stringcopy(temp,0,1));
  154.     //     printf("nprint the string of temp:%s",temp1);
  155.    tempa=atof(temp1);
  156.     //      printf("nthe value of tempa is :%s",temp1);
  157.    strcpy(temp1,stringcopy(temp2,2,8));
  158.    tempb=atof(temp1);
  159.    tempc=tempa+tempb/60.0;
  160.     //    printf("nprint lat:%lf",tempc);
  161.    }
  162.     /*    if (gpspro)
  163.    {strcpy(temp,stringcopy(a,17,26));
  164.    strcpy(temp2,temp);
  165.    strcpy(temp1,stringcopy(temp,0,1));
  166.    tempa=atof(temp1);
  167.    strcpy(temp1,stringcopy(temp2,2,9));
  168.    tempb=atof(temp1);
  169.    tempc=tempa+tempb/60.0;
  170.    }*/
  171.    break;
  172.     case 2:
  173.   if (selfmadegps)
  174.   {
  175.   strcpy(temp,stringcopy(a,26,35));
  176.   strcpy(temp2,temp);
  177.   strcpy(temp1,stringcopy(temp,0,2));
  178.   tempa=atof(temp1);
  179.   strcpy(temp1,stringcopy(temp2,3,9));
  180.   tempb=atof(temp1);
  181.   tempc=tempa+tempb/60.0;
  182.   }
  183.  /* if (gpspro)
  184.   { strcpy(temp,stringcopy(a,30,40));
  185.     strcpy(temp2,temp);
  186.     strcpy(temp1,stringcopy(temp,0,2));
  187.     tempa=atof(temp1);
  188.     strcpy(temp1,stringcopy(temp2,3,10));
  189.     tempb=atof(temp1);
  190.     tempc=tempa+tempb/60.0;
  191.   }*/
  192.   break;
  193. /*   case 3:strcpy(temp,stringcopy(a,39,39));
  194.   tempc=atof(temp);
  195.   break;
  196.    case 4:
  197.  strcpy(temp8,stringcopy(a,7,12));
  198.   tempc=atof(temp8);*/
  199.    }
  200. return tempc;
  201. }
  202.  char getgpsstate(char* a)
  203.   { char temp[3];
  204.    strcpy(temp,stringcopy(a,39,39));
  205.    return temp[0];
  206.    }
  207.   char* getgpstime(char* a)
  208.   {static  char temp[10];
  209.    char temp1[3]="0";
  210.    unsigned int hour;
  211.    strcpy(temp,stringcopy(a,7,8));
  212.       //  printf("the temp is :%sn",temp);
  213.    hour=atoi(temp);
  214.    if (hour<=8)
  215.     { hour+=8;
  216.     itoa(hour,temp,10);}
  217.      else
  218.     { hour-=16;
  219.       itoa(hour,temp,10);
  220.       strcat(temp1,temp);
  221.       strcpy(temp,temp1);
  222.       }
  223.    strcat(temp,":");
  224.    strcat(temp,stringcopy(a,9,10));
  225.    strcat(temp,":");
  226.    strcat(temp,stringcopy(a,11,12));
  227.       //  printf("the string is :%sn",temp);
  228.    return temp;
  229.   }
  230. void readgpsstring()
  231. {
  232.   double value1,value2;   //for longitude.
  233.   long value3,value4;
  234.   char temps1[20],temps4[20],temps2[20],temps3[20];
  235.   value1=mypa.lon;
  236.   value1=value1*1000000;
  237.   value3=(long)value1;
  238.   value4=value3;
  239.   ltoa(value3,temps1,10);
  240.   ltoa(value4,temps4,10);
  241.   strcpy(temps2,stringcopy(temps1,0,2));
  242.   temps2[3]='.';
  243.   temps2[4]='';
  244.   strcpy(temps3,stringcopy(temps4,3,8));
  245.   temps3[6]='';
  246.   strcat(temps2,temps3);
  247.   strcpy(mypa.slon,temps2);
  248.   value1=mypa.lat;         //for latitude.
  249. //  printf("nprint mypa.lat:%lfn",mypa.lat);
  250.   value1=value1*1000000;
  251.   value3=(long)value1;
  252.   value4=value3;
  253.   ltoa(value3,temps1,10);
  254.   ltoa(value4,temps4,10);
  255.   strcpy(temps2,stringcopy(temps1,0,1));
  256.   temps2[2]='.';
  257.   temps2[3]='';
  258.   strcpy(temps3,stringcopy(temps4,2,7));
  259.   temps3[6]='';
  260.   strcat(temps2,temps3);
  261.   strcpy(mypa.slat,temps2);
  262.  }
  263. void readgps()
  264. {
  265. mypa.lon=getvalue(STRGPGGA,2);
  266. mypa.lat=getvalue(STRGPGGA,1);
  267. mypa.gpsstatus=getgpsstate(STRGPGGA);
  268. strcpy(mypa.gpstime,getgpstime(STRGPGGA));
  269.      //mypa.gpsstate=int(getvalue(STRGPGGA,3));
  270.     // mypa.timenow=(long)getvalue(STRGPGGA,4);
  271.     // mypa.timenow=long(getvalue(STRGPRMC,4));
  272. readgpsstring();
  273.       //  printf("the string of gpstime is:%s",mypa.gpstime);
  274.     // printf("the status of GPS is :%c",mypa.gpsstatus);
  275. }
  276. /*  get status of the port  */
  277. int read_status_com(int portn)
  278. {  return(inp(portn+5));
  279. }
  280. /*  send one valid char from the port  */
  281. void send_char_com(int portn,unsigned char cc)
  282. {  while ((read_status_com(portn) & 0x40) == 0);
  283.    outportb(portn,cc);
  284. }
  285. /*  send one string from the port  */
  286. void send_string_com(int portn,unsigned char *buf) //revised on 03.4.23.
  287. {  int k; k=0;
  288. int strlength=strlen(buf);
  289.    do { send_char_com(portn,*(buf + k));
  290. k++;
  291.   } while ((k < strlength));
  292. }
  293. void readch(char &ch)
  294. {  if (inhead != intail)     // there is a character
  295. { disable();                          // disable irqs while getting char
  296. ch = inbuf[intail++];               // get character from buffer
  297. if (intail == IBUF_LEN) // if at end of in buffer
  298. intail=0; // reset pointer
  299. enable();    // re-enable interrupt                             
  300. }
  301.        else ch = -1;
  302. }
  303. /* Install our functions to handle communications */
  304. void setvects(int comport)
  305. {   switch (comport)
  306. {case COM1BASE:
  307. oldvects[0] = getvect(0x0C);
  308.     setvect(0x0C, com1_int);
  309. break;
  310. case COM2BASE:
  311. oldvects[1] = getvect(0x0B);
  312. setvect(0x0B, com2_int);
  313. default:  break;
  314. }
  315. }
  316. /* Uninstall our vectors before exiting the program */
  317. void resvects(int comport)
  318. { switch (comport)
  319. {case COM1BASE:
  320. setvect(0x0C, oldvects[0]);
  321. break;
  322. case COM2BASE:
  323. setvect(0x0B, oldvects[1]);
  324. default:  break;
  325. }
  326. }
  327. /* Tell modem that we're ready to go */
  328. void serial::comm_on(void)
  329. {   unsigned  char temp, pnum;
  330. disable();
  331. temp = inportb(portbase + MCR) | 0x0f;//MCR_INT;
  332. outportb(portbase + MCR, temp);
  333. temp = (inportb(portbase + IER)) | IER_RX_INT;//|IER_TX_INT;
  334. outportb(portbase + IER, temp);
  335. pnum = (portbase == COM1BASE ? COM1 : COM2);
  336. temp = inportb(PIC8259_IMR) & (pnum == COM1 ? IRQ4 : IRQ3);
  337. outportb(PIC8259_IMR, temp);
  338.  // temp = inportb(portbase + MCR) | MCR_DTR | MCR_RTS;
  339.  // outportb(portbase + MCR, temp);
  340. enable();
  341. }
  342. void serial::comm_off(void)
  343. {   unsigned char  temp;   //revised on 03.4.24. the type of the variant is modified.
  344.     disable();
  345. temp = inportb(PIC8259_IMR) ;
  346. outportb(PIC8259_IMR, temp| ~IRQ3 | ~IRQ4);
  347. outportb(portbase + IER, 0);
  348. outportb(portbase + MCR, 0);
  349. enable();
  350. }
  351. void serial::init_serial(void)
  352. {
  353.     //endbuf = startbuf = 0;
  354. int comport;
  355. comport=portbase;
  356. setvects(comport);
  357. comm_on();
  358. }
  359. serial::~serial()
  360. {   int comport; 
  361. comport=portbase;
  362.     comm_off();
  363.     resvects(comport);
  364. }
  365. /* Set the port number to use */
  366. int serial::SetPort(int Port)
  367. {
  368.     int   Offset, far *RS232_Addr;
  369.     switch (Port)
  370.     { /* Sort out the base address */
  371.       case COM1 : Offset = 0x0000;
  372.   break;
  373.       case COM2 : Offset = 0x0002;
  374.   break;
  375.       default   : return (-1);
  376.     }
  377. RS232_Addr = (int far *)MK_FP(0x0040, Offset);  /* Find out where the port is. */
  378.     if (*RS232_Addr == NULL) return (-1);/* If NULL then port not used. */
  379.     portbase = *RS232_Addr;              /* Otherwise set portbase      */
  380.     return (0);
  381. }
  382. /* This routine sets the speed; will accept funny baud rates. */
  383. /* Setting the speed requires that the DLAB be set on.        */
  384. int serial::SetSpeed(int Speed)
  385. {
  386.     char c;
  387.     int divisor;
  388.     if (Speed == 0)            /* Avoid divide by zero */
  389. return (-1);
  390.     else
  391. divisor = (int) (115200L/Speed);
  392.     if (portbase == 0)
  393. return (-1);
  394.     disable();
  395.     c = inportb(portbase + LCR);
  396.     outportb(portbase + LCR, (c | 0x80)); /* Set DLAB */
  397.     outportb(portbase + DLL, (divisor & 0x00FF));
  398.     outportb(portbase + DLH, ((divisor >> 8) & 0x00FF));
  399.     outportb(portbase + LCR, c);          /* Reset DLAB */
  400.     enable();
  401.     return (0);
  402. }
  403. /* Set other communications parameters */
  404. int serial::SetOthers(int Parity, int Bits, int StopBit)
  405. {    int       setting;
  406.     if (portbase == 0)
  407. return (-1);
  408.     if (Bits < 5 || Bits > 8)
  409. return (-1);
  410.     if (StopBit != 1 && StopBit != 2)
  411. return (-1);
  412.     if (Parity !=LCR_NO_PARITY && Parity != LCR_ODD_PARITY && Parity != LCR_EVEN_PARITY)
  413. return (-1);
  414.     setting  = Bits-5;
  415.     setting |= ((StopBit == 1) ? 0x00 : 0x04);
  416.     setting |= Parity;
  417.     disable();
  418.     outportb(portbase + LCR, setting);
  419.     enable();
  420.     return (0);
  421. }
  422. /* Set up the port */
  423. serial::serial(int Port, int Speed, int Parity, int Bits, int StopBit)
  424. {
  425. flag = 0;
  426. if (SetPort(Port))
  427.   flag = -1;
  428. if (SetSpeed(Speed))
  429.   flag = -1;
  430. if (SetOthers(Parity, Bits, StopBit))
  431.   flag = -1;
  432. if (!flag)
  433.    init_serial();
  434. }
  435. /*  Control-Break interrupt handler */
  436. int c_break(void)
  437. {    int temp;
  438. disable();
  439.     temp = inportb(PIC8259_IMR) | ~IRQ3 | ~IRQ4;
  440. outportb(PIC8259_IMR, temp);
  441. outportb(COM1BASE + IER, 0);
  442. outportb(COM2BASE+IER,0);
  443. outportb(COM1BASE + MCR, 0);
  444.     outportb(COM2BASE + MCR, 0);
  445.     enable();
  446.     fprintf(stderr, "nStill online.n");
  447.     return(0);
  448. }
  449. void swap(char* x,char* y)
  450. {    char temp;
  451. temp=*x;
  452. *x=*y;
  453. *y=temp;
  454. }
  455. int msgsend(char *phoneno,char *outstr)
  456. {       char  c=0;
  457.        unsigned int loop1=0;
  458. //unsigned long int loop2=0;
  459.    unsigned int    strglen,strcodelen,outlen;
  460.    unsigned char    outlenstr[3];
  461.    unsigned char    outstring[288];
  462.    unsigned char    strglenstr[3];
  463.    unsigned char tempchar[2];
  464.    char phonechar[15];
  465.       // char sendhead[338]="0891683108200105f011000B813119162416F80004A9";
  466.       //char sendhead[338]="0891683108200105F011000B813118288033F90004A9";    
  467.       // char sendhead[338]="0891683108200105F011000B813118789490F40008A9";
  468.        char sendhead[338]="0891683108200105F011000B81";
  469.    char cmdhead[13]="AT+CMGS=";
  470.    strcpy(phonechar,phoneno);
  471.    if (strlen(phonechar)>140)
  472.    return (3);
  473.        {   int i;                            // edcoding the phonenumber.
  474.    for (i=0;i<5;i++)
  475.    {
  476.      swap(&phonechar[2*i],&phonechar[2*i+1]);
  477.    }
  478.     phonechar[11]=phonechar[10];
  479.     phonechar[10]='F';
  480.     phonechar[12]='';
  481.        }
  482.    //       printf("the phoneno is :%s!",phonechar);
  483.    strglen=strlen(outstr);
  484.    strcodelen=2*strglen; //strcodelen=4*strglen ,in unicode encoding.
  485.    outlen=14+strglen;  //outlen=14+2*strglen, in unicode encoding.
  486.    itoa(outlen,outlenstr,10);
  487.    strcat(cmdhead,outlenstr);
  488.    strcat(cmdhead,"x0D");
  489.    int i, j;
  490.    for (i=0;i<=strcodelen;i++)
  491.   outstring[i]='';
  492.    for (j=0;j<strglen;j++)
  493.       {             // outstring[4*j]='0';   for unicode encoding programing.
  494.     // outstring[4*j+1]='0';  for unicode encoding programing.
  495.     itoa(outstr[j]/16,tempchar,16);
  496.   outstring[2*j] =tempchar[0]; // outstring[4*j+2] =tempchar[0] ,in unicode encoding programing.
  497.     itoa(outstr[j]%16,tempchar,16);
  498.   outstring[2*j+1]=tempchar[0];  // outstring[4*j+2] =tempchar[0], in unicode encoding programing
  499.        }
  500.    itoa(strglen,strglenstr,16);       // itoa(strglen*2,strglenstr,16); in unicode encoding programing.
  501.        if (strglen<8)
  502.   //if the char is less than 16(10H),a "0" is need in the front of the char.
  503.   { unsigned char head[3]="0";
  504.     strcat(head,strglenstr);
  505.     strcpy(strglenstr,head);
  506.    }
  507. strcat(sendhead,phonechar);
  508. strcat(sendhead,"0004A9");      //0008 for 8bit code ,0004 for UNICODE .
  509.    strcat(sendhead,strglenstr);
  510.    strcat(sendhead,outstring);
  511.    strcat(sendhead,"x1A");   //ctrl-z.
  512. printf("the length the string you writed for sent is :%d",strlen(outstr));
  513. printf("nthe string is "%s"n",outstr);
  514.        // delay(100);
  515. /*In the main loop,a defined message is sent when any key is pressed.
  516.   you can exit the program once ESC is press.also, you can change the
  517.   messages you want to send. */
  518.     // if (!done)   comport<<c;  //send single char with overlay function...
  519.     //send_char_com(portbase, c);  //seng single char in a commnway....
  520.    send_string_com(COM2BASE,cmdhead);
  521.   // send_string_com(portbase,"AT+CMGS=15x0D");    //for test with fixed chacter.
  522.    printf("the head is sendn");
  523. //delay(100);
  524. do
  525. { readch(c);
  526. loop1++;
  527.        // printf("printf c is %c,loop is %d!n",c,loop1);
  528. if (kbhit())
  529.  return(1);
  530. }while (c!='>'&&c!='E'&&loop1<=65500);
  531. fprintf(stdout,"%un",loop1);
  532. if (c=='>')
  533.    {  send_string_com(COM2BASE,sendhead);
  534.  //send_string_com(portbase,"0891683108200105F011000B813118789490F40000A9014Ex1a");
  535.   //for test with fixed chacter.
  536.   return(0);
  537. }
  538. else return(2);
  539.      /*  do
  540.        {if (c !=-1)     //'-1' is the END signal of a string
  541.   {   //fputc(c & ASCII, stdout);
  542.      // fprintf(stdout,"%ct",c);
  543.    }
  544.     readch(c);
  545.     loop2++;
  546.     // fprintf(stdout,"%d-",loop2);
  547.        }while(c!=':');
  548.  //printf("%dn",loop2);
  549.        if (c==':')
  550.     return(0);
  551.       else return(-1);  */
  552. }
  553. main()
  554. {       int        port1    =COM1;
  555. int        port2    = COM2;
  556. int        speed    = 9600;
  557. int        parity   =LCR_NO_PARITY;
  558. int        bits     = 8;
  559. int        stopbits = 1;
  560. int        gsmtest;
  561. char phonenumber[15]="13818749094";
  562. // int        done  = FALSE;
  563. clrscr();
  564. serial comport1(port1, speed, parity, bits, stopbits);
  565. serial comport2(port2, speed, parity, bits, stopbits);
  566. ctrlbrk(c_break);
  567. struct date d;struct time t;
  568. fprintf(stdout, "C++ program for GSM commnication!-----8bit coding programing...nn"
  569. "press any KEY to send defined message!n"
  570. "press [ESC] to quit...nnn");
  571.       gettime(&t); getdate(&d);
  572.       printf("nthe current time is--%d.%d.%d,%02d:%02d:%02d:%02dn",d.da_year,d.da_mon,d.da_day,t.ti_hour,t.ti_min,t.ti_sec,t.ti_hund);
  573.       while(1)
  574. {  if (gpscount==20)
  575. {   readgps();
  576.  //  delay(100);
  577. char  GsmOutstr[142]="GSMGPS test--GPS real-time signal(SENDED by GSM)--ONCE per 20sec:Lat--";
  578.  strcat(GsmOutstr,mypa.slat);
  579.  strcat(GsmOutstr,";Lon--");
  580.  strcat(GsmOutstr,mypa.slon);
  581.    strcat(GsmOutstr,";GMTtime(Transfered by gpstime)--");
  582.  strcat(GsmOutstr,mypa.gpstime);
  583.       //  printf("the time-defined gpsstring:%s!n",GsmOutstr);
  584.  printf("the gps status is :%cn",mypa.gpsstatus);
  585. gsmtest=msgsend(phonenumber,GsmOutstr);
  586.  gpscount=0;
  587.  //gettime(&t);getdate(&d);
  588. //printf("the current time is--%d.%d.%d,%02d:%02d:%02d:%02dnn",d.da_year,d.da_mon,d.da_day,t.ti_hour,t.ti_min,t.ti_sec,t.ti_hund);
  589. // break;
  590. }
  591. //if (gpscount==3)
  592. if (kbhit())
  593.     break;
  594. }
  595.       gettime(&t); getdate(&d);
  596.       printf("the current time is--%d.%d.%d,%02d:%02d:%02d:%02dn",d.da_year,d.da_mon,d.da_day,t.ti_hour,t.ti_min,t.ti_sec,t.ti_hund);
  597. switch ( gsmtest)
  598. {
  599.  case 0: printf("msg is send successfully!");break;
  600.  case 1:printf ("msg sending is halted"); break;
  601.  case 2:printf ("command is  not acknowedged");break;
  602.  case 3:printf ("the message writed is too long!");break;
  603.  case -1:printf("error happened when string sending!");break;
  604. }
  605. /* Check for errors */    //there is no usage.
  606. switch (SError)
  607. {      case NO_ERROR: fprintf(stderr, "nbye.n");
  608.   return (0);
  609. case BUF_OVFL: fprintf(stderr, "nBuffer Overflow.n");
  610.   return (99);
  611. default:      fprintf(stderr, "nUnknown Error, SError = %dn", SError);
  612.   return (99);
  613. }
  614. }