Skip to content

Commit 665f10e

Browse files
authored
Merge pull request #7878 from mikaleppanen/mesh_conn_corr
Corrected mbed-mesh-api thread/6lowpan tasklets interface disconnect/connect
2 parents 9e012c3 + 1250ceb commit 665f10e

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ typedef struct {
6464
net_6lowpan_mode_e mode;
6565
net_6lowpan_link_layer_sec_mode_e sec_mode;
6666
net_link_layer_psk_security_info_s psk_sec_info;
67-
int8_t node_main_tasklet_id;
6867
int8_t network_interface_id;
6968
int8_t tasklet;
7069
} tasklet_data_str_t;
@@ -133,13 +132,12 @@ void nd_tasklet_main(arm_event_s *event)
133132
* The event is delivered when the NanoStack OS is running fine.
134133
* This event should be delivered ONLY ONCE.
135134
*/
136-
tasklet_data_ptr->node_main_tasklet_id = event->receiver;
137135
mesh_system_send_connect_event(tasklet_data_ptr->tasklet);
138136
break;
139137

140138
case ARM_LIB_SYSTEM_TIMER_EVENT:
141139
eventOS_event_timer_cancel(event->event_id,
142-
tasklet_data_ptr->node_main_tasklet_id);
140+
tasklet_data_ptr->tasklet);
143141

144142
if (event->event_id == TIMER_EVENT_START_BOOTSTRAP) {
145143
tr_debug("Restart bootstrap");
@@ -215,12 +213,14 @@ void nd_tasklet_parse_network_event(arm_event_s *event)
215213
break;
216214
}
217215

218-
if (tasklet_data_ptr->tasklet_state != TASKLET_STATE_BOOTSTRAP_READY) {
216+
if (tasklet_data_ptr->tasklet_state != TASKLET_STATE_BOOTSTRAP_READY &&
217+
tasklet_data_ptr->network_interface_id != INVALID_INTERFACE_ID) {
219218
// Set 5s timer for new network scan
220219
eventOS_event_timer_request(TIMER_EVENT_START_BOOTSTRAP,
221220
ARM_LIB_SYSTEM_TIMER_EVENT,
222-
tasklet_data_ptr->node_main_tasklet_id,
221+
tasklet_data_ptr->tasklet,
223222
5000);
223+
224224
}
225225
}
226226

@@ -386,7 +386,10 @@ int8_t nd_tasklet_connect(mesh_interface_cb callback, int8_t nwk_interface_id)
386386
}
387387
} else {
388388
tasklet_data_ptr->tasklet = tasklet_id;
389-
mesh_system_send_connect_event(tasklet_data_ptr->tasklet);
389+
eventOS_event_timer_request(TIMER_EVENT_START_BOOTSTRAP,
390+
ARM_LIB_SYSTEM_TIMER_EVENT,
391+
tasklet_data_ptr->tasklet,
392+
500);
390393
}
391394

392395
return tasklet_data_ptr->tasklet;

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ typedef struct {
8484

8585
/* Tasklet data */
8686
static thread_tasklet_data_str_t *thread_tasklet_data_ptr = NULL;
87+
static mac_api_t *mac_api = NULL;
8788
static device_configuration_s device_configuration;
8889

8990
/* private function prototypes */
@@ -216,7 +217,8 @@ void thread_tasklet_parse_network_event(arm_event_s *event)
216217
break;
217218
}
218219

219-
if (thread_tasklet_data_ptr->tasklet_state != TASKLET_STATE_BOOTSTRAP_READY) {
220+
if (thread_tasklet_data_ptr->tasklet_state != TASKLET_STATE_BOOTSTRAP_READY &&
221+
thread_tasklet_data_ptr->nwk_if_id != INVALID_INTERFACE_ID) {
220222
// Set 5s timer for a new network scan
221223
eventOS_event_timer_request(TIMER_EVENT_START_BOOTSTRAP,
222224
ARM_LIB_SYSTEM_TIMER_EVENT,
@@ -465,8 +467,10 @@ int8_t thread_tasklet_network_init(int8_t device_id)
465467
storage_sizes.key_description_table_size = 6;
466468
storage_sizes.key_lookup_size = 1;
467469
storage_sizes.key_usage_size = 3;
468-
mac_api_t *api = ns_sw_mac_create(device_id, &storage_sizes);
469-
return arm_nwk_interface_lowpan_init(api, INTERFACE_NAME);
470+
if (!mac_api) {
471+
mac_api = ns_sw_mac_create(device_id, &storage_sizes);
472+
}
473+
return arm_nwk_interface_lowpan_init(mac_api, INTERFACE_NAME);
470474
}
471475

472476
void thread_tasklet_device_eui64_set(const uint8_t *eui64)

0 commit comments

Comments
 (0)