Skip to content

Commit 8054060

Browse files
author
Cruz Monrreal
authored
Merge pull request #8439 from KariHaapalehto/connection_status
Correct mesh network connection status callback functionality.
2 parents 1a6d2f6 + 1b1f5e7 commit 8054060

File tree

4 files changed

+16
-13
lines changed

4 files changed

+16
-13
lines changed

features/nanostack/mbed-mesh-api/mbed-mesh-api/MeshInterfaceNanostack.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class Nanostack::Interface : public OnboardNetworkStack::Interface, private mbed
5555

5656
Callback<void(nsapi_event_t, intptr_t)> _connection_status_cb;
5757
nsapi_connection_status_t _connect_status;
58+
nsapi_connection_status_t _previous_connection_status;
5859
bool _blocking;
5960
};
6061

features/nanostack/mbed-mesh-api/source/MeshInterfaceNanostack.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ void Nanostack::Interface::attach(
6969
}
7070

7171
Nanostack::Interface::Interface(NanostackPhy &phy) : interface_phy(phy), interface_id(-1), _device_id(-1),
72-
_connect_status(NSAPI_STATUS_DISCONNECTED), _blocking(true)
72+
_connect_status(NSAPI_STATUS_DISCONNECTED), _blocking(true), _previous_connection_status(NSAPI_STATUS_DISCONNECTED)
7373
{
7474
mesh_system_init();
7575
}
@@ -138,15 +138,17 @@ void Nanostack::Interface::network_handler(mesh_connection_status_t status)
138138
_connect_status = NSAPI_STATUS_LOCAL_UP;
139139
} else if (status == MESH_CONNECTED_GLOBAL) {
140140
_connect_status = NSAPI_STATUS_GLOBAL_UP;
141-
} else if (status == MESH_BOOTSTRAP_STARTED) {
141+
} else if (status == MESH_BOOTSTRAP_STARTED || status == MESH_BOOTSTRAP_FAILED) {
142142
_connect_status = NSAPI_STATUS_CONNECTING;
143143
} else {
144144
_connect_status = NSAPI_STATUS_DISCONNECTED;
145145
}
146146

147-
if (_connection_status_cb) {
147+
if (_connection_status_cb && _previous_connection_status != _connect_status) {
148+
148149
_connection_status_cb(NSAPI_EVENT_CONNECTION_STATUS_CHANGE, _connect_status);
149150
}
151+
_previous_connection_status = _connect_status;
150152
}
151153

152154
nsapi_error_t Nanostack::Interface::register_phy()

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -185,28 +185,28 @@ void nd_tasklet_parse_network_event(arm_event_s *event)
185185
/* Link Layer Active Scan Fail, Stack is Already at Idle state */
186186
tr_debug("Link Layer Scan Fail: No Beacons");
187187
tasklet_data_ptr->tasklet_state = TASKLET_STATE_BOOTSTRAP_FAILED;
188-
nd_tasklet_network_state_changed(MESH_DISCONNECTED);
188+
nd_tasklet_network_state_changed(MESH_BOOTSTRAP_FAILED);
189189
break;
190190
case ARM_NWK_IP_ADDRESS_ALLOCATION_FAIL:
191191
/* No ND Router at current Channel Stack is Already at Idle state */
192192
tr_debug("ND Scan/ GP REG fail");
193193
tasklet_data_ptr->tasklet_state = TASKLET_STATE_BOOTSTRAP_FAILED;
194-
nd_tasklet_network_state_changed(MESH_DISCONNECTED);
194+
nd_tasklet_network_state_changed(MESH_BOOTSTRAP_FAILED);
195195
break;
196196
case ARM_NWK_NWK_CONNECTION_DOWN:
197197
/* Connection to Access point is lost wait for Scan Result */
198198
tr_debug("ND/RPL scan new network");
199199
tasklet_data_ptr->tasklet_state = TASKLET_STATE_BOOTSTRAP_FAILED;
200-
nd_tasklet_network_state_changed(MESH_DISCONNECTED);
200+
nd_tasklet_network_state_changed(MESH_BOOTSTRAP_FAILED);
201201
break;
202202
case ARM_NWK_NWK_PARENT_POLL_FAIL:
203203
tasklet_data_ptr->tasklet_state = TASKLET_STATE_BOOTSTRAP_FAILED;
204-
nd_tasklet_network_state_changed(MESH_DISCONNECTED);
204+
nd_tasklet_network_state_changed(MESH_BOOTSTRAP_FAILED);
205205
break;
206206
case ARM_NWK_AUHTENTICATION_FAIL:
207207
tr_debug("Network authentication fail");
208208
tasklet_data_ptr->tasklet_state = TASKLET_STATE_BOOTSTRAP_FAILED;
209-
nd_tasklet_network_state_changed(MESH_DISCONNECTED);
209+
nd_tasklet_network_state_changed(MESH_BOOTSTRAP_FAILED);
210210
break;
211211
default:
212212
tr_warn("Unknown event %d", status);

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,28 +189,28 @@ void thread_tasklet_parse_network_event(arm_event_s *event)
189189
/* Link Layer Active Scan Fail, Stack is Already at Idle state */
190190
tr_debug("Link Layer Scan Fail: No Beacons");
191191
thread_tasklet_data_ptr->tasklet_state = TASKLET_STATE_BOOTSTRAP_FAILED;
192-
thread_tasklet_network_state_changed(MESH_DISCONNECTED);
192+
thread_tasklet_network_state_changed(MESH_BOOTSTRAP_FAILED);
193193
break;
194194
case ARM_NWK_IP_ADDRESS_ALLOCATION_FAIL:
195195
/* No ND Router at current Channel Stack is Already at Idle state */
196196
tr_debug("ND Scan/ GP REG fail");
197197
thread_tasklet_data_ptr->tasklet_state = TASKLET_STATE_BOOTSTRAP_FAILED;
198-
thread_tasklet_network_state_changed(MESH_DISCONNECTED);
198+
thread_tasklet_network_state_changed(MESH_BOOTSTRAP_FAILED);
199199
break;
200200
case ARM_NWK_NWK_CONNECTION_DOWN:
201201
/* Connection to Access point is lost wait for Scan Result */
202202
tr_debug("ND/RPL scan new network");
203203
thread_tasklet_data_ptr->tasklet_state = TASKLET_STATE_BOOTSTRAP_FAILED;
204-
thread_tasklet_network_state_changed(MESH_DISCONNECTED);
204+
thread_tasklet_network_state_changed(MESH_BOOTSTRAP_FAILED);
205205
break;
206206
case ARM_NWK_NWK_PARENT_POLL_FAIL:
207207
thread_tasklet_data_ptr->tasklet_state = TASKLET_STATE_BOOTSTRAP_FAILED;
208-
thread_tasklet_network_state_changed(MESH_DISCONNECTED);
208+
thread_tasklet_network_state_changed(MESH_BOOTSTRAP_FAILED);
209209
break;
210210
case ARM_NWK_AUHTENTICATION_FAIL:
211211
tr_debug("Network authentication fail");
212212
thread_tasklet_data_ptr->tasklet_state = TASKLET_STATE_BOOTSTRAP_FAILED;
213-
thread_tasklet_network_state_changed(MESH_DISCONNECTED);
213+
thread_tasklet_network_state_changed(MESH_BOOTSTRAP_FAILED);
214214
break;
215215
default:
216216
tr_warn("Unknown event %d", status);

0 commit comments

Comments
 (0)