mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 05:17:34 +00:00
Kernel: First cut of a sb16 driver
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.
This commit is contained in:
parent
6e671f78a8
commit
6c4024c04a
11 changed files with 436 additions and 4 deletions
40
Kernel/Devices/SB16.h
Normal file
40
Kernel/Devices/SB16.h
Normal file
|
@ -0,0 +1,40 @@
|
|||
#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 };
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue