dfm09: serial number fix (2)

pull/18/head
Zilog80 2019-09-23 19:06:40 +02:00
rodzic 480069ce53
commit a5518da6b3
2 zmienionych plików z 74 dodań i 44 usunięć

Wyświetl plik

@ -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);
}

Wyświetl plik

@ -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);
}