mirror of https://github.com/ARMmbed/mbed-os.git
Corrected 6lowpan tasklet during interface disconnect/connect
Removed main tasklet ID and used instead tasklet id. Added check for valid interface ID to network scan timer start so that it is not triggered after disconnect. Added small delay to re-connect so that stack has time to send its status events to application after disconnect.pull/7878/head
parent
a24cecfc94
commit
68f5739e09
|
|
@ -64,7 +64,6 @@ typedef struct {
|
||||||
net_6lowpan_mode_e mode;
|
net_6lowpan_mode_e mode;
|
||||||
net_6lowpan_link_layer_sec_mode_e sec_mode;
|
net_6lowpan_link_layer_sec_mode_e sec_mode;
|
||||||
net_link_layer_psk_security_info_s psk_sec_info;
|
net_link_layer_psk_security_info_s psk_sec_info;
|
||||||
int8_t node_main_tasklet_id;
|
|
||||||
int8_t network_interface_id;
|
int8_t network_interface_id;
|
||||||
int8_t tasklet;
|
int8_t tasklet;
|
||||||
} tasklet_data_str_t;
|
} tasklet_data_str_t;
|
||||||
|
|
@ -133,13 +132,12 @@ void nd_tasklet_main(arm_event_s *event)
|
||||||
* The event is delivered when the NanoStack OS is running fine.
|
* The event is delivered when the NanoStack OS is running fine.
|
||||||
* This event should be delivered ONLY ONCE.
|
* This event should be delivered ONLY ONCE.
|
||||||
*/
|
*/
|
||||||
tasklet_data_ptr->node_main_tasklet_id = event->receiver;
|
|
||||||
mesh_system_send_connect_event(tasklet_data_ptr->tasklet);
|
mesh_system_send_connect_event(tasklet_data_ptr->tasklet);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ARM_LIB_SYSTEM_TIMER_EVENT:
|
case ARM_LIB_SYSTEM_TIMER_EVENT:
|
||||||
eventOS_event_timer_cancel(event->event_id,
|
eventOS_event_timer_cancel(event->event_id,
|
||||||
tasklet_data_ptr->node_main_tasklet_id);
|
tasklet_data_ptr->tasklet);
|
||||||
|
|
||||||
if (event->event_id == TIMER_EVENT_START_BOOTSTRAP) {
|
if (event->event_id == TIMER_EVENT_START_BOOTSTRAP) {
|
||||||
tr_debug("Restart bootstrap");
|
tr_debug("Restart bootstrap");
|
||||||
|
|
@ -215,12 +213,14 @@ void nd_tasklet_parse_network_event(arm_event_s *event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tasklet_data_ptr->tasklet_state != TASKLET_STATE_BOOTSTRAP_READY) {
|
if (tasklet_data_ptr->tasklet_state != TASKLET_STATE_BOOTSTRAP_READY &&
|
||||||
|
tasklet_data_ptr->network_interface_id != INVALID_INTERFACE_ID) {
|
||||||
// Set 5s timer for new network scan
|
// Set 5s timer for new network scan
|
||||||
eventOS_event_timer_request(TIMER_EVENT_START_BOOTSTRAP,
|
eventOS_event_timer_request(TIMER_EVENT_START_BOOTSTRAP,
|
||||||
ARM_LIB_SYSTEM_TIMER_EVENT,
|
ARM_LIB_SYSTEM_TIMER_EVENT,
|
||||||
tasklet_data_ptr->node_main_tasklet_id,
|
tasklet_data_ptr->tasklet,
|
||||||
5000);
|
5000);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -386,7 +386,10 @@ int8_t nd_tasklet_connect(mesh_interface_cb callback, int8_t nwk_interface_id)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
tasklet_data_ptr->tasklet = tasklet_id;
|
tasklet_data_ptr->tasklet = tasklet_id;
|
||||||
mesh_system_send_connect_event(tasklet_data_ptr->tasklet);
|
eventOS_event_timer_request(TIMER_EVENT_START_BOOTSTRAP,
|
||||||
|
ARM_LIB_SYSTEM_TIMER_EVENT,
|
||||||
|
tasklet_data_ptr->tasklet,
|
||||||
|
500);
|
||||||
}
|
}
|
||||||
|
|
||||||
return tasklet_data_ptr->tasklet;
|
return tasklet_data_ptr->tasklet;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue