diff --git a/connectivity/CMakeLists.txt b/connectivity/CMakeLists.txt index 267b280..3f84e2e 100644 --- a/connectivity/CMakeLists.txt +++ b/connectivity/CMakeLists.txt @@ -6,44 +6,21 @@ add_library(mbed-ble INTERFACE) add_library(mbed-ble-cordio INTERFACE) add_library(mbed-ble-cordio_ll INTERFACE) -add_library(mbed-cellular INTERFACE) -add_library(mbed-coap INTERFACE) add_library(mbed-emac INTERFACE) add_library(mbed-lorawan INTERFACE) -add_library(mbed-lwipstack INTERFACE) add_library(mbed-mbedtls STATIC EXCLUDE_FROM_ALL) -add_library(mbed-nanostack INTERFACE) -add_library(mbed-nanostack-coap_service INTERFACE) -add_library(mbed-nanostack-mbed_mesh_api INTERFACE) -add_library(mbed-nanostack-hal_mbed_cmsis_rtos INTERFACE) -add_library(mbed-nanostack-sal_stack INTERFACE) -add_library(mbed-nanostack-sal_stack-event_loop INTERFACE) -add_library(mbed-nanostack-libservice INTERFACE) -add_library(mbed-netsocket INTERFACE) + add_library(mbed-nfc INTERFACE) add_library(mbed-ppp INTERFACE) add_library(mbed-wifi INTERFACE) -if(MBED_OS_ENABLE_TESTS) - # Add these subdirectories for tests - add_subdirectory(cellular) - add_subdirectory(drivers) - add_subdirectory(FEATURE_BLE) - add_subdirectory(libraries) - add_subdirectory(lorawan) - add_subdirectory(mbedtls) - add_subdirectory(netsocket) - add_subdirectory(nfc) -else() - # The directories below contain optional target libraries - add_subdirectory(FEATURE_BLE EXCLUDE_FROM_ALL) - add_subdirectory(cellular EXCLUDE_FROM_ALL) - add_subdirectory(drivers EXCLUDE_FROM_ALL) - add_subdirectory(libraries EXCLUDE_FROM_ALL) - add_subdirectory(lorawan EXCLUDE_FROM_ALL) - add_subdirectory(lwipstack EXCLUDE_FROM_ALL) - add_subdirectory(mbedtls EXCLUDE_FROM_ALL) - add_subdirectory(nanostack EXCLUDE_FROM_ALL) - add_subdirectory(netsocket EXCLUDE_FROM_ALL) - add_subdirectory(nfc EXCLUDE_FROM_ALL) -endif() +add_subdirectory(nanostack) +add_subdirectory(cellular) +add_subdirectory(drivers) +add_subdirectory(FEATURE_BLE) +add_subdirectory(libraries) +add_subdirectory(lorawan) +add_subdirectory(lwipstack) +add_subdirectory(mbedtls) +add_subdirectory(netsocket) +add_subdirectory(nfc) \ No newline at end of file diff --git a/connectivity/cellular/CMakeLists.txt b/connectivity/cellular/CMakeLists.txt index 757ac90..4198fec 100644 --- a/connectivity/cellular/CMakeLists.txt +++ b/connectivity/cellular/CMakeLists.txt @@ -9,10 +9,12 @@ endif() endif() +add_library(mbed-cellular STATIC EXCLUDE_FROM_ALL) + add_subdirectory(source/framework) target_include_directories(mbed-cellular - INTERFACE + PUBLIC . ./include ./include/cellular @@ -24,12 +26,17 @@ ) target_compile_definitions(mbed-cellular - INTERFACE + PUBLIC MBED_CONF_CELLULAR_PRESENT=1 ) +target_sources(mbed-cellular + PUBLIC + source/CellularNonIPSocket.cpp +) + target_link_libraries(mbed-cellular - INTERFACE + PUBLIC mbed-netsocket mbed-core-flags ) diff --git a/connectivity/cellular/include/CellularNonIPSocket.h b/connectivity/cellular/include/CellularNonIPSocket.h new file mode 100644 index 0000000..0d206ae --- /dev/null +++ b/connectivity/cellular/include/CellularNonIPSocket.h @@ -0,0 +1,170 @@ +/* CellularNonIPSocket + * Copyright (c) 2015 ARM Limited + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CELLULARNONIPSOCKET_H +#define CELLULARNONIPSOCKET_H + +#include "netsocket/Socket.h" +#include "rtos/Mutex.h" +#include "rtos/EventFlags.h" +#include "Callback.h" +#include "mbed_atomic.h" +#include "mbed_toolchain.h" +#include "ControlPlane_netif.h" +#include "CellularContext.h" + +namespace mbed { + +/** \addtogroup netsocket */ +/** @{*/ + +/** Socket implementation for cellular Non-IP data delivery(NIDD). + * Relies on Control Plane CIoT EPS optimization feature, + * implemented in ControlPlane_netif class. + */ +class CellularNonIPSocket : public Socket { +public: + /** Destroy the socket. + * + * @note Closes socket if it's still open. + */ + ~CellularNonIPSocket() override; + + /** Creates a socket. + */ + CellularNonIPSocket(); + + /** Opens a socket on the given cellular context. + * + * @param cellular_context Cellular PDP context over which this socket is sending and + * receiving data. The context has support for providing + * a control plane interface for data delivery. + * @return NSAPI_ERROR_OK on success + * NSAPI_ERROR_PARAMETER otherwise + */ + nsapi_error_t open(mbed::CellularContext *cellular_context); + + /** Opens a socket that will use the given control plane interface for data delivery. + * Attaches the event as callback to the control plane interface. + * + * @param cp_netif Control plane interface for data delivery. + * @return NSAPI_ERROR_OK on success + * NSAPI_ERROR_PARAMETER otherwise + * + */ + nsapi_error_t open(mbed::ControlPlane_netif *cp_netif); + + /** Closes socket + * + * @return NSAPI_ERROR_OK on success + * NSAPI_ERROR_NO_SOCKET otherwise + */ + + nsapi_error_t close() override; + + /** Send data over a control plane cellular context. + * + * By default, send blocks until all data is sent. If socket is set to + * nonblocking or times out, a partial amount can be written. + * NSAPI_ERROR_WOULD_BLOCK is returned if no data was written. + * + * @param data Buffer of data to be sent. + * @param size Size of the buffer in bytes. + * @return Number of sent bytes on success, negative error + * code on failure. + */ + nsapi_size_or_error_t send(const void *data, nsapi_size_t size) override; + + /** Receive data from a socket. + * + * By default, recv blocks until some data is received. If socket is set to + * nonblocking or times out, NSAPI_ERROR_WOULD_BLOCK can be returned to + * indicate no data. + * + * @param data Pointer to buffer for received data. + * @param size Size of the buffer in bytes. + * @return Number of received bytes on success, negative error + * code on failure. + */ + nsapi_size_or_error_t recv(void *data, nsapi_size_t size) override; + + /** @copydoc Socket::set_blocking + */ + void set_blocking(bool blocking) override; + + /** @copydoc Socket::set_timeout + */ + void set_timeout(int timeout) override; + + /** @copydoc Socket::sigio + */ + void sigio(mbed::Callback func) override; + + /// NOT APPLICABLE + nsapi_error_t connect(const SocketAddress &address) override; + /// NOT APPLICABLE + Socket *accept(nsapi_error_t *error = NULL) override; + /// NOT APPLICABLE + nsapi_error_t listen(int backlog = 1) override; + /// NOT APPLICABLE + nsapi_error_t setsockopt(int level, int optname, const void *optval, unsigned optlen) override; + /// NOT APPLICABLE + nsapi_error_t getsockopt(int level, int optname, void *optval, unsigned *optlen) override; + /// NOT APPLICABLE + nsapi_error_t getpeername(SocketAddress *address) override; + /// NOT APPLICABLE + nsapi_size_or_error_t sendto(const SocketAddress &address, + const void *data, nsapi_size_t size) override; + /// NOT APPLICABLE + nsapi_size_or_error_t recvfrom(SocketAddress *address, + void *data, nsapi_size_t size) override; + /// NOT APPLICABLE + nsapi_size_or_error_t sendto_control(const SocketAddress &address, + const void *data, nsapi_size_t size, + nsapi_msghdr_t *control, nsapi_size_t control_size) override; + /// NOT APPLICABLE + nsapi_size_or_error_t recvfrom_control(SocketAddress *address, + void *data, nsapi_size_t size, + nsapi_msghdr_t *control, nsapi_size_t control_size) override; + /// NOT APPLICABLE + nsapi_error_t bind(const SocketAddress &address) override; + +protected: + void event(); + + uint32_t _timeout = osWaitForever; + mbed::Callback _event; + mbed::Callback _callback; + rtos::EventFlags _event_flag; + rtos::Mutex _lock; + uint8_t _readers = 0; + uint8_t _writers = 0; + core_util_atomic_flag _pending = CORE_UTIL_ATOMIC_FLAG_INIT; + + // Event flags + static const int READ_FLAG = 0x1u; + static const int WRITE_FLAG = 0x2u; + static const int FINISHED_FLAG = 0x3u; + + static ControlPlane_netif *_cp_netif; // there can be only one Non-IP socket + bool _opened = false; +}; + +/** @}*/ +} // namespace mbed + +#endif // CELLULARNONIPSOCKET_H diff --git a/connectivity/cellular/source/CellularNonIPSocket.cpp b/connectivity/cellular/source/CellularNonIPSocket.cpp new file mode 100644 index 0000000..71e7919 --- /dev/null +++ b/connectivity/cellular/source/CellularNonIPSocket.cpp @@ -0,0 +1,287 @@ +/* CellularNonIPSocket +#include + * Copyright (c) 2015 ARM Limited + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if MBED_CONF_CELLULAR_PRESENT + +#include "platform/Callback.h" +#include "CellularNonIPSocket.h" +#include + +using namespace mbed; + +ControlPlane_netif *CellularNonIPSocket::_cp_netif; + +CellularNonIPSocket::CellularNonIPSocket() = default; + +nsapi_error_t CellularNonIPSocket::open(CellularContext *cellular_context) +{ + if (cellular_context == nullptr) { + return NSAPI_ERROR_PARAMETER; + } + + return open(cellular_context->get_cp_netif()); +} + +CellularNonIPSocket::~CellularNonIPSocket() +{ + close(); +} + +nsapi_error_t CellularNonIPSocket::open(ControlPlane_netif *cp_netif) +{ + _lock.lock(); + + if (cp_netif == nullptr || _opened) { + _lock.unlock(); + return NSAPI_ERROR_PARAMETER; + } + + if (_cp_netif) { + _lock.unlock(); + return NSAPI_ERROR_NO_SOCKET; + } + _cp_netif = cp_netif; + + _event = callback(this, &CellularNonIPSocket::event); + _cp_netif->attach(Callback::thunk, &_event); + _opened = true; + + _lock.unlock(); + return NSAPI_ERROR_OK; +} + +nsapi_error_t CellularNonIPSocket::close() +{ + _lock.lock(); + + nsapi_error_t ret = NSAPI_ERROR_OK; + if (!_opened) { + return NSAPI_ERROR_NO_SOCKET; + } + + // Just in case - tell the stack not to callback any more, then remove this socket. + _cp_netif->attach(nullptr, nullptr); + _opened = false; + _cp_netif = nullptr; // Invalidate the cp_netif pointer - otherwise open() fails. + + // Wakeup anything in a blocking operation + // on this socket + event(); + + // Wait until all readers and writers are gone + while (_readers || _writers) { + _lock.unlock(); + _event_flag.wait_any(FINISHED_FLAG, osWaitForever); + _lock.lock(); + } + + _lock.unlock(); + + return ret; +} + +nsapi_size_or_error_t CellularNonIPSocket::send(const void *data, nsapi_size_t size) +{ + if (!data) { + return NSAPI_ERROR_PARAMETER; + } + _lock.lock(); + nsapi_size_or_error_t ret; + + _writers++; + + while (true) { + if (!_opened) { + ret = NSAPI_ERROR_NO_SOCKET; + break; + } + + core_util_atomic_flag_clear(&_pending); + nsapi_size_or_error_t sent = _cp_netif->send(data, size); + if ((0 == _timeout) || (NSAPI_ERROR_WOULD_BLOCK != sent)) { + ret = sent; + break; + } else { + uint32_t flag; + + // Release lock before blocking so other threads + // accessing this object aren't blocked + _lock.unlock(); + flag = _event_flag.wait_any(WRITE_FLAG, _timeout); + _lock.lock(); + + if (flag & osFlagsError) { + // Timeout break + ret = NSAPI_ERROR_WOULD_BLOCK; + break; + } + } + } + + _writers--; + if (!_opened || !_writers) { + _event_flag.set(FINISHED_FLAG); + } + _lock.unlock(); + return ret; +} + +nsapi_size_or_error_t CellularNonIPSocket::recv(void *buffer, nsapi_size_t size) +{ + _lock.lock(); + nsapi_size_or_error_t ret = NSAPI_ERROR_NO_SOCKET; + + _readers++; + + while (true) { + if (!_opened) { + break; + } + + core_util_atomic_flag_clear(&_pending); + nsapi_size_or_error_t recv = _cp_netif->recv(buffer, size); + + // Non-blocking sockets always return. Blocking only returns when success or errors other than WOULD_BLOCK + if ((0 == _timeout) || (NSAPI_ERROR_WOULD_BLOCK != recv)) { + ret = recv; + break; + } else { + uint32_t flag; + + // Release lock before blocking so other threads + // accessing this object aren't blocked + _lock.unlock(); + flag = _event_flag.wait_any(READ_FLAG, _timeout); + _lock.lock(); + + if (flag & osFlagsError) { + // Timeout break + // Poll once more for a possibly missed data received indication + ret = _cp_netif->recv(buffer, size); + break; + } + } + } + + _readers--; + if (!_opened || !_readers) { + _event_flag.set(FINISHED_FLAG); + } + + _lock.unlock(); + return ret; +} + +void CellularNonIPSocket::set_blocking(bool blocking) +{ + set_timeout(blocking ? -1 : 0); +} + +void CellularNonIPSocket::set_timeout(int timeout) +{ + _lock.lock(); + + if (timeout >= 0) { + _timeout = (uint32_t)timeout; + } else { + _timeout = osWaitForever; + } + + _lock.unlock(); +} + +void CellularNonIPSocket::event() +{ + _event_flag.set(READ_FLAG | WRITE_FLAG); + + if (_callback && !core_util_atomic_flag_test_and_set(&_pending)) { + _callback(); + } +} + +void CellularNonIPSocket::sigio(Callback callback) +{ + _lock.lock(); + _callback = callback; + _lock.unlock(); +} + +nsapi_error_t CellularNonIPSocket::connect(const SocketAddress &address) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + +Socket *CellularNonIPSocket::accept(nsapi_error_t *error) +{ + if (error) { + *error = NSAPI_ERROR_UNSUPPORTED; + } + return nullptr; +} + +nsapi_error_t CellularNonIPSocket::listen(int backlog) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + +nsapi_size_or_error_t CellularNonIPSocket::sendto(const SocketAddress &address, + const void *data, nsapi_size_t size) +{ + return NSAPI_ERROR_UNSUPPORTED; +} +nsapi_size_or_error_t CellularNonIPSocket::sendto_control(const SocketAddress &address, + const void *data, nsapi_size_t size, + nsapi_msghdr_t *control, nsapi_size_t control_size) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + +nsapi_size_or_error_t CellularNonIPSocket::recvfrom(SocketAddress *address, + void *data, nsapi_size_t size) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + +nsapi_size_or_error_t CellularNonIPSocket::recvfrom_control(SocketAddress *address, + void *data, nsapi_size_t size, + nsapi_msghdr_t *control, nsapi_size_t control_size) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + +nsapi_error_t CellularNonIPSocket::setsockopt(int level, int optname, const void *optval, unsigned optlen) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + +nsapi_error_t CellularNonIPSocket::getsockopt(int level, int optname, void *optval, unsigned *optlen) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + +nsapi_error_t CellularNonIPSocket::getpeername(SocketAddress *address) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + +nsapi_error_t CellularNonIPSocket::bind(const SocketAddress &address) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + +#endif diff --git a/connectivity/cellular/source/framework/AT/CMakeLists.txt b/connectivity/cellular/source/framework/AT/CMakeLists.txt index f9bfcb1..ad34d4a 100644 --- a/connectivity/cellular/source/framework/AT/CMakeLists.txt +++ b/connectivity/cellular/source/framework/AT/CMakeLists.txt @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 target_sources(mbed-cellular - INTERFACE + PRIVATE AT_CellularContext.cpp AT_CellularDevice.cpp AT_CellularInformation.cpp diff --git a/connectivity/cellular/source/framework/common/CMakeLists.txt b/connectivity/cellular/source/framework/common/CMakeLists.txt index 2edcac9..0f4c3a8 100644 --- a/connectivity/cellular/source/framework/common/CMakeLists.txt +++ b/connectivity/cellular/source/framework/common/CMakeLists.txt @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 target_sources(mbed-cellular - INTERFACE + PRIVATE APN_db.cpp CellularLog.cpp CellularUtil.cpp diff --git a/connectivity/cellular/source/framework/device/CMakeLists.txt b/connectivity/cellular/source/framework/device/CMakeLists.txt index 289337f..ede313e 100644 --- a/connectivity/cellular/source/framework/device/CMakeLists.txt +++ b/connectivity/cellular/source/framework/device/CMakeLists.txt @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 target_sources(mbed-cellular - INTERFACE + PRIVATE ATHandler.cpp CellularContext.cpp CellularDevice.cpp diff --git a/connectivity/libraries/mbed-coap/CMakeLists.txt b/connectivity/libraries/mbed-coap/CMakeLists.txt index 71bfd40..2c503c9 100644 --- a/connectivity/libraries/mbed-coap/CMakeLists.txt +++ b/connectivity/libraries/mbed-coap/CMakeLists.txt @@ -1,15 +1,17 @@ # Copyright (c) 2020 ARM Limited. All rights reserved. # SPDX-License-Identifier: Apache-2.0 +add_library(mbed-coap STATIC EXCLUDE_FROM_ALL) + target_include_directories(mbed-coap - INTERFACE + PUBLIC . ./mbed-coap ./source/include ) target_sources(mbed-coap - INTERFACE + PRIVATE source/sn_coap_builder.c source/sn_coap_header_check.c source/sn_coap_parser.c @@ -17,6 +19,13 @@ ) target_compile_definitions(mbed-coap - INTERFACE + PUBLIC MBED_CONF_COAP_PRESENT=1 ) + +target_link_libraries(mbed-coap + PUBLIC + mbed-nanostack-libservice + mbed-core-flags + mbed-randlib +) diff --git a/connectivity/libraries/nanostack-libservice/CMakeLists.txt b/connectivity/libraries/nanostack-libservice/CMakeLists.txt index 55026a1..24790c1 100644 --- a/connectivity/libraries/nanostack-libservice/CMakeLists.txt +++ b/connectivity/libraries/nanostack-libservice/CMakeLists.txt @@ -1,15 +1,17 @@ # Copyright (c) 2020 ARM Limited. All rights reserved. # SPDX-License-Identifier: Apache-2.0 +add_library(mbed-nanostack-libservice STATIC EXCLUDE_FROM_ALL) + target_include_directories(mbed-nanostack-libservice - INTERFACE + PUBLIC . ./mbed-client-libservice ./mbed-client-libservice/platform ) target_sources(mbed-nanostack-libservice - INTERFACE + PRIVATE source/IPv6_fcf_lib/ip_fsc.c source/libList/ns_list.c source/libip4string/ip4tos.c diff --git a/connectivity/lwipstack/CMakeLists.txt b/connectivity/lwipstack/CMakeLists.txt index 96c9b12..8c087d8 100644 --- a/connectivity/lwipstack/CMakeLists.txt +++ b/connectivity/lwipstack/CMakeLists.txt @@ -1,8 +1,10 @@ # Copyright (c) 2020 ARM Limited. All rights reserved. # SPDX-License-Identifier: Apache-2.0 +add_library(mbed-lwipstack STATIC EXCLUDE_FROM_ALL) + target_include_directories(mbed-lwipstack - INTERFACE + PUBLIC . ./include ./include/lwipstack @@ -13,7 +15,7 @@ ) target_sources(mbed-lwipstack - INTERFACE + PRIVATE lwip/src/api/lwip_api_lib.c lwip/src/api/lwip_api_msg.c lwip/src/api/lwip_err.c @@ -88,13 +90,15 @@ ) target_compile_definitions(mbed-lwipstack - INTERFACE + PUBLIC MBED_CONF_LWIPSTACK_PRESENT=1 ) target_link_libraries(mbed-lwipstack - INTERFACE + PUBLIC mbed-netsocket mbed-ppp mbed-randlib + PRIVATE + mbed-rtos-flags ) diff --git a/connectivity/nanostack/CMakeLists.txt b/connectivity/nanostack/CMakeLists.txt index e49852b..9ff2685 100644 --- a/connectivity/nanostack/CMakeLists.txt +++ b/connectivity/nanostack/CMakeLists.txt @@ -1,6 +1,8 @@ # Copyright (c) 2020 ARM Limited. All rights reserved. # SPDX-License-Identifier: Apache-2.0 +add_library(mbed-nanostack STATIC EXCLUDE_FROM_ALL) + add_subdirectory(coap-service) add_subdirectory(mbed-mesh-api) add_subdirectory(nanostack-hal-mbed-cmsis-rtos) @@ -8,24 +10,24 @@ add_subdirectory(sal-stack-nanostack-eventloop) target_include_directories(mbed-nanostack - INTERFACE + PUBLIC . ./include ./include/nanostack-interface ) target_sources(mbed-nanostack - INTERFACE + PRIVATE source/Nanostack.cpp ) target_compile_definitions(mbed-nanostack - INTERFACE + PUBLIC MBED_CONF_NANOSTACK_PRESENT=1 ) target_link_libraries(mbed-nanostack - INTERFACE + PUBLIC mbed-nanostack-mbed_mesh_api mbed-nanostack-sal_stack-event_loop mbed-nanostack-sal_stack diff --git a/connectivity/nanostack/coap-service/CMakeLists.txt b/connectivity/nanostack/coap-service/CMakeLists.txt index 277e79c..53902ce 100644 --- a/connectivity/nanostack/coap-service/CMakeLists.txt +++ b/connectivity/nanostack/coap-service/CMakeLists.txt @@ -1,22 +1,29 @@ # Copyright (c) 2020 ARM Limited. All rights reserved. # SPDX-License-Identifier: Apache-2.0 +add_library(mbed-nanostack-coap_service STATIC EXCLUDE_FROM_ALL) + target_include_directories(mbed-nanostack-coap_service - INTERFACE + PUBLIC . ./coap-service ./source/include ) target_sources(mbed-nanostack-coap_service - INTERFACE + PRIVATE source/coap_connection_handler.c source/coap_message_handler.c source/coap_security_handler.c source/coap_service_api.c ) -target_link_libraries(mbed-nanostack - INTERFACE +target_link_libraries(mbed-nanostack-coap_service + PUBLIC + mbed-nanostack-libservice + mbed-nanostack-sal_stack mbed-coap + mbed-nanostack-sal_stack-event_loop + mbed-randlib + mbed-mbedtls ) diff --git a/connectivity/nanostack/mbed-mesh-api/CMakeLists.txt b/connectivity/nanostack/mbed-mesh-api/CMakeLists.txt index d420ced..e3d7169 100644 --- a/connectivity/nanostack/mbed-mesh-api/CMakeLists.txt +++ b/connectivity/nanostack/mbed-mesh-api/CMakeLists.txt @@ -1,15 +1,18 @@ # Copyright (c) 2020 ARM Limited. All rights reserved. # SPDX-License-Identifier: Apache-2.0 +add_library(mbed-nanostack-mbed_mesh_api STATIC EXCLUDE_FROM_ALL) + target_include_directories(mbed-nanostack-mbed_mesh_api - INTERFACE + PUBLIC . ./mbed-mesh-api ./source/include -) + ../include/nanostack-interface + ) target_sources(mbed-nanostack-mbed_mesh_api - INTERFACE + PRIVATE source/CallbackHandler.cpp source/LoWPANNDInterface.cpp source/MeshInterfaceNanostack.cpp @@ -27,7 +30,12 @@ source/wisun_tasklet.c ) -target_link_libraries(mbed-nanostack - INTERFACE +target_link_libraries(mbed-nanostack-mbed_mesh_api + PUBLIC mbed-nanostack-hal_mbed_cmsis_rtos + mbed-nanostack-sal_stack + mbed-netsocket + mbed-core-flags + PRIVATE + mbed-rtos-flags ) diff --git a/connectivity/nanostack/nanostack-hal-mbed-cmsis-rtos/CMakeLists.txt b/connectivity/nanostack/nanostack-hal-mbed-cmsis-rtos/CMakeLists.txt index 0b948fd..816622a 100644 --- a/connectivity/nanostack/nanostack-hal-mbed-cmsis-rtos/CMakeLists.txt +++ b/connectivity/nanostack/nanostack-hal-mbed-cmsis-rtos/CMakeLists.txt @@ -1,13 +1,15 @@ # Copyright (c) 2020 ARM Limited. All rights reserved. # SPDX-License-Identifier: Apache-2.0 +add_library(mbed-nanostack-hal_mbed_cmsis_rtos STATIC EXCLUDE_FROM_ALL) + target_include_directories(mbed-nanostack-hal_mbed_cmsis_rtos - INTERFACE + PUBLIC . ) target_sources(mbed-nanostack-hal_mbed_cmsis_rtos - INTERFACE + PRIVATE arm_hal_fhss_timer.cpp arm_hal_interrupt.c arm_hal_random.c @@ -20,3 +22,10 @@ nvm/nvm_ram.c ) + +target_link_libraries(mbed-nanostack-hal_mbed_cmsis_rtos + PUBLIC + mbed-core-flags + PRIVATE + mbed-rtos-flags +) \ No newline at end of file diff --git a/connectivity/nanostack/sal-stack-nanostack-eventloop/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack-eventloop/CMakeLists.txt index 1e4ebae..3320a52 100644 --- a/connectivity/nanostack/sal-stack-nanostack-eventloop/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack-eventloop/CMakeLists.txt @@ -1,7 +1,9 @@ # SPDX-License-Identifier: Apache-2.0 +add_library(mbed-nanostack-sal_stack-event_loop STATIC EXCLUDE_FROM_ALL) + target_include_directories(mbed-nanostack-sal_stack-event_loop - INTERFACE + PUBLIC . ./nanostack-event-loop ./nanostack-event-loop/platform @@ -9,9 +11,14 @@ ) target_sources(mbed-nanostack-sal_stack-event_loop - INTERFACE + PRIVATE source/event.c source/ns_timeout.c source/ns_timer.c source/system_timer.c ) + +target_link_libraries(mbed-nanostack-sal_stack-event_loop + PUBLIC + mbed-core-flags +) \ No newline at end of file diff --git a/connectivity/nanostack/sal-stack-nanostack/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/CMakeLists.txt index 2cab979..0921a6f 100644 --- a/connectivity/nanostack/sal-stack-nanostack/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/CMakeLists.txt @@ -1,6 +1,8 @@ # Copyright (c) 2020-2021, Pelion and affiliates. # SPDX-License-Identifier: Apache-2.0 +add_library(mbed-nanostack-sal_stack STATIC EXCLUDE_FROM_ALL) + add_subdirectory(source/6LoWPAN) add_subdirectory(source/BorderRouter) add_subdirectory(source/Common_Protocols) @@ -20,14 +22,19 @@ add_subdirectory(source/libNET) target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ./nanostack ./nanostack/platform ./source ) -target_link_libraries(mbed-nanostack - INTERFACE +target_link_libraries(mbed-nanostack-sal_stack + PUBLIC + mbed-nanostack-libservice + mbed-core-flags + mbed-nanostack-sal_stack-event_loop + mbed-randlib + mbed-mbedtls mbed-nanostack-coap_service ) diff --git a/connectivity/nanostack/sal-stack-nanostack/source/6LoWPAN/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/6LoWPAN/CMakeLists.txt index ef3b50c..24b9f50 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/6LoWPAN/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/6LoWPAN/CMakeLists.txt @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ./Bootstraps ./Fragmentation @@ -16,7 +16,7 @@ ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE adaptation_interface.c Bootstraps/Generic/network_lib.c diff --git a/connectivity/nanostack/sal-stack-nanostack/source/BorderRouter/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/BorderRouter/CMakeLists.txt index 3f0d5fa..c7a34fc 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/BorderRouter/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/BorderRouter/CMakeLists.txt @@ -2,11 +2,11 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE border_router.c ) diff --git a/connectivity/nanostack/sal-stack-nanostack/source/Common_Protocols/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/Common_Protocols/CMakeLists.txt index 31bcdff..682a479 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/Common_Protocols/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/Common_Protocols/CMakeLists.txt @@ -2,12 +2,12 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE icmpv6.c icmpv6_prefix.c icmpv6_radv.c diff --git a/connectivity/nanostack/sal-stack-nanostack/source/Core/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/Core/CMakeLists.txt index ae8903f..6b1d1ac 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/Core/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/Core/CMakeLists.txt @@ -2,13 +2,13 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ./include ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE buffer_dyn.c ns_address_internal.c ns_monitor.c diff --git a/connectivity/nanostack/sal-stack-nanostack/source/DHCPv6_Server/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/DHCPv6_Server/CMakeLists.txt index f62037f..d017c8c 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/DHCPv6_Server/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/DHCPv6_Server/CMakeLists.txt @@ -2,11 +2,11 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE DHCPv6_Server_service.c ) diff --git a/connectivity/nanostack/sal-stack-nanostack/source/DHCPv6_client/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/DHCPv6_client/CMakeLists.txt index 1838ab0..055a9ca 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/DHCPv6_client/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/DHCPv6_client/CMakeLists.txt @@ -2,11 +2,11 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE dhcpv6_client_service.c ) diff --git a/connectivity/nanostack/sal-stack-nanostack/source/MAC/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/MAC/CMakeLists.txt index 6dec6f7..36ab2d1 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/MAC/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/MAC/CMakeLists.txt @@ -2,14 +2,14 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ./IEEE802_15_4 ./virtual_rf ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE rf_driver_storage.c IEEE802_15_4/mac_cca_threshold.c diff --git a/connectivity/nanostack/sal-stack-nanostack/source/MLE/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/MLE/CMakeLists.txt index da8a5f3..ccfc368 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/MLE/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/MLE/CMakeLists.txt @@ -2,12 +2,12 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE mle.c mle_tlv.c ) diff --git a/connectivity/nanostack/sal-stack-nanostack/source/MPL/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/MPL/CMakeLists.txt index 805ae78..f7d0212 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/MPL/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/MPL/CMakeLists.txt @@ -2,11 +2,11 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE mpl.c ) diff --git a/connectivity/nanostack/sal-stack-nanostack/source/NWK_INTERFACE/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/NWK_INTERFACE/CMakeLists.txt index 50445ae..e359797 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/NWK_INTERFACE/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/NWK_INTERFACE/CMakeLists.txt @@ -2,13 +2,13 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ./Include ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE protocol_core.c protocol_core_sleep.c protocol_stats.c diff --git a/connectivity/nanostack/sal-stack-nanostack/source/RPL/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/RPL/CMakeLists.txt index 98616d9..40ce67a 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/RPL/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/RPL/CMakeLists.txt @@ -2,12 +2,12 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE rpl_control.c rpl_data.c rpl_downward.c diff --git a/connectivity/nanostack/sal-stack-nanostack/source/Security/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/Security/CMakeLists.txt index 63aaf06..3baa382 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/Security/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/Security/CMakeLists.txt @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ./Common ./PANA @@ -19,7 +19,7 @@ ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE Common/security_lib.c PANA/eap_protocol.c diff --git a/connectivity/nanostack/sal-stack-nanostack/source/Service_Libs/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/Service_Libs/CMakeLists.txt index 846fc8c..df73a13 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/Service_Libs/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/Service_Libs/CMakeLists.txt @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ./Neighbor_cache ./Trickle @@ -36,7 +36,7 @@ ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE CCM_lib/ccm_security.c CCM_lib/mbedOS/aes_mbedtls_adapter.c diff --git a/connectivity/nanostack/sal-stack-nanostack/source/configs/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/configs/CMakeLists.txt index 232128a..2c2038a 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/configs/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/configs/CMakeLists.txt @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ./base ) diff --git a/connectivity/nanostack/sal-stack-nanostack/source/ipv6_stack/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/ipv6_stack/CMakeLists.txt index 6ef7fbb..2accad4 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/ipv6_stack/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/ipv6_stack/CMakeLists.txt @@ -2,12 +2,12 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE ipv6_routing_table.c protocol_ipv6.c ) diff --git a/connectivity/nanostack/sal-stack-nanostack/source/libDHCPv6/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/libDHCPv6/CMakeLists.txt index f922d6e..779da3b 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/libDHCPv6/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/libDHCPv6/CMakeLists.txt @@ -2,12 +2,12 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE dhcp_service_api.c libDHCPv6.c libDHCPv6_server.c diff --git a/connectivity/nanostack/sal-stack-nanostack/source/libNET/CMakeLists.txt b/connectivity/nanostack/sal-stack-nanostack/source/libNET/CMakeLists.txt index 8d2a977..9f4c400 100644 --- a/connectivity/nanostack/sal-stack-nanostack/source/libNET/CMakeLists.txt +++ b/connectivity/nanostack/sal-stack-nanostack/source/libNET/CMakeLists.txt @@ -2,13 +2,13 @@ # SPDX-License-Identifier: Apache-2.0 target_include_directories(mbed-nanostack-sal_stack - INTERFACE + PUBLIC . ./src ) target_sources(mbed-nanostack-sal_stack - INTERFACE + PRIVATE src/multicast_api.c src/net_6lowpan_parameter_api.c src/net_dns.c diff --git a/connectivity/netsocket/CMakeLists.txt b/connectivity/netsocket/CMakeLists.txt index 5f463d3..ea64e96 100644 --- a/connectivity/netsocket/CMakeLists.txt +++ b/connectivity/netsocket/CMakeLists.txt @@ -9,21 +9,17 @@ endif() endif() -# TODO CMake: Perhaps move this/these file(s) into connectivity/drivers/cellular -target_sources(mbed-cellular - INTERFACE - source/CellularNonIPSocket.cpp -) +add_library(mbed-netsocket STATIC EXCLUDE_FROM_ALL) target_include_directories(mbed-netsocket - INTERFACE + PUBLIC . ./include ./include/netsocket ) target_sources(mbed-netsocket - INTERFACE + PRIVATE source/DTLSSocket.cpp source/DTLSSocketWrapper.cpp source/EMACInterface.cpp @@ -49,26 +45,27 @@ ) target_compile_definitions(mbed-netsocket - INTERFACE + PUBLIC MBED_CONF_NSAPI_PRESENT=1 ) target_link_libraries(mbed-netsocket - INTERFACE + PUBLIC mbed-mbedtls mbed-lwipstack mbed-events + mbed-core-flags ) if("DEVICE_EMAC=1" IN_LIST MBED_TARGET_DEFINITIONS) target_link_libraries(mbed-netsocket - INTERFACE + PUBLIC mbed-emac ) endif() target_link_libraries(mbed-netsocket - INTERFACE + PUBLIC mbed-wifi mbed-cellular mbed-nanostack-libservice diff --git a/connectivity/netsocket/include/netsocket/CellularNonIPSocket.h b/connectivity/netsocket/include/netsocket/CellularNonIPSocket.h deleted file mode 100644 index 0d206ae..0000000 --- a/connectivity/netsocket/include/netsocket/CellularNonIPSocket.h +++ /dev/null @@ -1,170 +0,0 @@ -/* CellularNonIPSocket - * Copyright (c) 2015 ARM Limited - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CELLULARNONIPSOCKET_H -#define CELLULARNONIPSOCKET_H - -#include "netsocket/Socket.h" -#include "rtos/Mutex.h" -#include "rtos/EventFlags.h" -#include "Callback.h" -#include "mbed_atomic.h" -#include "mbed_toolchain.h" -#include "ControlPlane_netif.h" -#include "CellularContext.h" - -namespace mbed { - -/** \addtogroup netsocket */ -/** @{*/ - -/** Socket implementation for cellular Non-IP data delivery(NIDD). - * Relies on Control Plane CIoT EPS optimization feature, - * implemented in ControlPlane_netif class. - */ -class CellularNonIPSocket : public Socket { -public: - /** Destroy the socket. - * - * @note Closes socket if it's still open. - */ - ~CellularNonIPSocket() override; - - /** Creates a socket. - */ - CellularNonIPSocket(); - - /** Opens a socket on the given cellular context. - * - * @param cellular_context Cellular PDP context over which this socket is sending and - * receiving data. The context has support for providing - * a control plane interface for data delivery. - * @return NSAPI_ERROR_OK on success - * NSAPI_ERROR_PARAMETER otherwise - */ - nsapi_error_t open(mbed::CellularContext *cellular_context); - - /** Opens a socket that will use the given control plane interface for data delivery. - * Attaches the event as callback to the control plane interface. - * - * @param cp_netif Control plane interface for data delivery. - * @return NSAPI_ERROR_OK on success - * NSAPI_ERROR_PARAMETER otherwise - * - */ - nsapi_error_t open(mbed::ControlPlane_netif *cp_netif); - - /** Closes socket - * - * @return NSAPI_ERROR_OK on success - * NSAPI_ERROR_NO_SOCKET otherwise - */ - - nsapi_error_t close() override; - - /** Send data over a control plane cellular context. - * - * By default, send blocks until all data is sent. If socket is set to - * nonblocking or times out, a partial amount can be written. - * NSAPI_ERROR_WOULD_BLOCK is returned if no data was written. - * - * @param data Buffer of data to be sent. - * @param size Size of the buffer in bytes. - * @return Number of sent bytes on success, negative error - * code on failure. - */ - nsapi_size_or_error_t send(const void *data, nsapi_size_t size) override; - - /** Receive data from a socket. - * - * By default, recv blocks until some data is received. If socket is set to - * nonblocking or times out, NSAPI_ERROR_WOULD_BLOCK can be returned to - * indicate no data. - * - * @param data Pointer to buffer for received data. - * @param size Size of the buffer in bytes. - * @return Number of received bytes on success, negative error - * code on failure. - */ - nsapi_size_or_error_t recv(void *data, nsapi_size_t size) override; - - /** @copydoc Socket::set_blocking - */ - void set_blocking(bool blocking) override; - - /** @copydoc Socket::set_timeout - */ - void set_timeout(int timeout) override; - - /** @copydoc Socket::sigio - */ - void sigio(mbed::Callback func) override; - - /// NOT APPLICABLE - nsapi_error_t connect(const SocketAddress &address) override; - /// NOT APPLICABLE - Socket *accept(nsapi_error_t *error = NULL) override; - /// NOT APPLICABLE - nsapi_error_t listen(int backlog = 1) override; - /// NOT APPLICABLE - nsapi_error_t setsockopt(int level, int optname, const void *optval, unsigned optlen) override; - /// NOT APPLICABLE - nsapi_error_t getsockopt(int level, int optname, void *optval, unsigned *optlen) override; - /// NOT APPLICABLE - nsapi_error_t getpeername(SocketAddress *address) override; - /// NOT APPLICABLE - nsapi_size_or_error_t sendto(const SocketAddress &address, - const void *data, nsapi_size_t size) override; - /// NOT APPLICABLE - nsapi_size_or_error_t recvfrom(SocketAddress *address, - void *data, nsapi_size_t size) override; - /// NOT APPLICABLE - nsapi_size_or_error_t sendto_control(const SocketAddress &address, - const void *data, nsapi_size_t size, - nsapi_msghdr_t *control, nsapi_size_t control_size) override; - /// NOT APPLICABLE - nsapi_size_or_error_t recvfrom_control(SocketAddress *address, - void *data, nsapi_size_t size, - nsapi_msghdr_t *control, nsapi_size_t control_size) override; - /// NOT APPLICABLE - nsapi_error_t bind(const SocketAddress &address) override; - -protected: - void event(); - - uint32_t _timeout = osWaitForever; - mbed::Callback _event; - mbed::Callback _callback; - rtos::EventFlags _event_flag; - rtos::Mutex _lock; - uint8_t _readers = 0; - uint8_t _writers = 0; - core_util_atomic_flag _pending = CORE_UTIL_ATOMIC_FLAG_INIT; - - // Event flags - static const int READ_FLAG = 0x1u; - static const int WRITE_FLAG = 0x2u; - static const int FINISHED_FLAG = 0x3u; - - static ControlPlane_netif *_cp_netif; // there can be only one Non-IP socket - bool _opened = false; -}; - -/** @}*/ -} // namespace mbed - -#endif // CELLULARNONIPSOCKET_H diff --git a/connectivity/netsocket/source/CellularNonIPSocket.cpp b/connectivity/netsocket/source/CellularNonIPSocket.cpp deleted file mode 100644 index 11a0786..0000000 --- a/connectivity/netsocket/source/CellularNonIPSocket.cpp +++ /dev/null @@ -1,287 +0,0 @@ -/* CellularNonIPSocket -#include - * Copyright (c) 2015 ARM Limited - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if MBED_CONF_CELLULAR_PRESENT - -#include "platform/Callback.h" -#include "netsocket/CellularNonIPSocket.h" -#include - -using namespace mbed; - -ControlPlane_netif *CellularNonIPSocket::_cp_netif; - -CellularNonIPSocket::CellularNonIPSocket() = default; - -nsapi_error_t CellularNonIPSocket::open(CellularContext *cellular_context) -{ - if (cellular_context == nullptr) { - return NSAPI_ERROR_PARAMETER; - } - - return open(cellular_context->get_cp_netif()); -} - -CellularNonIPSocket::~CellularNonIPSocket() -{ - close(); -} - -nsapi_error_t CellularNonIPSocket::open(ControlPlane_netif *cp_netif) -{ - _lock.lock(); - - if (cp_netif == nullptr || _opened) { - _lock.unlock(); - return NSAPI_ERROR_PARAMETER; - } - - if (_cp_netif) { - _lock.unlock(); - return NSAPI_ERROR_NO_SOCKET; - } - _cp_netif = cp_netif; - - _event = callback(this, &CellularNonIPSocket::event); - _cp_netif->attach(Callback::thunk, &_event); - _opened = true; - - _lock.unlock(); - return NSAPI_ERROR_OK; -} - -nsapi_error_t CellularNonIPSocket::close() -{ - _lock.lock(); - - nsapi_error_t ret = NSAPI_ERROR_OK; - if (!_opened) { - return NSAPI_ERROR_NO_SOCKET; - } - - // Just in case - tell the stack not to callback any more, then remove this socket. - _cp_netif->attach(nullptr, nullptr); - _opened = false; - _cp_netif = nullptr; // Invalidate the cp_netif pointer - otherwise open() fails. - - // Wakeup anything in a blocking operation - // on this socket - event(); - - // Wait until all readers and writers are gone - while (_readers || _writers) { - _lock.unlock(); - _event_flag.wait_any(FINISHED_FLAG, osWaitForever); - _lock.lock(); - } - - _lock.unlock(); - - return ret; -} - -nsapi_size_or_error_t CellularNonIPSocket::send(const void *data, nsapi_size_t size) -{ - if (!data) { - return NSAPI_ERROR_PARAMETER; - } - _lock.lock(); - nsapi_size_or_error_t ret; - - _writers++; - - while (true) { - if (!_opened) { - ret = NSAPI_ERROR_NO_SOCKET; - break; - } - - core_util_atomic_flag_clear(&_pending); - nsapi_size_or_error_t sent = _cp_netif->send(data, size); - if ((0 == _timeout) || (NSAPI_ERROR_WOULD_BLOCK != sent)) { - ret = sent; - break; - } else { - uint32_t flag; - - // Release lock before blocking so other threads - // accessing this object aren't blocked - _lock.unlock(); - flag = _event_flag.wait_any(WRITE_FLAG, _timeout); - _lock.lock(); - - if (flag & osFlagsError) { - // Timeout break - ret = NSAPI_ERROR_WOULD_BLOCK; - break; - } - } - } - - _writers--; - if (!_opened || !_writers) { - _event_flag.set(FINISHED_FLAG); - } - _lock.unlock(); - return ret; -} - -nsapi_size_or_error_t CellularNonIPSocket::recv(void *buffer, nsapi_size_t size) -{ - _lock.lock(); - nsapi_size_or_error_t ret = NSAPI_ERROR_NO_SOCKET; - - _readers++; - - while (true) { - if (!_opened) { - break; - } - - core_util_atomic_flag_clear(&_pending); - nsapi_size_or_error_t recv = _cp_netif->recv(buffer, size); - - // Non-blocking sockets always return. Blocking only returns when success or errors other than WOULD_BLOCK - if ((0 == _timeout) || (NSAPI_ERROR_WOULD_BLOCK != recv)) { - ret = recv; - break; - } else { - uint32_t flag; - - // Release lock before blocking so other threads - // accessing this object aren't blocked - _lock.unlock(); - flag = _event_flag.wait_any(READ_FLAG, _timeout); - _lock.lock(); - - if (flag & osFlagsError) { - // Timeout break - // Poll once more for a possibly missed data received indication - ret = _cp_netif->recv(buffer, size); - break; - } - } - } - - _readers--; - if (!_opened || !_readers) { - _event_flag.set(FINISHED_FLAG); - } - - _lock.unlock(); - return ret; -} - -void CellularNonIPSocket::set_blocking(bool blocking) -{ - set_timeout(blocking ? -1 : 0); -} - -void CellularNonIPSocket::set_timeout(int timeout) -{ - _lock.lock(); - - if (timeout >= 0) { - _timeout = (uint32_t)timeout; - } else { - _timeout = osWaitForever; - } - - _lock.unlock(); -} - -void CellularNonIPSocket::event() -{ - _event_flag.set(READ_FLAG | WRITE_FLAG); - - if (_callback && !core_util_atomic_flag_test_and_set(&_pending)) { - _callback(); - } -} - -void CellularNonIPSocket::sigio(Callback callback) -{ - _lock.lock(); - _callback = callback; - _lock.unlock(); -} - -nsapi_error_t CellularNonIPSocket::connect(const SocketAddress &address) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -Socket *CellularNonIPSocket::accept(nsapi_error_t *error) -{ - if (error) { - *error = NSAPI_ERROR_UNSUPPORTED; - } - return nullptr; -} - -nsapi_error_t CellularNonIPSocket::listen(int backlog) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -nsapi_size_or_error_t CellularNonIPSocket::sendto(const SocketAddress &address, - const void *data, nsapi_size_t size) -{ - return NSAPI_ERROR_UNSUPPORTED; -} -nsapi_size_or_error_t CellularNonIPSocket::sendto_control(const SocketAddress &address, - const void *data, nsapi_size_t size, - nsapi_msghdr_t *control, nsapi_size_t control_size) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -nsapi_size_or_error_t CellularNonIPSocket::recvfrom(SocketAddress *address, - void *data, nsapi_size_t size) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -nsapi_size_or_error_t CellularNonIPSocket::recvfrom_control(SocketAddress *address, - void *data, nsapi_size_t size, - nsapi_msghdr_t *control, nsapi_size_t control_size) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -nsapi_error_t CellularNonIPSocket::setsockopt(int level, int optname, const void *optval, unsigned optlen) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -nsapi_error_t CellularNonIPSocket::getsockopt(int level, int optname, void *optval, unsigned *optlen) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -nsapi_error_t CellularNonIPSocket::getpeername(SocketAddress *address) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -nsapi_error_t CellularNonIPSocket::bind(const SocketAddress &address) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -#endif diff --git a/events/CMakeLists.txt b/events/CMakeLists.txt index 99feb99..2321150 100644 --- a/events/CMakeLists.txt +++ b/events/CMakeLists.txt @@ -9,10 +9,10 @@ endif() endif() -add_library(mbed-events INTERFACE) +add_library(mbed-events STATIC EXCLUDE_FROM_ALL) target_include_directories(mbed-events - INTERFACE + PUBLIC . ./include ./include/events @@ -20,7 +20,7 @@ ) target_sources(mbed-events - INTERFACE + PRIVATE source/EventQueue.cpp source/equeue.c source/equeue_mbed.cpp @@ -29,6 +29,11 @@ ) target_compile_definitions(mbed-events - INTERFACE + PUBLIC MBED_CONF_EVENTS_PRESENT=1 ) + +target_link_libraries(mbed-events + PUBLIC + mbed-core-flags +) \ No newline at end of file diff --git a/platform/randlib/CMakeLists.txt b/platform/randlib/CMakeLists.txt index 790b71d..1231abf 100644 --- a/platform/randlib/CMakeLists.txt +++ b/platform/randlib/CMakeLists.txt @@ -1,21 +1,16 @@ # Copyright (c) 2020 ARM Limited. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -add_library(mbed-randlib INTERFACE) +add_library(mbed-randlib STATIC EXCLUDE_FROM_ALL) target_include_directories(mbed-randlib - INTERFACE + PUBLIC include include/mbed-client-randlib include/mbed-client-randlib/platform ) target_sources(mbed-randlib - INTERFACE + PRIVATE source/randLIB.c ) - -target_link_libraries(mbed-randlib - INTERFACE - mbed-nanostack -)