/Designs/GPSRL01B/SW/gpsrl.c
20,21 → 20,8
#define TL2 PIN_C1
#define TL3 PIN_C2
 
// NMEA
#define TIME 6 // For NMEA parsing
#define TIME_LEN 10
#define LATDEG 19
#define LATMIN 21
#define LONDEG 32
#define LONMIN 34
#define SAT 36
#define DEG_LEN 2
#define MIN_LEN 7
#define AZIMUTH 46
#define NMEA_LINESIZE 79
 
//$GPRMC,105815.503,V,4915.5877,N,01442.3896,E,0.0,0.00,060108,,,N*44
 
//$GPGGA,000415.000,4915.6225,N,01442.3608,E,1,03,50.0,409.6,M,45.2,M,0.0,0000*48
void main()
{
 
60,51 → 47,93
while(TRUE)
{
 
auto char line[NMEA_LINESIZE];
char item[16];
char *ptr;
 
char tab1[20];
char tab2[20];
char tab3[20];
char tab4[20];
char tab5[20];
 
int8 n;
int16 intensity;
char c;
 
tab1[19]=0;
tab2[19]=0;
tab3[19]=0;
tab4[19]=0;
tab5[19]=0;
 
// line=malloc(NMEA_LINESIZE); // Space for one line
// if (line==NULL) {printf(lcd_putc,"Error"); sleep();};
line[NMEA_LINESIZE-1]=0;
while(fgetc(NMEA)!='$'); // Waiting for start character
 
while(fgetc(NMEA)!='$'); // Waiting for start character
for(n=0;n<(NMEA_LINESIZE-1);n++) // Read line up to checksum
intensity=read_adc();
tab1[0]='$';
for(n=1;n<(19);n++)
{
tab1[n]=fgetc(NMEA);
};
 
for(n=0;n<(19);n++)
{
tab2[n]=fgetc(NMEA);
};
 
for(n=0;n<(19);n++)
{
tab3[n]=fgetc(NMEA);
};
 
for(n=0;n<(19);n++)
{
c=fgetc(NMEA);
if(c=='*')
{
line[n]=0;
tab4[n]=0;
tab5[0]=c;
tab5[1]=fgetc(NMEA);
tab5[2]=fgetc(NMEA);
tab5[3]=0;
goto tisk;
};
tab4[n]=c;
};
 
for(n=0;n<(19);n++) // Read line up to checksum
{
c=fgetc(NMEA);
if(c=='*')
{
tab5[n]=c;
tab5[n+1]=fgetc(NMEA);
tab5[n+2]=fgetc(NMEA);
tab5[n+3]=0;
break;
};
line[n]=c;
tab5[n]=c;
};
 
tisk:
 
printf(lcd_putc,"\f");
 
if(!input(TL1))
{
lcd_gotoxy(1,1);
strncpy(item,&line[LATDEG],DEG_LEN+MIN_LEN); item[DEG_LEN+MIN_LEN]=0;
printf(lcd_putc,"%s \n",item);
 
strncpy(item,&line[LONDEG],DEG_LEN+MIN_LEN); item[DEG_LEN+MIN_LEN]=0;
printf(lcd_putc,"%s",item);
 
printf(lcd_putc,"%s\n",tab1);
printf(lcd_putc,"%s",tab2);
}
else
{
lcd_gotoxy(1,1);
printf(lcd_putc,"Time %06.0g \n",strtod(&line[TIME],&ptr));
printf(lcd_putc,"sats %06.0g ",strtod(&line[SAT],&ptr));
printf(lcd_putc,"%s\n",tab3);
printf(lcd_putc,"%s",tab4);
}
 
puts(line,PC);
puts(strcat(tab1,strcat(tab2,tab3)),PC);
puts(strcat(tab4,tab5),PC);
printf(" /%u/%Lu\n\r",input(RANGE), intensity);
 
// free(line);
}
}