mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2026-08-20 22:49:06 +00:00
expanding channels (#3183)
This commit is contained in:
@@ -116,7 +116,7 @@ static std::uint64_t get_freq_by_channel_number(uint8_t channel_number) {
|
|||||||
freq_hz = 2'428'000'000ull + (channel_number - 11) * 2'000'000ull;
|
freq_hz = 2'428'000'000ull + (channel_number - 11) * 2'000'000ull;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
freq_hz = UINT64_MAX;
|
freq_hz = 2'402'000'000ull; // Default to channel 37 frequency if invalid channel number
|
||||||
}
|
}
|
||||||
|
|
||||||
return freq_hz;
|
return freq_hz;
|
||||||
@@ -254,7 +254,7 @@ void BLETxView::send_packet() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void BLETxView::start() {
|
void BLETxView::start() {
|
||||||
if (file_path.empty()) {
|
if (file_path.empty() || num_packets == 0) {
|
||||||
file_error();
|
file_error();
|
||||||
check_loop.set_value(false);
|
check_loop.set_value(false);
|
||||||
return;
|
return;
|
||||||
@@ -266,6 +266,8 @@ void BLETxView::start() {
|
|||||||
button_play.set_bitmap(&bitmap_stop);
|
button_play.set_bitmap(&bitmap_stop);
|
||||||
is_running = true;
|
is_running = true;
|
||||||
|
|
||||||
|
advCount = 0;
|
||||||
|
|
||||||
send_packet();
|
send_packet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,55 +298,61 @@ void BLETxView::on_timer() {
|
|||||||
void BLETxView::on_tx_progress(const bool done, uint32_t progress) {
|
void BLETxView::on_tx_progress(const bool done, uint32_t progress) {
|
||||||
// TODO: make use of progress variable
|
// TODO: make use of progress variable
|
||||||
(void)progress;
|
(void)progress;
|
||||||
|
if (!is_active() || num_packets == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (done) {
|
if (done) {
|
||||||
if (is_active()) {
|
if (is_active()) {
|
||||||
transmitter_model.disable();
|
transmitter_model.disable();
|
||||||
|
|
||||||
if (auto_channel) {
|
if (auto_channel) {
|
||||||
switch (advCount) {
|
advCount++;
|
||||||
case 0:
|
|
||||||
channel_number = 37;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
channel_number = 38;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
channel_number = 39;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
field_frequency.set_value(get_freq_by_channel_number(channel_number));
|
|
||||||
|
|
||||||
if (advCount == 3) {
|
if (advCount == 3) {
|
||||||
channel_number = 37;
|
channel_number = 37;
|
||||||
packet_counter--;
|
field_frequency.set_value(get_freq_by_channel_number(channel_number));
|
||||||
|
if (packet_counter > 0) packet_counter--;
|
||||||
packetDone = true;
|
packetDone = true;
|
||||||
advCount = 0;
|
advCount = 0;
|
||||||
} else {
|
} else {
|
||||||
|
channel_number = 37 + advCount;
|
||||||
|
field_frequency.set_value(get_freq_by_channel_number(channel_number));
|
||||||
|
send_packet();
|
||||||
|
}
|
||||||
|
} else if (all_channels) {
|
||||||
|
advCount++;
|
||||||
|
if (advCount == 40) {
|
||||||
|
channel_number = 0;
|
||||||
|
field_frequency.set_value(get_freq_by_channel_number(channel_number));
|
||||||
|
if (packet_counter > 0) packet_counter--;
|
||||||
|
packetDone = true;
|
||||||
|
advCount = 0;
|
||||||
|
} else {
|
||||||
|
channel_number = advCount;
|
||||||
|
field_frequency.set_value(get_freq_by_channel_number(channel_number));
|
||||||
send_packet();
|
send_packet();
|
||||||
advCount++;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
packet_counter--;
|
if (packet_counter > 0) packet_counter--;
|
||||||
packetDone = true;
|
packetDone = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Reached end of current packet repeats.
|
// Reached end of current packet repeats.
|
||||||
if (packet_counter == 0) {
|
if (packet_counter == 0) {
|
||||||
// Done sending all packets.
|
// Done sending all packets.
|
||||||
if (current_packet == (num_packets - 1)) {
|
current_packet++;
|
||||||
current_packet = 0;
|
if (current_packet >= num_packets) {
|
||||||
|
current_packet = 0;
|
||||||
|
|
||||||
// If looping, restart from beginning.
|
// If looping, restart from beginning.
|
||||||
if (check_loop.value()) {
|
if (check_loop.value()) {
|
||||||
update_current_packet(packets[current_packet], current_packet);
|
|
||||||
} else {
|
|
||||||
stop();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
current_packet++;
|
|
||||||
update_current_packet(packets[current_packet], current_packet);
|
update_current_packet(packets[current_packet], current_packet);
|
||||||
|
} else {
|
||||||
|
stop();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
update_current_packet(packets[current_packet], current_packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -385,16 +393,20 @@ BLETxView::BLETxView(NavigationView& nav)
|
|||||||
};
|
};
|
||||||
|
|
||||||
options_channel.on_change = [this](size_t, int32_t i) {
|
options_channel.on_change = [this](size_t, int32_t i) {
|
||||||
// If we selected Auto don't do anything and Auto will handle changing.
|
auto_channel = (i == BLT_CHAN_AUTO);
|
||||||
if (i == 40) {
|
all_channels = (i == BLT_CHAN_ALL);
|
||||||
auto_channel = true;
|
|
||||||
return;
|
advCount = 0;
|
||||||
|
|
||||||
|
if (auto_channel) {
|
||||||
|
channel_number = 37;
|
||||||
|
} else if (all_channels) {
|
||||||
|
channel_number = 0;
|
||||||
} else {
|
} else {
|
||||||
auto_channel = false;
|
channel_number = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
field_frequency.set_value(get_freq_by_channel_number(i));
|
field_frequency.set_value(get_freq_by_channel_number(channel_number));
|
||||||
channel_number = i;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
options_speed.on_change = [this](size_t, int32_t i) {
|
options_speed.on_change = [this](size_t, int32_t i) {
|
||||||
@@ -403,7 +415,7 @@ BLETxView::BLETxView(NavigationView& nav)
|
|||||||
};
|
};
|
||||||
|
|
||||||
options_speed.set_selected_index(0);
|
options_speed.set_selected_index(0);
|
||||||
options_channel.set_selected_index(3);
|
options_channel.set_by_value(BLT_CHAN_AUTO);
|
||||||
|
|
||||||
check_rand_mac.set_value(false);
|
check_rand_mac.set_value(false);
|
||||||
check_rand_mac.on_select = [this](Checkbox&, bool v) {
|
check_rand_mac.on_select = [this](Checkbox&, bool v) {
|
||||||
@@ -413,8 +425,7 @@ BLETxView::BLETxView(NavigationView& nav)
|
|||||||
button_open.on_select = [this](Button&) {
|
button_open.on_select = [this](Button&) {
|
||||||
auto open_view = nav_.push<FileLoadView>(".TXT");
|
auto open_view = nav_.push<FileLoadView>(".TXT");
|
||||||
open_view->on_changed = [this](std::filesystem::path new_file_path) {
|
open_view->on_changed = [this](std::filesystem::path new_file_path) {
|
||||||
on_file_changed(new_file_path);
|
this->on_file_changed(new_file_path);
|
||||||
|
|
||||||
nav_.set_on_pop([this]() { button_play.focus(); });
|
nav_.set_on_pop([this]() { button_play.focus(); });
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -427,7 +438,7 @@ BLETxView::BLETxView(NavigationView& nav)
|
|||||||
64,
|
64,
|
||||||
ENTER_KEYBOARD_MODE_ALPHA,
|
ENTER_KEYBOARD_MODE_ALPHA,
|
||||||
[this](std::string& buffer) {
|
[this](std::string& buffer) {
|
||||||
on_save_file(buffer);
|
this->on_save_file(buffer);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -506,10 +517,10 @@ void BLETxView::on_file_changed(const fs::path& new_file_path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
readUntil(data_file, packets[num_packets].macAddress, mac_address_size_str, ' ');
|
readUntil(data_file, packets[num_packets].macAddress, sizeof(packets[num_packets].macAddress), ' ');
|
||||||
readUntil(data_file, packets[num_packets].advertisementData, max_packet_size_str, ' ');
|
readUntil(data_file, packets[num_packets].advertisementData, sizeof(packets[num_packets].advertisementData), ' ');
|
||||||
readUntil(data_file, packets[num_packets].packetType, max_packet_type_str, ' ');
|
readUntil(data_file, packets[num_packets].packetType, sizeof(packets[num_packets].packetType), ' ');
|
||||||
readUntil(data_file, packets[num_packets].packetCount, max_packet_repeat_str, '\n');
|
readUntil(data_file, packets[num_packets].packetCount, sizeof(packets[num_packets].packetCount), '\n');
|
||||||
|
|
||||||
uint64_t macAddressSize = strlen(packets[num_packets].macAddress);
|
uint64_t macAddressSize = strlen(packets[num_packets].macAddress);
|
||||||
uint64_t advertisementDataSize = strlen(packets[num_packets].advertisementData);
|
uint64_t advertisementDataSize = strlen(packets[num_packets].advertisementData);
|
||||||
@@ -542,10 +553,8 @@ void BLETxView::on_file_changed(const fs::path& new_file_path) {
|
|||||||
num_packets++;
|
num_packets++;
|
||||||
|
|
||||||
} while (num_packets < max_num_packets);
|
} while (num_packets < max_num_packets);
|
||||||
|
|
||||||
update_current_packet(packets[0], 0);
|
|
||||||
|
|
||||||
data_file.close();
|
data_file.close();
|
||||||
|
update_current_packet(packets[0], 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -570,6 +579,9 @@ void BLETxView::update_current_packet(BLETxPacket packet, uint32_t currentIndex)
|
|||||||
|
|
||||||
std::vector<std::string> strings = splitIntoStrings(packet.advertisementData);
|
std::vector<std::string> strings = splitIntoStrings(packet.advertisementData);
|
||||||
|
|
||||||
|
packet_counter = packet.packet_count;
|
||||||
|
current_packet = currentIndex;
|
||||||
|
|
||||||
text_packet_index.set(to_string_dec_uint(current_packet));
|
text_packet_index.set(to_string_dec_uint(current_packet));
|
||||||
|
|
||||||
text_packets_sent.set(to_string_dec_uint(packet.packet_count));
|
text_packets_sent.set(to_string_dec_uint(packet.packet_count));
|
||||||
@@ -578,9 +590,6 @@ void BLETxView::update_current_packet(BLETxPacket packet, uint32_t currentIndex)
|
|||||||
|
|
||||||
progressbar.set_max(packet.packet_count);
|
progressbar.set_max(packet.packet_count);
|
||||||
|
|
||||||
packet_counter = packet.packet_count;
|
|
||||||
current_packet = currentIndex;
|
|
||||||
|
|
||||||
dataFile.create(dataTempFilePath);
|
dataFile.create(dataTempFilePath);
|
||||||
|
|
||||||
for (const std::string& str : strings) {
|
for (const std::string& str : strings) {
|
||||||
|
|||||||
@@ -45,6 +45,9 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
#define BLT_CHAN_AUTO 40
|
||||||
|
#define BLT_CHAN_ALL 41
|
||||||
|
|
||||||
class BLELoggerTx {
|
class BLELoggerTx {
|
||||||
public:
|
public:
|
||||||
Optional<File::Error> append(const std::filesystem::path& filename) {
|
Optional<File::Error> append(const std::filesystem::path& filename) {
|
||||||
@@ -94,7 +97,7 @@ struct BLETxPacket {
|
|||||||
char advertisementData[63];
|
char advertisementData[63];
|
||||||
char packetCount[11];
|
char packetCount[11];
|
||||||
char packetType[17];
|
char packetType[17];
|
||||||
uint32_t packet_count;
|
uint32_t packet_count; // repeat the same packet count times
|
||||||
PKT_TYPE pduType;
|
PKT_TYPE pduType;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -145,6 +148,7 @@ class BLETxView : public View {
|
|||||||
std::filesystem::path packet_save_path{bletx_dir / u"BLETX_????.TXT"};
|
std::filesystem::path packet_save_path{bletx_dir / u"BLETX_????.TXT"};
|
||||||
uint8_t channel_number = 37;
|
uint8_t channel_number = 37;
|
||||||
bool auto_channel = false;
|
bool auto_channel = false;
|
||||||
|
bool all_channels = false;
|
||||||
|
|
||||||
char randomMac[13] = "010203040506";
|
char randomMac[13] = "010203040506";
|
||||||
|
|
||||||
@@ -156,10 +160,10 @@ class BLETxView : public View {
|
|||||||
int16_t auto_channel_period{6};
|
int16_t auto_channel_period{6};
|
||||||
|
|
||||||
bool repeatLoop = false;
|
bool repeatLoop = false;
|
||||||
uint32_t packet_counter{0};
|
uint32_t packet_counter{0}; // the counter (decr) of the actual packet as it can be sent multiple times
|
||||||
uint32_t num_packets{0};
|
uint32_t num_packets{0}; // how many packets in the file
|
||||||
uint32_t current_packet{0};
|
uint32_t current_packet{0}; // the actual packet's num, i'm sending if i have multiple packets
|
||||||
uint8_t packetTxCount{0};
|
uint8_t packetTxCount{0}; // not used
|
||||||
bool packetDone = false;
|
bool packetDone = false;
|
||||||
bool random_mac = false;
|
bool random_mac = false;
|
||||||
bool file_override = false;
|
bool file_override = false;
|
||||||
@@ -241,10 +245,48 @@ class BLETxView : public View {
|
|||||||
OptionsField options_channel{
|
OptionsField options_channel{
|
||||||
{11 * 8, 6 * 8},
|
{11 * 8, 6 * 8},
|
||||||
5,
|
5,
|
||||||
{{"Ch.37 ", 37},
|
{{"Ch.0", 0},
|
||||||
|
{"Ch.1", 1},
|
||||||
|
{"Ch.2", 2},
|
||||||
|
{"Ch.3", 3},
|
||||||
|
{"Ch.4", 4},
|
||||||
|
{"Ch.5", 5},
|
||||||
|
{"Ch.6", 6},
|
||||||
|
{"Ch.7", 7},
|
||||||
|
{"Ch.8", 8},
|
||||||
|
{"Ch.9", 9},
|
||||||
|
{"Ch.10", 10},
|
||||||
|
{"Ch.11", 11},
|
||||||
|
{"Ch.12", 12},
|
||||||
|
{"Ch.13", 13},
|
||||||
|
{"Ch.14", 14},
|
||||||
|
{"Ch.15", 15},
|
||||||
|
{"Ch.16", 16},
|
||||||
|
{"Ch.17", 17},
|
||||||
|
{"Ch.18", 18},
|
||||||
|
{"Ch.19", 19},
|
||||||
|
{"Ch.20", 20},
|
||||||
|
{"Ch.21", 21},
|
||||||
|
{"Ch.22", 22},
|
||||||
|
{"Ch.23", 23},
|
||||||
|
{"Ch.24", 24},
|
||||||
|
{"Ch.25", 25},
|
||||||
|
{"Ch.26", 26},
|
||||||
|
{"Ch.27", 27},
|
||||||
|
{"Ch.28", 28},
|
||||||
|
{"Ch.29", 29},
|
||||||
|
{"Ch.30", 30},
|
||||||
|
{"Ch.31", 31},
|
||||||
|
{"Ch.32", 32},
|
||||||
|
{"Ch.33", 33},
|
||||||
|
{"Ch.34", 34},
|
||||||
|
{"Ch.35", 35},
|
||||||
|
{"Ch.36", 36},
|
||||||
|
{"Ch.37", 37},
|
||||||
{"Ch.38", 38},
|
{"Ch.38", 38},
|
||||||
{"Ch.39", 39},
|
{"Ch.39", 39},
|
||||||
{"Auto", 40}}};
|
{"Auto", BLT_CHAN_AUTO},
|
||||||
|
{"All", BLT_CHAN_ALL}}};
|
||||||
|
|
||||||
OptionsField options_adv_type{
|
OptionsField options_adv_type{
|
||||||
{17 * 8, 6 * 8},
|
{17 * 8, 6 * 8},
|
||||||
|
|||||||
Reference in New Issue
Block a user