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 16 #ifndef AUDIO_HAPTIC_MANAGER_NAPI_H 17 #define AUDIO_HAPTIC_MANAGER_NAPI_H 18 19 #include "audio_haptic_manager.h" 20 21 #include "napi/native_api.h" 22 #include "napi/native_node_api.h" 23 24 #include "audio_info.h" 25 26 #include "audio_haptic_common_napi.h" 27 #include "audio_haptic_player_napi.h" 28 #include "audio_haptic_player_options_napi.h" 29 30 namespace OHOS { 31 namespace Media { 32 static const std::string AUDIO_HAPTIC_MANAGER_NAPI_CLASS_NAME = "AudioHapticManager"; 33 34 static const std::map<std::string, AudioLatencyMode> audioLatencyModeMap = { 35 {"AUDIO_LATENCY_MODE_NORMAL", AUDIO_LATENCY_MODE_NORMAL}, 36 {"AUDIO_LATENCY_MODE_FAST", AUDIO_LATENCY_MODE_FAST} 37 }; 38 39 static const std::map<std::string, AudioHapticType> audioHapticTypeMap = { 40 {"AUDIO_HAPTIC_TYPE_AUDIO", AUDIO_HAPTIC_TYPE_AUDIO}, 41 {"AUDIO_HAPTIC_TYPE_HAPTIC", AUDIO_HAPTIC_TYPE_HAPTIC} 42 }; 43 44 class AudioHapticManagerNapi { 45 public: 46 static napi_value Init(napi_env env, napi_value exports); 47 48 AudioHapticManagerNapi(); 49 ~AudioHapticManagerNapi(); 50 51 private: 52 static void Destructor(napi_env env, void *nativeObject, void *finalizeHint); 53 static napi_value Construct(napi_env env, napi_callback_info info); 54 static napi_value GetAudioHapticManager(napi_env env, napi_callback_info info); 55 static napi_status AddNamedProperty(napi_env env, napi_value object, const std::string name, int32_t enumValue); 56 static napi_value CreateAudioLatencyModeObject(napi_env env); 57 static napi_value CreateAudioHapticTypeObject(napi_env env); 58 59 static napi_value RegisterSource(napi_env env, napi_callback_info info); 60 static void AsyncRegisterSource(napi_env env, void *data); 61 static napi_value UnregisterSource(napi_env env, napi_callback_info info); 62 static napi_value SetAudioLatencyMode(napi_env env, napi_callback_info info); 63 static napi_value SetStreamUsage(napi_env env, napi_callback_info info); 64 static napi_value CreatePlayer(napi_env env, napi_callback_info info); 65 static void AsyncCreatePlayer(napi_env env, void *data); 66 67 static void RegisterSourceAsyncCallbackComp(napi_env env, napi_status status, void *data); 68 static void UnregisterSourceAsyncCallbackComp(napi_env env, napi_status status, void *data); 69 static void CreatePlayerAsyncCallbackComp(napi_env env, napi_status status, void *data); 70 71 static bool IsLegalAudioLatencyMode(int32_t latencyMode); 72 static bool IsLegalAudioStreamUsage(int32_t streamUsage); 73 74 static thread_local napi_ref sConstructor_; 75 static thread_local napi_ref sAudioLatencyMode_; 76 static thread_local napi_ref sAudioHapticType_; 77 78 napi_env env_; 79 80 std::shared_ptr<AudioHapticManager> audioHapticMgrClient_ = nullptr; 81 }; 82 83 struct AudioHapticManagerAsyncContext { 84 napi_env env; 85 napi_async_work work; 86 napi_deferred deferred; 87 bool status; 88 AudioHapticManagerNapi *objectInfo; 89 std::string audioUri; 90 std::string hapticUri; 91 std::shared_ptr<AudioHapticPlayer> audioHapticPlayer; 92 int32_t sourceID; 93 AudioHapticPlayerOptions playerOptions {false, false}; 94 std::string errMessage; 95 int32_t errCode; 96 }; 97 } // namespace Media 98 } // namespace OHOS 99 #endif // AUDIO_HAPTIC_MANAGER_NAPI_H