• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef AUDIO_MNGR_NAPI_H_
17 #define AUDIO_MNGR_NAPI_H_
18 
19 #include <iostream>
20 #include <map>
21 #include <vector>
22 #include "audio_system_manager.h"
23 #include "napi/native_api.h"
24 #include "napi/native_node_api.h"
25 #include "audio_stream_mgr_napi.h"
26 #include "audio_routing_manager_napi.h"
27 
28 namespace OHOS {
29 namespace AudioStandard {
30 static const std::string AUDIO_MNGR_NAPI_CLASS_NAME = "AudioManager";
31 
32 class AudioManagerNapi {
33 public:
34     AudioManagerNapi();
35     ~AudioManagerNapi();
36 
37     enum AudioVolumeType {
38         VOLUMETYPE_DEFAULT = -1,
39         VOICE_CALL = 0,
40         RINGTONE = 2,
41         MEDIA = 3,
42         VOICE_ASSISTANT = 9,
43         VOLUMETYPE_MAX,
44         ALL = 100
45     };
46 
47     enum AudioRingMode {
48         RINGER_MODE_SILENT = 0,
49         RINGER_MODE_VIBRATE,
50         RINGER_MODE_NORMAL
51     };
52 
53     enum InterruptMode {
54         SHARE_MODE = 0,
55         INDEPENDENT_MODE = 1
56     };
57 
58     enum FocusType {
59         FOCUS_TYPE_RECORDING
60     };
61 
62     static napi_value Init(napi_env env, napi_value exports);
63 
64 private:
65 
66     static void Destructor(napi_env env, void *nativeObject, void *finalize_hint);
67     static napi_value Construct(napi_env env, napi_callback_info info);
68     static napi_value CreateAudioManagerWrapper(napi_env env);
69     static napi_value GetAudioManager(napi_env env, napi_callback_info info);
70     static napi_value SetVolume(napi_env env, napi_callback_info info);
71     static napi_value GetVolume(napi_env env, napi_callback_info info);
72     static napi_value GetMaxVolume(napi_env env, napi_callback_info info);
73     static napi_value GetMinVolume(napi_env env, napi_callback_info info);
74     static napi_value GetDevices(napi_env env, napi_callback_info info);
75     static napi_value SetStreamMute(napi_env env, napi_callback_info info);
76     static napi_value IsStreamMute(napi_env env, napi_callback_info info);
77     static napi_value IsStreamActive(napi_env env, napi_callback_info info);
78     static napi_value SetRingerMode(napi_env env, napi_callback_info info);
79     static napi_value GetRingerMode(napi_env env, napi_callback_info info);
80     static napi_value SetAudioScene(napi_env env, napi_callback_info info);
81     static napi_value GetAudioScene(napi_env env, napi_callback_info info);
82     static napi_value SetDeviceActive(napi_env env, napi_callback_info info);
83     static napi_value IsDeviceActive(napi_env env, napi_callback_info info);
84     static napi_value SetAudioParameter(napi_env env, napi_callback_info info);
85     static napi_value GetAudioParameter(napi_env env, napi_callback_info info);
86     static napi_value SetMicrophoneMute(napi_env env, napi_callback_info info);
87     static napi_value IsMicrophoneMute(napi_env env, napi_callback_info info);
88     static napi_status AddNamedProperty(napi_env env, napi_value object, const std::string name, int32_t enumValue);
89     static napi_value CreateAudioVolumeTypeObject(napi_env env);
90     static napi_value CreateDeviceFlagObject(napi_env env);
91     static napi_value CreateActiveDeviceTypeObject(napi_env env);
92     static napi_value CreateConnectTypeObject(napi_env env);
93     static napi_value CreateInterruptActionTypeObject(napi_env env);
94     static napi_value CreateAudioRingModeObject(napi_env env);
95     static napi_value On(napi_env env, napi_callback_info info);
96     static napi_value Off(napi_env env, napi_callback_info info);
97     static napi_value CreateDeviceChangeTypeObject(napi_env env);
98     static napi_value CreateAudioSceneObject(napi_env env);
99     static napi_value RequestIndependentInterrupt(napi_env env, napi_callback_info info);
100     static napi_value AbandonIndependentInterrupt(napi_env env, napi_callback_info info);
101     static napi_value GetStreamManager(napi_env env, napi_callback_info info);
102     static napi_value GetRoutingManager(napi_env env, napi_callback_info info);
103     static napi_value GetVolumeManager(napi_env env, napi_callback_info info);
104     static napi_value GetInterruptManager(napi_env env, napi_callback_info info);
105     static void AddPropName(std::string& propName, napi_status& status, napi_env env, napi_value& result);
106 
107     template<typename T> static napi_value CreatePropertyBase(napi_env env, T& t_map, napi_ref ref);
108 
109     static napi_ref audioVolumeTypeRef_;
110     static napi_ref deviceFlagRef_;
111     static napi_ref deviceRoleRef_;
112     static napi_ref deviceTypeRef_;
113     static napi_ref activeDeviceTypeRef_;
114     static napi_ref audioRingModeRef_;
115     static napi_ref deviceChangeType_;
116     static napi_ref interruptActionType_;
117     static napi_ref interruptHint_;
118     static napi_ref interruptType_;
119     static napi_ref audioScene_;
120     static napi_ref interruptMode_;
121     static napi_ref focusType_;
122     static napi_ref connectTypeRef_;
123     static napi_ref audioErrors_;
124     static napi_ref communicationDeviceType_;
125     static napi_ref interruptRequestType_;
126     static napi_ref interruptRequestResultType_;
127 
128     AudioSystemManager *audioMngr_;
129     int32_t cachedClientId_ = -1;
130     std::shared_ptr<AudioManagerDeviceChangeCallback> deviceChangeCallbackNapi_ = nullptr;
131     std::shared_ptr<AudioManagerCallback> interruptCallbackNapi_ = nullptr;
132     std::shared_ptr<AudioRingerModeCallback> ringerModecallbackNapi_ = nullptr;
133     std::shared_ptr<VolumeKeyEventCallback> volumeKeyEventCallbackNapi_ = nullptr;
134     napi_env env_;
135 };
136 
137 static const std::map<std::string, DeviceChangeType> DEVICE_CHANGE_TYPE_MAP = {
138     {"CONNECT", CONNECT},
139     {"DISCONNECT", DISCONNECT}
140 };
141 
142 static const std::map<std::string, AudioScene> AUDIO_SCENE_MAP = {
143     {"AUDIO_SCENE_DEFAULT", AUDIO_SCENE_DEFAULT},
144     {"AUDIO_SCENE_RINGING", AUDIO_SCENE_RINGING},
145     {"AUDIO_SCENE_PHONE_CALL", AUDIO_SCENE_PHONE_CALL},
146     {"AUDIO_SCENE_VOICE_CHAT", AUDIO_SCENE_PHONE_CHAT}
147 };
148 
149 static const std::map<std::string, InterruptActionType> INTERRUPT_ACTION_TYPE_MAP = {
150     {"TYPE_ACTIVATED", TYPE_ACTIVATED},
151     {"TYPE_INTERRUPT", TYPE_INTERRUPT}
152 };
153 
154 static const std::map<std::string, AudioManagerNapi::AudioVolumeType> VOLUME_TYPE_MAP = {
155     {"VOICE_CALL", AudioManagerNapi::VOICE_CALL},
156     {"RINGTONE", AudioManagerNapi::RINGTONE},
157     {"MEDIA", AudioManagerNapi::MEDIA},
158     {"VOICE_ASSISTANT", AudioManagerNapi::VOICE_ASSISTANT}
159 };
160 
161 static const std::map<std::string, AudioStandard::DeviceType> DEVICE_TYPE_MAP = {
162     {"INVALID", DEVICE_TYPE_INVALID},
163     {"EARPIECE", DEVICE_TYPE_EARPIECE},
164     {"SPEAKER", DEVICE_TYPE_SPEAKER},
165     {"WIRED_HEADSET", DEVICE_TYPE_WIRED_HEADSET},
166     {"WIRED_HEADPHONES", DEVICE_TYPE_WIRED_HEADPHONES},
167     {"BLUETOOTH_SCO", DEVICE_TYPE_BLUETOOTH_SCO},
168     {"BLUETOOTH_A2DP", DEVICE_TYPE_BLUETOOTH_A2DP},
169     {"MIC", DEVICE_TYPE_MIC},
170     {"USB_HEADSET", DEVICE_TYPE_USB_HEADSET}
171 };
172 
173 static const std::map<std::string, AudioStandard::ActiveDeviceType> ACTIVE_DEVICE_TYPE = {
174     {"SPEAKER", SPEAKER},
175     {"BLUETOOTH_SCO", BLUETOOTH_SCO}
176 };
177 
178 static const std::map<std::string, AudioStandard::InterruptMode> INTERRUPT_MODE_MAP = {
179     {"SHARE_MODE", SHARE_MODE},
180     {"INDEPENDENT_MODE", INDEPENDENT_MODE}
181 };
182 
183 static const std::map<std::string, AudioStandard::FocusType> FOCUS_TYPE_MAP = {
184     {"FOCUS_TYPE_RECORDING", FOCUS_TYPE_RECORDING}
185 };
186 
187 static const std::map<std::string, AudioStandard::AudioErrors> AUDIO_ERRORS_MAP = {
188     {"ERROR_INVALID_PARAM", ERROR_INVALID_PARAM},
189     {"ERROR_NO_MEMORY", ERROR_NO_MEMORY},
190     {"ERROR_ILLEGAL_STATE", ERROR_ILLEGAL_STATE},
191     {"ERROR_UNSUPPORTED", ERROR_UNSUPPORTED},
192     {"ERROR_TIMEOUT", ERROR_TIMEOUT},
193     {"ERROR_STREAM_LIMIT", ERROR_STREAM_LIMIT},
194     {"ERROR_SYSTEM", ERROR_SYSTEM}
195 };
196 
197 static const std::map<std::string, AudioStandard::CommunicationDeviceType> COMMUNICATION_DEVICE_TYPE_MAP = {
198     {"SPEAKER", COMMUNICATION_SPEAKER}
199 };
200 
201 static const std::map<std::string, AudioStandard::InterruptRequestType> INTERRUPT_REQUEST_TYPE_MAP = {
202     {"INTERRUPT_REQUEST_TYPE_DEFAULT", INTERRUPT_REQUEST_TYPE_DEFAULT},
203 };
204 static const std::map<std::string, AudioStandard::InterruptRequestResultType> INTERRUPT_REQUEST_RESULT_TYPE_MAP = {
205     {"INTERRUPT_REQUEST_GRANT", INTERRUPT_REQUEST_GRANT},
206     {"INTERRUPT_REQUEST_REJECT", INTERRUPT_REQUEST_REJECT},
207 };
208 } // namespace AudioStandard
209 } // namespace OHOS
210 #endif /* AUDIO_MNGR_NAPI_H_ */
211