~aleteoryx/muditaos

muditaos/module-audio/Audio/AudioDevice.hpp -rw-r--r-- 1.8 KiB
a405cad6Aleteoryx trim readme 6 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md

#pragma once

#include "Endpoint.hpp"

#include <optional>
#include <memory>
#include <functional>

namespace audio
{

    class AudioDevice : public audio::IOProxy
    {

      public:
        static constexpr auto minVolume = .0f;
        static constexpr auto maxVolume = 10.0f;

        enum class RetCode
        {
            Success = 0,
            Failure,
            Disconnected
        };

        enum class Type
        {
            None,
            Audiocodec,
            Cellular,
            BluetoothA2DP,
            BluetoothHSP,
            BluetoothHFP
        };

        virtual ~AudioDevice() = default;

        virtual RetCode Start()
        {
            return RetCode::Success;
        }

        virtual RetCode Stop()
        {
            return RetCode::Success;
        }

        virtual RetCode Pause()
        {
            return RetCode::Success;
        }

        virtual RetCode Resume()
        {
            return RetCode::Success;
        }

        /// Set device output volume
        /// @param vol desired volume from 0 to 10
        /// @return RetCode::Success if OK, or RetCode::Failure otherwise
        virtual RetCode setOutputVolume(float vol) = 0;

        /// Set device input gain
        /// @param gain desired input gain from 0 to 100
        /// @return RetCode::Success if OK, or RetCode::Failure otherwise
        virtual RetCode setInputGain(float gain) = 0;

        auto getSinkFormat() -> AudioFormat override
        {
            return getSourceFormat();
        }

      private:
        static_assert(maxVolume > 0, "maxVolume needs to be bigger than 0");
    };
} // namespace audio