Serenity Operating System
at master 45 lines 1.4 kB view raw
1/* 2 * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/IntrusiveList.h> 10#include <AK/OwnPtr.h> 11#include <Kernel/Bus/PCI/Access.h> 12#include <Kernel/Bus/PCI/Device.h> 13#include <Kernel/Devices/Audio/Channel.h> 14#include <Kernel/Devices/Device.h> 15#include <Kernel/Library/LockRefPtr.h> 16#include <Kernel/Library/LockWeakable.h> 17#include <Kernel/Locking/Mutex.h> 18#include <Kernel/Memory/PhysicalPage.h> 19#include <Kernel/PhysicalAddress.h> 20#include <Kernel/Random.h> 21 22namespace Kernel { 23 24class AudioManagement; 25class AudioController 26 : public AtomicRefCounted<AudioController> 27 , public LockWeakable<AudioController> { 28 friend class AudioManagement; 29 30public: 31 virtual ~AudioController() = default; 32 33 virtual LockRefPtr<AudioChannel> audio_channel(u32 index) const = 0; 34 virtual ErrorOr<size_t> write(size_t channel_index, UserOrKernelBuffer const& data, size_t length) = 0; 35 36 virtual void detect_hardware_audio_channels(Badge<AudioManagement>) = 0; 37 38 virtual ErrorOr<void> set_pcm_output_sample_rate(size_t channel_index, u32 samples_per_second_rate) = 0; 39 // Note: The return value is rate of samples per second 40 virtual ErrorOr<u32> get_pcm_output_sample_rate(size_t channel_index) = 0; 41 42private: 43 IntrusiveListNode<AudioController, LockRefPtr<AudioController>> m_node; 44}; 45}