From 98f89a84bb2dffd72342158df2ff90c56a09411b Mon Sep 17 00:00:00 2001 From: furrtek Date: Sun, 5 Feb 2017 20:57:20 +0000 Subject: [PATCH] Improved POCSAG receiver reliability --- firmware/application/CMakeLists.txt | 2 + firmware/application/Makefile | 30 +++++ firmware/application/main.cpp | 2 +- firmware/application/pocsag_app.cpp | 176 +++++++++------------------ firmware/application/pocsag_app.hpp | 15 +-- firmware/baseband/proc_nfm_audio.cpp | 2 - firmware/baseband/proc_pocsag.cpp | 45 ++----- firmware/baseband/proc_pocsag.hpp | 7 +- firmware/common/pocsag.cpp | 124 +++++++++++++++++++ firmware/common/pocsag.hpp | 65 ++++++++++ firmware/portapack-h1-havoc.bin | Bin 825952 -> 826432 bytes 11 files changed, 304 insertions(+), 164 deletions(-) create mode 100644 firmware/common/pocsag.cpp create mode 100644 firmware/common/pocsag.hpp diff --git a/firmware/application/CMakeLists.txt b/firmware/application/CMakeLists.txt index 4c54abd9..c5edb99b 100644 --- a/firmware/application/CMakeLists.txt +++ b/firmware/application/CMakeLists.txt @@ -196,6 +196,7 @@ set(CPPSRC ${COMMON}/ais_baseband.cpp ${COMMON}/ais_packet.cpp ${COMMON}/pocsag_packet.cpp + ${COMMON}/pocsag.cpp ais_app.cpp tpms_app.cpp pocsag_app.cpp @@ -298,6 +299,7 @@ set(CPPWARN "-Wall -Wextra") # List all default C defines here, like -D_DEBUG=1 # TODO: Switch -DCRT0_INIT_DATA depending on load from RAM or SPIFI? # NOTE: _RANDOM_TCC to kill a GCC 4.9.3 error with std::max argument types + set(DDEFS -DLPC43XX -DLPC43XX_M0 -D__NEWLIB__ -DHACKRF_ONE -DTOOLCHAIN_GCC -DTOOLCHAIN_GCC_ARM -D_RANDOM_TCC=0 -DGIT_REVISION=\"${GIT_REVISION}\") # List all default ASM defines here, like -D_DEBUG=1 diff --git a/firmware/application/Makefile b/firmware/application/Makefile index 190677e2..a3a6ee38 100644 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -2516,6 +2516,33 @@ __/common/png_writer.cpp.s: cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/__/common/png_writer.cpp.s .PHONY : __/common/png_writer.cpp.s +__/common/pocsag.obj: __/common/pocsag.cpp.obj + +.PHONY : __/common/pocsag.obj + +# target to build an object file +__/common/pocsag.cpp.obj: + cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/__/common/pocsag.cpp.obj +.PHONY : __/common/pocsag.cpp.obj + +__/common/pocsag.i: __/common/pocsag.cpp.i + +.PHONY : __/common/pocsag.i + +# target to preprocess a source file +__/common/pocsag.cpp.i: + cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/__/common/pocsag.cpp.i +.PHONY : __/common/pocsag.cpp.i + +__/common/pocsag.s: __/common/pocsag.cpp.s + +.PHONY : __/common/pocsag.s + +# target to generate assembly for a file +__/common/pocsag.cpp.s: + cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/__/common/pocsag.cpp.s +.PHONY : __/common/pocsag.cpp.s + __/common/pocsag_packet.obj: __/common/pocsag_packet.cpp.obj .PHONY : __/common/pocsag_packet.obj @@ -5571,6 +5598,9 @@ help: @echo "... __/common/png_writer.obj" @echo "... __/common/png_writer.i" @echo "... __/common/png_writer.s" + @echo "... __/common/pocsag.obj" + @echo "... __/common/pocsag.i" + @echo "... __/common/pocsag.s" @echo "... __/common/pocsag_packet.obj" @echo "... __/common/pocsag_packet.i" @echo "... __/common/pocsag_packet.s" diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index d611038e..bc9d58bd 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -24,7 +24,7 @@ // Gimp image > indexed colors (16), then "xxd -i *.bmp" //BUG: (fixed ?) POCSAG: Bad console scroll init -//BUG: POCSAG misses alphanum messages, cuts them off sometimes +//BUG: (fixed ?) POCSAG misses alphanum messages, cuts them off sometimes //BUG: Check AFSK transmit end, skips last bits ? //BUG: RDS doesn't stop baseband when stopping tx ? diff --git a/firmware/application/pocsag_app.cpp b/firmware/application/pocsag_app.cpp index f942879b..e70da2b5 100644 --- a/firmware/application/pocsag_app.cpp +++ b/firmware/application/pocsag_app.cpp @@ -24,46 +24,19 @@ #include "baseband_api.hpp" +#include "audio.hpp" #include "portapack.hpp" #include "portapack_persistent_memory.hpp" using namespace portapack; +using namespace pocsag; +#include "pocsag.hpp" #include "string_format.hpp" #include "utility.hpp" -#define POCSAG_SYNC 0x7CD215D8 -#define POCSAG_IDLE 0x7A89C197 - -namespace pocsag { - -namespace format { - -static std::string bitrate_str(BitRate bitrate) { - switch (bitrate) { - case BitRate::FSK512: return "512 "; - case BitRate::FSK1200: return "1200"; - case BitRate::FSK2400: return "2400"; - default: return "????"; - } -} - -static std::string flag_str(PacketFlag packetflag) { - switch (packetflag) { - case PacketFlag::NORMAL: return "OK"; - case PacketFlag::IDLE: return "IDLE"; - case PacketFlag::TIMED_OUT: return "TIMED OUT"; - case PacketFlag::TOO_LONG: return "TOO LONG"; - default: return ""; - } -} - -} /* namespace format */ - -} /* namespace pocsag */ - void POCSAGLogger::on_packet(const pocsag::POCSAGPacket& packet, const uint32_t frequency) { - std::string entry = pocsag::format::bitrate_str(packet.bitrate()) + " " + to_string_dec_uint(frequency) + "Hz "; + std::string entry = pocsag::bitrate_str(packet.bitrate()) + " " + to_string_dec_uint(frequency) + "Hz "; // Raw hex dump of all the codewords for (size_t c = 0; c < 16; c++) @@ -117,16 +90,6 @@ POCSAGAppView::POCSAGAppView(NavigationView& nav) { &check_log, &console }); - - radio::enable({ - tuning_frequency(), - sampling_rate, - baseband_bandwidth, - rf::Direction::Receive, - receiver_model.rf_amp(), - static_cast(receiver_model.lna()), - static_cast(receiver_model.vga()) - }); check_log.set_value(logging); check_log.on_select = [this](Checkbox&, bool v) { @@ -153,11 +116,20 @@ POCSAGAppView::POCSAGAppView(NavigationView& nav) { logger = std::make_unique(); if (logger) logger->append("pocsag.txt"); + receiver_model.set_sampling_rate(3072000); + receiver_model.set_baseband_bandwidth(1750000); + receiver_model.enable(); + + const auto new_volume = volume_t::decibel(60 - 99) + audio::headphone::volume_range().max; + receiver_model.set_headphone_volume(new_volume); + audio::output::start(); + baseband::set_pocsag(pocsag::BitRate::FSK1200); } POCSAGAppView::~POCSAGAppView() { - radio::disable(); + audio::output::stop(); + receiver_model.disable(); baseband::shutdown(); } @@ -165,89 +137,63 @@ void POCSAGAppView::focus() { options_freq.focus(); } +// Useless ? void POCSAGAppView::set_parent_rect(const Rect new_parent_rect) { View::set_parent_rect(new_parent_rect); } void POCSAGAppView::on_packet(const POCSAGPacketMessage * message) { - bool eom = false; - uint32_t codeword; std::string alphanum_text = ""; - char ascii_char; - for (size_t i = 0; i < 16; i++) { - codeword = message->packet[i]; - - if (codeword & 0x80000000U) { - // Message - ascii_data |= ((codeword >> 11) & 0xFFFFF); - ascii_idx += 20; - - // Raw 20 bits to 7 bit reversed ASCII - while (ascii_idx >= 7) { - ascii_idx -= 7; - ascii_char = (ascii_data >> ascii_idx) & 0x7F; - - // Bottom's up - ascii_char = (ascii_char & 0xF0) >> 4 | (ascii_char & 0x0F) << 4; // 01234567 -> 45670123 - ascii_char = (ascii_char & 0xCC) >> 2 | (ascii_char & 0x33) << 2; // 45670123 -> 67452301 - ascii_char = (ascii_char & 0xAA) >> 2 | (ascii_char & 0x55); // 67452301 -> *7654321 - - // Translate non-printable chars - if ((ascii_char < 32) || (ascii_char > 126)) - output_text += "[" + to_string_dec_uint(ascii_char) + "]"; - else - output_text += ascii_char; - - } - ascii_data = ascii_data << 20; - } else { - // Address - if ((codeword == POCSAG_IDLE) || (codeword == POCSAG_SYNC)) { - eom = true; - } else { - if ((codeword) && (!address)) { - // Set address if none set and codeword is valid - function = (codeword >> 11) & 3; - address = ((codeword >> 10) & 0x1FFFF8) | ((codeword >> 1) & 7); - } - } - } + // Log raw data + if (logger && logging) logger->on_packet(message->packet, target_frequency()); + + if (message->packet.flag() != NORMAL) { + console.writeln( + "RX ERROR: " + pocsag::flag_str(message->packet.flag()) + + " Codewords: " + to_string_dec_uint(message->packet[0]) + ); } - if (logger && logging) logger->on_packet(message->packet, target_frequency()); + bool result = decode_batch(message->packet, &pocsag_state); - if (eom) { + if (result) { std::string console_info; - console_info = to_string_time(message->packet.timestamp()) + " "; + if (pocsag_state.out_type == ADDRESS) { + // Address only + console_info = to_string_time(message->packet.timestamp()) + " "; + console_info += pocsag::bitrate_str(message->packet.bitrate()) + " "; + console_info += "ADDR:" + to_string_dec_uint(pocsag_state.address); + console_info += " F" + to_string_dec_uint(pocsag_state.function); + + console.writeln(console_info); + + if (logger) logger->on_decoded(message->packet, console_info, pocsag_state.output); + + last_address = pocsag_state.address; + } else if (pocsag_state.out_type == MESSAGE) { + if (pocsag_state.address != last_address) { + // New message + console_info = to_string_time(message->packet.timestamp()) + " "; + console_info += pocsag::bitrate_str( message->packet.bitrate()) + " "; + console_info += "ADDR:" + to_string_dec_uint(pocsag_state.address); + console_info += " F" + to_string_dec_uint(pocsag_state.function); + + console.writeln(console_info); + + console.writeln("Alpha:" + pocsag_state.output); + + if (logger) logger->on_decoded(message->packet, console_info, pocsag_state.output); + + last_address = pocsag_state.address; + } else { + // Message continues... + } + } else if (pocsag_state.out_type == EMPTY) + console.writeln("-"); - if (address || function) { - console_info += pocsag::format::bitrate_str( message->packet.bitrate()) + " "; - console_info += pocsag::format::flag_str(message->packet.flag()) + " "; - console_info += "ADDR:" + to_string_dec_uint(address) + " F:" + to_string_dec_uint(function); - - console.writeln(console_info); - - if (output_text != "") console.writeln("Alpha:" + output_text); - - if (logger) logger->on_decoded(message->packet, console_info, output_text); - - } else { - console_info += pocsag::format::bitrate_str(message->packet.bitrate()) + " "; - console_info += pocsag::format::flag_str(message->packet.flag()); - - console.writeln(console_info); - } - - output_text = ""; - ascii_idx = 0; - ascii_data = 0; - batch_cnt = 0; - address = 0; - function = 0; - } else { - batch_cnt++; + console.write(pocsag_state.output); } } @@ -267,15 +213,11 @@ void POCSAGAppView::on_band_changed(const uint32_t new_band_frequency) { void POCSAGAppView::set_target_frequency(const uint32_t new_value) { target_frequency_ = new_value; - radio::set_tuning_frequency(tuning_frequency()); + receiver_model.set_tuning_frequency(new_value); } uint32_t POCSAGAppView::target_frequency() const { return target_frequency_; } -uint32_t POCSAGAppView::tuning_frequency() const { - return target_frequency() - (sampling_rate / 4); -} - } /* namespace ui */ diff --git a/firmware/application/pocsag_app.hpp b/firmware/application/pocsag_app.hpp index 91c10072..b615d663 100644 --- a/firmware/application/pocsag_app.hpp +++ b/firmware/application/pocsag_app.hpp @@ -33,6 +33,7 @@ #include "log_file.hpp" +#include "pocsag.hpp" #include "pocsag_packet.hpp" class POCSAGLogger { @@ -66,16 +67,12 @@ public: private: static constexpr uint32_t initial_target_frequency = 466175000; static constexpr uint32_t sampling_rate = 3072000; - static constexpr uint32_t baseband_bandwidth = 1750000; + //static constexpr uint32_t baseband_bandwidth = 1750000; bool logging { false }; - uint32_t batch_cnt = 0; - uint32_t address { 0 }; - uint32_t function { 0 }; - uint32_t ascii_data { 0 }; - uint32_t ascii_idx { 0 }; - std::string output_text = ""; - + uint32_t last_address = 0xFFFFFFFF; + pocsag::POCSAGState pocsag_state { }; + MessageHandlerRegistration message_handler_packet { Message::ID::POCSAGPacket, [this](Message* const p) { @@ -158,8 +155,6 @@ private: uint32_t target_frequency() const; void set_target_frequency(const uint32_t new_value); - - uint32_t tuning_frequency() const; }; } /* namespace ui */ diff --git a/firmware/baseband/proc_nfm_audio.cpp b/firmware/baseband/proc_nfm_audio.cpp index 66f249ca..1fdea9b6 100644 --- a/firmware/baseband/proc_nfm_audio.cpp +++ b/firmware/baseband/proc_nfm_audio.cpp @@ -22,8 +22,6 @@ #include "proc_nfm_audio.hpp" -#include "audio_output.hpp" - #include "event_m4.hpp" #include diff --git a/firmware/baseband/proc_pocsag.cpp b/firmware/baseband/proc_pocsag.cpp index ad80faf9..4040e3b9 100644 --- a/firmware/baseband/proc_pocsag.cpp +++ b/firmware/baseband/proc_pocsag.cpp @@ -29,13 +29,6 @@ #include #include -#define POCSAG_AUDIO_RATE 24000 - -#define POCSAG_SYNC 0x7CD215D8 -#define POCSAG_IDLE 0x7A89C197 -#define POCSAG_PREAMBLE_LENGTH 576 -#define POCSAG_BATCH_LENGTH (9 * 32) - void POCSAGProcessor::execute(const buffer_c8_t& buffer) { // This is called at 1500Hz @@ -46,12 +39,11 @@ void POCSAGProcessor::execute(const buffer_c8_t& buffer) { const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer); const auto channel_out = channel_filter.execute(decim_1_out, dst_buffer); auto audio = demod.execute(channel_out, audio_buffer); + //audio_output.write(audio); - // End up with 32 samples ? for (uint32_t c = 0; c < 16; c++) { const int32_t sample_int = audio.p[c] * 32768.0f; - //const int32_t audio_sample = audio.p[c] * 32768.0f; const int32_t audio_sample = __SSAT(sample_int, 16); slicer_sr <<= 1; @@ -84,23 +76,22 @@ void POCSAGProcessor::execute(const buffer_c8_t& buffer) { break; case PREAMBLE: - if (sync_timeout < POCSAG_PREAMBLE_LENGTH) { + if (sync_timeout < POCSAG_TIMEOUT) { sync_timeout++; if (rx_data == POCSAG_SYNC) { packet.clear(); - frame_counter = 0; + codeword_count = 0; rx_bit = 0; msg_timeout = 0; - last_rx_data = rx_data; rx_state = SYNC; - } else if (rx_data == POCSAG_IDLE) { - push_packet(pocsag::PacketFlag::IDLE); + } /*else if (rx_data == POCSAG_IDLE) { rx_state = WAITING; - } + }*/ } else { rx_state = WAITING; // Timed out: abort + push_packet(pocsag::PacketFlag::TOO_LONG); // DEBUG } break; @@ -116,29 +107,18 @@ void POCSAGProcessor::execute(const buffer_c8_t& buffer) { //pocsag_brute_repair(&s->l2.pocsag, &rx_data); - packet.set(frame_counter, rx_data); + packet.set(codeword_count, rx_data); - if ((rx_data == POCSAG_IDLE) && (!(last_rx_data & 0x80000000))) { - // SYNC then IDLE always means end of message ? - if (frame_counter) - push_packet(pocsag::PacketFlag::NORMAL); - else - push_packet(pocsag::PacketFlag::IDLE); - rx_state = WAITING; + if (codeword_count < 15) { + codeword_count++; } else { - if (frame_counter < 15) { - frame_counter++; - } else { - // More than 17-1 codewords - push_packet(pocsag::PacketFlag::TOO_LONG); - rx_state = WAITING; - } + push_packet(pocsag::PacketFlag::NORMAL); + rx_state = WAITING; } - - last_rx_data = rx_data; } } else { // Timed out (no end of message received) + packet.set(0, codeword_count); // DEBUG push_packet(pocsag::PacketFlag::TIMED_OUT); rx_state = WAITING; } @@ -180,6 +160,7 @@ void POCSAGProcessor::configure(const POCSAGConfigureMessage& message) { decim_1.configure(taps_11k0_decim_1.taps, 131072); channel_filter.configure(taps_11k0_channel.taps, 2); demod.configure(demod_input_fs, 4500); + //audio_output.configure(false); bitrate = message.bitrate; sphase_delta = 0x10000u * bitrate / POCSAG_AUDIO_RATE; diff --git a/firmware/baseband/proc_pocsag.hpp b/firmware/baseband/proc_pocsag.hpp index 3291820c..79218daf 100644 --- a/firmware/baseband/proc_pocsag.hpp +++ b/firmware/baseband/proc_pocsag.hpp @@ -34,7 +34,9 @@ #include "pocsag_packet.hpp" +#include "pocsag.hpp" #include "message.hpp" +#include "audio_output.hpp" #include "portapack_shared_memory.hpp" #include @@ -77,6 +79,8 @@ private: dsp::decimate::FIRC16xR16x32Decim8 decim_1 { }; dsp::decimate::FIRAndDecimateComplex channel_filter { }; dsp::demodulate::FM demod { }; + + //AudioOutput audio_output { }; uint32_t sync_timeout { 0 }; uint32_t msg_timeout { 0 }; @@ -87,12 +91,11 @@ private: uint32_t sphase_delta_half { 0 }; uint32_t sphase_delta_eighth { 0 }; uint32_t rx_data { 0 }; - uint32_t last_rx_data { 0 }; uint32_t rx_bit { 0 }; bool configured = false; rx_states rx_state { WAITING }; pocsag::BitRate bitrate { pocsag::BitRate::FSK1200 }; - uint32_t frame_counter { 0 }; + uint32_t codeword_count { 0 }; pocsag::POCSAGPacket packet { }; void push_packet(pocsag::PacketFlag flag); diff --git a/firmware/common/pocsag.cpp b/firmware/common/pocsag.cpp new file mode 100644 index 00000000..64ebda19 --- /dev/null +++ b/firmware/common/pocsag.cpp @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 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 "pocsag.hpp" + +#include "baseband_api.hpp" + +#include "portapack.hpp" +#include "portapack_persistent_memory.hpp" +using namespace portapack; + +#include "string_format.hpp" + +#include "utility.hpp" + +namespace pocsag { + +std::string bitrate_str(BitRate bitrate) { + switch (bitrate) { + case BitRate::FSK512: return "512 "; + case BitRate::FSK1200: return "1200"; + case BitRate::FSK2400: return "2400"; + default: return "????"; + } +} + +std::string flag_str(PacketFlag packetflag) { + switch (packetflag) { + case PacketFlag::NORMAL: return "OK"; + case PacketFlag::IDLE: return "IDLE"; + case PacketFlag::TIMED_OUT: return "TIMED OUT"; + case PacketFlag::TOO_LONG: return "TOO LONG"; + default: return ""; + } +} + +bool decode_batch(const POCSAGPacket& batch, POCSAGState * const state) { + uint32_t codeword; + char ascii_char; + std::string output_text = ""; + + state->out_type = EMPTY; + + // For each codeword... + for (size_t i = 0; i < 16; i++) { + codeword = batch[i]; + + if (!(codeword & 0x80000000U)) { + // Address codeword + if (state->mode == STATE_CLEAR) { + if (codeword != POCSAG_IDLE) { + state->function = (codeword >> 11) & 3; + state->address = (codeword >> 10) & 0x1FFFF8U; // 18 MSBs are transmitted + state->mode = STATE_HAVE_ADDRESS; + state->out_type = ADDRESS; + + state->ascii_idx = 0; + state->ascii_data = 0; + } + } else { + state->mode = STATE_CLEAR; // New address = new message + } + } else { + // Message codeword + if (state->mode == STATE_HAVE_ADDRESS) { + // First message codeword: complete address + state->address |= (i >> 1); // Add in the 3 LSBs (frame #) + state->mode = STATE_GETTING_MSG; + } + + state->out_type = MESSAGE; + + state->ascii_data |= ((codeword >> 11) & 0xFFFFF); // Get 20 message bits + state->ascii_idx += 20; + + // Raw 20 bits to 7 bit reversed ASCII + while (state->ascii_idx >= 7) { + state->ascii_idx -= 7; + ascii_char = ((state->ascii_data) >> (state->ascii_idx)) & 0x7F; + + // Bottom's up + ascii_char = (ascii_char & 0xF0) >> 4 | (ascii_char & 0x0F) << 4; // 01234567 -> 45670123 + ascii_char = (ascii_char & 0xCC) >> 2 | (ascii_char & 0x33) << 2; // 45670123 -> 67452301 + ascii_char = (ascii_char & 0xAA) >> 2 | (ascii_char & 0x55); // 67452301 -> *7654321 + + // Translate non-printable chars + if ((ascii_char < 32) || (ascii_char > 126)) + output_text += "[" + to_string_dec_uint(ascii_char) + "]"; + else + output_text += ascii_char; + } + + state->ascii_data <<= 20; // Remaining bits are for next time... + } + } + + state->output = output_text; + + if (state->mode == STATE_HAVE_ADDRESS) + state->mode = STATE_CLEAR; + + return true; +} + +} /* namespace pocsag */ diff --git a/firmware/common/pocsag.hpp b/firmware/common/pocsag.hpp new file mode 100644 index 00000000..7dac95f0 --- /dev/null +++ b/firmware/common/pocsag.hpp @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 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. + */ + +#ifndef __POCSAG_H__ +#define __POCSAG_H__ + +#define POCSAG_TIMEOUT (576 * 2) // Preamble length * 2 +#define POCSAG_SYNC 0x7CD215D8 +#define POCSAG_IDLE 0x7A89C197 +#define POCSAG_AUDIO_RATE 24000 +#define POCSAG_BATCH_LENGTH (17 * 32) + +#include "pocsag_packet.hpp" + +namespace pocsag { + +enum Mode : uint32_t { + STATE_CLEAR, + STATE_HAVE_ADDRESS, + STATE_GETTING_MSG +}; + +enum OutputType : uint32_t { + EMPTY, + ADDRESS, + MESSAGE +}; + +struct POCSAGState { + uint32_t function; + uint32_t address; + Mode mode = STATE_CLEAR; + OutputType out_type = EMPTY; + uint32_t ascii_data; + uint32_t ascii_idx; + std::string output; +}; + +std::string bitrate_str(BitRate bitrate); +std::string flag_str(PacketFlag packetflag); + +bool decode_batch(const POCSAGPacket& batch, POCSAGState * const state); + +} /* namespace pocsag */ + +#endif/*__POCSAG_H__*/ diff --git a/firmware/portapack-h1-havoc.bin b/firmware/portapack-h1-havoc.bin index 2859f1fd46eae378cbaca52260df7035287c9213..8b9c9ac1053b98c950af3358ae8eb468721a666e 100644 GIT binary patch delta 50278 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�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 U0e=63&>l5@M}{kJMRA7z1BCqwZ2$lO