1 /* 2 * Copyright (c) 2023 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 #ifndef NAPI_AUDIO_ROUNTING_MANAGER_H 16 #define NAPI_AUDIO_ROUNTING_MANAGER_H 17 18 #include <iostream> 19 #include <map> 20 #include <vector> 21 #include "napi/native_api.h" 22 #include "napi/native_node_api.h" 23 #include "napi_async_work.h" 24 #include "audio_system_manager.h" 25 26 namespace OHOS { 27 namespace AudioStandard { 28 const std::string NAPI_AUDIO_ROUTING_MANAGER_CLASS_NAME = "AudioRoutingManager"; 29 class NapiAudioRoutingManager { 30 public: 31 NapiAudioRoutingManager(); 32 ~NapiAudioRoutingManager(); 33 34 static napi_value Init(napi_env env, napi_value exports); 35 static napi_value CreateRoutingManagerWrapper(napi_env env); 36 37 private: 38 struct AudioRoutingManagerAsyncContext : public ContextBase { 39 int32_t deviceFlag; 40 int32_t deviceType; 41 int32_t intValue; 42 bool isActive; 43 bool isTrue; 44 bool bArgTransFlag = true; 45 bool supported = false; 46 AudioRendererInfo rendererInfo; 47 AudioCapturerInfo captureInfo; 48 sptr<AudioRendererFilter> audioRendererFilter; 49 sptr<AudioCapturerFilter> audioCapturerFilter; 50 std::vector<sptr<AudioDeviceDescriptor>> deviceDescriptors; 51 std::vector<sptr<AudioDeviceDescriptor>> outDeviceDescriptors; 52 std::vector<sptr<AudioDeviceDescriptor>> inputDeviceDescriptors; 53 }; 54 55 #if !defined(IOS_PLATFORM) && !defined(ANDROID_PLATFORM) 56 static napi_value IsMicBlockDetectionSupported(napi_env env, napi_callback_info info); 57 #endif 58 static napi_value GetDevices(napi_env env, napi_callback_info info); 59 static napi_value GetDevicesSync(napi_env env, napi_callback_info info); 60 static napi_value On(napi_env env, napi_callback_info info); 61 static napi_value Off(napi_env env, napi_callback_info info); 62 static napi_value SelectOutputDevice(napi_env env, napi_callback_info info); 63 static napi_value SelectOutputDeviceByFilter(napi_env env, napi_callback_info info); 64 static napi_value SelectInputDevice(napi_env env, napi_callback_info info); 65 static napi_value SelectInputDeviceByFilter(napi_env env, napi_callback_info info); 66 static napi_value SetCommunicationDevice(napi_env env, napi_callback_info info); 67 static napi_value IsCommunicationDeviceActive(napi_env env, napi_callback_info info); 68 static napi_value IsCommunicationDeviceActiveSync(napi_env env, napi_callback_info info); 69 static napi_value GetActiveOutputDeviceDescriptors(napi_env env, napi_callback_info info); 70 static napi_value GetPreferredOutputDeviceForRendererInfo(napi_env env, napi_callback_info info); 71 static napi_value GetPreferOutputDeviceForRendererInfo(napi_env env, napi_callback_info info); 72 static napi_value GetPreferredOutputDeviceForRendererInfoSync(napi_env env, napi_callback_info info); 73 static napi_value GetPreferredInputDeviceForCapturerInfo(napi_env env, napi_callback_info info); 74 static napi_value GetPreferredInputDeviceForCapturerInfoSync(napi_env env, napi_callback_info info); 75 static napi_value GetAvailableMicrophones(napi_env env, napi_callback_info info); 76 static napi_value GetAvailableDevices(napi_env env, napi_callback_info info); 77 static napi_value RegisterCallback(napi_env env, napi_value jsThis, size_t argc, napi_value *args, 78 const std::string &cbName); 79 static void RegisterDeviceChangeCallback(napi_env env, size_t argc, napi_value *args, const std::string &cbName, 80 NapiAudioRoutingManager *napiRoutingMgr); 81 static void RegisterPreferredOutputDeviceChangeCallback(napi_env env, size_t argc, napi_value *args, 82 const std::string &cbName, NapiAudioRoutingManager *napiRoutingMgr); 83 static void RegisterPreferredInputDeviceChangeCallback(napi_env env, size_t argc, napi_value *args, 84 const std::string &cbName, NapiAudioRoutingManager *napiRoutingMgr); 85 static void RegisterAvaiableDeviceChangeCallback(napi_env env, size_t argc, napi_value *args, 86 const std::string &cbName, NapiAudioRoutingManager *napiRoutingMgr); 87 static void UnregisterDeviceChangeCallback(napi_env env, napi_value callback, 88 NapiAudioRoutingManager *napiRoutingMgr); 89 static void UnregisterPreferredOutputDeviceChangeCallback(napi_env env, napi_value callback, 90 NapiAudioRoutingManager *napiRoutingMgr); 91 static void UnregisterPreferredInputDeviceChangeCallback(napi_env env, napi_value callback, 92 NapiAudioRoutingManager *napiRoutingMgr); 93 static void UnregisterAvailableDeviceChangeCallback(napi_env env, napi_value callback, 94 NapiAudioRoutingManager *napiRoutingMgr); 95 static napi_value UnregisterCallback(napi_env env, napi_value jsThis, const std::string &callbackName, 96 napi_value callback); 97 static napi_value Construct(napi_env env, napi_callback_info info); 98 static void Destructor(napi_env env, void *nativeObject, void *finalizeHint); 99 100 static bool CheckContextStatus(std::shared_ptr<AudioRoutingManagerAsyncContext> context); 101 static bool CheckAudioRoutingManagerStatus(NapiAudioRoutingManager *napi, 102 std::shared_ptr<AudioRoutingManagerAsyncContext> context); 103 static NapiAudioRoutingManager* GetParamWithSync(const napi_env &env, napi_callback_info info, 104 size_t &argc, napi_value *args); 105 106 static void RegisterMicrophoneBlockedCallback(napi_env env, size_t argc, napi_value *args, 107 const std::string &cbName, NapiAudioRoutingManager *napiRoutingMgr); 108 static void UnregisterMicrophoneBlockedCallback(napi_env env, napi_value callback, 109 NapiAudioRoutingManager *napiRoutingMgr); 110 111 static int32_t NapiAudioRountingMicroPhoneBlockCallback(); 112 113 AudioSystemManager *audioMngr_; 114 AudioRoutingManager *audioRoutingMngr_ = nullptr; 115 std::shared_ptr<AudioManagerDeviceChangeCallback> deviceChangeCallbackNapi_ = nullptr; 116 std::shared_ptr<AudioManagerMicStateChangeCallback> micStateChangeCallbackNapi_ = nullptr; 117 std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> preferredOutputDeviceCallbackNapi_ = nullptr; 118 std::shared_ptr<AudioPreferredInputDeviceChangeCallback> preferredInputDeviceCallbackNapi_ = nullptr; 119 std::shared_ptr<AudioManagerAvailableDeviceChangeCallback> availableDeviceChangeCallbackNapi_ = nullptr; 120 std::shared_ptr<AudioManagerMicrophoneBlockedCallback> microphoneBlockedCallbackNapi_ = nullptr; 121 122 napi_env env_; 123 }; 124 } // namespace AudioStandard 125 } // namespace OHOS 126 #endif /* NAPI_AUDIO_ROUNTING_MANAGER_H */