mirror of
https://github.com/eried/portapack-mayhem.git
synced 2025-06-25 07:10:43 -04:00
Started working on radiosonde RX
Removed some warnings Better handling of absent map file in GeoMap ?
This commit is contained in:
parent
34b99042ef
commit
d3222c27ca
18 changed files with 621 additions and 34 deletions
97
firmware/common/sonde_packet.cpp
Normal file
97
firmware/common/sonde_packet.cpp
Normal file
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc.
|
||||
* Copyright (C) 2017 Furrtek
|
||||
*
|
||||
* This file is part of PortaPack.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 51 Franklin Street,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "sonde_packet.hpp"
|
||||
|
||||
//#include "crc.hpp"
|
||||
|
||||
namespace sonde {
|
||||
|
||||
size_t Packet::length() const {
|
||||
return decoder_.symbols_count();
|
||||
}
|
||||
|
||||
bool Packet::is_valid() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
Timestamp Packet::received_at() const {
|
||||
return packet_.timestamp();
|
||||
}
|
||||
|
||||
Packet::Type Packet::type() const {
|
||||
return type_;
|
||||
}
|
||||
|
||||
SN Packet::serial_number() const {
|
||||
if (type() == Type::M10) {
|
||||
// See https://github.com/rs1729/RS/blob/master/m10/m10x.c line 606
|
||||
return (reader_.read(2 * 8, 8) << 20) |
|
||||
(reader_.read(0, 4) << 16) |
|
||||
(reader_.read(4 * 8, 3) << 13) |
|
||||
(reader_.read(4 * 8 + 3, 5) << 8) |
|
||||
reader_.read(3 * 8, 8);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
FormattedSymbols Packet::symbols_formatted() const {
|
||||
return format_symbols(decoder_);
|
||||
}
|
||||
|
||||
bool Packet::crc_ok() const {
|
||||
switch(type()) {
|
||||
case Type::M10: return crc_ok_M10();
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool Packet::crc_ok_M10() const {
|
||||
uint16_t cs { 0 };
|
||||
uint32_t c0, c1, t, t6, t7, s,b ;
|
||||
|
||||
for (size_t i = 0; i < packet_.size(); i++) {
|
||||
b = packet_[i];
|
||||
c1 = cs & 0xFF;
|
||||
|
||||
// B
|
||||
b = (b >> 1) | ((b & 1) << 7);
|
||||
b ^= (b >> 2) & 0xFF;
|
||||
|
||||
// A1
|
||||
t6 = (cs & 1) ^ ((cs >> 2) & 1) ^ ((cs >> 4) & 1);
|
||||
t7 = ((cs >> 1) & 1) ^ ((cs >> 3) & 1) ^ ((cs >> 5) & 1);
|
||||
t = (cs & 0x3F) | (t6 << 6) | (t7 << 7);
|
||||
|
||||
// A2
|
||||
s = (cs >> 7) & 0xFF;
|
||||
s ^= (s >> 2) & 0xFF;
|
||||
|
||||
c0 = b ^ t ^ s;
|
||||
|
||||
cs = ((c1<<8) | c0) & 0xFFFF;
|
||||
}
|
||||
|
||||
return ((cs & 0xFFFF) == ((packet_[0x63] << 8) | (packet_[0x63 + 1])));
|
||||
}
|
||||
|
||||
} /* namespace sonde */
|
Loading…
Add table
Add a link
Reference in a new issue