mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2026-09-08 15:59:08 +00:00
better rs41 (#2757)
This commit is contained in:
@@ -110,7 +110,7 @@ GPS_data Packet::get_GPS_data() const {
|
|||||||
result.alt = reader_bi_m.read(8 * 8, 24) / 100.0; // <|
|
result.alt = reader_bi_m.read(8 * 8, 24) / 100.0; // <|
|
||||||
result.lat = reader_bi_m.read(28 * 8, 32) / 1000000.0; // <| Inspired by https://raw.githubusercontent.com/projecthorus/radiosonde_auto_rx/master/demod/mod/m20mod.c
|
result.lat = reader_bi_m.read(28 * 8, 32) / 1000000.0; // <| Inspired by https://raw.githubusercontent.com/projecthorus/radiosonde_auto_rx/master/demod/mod/m20mod.c
|
||||||
result.lon = reader_bi_m.read(32 * 8, 32) / 1000000.0; // <|
|
result.lon = reader_bi_m.read(32 * 8, 32) / 1000000.0; // <|
|
||||||
} else if (type_ == Type::Vaisala_RS41_SG) {
|
} else if (type_ == Type::Vaisala_RS41_SG && crc16rs41(block_gpspos)) {
|
||||||
uint8_t XYZ_bytes[4];
|
uint8_t XYZ_bytes[4];
|
||||||
int32_t XYZ; // 32bit
|
int32_t XYZ; // 32bit
|
||||||
double_t X[3];
|
double_t X[3];
|
||||||
@@ -245,7 +245,7 @@ temp_humid Packet::get_temp_humid() const {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type_ == Type::Vaisala_RS41_SG && crc_ok_RS41()) // Only process if packet is healthy
|
if (type_ == Type::Vaisala_RS41_SG && crc16rs41(block_meas)) // Only process if packet is healthy
|
||||||
{
|
{
|
||||||
// memset(calfrchk, 0, 51); // is this necessary ? only if the sondeID changes (new sonde)
|
// memset(calfrchk, 0, 51); // is this necessary ? only if the sondeID changes (new sonde)
|
||||||
// original code from https://github.com/rs1729/RS/blob/master/rs41/rs41ptu.c
|
// original code from https://github.com/rs1729/RS/blob/master/rs41/rs41ptu.c
|
||||||
@@ -371,9 +371,11 @@ std::string Packet::serial_number() const {
|
|||||||
uint8_t achar;
|
uint8_t achar;
|
||||||
for (uint8_t i = 0; i < 8; i++) { // euquiq: Serial ID is 8 bytes long, each byte a char
|
for (uint8_t i = 0; i < 8; i++) { // euquiq: Serial ID is 8 bytes long, each byte a char
|
||||||
achar = vaisala_descramble(pos_SondeID + i);
|
achar = vaisala_descramble(pos_SondeID + i);
|
||||||
if (achar < 32 || achar > 126)
|
if (achar < 32 || achar > 126) {
|
||||||
return "?"; // Maybe there are ids with less than 8 bytes and this is not OK.
|
serial_id += "?"; // Maybe there are ids with less than 8 bytes and this is not OK.
|
||||||
serial_id += (char)achar;
|
} else {
|
||||||
|
serial_id += (char)achar;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return serial_id;
|
return serial_id;
|
||||||
} else {
|
} else {
|
||||||
@@ -414,15 +416,9 @@ bool Packet::crc_ok() const {
|
|||||||
// 2 bytes CRC16 over the data.
|
// 2 bytes CRC16 over the data.
|
||||||
bool Packet::crc_ok_RS41() const // check CRC for the data blocks we need
|
bool Packet::crc_ok_RS41() const // check CRC for the data blocks we need
|
||||||
{
|
{
|
||||||
if (!crc16rs41(block_status))
|
if (!crc16rs41(block_status)) return false;
|
||||||
return false;
|
if (!crc16rs41(block_gpspos)) return false;
|
||||||
|
if (!crc16rs41(block_meas)) return false;
|
||||||
if (!crc16rs41(block_gpspos))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (!crc16rs41(block_meas))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -451,8 +447,7 @@ bool Packet::crc16rs41(uint32_t field_start) const {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Check calculated CRC against packet's one
|
// Check calculated CRC against packet's one
|
||||||
pos++;
|
int crcok = vaisala_descramble(field_start + 2 + length) | (vaisala_descramble(field_start + 2 + length + 1) << 8);
|
||||||
int crcok = vaisala_descramble(pos) | (vaisala_descramble(pos + 1) << 8);
|
|
||||||
if (crcok != rem)
|
if (crcok != rem)
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user