1 /* 2 * Copyright (c) 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_ROUTING_MANAGER_NAPI_H_ 17 #define AUDIO_ROUTING_MANAGER_NAPI_H_ 18 19 #include "napi/native_api.h" 20 #include "napi/native_node_api.h" 21 #include "audio_system_manager.h" 22 #include "audio_manager_callback_napi.h" 23 #include "audio_routing_manager.h" 24 25 namespace OHOS { 26 namespace AudioStandard { 27 static const std::string AUDIO_ROUTING_MANAGER_NAPI_CLASS_NAME = "AudioRoutingManager"; 28 29 struct AudioRoutingManagerAsyncContext; 30 class AudioRoutingManagerNapi { 31 public: 32 AudioRoutingManagerNapi(); 33 ~AudioRoutingManagerNapi(); 34 35 static napi_value Init(napi_env env, napi_value exports); 36 static napi_value CreateRoutingManagerWrapper(napi_env env); 37 private: 38 static napi_value GetDevices(napi_env env, napi_callback_info info); 39 static napi_value GetDevicesSync(napi_env env, napi_callback_info info); 40 41 static void CheckParams(size_t argc, napi_env env, napi_value* argv, 42 std::unique_ptr<AudioRoutingManagerAsyncContext>& asyncContext, const int32_t refCount, napi_value& result); 43 44 static napi_value SelectOutputDevice(napi_env env, napi_callback_info info); 45 static napi_value SelectInputDevice(napi_env env, napi_callback_info info); 46 static napi_value SelectOutputDeviceByFilter(napi_env env, napi_callback_info info); 47 static napi_value SelectInputDeviceByFilter(napi_env env, napi_callback_info info); 48 static napi_value SetCommunicationDevice(napi_env env, napi_callback_info info); 49 static napi_value IsCommunicationDeviceActive(napi_env env, napi_callback_info info); 50 static napi_value IsCommunicationDeviceActiveSync(napi_env env, napi_callback_info info); 51 static napi_value GetActiveOutputDeviceDescriptors(napi_env env, napi_callback_info info); 52 static napi_value GetPreferOutputDeviceForRendererInfo(napi_env env, napi_callback_info info); 53 static napi_value GetPreferredOutputDeviceForRendererInfo(napi_env env, napi_callback_info info); 54 static napi_value GetPreferredOutputDeviceForRendererInfoSync(napi_env env, napi_callback_info info); 55 static napi_value GetPreferredInputDeviceForCapturerInfo(napi_env env, napi_callback_info info); 56 static napi_value GetPreferredInputDeviceForCapturerInfoSync(napi_env env, napi_callback_info info); 57 static bool CheckPreferredInputDeviceForCaptureInfo(napi_env env, 58 std::unique_ptr<AudioRoutingManagerAsyncContext> &asyncContext, size_t argc, napi_value *argv); 59 static bool CheckPreferredOutputDeviceForRendererInfo(napi_env env, 60 std::unique_ptr<AudioRoutingManagerAsyncContext>& asyncContext, size_t argc, napi_value* argv); 61 static void RegisterDeviceChangeCallback(napi_env env, size_t argc, napi_value* args, const std::string& cbName, 62 AudioRoutingManagerNapi* routingMgrNapi); 63 static void RegisterPreferredOutputDeviceChangeCallback(napi_env env, size_t argc, napi_value* args, 64 const std::string& cbName, AudioRoutingManagerNapi* routingMgrNapi); 65 static void RegisterPreferredInputDeviceChangeCallback(napi_env env, size_t argc, napi_value *args, 66 const std::string &cbName, AudioRoutingManagerNapi *routingMgrNapi); 67 static void RegisterCallback(napi_env env, napi_value jsThis, size_t argc, napi_value* args, 68 const std::string& cbName); 69 static void UnregisterDeviceChangeCallback(napi_env env, napi_value callback, 70 AudioRoutingManagerNapi* routingMgrNapi); 71 static void UnregisterPreferredOutputDeviceChangeCallback(napi_env env, napi_value callback, 72 AudioRoutingManagerNapi* routingMgrNapi); 73 static void UnregisterPreferredInputDeviceChangeCallback(napi_env env, napi_value callback, 74 AudioRoutingManagerNapi *routingMgrNapi); 75 static napi_value UnregisterCallback(napi_env env, napi_value jsThis, const std::string& callbackName, 76 napi_value callback); 77 static napi_value On(napi_env env, napi_callback_info info); 78 static napi_value Off(napi_env env, napi_callback_info info); 79 80 static napi_value Construct(napi_env env, napi_callback_info info); 81 static void Destructor(napi_env env, void *nativeObject, void *finalize_hint); 82 AudioSystemManager *audioMngr_; 83 AudioRoutingManager *audioRoutingMngr_; 84 std::shared_ptr<AudioManagerDeviceChangeCallback> deviceChangeCallbackNapi_ = nullptr; 85 std::shared_ptr<AudioManagerMicStateChangeCallback> micStateChangeCallbackNapi_ = nullptr; 86 std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> preferredOutputDeviceCallbackNapi_ = nullptr; 87 std::shared_ptr<AudioPreferredInputDeviceChangeCallback> preferredInputDeviceCallbackNapi_ = nullptr; 88 89 napi_env env_; 90 }; 91 } // namespace AudioStandard 92 } // namespace OHOS 93 #endif /* AUDIO_ROUTING_MANAGER_NAPI_H_ */ 94