|
|
@@ -0,0 +1,288 @@
|
|
|
+#include "napi/native_api.h"
|
|
|
+#include "napi/native_node_api.h"
|
|
|
+#include "uart.h"
|
|
|
+#include <bits/alltypes.h>
|
|
|
+#include <stdlib.h>
|
|
|
+#include "command.h"
|
|
|
+#include "camera_log.h"
|
|
|
+#include "it3256_manager.h"
|
|
|
+using namespace OHOS::HiviewDFX;
|
|
|
+using namespace OHOS::It3256;
|
|
|
+typedef struct {
|
|
|
+ UART_HANDLE handle;
|
|
|
+} UartHandleWrapper;
|
|
|
+enum UartErrorCode { INVALID_ARGUMENT = -1, INTERNAL_INTERFACE_ERROR = -2, CREATE_ERROR = -3 };
|
|
|
+
|
|
|
+static napi_value AdvioDevGetAIRangeCode(napi_env env, napi_callback_info info) {
|
|
|
+ size_t argc = 2;
|
|
|
+ napi_value args[2];
|
|
|
+ IT3256_LOGI("it3256 AdvioDevGetAIRangeCode");
|
|
|
+ napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
|
|
|
+
|
|
|
+ if (argc != 2) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+ unsigned char startch, stopch;
|
|
|
+ uint32_t tmp;
|
|
|
+ if (napi_get_value_uint32(env, args[0], &tmp) != napi_ok || tmp > 0xFF) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+ startch = static_cast<unsigned char>(tmp);
|
|
|
+
|
|
|
+ if (napi_get_value_uint32(env, args[1], &tmp) != napi_ok || tmp > 0xFF || tmp < startch) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+ stopch = static_cast<unsigned char>(tmp);
|
|
|
+ const uint32_t channelCount = stopch - startch + 1;
|
|
|
+ const size_t bufferSize = channelCount * 2;
|
|
|
+
|
|
|
+ void *bufferData;
|
|
|
+ napi_value arrayBuffer;
|
|
|
+ if (napi_create_arraybuffer(env, bufferSize, &bufferData, &arrayBuffer) != napi_ok) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+ napi_value typedArray;
|
|
|
+ if (napi_create_typedarray(env, napi_uint8_array, bufferSize, arrayBuffer, 0, &typedArray) != napi_ok) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+
|
|
|
+ bool result = It3256IOManager::GetAIRangeCode(startch, stopch, static_cast<unsigned char *>(bufferData));
|
|
|
+ if (result == 0) {
|
|
|
+ return typedArray;
|
|
|
+ } else {
|
|
|
+ char errorMessage[64];
|
|
|
+ snprintf(errorMessage, sizeof(errorMessage), "Operation failed with code: %u", result);
|
|
|
+ napi_throw_error(env, "OPERATION_FAILED", errorMessage);
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static napi_value AdvioDevSetAIRangeCode(napi_env env, napi_callback_info info) {
|
|
|
+ size_t argc = 3;
|
|
|
+ napi_value args[3];
|
|
|
+ napi_value ret;
|
|
|
+ napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
|
|
|
+
|
|
|
+ if (argc != 3) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+
|
|
|
+ unsigned char startch, stopch;
|
|
|
+ uint32_t tmp;
|
|
|
+ if (napi_get_value_uint32(env, args[0], &tmp) != napi_ok || tmp > 0xFF) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+ startch = static_cast<unsigned char>(tmp);
|
|
|
+
|
|
|
+ if (napi_get_value_uint32(env, args[1], &tmp) != napi_ok || tmp > 0xFF || tmp < startch) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+ stopch = static_cast<unsigned char>(tmp);
|
|
|
+
|
|
|
+ const uint32_t channelCount = stopch - startch + 1;
|
|
|
+ const size_t bufferSize = channelCount * 2;
|
|
|
+
|
|
|
+ napi_typedarray_type array_type;
|
|
|
+ size_t length;
|
|
|
+ void *data;
|
|
|
+ napi_value buffer;
|
|
|
+ size_t byte_offset;
|
|
|
+ if (napi_get_typedarray_info(env, args[2], &array_type, &length, &data, &buffer, &byte_offset) != napi_ok) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+ if (array_type != napi_uint8_array || bufferSize != length) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+ bool result = It3256IOManager::SetAIRangeCode(startch, stopch, static_cast<unsigned char *>(data));
|
|
|
+ if (result == 0) {
|
|
|
+ napi_create_int32(env, result, &ret);
|
|
|
+ } else {
|
|
|
+ char errorMessage[64];
|
|
|
+ snprintf(errorMessage, sizeof(errorMessage), "Operation failed with code: %u", result);
|
|
|
+ napi_throw_error(env, "OPERATION_FAILED", errorMessage);
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+static napi_value UartInit(napi_env env, napi_callback_info info) {
|
|
|
+ size_t argc = 5;
|
|
|
+ napi_value args[5];
|
|
|
+ napi_value ret;
|
|
|
+
|
|
|
+ napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
|
|
|
+ if (argc < 5) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+
|
|
|
+ napi_valuetype types[5];
|
|
|
+ for (int i = 0; i < 5; ++i) {
|
|
|
+ napi_typeof(env, args[i], &types[i]);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (types[0] != napi_string || types[1] != napi_number || types[2] != napi_number || types[3] != napi_number ||
|
|
|
+ types[4] != napi_number) {
|
|
|
+ napi_throw_error(env, "INVALID_ARGUMENTS", "Invalid arguments passed to the function");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+
|
|
|
+ char dev[32];
|
|
|
+ size_t str_len;
|
|
|
+ int baudrate, byteSize, stopBits, parity;
|
|
|
+
|
|
|
+ napi_get_value_string_utf8(env, args[0], dev, sizeof(dev), &str_len);
|
|
|
+ napi_get_value_int32(env, args[1], &baudrate);
|
|
|
+ napi_get_value_int32(env, args[2], &byteSize);
|
|
|
+ napi_get_value_int32(env, args[3], &stopBits);
|
|
|
+ napi_get_value_int32(env, args[4], &parity);
|
|
|
+
|
|
|
+ UART_HANDLE handle = UartInit(dev, baudrate, byteSize, stopBits, parity);
|
|
|
+ napi_create_int32(env, handle, &ret);
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static napi_value UartSend(napi_env env, napi_callback_info info) {
|
|
|
+ size_t argc = 2;
|
|
|
+ napi_value args[2];
|
|
|
+ napi_value ret;
|
|
|
+ napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
|
|
|
+ if (argc != 2) {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "Invalid arguments");
|
|
|
+ napi_create_int32(env, INVALID_ARGUMENT, &ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ int32_t handle;
|
|
|
+ if (napi_get_value_int32(env, args[0], &handle) != napi_ok) {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "Invalid arguments");
|
|
|
+ napi_create_int32(env, INVALID_ARGUMENT, &ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ napi_typedarray_type array_type;
|
|
|
+ size_t array_length;
|
|
|
+ void *data;
|
|
|
+ napi_value buffer;
|
|
|
+ size_t byte_offset;
|
|
|
+ if (napi_get_typedarray_info(env, args[1], &array_type, &array_length, &data, &buffer, &byte_offset) != napi_ok) {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "Invalid arguments");
|
|
|
+ napi_create_int32(env, INVALID_ARGUMENT, &ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ if (array_type != napi_uint8_array) {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "array_type is uint8_array");
|
|
|
+ napi_create_int32(env, INVALID_ARGUMENT, &ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ uint8_t *byteArray = (uint8_t *)data;
|
|
|
+ size_t result = UartSend(handle, byteArray, array_length);
|
|
|
+ if (result != array_length ) {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "Send failed");
|
|
|
+ napi_create_int32(env, INTERNAL_INTERFACE_ERROR, &ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ napi_create_int32(env, result, &ret);
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static napi_value UartRecv(napi_env env, napi_callback_info info) {
|
|
|
+ size_t argc = 2;
|
|
|
+ napi_value args[2];
|
|
|
+ napi_value ret;
|
|
|
+
|
|
|
+ napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
|
|
|
+ if (argc < 2) {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "Invalid arguments");
|
|
|
+ napi_create_int32(env, INVALID_ARGUMENT, &ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ int32_t handle;
|
|
|
+ if (napi_get_value_int32(env, args[0], &handle) != napi_ok) {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "Invalid arguments");
|
|
|
+ napi_create_int32(env, INVALID_ARGUMENT, &ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ void *buffer_data;
|
|
|
+ size_t buffer_length;
|
|
|
+ if (napi_get_buffer_info(env, args[1], &buffer_data, &buffer_length) != napi_ok) {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "Invalid arguments");
|
|
|
+ napi_create_int32(env, INVALID_ARGUMENT, &ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ int result = UartRecv(handle, buffer_data, buffer_length);
|
|
|
+ if (result > 0) {
|
|
|
+ napi_create_int32(env, result, &ret);
|
|
|
+ } else {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "Receive failed");
|
|
|
+ napi_create_int32(env, INTERNAL_INTERFACE_ERROR, &ret);
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static napi_value UartUninit(napi_env env, napi_callback_info info) {
|
|
|
+ size_t argc = 1;
|
|
|
+ napi_value args[1];
|
|
|
+ napi_value ret;
|
|
|
+
|
|
|
+ napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
|
|
|
+ if (argc < 1) {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "Invalid arguments");
|
|
|
+ napi_create_int32(env, INVALID_ARGUMENT, &ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ int32_t handle;
|
|
|
+ if (napi_get_value_int32(env, args[0], &handle) != napi_ok) {
|
|
|
+ //OH_LOG_ERROR(LOG_APP, "Invalid arguments");
|
|
|
+ napi_create_int32(env, INVALID_ARGUMENT, &ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ int result = UartUninit(handle);
|
|
|
+
|
|
|
+ napi_create_int32(env, result, &ret);
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+EXTERN_C_START
|
|
|
+static napi_value Init(napi_env env, napi_value exports) {
|
|
|
+ napi_property_descriptor desc[] = {
|
|
|
+ {"uartInit", nullptr, UartInit, nullptr, nullptr, nullptr, napi_default, nullptr},
|
|
|
+ {"uartSend", nullptr, UartSend, nullptr, nullptr, nullptr, napi_default, nullptr},
|
|
|
+ {"uartRecv", nullptr, UartRecv, nullptr, nullptr, nullptr, napi_default, nullptr},
|
|
|
+ {"uartUninit", nullptr, UartUninit, nullptr, nullptr, nullptr, napi_default, nullptr},
|
|
|
+ {"devGetAIRangeCode", nullptr, AdvioDevGetAIRangeCode, nullptr, nullptr, nullptr, napi_default, nullptr},
|
|
|
+ {"devSetAIRangeCode", nullptr, AdvioDevSetAIRangeCode, nullptr, nullptr, nullptr, napi_default, nullptr},
|
|
|
+ };
|
|
|
+ napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
|
|
|
+ return exports;
|
|
|
+}
|
|
|
+EXTERN_C_END
|
|
|
+
|
|
|
+// 模块定义
|
|
|
+static napi_module demoModule = {
|
|
|
+ .nm_version = 1,
|
|
|
+ .nm_flags = 0,
|
|
|
+ .nm_filename = nullptr,
|
|
|
+ .nm_register_func = Init,
|
|
|
+ .nm_modname = "it3256",
|
|
|
+ .nm_priv = ((void *)0),
|
|
|
+ .reserved = {0},
|
|
|
+};
|
|
|
+
|
|
|
+extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
|