@@ -79,6 +79,7 @@ static void enet_tasklet_network_state_changed(mesh_connection_status_t status);
79
79
static void enet_tasklet_parse_network_event (arm_event_s * event );
80
80
static void enet_tasklet_configure_and_connect_to_network (void );
81
81
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 );
82
83
/*
83
84
* \brief A function which will be eventually called by NanoStack OS when ever the OS has an event to deliver.
84
85
* @param event, describes the sender, receiver and event type.
@@ -120,7 +121,7 @@ void enet_tasklet_main(arm_event_s *event)
120
121
case APPLICATION_EVENT :
121
122
if (event -> event_id == APPL_EVENT_CONNECT ) {
122
123
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
124
125
&& tasklet_data_ptr -> tasklet_state != TASKLET_STATE_BOOTSTRAP_STARTED ) {
125
126
// Ethernet cable has been plugged in
126
127
arm_nwk_interface_configure_ipv6_bootstrap_set (
@@ -133,13 +134,26 @@ void enet_tasklet_main(arm_event_s *event)
133
134
}
134
135
tasklet_data_ptr -> poll_network_status_timeout =
135
136
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 ) {
137
138
// Ethernet cable has been removed
138
139
arm_nwk_interface_down (tasklet_data_ptr -> network_interface_id );
139
140
eventOS_timeout_cancel (tasklet_data_ptr -> poll_network_status_timeout );
140
141
tasklet_data_ptr -> poll_network_status_timeout = NULL ;
141
142
memset (tasklet_data_ptr -> ip , 0x0 , 16 );
142
143
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
+ }
143
157
}
144
158
break ;
145
159
@@ -290,19 +304,8 @@ int8_t enet_tasklet_connect(mesh_interface_cb callback, int8_t nwk_interface_id)
290
304
291
305
int8_t enet_tasklet_disconnect (bool send_cb )
292
306
{
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 ;
306
309
}
307
310
308
311
void enet_tasklet_init (void )
@@ -333,13 +336,23 @@ int8_t enet_tasklet_network_init(int8_t device_id)
333
336
}
334
337
335
338
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 )
336
348
{
337
349
arm_event_s event = {
338
350
.receiver = tasklet_data_ptr -> tasklet ,
339
351
.sender = tasklet_data_ptr -> tasklet ,
340
352
.event_type = APPLICATION_EVENT ,
341
353
.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
343
356
};
344
357
eventOS_event_send (& event );
345
358
}
0 commit comments