mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-23 17:52:26 -05:00
6c4024c04a
Also add an AudioServer that (right now) doesn't do much. It tries to open, parse, and play a wav file. In the future, it can do more. My general thinking here here is that /dev/audio will be "owned" by AudioServer, and we'll do mixing in software before passing buffers off to the kernel to play, but we have to start somewhere.
40 lines
1.1 KiB
C++
40 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <AK/CircularQueue.h>
|
|
#include <Kernel/Devices/CharacterDevice.h>
|
|
#include <Kernel/IRQHandler.h>
|
|
#include <Kernel/VM/PhysicalAddress.h>
|
|
#include <Kernel/VM/PhysicalPage.h>
|
|
|
|
class SB16 final : public IRQHandler
|
|
, public CharacterDevice {
|
|
public:
|
|
SB16();
|
|
virtual ~SB16() override;
|
|
|
|
static SB16& the();
|
|
|
|
// ^CharacterDevice
|
|
virtual bool can_read(FileDescription&) const override;
|
|
virtual ssize_t read(FileDescription&, u8*, ssize_t) override;
|
|
virtual ssize_t write(FileDescription&, const u8*, ssize_t) override;
|
|
virtual bool can_write(FileDescription&) const override { return true; }
|
|
|
|
private:
|
|
// ^IRQHandler
|
|
virtual void handle_irq() override;
|
|
|
|
// ^CharacterDevice
|
|
virtual const char* class_name() const override { return "SB16"; }
|
|
|
|
void initialize();
|
|
void wait_for_irq();
|
|
void dma_start(uint32_t length);
|
|
void set_sample_rate(uint16_t hz);
|
|
void dsp_write(u8 value);
|
|
u8 dsp_read();
|
|
|
|
RefPtr<PhysicalPage> m_dma_buffer_page;
|
|
bool m_interrupted { false };
|
|
int m_major_version { 0 };
|
|
};
|