/* * Copyright (c) 2022, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace Kernel { class AudioManagement; class AudioController : public AtomicRefCounted , public LockWeakable { friend class AudioManagement; public: virtual ~AudioController() = default; virtual RefPtr audio_channel(u32 index) const = 0; virtual ErrorOr write(size_t channel_index, UserOrKernelBuffer const& data, size_t length) = 0; virtual ErrorOr initialize(Badge) = 0; virtual ErrorOr set_pcm_output_sample_rate(size_t channel_index, u32 samples_per_second_rate) = 0; // Note: The return value is rate of samples per second virtual ErrorOr get_pcm_output_sample_rate(size_t channel_index) = 0; private: IntrusiveListNode> m_node; }; }