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 26 namespace OHOS { 27 namespace AudioStandard { 28 static const std::string AUDIO_MNGR_NAPI_CLASS_NAME = "AudioManager"; 29 30 class AudioManagerNapi { 31 public: 32 AudioManagerNapi(); 33 ~AudioManagerNapi(); 34 35 enum AudioVolumeType { 36 VOLUMETYPE_DEFAULT = -1, 37 VOICE_CALL = 0, 38 RINGTONE = 2, 39 MEDIA = 3, 40 VOICE_ASSISTANT = 9, 41 VOLUMETYPE_MAX 42 }; 43 44 enum AudioRingMode { 45 RINGER_MODE_SILENT = 0, 46 RINGER_MODE_VIBRATE, 47 RINGER_MODE_NORMAL 48 }; 49 50 static napi_value Init(napi_env env, napi_value exports); 51 52 private: 53 static void Destructor(napi_env env, void *nativeObject, void *finalize_hint); 54 static napi_value Construct(napi_env env, napi_callback_info info); 55 static napi_value CreateAudioManagerWrapper(napi_env env); 56 static napi_value GetAudioManager(napi_env env, napi_callback_info info); 57 static napi_value SetVolume(napi_env env, napi_callback_info info); 58 static napi_value GetVolume(napi_env env, napi_callback_info info); 59 static napi_value GetMaxVolume(napi_env env, napi_callback_info info); 60 static napi_value GetMinVolume(napi_env env, napi_callback_info info); 61 static napi_value GetDevices(napi_env env, napi_callback_info info); 62 static napi_value SetStreamMute(napi_env env, napi_callback_info info); 63 static napi_value IsStreamMute(napi_env env, napi_callback_info info); 64 static napi_value IsStreamActive(napi_env env, napi_callback_info info); 65 static napi_value SetRingerMode(napi_env env, napi_callback_info info); 66 static napi_value GetRingerMode(napi_env env, napi_callback_info info); 67 static napi_value SetAudioScene(napi_env env, napi_callback_info info); 68 static napi_value GetAudioScene(napi_env env, napi_callback_info info); 69 static napi_value SetDeviceActive(napi_env env, napi_callback_info info); 70 static napi_value IsDeviceActive(napi_env env, napi_callback_info info); 71 static napi_value SetAudioParameter(napi_env env, napi_callback_info info); 72 static napi_value GetAudioParameter(napi_env env, napi_callback_info info); 73 static napi_value SetMicrophoneMute(napi_env env, napi_callback_info info); 74 static napi_value IsMicrophoneMute(napi_env env, napi_callback_info info); 75 static napi_status AddNamedProperty(napi_env env, napi_value object, const std::string name, int32_t enumValue); 76 static napi_value CreateAudioVolumeTypeObject(napi_env env); 77 static napi_value CreateDeviceFlagObject(napi_env env); 78 static napi_value CreateDeviceRoleObject(napi_env env); 79 static napi_value CreateDeviceTypeObject(napi_env env); 80 static napi_value CreateActiveDeviceTypeObject(napi_env env); 81 static napi_value CreateInterruptActionTypeObject(napi_env env); 82 static napi_value CreateInterruptHintObject(napi_env env); 83 static napi_value CreateInterruptTypeObject(napi_env env); 84 static napi_value CreateAudioRingModeObject(napi_env env); 85 static napi_value On(napi_env env, napi_callback_info info); 86 static napi_value Off(napi_env env, napi_callback_info info); 87 static napi_value CreateDeviceChangeTypeObject(napi_env env); 88 static napi_value CreateAudioSceneObject(napi_env env); 89 90 static napi_ref audioVolumeTypeRef_; 91 static napi_ref deviceFlagRef_; 92 static napi_ref deviceRoleRef_; 93 static napi_ref deviceTypeRef_; 94 static napi_ref activeDeviceTypeRef_; 95 static napi_ref audioRingModeRef_; 96 static napi_ref deviceChangeType_; 97 static napi_ref interruptActionType_; 98 static napi_ref interruptHint_; 99 static napi_ref interruptType_; 100 static napi_ref audioScene_; 101 102 AudioSystemManager *audioMngr_; 103 int32_t cachedClientId = -1; 104 std::shared_ptr<AudioManagerDeviceChangeCallback> deviceChangeCallbackNapi_ = nullptr; 105 std::shared_ptr<AudioManagerCallback> interruptCallbackNapi_ = nullptr; 106 std::shared_ptr<AudioRingerModeCallback> ringerModecallbackNapi_ = nullptr; 107 std::shared_ptr<VolumeKeyEventCallback> volumeKeyEventCallbackNapi_ = nullptr; 108 napi_env env_; 109 napi_ref wrapper_; 110 }; 111 112 static const std::map<std::string, DeviceChangeType> deviceChangeTypeMap = { 113 {"CONNECT", CONNECT}, 114 {"DISCONNECT", DISCONNECT} 115 }; 116 117 static const std::map<std::string, AudioScene> audioSceneMap = { 118 {"AUDIO_SCENE_DEFAULT", AUDIO_SCENE_DEFAULT}, 119 {"AUDIO_SCENE_RINGING", AUDIO_SCENE_RINGING}, 120 {"AUDIO_SCENE_PHONE_CALL", AUDIO_SCENE_PHONE_CALL}, 121 {"AUDIO_SCENE_VOICE_CHAT", AUDIO_SCENE_PHONE_CHAT} 122 }; 123 124 static const std::map<std::string, InterruptType> interruptTypeMap = { 125 {"INTERRUPT_TYPE_BEGIN", INTERRUPT_TYPE_BEGIN}, 126 {"INTERRUPT_TYPE_END", INTERRUPT_TYPE_END} 127 }; 128 129 static const std::map<std::string, InterruptHint> interruptHintMap = { 130 {"INTERRUPT_HINT_NONE", INTERRUPT_HINT_NONE}, 131 {"INTERRUPT_HINT_PAUSE", INTERRUPT_HINT_PAUSE}, 132 {"INTERRUPT_HINT_RESUME", INTERRUPT_HINT_RESUME}, 133 {"INTERRUPT_HINT_STOP", INTERRUPT_HINT_STOP}, 134 {"INTERRUPT_HINT_DUCK", INTERRUPT_HINT_DUCK}, 135 {"INTERRUPT_HINT_UNDUCK", INTERRUPT_HINT_UNDUCK} 136 }; 137 static const std::map<std::string, InterruptActionType> interruptActionTypeMap = { 138 {"TYPE_ACTIVATED", TYPE_ACTIVATED}, 139 {"TYPE_INTERRUPT", TYPE_INTERRUPT} 140 }; 141 } // namespace AudioStandard 142 } // namespace OHOS 143 #endif /* AUDIO_MNGR_NAPI_H_ */ 144