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