Skip to content

Commit ea93489

Browse files
author
fengzero
committed
core(driver): try connect device when no tags
1 parent a2bb561 commit ea93489

6 files changed

Lines changed: 76 additions & 8 deletions

File tree

include/neuron/plugin.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ typedef struct neu_plugin_intf_funs {
8989
int (*start)(neu_plugin_t *plugin);
9090
int (*stop)(neu_plugin_t *plugin);
9191
int (*setting)(neu_plugin_t *plugin, const char *setting);
92+
int (*try_connect)(neu_plugin_t *plugin);
9293

9394
int (*request)(neu_plugin_t *plugin, neu_reqresp_head_t *head, void *data);
9495

plugins/modbus/modbus_tcp.c

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ static int driver_stop(neu_plugin_t *plugin);
3636
static int driver_config(neu_plugin_t *plugin, const char *config);
3737
static int driver_request(neu_plugin_t *plugin, neu_reqresp_head_t *head,
3838
void *data);
39+
static int driver_connect(neu_plugin_t *plugin);
3940

4041
static int driver_validate_tag(neu_plugin_t *plugin, neu_datatag_t *tag);
4142
static int driver_group_timer(neu_plugin_t *plugin, neu_plugin_group_t *group);
@@ -46,14 +47,15 @@ static int driver_test_read_tag(neu_plugin_t *plugin, void *req,
4647
neu_datatag_t tag);
4748

4849
static const neu_plugin_intf_funs_t plugin_intf_funs = {
49-
.open = driver_open,
50-
.close = driver_close,
51-
.init = driver_init,
52-
.uninit = driver_uninit,
53-
.start = driver_start,
54-
.stop = driver_stop,
55-
.setting = driver_config,
56-
.request = driver_request,
50+
.open = driver_open,
51+
.close = driver_close,
52+
.init = driver_init,
53+
.uninit = driver_uninit,
54+
.start = driver_start,
55+
.stop = driver_stop,
56+
.setting = driver_config,
57+
.request = driver_request,
58+
.try_connect = driver_connect,
5759

5860
.driver.validate_tag = driver_validate_tag,
5961
.driver.group_timer = driver_group_timer,
@@ -388,6 +390,21 @@ static int driver_config(neu_plugin_t *plugin, const char *config)
388390
return 0;
389391
}
390392

393+
static int driver_connect(neu_plugin_t *plugin)
394+
{
395+
if (plugin->conn != NULL) {
396+
if (neu_conn_is_connected(plugin->conn)) {
397+
plugin->common.link_state = NEU_NODE_LINK_STATE_CONNECTED;
398+
} else {
399+
neu_conn_connect(plugin->conn);
400+
if (neu_conn_is_connected(plugin->conn)) {
401+
plugin->common.link_state = NEU_NODE_LINK_STATE_CONNECTED;
402+
}
403+
}
404+
}
405+
return 0;
406+
}
407+
391408
static int driver_request(neu_plugin_t *plugin, neu_reqresp_head_t *head,
392409
void *data)
393410
{

src/adapter/adapter.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2097,6 +2097,10 @@ int neu_adapter_uninit(neu_adapter_t *adapter)
20972097
neu_event_del_io(adapter->events, adapter->control_io);
20982098

20992099
if (adapter->module->type == NEU_NA_TYPE_DRIVER) {
2100+
if (adapter->timer_connect != NULL) {
2101+
neu_event_del_timer(adapter->events, adapter->timer_connect);
2102+
adapter->timer_connect = NULL;
2103+
}
21002104
neu_adapter_driver_destroy((neu_adapter_driver_t *) adapter);
21012105
}
21022106

@@ -2133,6 +2137,19 @@ int neu_adapter_start(neu_adapter_t *adapter)
21332137
neu_adapter_driver_start_group_timer(
21342138
(neu_adapter_driver_t *) adapter);
21352139
}
2140+
2141+
if (adapter->module->type == NEU_NA_TYPE_DRIVER) {
2142+
neu_event_timer_param_t param = {
2143+
.second = 5,
2144+
.millisecond = 0,
2145+
.usr_data = (void *) adapter,
2146+
.type = NEU_EVENT_TIMER_BLOCK,
2147+
};
2148+
2149+
param.cb = neu_adapter_driver_try_connect;
2150+
adapter->timer_connect =
2151+
neu_event_add_timer(adapter->events, param);
2152+
}
21362153
}
21372154

21382155
return error;
@@ -2176,6 +2193,11 @@ int neu_adapter_stop(neu_adapter_t *adapter)
21762193
(neu_adapter_driver_t *) adapter);
21772194
}
21782195
neu_adapter_reset_metrics(adapter);
2196+
2197+
if (adapter->timer_connect != NULL) {
2198+
neu_event_del_timer(adapter->events, adapter->timer_connect);
2199+
adapter->timer_connect = NULL;
2200+
}
21792201
}
21802202

21812203
return error;

src/adapter/adapter_internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ struct neu_adapter {
5555

5656
neu_event_timer_t *timer_lev;
5757
int64_t timestamp_lev;
58+
neu_event_timer_t *timer_connect;
5859

5960
// metrics
6061
neu_node_metrics_t *metrics;

src/adapter/driver/driver.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,31 @@ int neu_adapter_driver_uninit(neu_adapter_driver_t *driver)
741741
return 0;
742742
}
743743

744+
int neu_adapter_driver_try_connect(void *param)
745+
{
746+
neu_adapter_driver_t *driver = (neu_adapter_driver_t *) param;
747+
if (driver->tag_cnt > 0) {
748+
return 0;
749+
}
750+
751+
if (driver->adapter.state != NEU_NODE_RUNNING_STATE_RUNNING) {
752+
return 0;
753+
}
754+
755+
neu_plugin_common_t *common =
756+
neu_plugin_to_plugin_common(driver->adapter.plugin);
757+
if (common->link_state == NEU_NODE_LINK_STATE_CONNECTED) {
758+
return 0;
759+
}
760+
761+
if (driver->adapter.module->intf_funs->try_connect == NULL) {
762+
return 0;
763+
}
764+
765+
return driver->adapter.module->intf_funs->try_connect(
766+
driver->adapter.plugin);
767+
}
768+
744769
static inline void start_group_timer(neu_adapter_driver_t *driver, group_t *grp)
745770
{
746771
uint32_t interval = neu_group_get_interval(grp->group);

src/adapter/driver/driver_internal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ void neu_adapter_driver_destroy(neu_adapter_driver_t *driver);
2828
int neu_adapter_driver_init(neu_adapter_driver_t *driver);
2929
int neu_adapter_driver_uninit(neu_adapter_driver_t *driver);
3030

31+
int neu_adapter_driver_try_connect(void *param);
32+
3133
void neu_adapter_driver_start_group_timer(neu_adapter_driver_t *driver);
3234
void neu_adapter_driver_stop_group_timer(neu_adapter_driver_t *driver);
3335

0 commit comments

Comments
 (0)