mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-08-23 04:27:39 +00:00
Finished jammer modes
Shaved off a few kBs by using the Labels widget
This commit is contained in:
@@ -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 {
|
||||
|
@@ -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 { };
|
||||
};
|
||||
|
@@ -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};
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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 };
|
||||
|
||||
|
Reference in New Issue
Block a user