Compare commits

...
22 Commits
Author SHA1 Message Date
fengzeroz 369c5fb34a Merge pull request #709 from fengzeroz/v2.1.0
version: 2.1.3
2022-08-12 17:46:45 +08:00
fengzero 07d3b6eb08 version: 2.1.3 2022-08-12 09:46:13 +00:00
fengzeroz e7f39c467f Merge pull request #706 from fengzeroz/v2.1.0
fix(http): remove aio timeout
2022-08-12 13:52:44 +08:00
fengzero 79665e140b fix(http): remove aio timeout 2022-08-12 05:44:11 +00:00
fengzeroz 2bef69d0ee Merge pull request #686 from fengzeroz/v2.1.0
connection: serial port support more baud rates
2022-08-02 14:35:16 +08:00
fengzero dd62f111eb connection: serial port support more baud rates 2022-08-02 02:00:48 +00:00
fengzeroz 0f1b454c01 Merge pull request #680 from fengzeroz/v2.1.0
http aio cancel fn
2022-08-01 10:59:37 +08:00
fengzero ed1dca302c fix: http aio cancel fn 2022-08-01 02:58:07 +00:00
fengzero 83233ace32 chore: log aio error 2022-08-01 02:52:11 +00:00
fengzeroz f022427cb8 Merge pull request #676 from fengzeroz/v2.1.0
ci: fix upload daily assert
2022-07-28 17:31:44 +08:00
fengzero f8ae3a30c1 ci: fix upload daily assert 2022-07-28 09:31:01 +00:00
fengzeroz f86e7a7ac3 Merge pull request #674 from fengzeroz/v2.1.0
fix serial port parameter
2022-07-28 16:52:16 +08:00
fengzero 7a34bfa0be fix serial port parameter 2022-07-28 08:51:33 +00:00
fengzeroz da6d0d476a Merge pull request #673 from fengzeroz/v2.1.0
version: 2.1.2
2022-07-28 16:06:20 +08:00
fengzero 8752cb2615 version: 2.1.2 2022-07-28 08:05:27 +00:00
fengzeroz aba384db8d Merge pull request #671 from gc87/mqtt-fix669-v2.1.0
fix(mqtt): crash caused by global static variables(v2.1.0)
2022-07-28 10:57:20 +08:00
gc87 632915b4ae fix(mqtt): crash caused by global static variables 2022-07-27 17:22:07 +08:00
fengzeroz 632989865a Merge pull request #664 from fengzeroz/v2.1.0
V2.1.0
2022-07-26 15:26:59 +08:00
fengzero 3044b28a93 ci: rename daily release name 2022-07-26 07:26:02 +00:00
fengzero 8d7eeca8d6 ci: branch daily release 2022-07-26 07:25:54 +00:00
fengzeroz 3daadbfcaa Merge pull request #663 from fengzeroz/v2.1.0
ci: package modbus-tcp plugin
2022-07-26 15:18:42 +08:00
fengzero 8fee3ae7e2 ci: package modbus-tcp plugin 2022-07-26 07:15:47 +00:00
11 changed files with 98 additions and 40 deletions
+10 -5
View File
@@ -96,11 +96,16 @@ jobs:
needs: [cross-build, build-debug-sdk]
steps:
- name: Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
id: extract_branch
- name: delete old daily-pre-release
uses: dev-drprasad/delete-tag-and-release@v0.2.0
with:
delete_release: true
tag_name: daily
tag_name: ${{ steps.extract_branch.outputs.branch }}-daily
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -110,8 +115,8 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: daily
release_name: Daily Release
tag_name: ${{ steps.extract_branch.outputs.branch }}-daily
release_name: Daily Release(${{ steps.extract_branch.outputs.branch }})
draft: false
prerelease: true
@@ -170,7 +175,7 @@ jobs:
asset_name: ${{ matrix.type }}-${{ steps.get_version.outputs.version }}-daily-linux-${{ matrix.arch }}.${{ matrix.package }}
asset_content_type: application/octet-stream
upload_daily_release_debug-asset:
upload_daily_release_debug_asset:
runs-on: ubuntu-20.04
if: github.event_name == 'push'
needs: create_daily_release
@@ -218,7 +223,7 @@ jobs:
clean:
runs-on: ubuntu-20.04
needs: upload_daily_release_asset
needs: [upload_daily_release_asset, upload_daily_release_debug_asset]
steps:
- uses: geekyeggo/delete-artifact@v1
with:
@@ -38,6 +38,8 @@ typedef enum neu_conn_tty_baud {
NEU_CONN_TTY_BAUD_38400,
NEU_CONN_TTY_BAUD_19200,
NEU_CONN_TTY_BAUD_9600,
NEU_CONN_TTY_BAUD_4800,
NEU_CONN_TTY_BAUD_2400,
} neu_conn_tty_baud_e;
typedef enum neu_conn_tty_parity {
@@ -60,6 +62,11 @@ typedef enum neu_conn_tty_data {
NEU_CONN_TTY_DATA_8,
} neu_conn_tty_data_e;
typedef enum neu_conn_tty_flow {
NEU_CONN_TTYP_FLOW_DISABLE,
NEU_CONN_TTYP_FLOW_ENABLE,
} neu_conn_tty_flow_e;
typedef void (*neu_conn_callback)(void *data, int fd);
typedef struct neu_conn_param {
@@ -96,6 +103,7 @@ typedef struct neu_conn_param {
neu_conn_tty_stop_e stop;
neu_conn_tty_baud_e baud;
neu_conn_tty_parity_e parity;
neu_conn_tty_flow_e flow;
uint16_t timeout; // millisecond
} tty_client;
} params;
+2
View File
@@ -50,10 +50,12 @@ cp neuron.pem ${package_name}/config/
cp build/plugins/schema/ekuiper.json \
build/plugins/schema/mqtt.json \
build/plugins/schema/modbus-tcp.json \
${package_name}/plugins/schema/
cp build/plugins/libplugin-ekuiper.so \
build/plugins/libplugin-mqtt.so \
build/plugins/libplugin-modbus-tcp.so \
${package_name}/plugins/
tar czf ${package_name}-${arch}.tar.gz ${package_name}/
+13 -3
View File
@@ -79,16 +79,16 @@ int modbus_group_timer(neu_plugin_t *plugin, neu_plugin_group_t *group,
} else {
struct modbus_group_data *gd =
(struct modbus_group_data *) group->user_data;
plugin->plugin_group_data = gd;
for (uint16_t i = 0; i < gd->cmd_sort->n_cmd; i++) {
uint16_t response_size = 0;
int ret = modbus_stack_read(
plugin->cmd_idx = i;
int ret = modbus_stack_read(
plugin->stack, gd->cmd_sort->cmd[i].slave_id,
gd->cmd_sort->cmd[i].area, gd->cmd_sort->cmd[i].start_address,
gd->cmd_sort->cmd[i].n_register, &response_size);
if (ret > 0) {
plugin->plugin_group_data = gd;
plugin->cmd_idx = i;
process_protocol_buf(plugin, response_size);
}
}
@@ -106,6 +106,16 @@ int modbus_value_handle(void *ctx, uint8_t slave_id, uint16_t n_byte,
uint16_t start_address = gd->cmd_sort->cmd[plugin->cmd_idx].start_address;
uint16_t n_register = gd->cmd_sort->cmd[plugin->cmd_idx].n_register;
if (bytes == NULL) {
neu_dvalue_t dvalue = { 0 };
dvalue.type = NEU_TYPE_ERROR;
dvalue.value.i32 = NEU_ERR_PLUGIN_DISCONNECTED;
plugin->common.adapter_callbacks->driver.update(
plugin->common.adapter, gd->group, NULL, dvalue);
return 0;
}
utarray_foreach(gd->cmd_sort->cmd[plugin->cmd_idx].tags, modbus_point_t **,
p_tag)
{
+7 -2
View File
@@ -113,6 +113,7 @@ int modbus_stack_read(modbus_stack_t *stack, uint8_t slave_id,
{
static __thread uint8_t buf[32] = { 0 };
static __thread neu_protocol_pack_buf_t pbuf = { 0 };
int ret = 0;
neu_protocol_pack_buf_init(&pbuf, buf, sizeof(buf));
@@ -143,8 +144,12 @@ int modbus_stack_read(modbus_stack_t *stack, uint8_t slave_id,
modbus_header_wrap(&pbuf, stack->seq++);
*response_size += sizeof(struct modbus_header);
return stack->send_fn(stack->ctx, neu_protocol_pack_buf_used_size(&pbuf),
neu_protocol_pack_buf_get(&pbuf));
ret = stack->send_fn(stack->ctx, neu_protocol_pack_buf_used_size(&pbuf),
neu_protocol_pack_buf_get(&pbuf));
if (ret <= 0) {
stack->value_fn(stack->ctx, 0, 0, NULL);
}
return ret;
}
int modbus_stack_write(modbus_stack_t *stack, void *req, uint8_t slave_id,
+26 -22
View File
@@ -62,8 +62,6 @@ struct mqtt_routine {
neu_event_timer_t *send;
};
static neu_plugin_t *plugin_log = NULL;
static char *topics_format(char *format, char *name)
{
char temp[256] = { '\0' };
@@ -76,8 +74,9 @@ static char *topics_format(char *format, char *name)
return NULL;
}
static void topics_add(UT_array *topics, char *request, int qos_request,
char *response, int qos_response, int type)
static void topics_add(UT_array *topics, neu_plugin_t *plugin, char *request,
int qos_request, char *response, int qos_response,
int type)
{
struct topic_pair *pair = calloc(1, sizeof(struct topic_pair));
pair->topic_request = request;
@@ -86,19 +85,21 @@ static void topics_add(UT_array *topics, char *request, int qos_request,
pair->qos_response = qos_response;
pair->type = type;
utarray_push_back(topics, &pair);
plog_info(plugin_log, "add topic-req:%s, topic-res:%s, count:%d",
plog_info(plugin, "add topic-req:%s, topic-res:%s, count:%d",
pair->topic_request, pair->topic_response, utarray_len(topics));
}
static void topics_cleanup(UT_array *topics)
static void topics_cleanup(UT_array *topics, neu_plugin_t *plugin)
{
for (struct topic_pair **pair =
(struct topic_pair **) utarray_front(topics);
NULL != pair;
pair = (struct topic_pair **) utarray_next(topics, pair)) {
plog_info(plugin_log, "remove topic-req:%s, topic-res:%s",
plog_info(plugin, "remove topic-req:%s, topic-res:%s",
(*pair)->topic_request, (*pair)->topic_response);
if (NULL != (*pair)->topic_request) {
free((*pair)->topic_request);
}
@@ -111,39 +112,46 @@ static void topics_cleanup(UT_array *topics)
}
}
static void topics_generate(UT_array *topics, char *name, char *upload_topic,
char *heartbeat_topic)
static void topics_generate(UT_array *topics, neu_plugin_t *plugin,
neu_mqtt_option_t *option)
{
char *name = option->clientid;
char *upload_topic = option->upload_topic;
char *heartbeat_topic = option->heartbeat_topic;
char *read_req = topics_format(TOPIC_READ_REQ, name);
char *read_res = topics_format(TOPIC_READ_RES, name);
topics_add(topics, read_req, QOS0, read_res, QOS0, TOPIC_TYPE_READ);
topics_add(topics, plugin, read_req, QOS0, read_res, QOS0, TOPIC_TYPE_READ);
char *write_req = topics_format(TOPIC_WRITE_REQ, name);
char *write_res = topics_format(TOPIC_WRITE_RES, name);
topics_add(topics, write_req, QOS0, write_res, QOS0, TOPIC_TYPE_WRITE);
topics_add(topics, plugin, write_req, QOS0, write_res, QOS0,
TOPIC_TYPE_WRITE);
/// UPLOAD TOPIC SETTING
char *upload_req = NULL;
char *upload_res = NULL;
if (NULL != upload_topic && 0 < strlen(upload_topic)) {
plog_debug(plugin, "user defined upload topic:%s", upload_topic);
upload_res = strdup(upload_topic);
} else {
upload_res = topics_format(TOPIC_UPLOAD_RES, name);
}
topics_add(topics, upload_req, QOS0, upload_res, QOS0, TOPIC_TYPE_UPLOAD);
topics_add(topics, plugin, upload_req, QOS0, upload_res, QOS0,
TOPIC_TYPE_UPLOAD);
// HEARTBEAT TOPIC SETTING
char *heartbeat_req = NULL;
char *heartbeat_res = NULL;
if (NULL != heartbeat_topic && 0 < strlen(heartbeat_topic)) {
nlog_debug("user defined heartbeat topic:%s", heartbeat_topic);
plog_debug(plugin, "user defined heartbeat topic:%s", heartbeat_topic);
heartbeat_res = strdup(heartbeat_topic);
} else {
heartbeat_res = topics_format(TOPIC_HEARTBEAT_RES, name);
}
topics_add(topics, heartbeat_req, QOS0, heartbeat_res, QOS0,
topics_add(topics, plugin, heartbeat_req, QOS0, heartbeat_res, QOS0,
TOPIC_TYPE_HEARTBEAT);
}
@@ -258,8 +266,8 @@ static int mqtt_routine_heartbeat(void *data)
neu_mqtt_client_publish(routine->client, topic, qos,
(unsigned char *) json_str, strlen(json_str));
if (NEU_ERR_SUCCESS != error) {
plog_error(plugin_log, "heartbeat publish error code :%d, topoic:%s",
error, topic);
plog_error(routine->plugin,
"heartbeat publish error code :%d, topoic:%s", error, topic);
}
free(json_str);
@@ -306,9 +314,7 @@ static mqtt_routine_t *mqtt_routine_start(neu_plugin_t *plugin,
routine->plugin = plugin;
UT_icd topic_ptr_icd = { sizeof(struct topic_pair *), NULL, NULL, NULL };
utarray_new(routine->topics, &topic_ptr_icd);
topics_generate(routine->topics, routine->option.clientid,
routine->option.upload_topic,
routine->option.heartbeat_topic);
topics_generate(routine->topics, plugin, &routine->option);
topics_subscribe(routine->topics, routine->client);
UT_icd state_ptr_icd = { sizeof(struct node_state *), NULL, NULL, NULL };
@@ -356,7 +362,7 @@ static void mqtt_routine_stop(mqtt_routine_t *routine)
plog_info(routine->plugin, "close mqtt client:%s:%s", routine->option.host,
routine->option.port);
topics_cleanup(routine->topics);
topics_cleanup(routine->topics, routine->plugin);
utarray_free(routine->topics);
mqtt_option_uninit(routine->plugin, &routine->option);
}
@@ -365,7 +371,6 @@ 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);
plugin_log = plugin; // for plog
return plugin;
}
@@ -376,7 +381,6 @@ 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);
plugin_log = NULL;
free(plugin);
return NEU_ERR_SUCCESS;
}
-2
View File
@@ -32,8 +32,6 @@
size_t req_data_size = 0; \
req_type *req = NULL; \
\
nng_aio_set_timeout(aio, 3000); \
nng_aio_defer(aio, http_timeout, NULL); \
if (http_get_body((aio), (void **) &req_data, &req_data_size) == 0 && \
decode_fun(req_data, &req) == 0) { \
{ func }; \
+1
View File
@@ -408,6 +408,7 @@ void http_timeout(nng_aio *aio, void *arg, int err)
http_internal_error(aio, "{\"error\": \"canceled\"}");
break;
default:
nlog_error("aio error: %d", err);
http_internal_error(aio, "{\"error\": \"unknown\"}");
break;
}
-1
View File
@@ -80,7 +80,6 @@ int http_unauthorized(nng_aio *aio, char *content);
int http_not_found(nng_aio *aio, char *content);
int http_conflict(nng_aio *aio, char *content);
int http_internal_error(nng_aio *aio, char *content);
void http_timeout(nng_aio *aio, void *arg, int err);
#ifdef __cplusplus
}
+30 -4
View File
@@ -416,6 +416,7 @@ static void conn_init_param(neu_conn_t *conn, neu_conn_param_t *param)
conn->param.params.tty_client.stop = param->params.tty_client.stop;
conn->param.params.tty_client.baud = param->params.tty_client.baud;
conn->param.params.tty_client.parity = param->params.tty_client.parity;
conn->param.params.tty_client.flow = param->params.tty_client.flow;
conn->param.params.tty_client.timeout =
param->params.tty_client.timeout;
conn->block = conn->param.params.tty_client.timeout > 0;
@@ -606,6 +607,15 @@ static void conn_connect(neu_conn_t *conn)
tty_opt.c_cc[VTIME] = conn->param.params.tty_client.timeout / 100;
tty_opt.c_cc[VMIN] = 0;
switch (conn->param.params.tty_client.flow) {
case NEU_CONN_TTYP_FLOW_DISABLE:
tty_opt.c_cflag &= ~CRTSCTS;
break;
case NEU_CONN_TTYP_FLOW_ENABLE:
tty_opt.c_cflag |= CRTSCTS;
break;
}
switch (conn->param.params.tty_client.baud) {
case NEU_CONN_TTY_BAUD_115200:
cfsetospeed(&tty_opt, B115200);
@@ -627,6 +637,14 @@ static void conn_connect(neu_conn_t *conn)
cfsetospeed(&tty_opt, B9600);
cfsetispeed(&tty_opt, B9600);
break;
case NEU_CONN_TTY_BAUD_4800:
cfsetospeed(&tty_opt, B4800);
cfsetispeed(&tty_opt, B4800);
break;
case NEU_CONN_TTY_BAUD_2400:
cfsetospeed(&tty_opt, B2400);
cfsetispeed(&tty_opt, B2400);
break;
}
switch (conn->param.params.tty_client.parity) {
@@ -682,10 +700,18 @@ static void conn_connect(neu_conn_t *conn)
break;
}
tty_opt.c_oflag = 0;
tty_opt.c_lflag = 0;
tty_opt.c_iflag |= IGNBRK;
tty_opt.c_cflag |= CREAD | HUPCL | CLOCAL;
tty_opt.c_cflag |= CREAD | CLOCAL;
tty_opt.c_lflag &= ~ICANON;
tty_opt.c_lflag &= ~ECHO;
tty_opt.c_lflag &= ~ECHOE;
tty_opt.c_lflag &= ~ECHONL;
tty_opt.c_lflag &= ~ISIG;
tty_opt.c_iflag &= ~(IXON | IXOFF | IXANY);
tty_opt.c_iflag &=
~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL);
tty_opt.c_oflag &= ~OPOST;
tty_opt.c_oflag &= ~ONLCR;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &tty_opt);
+1 -1
View File
@@ -1 +1 @@
2.1.1
2.1.3