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 TONE_PLAYER_NAPI_H_ 17 #define TONE_PLAYER_NAPI_H_ 18 19 #include <map> 20 21 #include "napi/native_api.h" 22 #include "napi/native_node_api.h" 23 #include "tone_player.h" 24 namespace OHOS { 25 namespace AudioStandard { 26 static const std::string TONE_PLAYER_NAPI_CLASS_NAME = "TonePlayer"; 27 static const std::int32_t toneTypeArr[27] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 28 100, 101, 102, 103, 104, 106, 107, 200, 201, 203, 204}; 29 30 static const std::map<std::string, ToneType> toneTypeMap = { 31 {"TONE_TYPE_DIAL_0", TONE_TYPE_DIAL_0}, 32 {"TONE_TYPE_DIAL_1", TONE_TYPE_DIAL_1}, 33 {"TONE_TYPE_DIAL_2", TONE_TYPE_DIAL_2}, 34 {"TONE_TYPE_DIAL_3", TONE_TYPE_DIAL_3}, 35 {"TONE_TYPE_DIAL_4", TONE_TYPE_DIAL_4}, 36 {"TONE_TYPE_DIAL_5", TONE_TYPE_DIAL_5}, 37 {"TONE_TYPE_DIAL_6", TONE_TYPE_DIAL_6}, 38 {"TONE_TYPE_DIAL_7", TONE_TYPE_DIAL_7}, 39 {"TONE_TYPE_DIAL_8", TONE_TYPE_DIAL_8}, 40 {"TONE_TYPE_DIAL_9", TONE_TYPE_DIAL_9}, 41 {"TONE_TYPE_DIAL_S", TONE_TYPE_DIAL_S}, 42 {"TONE_TYPE_DIAL_P", TONE_TYPE_DIAL_P}, 43 {"TONE_TYPE_DIAL_A", TONE_TYPE_DIAL_A}, 44 {"TONE_TYPE_DIAL_B", TONE_TYPE_DIAL_B}, 45 {"TONE_TYPE_DIAL_C", TONE_TYPE_DIAL_C}, 46 {"TONE_TYPE_DIAL_D", TONE_TYPE_DIAL_D}, 47 {"TONE_TYPE_COMMON_SUPERVISORY_DIAL", TONE_TYPE_COMMON_SUPERVISORY_DIAL}, 48 {"TONE_TYPE_COMMON_SUPERVISORY_BUSY", TONE_TYPE_COMMON_SUPERVISORY_BUSY}, 49 {"TONE_TYPE_COMMON_SUPERVISORY_CONGESTION", TONE_TYPE_COMMON_SUPERVISORY_CONGESTION}, 50 {"TONE_TYPE_COMMON_SUPERVISORY_RADIO_ACK", TONE_TYPE_COMMON_SUPERVISORY_RADIO_ACK}, 51 {"TONE_TYPE_COMMON_SUPERVISORY_RADIO_NOT_AVAILABLE", TONE_TYPE_COMMON_SUPERVISORY_RADIO_NOT_AVAILABLE}, 52 {"TONE_TYPE_COMMON_SUPERVISORY_CALL_WAITING", TONE_TYPE_COMMON_SUPERVISORY_CALL_WAITING}, 53 {"TONE_TYPE_COMMON_SUPERVISORY_RINGTONE", TONE_TYPE_COMMON_SUPERVISORY_RINGTONE}, 54 {"TONE_TYPE_COMMON_PROPRIETARY_BEEP", TONE_TYPE_COMMON_PROPRIETARY_BEEP}, 55 {"TONE_TYPE_COMMON_PROPRIETARY_ACK", TONE_TYPE_COMMON_PROPRIETARY_ACK}, 56 {"TONE_TYPE_COMMON_PROPRIETARY_PROMPT", TONE_TYPE_COMMON_PROPRIETARY_PROMPT}, 57 {"TONE_TYPE_COMMON_PROPRIETARY_DOUBLE_BEEP", TONE_TYPE_COMMON_PROPRIETARY_DOUBLE_BEEP}, 58 }; 59 60 class TonePlayerNapi { 61 public: 62 TonePlayerNapi(); 63 ~TonePlayerNapi(); 64 static napi_value Init(napi_env env, napi_value exports); 65 private: 66 struct TonePlayerAsyncContext { 67 napi_env env; 68 napi_async_work work; 69 napi_deferred deferred; 70 napi_ref callbackRef = nullptr; 71 bool isTrue; 72 int32_t intValue; 73 TonePlayerNapi *objectInfo; 74 AudioRendererInfo rendererInfo; 75 int32_t toneType; 76 int32_t status; 77 }; 78 static void Destructor(napi_env env, void *nativeObject, void *finalize_hint); 79 static napi_value Construct(napi_env env, napi_callback_info info); 80 static bool ParseRendererInfo(napi_env env, napi_value root, AudioRendererInfo *rendererInfo); 81 static napi_value CreateTonePlayer(napi_env env, napi_callback_info info); 82 static bool toneTypeCheck(napi_env env, int32_t type); 83 static napi_value Load(napi_env env, napi_callback_info info); 84 static napi_value Start(napi_env env, napi_callback_info info); 85 static napi_value Stop(napi_env env, napi_callback_info info); 86 static napi_value Release(napi_env env, napi_callback_info info); 87 static napi_status AddNamedProperty(napi_env env, napi_value object, const std::string name, int32_t enumValue); 88 static napi_value CreateTonePlayerWrapper(napi_env env, std::unique_ptr<AudioRendererInfo> &rendererInfo); 89 static napi_value CreateToneTypeObject(napi_env env); 90 static void CommonCallbackRoutine(napi_env env, TonePlayerAsyncContext* &asyncContext, 91 const napi_value &valueParam); 92 static void VoidAsyncCallbackComplete(napi_env env, napi_status status, void *data); 93 static void GetTonePlayerAsyncCallbackComplete(napi_env env, napi_status status, void *data); 94 static std::unique_ptr<AudioRendererInfo> sRendererInfo_; 95 static napi_ref toneType_; 96 static std::mutex createMutex_; 97 napi_env env_; 98 std::shared_ptr<TonePlayer> tonePlayer_; 99 }; 100 } // namespace AudioStandard 101 } // namespace OHOS 102 #endif // TONE_PLAYER_NAPI_H_