Finished jammer modes

Shaved off a few kBs by using the Labels widget
This commit is contained in:
furrtek
2017-02-13 05:35:13 +00:00
parent d12cd0d8af
commit 4e8980e5d8
26 changed files with 232 additions and 304 deletions

View File

@@ -36,11 +36,11 @@ void JammerProcessor::execute(const buffer_c8_t& buffer) {
// Find next enabled range
do {
current_range++;
if (current_range == 24) current_range = 0; // Warning ! Should match JAMMER_MAX_CH
if (current_range == JAMMER_MAX_CH) current_range = 0;
} while (!jammer_channels[current_range].enabled);
jammer_duration = jammer_channels[current_range].duration;
jammer_bw = jammer_channels[current_range].width / 5; // TODO: Exact value
jammer_bw = jammer_channels[current_range].width / 2; // TODO: Exact value
// Ask for retune
message.freq = jammer_channels[current_range].center;
@@ -50,29 +50,30 @@ void JammerProcessor::execute(const buffer_c8_t& buffer) {
jammer_duration--;
}
// Ramp
/*if (r >= 10) {
if (sample < 128)
sample++;
else
sample = -127;
r = 0;
} else {
r++;
}*/
// Phase noise
if (r >= 10) {
aphase += ((aphase >> 4) ^ 0x4573) << 20;
r = 0;
if (!period_counter) {
period_counter = noise_period;
if (noise_type == JammerType::TYPE_FSK) {
sample = (sample + lfsr) >> 1;
} else if (noise_type == JammerType::TYPE_TONE) {
tone_delta = 150000 + (lfsr >> 9); // Approx 100Hz to 6kHz
} else if (noise_type == JammerType::TYPE_SWEEP) {
sample++; // This is like saw wave FM
}
feedback = ((lfsr >> 31) ^ (lfsr >> 29) ^ (lfsr >> 15) ^ (lfsr >> 11)) & 1;
lfsr = (lfsr << 1) | feedback;
if (!lfsr) lfsr = 0x1337; // Shouldn't do this :(
} else {
r++;
period_counter--;
}
aphase += 8830;
sample = sine_table_i8[(aphase & 0xFF000000) >> 24];
if (noise_type == JammerType::TYPE_TONE) {
aphase += tone_delta;
sample = sine_table_i8[(aphase & 0xFF000000) >> 24];
}
// FM
delta = sample * jammer_bw;
phase += delta;
@@ -92,9 +93,13 @@ void JammerProcessor::on_message(const Message* const msg) {
if (message.run) {
jammer_channels = (JammerChannel*)shared_memory.bb_data.data;
noise_type = message.type;
noise_speed = message.speed;
noise_period = 3072000 / message.speed;
if (noise_type == JammerType::TYPE_SWEEP)
noise_period >>= 8;
period_counter = 0;
jammer_duration = 0;
current_range = 0;
lfsr = 0xDEAD0012;
configured = true;
} else {

View File

@@ -26,6 +26,9 @@
#include "baseband_processor.hpp"
#include "baseband_thread.hpp"
#include "portapack_shared_memory.hpp"
#include "jammer.hpp"
using namespace jammer;
class JammerProcessor : public BasebandProcessor {
public:
@@ -34,21 +37,21 @@ public:
void on_message(const Message* const msg) override;
private:
bool configured = false;
bool configured { false };
BasebandThread baseband_thread { 3072000, this, NORMALPRIO + 20, baseband::Direction::Transmit };
JammerChannel * jammer_channels { };
uint32_t noise_type { 0 };
uint32_t noise_speed { 0 };
JammerType noise_type { };
uint32_t tone_delta { 0 }, lfsr { }, feedback { };
uint32_t noise_period { 0 }, period_counter { 0 };
uint32_t jammer_duration { 0 };
int8_t r { 0 }, ir { 0 };
uint32_t current_range { 0 };
int64_t jammer_center { 0 };
int64_t jammer_center { 0 }, jammer_bw { 0 };
uint32_t sample_count { 0 };
uint32_t aphase { 0 }, phase { 0 }, delta { 0 }, sphase { 0 };
int32_t sample { 0 }, jammer_bw { 0 };
int8_t sample { 0 };
int8_t re { 0 }, im { 0 };
RetuneMessage message { };
};

View File

@@ -91,7 +91,7 @@ void RDSProcessor::execute(const buffer_c8_t& buffer) {
re = (sine_table_i8[(sphase & 0x03FF0000) >> 18]);
im = (sine_table_i8[(phase & 0x03FF0000) >> 18]);
buffer.p[i] = {(int8_t)re, (int8_t)im};
buffer.p[i] = {re, im};
}
}

View File

@@ -37,25 +37,25 @@ public:
void on_message(const Message* const msg) override;
private:
uint32_t * rdsdata;
uint32_t * rdsdata { };
BasebandThread baseband_thread { 2280000, this, NORMALPRIO + 20, baseband::Direction::Transmit };
uint16_t message_length;
int8_t re, im;
uint8_t mphase, s;
uint32_t bit_pos;
uint16_t message_length { 0 };
int8_t re { 0 }, im { 0 };
uint8_t mphase { 0 }, s { 0 };
uint32_t bit_pos { 0 };
int32_t sample_buffer[SAMPLE_BUFFER_SIZE] = {0};
int32_t val;
uint8_t prev_output = 0;
uint8_t cur_output = 0;
uint8_t cur_bit = 0;
int32_t val { 0 };
uint8_t prev_output { 0 };
uint8_t cur_output { 0 };
uint8_t cur_bit { 0 };
int sample_count = SAMPLES_PER_BIT;
int in_sample_index = 0;
int32_t sample;
int32_t sample { 0 };
int out_sample_index = SAMPLE_BUFFER_SIZE - 1;
uint32_t phase, sphase;
int32_t delta;
uint32_t phase { 0 }, sphase { 0 };
int32_t delta { 0 };
bool configured { false };