diff --git a/CMakeLists.txt b/CMakeLists.txt index 720a7bf4..4dd2f5f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,6 +148,7 @@ file(COPY ${CMAKE_SOURCE_DIR}/default_plugins.json DESTINATION ${CMAKE_BINARY_DI add_subdirectory(plugins/modbus) add_subdirectory(plugins/mqtt) +add_subdirectory(plugins/nano-mqtt) add_subdirectory(plugins/ekuiper) add_subdirectory(simulator) diff --git a/plugins/nano-mqtt/CMakeLists.txt b/plugins/nano-mqtt/CMakeLists.txt new file mode 100644 index 00000000..b61d9c6f --- /dev/null +++ b/plugins/nano-mqtt/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.12) + +project(plugin-nano-mqtt) + +set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/plugins") + +add_library(${PROJECT_NAME} SHARED + mqtt_handle.c + mqtt_plugin.c +) + +target_include_directories(${PROJECT_NAME} PRIVATE + ${CMAKE_SOURCE_DIR}/include/neuron + ${CMAKE_SOURCE_DIR}/plugins/nano-mqtt +) + +target_link_libraries(${PROJECT_NAME} neuron-base) +target_link_libraries(${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT}) diff --git a/plugins/nano-mqtt/mqtt_handle.c b/plugins/nano-mqtt/mqtt_handle.c new file mode 100644 index 00000000..2e809f27 --- /dev/null +++ b/plugins/nano-mqtt/mqtt_handle.c @@ -0,0 +1,54 @@ +/** + * NEURON IIoT System for Industry 4.0 + * Copyright (C) 2020-2022 EMQ Technologies Co., Ltd All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + **/ + +#include "mqtt_handle.h" +#include "mqtt_plugin.h" + +int handle_write_response(neu_plugin_t *plugin, neu_json_mqtt_t *mqtt_json, + neu_resp_error_t *data) +{ + (void) plugin; + (void) mqtt_json; + (void) data; + return 0; +} + +int handle_read_response(neu_plugin_t *plugin, neu_json_mqtt_t *mqtt_json, + neu_resp_read_group_t *data) +{ + (void) plugin; + (void) mqtt_json; + (void) data; + return 0; +} + +int handle_trans_data(neu_plugin_t * plugin, + neu_reqresp_trans_data_t *trans_data) +{ + (void) plugin; + (void) trans_data; + return 0; +} + +int handle_nodes_state(neu_plugin_t *plugin, neu_reqresp_nodes_state_t *states) +{ + (void) plugin; + utarray_free(states->states); + return 0; +} diff --git a/plugins/nano-mqtt/mqtt_handle.h b/plugins/nano-mqtt/mqtt_handle.h new file mode 100644 index 00000000..fd32b861 --- /dev/null +++ b/plugins/nano-mqtt/mqtt_handle.h @@ -0,0 +1,44 @@ +/** + * NEURON IIoT System for Industry 4.0 + * Copyright (C) 2020-2022 EMQ Technologies Co., Ltd All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + **/ + +#ifndef NEURON_PLUGIN_MQTT_HANDLE_H +#define NEURON_PLUGIN_MQTT_HANDLE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "neuron.h" + +int handle_write_response(neu_plugin_t *plugin, neu_json_mqtt_t *mqtt_json, + neu_resp_error_t *data); + +int handle_read_response(neu_plugin_t *plugin, neu_json_mqtt_t *mqtt_json, + neu_resp_read_group_t *data); + +int handle_trans_data(neu_plugin_t * plugin, + neu_reqresp_trans_data_t *trans_data); + +int handle_nodes_state(neu_plugin_t *plugin, neu_reqresp_nodes_state_t *states); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/plugins/nano-mqtt/mqtt_plugin.c b/plugins/nano-mqtt/mqtt_plugin.c new file mode 100644 index 00000000..0768d44b --- /dev/null +++ b/plugins/nano-mqtt/mqtt_plugin.c @@ -0,0 +1,126 @@ +/** + * NEURON IIoT System for Industry 4.0 + * Copyright (C) 2020-2022 EMQ Technologies Co., Ltd All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + **/ + +#include "mqtt_plugin.h" +#include "mqtt_handle.h" + +const neu_plugin_module_t neu_plugin_module; + +static neu_plugin_t *mqtt_plugin_open(void) +{ + neu_plugin_t *plugin = (neu_plugin_t *) calloc(1, sizeof(neu_plugin_t)); + neu_plugin_common_init(&plugin->common); + return plugin; +} + +static int mqtt_plugin_close(neu_plugin_t *plugin) +{ + const char *name = neu_plugin_module.module_name; + plog_info(plugin, "success to free plugin:%s", name); + + free(plugin); + return NEU_ERR_SUCCESS; +} + +static int mqtt_plugin_init(neu_plugin_t *plugin) +{ + plog_info(plugin, "initialize plugin `%s` success", + neu_plugin_module.module_name); + return NEU_ERR_SUCCESS; +} + +static int mqtt_plugin_uninit(neu_plugin_t *plugin) +{ + plog_info(plugin, "uninitialize plugin `%s` success", + neu_plugin_module.module_name); + return NEU_ERR_SUCCESS; +} + +static int mqtt_plugin_config(neu_plugin_t *plugin, const char *config) +{ + plog_info(plugin, "config plugin `%s` success, %s", + neu_plugin_module.module_name, config); + return NEU_ERR_SUCCESS; +} + +static int mqtt_plugin_start(neu_plugin_t *plugin) +{ + (void) plugin; + return NEU_ERR_SUCCESS; +} + +static int mqtt_plugin_stop(neu_plugin_t *plugin) +{ + (void) plugin; + return NEU_ERR_SUCCESS; +} + +static int mqtt_plugin_request(neu_plugin_t *plugin, neu_reqresp_head_t *head, + void *data) +{ + neu_err_code_e error = NEU_ERR_SUCCESS; + + switch (head->type) { + case NEU_RESP_ERROR: + error = handle_write_response(plugin, head->ctx, data); + break; + case NEU_RESP_READ_GROUP: + error = handle_read_response(plugin, head->ctx, data); + break; + case NEU_REQRESP_TRANS_DATA: + error = handle_trans_data(plugin, data); + break; + case NEU_REQRESP_NODES_STATE: { + error = handle_nodes_state(plugin, data); + break; + } + case NEU_REQRESP_NODE_DELETED: + break; + default: + error = NEU_ERR_MQTT_FAILURE; + break; + } + + return error; +} + +static const neu_plugin_intf_funs_t plugin_intf_funs = { + .open = mqtt_plugin_open, + .close = mqtt_plugin_close, + .init = mqtt_plugin_init, + .uninit = mqtt_plugin_uninit, + .start = mqtt_plugin_start, + .stop = mqtt_plugin_stop, + .setting = mqtt_plugin_config, + .request = mqtt_plugin_request, +}; + +#define DESCRIPTION "Neuron northbound MQTT plugin bases on NanoSDK." + +const neu_plugin_module_t neu_plugin_module = { + .version = NEURON_PLUGIN_VER_1_0, + .module_name = "nano-mqtt", + .module_descr = DESCRIPTION, + .intf_funs = &plugin_intf_funs, + .kind = NEU_PLUGIN_KIND_SYSTEM, + .type = NEU_NA_TYPE_APP, + .sub_msg[0] = NEU_SUBSCRIBE_NODES_STATE, + .display = true, + .single = false, +}; diff --git a/plugins/nano-mqtt/mqtt_plugin.h b/plugins/nano-mqtt/mqtt_plugin.h new file mode 100644 index 00000000..73314304 --- /dev/null +++ b/plugins/nano-mqtt/mqtt_plugin.h @@ -0,0 +1,37 @@ +/** + * NEURON IIoT System for Industry 4.0 + * Copyright (C) 2020-2022 EMQ Technologies Co., Ltd All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + **/ + +#ifndef NEURON_PLUGIN_MQTT_H +#define NEURON_PLUGIN_MQTT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +struct neu_plugin { + neu_plugin_common_t common; +}; + +#ifdef __cplusplus +} +#endif + +#endif