add mp3 player code
This commit is contained in:
52
Code/MP3Player/sd_reader_task.cpp
Normal file
52
Code/MP3Player/sd_reader_task.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#include "config.h"
|
||||
#include "sd_reader_task.h"
|
||||
|
||||
sd_reader_task::sd_reader_task() : task("SD reader", SD_READER_STACKSIZE),
|
||||
_fs(nullptr),
|
||||
_file(nullptr),
|
||||
_req_buff(nullptr),
|
||||
_req_btr(0),
|
||||
_req_br(nullptr),
|
||||
_req_result(FatFs::FR_OK),
|
||||
_eof(false),
|
||||
_force_eof(false),
|
||||
_execute(false)
|
||||
{ }
|
||||
|
||||
void sd_reader_task::start(FatFs * fs, FatFs::FILE * file) {
|
||||
_fs = fs;
|
||||
_file = file;
|
||||
_eof = false;
|
||||
_force_eof = false;
|
||||
_execute = false;
|
||||
task::start();
|
||||
}
|
||||
|
||||
FatFs::FRESULT sd_reader_task::read_data(uint8_t* buff, uint16_t btr, uint16_t* br) {
|
||||
// Copy request parameters
|
||||
_req_buff = buff;
|
||||
_req_btr = btr;
|
||||
_req_br = br;
|
||||
// Trigger task execution
|
||||
_execute_mutex.lock();
|
||||
_execute = true;
|
||||
_execute_mutex.unlock();
|
||||
_execute_cv.notify_one();
|
||||
// Wait for execution to complete
|
||||
_caller_cv.wait(_caller_mutex, [this]() {return !_execute;});
|
||||
// Return the result of the execution
|
||||
return _req_result;
|
||||
}
|
||||
|
||||
void sd_reader_task::run() {
|
||||
do {
|
||||
// Wait for a new request
|
||||
_execute_cv.wait(_execute_mutex, [this]() {return _execute;});
|
||||
// Read in the requested bytes
|
||||
_req_result = _fs->read(_file, _req_buff, _req_btr, _req_br);
|
||||
_eof = f_eof (_file);
|
||||
// Notify end of execution
|
||||
_execute = false;
|
||||
_caller_cv.notify_one();
|
||||
} while (!_eof && !_force_eof);
|
||||
}
|
||||
Reference in New Issue
Block a user