Save tx file (#1560)

* Added saving current packets to file
This commit is contained in:
Netro 2023-11-06 13:09:26 -05:00 committed by GitHub
parent 2913a41aec
commit 312df0fcec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 56 additions and 1 deletions

View File

@ -206,6 +206,7 @@ void BleRecentEntryDetailView::launch_bletx(BleRecentEntry packetEntry) {
strncpy(bleTxPacket.macAddress, macAddressStr.c_str(), 13); strncpy(bleTxPacket.macAddress, macAddressStr.c_str(), 13);
strncpy(bleTxPacket.advertisementData, packetEntry.dataString.c_str(), (packetEntry.packetData.dataLen * 2) + 1); strncpy(bleTxPacket.advertisementData, packetEntry.dataString.c_str(), (packetEntry.packetData.dataLen * 2) + 1);
strncpy(bleTxPacket.packetCount, "50", 3);
bleTxPacket.packet_count = 50; bleTxPacket.packet_count = 50;
nav_.replace<BLETxView>(bleTxPacket); nav_.replace<BLETxView>(bleTxPacket);

View File

@ -172,6 +172,30 @@ void BLETxView::file_error() {
nav_.display_modal("Error", "File read error."); nav_.display_modal("Error", "File read error.");
} }
bool BLETxView::saveFile(const std::filesystem::path& path) {
File f;
auto error = f.create(path);
if (error)
return false;
for (uint32_t i = 0; i < num_packets; i++) {
std::string macAddressStr = packets[i].macAddress;
std::string advertisementDataStr = packets[i].advertisementData;
std::string packetCountStr = packets[i].packetCount;
std::string packetString = macAddressStr + ' ' + advertisementDataStr + ' ' + packetCountStr;
// Are we on the last line?
if (i != num_packets - 1) {
packetString += '\n';
}
f.write(packetString.c_str(), packetString.length());
}
return true;
}
void BLETxView::toggle() { void BLETxView::toggle() {
if (is_active()) { if (is_active()) {
stop(); stop();
@ -286,11 +310,14 @@ BLETxView::BLETxView(NavigationView& nav)
&label_mac_address, &label_mac_address,
&text_mac_address, &text_mac_address,
&label_data_packet, &label_data_packet,
&button_save_packet,
&button_switch, &button_switch,
&console}); &console});
field_frequency.set_step(0); field_frequency.set_step(0);
ensure_directory(packet_save_path);
button_play.on_select = [this](ImageButton&) { button_play.on_select = [this](ImageButton&) {
this->toggle(); this->toggle();
}; };
@ -326,6 +353,17 @@ BLETxView::BLETxView(NavigationView& nav)
}; };
}; };
button_save_packet.on_select = [this, &nav](Button&) {
packetFileBuffer = "";
text_prompt(
nav,
packetFileBuffer,
64,
[this](std::string& buffer) {
on_save_file(buffer);
});
};
button_switch.on_select = [this, &nav](Button&) { button_switch.on_select = [this, &nav](Button&) {
nav_.set_on_pop([this]() { nav_.push<BLERxView>(); }); nav_.set_on_pop([this]() { nav_.push<BLERxView>(); });
nav_.pop(); nav_.pop();
@ -391,6 +429,14 @@ void BLETxView::on_file_changed(const fs::path& new_file_path) {
} }
} }
void BLETxView::on_save_file(const std::string value) {
auto folder = packet_save_path.parent_path();
auto ext = packet_save_path.extension();
auto new_path = folder / value + ext;
saveFile(new_path);
}
void BLETxView::on_data(uint32_t value, bool is_data) { void BLETxView::on_data(uint32_t value, bool is_data) {
std::string str_console = ""; std::string str_console = "";

View File

@ -79,6 +79,7 @@ class BLETxView : public View {
void stop(); void stop();
void handle_replay_thread_done(const uint32_t return_code); void handle_replay_thread_done(const uint32_t return_code);
void file_error(); void file_error();
bool saveFile(const std::filesystem::path& path);
std::string title() const override { return "BLE TX"; }; std::string title() const override { return "BLE TX"; };
@ -87,6 +88,7 @@ class BLETxView : public View {
void on_tx_progress(const bool done); void on_tx_progress(const bool done);
void on_file_changed(const std::filesystem::path& new_file_path); void on_file_changed(const std::filesystem::path& new_file_path);
void update_packet_display(BLETxPacket packet); void update_packet_display(BLETxPacket packet);
void on_save_file(const std::string value);
NavigationView& nav_; NavigationView& nav_;
TxRadioState radio_state_{ TxRadioState radio_state_{
@ -101,6 +103,7 @@ class BLETxView : public View {
uint32_t prev_value{0}; uint32_t prev_value{0};
std::filesystem::path file_path{}; std::filesystem::path file_path{};
std::filesystem::path packet_save_path{u"BLETX/BLETX_????.TXT"};
uint8_t channel_number = 37; uint8_t channel_number = 37;
char randomMac[13] = "010203040506"; char randomMac[13] = "010203040506";
@ -252,13 +255,18 @@ class BLETxView : public View {
Console console{ Console console{
{0, 8 * 16, 240, 240}}; {0, 8 * 16, 240, 240}};
Button button_save_packet{
{1 * 8, 16 * 16, 13 * 8, 2 * 16},
"Save Packet"};
Button button_switch{ Button button_switch{
{8 * 8, 16 * 16, 14 * 8, 2 * 16}, {16 * 8, 16 * 16, 13 * 8, 2 * 16},
"Switch to Rx"}; "Switch to Rx"};
std::string str_log{""}; std::string str_log{""};
bool logging{true}; bool logging{true};
bool logging_done{false}; bool logging_done{false};
std::string packetFileBuffer{};
std::unique_ptr<BLELoggerTx> logger{}; std::unique_ptr<BLELoggerTx> logger{};