From e3169a349505f0e22f5861f78b7b6ae3906fef35 Mon Sep 17 00:00:00 2001 From: Joel M Date: Sat, 29 Apr 2023 13:49:27 +0200 Subject: [PATCH 1/3] add Meteomodem_M20 to packet class in sonde_packet.hpp --- firmware/common/sonde_packet.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/firmware/common/sonde_packet.hpp b/firmware/common/sonde_packet.hpp index 934a20776..beb0a235e 100644 --- a/firmware/common/sonde_packet.hpp +++ b/firmware/common/sonde_packet.hpp @@ -51,6 +51,7 @@ public: Meteomodem_M10 = 2, Meteomodem_M2K2 = 3, Vaisala_RS41_SG = 4, + Meteomodem_M20 = 5, }; Packet(const baseband::Packet& packet, const Type type); From c916eaf43ff2de71e53c01f2801b3d747c95fb5c Mon Sep 17 00:00:00 2001 From: Joel M Date: Sat, 29 Apr 2023 14:00:28 +0200 Subject: [PATCH 2/3] Detects M20 radiosondes and decode GNSS location --- firmware/common/sonde_packet.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/firmware/common/sonde_packet.cpp b/firmware/common/sonde_packet.cpp index 8eb15a2af..6552523ba 100644 --- a/firmware/common/sonde_packet.cpp +++ b/firmware/common/sonde_packet.cpp @@ -64,6 +64,8 @@ Packet::Packet( type_ = Type::Meteomodem_M10; else if (id_byte == 0x648F) type_ = Type::Meteomodem_M2K2; + else if (id_byte == 0x4520) //https://raw.githubusercontent.com/projecthorus/radiosonde_auto_rx/master/demod/mod/m20mod.c + type_ = Type::Meteomodem_M20; } } @@ -109,6 +111,12 @@ GPS_data Packet::get_GPS_data() const result.lat = reader_bi_m.read(14 * 8, 32) / ((1ULL << 32) / 360.0); result.lon = reader_bi_m.read(18 * 8, 32) / ((1ULL << 32) / 360.0); } + else if (type_ == Type::Meteomodem_M20) + { + result.alt = ((reader_bi_m.read(8 * 8, 32) / 100) - 48) / 250 ; //Conversion of altitude is actually a bit shifted, needs to be more accurate. + result.lat = reader_bi_m.read(28 * 8, 32) / 1000000.0 ; //https://raw.githubusercontent.com/projecthorus/radiosonde_auto_rx/master/demod/mod/m20mod.c + result.lon = reader_bi_m.read(32 * 8, 32) / 1000000.0 ; + } else if (type_ == Type::Vaisala_RS41_SG) { @@ -147,6 +155,10 @@ uint32_t Packet::battery_voltage() const { if (type_ == Type::Meteomodem_M10) return (reader_bi_m.read(69 * 8, 8) + (reader_bi_m.read(70 * 8, 8) << 8)) * 1000 / 150; + else if (type_ == Type::Meteomodem_M20) + { + return 0; //NOT SUPPPORTED YET + } else if (type_ == Type::Meteomodem_M2K2) return reader_bi_m.read(69 * 8, 8) * 66; // Actually 65.8 else if (type_ == Type::Vaisala_RS41_SG) @@ -279,6 +291,8 @@ std::string Packet::type_string() const return "Meteomodem ???"; case Type::Meteomodem_M10: return "Meteomodem M10"; + case Type::Meteomodem_M20: + return "Meteomodem M20"; case Type::Meteomodem_M2K2: return "Meteomodem M2K2"; case Type::Vaisala_RS41_SG: From e8b8f0ca5c7d880456968ad31ac655e6d982acd1 Mon Sep 17 00:00:00 2001 From: Joel M Date: Sun, 30 Apr 2023 12:06:37 +0200 Subject: [PATCH 3/3] Disable inaccurate altitude for the moment --- firmware/common/sonde_packet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/common/sonde_packet.cpp b/firmware/common/sonde_packet.cpp index 6552523ba..b857b12c0 100644 --- a/firmware/common/sonde_packet.cpp +++ b/firmware/common/sonde_packet.cpp @@ -113,7 +113,7 @@ GPS_data Packet::get_GPS_data() const } else if (type_ == Type::Meteomodem_M20) { - result.alt = ((reader_bi_m.read(8 * 8, 32) / 100) - 48) / 250 ; //Conversion of altitude is actually a bit shifted, needs to be more accurate. + result.alt = 0; //((reader_bi_m.read(8 * 8, 32) / 100) - 48) / 250 ; //Disable innacurate altitude for the moment. result.lat = reader_bi_m.read(28 * 8, 32) / 1000000.0 ; //https://raw.githubusercontent.com/projecthorus/radiosonde_auto_rx/master/demod/mod/m20mod.c result.lon = reader_bi_m.read(32 * 8, 32) / 1000000.0 ; }