DSP/HLE: move implementation of RecvData to audio_core, behind common interface

This commit is contained in:
Weiyi Wang 2018-12-06 07:18:26 -05:00
parent 6d51d95d44
commit 7f568a3c19
5 changed files with 34 additions and 25 deletions

View file

@ -32,8 +32,13 @@ public:
DspInterface& operator=(const DspInterface&) = delete;
DspInterface& operator=(DspInterface&&) = delete;
/// Get the state of the DSP
virtual DspState GetDspState() const = 0;
/**
* Reads data from one of three DSP registers
* @note this function blocks until the data is available
* @param register_number the index of the register to read
* @returns the value of the register
*/
virtual u16 RecvData(u32 register_number) = 0;
/**
* Reads `length` bytes from the DSP pipe identified with `pipe_number`.

View file

@ -29,6 +29,7 @@ public:
DspState GetDspState() const;
u16 RecvData(u32 register_number);
std::vector<u8> PipeRead(DspPipe pipe_number, u32 length);
std::size_t GetPipeReadableSize(DspPipe pipe_number) const;
void PipeWrite(DspPipe pipe_number, const std::vector<u8>& buffer);
@ -93,6 +94,24 @@ DspState DspHle::Impl::GetDspState() const {
return dsp_state;
}
u16 DspHle::Impl::RecvData(u32 register_number) {
ASSERT_MSG(register_number == 0, "Unknown register_number {}", register_number);
// Application reads this after requesting DSP shutdown, to verify the DSP has indeed shutdown
// or slept.
switch (GetDspState()) {
case AudioCore::DspState::On:
return 0;
case AudioCore::DspState::Off:
case AudioCore::DspState::Sleeping:
return 1;
default:
UNREACHABLE();
break;
}
}
std::vector<u8> DspHle::Impl::PipeRead(DspPipe pipe_number, u32 length) {
const std::size_t pipe_index = static_cast<std::size_t>(pipe_number);
@ -342,8 +361,8 @@ void DspHle::Impl::AudioTickCallback(s64 cycles_late) {
DspHle::DspHle(Memory::MemorySystem& memory) : impl(std::make_unique<Impl>(*this, memory)) {}
DspHle::~DspHle() = default;
DspState DspHle::GetDspState() const {
return impl->GetDspState();
u16 DspHle::RecvData(u32 register_number) {
return impl->RecvData(register_number);
}
std::vector<u8> DspHle::PipeRead(DspPipe pipe_number, u32 length) {

View file

@ -24,8 +24,7 @@ public:
explicit DspHle(Memory::MemorySystem& memory);
~DspHle();
DspState GetDspState() const override;
u16 RecvData(u32 register_number) override;
std::vector<u8> PipeRead(DspPipe pipe_number, u32 length) override;
std::size_t GetPipeReadableSize(DspPipe pipe_number) const override;
void PipeWrite(DspPipe pipe_number, const std::vector<u8>& buffer) override;