Soundboard bugfix: shouldn't crash with long file names

This commit is contained in:
furrtek 2017-02-01 23:31:16 +00:00
parent 394331ebd2
commit 15f66eb74e
7 changed files with 32 additions and 40 deletions

View File

@ -166,23 +166,15 @@ std::filesystem::path next_filename_stem_matching_pattern(std::filesystem::path
} }
} }
std::vector<std::filesystem::path> scan_root_files(const TCHAR* directory, const std::string& extension) { std::vector<std::filesystem::path> scan_root_files(const std::filesystem::path& directory,
std::vector<std::filesystem::path> file_list { }; const std::filesystem::path& extension) {
std::filesystem::path file_path;
FRESULT res;
DIR dir;
static FILINFO fno;
res = f_opendir(&dir, directory); std::vector<std::filesystem::path> file_list { };
if (res == FR_OK) {
for (;;) { for(const auto& entry : std::filesystem::directory_iterator(directory, extension)) {
res = f_readdir(&dir, &fno); if( std::filesystem::is_regular_file(entry.status()) ) {
if (res != FR_OK || fno.fname[0] == 0) break; file_list.push_back(entry.path());
file_path = fno.fname;
if (file_path.extension().string() == extension)
file_list.push_back(file_path);
} }
f_closedir(&dir);
} }
return file_list; return file_list;

View File

@ -233,7 +233,7 @@ space_info space(const path& p);
} /* namespace filesystem */ } /* namespace filesystem */
} /* namespace std */ } /* namespace std */
std::vector<std::filesystem::path> scan_root_files(const TCHAR* directory, const std::string& extension); std::vector<std::filesystem::path> scan_root_files(const std::filesystem::path& directory, const std::filesystem::path& extension);
std::filesystem::path next_filename_stem_matching_pattern(std::filesystem::path filename_stem_pattern); std::filesystem::path next_filename_stem_matching_pattern(std::filesystem::path filename_stem_pattern);
/* Values added to FatFs FRESULT enum, values outside the FRESULT data type */ /* Values added to FatFs FRESULT enum, values outside the FRESULT data type */

View File

@ -125,13 +125,13 @@ private:
data_t data; data_t data;
}; };
header_t header; header_t header { };
File file; File file { };
uint32_t data_start; uint32_t data_start { };
uint32_t bytes_per_sample; uint32_t bytes_per_sample { };
uint32_t data_size_; uint32_t data_size_ { 0 };
uint32_t sample_rate_; uint32_t sample_rate_ { };
std::filesystem::path last_path { }; std::filesystem::path last_path { };
}; };

View File

@ -89,9 +89,8 @@ void SoundBoardView::prepare_audio() {
void SoundBoardView::focus() { void SoundBoardView::focus() {
buttons[0].focus(); buttons[0].focus();
if (!max_sound) { if (!max_sound)
nav_.display_modal("No files", "No files in /wav/ directory", ABORT, nullptr); nav_.display_modal("No files", "No files in /wav/ directory", ABORT, nullptr);
}
} }
void SoundBoardView::on_tuning_frequency_changed(rf::Frequency f) { void SoundBoardView::on_tuning_frequency_changed(rf::Frequency f) {
@ -157,7 +156,7 @@ void SoundBoardView::refresh_buttons(uint16_t id) {
button.id = n_sound; button.id = n_sound;
if (n_sound < max_sound) { if (n_sound < max_sound) {
button.set_text(sounds[n_sound].path.stem().string()); button.set_text(sounds[n_sound].path.stem().string().substr(0, 8));
button.set_style(styles[sounds[n_sound].path.stem().string()[0] & 3]); button.set_style(styles[sounds[n_sound].path.stem().string()[0] & 3]);
} else { } else {
button.set_text("- - -"); button.set_text("- - -");
@ -204,11 +203,11 @@ SoundBoardView::SoundBoardView(
reader = std::make_unique<WAVFileReader>(); reader = std::make_unique<WAVFileReader>();
file_list = scan_root_files(reinterpret_cast<const TCHAR*>("/wav"), ".WAV"); file_list = scan_root_files(u"wav", u"*.WAV");
c = 0; c = 0;
for (auto& path : file_list) { for (auto& path : file_list) {
if (reader->open(path)) { if (reader->open(u"wav/" + path.native())) {
if (reader->channels() == 1) { if (reader->channels() == 1) {
sounds[c].size = reader->data_size(); sounds[c].size = reader->data_size();
sounds[c].sample_duration = reader->data_size() / (reader->bits_per_sample() / 8); sounds[c].sample_duration = reader->data_size() / (reader->bits_per_sample() / 8);
@ -234,7 +233,7 @@ SoundBoardView::SoundBoardView(
&field_frequency, &field_frequency,
&number_bw, &number_bw,
&text_kHz, &text_kHz,
&options_ctcss, //&options_ctcss,
&text_page, &text_page,
&text_duration, &text_duration,
&pbar, &pbar,
@ -243,7 +242,7 @@ SoundBoardView::SoundBoardView(
&button_exit &button_exit
}); });
ctcss_options.emplace_back(std::make_pair("None", 0)); /*ctcss_options.emplace_back(std::make_pair("None", 0));
for (c = 0; c < CTCSS_TONES_NB; c++) for (c = 0; c < CTCSS_TONES_NB; c++)
ctcss_options.emplace_back(std::make_pair(ctcss_tones[c].PL_code, c)); ctcss_options.emplace_back(std::make_pair(ctcss_tones[c].PL_code, c));
@ -253,7 +252,7 @@ SoundBoardView::SoundBoardView(
options_ctcss.on_change = [this](size_t, OptionsField::value_t v) { options_ctcss.on_change = [this](size_t, OptionsField::value_t v) {
this->on_ctcss_changed(v); this->on_ctcss_changed(v);
}; };
options_ctcss.set_selected_index(0); options_ctcss.set_selected_index(0);*/
const auto button_fn = [this](Button& button) { const auto button_fn = [this](Button& button) {
tx_mode = NORMAL; tx_mode = NORMAL;

View File

@ -69,19 +69,19 @@ private:
uint32_t ms_duration = 0; uint32_t ms_duration = 0;
}; };
uint32_t sample_counter; uint32_t sample_counter { 0 };
uint32_t sample_duration; uint32_t sample_duration { 0 };
uint8_t page = 0; uint8_t page = 0;
uint16_t lfsr_v = 0x1337; uint16_t lfsr_v = 0x1337;
std::unique_ptr<WAVFileReader> reader; std::unique_ptr<WAVFileReader> reader { };
sound sounds[105]; sound sounds[105];
uint8_t max_sound; uint8_t max_sound { 0 };
uint8_t max_page; uint8_t max_page { 0 };
uint32_t _ctcss_freq; uint32_t _ctcss_freq { 0 };
int8_t audio_buffer[1024]; int8_t audio_buffer[1024];
@ -106,7 +106,7 @@ private:
.foreground = { 153, 102, 255 } .foreground = { 153, 102, 255 }
}; };
std::array<Button, 21> buttons; std::array<Button, 21> buttons { };
const Style * styles[4] = { &style_a, &style_b, &style_c, &style_d }; const Style * styles[4] = { &style_a, &style_b, &style_c, &style_d };
void on_tuning_frequency_changed(rf::Frequency f); void on_tuning_frequency_changed(rf::Frequency f);

View File

@ -47,11 +47,12 @@ void POCSAGProcessor::execute(const buffer_c8_t& buffer) {
const auto channel_out = channel_filter.execute(decim_1_out, dst_buffer); const auto channel_out = channel_filter.execute(decim_1_out, dst_buffer);
auto audio = demod.execute(channel_out, audio_buffer); auto audio = demod.execute(channel_out, audio_buffer);
// End up with 16 samples // End up with 32 samples ?
for (uint32_t c = 0; c < 16; c++) { for (uint32_t c = 0; c < 16; c++) {
const int32_t audio_sample = audio.p[c] * 32768.0f; const int32_t sample_int = audio.p[c] * 32768.0f;
//const int32_t audio_sample = __SSAT(sample_int, 16); //const int32_t audio_sample = audio.p[c] * 32768.0f;
const int32_t audio_sample = __SSAT(sample_int, 16);
slicer_sr <<= 1; slicer_sr <<= 1;
slicer_sr |= (audio_sample < 0); slicer_sr |= (audio_sample < 0);

Binary file not shown.