From a5518da6b3d6bc8f05e7cc973c7622af9573a7b2 Mon Sep 17 00:00:00 2001 From: Zilog80 Date: Mon, 23 Sep 2019 19:06:40 +0200 Subject: [PATCH] dfm09: serial number fix (2) --- demod/mod/dfm09mod.c | 59 ++++++++++++++++++++++++++--------------- demod/multi/dfm09base.c | 59 ++++++++++++++++++++++++++--------------- 2 files changed, 74 insertions(+), 44 deletions(-) diff --git a/demod/mod/dfm09mod.c b/demod/mod/dfm09mod.c index e044b89..298355e 100644 --- a/demod/mod/dfm09mod.c +++ b/demod/mod/dfm09mod.c @@ -46,6 +46,7 @@ typedef struct { typedef struct { ui8_t max_ch; ui8_t nul_ch; + ui8_t sn_ch; ui8_t chXbit; ui32_t SN_X; ui32_t chX[2]; @@ -456,33 +457,47 @@ static int conf_out(gpx_t *gpx, ui8_t *conf_bits, int ec) { if (bits2val(conf_bits+4, 4) == 0xC) { // 0xsCaaaab gpx->snc.max_ch = conf_id; // reset? } +/* + if (bits2val(conf_bits, 8) == 0x70) { // 0x70aaaab + gpx->snc.max_ch = conf_id; // reset? + } +*/ } - if (conf_id > 4 && (conf_id == (gpx->snc.nul_ch>>4)+1 || conf_id == gpx->snc.max_ch)) + // SN: mind. 6 Kanaele + if (conf_id > 5 && (conf_id == (gpx->snc.nul_ch>>4)+1 || conf_id == gpx->snc.max_ch)) { sn2_ch = bits2val(conf_bits, 8); - sn_ch = ((sn2_ch>>4) & 0xF); - if (conf_id == sn_ch) - { - if ( (gpx->snc.nul_ch & 0x58) == 0x58 ) { // 0x5A, 0x5B - SN6 = bits2val(conf_bits+4, 4*6); // DFM-06: Kanal 6 - if (SN6 == gpx->SN6 && SN6 != 0) { // nur Nibble-Werte 0..9 - gpx->sonde_typ = SNbit | 6; - gpx->ptu_out = 6; - sprintf(gpx->sonde_id, "ID06:%6X", gpx->SN6); - //sprintf(json_sonde_id, "DFM06-%6X", gpx->SN6); - } - else { // reset - gpx->sonde_typ = 0; - //sprintf(json_sonde_id, "DFMxx-xxxxxxxx"); //json_sonde_id[0] = '\0'; - } - gpx->SN6 = SN6; + sn_ch = ((sn2_ch>>4) & 0xF); // sn_ch == config_id + + if ( (gpx->snc.nul_ch & 0x58) == 0x58 ) { // 0x5A, 0x5B + SN6 = bits2val(conf_bits+4, 4*6); // DFM-06: Kanal 6 + if (SN6 == gpx->SN6 && SN6 != 0) { // nur Nibble-Werte 0..9 + gpx->sonde_typ = SNbit | 6; + gpx->ptu_out = 6; + sprintf(gpx->sonde_id, "ID06:%6X", gpx->SN6); + //sprintf(json_sonde_id, "DFM06-%6X", gpx->SN6); } - else if ( (sn2_ch & 0xF) == 0xC // 0xsCaaaab, s==sn_ch , s: 0xA=DFM-09 , 0xC=DFM-17? 0xD=? - || (sn2_ch & 0xF) == 0x0 ) // 0xs0aaaab, s==sn_ch , s: 0x7,0x8: pilotsonde PS-15? + else { // reset + gpx->sonde_typ = 0; + //sprintf(json_sonde_id, "DFMxx-xxxxxxxx"); //json_sonde_id[0] = '\0'; + } + gpx->SN6 = SN6; + } + else if ( (sn2_ch & 0xF) == 0xC // 0xsCaaaab, s==sn_ch , s: 0xA=DFM-09 , 0xC=DFM-17? 0xD=? + || (sn2_ch & 0xF) == 0x0 ) // 0xs0aaaab, s==sn_ch , s: 0x7,0x8: pilotsonde PS-15? + { + val = bits2val(conf_bits+8, 4*5); + hl = (val & 0xF); + if (hl < 2) { - val = bits2val(conf_bits+8, 4*5); - hl = (val & 1); + if ( gpx->snc.sn_ch != sn_ch ) { // -> sn_ch > 0 + // reset + gpx->snc.chXbit = 0; + gpx->snc.chX[0] = 0; + gpx->snc.chX[1] = 0; + } + gpx->snc.sn_ch = sn_ch; gpx->snc.chX[hl] = (val >> 4) & 0xFFFF; gpx->snc.chXbit |= 1 << hl; if (gpx->snc.chXbit == 3) { @@ -514,8 +529,8 @@ static int conf_out(gpx_t *gpx, ui8_t *conf_bits, int ec) { gpx->snc.chXbit = 0; } } - ret = (gpx->sonde_typ & 0xF); } + ret = (gpx->sonde_typ & 0xF); } diff --git a/demod/multi/dfm09base.c b/demod/multi/dfm09base.c index b400301..83c19de 100644 --- a/demod/multi/dfm09base.c +++ b/demod/multi/dfm09base.c @@ -45,6 +45,7 @@ typedef struct { typedef struct { ui8_t max_ch; ui8_t nul_ch; + ui8_t sn_ch; ui8_t chXbit; ui32_t SN_X; ui32_t chX[2]; @@ -455,33 +456,47 @@ static int conf_out(gpx_t *gpx, ui8_t *conf_bits, int ec) { if (bits2val(conf_bits+4, 4) == 0xC) { // 0xsCaaaab gpx->snc.max_ch = conf_id; // reset? } +/* + if (bits2val(conf_bits, 8) == 0x70) { // 0x70aaaab + gpx->snc.max_ch = conf_id; // reset? + } +*/ } - if (conf_id > 4 && (conf_id == (gpx->snc.nul_ch>>4)+1 || conf_id == gpx->snc.max_ch)) + // SN: mind. 6 Kanaele + if (conf_id > 5 && (conf_id == (gpx->snc.nul_ch>>4)+1 || conf_id == gpx->snc.max_ch)) { sn2_ch = bits2val(conf_bits, 8); - sn_ch = ((sn2_ch>>4) & 0xF); - if (conf_id == sn_ch) - { - if ( (gpx->snc.nul_ch & 0x58) == 0x58 ) { // 0x5A, 0x5B - SN6 = bits2val(conf_bits+4, 4*6); // DFM-06: Kanal 6 - if (SN6 == gpx->SN6 && SN6 != 0) { // nur Nibble-Werte 0..9 - gpx->sonde_typ = SNbit | 6; - gpx->ptu_out = 6; - sprintf(gpx->sonde_id, "ID06:%6X", gpx->SN6); - //sprintf(json_sonde_id, "DFM06-%6X", gpx->SN6); - } - else { // reset - gpx->sonde_typ = 0; - //sprintf(json_sonde_id, "DFMxx-xxxxxxxx"); //json_sonde_id[0] = '\0'; - } - gpx->SN6 = SN6; + sn_ch = ((sn2_ch>>4) & 0xF); // sn_ch == config_id + + if ( (gpx->snc.nul_ch & 0x58) == 0x58 ) { // 0x5A, 0x5B + SN6 = bits2val(conf_bits+4, 4*6); // DFM-06: Kanal 6 + if (SN6 == gpx->SN6 && SN6 != 0) { // nur Nibble-Werte 0..9 + gpx->sonde_typ = SNbit | 6; + gpx->ptu_out = 6; + sprintf(gpx->sonde_id, "ID06:%6X", gpx->SN6); + //sprintf(json_sonde_id, "DFM06-%6X", gpx->SN6); } - else if ( (sn2_ch & 0xF) == 0xC // 0xsCaaaab, s==sn_ch , s: 0xA=DFM-09 , 0xC=DFM-17? 0xD=? - || (sn2_ch & 0xF) == 0x0 ) // 0xs0aaaab, s==sn_ch , s: 0x7,0x8: pilotsonde PS-15? + else { // reset + gpx->sonde_typ = 0; + //sprintf(json_sonde_id, "DFMxx-xxxxxxxx"); //json_sonde_id[0] = '\0'; + } + gpx->SN6 = SN6; + } + else if ( (sn2_ch & 0xF) == 0xC // 0xsCaaaab, s==sn_ch , s: 0xA=DFM-09 , 0xC=DFM-17? 0xD=? + || (sn2_ch & 0xF) == 0x0 ) // 0xs0aaaab, s==sn_ch , s: 0x7,0x8: pilotsonde PS-15? + { + val = bits2val(conf_bits+8, 4*5); + hl = (val & 0xF); + if (hl < 2) { - val = bits2val(conf_bits+8, 4*5); - hl = (val & 1); + if ( gpx->snc.sn_ch != sn_ch ) { // -> sn_ch > 0 + // reset + gpx->snc.chXbit = 0; + gpx->snc.chX[0] = 0; + gpx->snc.chX[1] = 0; + } + gpx->snc.sn_ch = sn_ch; gpx->snc.chX[hl] = (val >> 4) & 0xFFFF; gpx->snc.chXbit |= 1 << hl; if (gpx->snc.chXbit == 3) { @@ -513,8 +528,8 @@ static int conf_out(gpx_t *gpx, ui8_t *conf_bits, int ec) { gpx->snc.chXbit = 0; } } - ret = (gpx->sonde_typ & 0xF); } + ret = (gpx->sonde_typ & 0xF); }