Skip to content

Commit 9c381f2

Browse files
author
Cruz Monrreal
authored
Merge pull request #10243 from michalpasztamobica/nanostack_bringdown_blocking
Nanostack::EthernetInterface::bringdown() can handle blocking mode
2 parents 0a088a6 + ccc83f7 commit 9c381f2

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
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
@@ -63,6 +63,7 @@ class Nanostack::Interface : public OnboardNetworkStack::Interface, private mbed
6363
int8_t interface_id;
6464
int8_t _device_id;
6565
rtos::Semaphore connect_semaphore;
66+
rtos::Semaphore disconnect_semaphore;
6667

6768
mbed::Callback<void(nsapi_event_t, intptr_t)> _connection_status_cb;
6869
nsapi_connection_status_t _connect_status;

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,13 @@ nsapi_error_t MeshInterfaceNanostack::initialize(NanostackRfPhy *phy)
119119

120120
void Nanostack::Interface::network_handler(mesh_connection_status_t status)
121121
{
122-
if ((status == MESH_CONNECTED || status == MESH_CONNECTED_LOCAL ||
123-
status == MESH_CONNECTED_GLOBAL) && _blocking) {
124-
connect_semaphore.release();
122+
if (_blocking) {
123+
if (status == MESH_CONNECTED || status == MESH_CONNECTED_LOCAL ||
124+
status == MESH_CONNECTED_GLOBAL) {
125+
connect_semaphore.release();
126+
} else if (status == MESH_DISCONNECTED) {
127+
disconnect_semaphore.release();
128+
}
125129
}
126130

127131

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ nsapi_error_t Nanostack::EthernetInterface::bringup(bool dhcp, const char *ip,
8484
return NSAPI_ERROR_DHCP_FAILURE; // sort of...
8585
}
8686
}
87-
return 0;
87+
return NSAPI_ERROR_OK;
8888
}
8989

9090
nsapi_error_t NanostackEthernetInterface::do_initialize()
@@ -97,8 +97,26 @@ nsapi_error_t NanostackEthernetInterface::do_initialize()
9797

9898
nsapi_error_t Nanostack::EthernetInterface::bringdown()
9999
{
100-
if (enet_tasklet_disconnect(true)) {
100+
nanostack_lock();
101+
int8_t status = enet_tasklet_disconnect(true);
102+
nanostack_unlock();
103+
104+
if (status == -1) {
105+
return NSAPI_ERROR_DEVICE_ERROR;
106+
} else if (status == -2) {
107+
return NSAPI_ERROR_NO_MEMORY;
108+
} else if (status == -3) {
109+
return NSAPI_ERROR_ALREADY;
110+
} else if (status != 0) {
101111
return NSAPI_ERROR_DEVICE_ERROR;
102112
}
113+
114+
if (_blocking) {
115+
int32_t count = disconnect_semaphore.wait(30000);
116+
117+
if (count <= 0) {
118+
return NSAPI_ERROR_TIMEOUT;
119+
}
120+
}
103121
return NSAPI_ERROR_OK;
104122
}

0 commit comments

Comments
 (0)