rs_module: rs92-prn32

pull/3/head
Zilog80 2017-01-26 22:22:53 +01:00
rodzic 3e5bb9646b
commit 4e89733d06
4 zmienionych plików z 52 dodań i 43 usunięć

Wyświetl plik

@ -56,11 +56,7 @@ int print_position(rs_data_t *rs_data) {
void print_frame(rs_data_t *rs_data) {
int i;
for (i = rs_data->pos; i < rs_data->frame_len; i++) {
rs_data->frame_bytes[i] = 0;
}
if (option_verbose) fprintf(stdout, "\n"); // fflush(stdout);
if (!option_raw && option_verbose) fprintf(stdout, "\n"); // fflush(stdout);
(rs_data->rs_process)(rs_data, option_raw, option_verbose);
@ -69,8 +65,8 @@ void print_frame(rs_data_t *rs_data) {
fprintf(stdout, "%02x", rs_data->frame_bytes[i]);
}
if (rs_data->ecc >= 0) fprintf(stdout, " [OK]"); else fprintf(stdout, " [NO]");
if (rs_data->ecc > 0) fprintf(stdout, " (%d)", rs_data->ecc);
if (rs_data->ecc >= 0) fprintf(stdout, " [OK]"); else fprintf(stdout, " [NO]");
if (rs_data->ecc > 0) fprintf(stdout, " (%d)", rs_data->ecc);
fprintf(stdout, "\n");
}

Wyświetl plik

@ -59,11 +59,7 @@ if ( option_crc==0 || ( option_crc && (rs_data->crc & 0x7)==0 ) )
void print_frame(rs_data_t *rs_data) {
int i;
for (i = rs_data->pos; i < rs_data->frame_len; i++) {
rs_data->frame_bytes[i] = 0;
}
if (option_verbose) fprintf(stdout, "\n"); // fflush(stdout);
if (!option_raw && option_verbose) fprintf(stdout, "\n"); // fflush(stdout);
(rs_data->rs_process)(rs_data, option_raw, option_verbose);
@ -72,8 +68,8 @@ void print_frame(rs_data_t *rs_data) {
fprintf(stdout, "%02x", rs_data->frame_bytes[i]);
}
if (rs_data->ecc >= 0) fprintf(stdout, " [OK]"); else fprintf(stdout, " [NO]");
if (rs_data->ecc > 0) fprintf(stdout, " (%d)", rs_data->ecc);
if (rs_data->ecc >= 0) fprintf(stdout, " [OK]"); else fprintf(stdout, " [NO]");
if (rs_data->ecc > 0) fprintf(stdout, " (%d)", rs_data->ecc);
fprintf(stdout, "\n");
}

Wyświetl plik

@ -334,7 +334,7 @@ static int rs41_get_Cal(rs_data_t *rs_data, int verbose) {
crc = rs41_check_CRC(rs_data, pos_FRAME, pck_FRAME);
if (crc==0 && strncmp(rs41_cal->SN, rs_data->SN, 8)!=0) {
memset(rs41_cal, 0, sizeof(rs41_cal));
memset(rs41_cal, 0, sizeof(*rs41_cal));
strncpy(rs41_cal->SN, rs_data->SN, 9);
}
@ -751,13 +751,11 @@ static int rs41_framebits2bytes(rs_data_t *rs_data) {
char *rawframebits = rs_data->frame_rawbits;
ui8_t *frame = rs_data->frame_bytes;
ui32_t n;
ui32_t endpos = rs_data->pos;
for (rs_data->pos = 0; rs_data->pos < endpos; rs_data->pos++) {
frame[rs_data->pos] = rs_data->bits2byte(rs_data, rawframebits+(BITS*rs_data->pos));
for (n = 0; n < rs_data->pos; n++) {
frame[n] = rs_data->bits2byte(rs_data, rawframebits+(BITS*n));
}
while (endpos < FRAME_LEN) frame[endpos++] = 0;
return 0;
}
@ -766,11 +764,16 @@ static int rs41_framebits2bytes(rs_data_t *rs_data) {
int rs41_process(void *data, int raw, int options) {
rs_data_t *rs_data = data;
int err=0, ret=0;
ui32_t n;
if (rs_data->input < 8) {
rs41_framebits2bytes(rs_data);
}
for (n = rs_data->pos; n < rs_data->frame_len; n++) {
rs_data->frame_bytes[n] = 0;
}
rs_data->ecc = rs41_ecc(rs_data);
rs_data->crc = 0;

Wyświetl plik

@ -225,7 +225,7 @@ static int rs92_get_Cal(rs_data_t *rs_data, int verbose) {
// crc == rs_data->crc & crc_CFG ?
if (crc==0 && strncmp(rs92_cal->SN, rs_data->SN, 8)!=0) {
memset(rs92_cal, 0, sizeof(rs92_cal));
memset(rs92_cal, 0, sizeof(*rs92_cal));
strncpy(rs92_cal->SN, rs_data->SN, 9);
}
@ -351,7 +351,7 @@ static void rs92_prn12(ui8_t *prn_le, ui8_t prns[12]) {
// PRN-32 overflow
if (ind_prn32 % 3 != 2) { // -> ind_prn32<11 // vorausgesetzt im Block folgt auf PRN-32
if ((sat_status[ind_prn32+1] & 0x0F) && prns[ind_prn32+1] > 1) { // entweder PRN-1 oder PRN-gerade
// && prns[ind_prn32+1] != 3 ?
// && prns[ind_prn32+1] != 3 ?
for (j = 0; j < ind_prn32; j++) {
if (prns[j] == (prns[ind_prn32+1]^prn32toggle) && (sat_status[j] & 0x0F)) break;
}
@ -374,8 +374,8 @@ static void rs92_prn12(ui8_t *prn_le, ui8_t prns[12]) {
if (prns[ind_prn32+1] == 0) { prn32toggle ^= 0x1; }
*/
}
prn32next = prns[ind_prn32+1]; // -> ind_prn32<11 && ind_prn32 % 3 != 2
}
if (ind_prn32 < 11) prn32next = prns[ind_prn32+1];
}
}
@ -525,7 +525,7 @@ static int rs92_get_GPSkoord(rs_data_t *rs_data, int opt_gg2) {
// Sat mit schlechten Daten suchen
if (diter > d_err)
if (diter >= d_err)
{
if (N > 4) { // N > 5
for (n = 0; n < N; n++) {
@ -552,8 +552,8 @@ static int rs92_get_GPSkoord(rs_data_t *rs_data, int opt_gg2) {
if (exN >= 0) {
if ( (Sat_B[exN].prn == prn32next) && (ind_prn32 % 3 != 2) ) {
prn32toggle ^= 0x1; // wenn zuvor mit prn32next valider Fix, dann eventuell nicht aendern;q
if (Sat_B[exN].prn == prn32next) {
prn32toggle ^= 0x1; // wenn zuvor mit prn32next valider Fix, dann eventuell nicht aendern;
// eventuell gleich testen
}
@ -637,15 +637,6 @@ static int rs92_get_GPSkoord(rs_data_t *rs_data, int opt_gg2) {
}
(rs_data->GPS).lat = lat;
(rs_data->GPS).lon = lon;
(rs_data->GPS).alt = alt;
(rs_data->GPS).vH = vH;
(rs_data->GPS).vD = vD;
(rs_data->GPS).vU = vU;
addData_Vaisala_t *rs92_add = rs_data->addData;
int pDOP = -1;
if (calc_DOPn(N, Sat_B, pos_ecef, DOP) == 0) {
@ -660,6 +651,24 @@ static int rs92_get_GPSkoord(rs_data_t *rs_data, int opt_gg2) {
}
if (diter < d_err) {
(rs_data->GPS).lat = lat;
(rs_data->GPS).lon = lon;
(rs_data->GPS).alt = alt;
(rs_data->GPS).vH = vH;
(rs_data->GPS).vD = vD;
(rs_data->GPS).vU = vU;
}
else {
(rs_data->GPS).lat = (rs_data->GPS).lon = (rs_data->GPS).alt = 0;
(rs_data->GPS).vH = (rs_data->GPS).vD = (rs_data->GPS).vU = 0;
N = 0;
}
return N;
}
@ -771,7 +780,9 @@ static int rs92_ecc(rs_data_t *rs_data) {
int msgpos = cfg_rs92ecc.msgpos; // = 6
int parpos = cfg_rs92ecc.parpos; // = 240-24
while (frmlen < rs_data->frame_len) frame[frmlen++] = 0;
while (frmlen < parpos) frmlen++;
while (frmlen < rs_data->frame_len) frame[frmlen++] = 0xFF; // besser bei 00-error-frames
if (frmlen > rs_data->frame_len) frmlen = rs_data->frame_len;
memset(cw, 0, rs_N);
@ -814,13 +825,11 @@ static int rs92_framebits2bytes(rs_data_t *rs_data) {
char *rawframebits = rs_data->frame_rawbits;
ui8_t *frame = rs_data->frame_bytes;
ui32_t n;
ui32_t endpos = rs_data->pos;
for (rs_data->pos = 0; rs_data->pos < endpos; rs_data->pos++) {
frame[rs_data->pos] = rs_data->bits2byte(rs_data, rawframebits+(BITS*rs_data->pos));
for (n = 0; n < rs_data->pos; n++) {
frame[n] = rs_data->bits2byte(rs_data, rawframebits+(BITS*n));
}
while (endpos < FRAME_LEN) frame[endpos++] = 0;
return 0;
}
@ -829,11 +838,16 @@ static int rs92_framebits2bytes(rs_data_t *rs_data) {
int rs92_process(void *data, int raw, int options) {
rs_data_t *rs_data = data;
int err=0, ret=0;
ui32_t n;
if (rs_data->input < 8) {
rs92_framebits2bytes(rs_data);
}
for (n = rs_data->pos; n < rs_data->frame_len; n++) {
rs_data->frame_bytes[n] = 0;
}
rs_data->ecc = rs92_ecc(rs_data);
rs_data->crc = 0;
@ -874,8 +888,8 @@ int rs92_mbits2byte(void *data, char mbits[]) {
int i, byte=0, d=1;
int bit8[8];
if (manch(mbits+0) != 0) return 0x100;
for (i = 0; i < 8; i++) {
if (manch(mbits+0) != 0) return 0x100; // hier error-00-frames mit pos==frame_len moeglich;
for (i = 0; i < 8; i++) { // eventuell hier reync, oder in demod
bit8[i] = manch(mbits+2*(i+1));
}