mirror of
https://github.com/eried/portapack-mayhem.git
synced 2024-10-01 01:26:06 -04:00
Improved close call precision
This commit is contained in:
parent
7d193c3445
commit
9149508c83
@ -65,7 +65,7 @@ modules: $(TARGET_BASEBAND).bin $(TARGET_BASEBAND_TX).bin
|
|||||||
cp $(PATH_BASEBAND_TX).bin ../sdcard/$(PATH_BASEBAND_TX).bin
|
cp $(PATH_BASEBAND_TX).bin ../sdcard/$(PATH_BASEBAND_TX).bin
|
||||||
|
|
||||||
$(TARGET).bin: modules $(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND_TX)_inc.bin $(TARGET_APPLICATION).bin
|
$(TARGET).bin: modules $(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND_TX)_inc.bin $(TARGET_APPLICATION).bin
|
||||||
$(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND)_inc.bin $(TARGET_APPLICATION).bin $(TARGET).bin
|
$(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND_TX)_inc.bin $(TARGET_APPLICATION).bin $(TARGET).bin
|
||||||
|
|
||||||
$(TARGET_BOOTSTRAP).bin: $(TARGET_BOOTSTRAP).elf
|
$(TARGET_BOOTSTRAP).bin: $(TARGET_BOOTSTRAP).elf
|
||||||
$(CP) -O binary $(TARGET_BOOTSTRAP).elf $(TARGET_BOOTSTRAP).bin
|
$(CP) -O binary $(TARGET_BOOTSTRAP).elf $(TARGET_BOOTSTRAP).bin
|
||||||
|
@ -86,6 +86,15 @@ void shutdown() {
|
|||||||
shared_memory.baseband_queue.push(shutdown_message);
|
shared_memory.baseband_queue.push(shutdown_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void spectrum_streaming_start(size_t decimation_factor) {
|
||||||
|
shared_memory.baseband_queue.push_and_wait(
|
||||||
|
SpectrumStreamingConfigMessage {
|
||||||
|
SpectrumStreamingConfigMessage::Mode::Running,
|
||||||
|
decimation_factor
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
void spectrum_streaming_start() {
|
void spectrum_streaming_start() {
|
||||||
shared_memory.baseband_queue.push_and_wait(
|
shared_memory.baseband_queue.push_and_wait(
|
||||||
SpectrumStreamingConfigMessage {
|
SpectrumStreamingConfigMessage {
|
||||||
|
@ -55,6 +55,7 @@ void stop();
|
|||||||
|
|
||||||
void shutdown();
|
void shutdown();
|
||||||
|
|
||||||
|
void spectrum_streaming_start(size_t decimation_factor);
|
||||||
void spectrum_streaming_start();
|
void spectrum_streaming_start();
|
||||||
void spectrum_streaming_stop();
|
void spectrum_streaming_stop();
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ private:
|
|||||||
uint32_t baseband_bandwidth_ { max2837::filter::bandwidth_minimum };
|
uint32_t baseband_bandwidth_ { max2837::filter::bandwidth_minimum };
|
||||||
int32_t vga_gain_db_ { 8 };
|
int32_t vga_gain_db_ { 8 };
|
||||||
BasebandConfiguration baseband_configuration {
|
BasebandConfiguration baseband_configuration {
|
||||||
.mode = 0, /* TODO: Enum! */
|
.mode = 0,
|
||||||
.sampling_rate = 3072000,
|
.sampling_rate = 3072000,
|
||||||
.decimation_factor = 1,
|
.decimation_factor = 1,
|
||||||
};
|
};
|
||||||
|
@ -24,10 +24,9 @@
|
|||||||
#include "ui_receiver.hpp"
|
#include "ui_receiver.hpp"
|
||||||
|
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include "evtimer.h"
|
#include "time.hpp"
|
||||||
|
|
||||||
#include "event_m0.hpp"
|
#include "event_m0.hpp"
|
||||||
#include "ff.h"
|
|
||||||
#include "hackrf_gpio.hpp"
|
#include "hackrf_gpio.hpp"
|
||||||
#include "portapack.hpp"
|
#include "portapack.hpp"
|
||||||
#include "radio.hpp"
|
#include "radio.hpp"
|
||||||
@ -50,6 +49,7 @@ void CloseCallView::focus() {
|
|||||||
|
|
||||||
CloseCallView::~CloseCallView() {
|
CloseCallView::~CloseCallView() {
|
||||||
receiver_model.disable();
|
receiver_model.disable();
|
||||||
|
time::signal_tick_second -= signal_token_tick_second;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloseCallView::do_detection() {
|
void CloseCallView::do_detection() {
|
||||||
@ -224,7 +224,7 @@ void CloseCallView::on_show() {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
baseband::spectrum_streaming_start();
|
baseband::spectrum_streaming_start(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloseCallView::on_hide() {
|
void CloseCallView::on_hide() {
|
||||||
@ -286,7 +286,7 @@ void CloseCallView::on_vga_changed(int32_t v_db) {
|
|||||||
receiver_model.set_vga(v_db);
|
receiver_model.set_vga(v_db);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloseCallView::update_rate() {
|
void CloseCallView::on_tick_second() {
|
||||||
text_rate.set(to_string_dec_uint(scan_counter, 3));
|
text_rate.set(to_string_dec_uint(scan_counter, 3));
|
||||||
scan_counter = 0;
|
scan_counter = 0;
|
||||||
}
|
}
|
||||||
@ -343,8 +343,8 @@ CloseCallView::CloseCallView(
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
field_frequency_max.set_value(receiver_model.tuning_frequency() + 5000000);
|
field_frequency_max.set_value(receiver_model.tuning_frequency() + 2000000);
|
||||||
field_frequency_max.set_step(200000);
|
field_frequency_max.set_step(100000);
|
||||||
field_frequency_max.on_change = [this](rf::Frequency f) {
|
field_frequency_max.on_change = [this](rf::Frequency f) {
|
||||||
(void) f;
|
(void) f;
|
||||||
this->on_range_changed();
|
this->on_range_changed();
|
||||||
@ -373,6 +373,10 @@ CloseCallView::CloseCallView(
|
|||||||
nav.pop();
|
nav.pop();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
signal_token_tick_second = time::signal_tick_second += [this]() {
|
||||||
|
this->on_tick_second();
|
||||||
|
};
|
||||||
|
|
||||||
//audio::output::mute();
|
//audio::output::mute();
|
||||||
receiver_model.set_baseband_configuration({
|
receiver_model.set_baseband_configuration({
|
||||||
.mode = toUType(ReceiverModel::Mode::CloseCall),
|
.mode = toUType(ReceiverModel::Mode::CloseCall),
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
namespace ui {
|
namespace ui {
|
||||||
|
|
||||||
#define CC_SLICE_WIDTH 5000000 //10000000
|
#define CC_SLICE_WIDTH 3000000 //10000000
|
||||||
#define CC_BIN_NB 236
|
#define CC_BIN_NB 236
|
||||||
#define CC_BIN_WIDTH CC_SLICE_WIDTH/CC_BIN_NB
|
#define CC_BIN_WIDTH CC_SLICE_WIDTH/CC_BIN_NB
|
||||||
|
|
||||||
@ -74,6 +74,7 @@ private:
|
|||||||
uint8_t slicemax_db[32]; // Todo: Cap max slices !
|
uint8_t slicemax_db[32]; // Todo: Cap max slices !
|
||||||
uint8_t slicemax_idx[32];
|
uint8_t slicemax_idx[32];
|
||||||
uint8_t scan_counter;
|
uint8_t scan_counter;
|
||||||
|
SignalToken signal_token_tick_second;
|
||||||
bool ignore = true;
|
bool ignore = true;
|
||||||
bool slicing;
|
bool slicing;
|
||||||
bool locked = false;
|
bool locked = false;
|
||||||
@ -82,7 +83,7 @@ private:
|
|||||||
void do_detection();
|
void do_detection();
|
||||||
void on_lna_changed(int32_t v_db);
|
void on_lna_changed(int32_t v_db);
|
||||||
void on_vga_changed(int32_t v_db);
|
void on_vga_changed(int32_t v_db);
|
||||||
void update_rate();
|
void on_tick_second();
|
||||||
|
|
||||||
/* |012345678901234567890123456789|
|
/* |012345678901234567890123456789|
|
||||||
* | Min: Max: LNA VGA |
|
* | Min: Max: LNA VGA |
|
||||||
|
@ -270,7 +270,7 @@ XylosView::XylosView(
|
|||||||
receiver_code.set_value(1);
|
receiver_code.set_value(1);
|
||||||
header_code_a.set_value(0);
|
header_code_a.set_value(0);
|
||||||
header_code_b.set_value(0);
|
header_code_b.set_value(0);
|
||||||
options_freq.set_selected_index(5);
|
options_freq.set_selected_index(6); // 5 ! DEBUG
|
||||||
|
|
||||||
checkbox_wcsubfamily.set_value(true);
|
checkbox_wcsubfamily.set_value(true);
|
||||||
checkbox_wcid.set_value(true);
|
checkbox_wcid.set_value(true);
|
||||||
@ -331,13 +331,15 @@ XylosView::XylosView(
|
|||||||
|
|
||||||
button_transmit.set_style(&style_val);
|
button_transmit.set_style(&style_val);
|
||||||
|
|
||||||
button_txtest.on_select = [this,&transmitter_model](Button&) {
|
XylosView::upd_message();
|
||||||
|
|
||||||
|
button_txtest.on_select = [this](Button&) {
|
||||||
const uint8_t ccirtest[21] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,0xFF };
|
const uint8_t ccirtest[21] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,0xFF };
|
||||||
if (txing == false) {
|
if (txing == false) {
|
||||||
EventDispatcher::message_map().unregister_handler(Message::ID::TXDone);
|
EventDispatcher::message_map().unregister_handler(Message::ID::TXDone);
|
||||||
|
|
||||||
EventDispatcher::message_map().register_handler(Message::ID::TXDone,
|
EventDispatcher::message_map().register_handler(Message::ID::TXDone,
|
||||||
[this,&transmitter_model](Message* const p) {
|
[this](Message* const p) {
|
||||||
const auto message = static_cast<const TXDoneMessage*>(p);
|
const auto message = static_cast<const TXDoneMessage*>(p);
|
||||||
if (message->n == 25) {
|
if (message->n == 25) {
|
||||||
audio::headphone::set_volume(volume_t::decibel(0 - 99) + audio::headphone::volume_range().max);
|
audio::headphone::set_volume(volume_t::decibel(0 - 99) + audio::headphone::volume_range().max);
|
||||||
@ -364,14 +366,14 @@ XylosView::XylosView(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
button_transmit.on_select = [this,&transmitter_model](Button&) {
|
button_transmit.on_select = [this](Button&) {
|
||||||
if (txing == false) {
|
if (txing == false) {
|
||||||
upd_message();
|
upd_message();
|
||||||
|
|
||||||
EventDispatcher::message_map().unregister_handler(Message::ID::TXDone);
|
EventDispatcher::message_map().unregister_handler(Message::ID::TXDone);
|
||||||
|
|
||||||
EventDispatcher::message_map().register_handler(Message::ID::TXDone,
|
EventDispatcher::message_map().register_handler(Message::ID::TXDone,
|
||||||
[this,&transmitter_model](Message* const p) {
|
[this](Message* const p) {
|
||||||
uint8_t c;
|
uint8_t c;
|
||||||
char progress[21];
|
char progress[21];
|
||||||
const auto message = static_cast<const TXDoneMessage*>(p);
|
const auto message = static_cast<const TXDoneMessage*>(p);
|
||||||
@ -390,7 +392,7 @@ XylosView::XylosView(
|
|||||||
journuit();
|
journuit();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (c=0;c<message->n;c++)
|
for (c=0;c<message->n;c++) // Todo: Use progressbar !
|
||||||
progress[c] = ' ';
|
progress[c] = ' ';
|
||||||
progress[c] = '.';
|
progress[c] = '.';
|
||||||
progress[++c] = 0;
|
progress[++c] = 0;
|
||||||
|
Binary file not shown.
@ -85,7 +85,7 @@ void BasebandThread::run() {
|
|||||||
const auto baseband_buffer = std::make_unique<std::array<baseband::sample_t, 8192>>();
|
const auto baseband_buffer = std::make_unique<std::array<baseband::sample_t, 8192>>();
|
||||||
baseband::dma::configure(
|
baseband::dma::configure(
|
||||||
baseband_buffer->data(),
|
baseband_buffer->data(),
|
||||||
direction()
|
baseband::Direction::Transmit
|
||||||
);
|
);
|
||||||
//baseband::dma::allocate(4, 2048);
|
//baseband::dma::allocate(4, 2048);
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ void BasebandThread::run() {
|
|||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
// TODO: Place correct sampling rate into buffer returned here:
|
// TODO: Place correct sampling rate into buffer returned here:
|
||||||
const auto buffer_tmp = baseband::dma::wait_for_rx_buffer();
|
const auto buffer_tmp = baseband::dma::wait_for_tx_buffer();
|
||||||
if( buffer_tmp ) {
|
if( buffer_tmp ) {
|
||||||
buffer_c8_t buffer {
|
buffer_c8_t buffer {
|
||||||
buffer_tmp.p, buffer_tmp.count, baseband_configuration.sampling_rate
|
buffer_tmp.p, buffer_tmp.count, baseband_configuration.sampling_rate
|
||||||
@ -139,8 +139,8 @@ void BasebandThread::disable() {
|
|||||||
|
|
||||||
void BasebandThread::enable() {
|
void BasebandThread::enable() {
|
||||||
if( baseband_processor ) {
|
if( baseband_processor ) {
|
||||||
baseband_sgpio.configure(direction());
|
baseband_sgpio.configure(baseband::Direction::Transmit);
|
||||||
baseband::dma::enable(direction());
|
baseband::dma::enable(baseband::Direction::Transmit);
|
||||||
baseband_sgpio.streaming_enable();
|
baseband_sgpio.streaming_enable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,12 +34,6 @@ public:
|
|||||||
|
|
||||||
void on_message(const Message* const message);
|
void on_message(const Message* const message);
|
||||||
|
|
||||||
// This getter should die, it's just here to leak information to code that
|
|
||||||
// isn't in the right place to begin with.
|
|
||||||
baseband::Direction direction() const {
|
|
||||||
return baseband::Direction::Transmit;
|
|
||||||
}
|
|
||||||
|
|
||||||
void wait_for_switch(void);
|
void wait_for_switch(void);
|
||||||
|
|
||||||
Thread* thread_main { nullptr };
|
Thread* thread_main { nullptr };
|
||||||
|
@ -30,16 +30,11 @@
|
|||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
// 1990 1131 1201 1275 1357 ...
|
|
||||||
|
|
||||||
// 14 13 12 11:
|
|
||||||
// 2108 989 2259 931
|
|
||||||
|
|
||||||
void XylosProcessor::execute(const buffer_c8_t& buffer) {
|
void XylosProcessor::execute(const buffer_c8_t& buffer) {
|
||||||
|
|
||||||
// This is called at 1536000/2048 = 750Hz
|
// This is called at 1536000/2048 = 750Hz
|
||||||
|
|
||||||
ai = 0;
|
// ai = 0;
|
||||||
|
|
||||||
for (size_t i = 0; i<buffer.count; i++) {
|
for (size_t i = 0; i<buffer.count; i++) {
|
||||||
|
|
||||||
@ -65,7 +60,7 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) {
|
|||||||
sample_count++;
|
sample_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
aphase += ccir_phases[digit];
|
aphase += ccir_phases[digit]; // DEBUG
|
||||||
} else {
|
} else {
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
@ -73,15 +68,15 @@ void XylosProcessor::execute(const buffer_c8_t& buffer) {
|
|||||||
sample = (sine_table_f32[(aphase & 0x03FF0000)>>18]*255);
|
sample = (sine_table_f32[(aphase & 0x03FF0000)>>18]*255);
|
||||||
|
|
||||||
// Audio preview sample generation: 1536000/48000 = 32
|
// Audio preview sample generation: 1536000/48000 = 32
|
||||||
if (as >= 31) {
|
/*if (as >= 31) {
|
||||||
as = 0;
|
as = 0;
|
||||||
audio[ai++] = sample * 128;
|
audio[ai++] = sample * 128;
|
||||||
} else {
|
} else {
|
||||||
as++;
|
as++;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
//FM
|
//FM
|
||||||
frq = sample * 300; // ~10kHz wide
|
frq = sample * 1000; // ~10kHz wide
|
||||||
|
|
||||||
phase = (phase + frq);
|
phase = (phase + frq);
|
||||||
sphase = phase + (256<<16);
|
sphase = phase + (256<<16);
|
||||||
|
@ -39,10 +39,10 @@ public:
|
|||||||
void execute(const buffer_c8_t& buffer) override;
|
void execute(const buffer_c8_t& buffer) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int16_t audio_data[64];
|
/*int16_t audio_data[64];
|
||||||
|
|
||||||
std::array<int16_t, 64> audio;
|
std::array<int16_t, 64> audio;
|
||||||
/*const buffer_s16_t audio_buffer {
|
const buffer_s16_t audio_buffer {
|
||||||
audio.data(),
|
audio.data(),
|
||||||
audio.size()
|
audio.size()
|
||||||
};*/
|
};*/
|
||||||
@ -75,7 +75,7 @@ private:
|
|||||||
int32_t sample, frq;
|
int32_t sample, frq;
|
||||||
TXDoneMessage message;
|
TXDoneMessage message;
|
||||||
|
|
||||||
AudioOutput audio_output;
|
//AudioOutput audio_output;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Binary file not shown.
@ -144,6 +144,7 @@ CPPSRC = main.cpp \
|
|||||||
proc_wfm_audio.cpp \
|
proc_wfm_audio.cpp \
|
||||||
proc_ais.cpp \
|
proc_ais.cpp \
|
||||||
proc_wideband_spectrum.cpp \
|
proc_wideband_spectrum.cpp \
|
||||||
|
proc_closecall.cpp \
|
||||||
proc_tpms.cpp \
|
proc_tpms.cpp \
|
||||||
proc_ert.cpp \
|
proc_ert.cpp \
|
||||||
proc_capture.cpp \
|
proc_capture.cpp \
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include "proc_wfm_audio.hpp"
|
#include "proc_wfm_audio.hpp"
|
||||||
#include "proc_ais.hpp"
|
#include "proc_ais.hpp"
|
||||||
#include "proc_wideband_spectrum.hpp"
|
#include "proc_wideband_spectrum.hpp"
|
||||||
|
#include "proc_closecall.hpp"
|
||||||
#include "proc_tpms.hpp"
|
#include "proc_tpms.hpp"
|
||||||
#include "proc_ert.hpp"
|
#include "proc_ert.hpp"
|
||||||
#include "proc_capture.hpp"
|
#include "proc_capture.hpp"
|
||||||
@ -132,7 +133,7 @@ BasebandProcessor* BasebandThread::create_processor(const int32_t mode) {
|
|||||||
case 5: return new TPMSProcessor();
|
case 5: return new TPMSProcessor();
|
||||||
case 6: return new ERTProcessor();
|
case 6: return new ERTProcessor();
|
||||||
case 7: return new CaptureProcessor();
|
case 7: return new CaptureProcessor();
|
||||||
case 10: return new WidebandSpectrum(); // Close call
|
case 10: return new CloseCallProcessor();
|
||||||
default: return nullptr;
|
default: return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
72
firmware/baseband/proc_closecall.cpp
Normal file
72
firmware/baseband/proc_closecall.cpp
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc.
|
||||||
|
*
|
||||||
|
* 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 "proc_closecall.hpp"
|
||||||
|
|
||||||
|
#include "event_m4.hpp"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
void CloseCallProcessor::execute(const buffer_c8_t& buffer) {
|
||||||
|
// 2048 complex8_t samples per buffer.
|
||||||
|
// 102.4us per buffer. 20480 instruction cycles per buffer.
|
||||||
|
|
||||||
|
if( phase == 0 ) {
|
||||||
|
std::fill(spectrum.begin(), spectrum.end(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(size_t i=0; i<spectrum.size(); i++) {
|
||||||
|
// TODO: Removed window-presum windowing, due to lack of available code RAM.
|
||||||
|
// TODO: Apply window to improve spectrum bin sidelobes.
|
||||||
|
spectrum[i] += buffer.p[i + 0];
|
||||||
|
spectrum[i] += buffer.p[i + 1024];
|
||||||
|
}
|
||||||
|
|
||||||
|
if( phase == 127 ) {
|
||||||
|
const buffer_c16_t buffer_c16 {
|
||||||
|
spectrum.data(),
|
||||||
|
spectrum.size(),
|
||||||
|
buffer.sampling_rate
|
||||||
|
};
|
||||||
|
channel_spectrum.feed(
|
||||||
|
buffer_c16,
|
||||||
|
0, 0
|
||||||
|
);
|
||||||
|
phase = 0;
|
||||||
|
} else {
|
||||||
|
phase++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CloseCallProcessor::on_message(const Message* const message) {
|
||||||
|
switch(message->id) {
|
||||||
|
case Message::ID::UpdateSpectrum:
|
||||||
|
case Message::ID::SpectrumStreamingConfig:
|
||||||
|
channel_spectrum.on_message(message);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
48
firmware/baseband/proc_closecall.hpp
Normal file
48
firmware/baseband/proc_closecall.hpp
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc.
|
||||||
|
*
|
||||||
|
* 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 __PROC_CLOSECALLPROCESSOR_H__
|
||||||
|
#define __PROC_CLOSECALLPROCESSOR_H__
|
||||||
|
|
||||||
|
#include "baseband_processor.hpp"
|
||||||
|
#include "spectrum_collector.hpp"
|
||||||
|
|
||||||
|
#include "message.hpp"
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <array>
|
||||||
|
#include <complex>
|
||||||
|
|
||||||
|
class CloseCallProcessor : public BasebandProcessor {
|
||||||
|
public:
|
||||||
|
void execute(const buffer_c8_t& buffer) override;
|
||||||
|
|
||||||
|
void on_message(const Message* const message) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
SpectrumCollector channel_spectrum;
|
||||||
|
|
||||||
|
std::array<complex16_t, 256> spectrum;
|
||||||
|
|
||||||
|
size_t phase = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif/*__PROC_CLOSECALLPROCESSOR_H__*/
|
@ -47,6 +47,7 @@ void SpectrumCollector::on_message(const Message* const message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SpectrumCollector::set_state(const SpectrumStreamingConfigMessage& message) {
|
void SpectrumCollector::set_state(const SpectrumStreamingConfigMessage& message) {
|
||||||
|
set_decimation_factor(message.decimation_factor);
|
||||||
if( message.mode == SpectrumStreamingConfigMessage::Mode::Running ) {
|
if( message.mode == SpectrumStreamingConfigMessage::Mode::Running ) {
|
||||||
start();
|
start();
|
||||||
} else {
|
} else {
|
||||||
|
@ -241,11 +241,22 @@ public:
|
|||||||
constexpr SpectrumStreamingConfigMessage(
|
constexpr SpectrumStreamingConfigMessage(
|
||||||
Mode mode
|
Mode mode
|
||||||
) : Message { ID::SpectrumStreamingConfig },
|
) : Message { ID::SpectrumStreamingConfig },
|
||||||
mode { mode }
|
mode { mode },
|
||||||
|
decimation_factor { 1 }
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr SpectrumStreamingConfigMessage(
|
||||||
|
Mode mode,
|
||||||
|
size_t decimation_factor
|
||||||
|
) : Message { ID::SpectrumStreamingConfig },
|
||||||
|
mode { mode },
|
||||||
|
decimation_factor { decimation_factor }
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Mode mode { Mode::Stopped };
|
Mode mode { Mode::Stopped };
|
||||||
|
size_t decimation_factor = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ChannelSpectrum {
|
struct ChannelSpectrum {
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
const char md5_baseband[16] = {0x1a,0x50,0xbc,0xc5,0xf4,0x5a,0x50,0x1b,0x3f,0x88,0x4c,0xb5,0xb3,0x95,0xa9,0x4d,};
|
const char md5_baseband[16] = {0x07,0xff,0xf6,0x7f,0x06,0x02,0xd1,0xd7,0x67,0x8f,0x67,0xdc,0xe8,0x36,0xa9,0xc0,};
|
||||||
const char md5_baseband_tx[16] = {0xf6,0x31,0x51,0xa5,0x0a,0xb1,0x36,0xf8,0xbe,0x4e,0xe2,0x7b,0x84,0xfc,0x62,0xac,};
|
const char md5_baseband_tx[16] = {0xe9,0xeb,0x30,0xea,0x3f,0xf5,0xea,0x93,0xf9,0x62,0x1e,0x9c,0x5f,0x29,0xa7,0x95,};
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user