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

View File

@ -233,7 +233,7 @@ space_info space(const path& p);
} /* namespace filesystem */
} /* 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);
/* Values added to FatFs FRESULT enum, values outside the FRESULT data type */

View File

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

View File

@ -89,9 +89,8 @@ void SoundBoardView::prepare_audio() {
void SoundBoardView::focus() {
buttons[0].focus();
if (!max_sound) {
if (!max_sound)
nav_.display_modal("No files", "No files in /wav/ directory", ABORT, nullptr);
}
}
void SoundBoardView::on_tuning_frequency_changed(rf::Frequency f) {
@ -157,7 +156,7 @@ void SoundBoardView::refresh_buttons(uint16_t id) {
button.id = n_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]);
} else {
button.set_text("- - -");
@ -204,11 +203,11 @@ SoundBoardView::SoundBoardView(
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;
for (auto& path : file_list) {
if (reader->open(path)) {
if (reader->open(u"wav/" + path.native())) {
if (reader->channels() == 1) {
sounds[c].size = reader->data_size();
sounds[c].sample_duration = reader->data_size() / (reader->bits_per_sample() / 8);
@ -234,7 +233,7 @@ SoundBoardView::SoundBoardView(
&field_frequency,
&number_bw,
&text_kHz,
&options_ctcss,
//&options_ctcss,
&text_page,
&text_duration,
&pbar,
@ -243,7 +242,7 @@ SoundBoardView::SoundBoardView(
&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++)
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) {
this->on_ctcss_changed(v);
};
options_ctcss.set_selected_index(0);
options_ctcss.set_selected_index(0);*/
const auto button_fn = [this](Button& button) {
tx_mode = NORMAL;

View File

@ -69,19 +69,19 @@ private:
uint32_t ms_duration = 0;
};
uint32_t sample_counter;
uint32_t sample_duration;
uint32_t sample_counter { 0 };
uint32_t sample_duration { 0 };
uint8_t page = 0;
uint16_t lfsr_v = 0x1337;
std::unique_ptr<WAVFileReader> reader;
std::unique_ptr<WAVFileReader> reader { };
sound sounds[105];
uint8_t max_sound;
uint8_t max_page;
uint8_t max_sound { 0 };
uint8_t max_page { 0 };
uint32_t _ctcss_freq;
uint32_t _ctcss_freq { 0 };
int8_t audio_buffer[1024];
@ -106,7 +106,7 @@ private:
.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 };
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);
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++) {
const int32_t audio_sample = audio.p[c] * 32768.0f;
//const int32_t audio_sample = __SSAT(sample_int, 16);
const int32_t sample_int = audio.p[c] * 32768.0f;
//const int32_t audio_sample = audio.p[c] * 32768.0f;
const int32_t audio_sample = __SSAT(sample_int, 16);
slicer_sr <<= 1;
slicer_sr |= (audio_sample < 0);

Binary file not shown.