From aaa7f52260be1313ef93a70c644ce13110fe0af5 Mon Sep 17 00:00:00 2001 From: mayunteng_1 Date: Mon, 25 Mar 2024 07:08:08 +0000 Subject: [PATCH 1/2] 111 Signed-off-by: mayunteng_1 Change-Id: Iee31c9b5470ced51f15a672b9d5167d4114160b6 --- OAT.xml | 2 + frameworks/js/napi/include/sensor_js.h | 2 +- .../js/napi/include/sensor_napi_utils.h | 9 +++ frameworks/js/napi/src/sensor_js.cpp | 77 +++++++++++++++++++ 4 files changed, 89 insertions(+), 1 deletion(-) diff --git a/OAT.xml b/OAT.xml index 9c356f7c..0a7c3aa8 100755 --- a/OAT.xml +++ b/OAT.xml @@ -40,6 +40,7 @@ + @@ -53,6 +54,7 @@ + diff --git a/frameworks/js/napi/include/sensor_js.h b/frameworks/js/napi/include/sensor_js.h index bf75795c..f96aa2cc 100644 --- a/frameworks/js/napi/include/sensor_js.h +++ b/frameworks/js/napi/include/sensor_js.h @@ -14,7 +14,7 @@ */ #ifndef SENSOR_JS_H #define SENSOR_JS_H - +#include "sensor_napi_utils.h" #include "napi/native_api.h" #include "napi/native_node_api.h" diff --git a/frameworks/js/napi/include/sensor_napi_utils.h b/frameworks/js/napi/include/sensor_napi_utils.h index ca4549ea..099f4432 100644 --- a/frameworks/js/napi/include/sensor_napi_utils.h +++ b/frameworks/js/napi/include/sensor_napi_utils.h @@ -51,6 +51,7 @@ bool ConvertToRotationMatrix(const napi_env &env, sptr asyncC bool ConvertToSensorData(const napi_env &env, sptr asyncCallbackInfo, napi_value result[2]); bool CreateNapiArray(const napi_env &env, float *data, int32_t dataLength, napi_value &result); bool ConvertToSensorInfos(const napi_env &env, sptr asyncCallbackInfo, napi_value result[2]); +bool ConvertToSensorInfo(const napi_env &env, SensorInfo sensorInfo, napi_value &result); bool ConvertToSingleSensor(const napi_env &env, sptr asyncCallbackInfo, napi_value result[2]); bool ConvertToBodyData(const napi_env &env, sptr asyncCallbackInfo, napi_value result[2]); bool CreateFailMessage(CallbackDataType type, int32_t code, string message, @@ -68,6 +69,14 @@ void ReleaseCallback(sptr asyncCallbackInfo); } \ } while (0) +#define CHKNCP(env, cond, message) \ + do { \ + if (!(cond)) { \ + SEN_HILOGE("(%{public}s)", #message); \ + return nullptr; \ + } \ + } while (0) + #define CHKNRP(env, state, message) \ do { \ if ((state) != napi_ok) { \ diff --git a/frameworks/js/napi/src/sensor_js.cpp b/frameworks/js/napi/src/sensor_js.cpp index 5a7a64ff..75f5a17c 100644 --- a/frameworks/js/napi/src/sensor_js.cpp +++ b/frameworks/js/napi/src/sensor_js.cpp @@ -987,6 +987,46 @@ static napi_value GetSensorList(napi_env env, napi_callback_info info) return EmitAsyncWork(nullptr, asyncCallbackInfo); } +static napi_value GetSensorListSync(napi_env env, napi_callback_info info) +{ + CALL_LOG_ENTER; + size_t argc = 1; + napi_value args[1] = { 0 }; + napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); + if (status != napi_ok) { + ThrowErr(env, PARAMETER_ERROR, "napi_get_cb_info fail"); + return nullptr; + } + SensorInfo *sensorInfos = nullptr; + int32_t count = 0; + int32_t ret = GetAllSensors(&sensorInfos, &count); + if (ret != OHOS::ERR_OK) { + SEN_HILOGE("Get sensor list fail"); + ThrowErr(env, PARAMETER_ERROR, "Failed to get sensor list synchronously"); + return nullptr; + } + vector infos; + for (int32_t i = 0; i < count; ++i) { + if (sensorInfos[i].sensorTypeId == SENSOR_TYPE_ID_AMBIENT_LIGHT1) { + SEN_HILOGD("This sensor is secondary ambient light"); + continue; + } + infos.push_back(*(sensorInfos + i)); + } + napi_value resultArray; + status = napi_create_array(env, &resultArray); + if (status != napi_ok) { + ThrowErr(env, PARAMETER_ERROR, "Failed to create result array"); + return nullptr; + } + for (uint32_t j = 0; j < infos.size(); ++j) { + napi_value value = nullptr; + CHKNCP(env, ConvertToSensorInfo(env, infos[j], value), "Convert sensor info fail"); + CHKNCP(env, (napi_set_element(env, resultArray, j, value) == napi_ok), "napi_set_element fail"); + } + return resultArray; +} + static napi_value GetSingleSensor(napi_env env, napi_callback_info info) { CALL_LOG_ENTER; @@ -1035,6 +1075,41 @@ static napi_value GetSingleSensor(napi_env env, napi_callback_info info) return EmitAsyncWork(nullptr, asyncCallbackInfo); } +napi_value GetSingleSensorSync(napi_env env, napi_callback_info info) +{ + CALL_LOG_ENTER; + size_t argc = 1; + napi_value args[1] = { 0 }; + napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); + if (status != napi_ok || argc < 1) { + ThrowErr(env, PARAMETER_ERROR, "napi_get_cb_info fail or number of parameter invalid"); + return nullptr; + } + int32_t sensorTypeId = INVALID_SENSOR_ID; + if (!GetNativeInt32(env, args[0], sensorTypeId)) { + ThrowErr(env, PARAMETER_ERROR, "Wrong argument type, get number fail"); + return nullptr; + } + SensorInfo *sensorInfos = nullptr; + int32_t count = 0; + int32_t ret = GetAllSensors(&sensorInfos, &count); + if (ret != OHOS::ERR_OK) { + SEN_HILOGE("Get sensor list fail"); + return nullptr; + } + for (int32_t i = 0; i < count; ++i) { + if (sensorInfos[i].sensorTypeId == sensorTypeId) { + napi_value result = nullptr; + if (!ConvertToSensorInfo(env, sensorInfos[i], result)) { + SEN_HILOGE("ConvertToSensorInfo fail"); + return nullptr; + } + return result; + } + } + return nullptr; +} + napi_value Subscribe(napi_env env, napi_callback_info info, int32_t sensorTypeId, CallbackDataType type) { CALL_LOG_ENTER; @@ -1286,7 +1361,9 @@ static napi_value Init(napi_env env, napi_value exports) DECLARE_NAPI_FUNCTION("createRotationMatrix", CreateRotationMatrix), DECLARE_NAPI_FUNCTION("getRotationMatrix", CreateRotationMatrix), DECLARE_NAPI_FUNCTION("getSensorList", GetSensorList), + DECLARE_NAPI_FUNCTION("getSensorListSync", GetSensorListSync), DECLARE_NAPI_FUNCTION("getSingleSensor", GetSingleSensor), + DECLARE_NAPI_FUNCTION("getSingleSensorSync", GetSingleSensorSync), DECLARE_NAPI_FUNCTION("subscribeAccelerometer", SubscribeAccelerometer), DECLARE_NAPI_FUNCTION("unsubscribeAccelerometer", UnsubscribeAccelerometer), DECLARE_NAPI_FUNCTION("subscribeCompass", SubscribeCompass), -- Gitee From 83becada9373d07a0b4d9926c62b750e5e33fb17 Mon Sep 17 00:00:00 2001 From: mayunteng_1 Date: Mon, 25 Mar 2024 07:23:49 +0000 Subject: [PATCH 2/2] 111 Signed-off-by: mayunteng_1 Change-Id: I5037e0c188e14a1b372a1342288157fd25b7da14 --- OAT.xml | 2 - frameworks/js/napi/include/sensor_js.h | 2 +- .../js/napi/include/sensor_napi_error.h | 1 + frameworks/js/napi/src/sensor_js.cpp | 39 +++++++------------ utils/common/include/sensor_errors.h | 1 + 5 files changed, 17 insertions(+), 28 deletions(-) diff --git a/OAT.xml b/OAT.xml index 0a7c3aa8..9c356f7c 100755 --- a/OAT.xml +++ b/OAT.xml @@ -40,7 +40,6 @@ - @@ -54,7 +53,6 @@ - diff --git a/frameworks/js/napi/include/sensor_js.h b/frameworks/js/napi/include/sensor_js.h index f96aa2cc..bf75795c 100644 --- a/frameworks/js/napi/include/sensor_js.h +++ b/frameworks/js/napi/include/sensor_js.h @@ -14,7 +14,7 @@ */ #ifndef SENSOR_JS_H #define SENSOR_JS_H -#include "sensor_napi_utils.h" + #include "napi/native_api.h" #include "napi/native_node_api.h" diff --git a/frameworks/js/napi/include/sensor_napi_error.h b/frameworks/js/napi/include/sensor_napi_error.h index 7c2d507a..92bbeda3 100755 --- a/frameworks/js/napi/include/sensor_napi_error.h +++ b/frameworks/js/napi/include/sensor_napi_error.h @@ -28,6 +28,7 @@ const std::map ERROR_MESSAGES = { {SERVICE_EXCEPTION, "Service exception."}, {PERMISSION_DENIED, "Permission denied."}, {PARAMETER_ERROR, "The parameter invalid."}, + {DEVICE_NOT_EXIST, "Device not exist"}, {NON_SYSTEM_API, "Non-system api."}, }; diff --git a/frameworks/js/napi/src/sensor_js.cpp b/frameworks/js/napi/src/sensor_js.cpp index 75f5a17c..48936bf3 100644 --- a/frameworks/js/napi/src/sensor_js.cpp +++ b/frameworks/js/napi/src/sensor_js.cpp @@ -990,38 +990,26 @@ static napi_value GetSensorList(napi_env env, napi_callback_info info) static napi_value GetSensorListSync(napi_env env, napi_callback_info info) { CALL_LOG_ENTER; - size_t argc = 1; - napi_value args[1] = { 0 }; - napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); - if (status != napi_ok) { - ThrowErr(env, PARAMETER_ERROR, "napi_get_cb_info fail"); - return nullptr; - } SensorInfo *sensorInfos = nullptr; int32_t count = 0; int32_t ret = GetAllSensors(&sensorInfos, &count); - if (ret != OHOS::ERR_OK) { - SEN_HILOGE("Get sensor list fail"); - ThrowErr(env, PARAMETER_ERROR, "Failed to get sensor list synchronously"); + if (ret != ERR_OK) { + ThrowErr(env, ret, "Failed to get sensor list synchronously"); return nullptr; } - vector infos; - for (int32_t i = 0; i < count; ++i) { - if (sensorInfos[i].sensorTypeId == SENSOR_TYPE_ID_AMBIENT_LIGHT1) { - SEN_HILOGD("This sensor is secondary ambient light"); - continue; - } - infos.push_back(*(sensorInfos + i)); - } - napi_value resultArray; - status = napi_create_array(env, &resultArray); + napi_value resultArray = nullptr ; + napi_status status = napi_create_array(env, &resultArray); if (status != napi_ok) { - ThrowErr(env, PARAMETER_ERROR, "Failed to create result array"); + SEN_HILOGE("Failed to create result array"); return nullptr; } - for (uint32_t j = 0; j < infos.size(); ++j) { + for (int32_t j = 0; j < count; ++j) { + if (sensorInfos[j].sensorTypeId == SENSOR_TYPE_ID_AMBIENT_LIGHT1) { + SEN_HILOGD("This sensor is secondary ambient light"); + continue; + } napi_value value = nullptr; - CHKNCP(env, ConvertToSensorInfo(env, infos[j], value), "Convert sensor info fail"); + CHKNCP(env, ConvertToSensorInfo(env, sensorInfos[j], value), "Convert sensor info fail"); CHKNCP(env, (napi_set_element(env, resultArray, j, value) == napi_ok), "napi_set_element fail"); } return resultArray; @@ -1081,7 +1069,7 @@ napi_value GetSingleSensorSync(napi_env env, napi_callback_info info) size_t argc = 1; napi_value args[1] = { 0 }; napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); - if (status != napi_ok || argc < 1) { + if (status != napi_ok) { ThrowErr(env, PARAMETER_ERROR, "napi_get_cb_info fail or number of parameter invalid"); return nullptr; } @@ -1094,7 +1082,7 @@ napi_value GetSingleSensorSync(napi_env env, napi_callback_info info) int32_t count = 0; int32_t ret = GetAllSensors(&sensorInfos, &count); if (ret != OHOS::ERR_OK) { - SEN_HILOGE("Get sensor list fail"); + ThrowErr(env, PARAMETER_ERROR, "Get sensor list fail"); return nullptr; } for (int32_t i = 0; i < count; ++i) { @@ -1107,6 +1095,7 @@ napi_value GetSingleSensorSync(napi_env env, napi_callback_info info) return result; } } + ThrowErr(env, DEVICE_NOT_EXIST,"Sensor type not found"); return nullptr; } diff --git a/utils/common/include/sensor_errors.h b/utils/common/include/sensor_errors.h index 2676c93e..23604fe1 100644 --- a/utils/common/include/sensor_errors.h +++ b/utils/common/include/sensor_errors.h @@ -29,6 +29,7 @@ enum ErrorCode : int32_t { PERMISSION_DENIED = 201, // Use this error code when permission is denied. PARAMETER_ERROR = 401, // Use this error code when the input parameter type or range does not match. SERVICE_EXCEPTION = 14500101, // Use this error code when the service is exception. + DEVICE_NOT_EXIST = 14500102, //Use this error code when the device not exist. NON_SYSTEM_API = 202 // Permission check failed. A non-system application uses the system API. }; -- Gitee