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_renderer_info_napi.h" 22 #include "audio_system_manager.h" 23 #include "audio_manager_callback_napi.h" 24 #include "audio_routing_manager.h" 25 26 namespace OHOS { 27 namespace AudioStandard { 28 static const std::string AUDIO_ROUTING_MANAGER_NAPI_CLASS_NAME = "AudioRoutingManager"; 29 30 struct AudioRoutingManagerAsyncContext; 31 class AudioRoutingManagerNapi { 32 public: 33 AudioRoutingManagerNapi(); 34 ~AudioRoutingManagerNapi(); 35 36 static napi_value Init(napi_env env, napi_value exports); 37 static napi_value CreateRoutingManagerWrapper(napi_env env); 38 private: 39 static napi_value GetDevices(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 GetActiveOutputDeviceDescriptors(napi_env env, napi_callback_info info); 51 52 static void RegisterDeviceChangeCallback(napi_env env, napi_value* args, const std::string& cbName, int32_t flag, 53 AudioRoutingManagerNapi* routingMgrNapi); 54 static void RegisterCallback(napi_env env, napi_value jsThis, napi_value* args, const std::string& cbName, 55 int32_t flag); 56 static napi_value On(napi_env env, napi_callback_info info); 57 static napi_value Off(napi_env env, napi_callback_info info); 58 59 static napi_value Construct(napi_env env, napi_callback_info info); 60 static void Destructor(napi_env env, void *nativeObject, void *finalize_hint); 61 AudioSystemManager *audioMngr_; 62 AudioRoutingManager *audioRoutingMngr_; 63 std::shared_ptr<AudioManagerDeviceChangeCallback> deviceChangeCallbackNapi_ = nullptr; 64 std::shared_ptr<AudioManagerMicStateChangeCallback> micStateChangeCallbackNapi_ = nullptr; 65 66 napi_env env_; 67 }; 68 } // namespace AudioStandard 69 } // namespace OHOS 70 #endif /* AUDIO_ROUTING_MANAGER_NAPI_H_ */ 71