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 struct RegisterFromFdContext : public AsyncContext { 45 AudioHapticFileDescriptor audioFd; 46 AudioHapticFileDescriptor hapticFd; 47 int32_t sourceID; 48 }; 49 50 class AudioHapticManagerNapi { 51 public: 52 static napi_value Init(napi_env env, napi_value exports); 53 54 AudioHapticManagerNapi(); 55 ~AudioHapticManagerNapi(); 56 57 private: 58 static void Destructor(napi_env env, void *nativeObject, void *finalizeHint); 59 static napi_value Construct(napi_env env, napi_callback_info info); 60 static napi_value GetAudioHapticManager(napi_env env, napi_callback_info info); 61 static napi_status AddNamedProperty(napi_env env, napi_value object, const std::string name, int32_t enumValue); 62 static napi_value CreateAudioLatencyModeObject(napi_env env); 63 static napi_value CreateAudioHapticTypeObject(napi_env env); 64 65 static napi_value RegisterSource(napi_env env, napi_callback_info info); 66 static void AsyncRegisterSource(napi_env env, void *data); 67 static napi_value RegisterSourceFromFd(napi_env env, napi_callback_info info); 68 static void AsyncRegisterSourceFromFd(napi_env env, void *data); 69 static napi_value UnregisterSource(napi_env env, napi_callback_info info); 70 static napi_value SetAudioLatencyMode(napi_env env, napi_callback_info info); 71 static napi_value SetStreamUsage(napi_env env, napi_callback_info info); 72 static napi_value CreatePlayer(napi_env env, napi_callback_info info); 73 static void AsyncCreatePlayer(napi_env env, void *data); 74 75 static void RegisterSourceAsyncCallbackComp(napi_env env, napi_status status, void *data); 76 static void RegisterSourceFromFdAsyncCallbackComp(napi_env env, napi_status status, void *data); 77 static void UnregisterSourceAsyncCallbackComp(napi_env env, napi_status status, void *data); 78 static void CreatePlayerAsyncCallbackComp(napi_env env, napi_status status, void *data); 79 80 static bool IsLegalAudioLatencyMode(int32_t latencyMode); 81 static bool IsLegalAudioStreamUsage(int32_t streamUsage); 82 static int32_t GetAudioHapticFileDescriptorValue(napi_env env, napi_value object, 83 AudioHapticFileDescriptor& audioHapticFd); 84 85 static thread_local napi_ref sConstructor_; 86 static thread_local napi_ref sAudioLatencyMode_; 87 static thread_local napi_ref sAudioHapticType_; 88 89 napi_env env_; 90 91 std::shared_ptr<AudioHapticManager> audioHapticMgrClient_ = nullptr; 92 }; 93 94 struct AudioHapticManagerAsyncContext { 95 napi_env env; 96 napi_async_work work; 97 napi_deferred deferred; 98 bool status; 99 AudioHapticManagerNapi *objectInfo; 100 std::string audioUri; 101 std::string hapticUri; 102 std::shared_ptr<AudioHapticPlayer> audioHapticPlayer; 103 int32_t sourceID; 104 AudioHapticPlayerOptions playerOptions {false, false}; 105 std::string errMessage; 106 int32_t errCode; 107 }; 108 } // namespace Media 109 } // namespace OHOS 110 #endif // AUDIO_HAPTIC_MANAGER_NAPI_H