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 #ifndef NAPI_PARAM_UTILS_H 16 #define NAPI_PARAM_UTILS_H 17 18 #include <cstdint> 19 #include <map> 20 #include <list> 21 #if defined(ANDROID_PLATFORM) || defined(IOS_PLATFORM) 22 #include <securec.h> 23 #else 24 #include "ability.h" 25 #endif 26 #include "napi/native_api.h" 27 #include "napi/native_common.h" 28 #include "napi/native_node_api.h" 29 #include "napi_base_context.h" 30 #include "audio_common_log.h" 31 #include "audio_info.h" 32 #include "audio_capturer.h" 33 #include "audio_system_manager.h" 34 #include "audio_stream_manager.h" 35 36 namespace OHOS { 37 namespace AudioStandard { 38 const int ARGS_ONE = 1; 39 const int ARGS_TWO = 2; 40 const int ARGS_THREE = 3; 41 42 const int PARAM0 = 0; 43 const int PARAM1 = 1; 44 const int PARAM2 = 2; 45 46 const std::vector<DeviceRole> DEVICE_ROLE_SET = { 47 DEVICE_ROLE_NONE, 48 INPUT_DEVICE, 49 OUTPUT_DEVICE 50 }; 51 52 const std::vector<DeviceType> DEVICE_TYPE_SET = { 53 DEVICE_TYPE_NONE, 54 DEVICE_TYPE_INVALID, 55 DEVICE_TYPE_EARPIECE, 56 DEVICE_TYPE_SPEAKER, 57 DEVICE_TYPE_WIRED_HEADSET, 58 DEVICE_TYPE_WIRED_HEADPHONES, 59 DEVICE_TYPE_BLUETOOTH_SCO, 60 DEVICE_TYPE_BLUETOOTH_A2DP, 61 DEVICE_TYPE_MIC, 62 DEVICE_TYPE_WAKEUP, 63 DEVICE_TYPE_USB_HEADSET, 64 DEVICE_TYPE_DP, 65 DEVICE_TYPE_REMOTE_CAST, 66 DEVICE_TYPE_USB_ARM_HEADSET, 67 DEVICE_TYPE_FILE_SINK, 68 DEVICE_TYPE_FILE_SOURCE, 69 DEVICE_TYPE_EXTERN_CABLE, 70 DEVICE_TYPE_DEFAULT 71 }; 72 73 /* check condition related to argc/argv, return and logging. */ 74 #define NAPI_CHECK_ARGS_RETURN_VOID(context, condition, message, code) \ 75 do { \ 76 if (!(condition)) { \ 77 (context)->status = napi_invalid_arg; \ 78 (context)->errMessage = std::string(message); \ 79 (context)->errCode = code; \ 80 AUDIO_ERR_LOG("test (" #condition ") failed: " message); \ 81 return; \ 82 } \ 83 } while (0) 84 85 #define NAPI_CHECK_STATUS_RETURN_VOID(context, message, code) \ 86 do { \ 87 if ((context)->status != napi_ok) { \ 88 (context)->errMessage = std::string(message); \ 89 (context)->errCode = code; \ 90 AUDIO_ERR_LOG("test (context->status == napi_ok) failed: " message); \ 91 return; \ 92 } \ 93 } while (0) 94 95 class NapiParamUtils { 96 public: 97 static napi_status GetParam(const napi_env &env, napi_callback_info info, size_t &argc, napi_value *args); 98 static napi_status GetValueInt32(const napi_env &env, int32_t &value, napi_value in); 99 static napi_status SetValueInt32(const napi_env &env, const int32_t &value, napi_value &result); 100 static napi_status GetValueInt32(const napi_env &env, const std::string &fieldStr, int32_t &value, napi_value in); 101 static napi_status SetValueInt32(const napi_env &env, const std::string &fieldStr, 102 const int32_t value, napi_value &result); 103 104 static napi_status GetValueUInt32(const napi_env &env, uint32_t &value, napi_value in); 105 static napi_status SetValueUInt32(const napi_env &env, const uint32_t &value, napi_value &result); 106 107 static napi_status GetValueDouble(const napi_env &env, double &value, napi_value in); 108 static napi_status SetValueDouble(const napi_env &env, const double &value, napi_value &result); 109 static napi_status GetValueDouble(const napi_env &env, const std::string &fieldStr, double &value, napi_value in); 110 static napi_status SetValueDouble(const napi_env &env, const std::string &fieldStr, 111 const double value, napi_value &result); 112 113 static std::string GetStringArgument(napi_env env, napi_value value); 114 static std::string GetPropertyString(napi_env env, napi_value value, const std::string &fieldStr); 115 static napi_status SetValueString(const napi_env &env, const std::string &stringValue, napi_value &result); 116 static napi_status SetValueString(const napi_env &env, const std::string &fieldStr, const std::string &stringValue, 117 napi_value &result); 118 119 static napi_status GetValueBoolean(const napi_env &env, bool &boolValue, napi_value in); 120 static napi_status SetValueBoolean(const napi_env &env, const bool boolValue, napi_value &result); 121 static napi_status GetValueBoolean(const napi_env &env, const std::string &fieldStr, 122 bool &boolValue, napi_value in); 123 static napi_status SetValueBoolean(const napi_env &env, const std::string &fieldStr, 124 const bool boolValue, napi_value &result); 125 126 static napi_status GetValueInt64(const napi_env &env, int64_t &value, napi_value in); 127 static napi_status SetValueInt64(const napi_env &env, const int64_t &value, napi_value &result); 128 static napi_status GetValueInt64(const napi_env &env, const std::string &fieldStr, int64_t &value, napi_value in); 129 static napi_status SetValueInt64(const napi_env &env, const std::string &fieldStr, 130 const int64_t value, napi_value &result); 131 static napi_status GetArrayBuffer(const napi_env &env, void* &data, size_t &length, napi_value in); 132 static napi_status CreateArrayBuffer(const napi_env &env, const std::string &fieldStr, size_t bufferLen, 133 uint8_t *bufferData, napi_value &result); 134 static napi_status CreateArrayBuffer(const napi_env &env, const size_t bufferLen, 135 const uint8_t *bufferData, napi_value &result); 136 137 static napi_value GetUndefinedValue(napi_env env); 138 139 /* NapiAudioRenderer Get&&Set object */ 140 static void ConvertDeviceInfoToAudioDeviceDescriptor(sptr<AudioDeviceDescriptor> audioDeviceDescriptor, 141 const DeviceInfo &deviceInfo); 142 static napi_status GetRendererOptions(const napi_env &env, AudioRendererOptions *opts, napi_value in); 143 static napi_status GetRendererInfo(const napi_env &env, AudioRendererInfo *rendererInfo, napi_value in); 144 static napi_status SetRendererInfo(const napi_env &env, const AudioRendererInfo &rendererInfo, napi_value &result); 145 static napi_status GetStreamInfo(const napi_env &env, AudioStreamInfo *streamInfo, napi_value in); 146 static napi_status SetStreamInfo(const napi_env &env, const AudioStreamInfo &streamInfo, napi_value &result); 147 static napi_status SetValueInt32Element(const napi_env &env, const std::string &fieldStr, 148 const std::vector<int32_t> &values, napi_value &result); 149 static napi_status SetDeviceDescriptor(const napi_env &env, const AudioDeviceDescriptor &deviceInfo, 150 napi_value &result); 151 static napi_status SetDeviceDescriptors(const napi_env &env, 152 const std::vector<sptr<AudioDeviceDescriptor>> &deviceDescriptors, napi_value &result); 153 static napi_status SetAudioSpatialEnabledStateForDevice(const napi_env &env, 154 const AudioSpatialEnabledStateForDevice audioSpatialEnabledStateForDevice, napi_value &result); 155 static napi_status SetValueDeviceInfo(const napi_env &env, const DeviceInfo &deviceInfo, napi_value &result); 156 static napi_status SetInterruptEvent(const napi_env &env, const InterruptEvent &interruptEvent, 157 napi_value &result); 158 static napi_status SetNativeAudioRendererDataInfo(const napi_env &env, 159 const AudioRendererDataInfo &audioRendererDataInfo, napi_value &result); 160 161 /* NapiAudioCapturer Get&&Set object */ 162 static napi_status GetCapturerInfo(const napi_env &env, AudioCapturerInfo *capturerInfo, napi_value in); 163 static napi_status SetCapturerInfo(const napi_env &env, const AudioCapturerInfo &capturerInfo, napi_value &result); 164 static napi_status GetCaptureFilterOptionsVector(const napi_env &env, 165 CaptureFilterOptions *filterOptions, napi_value in); 166 static napi_status GetPlaybackCaptureConfig(const napi_env &env, 167 AudioPlaybackCaptureConfig* captureConfig, napi_value in); 168 static napi_status GetCapturerOptions(const napi_env &env, AudioCapturerOptions *opts, napi_value in); 169 static napi_status SetAudioCapturerChangeInfoDescriptors(const napi_env &env, 170 const AudioCapturerChangeInfo &changeInfo, napi_value &result); 171 static napi_status SetMicrophoneDescriptor(const napi_env &env, const sptr<MicrophoneDescriptor> &micDesc, 172 napi_value &result); 173 static napi_status SetMicrophoneDescriptors(const napi_env &env, 174 const std::vector<sptr<MicrophoneDescriptor>> &micDescs, napi_value &result); 175 176 /* NapiAudioManager Get&&Set object */ 177 static napi_status SetValueMicStateChange(const napi_env &env, const MicStateChangeEvent &micStateChangeEvent, 178 napi_value &result); 179 static napi_status SetVolumeGroupInfos(const napi_env &env, 180 const std::vector<sptr<VolumeGroupInfo>> &volumeGroupInfos, napi_value &result); 181 static napi_status SetValueVolumeEvent(const napi_env& env, const VolumeEvent &volumeEvent, 182 napi_value &result); 183 static napi_status GetAudioDeviceDescriptor(const napi_env &env, sptr<AudioDeviceDescriptor> &selectedAudioDevice, 184 bool &argTransFlag, napi_value in); 185 static napi_status GetAudioDeviceDescriptorVector(const napi_env &env, 186 std::vector<sptr<AudioDeviceDescriptor>> &deviceDescriptorsVector, bool &argTransFlag, napi_value in); 187 static napi_status GetAudioCapturerFilter(const napi_env &env, sptr<AudioCapturerFilter> &audioCapturerFilter, 188 napi_value in); 189 static napi_status GetAudioCapturerInfo(const napi_env &env, AudioCapturerInfo *capturerInfo, napi_value in); 190 static napi_status GetAudioRendererFilter(const napi_env &env, sptr<AudioRendererFilter> &audioRendererFilter, 191 bool &argTransFlag, napi_value in); 192 static napi_status SetValueDeviceChangeAction(const napi_env& env, const DeviceChangeAction &action, 193 napi_value &result); 194 static napi_status SetValueBlockedDeviceAction(const napi_env& env, const MicrophoneBlockedInfo &action, 195 napi_value &result); 196 static napi_status SetRendererChangeInfos(const napi_env &env, 197 const std::vector<std::unique_ptr<AudioRendererChangeInfo>> &changeInfos, napi_value &result); 198 static napi_status SetCapturerChangeInfos(const napi_env &env, 199 const std::vector<std::unique_ptr<AudioCapturerChangeInfo>> &changeInfos, napi_value &result); 200 static napi_status SetEffectInfo(const napi_env &env, 201 const AudioSceneEffectInfo &audioSceneEffectInfo, napi_value &result); 202 static napi_status GetAudioInterrupt(const napi_env &env, AudioInterrupt &audioInterrupt, napi_value in); 203 static napi_status SetValueInterruptAction(const napi_env &env, const InterruptAction &interruptAction, 204 napi_value &result); 205 static napi_status GetSpatialDeviceState(napi_env env, AudioSpatialDeviceState *spatialDeviceState, 206 napi_value in); 207 static napi_status GetExtraParametersSubKV(napi_env env, std::vector<std::pair<std::string, std::string>> &subKV, 208 napi_value in); 209 static napi_status GetExtraParametersVector(const napi_env &env, std::vector<std::string> &subKeys, napi_value in); 210 static napi_status SetExtraAudioParametersInfo(const napi_env &env, 211 const std::vector<std::pair<std::string, std::string>> &extraParameters, napi_value &result); 212 static napi_status GetAudioSessionStrategy(const napi_env &env, 213 AudioSessionStrategy &audioSessionStrategy, napi_value in); 214 static napi_status SetAudioSessionDeactiveEvent(const napi_env &env, 215 const AudioSessionDeactiveEvent &deactiveEvent, napi_value &result); 216 }; 217 } // namespace AudioStandard 218 } // namespace OHOS 219 #endif // NAPI_PARAM_UTILS_H 220