kopia lustrzana https://github.com/projecthorus/radiosonde_auto_rx
gps output options
rodzic
5523d557ae
commit
ab4c7b1d9a
|
@ -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(dat, 1, 4, fp) < 4) return -1;
|
||||
if (fread(dat, 1, 2, fp) < 2) return -1;
|
||||
|
||||
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, 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");
|
||||
|
|
Ładowanie…
Reference in New Issue