gps output options

dump
Zilog80 2015-11-16 12:56:43 +01:00
rodzic 5523d557ae
commit ab4c7b1d9a
1 zmienionych plików z 77 dodań i 59 usunięć

Wyświetl plik

@ -123,59 +123,47 @@ int findstr(char *buff, char *str, int pos) {
}
int read_wav_header(FILE *fp) {
char txt[5] = "\0\0\0\0";
char buff[4];
char txt[4+1] = "\0\0\0\0";
unsigned char dat[4];
int byte, p=0;
// long pos_fmt, pos_dat;
char fmt_[5] = "fmt ";
char data[5] = "data";
//if (fseek(fp, 0L, SEEK_SET)) return -1;
if (fread(txt, 1, 4, fp) < 4) return -1;
if (strncmp(txt, "RIFF", 4)) return -1;
if (fread(txt, 1, 4, fp) < 4) return -1;
// pos_WAVE = 8L
if (fread(txt, 1, 4, fp) < 4) return -1;
if (fread(txt, 1, 4, fp) < 4) return -1;
if (strncmp(txt, "WAVE", 4)) return -1;
// pos_fmt = 12L
for ( ; ; ) {
if ( (byte=fgetc(fp)) == EOF ) return -1;
buff[p % 4] = byte;
txt[p % 4] = byte;
p++; if (p==4) p=0;
if (findstr(buff, fmt_, p) == 4) break;
if (findstr(txt, "fmt ", p) == 4) break;
}
if (fread(buff, 1, 4, fp) < 4) return -1;
//memcpy(&byte, buff, 4); fprintf(stderr, "fmt_length : %04x\n", byte);
if (fread(buff, 1, 2, fp) < 2) return -1;
//byte = buff[0] + (buff[1] << 8); fprintf(stderr, "fmt_tag : %04x\n", byte & 0xFFFF);
if (fread(buff, 1, 2, fp) < 2) return -1;
channels = buff[0] + (buff[1] << 8);
//fprintf(stderr, "channels : %d\n", channels & 0xFFFF);
if (fread(buff, 1, 4, fp) < 4) return -1;
memcpy(&sample_rate, buff, 4);
//fprintf(stderr, "samplerate : %d\n", sample_rate);
if (fread(buff, 1, 4, fp) < 4) return -1;
//memcpy(&byte, buff, 4); fprintf(stderr, "bytes/sec : %d\n", byte);
if (fread(buff, 1, 2, fp) < 2) return -1;
byte = buff[0] + (buff[1] << 8);
//fprintf(stderr, "block_align: %04x\n", byte & 0xFFFF);
if (fread(buff, 1, 2, fp) < 2) return -1;
bits_sample = buff[0] + (buff[1] << 8);
//fprintf(stderr, "bits/sample: %d\n", bits_sample & 0xFFFF);
if (fread(dat, 1, 4, fp) < 4) return -1;
if (fread(dat, 1, 2, fp) < 2) return -1;
if (fread(dat, 1, 2, fp) < 2) return -1;
channels = dat[0] + (dat[1] << 8);
if (fread(dat, 1, 4, fp) < 4) return -1;
memcpy(&sample_rate, dat, 4); //sample_rate = dat[0]|(dat[1]<<8)|(dat[2]<<16)|(dat[3]<<24);
if (fread(dat, 1, 4, fp) < 4) return -1;
if (fread(dat, 1, 2, fp) < 2) return -1;
//byte = dat[0] + (dat[1] << 8);
if (fread(dat, 1, 2, fp) < 2) return -1;
bits_sample = dat[0] + (dat[1] << 8);
// pos_dat = 36L + info
//if (fread(txt, 1, 4, fp) < 4) return -1;
//fprintf(stderr, "data: %s\n", txt);
for ( ; ; ) {
if ( (byte=fgetc(fp)) == EOF ) return -1;
buff[p % 4] = byte;
txt[p % 4] = byte;
p++; if (p==4) p=0;
if (findstr(buff, data, p) == 4) break;
if (findstr(txt, "data", p) == 4) break;
}
if (fread(buff, 1, 4, fp) < 4) return -1;
if (fread(dat, 1, 4, fp) < 4) return -1;
fprintf(stderr, "sample_rate: %d\n", sample_rate);
@ -690,12 +678,12 @@ int get_pseudorange() {
range[prns[j]].chips = 0;
continue;
}
/*
if (option_vergps != 8) {
if ( byteval > 0x10000000 && byteval < 0xF0000000 ) {
range[prns[j]].chips = 0;
continue;
}
*/
}}
if ( prns[j] == 0 ) prns[j] = 32;
range[prns[j]].chips = byteval;
range[prns[j]].time = gpstime;
@ -751,7 +739,7 @@ int get_GPSkoord(int N) {
SAT_t Sat_A[4];
SAT_t Sat_B[12]; // N <= 12
if (option_vergps == 2) {
if (option_vergps == 8) {
printf(" sats: ");
for (j = 0; j < N; j++) fprintf(stdout, "%2d ", prn[j]);
printf("\n");
@ -759,6 +747,7 @@ int get_GPSkoord(int N) {
gpx.lat = gpx.lon = gpx.h = 0;
if (option_vergps != 2) {
for (i0=0;i0<N;i0++) { for (i1=i0+1;i1<N;i1++) { for (i2=i1+1;i2<N;i2++) { for (i3=i2+1;i3<N;i3++) {
Sat_A[0] = sat[prn[i0]];
@ -772,7 +761,7 @@ int get_GPSkoord(int N) {
if (calc_DOPn(4, Sat_A, pos_ecef, DOP) == 0) {
gdop = sqrt(DOP[0]+DOP[1]+DOP[2]+DOP[3]);
//printf(" DOP : %.1f ", gdop);
if (option_vergps == 2) {
if (option_vergps == 8) {
//gdop = sqrt(DOP[0]+DOP[1]+DOP[2]+DOP[3]);
hdop = sqrt(DOP[0]+DOP[1]);
vdop = sqrt(DOP[2]);
@ -802,29 +791,43 @@ int get_GPSkoord(int N) {
}
}}}}
}
if (option_vergps == 8 || option_vergps == 2) {
if (option_vergps == 2) {
for (j = 0; j < N; j++) Sat_B[j] = sat[prn[j]];
for (j = 0; j < N; j++) Sat_B[j] = sat[prn[j]];
if (option_vergps == 8) {
NAV_bancroft1(N, Sat_B, pos_ecef, &rx_cl_bias);
ecef2elli(pos_ecef[0], pos_ecef[1], pos_ecef[2], &lat, &lon, &alt);
printf("bancroft1[%d] lat: %.6f , lon: %.6f , alt: %.2f ", N, lat, lon, alt);
printf("\n");
}
NAV_bancroft2(N, Sat_B, pos_ecef, &rx_cl_bias);
ecef2elli(pos_ecef[0], pos_ecef[1], pos_ecef[2], &lat, &lon, &alt);
NAV_bancroft2(N, Sat_B, pos_ecef, &rx_cl_bias);
ecef2elli(pos_ecef[0], pos_ecef[1], pos_ecef[2], &lat, &lon, &alt);
gdop = -1;
if (calc_DOPn(N, Sat_B, pos_ecef, DOP) == 0) {
gdop = sqrt(DOP[0]+DOP[1]+DOP[2]+DOP[3]);
}
if (option_vergps == 8) {
printf("bancroft2[%d] lat: %.6f , lon: %.6f , alt: %.2f ", N, lat, lon, alt);
if (calc_DOPn(N, Sat_B, pos_ecef, DOP) == 0) {
gdop = sqrt(DOP[0]+DOP[1]+DOP[2]+DOP[3]);
printf(" GDOP[");
for (j = 0; j < N; j++) {
printf("%d", prn[j]);
if (j < N-1) printf(","); else printf("] %.1f ", gdop);
}
printf(" GDOP[");
for (j = 0; j < N; j++) {
printf("%d", prn[j]);
if (j < N-1) printf(","); else printf("] %.1f ", gdop);
}
printf("\n");
}
if (option_vergps == 2) {
gpx.lat = lat;
gpx.lon = lon;
gpx.h = alt;
gpx.dop = gdop;
num = N;
}
}
@ -870,9 +873,18 @@ int print_position() { // GPS-Hoehe ueber Ellipsoid
if (almanac) fprintf(stdout, " lat: %.4f lon: %.4f alt: %.1f ", gpx.lat, gpx.lon, gpx.h);
else fprintf(stdout, " lat: %.5f lon: %.5f alt: %.1f ", gpx.lat, gpx.lon, gpx.h);
if (option_vergps) {
fprintf(stdout, " sats: ");
for (j = 0; j < 4; j++) fprintf(stdout, "%02d ", gpx.sats[j]);
fprintf(stdout, " GDOP: %.1f ", gpx.dop);
//fprintf(stdout, " sats: ");
if (option_vergps != 2) {
fprintf(stdout, " GDOP[%02d,%02d,%02d,%02d] %.1f",
gpx.sats[0], gpx.sats[1], gpx.sats[2], gpx.sats[3], gpx.dop);
}
else {
fprintf(stdout, " GDOP[");
for (j = 0; j < k; j++) {
printf("%d", prn[j]);
if (j < k-1) printf(","); else printf("] %.1f ", gpx.dop);
}
}
}
}
}
@ -883,7 +895,7 @@ int print_position() { // GPS-Hoehe ueber Ellipsoid
if (!err1) {
fprintf(stdout, "\n");
if (option_vergps == 2) printf("\n");
if (option_vergps == 8) printf("\n");
}
return err2;
@ -926,12 +938,17 @@ int main(int argc, char *argv[]) {
++argv;
while ((*argv) && (!fileloaded)) {
if ( (strcmp(*argv, "-h") == 0) || (strcmp(*argv, "--help") == 0) ) {
fprintf(stderr, "%s [options] audio.wav\n", fpname);
fprintf(stderr, "%s [options] <file>\n", fpname);
fprintf(stderr, " file: audio.wav or raw_data\n");
fprintf(stderr, " options:\n");
fprintf(stderr, " -v, --verbose\n");
fprintf(stderr, " -r, --raw\n");
fprintf(stderr, " -a, --almanac <almanacSEM>\n");
fprintf(stderr, " -e, --ephem <ephemperisRinex>\n");
fprintf(stderr, " -g1 (verbose GPS: 4 sats)\n");
fprintf(stderr, " -g2 (verbose GPS: all sats)\n");
fprintf(stderr, " -gg (vverbose GPS)\n");
fprintf(stderr, " --rawin (raw_data file)\n");
return 0;
}
else if ( (strcmp(*argv, "-v") == 0) || (strcmp(*argv, "--verbose") == 0) ) {
@ -964,8 +981,9 @@ int main(int argc, char *argv[]) {
}
else return -1;
}
else if (strcmp(*argv, "-g" ) == 0) { option_vergps = 1; } // verbose GPS
else if (strcmp(*argv, "-gg") == 0) { option_vergps = 2; } // vverbose GPS
else if (strcmp(*argv, "-g1") == 0) { option_vergps = 1; } // verbose1 GPS
else if (strcmp(*argv, "-g2") == 0) { option_vergps = 2; } // verbose2 GPS (bancroft)
else if (strcmp(*argv, "-gg") == 0) { option_vergps = 8; } // vverbose GPS
else if (strcmp(*argv, "--rawin") == 0) { option_rawin = 1; } // raw_txt input
else {
if (!option_rawin) fp = fopen(*argv, "rb");