Skip to content

Commit 31c4013

Browse files
enet_tasklet_disconnect() should generate event to tasklet.
enet_tasklet_disconnect() is now generating event to ethernet_tasklet, which will then handle it.
1 parent 0915097 commit 31c4013

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

features/nanostack/mbed-mesh-api/source/ethernet_tasklet.c

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ static void enet_tasklet_network_state_changed(mesh_connection_status_t status);
7979
static void enet_tasklet_parse_network_event(arm_event_s *event);
8080
static void enet_tasklet_configure_and_connect_to_network(void);
8181
static void enet_tasklet_poll_network_status(void *param);
82+
static void enet_tasklet_generate_event(uint8_t link_status, mesh_connection_status_t mesh_status);
8283
/*
8384
* \brief A function which will be eventually called by NanoStack OS when ever the OS has an event to deliver.
8485
* @param event, describes the sender, receiver and event type.
@@ -120,7 +121,7 @@ void enet_tasklet_main(arm_event_s *event)
120121
case APPLICATION_EVENT:
121122
if (event->event_id == APPL_EVENT_CONNECT) {
122123
enet_tasklet_configure_and_connect_to_network();
123-
} else if (event->event_id == APPL_BACKHAUL_INTERFACE_PHY_UP
124+
} else if (event->event_id == APPL_BACKHAUL_LINK_UP
124125
&& tasklet_data_ptr->tasklet_state != TASKLET_STATE_BOOTSTRAP_STARTED) {
125126
// Ethernet cable has been plugged in
126127
arm_nwk_interface_configure_ipv6_bootstrap_set(
@@ -133,13 +134,26 @@ void enet_tasklet_main(arm_event_s *event)
133134
}
134135
tasklet_data_ptr->poll_network_status_timeout =
135136
eventOS_timeout_every_ms(enet_tasklet_poll_network_status, 2000, NULL);
136-
} else if (event->event_id == APPL_BACKHAUL_INTERFACE_PHY_DOWN) {
137+
} else if (event->event_id == APPL_BACKHAUL_LINK_DOWN) {
137138
// Ethernet cable has been removed
138139
arm_nwk_interface_down(tasklet_data_ptr->network_interface_id);
139140
eventOS_timeout_cancel(tasklet_data_ptr->poll_network_status_timeout);
140141
tasklet_data_ptr->poll_network_status_timeout = NULL;
141142
memset(tasklet_data_ptr->ip, 0x0, 16);
142143
enet_tasklet_network_state_changed(MESH_BOOTSTRAP_STARTED);
144+
} else if (event->event_id == APPL_BACKHAUL_INTERFACE_PHY_DOWN) {
145+
// disconnect called
146+
if (tasklet_data_ptr != NULL) {
147+
if (tasklet_data_ptr->network_interface_id != INVALID_INTERFACE_ID) {
148+
if (tasklet_data_ptr->connection_status != MESH_BOOTSTRAP_STARTED) {
149+
arm_nwk_interface_down(tasklet_data_ptr->network_interface_id);
150+
}
151+
tasklet_data_ptr->network_interface_id = INVALID_INTERFACE_ID;
152+
enet_tasklet_network_state_changed(MESH_DISCONNECTED);
153+
}
154+
tasklet_data_ptr->mesh_api_cb = NULL;
155+
eventOS_timeout_cancel(tasklet_data_ptr->poll_network_status_timeout);
156+
}
143157
}
144158
break;
145159

@@ -290,19 +304,8 @@ int8_t enet_tasklet_connect(mesh_interface_cb callback, int8_t nwk_interface_id)
290304

291305
int8_t enet_tasklet_disconnect(bool send_cb)
292306
{
293-
int8_t status = -1;
294-
if (tasklet_data_ptr != NULL) {
295-
if (tasklet_data_ptr->network_interface_id != INVALID_INTERFACE_ID) {
296-
status = arm_nwk_interface_down(tasklet_data_ptr->network_interface_id);
297-
tasklet_data_ptr->network_interface_id = INVALID_INTERFACE_ID;
298-
if (send_cb) {
299-
enet_tasklet_network_state_changed(MESH_DISCONNECTED);
300-
}
301-
}
302-
tasklet_data_ptr->mesh_api_cb = NULL;
303-
eventOS_timeout_cancel(tasklet_data_ptr->poll_network_status_timeout);
304-
}
305-
return status;
307+
enet_tasklet_generate_event(APPL_BACKHAUL_INTERFACE_PHY_DOWN, MESH_DISCONNECTED);
308+
return 0;
306309
}
307310

308311
void enet_tasklet_init(void)
@@ -333,13 +336,23 @@ int8_t enet_tasklet_network_init(int8_t device_id)
333336
}
334337

335338
void enet_tasklet_link_state_changed(bool up)
339+
{
340+
if (up) {
341+
enet_tasklet_generate_event(APPL_BACKHAUL_LINK_UP, MESH_BOOTSTRAP_STARTED);
342+
} else {
343+
enet_tasklet_generate_event(APPL_BACKHAUL_LINK_DOWN, MESH_BOOTSTRAP_STARTED);
344+
}
345+
}
346+
347+
static void enet_tasklet_generate_event(uint8_t link_status, mesh_connection_status_t mesh_status)
336348
{
337349
arm_event_s event = {
338350
.receiver = tasklet_data_ptr->tasklet,
339351
.sender = tasklet_data_ptr->tasklet,
340352
.event_type = APPLICATION_EVENT,
341353
.priority = ARM_LIB_LOW_PRIORITY_EVENT,
342-
.event_id = up ? APPL_BACKHAUL_INTERFACE_PHY_UP : APPL_BACKHAUL_INTERFACE_PHY_DOWN,
354+
.event_id = link_status,
355+
.event_data = mesh_status
343356
};
344357
eventOS_event_send(&event);
345358
}

features/nanostack/mbed-mesh-api/source/include/mesh_system.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ extern "C" {
2828
enum {
2929
APPL_EVENT_CONNECT = 0x01,
3030
APPL_BACKHAUL_INTERFACE_PHY_DOWN,
31-
APPL_BACKHAUL_INTERFACE_PHY_UP
31+
APPL_BACKHAUL_LINK_DOWN,
32+
APPL_BACKHAUL_LINK_UP
3233
};
3334

3435
/*

0 commit comments

Comments
 (0)