Started work on APRS (AX25)

This commit is contained in:
furrtek 2017-05-25 21:08:33 +01:00
parent a35d9ee8a9
commit 8e99bccd41
21 changed files with 515 additions and 6220 deletions

21
.gitignore vendored
View File

@ -1,23 +1,4 @@
/firmware/baseband/baseband_dtmf_tx.img
/firmware/baseband/baseband.img
/firmware/baseband/baseband_afsk.img
/firmware/baseband/baseband_ais.img
/firmware/baseband/baseband_am_audio.img
/firmware/baseband/baseband_audio_tx.img
/firmware/baseband/baseband_capture.img
/firmware/baseband/baseband_epar.img
/firmware/baseband/baseband_ert.img
/firmware/baseband/baseband_jammer.img
/firmware/baseband/baseband_lcr.img
/firmware/baseband/baseband_nfm_audio.img
/firmware/baseband/baseband_ook.img
/firmware/baseband/baseband_play_audio.img
/firmware/baseband/baseband_pocsag.img
/firmware/baseband/baseband_rds.img
/firmware/baseband/baseband_tpms.img
/firmware/baseband/baseband_wfm_audio.img
/firmware/baseband/baseband_wideband_spectrum.img
/firmware/baseband/baseband_xylos.img
/firmware/baseband/*.img
/firmware/application/application.bin
/CMakeCache.txt
/Makefile

View File

@ -1,182 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.5
# Default target executed when no arguments are given to make.
default_target: all
.PHONY : default_target
# Allow only one "make -f Makefile2" at a time, but pass parallelism.
.NOTPARALLEL:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =
.SUFFIXES: .hpux_make_needs_suffix_list
# Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E remove -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/furrtek/portapack-hackrf
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/furrtek/portapack-hackrf
#=============================================================================
# Targets provided globally by CMake.
# Special rule for the target edit_cache
edit_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..."
/usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
.PHONY : edit_cache
# Special rule for the target edit_cache
edit_cache/fast: edit_cache
.PHONY : edit_cache/fast
# Special rule for the target rebuild_cache
rebuild_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
/usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : rebuild_cache
# Special rule for the target rebuild_cache
rebuild_cache/fast: rebuild_cache
.PHONY : rebuild_cache/fast
# The main all target
all: cmake_check_build_system
cd /home/furrtek/portapack-hackrf && $(CMAKE_COMMAND) -E cmake_progress_start /home/furrtek/portapack-hackrf/CMakeFiles /home/furrtek/portapack-hackrf/firmware/CMakeFiles/progress.marks
cd /home/furrtek/portapack-hackrf && $(MAKE) -f CMakeFiles/Makefile2 firmware/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/furrtek/portapack-hackrf/CMakeFiles 0
.PHONY : all
# The main clean target
clean:
cd /home/furrtek/portapack-hackrf && $(MAKE) -f CMakeFiles/Makefile2 firmware/clean
.PHONY : clean
# The main clean target
clean/fast: clean
.PHONY : clean/fast
# Prepare targets for installation.
preinstall: all
cd /home/furrtek/portapack-hackrf && $(MAKE) -f CMakeFiles/Makefile2 firmware/preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
cd /home/furrtek/portapack-hackrf && $(MAKE) -f CMakeFiles/Makefile2 firmware/preinstall
.PHONY : preinstall/fast
# clear depends
depend:
cd /home/furrtek/portapack-hackrf && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
.PHONY : depend
# Convenience name for target.
firmware/CMakeFiles/firmware.dir/rule:
cd /home/furrtek/portapack-hackrf && $(MAKE) -f CMakeFiles/Makefile2 firmware/CMakeFiles/firmware.dir/rule
.PHONY : firmware/CMakeFiles/firmware.dir/rule
# Convenience name for target.
firmware: firmware/CMakeFiles/firmware.dir/rule
.PHONY : firmware
# fast build rule for target.
firmware/fast:
cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/CMakeFiles/firmware.dir/build.make firmware/CMakeFiles/firmware.dir/build
.PHONY : firmware/fast
# Convenience name for target.
firmware/CMakeFiles/program.dir/rule:
cd /home/furrtek/portapack-hackrf && $(MAKE) -f CMakeFiles/Makefile2 firmware/CMakeFiles/program.dir/rule
.PHONY : firmware/CMakeFiles/program.dir/rule
# Convenience name for target.
program: firmware/CMakeFiles/program.dir/rule
.PHONY : program
# fast build rule for target.
program/fast:
cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/CMakeFiles/program.dir/build.make firmware/CMakeFiles/program.dir/build
.PHONY : program/fast
# Convenience name for target.
firmware/CMakeFiles/release.dir/rule:
cd /home/furrtek/portapack-hackrf && $(MAKE) -f CMakeFiles/Makefile2 firmware/CMakeFiles/release.dir/rule
.PHONY : firmware/CMakeFiles/release.dir/rule
# Convenience name for target.
release: firmware/CMakeFiles/release.dir/rule
.PHONY : release
# fast build rule for target.
release/fast:
cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/CMakeFiles/release.dir/build.make firmware/CMakeFiles/release.dir/build
.PHONY : release/fast
# Help Target
help:
@echo "The following are some of the valid targets for this Makefile:"
@echo "... all (the default if no target is provided)"
@echo "... clean"
@echo "... depend"
@echo "... edit_cache"
@echo "... firmware"
@echo "... program"
@echo "... release"
@echo "... rebuild_cache"
.PHONY : help
#=============================================================================
# Special targets to cleanup operation of make.
# Special rule to run CMake to check the build system integrity.
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
cd /home/furrtek/portapack-hackrf && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system

View File

@ -136,6 +136,8 @@ set(CPPSRC
touch.cpp
touch_adc.cpp
protocols/adsb.cpp
protocols/aprs.cpp
protocols/ax25.cpp
protocols/bht.cpp
protocols/dcs.cpp
protocols/lcr.cpp
@ -155,6 +157,7 @@ set(CPPSRC
${COMMON}/ui_focus.cpp
ui_about.cpp
ui_adsbtx.cpp
ui_aprstx.cpp
ui_modemsetup.cpp
ui_alphanum.cpp
ui_audio.cpp

File diff suppressed because it is too large Load Diff

View File

@ -1063,6 +1063,28 @@ static constexpr Bitmap bitmap_icon_replay {
{ 16, 16 }, bitmap_icon_replay_data
};
static constexpr uint8_t bitmap_icon_aprs_data[] = {
0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
0xF0, 0x0F,
0x4C, 0x32,
0xFE, 0x7F,
0x25, 0xA4,
0x25, 0xA4,
0xFF, 0xFF,
0x25, 0xA4,
0x25, 0xA4,
0xFE, 0x7F,
0x4C, 0x32,
0xF0, 0x0F,
0x00, 0x00,
0x00, 0x00,
};
static constexpr Bitmap bitmap_icon_aprs {
{ 16, 16 }, bitmap_icon_aprs_data
};
static constexpr uint8_t bitmap_icon_soundboard_data[] = {
0x00, 0x00,
0xFF, 0xFF,

View File

@ -23,18 +23,22 @@
// Color bitmaps generated with:
// Gimp image > indexed colors (16), then "xxd -i *.bmp"
//TODO: Scanner multiple slices (buggy)
//TODO: Use to_string_short_freq
//TODO: Add auto-rounding to 12.5kHz channel option in scanner
//TODO: Waveform widget as FFT view in scanner ?
//BUG: Replay freezes when SD card not present
//BUG: SCANNER Mirroring in proc_wideband...
//BUG: SCANNER Lock on frequency, if frequency jump, still locked on first one
//BUG: SCANNER Multiple slices
//BUG: REPLAY freezes when SD card not present
//BUG: RDS doesn't stop baseband when stopping tx ?
//TODO: Merge AFSK and TONES procs ?
//TODO: NFM Squelch level setting
//TODO: NFM RX nav.pop on squelch
//TODO: MORSE use prosigns
//TODO: MORSE live keying mode
//TODO: Use to_string_short_freq wherever possible
//TODO: SCANNER Waveform widget as FFT view ?
//TEST: Check AFSK transmit end, skips last bits ?
//TEST: Imperial in whipcalc
//TODO: Optimize (and group ?) CTCSS tone gen code
//TODO: Morse use prosigns
//TODO: Morse live keying mode ?
/*
Continuous (Fox-oring)
12s transmit, 48s space (Sprint 1/5th)

View File

@ -0,0 +1,44 @@
/*
* Copyright (C) 2014 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 "aprs.hpp"
#include "ax25.hpp"
#include "portapack_persistent_memory.hpp"
using namespace ax25;
namespace aprs {
void make_aprs_frame(char * address_dest, char * address_src) {
AX25Frame frame;
char address[14] = { 0 };
uint8_t info[7] = { 0 }; //{ 'F','U','R','R','T','E','K' };
memcpy(&address[0], address_dest, 6);
memcpy(&address[7], address_src, 6);
frame.make_ui_frame(address, 0x03, 0xF0, info, sizeof(info));
}
} /* namespace aprs */

View File

@ -0,0 +1,35 @@
/*
* Copyright (C) 2014 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 <cstring>
#include <string>
#ifndef __APRS_H__
#define __APRS_H__
namespace aprs {
void make_aprs_frame();
} /* namespace aprs */
#endif/*__APRS_H__*/

View File

@ -0,0 +1,120 @@
/*
* Copyright (C) 2014 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 "ax25.hpp"
#include "portapack_shared_memory.hpp"
namespace ax25 {
void AX25Frame::make_extended_field(char * const data, size_t length) {
size_t i = 0;
for (i = 0; i < length - 1; i++)
add_data(data[i] << 1);
add_data((data[i] << 1) | 1);
}
void AX25Frame::add_byte(uint8_t byte, bool is_flag, bool is_data) {
size_t i;
for (i = 0; i < 8; ) {
if (!(byte & 1)) {
current_bit ^= 1; // Zero: flip
ones_counter = 0;
byte >>= 1;
i++;
} else {
ones_counter++;
if ((ones_counter == 5) && (!is_flag)) {
current_bit ^= 1; // Stuff zero: flip
ones_counter = 0;
} else {
byte >>= 1;
i++;
}
}
if (is_data)
crc_ccitt.process_bit(current_bit);
current_byte <<= 1;
current_byte |= current_bit;
if (bit_counter == 7) {
bit_counter = 0;
*bb_data_ptr = current_byte;
bb_data_ptr++;
} else {
bit_counter++;
}
}
}
void AX25Frame::flush() {
if (bit_counter)
*bb_data_ptr = current_byte << (7 - bit_counter);
};
void AX25Frame::add_flag() {
add_byte(AX25_FLAG, true, false);
};
void AX25Frame::add_data(uint8_t byte) {
add_byte(byte, false, true);
};
void AX25Frame::add_checksum() {
auto checksum = crc_ccitt.checksum();
add_byte(checksum >> 8, false, false);
add_byte(checksum, false, false);
}
void AX25Frame::make_ui_frame(char * const address, const uint8_t control,
const uint8_t protocol, uint8_t * const info, size_t length) {
size_t i;
bb_data_ptr = shared_memory.bb_data.data;
bit_counter = 0;
current_bit = 0;
current_byte = 0;
ones_counter = 0;
crc_ccitt.reset();
add_flag();
make_extended_field(address, 14);
add_data(control);
add_data(protocol);
for (i = 0; i < length; i++)
add_data(info[i]);
add_checksum();
add_flag();
flush();
}
} /* namespace ax25 */

View File

@ -0,0 +1,68 @@
/*
* Copyright (C) 2014 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 "crc.hpp"
#include <cstring>
#include <string>
#ifndef __AX25_H__
#define __AX25_H__
#define AX25_FLAG 0x7E
namespace ax25 {
enum protocol_id_t {
X25_PLP = 0x01,
COMP_TCPIP = 0x06,
UNCOMP_TCPIP = 0x07,
SEG_FRAG = 0x08,
FLEXNET = 0xCE,
NO_LAYER3 = 0xF0
};
class AX25Frame {
public:
void make_ui_frame(char * const address, const uint8_t control, const uint8_t protocol,
uint8_t * const info, size_t length);
private:
void make_extended_field(char * const data, size_t length);
void add_byte(uint8_t byte, bool is_flag, bool is_data);
void add_data(uint8_t byte);
void add_checksum();
void add_flag();
void flush();
uint8_t * bb_data_ptr { nullptr };
uint8_t current_bit { 0 };
uint8_t current_byte { 0 };
size_t bit_counter { 0 };
uint8_t ones_counter { 0 };
CRC<16> crc_ccitt { 0x1021, 0xFFFF };
};
} /* namespace ax25 */
#endif/*__AX25_H__*/

View File

@ -79,7 +79,7 @@ bool ADSBTxView::start_tx() {
memcpy(shared_memory.bb_data.data, adsb_bin, 112);
baseband::set_adsb();
transmitter_model.set_tuning_frequency(434000000); // FOR TESTING - DEBUG
transmitter_model.set_tuning_frequency(1090000000); // FOR TESTING - DEBUG
transmitter_model.set_sampling_rate(4000000U);
transmitter_model.set_rf_amp(true);
transmitter_model.set_vga(40);

View File

@ -0,0 +1,101 @@
/*
* 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 "ui_aprstx.hpp"
#include "ui_alphanum.hpp"
#include "aprs.hpp"
#include "string_format.hpp"
#include "portapack.hpp"
#include "baseband_api.hpp"
#include "portapack_persistent_memory.hpp"
#include <cstring>
#include <stdio.h>
using namespace aprs;
using namespace portapack;
namespace ui {
void APRSTXView::focus() {
tx_view.focus();
}
APRSTXView::~APRSTXView() {
transmitter_model.disable();
baseband::shutdown();
}
void APRSTXView::paint(Painter& painter) {
(void)painter;
}
void APRSTXView::generate_frame() {
}
void APRSTXView::start_tx() {
//generate_frame();
/*transmitter_model.set_tuning_frequency(144800000);
transmitter_model.set_rf_amp(true);
transmitter_model.set_baseband_bandwidth(2500000);
transmitter_model.enable();*/
}
void APRSTXView::on_txdone(const bool v) {
if (v) {
transmitter_model.disable();
tx_view.set_transmitting(false);
//progress.set_value(0);
} else {
//progress.set_value(n);
}
}
APRSTXView::APRSTXView(NavigationView& nav) {
baseband::run_image(portapack::spi_flash::image_tag_afsk);
add_children({
&labels,
&text_frame_a,
&tx_view
});
tx_view.on_edit_frequency = [this, &nav]() {
return;
};
tx_view.on_start = [this]() {
start_tx();
tx_view.set_transmitting(true);
};
tx_view.on_stop = [this]() {
tx_view.set_transmitting(false);
transmitter_model.disable();
};
}
} /* namespace ui */

View File

@ -0,0 +1,86 @@
/*
* 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 "ui.hpp"
#include "ui_textentry.hpp"
#include "ui_widget.hpp"
#include "ui_navigation.hpp"
#include "ui_font_fixed_8x16.hpp"
#include "ui_transmitter.hpp"
#include "message.hpp"
#include "transmitter_model.hpp"
#include "portapack.hpp"
namespace ui {
class APRSTXView : public View {
public:
APRSTXView(NavigationView& nav);
~APRSTXView();
void paint(Painter& painter) override;
void focus() override;
std::string title() const override { return "APRS TX (beta)"; };
private:
/*enum tx_modes {
IDLE = 0,
SINGLE,
SEQUENCE
};
tx_modes tx_mode = IDLE;*/
void start_tx();
void generate_frame();
void generate_frame_pos();
void on_txdone(const bool v);
Labels labels {
{ { 2 * 8, 2 * 8 }, "Work in progress...", Color::light_grey() }
};
Text text_frame_a {
{ 2 * 8, 13 * 16, 14 * 8, 16 },
"-"
};
TransmitterView tx_view {
16 * 16,
144800000,
2000000,
true
};
MessageHandlerRegistration message_handler_tx_done {
Message::ID::TXDone,
[this](const Message* const p) {
const auto message = *reinterpret_cast<const TXDoneMessage*>(p);
this->on_txdone(message.done);
}
};
};
} /* namespace ui */

View File

@ -31,6 +31,7 @@
#include "ui_about.hpp"
#include "ui_adsbtx.hpp"
#include "ui_aprstx.hpp"
#include "ui_bht_tx.hpp"
#include "ui_coasterp.hpp"
#include "ui_cw.hpp"
@ -357,7 +358,7 @@ void SystemMenuView::hackrf_mode(NavigationView& nav) {
}
SystemMenuView::SystemMenuView(NavigationView& nav) {
add_items<13>({ {
add_items<14>({ {
{ "Play dead", ui::Color::red(), &bitmap_icon_playdead, [&nav](){ nav.push<PlayDeadView>(); } },
{ "Receivers", ui::Color::cyan(), &bitmap_icon_receivers, [&nav](){ nav.push<ReceiverMenuView>(); } },
{ "Capture", ui::Color::blue(), &bitmap_icon_capture, [&nav](){ nav.push<CaptureAppView>(); } },
@ -365,7 +366,8 @@ SystemMenuView::SystemMenuView(NavigationView& nav) {
{ "Audio transmitters", ui::Color::green(), &bitmap_icon_audiotx, [&nav](){ nav.push<TransmitterAudioMenuView>(); } },
{ "Code transmitters", ui::Color::green(), &bitmap_icon_codetx, [&nav](){ nav.push<TransmitterCodedMenuView>(); } },
{ "SSTV transmitter", ui::Color::dark_green(), &bitmap_icon_sstv, [&nav](){ nav.push<SSTVTXView>(); } },
{ "Scanner/search", ui::Color::cyan(), &bitmap_icon_closecall, [&nav](){ nav.push<ScannerView>(); } },
{ "APRS transmitter", ui::Color::grey(), &bitmap_icon_aprs, [&nav](){ nav.push<APRSTXView>(); } },
{ "Scanner/search", ui::Color::blue(), &bitmap_icon_closecall, [&nav](){ nav.push<ScannerView>(); } },
{ "Jammer", ui::Color::orange(),&bitmap_icon_jammer, [&nav](){ nav.push<JammerView>(); } },
{ "Utilities", ui::Color::purple(),&bitmap_icon_utilities, [&nav](){ nav.push<UtilitiesView>(); } },
{ "Setup", ui::Color::white(), &bitmap_icon_setup, [&nav](){ nav.push<SetupMenuView>(); } },

View File

@ -20,9 +20,6 @@
* Boston, MA 02110-1301, USA.
*/
// BUG: Mirroring in proc_wideband...
// BUG: Lock on frequency, if frequency jump, still locked on first one
#include "ui_scanner.hpp"
#include "baseband_api.hpp"

Binary file not shown.

View File

@ -37,10 +37,10 @@ void ADSBTXProcessor::execute(const buffer_c8_t& buffer) {
for (size_t i = 0; i < buffer.count; i++) {
if (active) {
if (!sample) {
sample = 3;
if (active) {
if (preamble) {
if (bit_pos >= 16) {
preamble = false;
@ -60,6 +60,11 @@ void ADSBTXProcessor::execute(const buffer_c8_t& buffer) {
bit_pos++;
}
}
} else
sample--;
if (sample == 1)
cur_bit ^= 1; // Invert
} else {
//cur_bit = 0;
if (bit_pos == 8192) { // ?
@ -69,11 +74,6 @@ void ADSBTXProcessor::execute(const buffer_c8_t& buffer) {
}
bit_pos++;
}
} else
sample--;
if (sample == 1)
cur_bit ^= 1; // Invert
delta = tone_sample * fm_delta;
tone_sample += 128;

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.