Update demodulators from upstream repo

pull/677/head
Mark Jessop 2022-09-25 10:18:10 +09:30
rodzic 255b900734
commit 87fda79c40
9 zmienionych plików z 168 dodań i 68 usunięć

Wyświetl plik

@ -12,15 +12,12 @@ echo "Removing binaries in the auto_rx directory."
cd ../auto_rx/
rm dft_detect
rm fsk_demod
rm imet1rs_dft
rm imet4iq
rm mk2a_lms1680
rm mk2a1680mod
rm rs41mod
rm rs92mod
rm dfm09mod
rm m10mod
rm mXXmod
rm m20mod
rm lms6Xmod
rm meisei100mod

Wyświetl plik

@ -125,14 +125,14 @@ static int dft_window(dft_t *dft, int w) {
dft->win[n] = 1.0;
break;
case 1: // Hann
dft->win[n] = 0.5 * ( 1.0 - cos(2*M_PI*n/(float)(dft->N2-1)) );
dft->win[n] = 0.5 * ( 1.0 - cos(_2PI*n/(float)(dft->N2-1)) );
break ;
case 2: // Hamming
dft->win[n] = 25/46.0 - (1.0 - 25/46.0)*cos(2*M_PI*n / (float)(dft->N2-1));
dft->win[n] = 25/46.0 - (1.0 - 25/46.0)*cos(_2PI*n / (float)(dft->N2-1));
break ;
case 3: // Blackmann
dft->win[n] = 7938/18608.0
- 9240/18608.0*cos(2*M_PI*n / (float)(dft->N2-1))
- 9240/18608.0*cos(_2PI*n / (float)(dft->N2-1))
+ 1430/18608.0*cos(4*M_PI*n / (float)(dft->N2-1));
break ;
}
@ -567,7 +567,7 @@ static int lowpass_init(float f, int taps, float **pws) {
ws = (float*)calloc( 2*taps+1, sizeof(float)); if (ws == NULL) return -1;
for (n = 0; n < taps; n++) {
w[n] = 7938/18608.0 - 9240/18608.0*cos(2*M_PI*n/(taps-1)) + 1430/18608.0*cos(4*M_PI*n/(taps-1)); // Blackmann
w[n] = 7938/18608.0 - 9240/18608.0*cos(_2PI*n/(taps-1)) + 1430/18608.0*cos(4*M_PI*n/(taps-1)); // Blackmann
h[n] = 2*f*sinc(2*f*(n-(taps-1)/2));
ws[n] = w[n]*h[n];
norm += ws[n]; // 1-norm
@ -600,7 +600,7 @@ static int lowpass_update(float f, int taps, float *ws) {
w = (double*)calloc( taps+1, sizeof(double)); if (w == NULL) return -1;
for (n = 0; n < taps; n++) {
w[n] = 7938/18608.0 - 9240/18608.0*cos(2*M_PI*n/(taps-1)) + 1430/18608.0*cos(4*M_PI*n/(taps-1)); // Blackmann
w[n] = 7938/18608.0 - 9240/18608.0*cos(_2PI*n/(taps-1)) + 1430/18608.0*cos(4*M_PI*n/(taps-1)); // Blackmann
h[n] = 2*f*sinc(2*f*(n-(taps-1)/2));
ws[n] = w[n]*h[n];
norm += ws[n]; // 1-norm
@ -625,8 +625,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
}
return (float complex)w;
}
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;
ui32_t s = sample % taps;
double complex w = 0;
@ -636,6 +635,59 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
return (float complex)w;
// symmetry: ws[n] == ws[taps-1-n]
}
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0; // -Ofast
int n;
int s = sample % taps; // lpIQ
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;
for (n = 0; n < n0; n++) {
w += buffer[S1+n]*ws[n];
}
for (n = n0; n < taps; n++) {
w += buffer[S1N+n]*ws[n];
}
return w;
// symmetry: ws[n] == ws[taps-1-n]
}
static float complex lowpass0_sym(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;
double complex w = buffer[(sample+(taps+1)/2) % taps]*ws[(taps-1)/2]; // (N+1)/2 = (N-1)/2 + 1
for (n = 0; n < (taps-1)/2; n++) {
w += (buffer[(sample+n+1)%taps]+buffer[(sample+taps-n)%taps])*ws[n];
}
return (float complex)w;
}
static float complex lowpass2_sym(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0;
int n;
int s = (sample+1) % taps; // lpIQ
int SW = (taps-1)/2;
int B1 = s + SW;
int n1 = SW - s;
int n0 = 0;
if (s > SW) {
B1 -= taps;
n1 = -n1 - 1;
n0 = B1+n1+1;
}
w = buffer[B1]*ws[SW];
for (n = 1; n < n1+1; n++) {
w += (buffer[B1 + n] + buffer[B1 - n]) * ws[SW+n];
}
for (n = 0; n < SW-n1; n++) {
w += (buffer[s + n] + buffer[s-1 - n]) * ws[SW+SW-n];
}
return w;
// symmetry: ws[n] == ws[taps-1-n]
}
static float re_lowpass0(float buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;
@ -669,33 +721,32 @@ int f32buf_sample(dsp_t *dsp, int inv) {
if (dsp->opt_iq)
{
if (dsp->opt_iq == 5) {
ui32_t s_reset = dsp->dectaps*dsp->lut_len;
int j;
if ( f32read_cblock(dsp) < dsp->decM ) return EOF;
for (j = 0; j < dsp->decM; j++) {
if (dsp->opt_nolut) {
double _s_base = (double)(dsp->sample_in*dsp->decM+j); // dsp->sample_dec
double f0 = dsp->xlt_fq*_s_base - dsp->Df*_s_base/(double)dsp->sr_base;
z = dsp->decMbuf[j] * cexp(f0*2*M_PI*I);
z = dsp->decMbuf[j] * cexp(f0*_2PI*I);
}
else {
z = dsp->decMbuf[j] * dsp->ex[dsp->sample_dec % dsp->lut_len];
z = dsp->decMbuf[j] * dsp->ex[dsp->sample_decM];
}
dsp->sample_decM += 1; if (dsp->sample_decM >= dsp->lut_len) dsp->sample_decM = 0;
dsp->decXbuffer[dsp->sample_dec % dsp->dectaps] = z;
dsp->sample_dec += 1;
if (dsp->sample_dec == s_reset) dsp->sample_dec = 0;
dsp->decXbuffer[dsp->sample_decX] = z;
dsp->sample_decX += 1; if (dsp->sample_decX >= dsp->dectaps) dsp->sample_decX = 0;
}
if (dsp->decM > 1)
{
z = lowpass(dsp->decXbuffer, dsp->sample_dec, dsp->dectaps, ws_dec);
z = lowpass(dsp->decXbuffer, dsp->sample_decX, dsp->dectaps, ws_dec);
}
}
else if ( f32read_csample(dsp, &z) == EOF ) return EOF;
if (dsp->opt_dc && !dsp->opt_nolut)
{
z *= cexp(-t*2*M_PI*dsp->Df*I);
z *= cexp(-t*_2PI*dsp->Df*I);
}
@ -710,7 +761,7 @@ int f32buf_sample(dsp_t *dsp, int inv) {
w = z * conj(z0);
s_fm = gain * carg(w)/M_PI;
dsp->rot_iqbuf[dsp->sample_in % dsp->N_IQBUF] = z;
dsp->rot_iqbuf[dsp->sample_in % dsp->N_IQBUF] = z; // sample_in & (N-1) , N = (1<<LOG2N)
if (dsp->opt_iq >= 2)
@ -718,8 +769,8 @@ int f32buf_sample(dsp_t *dsp, int inv) {
if (dsp->opt_iq >= 2) {
double xbit = 0.0;
//float complex xi = cexp(+I*M_PI*dsp->h/dsp->sps);
double f1 = -dsp->h*dsp->sr/(2.0*dsp->sps);
double f2 = -f1;
//double f1 = -dsp->h*dsp->sr/(2.0*dsp->sps);
//double f2 = -f1;
float complex X0 = 0;
float complex X = 0;
@ -731,13 +782,13 @@ int f32buf_sample(dsp_t *dsp, int inv) {
z0 = dsp->rot_iqbuf[(dsp->sample_in-n + dsp->N_IQBUF) % dsp->N_IQBUF];
// f1
X0 = z0 * cexp(-tn*2*M_PI*f1*I); // alt
X = z * cexp(-t *2*M_PI*f1*I); // neu
X0 = z0 * cexp(-tn*dsp->iw1); // alt
X = z * cexp(-t *dsp->iw1); // neu
dsp->F1sum += X - X0;
// f2
X0 = z0 * cexp(-tn*2*M_PI*f2*I); // alt
X = z * cexp(-t *2*M_PI*f2*I); // neu
X0 = z0 * cexp(-tn*dsp->iw2); // alt
X = z * cexp(-t *dsp->iw2); // neu
dsp->F2sum += X - X0;
xbit = cabs(dsp->F2sum) - cabs(dsp->F1sum);
@ -747,8 +798,8 @@ int f32buf_sample(dsp_t *dsp, int inv) {
else if (0 && dsp->opt_iq == 4) {
double xbit = 0.0;
//float complex xi = cexp(+I*M_PI*dsp->h/dsp->sps);
double f1 = -dsp->h*dsp->sr/(2*dsp->sps);
double f2 = -f1;
//double f1 = -dsp->h*dsp->sr/(2*dsp->sps);
//double f2 = -f1;
float complex X1 = 0;
float complex X2 = 0;
@ -759,8 +810,8 @@ int f32buf_sample(dsp_t *dsp, int inv) {
n--;
t = -n / (double)dsp->sr;
z = dsp->rot_iqbuf[(dsp->sample_in - n + dsp->N_IQBUF) % dsp->N_IQBUF]; // +1
X1 += z*cexp(-t*2*M_PI*f1*I);
X2 += z*cexp(-t*2*M_PI*f2*I);
X1 += z*cexp(-t*dsp->iw1);
X2 += z*cexp(-t*dsp->iw2);
}
xbit = cabs(X2) - cabs(X1);
@ -787,7 +838,7 @@ int f32buf_sample(dsp_t *dsp, int inv) {
dsp->fm_buffer[dsp->sample_in % dsp->M] = s_fm;
if (inv) s = -s;
dsp->bufs[dsp->sample_in % dsp->M] = s;
dsp->bufs[dsp->sample_in % dsp->M] = s; // sample_in & (M-1) , M = (1<<LOG2N)
xneu = dsp->bufs[(dsp->sample_in ) % dsp->M];
@ -1146,7 +1197,7 @@ int init_buffers(dsp_t *dsp) {
int i, pos;
float b0, b1, b2, b, t;
float normMatch;
double sigma = sqrt(log(2)) / (2*M_PI*dsp->BT);
double sigma = sqrt(log(2)) / (_2PI*dsp->BT);
int p2 = 1;
int K, L, M;
@ -1227,7 +1278,7 @@ int init_buffers(dsp_t *dsp) {
if (dsp->ex == NULL) return -1;
for (n = 0; n < dsp->lut_len; n++) {
t = f0*(double)n;
dsp->ex[n] = cexp(t*2*M_PI*I);
dsp->ex[n] = cexp(t*_2PI*I);
}
}
@ -1314,7 +1365,7 @@ int init_buffers(dsp_t *dsp) {
dsp->K = K;
dsp->L = L;
dsp->M = M;
dsp->M = M; // = (1<<LOG2N)
dsp->Nvar = L; // wenn Nvar fuer xnorm, dann Nvar=rshd.L
@ -1391,13 +1442,21 @@ int init_buffers(dsp_t *dsp) {
{
if (dsp->nch < 2) return -1;
dsp->N_IQBUF = dsp->DFT.N;
dsp->N_IQBUF = dsp->DFT.N; // = (1<<LOG2N)
dsp->rot_iqbuf = calloc(dsp->N_IQBUF+1, sizeof(float complex)); if (dsp->rot_iqbuf == NULL) return -1;
}
dsp->fm_buffer = (float *)calloc( M+1, sizeof(float)); if (dsp->fm_buffer == NULL) return -1; // dsp->bufs[]
if (dsp->opt_iq)
{
double f1 = -dsp->h*dsp->sr/(2.0*dsp->sps);
double f2 = -f1;
dsp->iw1 = _2PI*I*f1;
dsp->iw2 = _2PI*I*f2;
}
return K;
}
@ -1489,8 +1548,8 @@ int find_header(dsp_t *dsp, float thres, int hdmax, int bitofs, int opt_dc) {
double diffDf = dsp->dDf*0.6; //0.4
if (1 && dsp->opt_iq >= 2) {
// update rot_iqbuf, F1sum, F2sum
double f1 = -dsp->h*dsp->sr/(2*dsp->sps);
double f2 = -f1;
//double f1 = -dsp->h*dsp->sr/(2*dsp->sps);
//double f2 = -f1;
float complex X1 = 0;
float complex X2 = 0;
float complex _z = 0;
@ -1499,12 +1558,12 @@ int find_header(dsp_t *dsp, float thres, int hdmax, int bitofs, int opt_dc) {
{
// update rot_iqbuf
double _tn = (dsp->sample_in - _n) / (double)dsp->sr;
dsp->rot_iqbuf[(dsp->sample_in - _n + dsp->N_IQBUF) % dsp->N_IQBUF] *= cexp(-_tn*2*M_PI*diffDf*I);
dsp->rot_iqbuf[(dsp->sample_in - _n + dsp->N_IQBUF) % dsp->N_IQBUF] *= cexp(-_tn*_2PI*diffDf*I);
//
//update/reset F1sum, F2sum
_z = dsp->rot_iqbuf[(dsp->sample_in - _n + dsp->N_IQBUF) % dsp->N_IQBUF];
X1 += _z*cexp(-_tn*2*M_PI*f1*I);
X2 += _z*cexp(-_tn*2*M_PI*f2*I);
X1 += _z*cexp(-_tn*dsp->iw1);
X2 += _z*cexp(-_tn*dsp->iw2);
_n--;
}
dsp->F1sum = X1;
@ -1685,3 +1744,4 @@ int find_softbinhead(FILE *fp, hdb_t *hdb, float *score) {
return EOF;
}

Wyświetl plik

@ -1,9 +1,13 @@
#include <math.h>
#include <complex.h>
#ifndef M_PI
#define M_PI (3.1415926535897932384626433832795)
#endif
#define _2PI (6.2831853071795864769252867665590)
#define LP_IQ 1
#define LP_FM 2
@ -81,6 +85,10 @@ typedef struct {
float complex *rot_iqbuf;
float complex F1sum;
float complex F2sum;
//
double complex iw1;
double complex iw2;
//
char *rawbits;
@ -115,8 +123,9 @@ typedef struct {
int decM;
ui32_t sr_base;
ui32_t dectaps;
ui32_t sample_dec;
ui32_t sample_decX;
ui32_t lut_len;
ui32_t sample_decM;
float complex *decXbuffer;
float complex *decMbuf;
float complex *ex; // exp_lut
@ -181,3 +190,5 @@ int find_header(dsp_t *, float, int, int, int);
int f32soft_read(FILE *fp, float *s);
int find_binhead(FILE *fp, hdb_t *hdb, float *score);
int find_softbinhead(FILE *fp, hdb_t *hdb, float *score);

Wyświetl plik

@ -1707,7 +1707,7 @@ int main(int argc, char **argv) {
int pos = 0;
float _frmcnt = -1.0f;
memset(buffer_rawhex, BUFLEN+1, 0);
memset(buffer_rawhex, 0, BUFLEN+1);
while ( (ch=fgetc(fp)) != EOF)
{

Wyświetl plik

@ -56,9 +56,11 @@ typedef struct {
#define BITS (10)
#define FRAME_LEN (220)
#define STDFRMLEN (220) // 108 byte
#define FRAME_LEN (220) //(std=220, 108 byte) (full=440=2*std, 216 byte)
#define BITFRAME_LEN (FRAME_LEN*BITS)
#define FRMBYTE_STD (108) //(FRAME_LEN-FRAMESTART)/2 = 108
// FRAME_FULL = 2*FRAME_STD = 216 ?
typedef struct {
int out;
@ -85,7 +87,7 @@ typedef struct {
// shorter header correlation, such that, in mixed signal/noise,
// signal samples have more weight: header = 0x00 0xAA 0x24 0x24
// (in particular for soft bit input!)
static char imet54_header[] = //"0000000001""0101010101""0000000001""0101010101"
static char imet54_header[] = //"0000000001""0101010101""0000000001""0101010101" // 20x 0x00AA
//"0000000001""0101010101""0000000001""0101010101"
//"0000000001""0101010101""0000000001""0101010101"
//"0000000001""0101010101""0000000001""0101010101"
@ -227,8 +229,9 @@ static ui8_t hamming(int opt_ecc, ui8_t *cwb, ui8_t *sym) {
static int crc32ok(ui8_t *bytes, int len) {
ui32_t poly0 = 0x0EDB;
ui32_t poly1 = 0x8260;
//[105 , 7, 0x8EDB, 0x8260],
//[105 , 7, 0x8EDB, 0x8260] // CRC32 802-3 (Ethernet) reversed reciprocal
//[104 , 0, 0x48EB, 0x1ACA]
//[102 , 0, 0x1DB7, 0x04C1] // CRC32 802-3 (Ethernet) normal
int n = 104;
int b = 0;
ui32_t c0 = 0x48EB;
@ -242,7 +245,7 @@ static int crc32ok(ui8_t *bytes, int len) {
ui32_t crc0 = 0;
ui32_t crc1 = 0;
if (len < 108) return 0;
if (len < 108) return 0; // FRMBYTE_STD=108
while (n >= 0) {
@ -453,7 +456,7 @@ static int reset_gpx(gpx_t *gpx) {
/* ------------------------------------------------------------------------------------ */
static int print_position(gpx_t *gpx, int len, int ecc_frm, int ecc_gps) {
static int print_position(gpx_t *gpx, int len, int ecc_frm, int ecc_gps, int ecc_std) {
int prnGPS = 0,
prnPTU = 0,
@ -462,7 +465,8 @@ static int print_position(gpx_t *gpx, int len, int ecc_frm, int ecc_gps) {
int tp_err = 0;
int pos_ok = 0,
frm_ok = 0,
crc_ok = 0;
crc_ok = 0,
std_ok = 0;
int rs_type = 54;
crc_ok = crc32ok(gpx->frame, len);
@ -515,8 +519,17 @@ static int print_position(gpx_t *gpx, int len, int ecc_frm, int ecc_gps) {
if (gpx->RH > -0.5f) fprintf(stdout, " RH=%.0f%% ", gpx->RH);
}
if (gpx->option.vbs) {
if ( crc_ok ) fprintf(stdout, " [OK]"); else fprintf(stdout, " [NO]");
if ( crc_ok ) fprintf(stdout, " [OK]"); // std frame: frame[104..105]==0x4000 ?
else {
if (gpx->frame[pos_F8] == 0xF8) fprintf(stdout, " [NO]");
else if ( ecc_std == 0 ) { // full frame: pos_F8_full==pos_F8_std+11 ?
fprintf(stdout, " [ok]");
std_ok = 1;
}
else {
fprintf(stdout, " [no]");
std_ok = 0;
}
}
// (imet54:GPS+PTU) status: 003E , (imet50:GPS); 0030
@ -534,7 +547,7 @@ static int print_position(gpx_t *gpx, int len, int ecc_frm, int ecc_gps) {
}
// prnGPS,prnTPU
if (gpx->option.jsn && frm_ok && crc_ok && (gpx->status&0x30)==0x30) {
if (gpx->option.jsn && frm_ok && (crc_ok || std_ok) && (gpx->status&0x30)==0x30) {
char *ver_jsn = NULL;
char *subtype = (rs_type == 54) ? "IMET54" : "IMET50";
unsigned long count_day = (unsigned long)(gpx->std*3600 + gpx->min*60 + gpx->sek+0.5); // (gpx->timems/1e3+0.5) has gaps
@ -572,7 +585,7 @@ static int print_position(gpx_t *gpx, int len, int ecc_frm, int ecc_gps) {
static void print_frame(gpx_t *gpx, int len, int b2B) {
int i, j;
int ecc_frm = 0, ecc_gps = 0;
int ecc_frm = 0, ecc_gps = 0, ecc_std = 0;
ui8_t bits8n1[BITFRAME_LEN+10]; // (RAW)BITFRAME_LEN
ui8_t bits[BITFRAME_LEN]; // 8/10 (RAW)BITFRAME_LEN
ui8_t nib[FRAME_LEN];
@ -600,12 +613,15 @@ static void print_frame(gpx_t *gpx, int len, int b2B) {
ecc_frm = 0;
ecc_gps = 0;
ecc_std = 0;
for (j = 0; j < len/8; j++) { // alt. only GPS block
ecc_frm += ec[j];
if (ec[j] > 0x10) ecc_frm = -1;
if (j < pos_GPSalt+4+8) ecc_gps = ecc_frm;
if (j < 2*FRMBYTE_STD) ecc_std = ecc_frm;
if (ecc_frm < 0) break;
}
if (j < 2*FRMBYTE_STD) ecc_std = -1;
}
else {
ecc_frm = -2; // TODO: parse ecc-info from raw file
@ -614,6 +630,8 @@ static void print_frame(gpx_t *gpx, int len, int b2B) {
if (gpx->option.raw)
{
int crc_ok = crc32ok(gpx->frame, len);
for (i = 0; i < len/16; i++) {
fprintf(stdout, "%02X", gpx->frame[i]);
if (gpx->option.raw > 1)
@ -622,7 +640,13 @@ static void print_frame(gpx_t *gpx, int len, int b2B) {
if (gpx->option.raw == 4 && i % 4 == 3) fprintf(stdout, " ");
}
}
if ( crc32ok(gpx->frame, len) ) fprintf(stdout, " [OK]"); else fprintf(stdout, " [NO]");
if ( crc_ok ) fprintf(stdout, " [OK]"); // std frame: frame[104..105]==0x4000 ?
else {
if (gpx->frame[pos_F8] == 0xF8) fprintf(stdout, " [NO]"); // full frame: pos_F8_full==pos_F8_std+11 ?
else if ( ecc_std == 0 ) fprintf(stdout, " [ok]");
else fprintf(stdout, " [no]");
}
if (gpx->option.ecc && ecc_frm != 0) {
fprintf(stdout, " # (%d)", ecc_frm);
fprintf(stdout, " [%d]", ecc_gps);
@ -630,12 +654,12 @@ static void print_frame(gpx_t *gpx, int len, int b2B) {
fprintf(stdout, "\n");
if (gpx->option.slt /*&& gpx->option.jsn*/) {
print_position(gpx, len/16, ecc_frm, ecc_gps);
print_position(gpx, len/16, ecc_frm, ecc_gps, ecc_std);
}
}
else
{
print_position(gpx, len/16, ecc_frm, ecc_gps);
print_position(gpx, len/16, ecc_frm, ecc_gps, ecc_std);
}
}

Wyświetl plik

@ -1522,7 +1522,7 @@ int main(int argc, char **argv) {
while (1 > 0) {
memset(buffer_rawhex, 2*(FRAME_LEN+AUX_LEN)+12, 0);
memset(buffer_rawhex, 0, 2*(FRAME_LEN+AUX_LEN)+12);
pbuf = fgets(buffer_rawhex, 2*(FRAME_LEN+AUX_LEN)+12, fp);
if (pbuf == NULL) break;
buffer_rawhex[2*(FRAME_LEN+AUX_LEN)] = '\0';

Wyświetl plik

@ -751,12 +751,12 @@ static int print_pos(gpx_t *gpx, int bcOK, int csOK) {
fprintf(stdout, " lon: "col_GPSlon"%.5f"col_TXT" ", gpx->lon);
fprintf(stdout, " alt: "col_GPSalt"%.2f"col_TXT" ", gpx->alt);
if (!err2) {
fprintf(stdout, " vH: "col_GPSvel"%.1f"col_TXT" D: "col_GPSvel"%.1f"col_TXT" vV: "col_GPSvel"%.1f"col_TXT" ", gpx->vH, gpx->vD, gpx->vV);
fprintf(stdout, " vH: "col_GPSvel"%4.1f"col_TXT" D: "col_GPSvel"%5.1f"col_TXT" vV: "col_GPSvel"%3.1f"col_TXT" ", gpx->vH, gpx->vD, gpx->vV);
}
if (gpx->option.vbs >= 2 && (bcOK || csOK)) { // SN
if (gpx->option.vbs >= 1 && (bcOK || csOK)) { // SN
fprintf(stdout, " SN: "col_SN"%s"col_TXT, gpx->SN);
}
if (gpx->option.vbs >= 2) {
if (gpx->option.vbs >= 1) {
fprintf(stdout, " # ");
if (bcOK > 0) fprintf(stdout, " "col_CSok"(ok)"col_TXT);
else if (bcOK < 0) fprintf(stdout, " "col_CSoo"(oo)"col_TXT);
@ -769,7 +769,9 @@ static int print_pos(gpx_t *gpx, int bcOK, int csOK) {
fprintf(stdout, " ");
if (gpx->T > -273.0f) fprintf(stdout, " T:%.1fC", gpx->T);
if (gpx->RH > -0.5f) fprintf(stdout, " RH=%.0f%%", gpx->RH);
if (gpx->TH > -273.0f) fprintf(stdout, " TH:%.1fC", gpx->TH);
if (gpx->option.vbs >= 2) {
if (gpx->TH > -273.0f) fprintf(stdout, " TH:%.1fC", gpx->TH);
}
if (gpx->P > 0.0f) {
if (gpx->P < 100.0f) fprintf(stdout, " P=%.2fhPa ", gpx->P);
else fprintf(stdout, " P=%.1fhPa ", gpx->P);
@ -789,12 +791,12 @@ static int print_pos(gpx_t *gpx, int bcOK, int csOK) {
fprintf(stdout, " lon: %.5f ", gpx->lon);
fprintf(stdout, " alt: %.2f ", gpx->alt);
if (!err2) {
fprintf(stdout, " vH: %.1f D: %.1f vV: %.1f ", gpx->vH, gpx->vD, gpx->vV);
fprintf(stdout, " vH: %4.1f D: %5.1f vV: %3.1f ", gpx->vH, gpx->vD, gpx->vV);
}
if (gpx->option.vbs >= 2 && (bcOK || csOK)) { // SN
if (gpx->option.vbs >= 1 && (bcOK || csOK)) { // SN
fprintf(stdout, " SN: %s", gpx->SN);
}
if (gpx->option.vbs >= 2) {
if (gpx->option.vbs >= 1) {
fprintf(stdout, " # ");
//if (bcOK) fprintf(stdout, " (ok)"); else fprintf(stdout, " (no)");
if (bcOK > 0) fprintf(stdout, " (ok)");
@ -807,7 +809,9 @@ static int print_pos(gpx_t *gpx, int bcOK, int csOK) {
fprintf(stdout, " ");
if (gpx->T > -273.0f) fprintf(stdout, " T:%.1fC", gpx->T);
if (gpx->RH > -0.5f) fprintf(stdout, " RH=%.0f%%", gpx->RH);
if (gpx->TH > -273.0f) fprintf(stdout, " TH:%.1fC", gpx->TH);
if (gpx->option.vbs >= 2) {
if (gpx->TH > -273.0f) fprintf(stdout, " TH:%.1fC", gpx->TH);
}
if (gpx->P > 0.0f) {
if (gpx->P < 100.0f) fprintf(stdout, " P=%.2fhPa ", gpx->P);
else fprintf(stdout, " P=%.1fhPa ", gpx->P);
@ -1323,6 +1327,7 @@ int main(int argc, char **argv) {
header_found = 0;
// bis Ende der Sekunde vorspulen; allerdings Doppel-Frame alle 10 sek
// M20 only single frame ... AUX ?
if (gpx.option.vbs < 3) { // && (regulare frame) // print_frame-return?
while ( bitpos < 5*BITFRAME_LEN ) {
if (option_softin) {
@ -1355,7 +1360,7 @@ int main(int argc, char **argv) {
while (1 > 0) {
memset(buffer_rawhex, 2*(FRAME_LEN+AUX_LEN)+12, 0);
memset(buffer_rawhex, 0, 2*(FRAME_LEN+AUX_LEN)+12);
pbuf = fgets(buffer_rawhex, 2*(FRAME_LEN+AUX_LEN)+12, fp);
if (pbuf == NULL) break;
buffer_rawhex[2*(FRAME_LEN+AUX_LEN)] = '\0';

Wyświetl plik

@ -702,7 +702,7 @@ int main(int argc, char **argv) {
if (!option2 && !option_raw) {
jmpRS11:
if (reset_gpx) {
memset(&gpx, sizeof(gpx), 0);
memset(&gpx, 0, sizeof(gpx));
sn = -1;
freq = -1;
reset_gpx = 0;
@ -867,7 +867,7 @@ int main(int argc, char **argv) {
else if (option2 && !option_raw) { // iMS-100
jmpIMS:
if (reset_gpx) {
memset(&gpx, sizeof(gpx), 0);
memset(&gpx, 0, sizeof(gpx));
gpx.RH = NAN;
gpx.T = NAN;
sn = -1;

Wyświetl plik

@ -2122,7 +2122,10 @@ static int print_position(gpx_t *gpx, int ec) {
if (gpx->option.ptu) out_mask |= crc_PTU;
err = get_FrameConf(gpx, 0);
if (out && !err) prn_frm(gpx);
if (out && !err) {
prn_frm(gpx);
output = 1;
}
pck = (gpx->frame[pos_PTU]<<8) | gpx->frame[pos_PTU+1];
ofs = 0;