
This is an example based on mbed-os cellular APIs that demonstrates a TCP or UDP echo transaction with a public echo server.
Revision 40:c46ee5b71843, committed 2019-05-06
- Comitter:
- mbed_official
- Date:
- Mon May 06 09:02:01 2019 +0100
- Parent:
- 39:e57f130d65bd
- Child:
- 41:1f13c9a6ee23
- Commit message:
- Merge pull request #135 from mirelachirica/nonip_socket_support
Added NonIP socket example
.
Commit copied from https://github.com/ARMmbed/mbed-os-example-cellular
Changed in this revision
README.md | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/README.md Tue Apr 30 11:02:03 2019 +0100 +++ b/README.md Mon May 06 09:02:01 2019 +0100 @@ -38,7 +38,7 @@ "nsapi.default-cellular-password": 0 ``` -### Selecting socket type (TCP or UDP) +### Selecting socket type (TCP, UDP or NONIP) You can choose which socket type the application should use; however, please note that TCP is a more reliable transmission protocol. For example: @@ -137,6 +137,7 @@ * The modem may support only a fixed baud-rate, such as `"platform.default-serial-baud-rate": 9600`. * The modem and network may only support IPv6 in which case `"lwip.ipv6-enabled": true` shall be defined. * The SIM and modem must have compatible cellular technology (3G, 4G, NB-IoT, ...) supported and cellular network available. +* Enable CIoT optimization for NONIP socket `control-plane-opt: true`. If you have problems to get started with debugging, you can review the [documentation](https://os.mbed.com/docs/latest/tutorials/debugging.html) for suggestions on what could be wrong and how to fix it.
--- a/main.cpp Tue Apr 30 11:02:03 2019 +0100 +++ b/main.cpp Mon May 06 09:02:01 2019 +0100 @@ -16,11 +16,14 @@ #include "mbed.h" #include "common_functions.h" +#include "CellularNonIPSocket.h" +#include "CellularDevice.h" #include "UDPSocket.h" #include "CellularLog.h" #define UDP 0 #define TCP 1 +#define NONIP 2 // Number of retries / #define RETRY_COUNT 3 @@ -129,28 +132,59 @@ } /** - * Opens a UDP or a TCP socket with the given echo server and performs an echo - * transaction retrieving current. + * Opens: + * - UDP or TCP socket with the given echo server and performs an echo + * transaction retrieving current. + * - Cellular Non-IP socket for which the data delivery path is decided + * by network's control plane CIoT optimisation setup, for the given APN. */ nsapi_error_t test_send_recv() { nsapi_size_or_error_t retcode; #if MBED_CONF_APP_SOCK_TYPE == TCP TCPSocket sock; -#else +#elif MBED_CONF_APP_SOCK_TYPE == UDP UDPSocket sock; +#elif MBED_CONF_APP_SOCK_TYPE == NONIP + CellularNonIPSocket sock; #endif +#if MBED_CONF_APP_SOCK_TYPE == NONIP + retcode = sock.open((CellularContext*)iface); +#else retcode = sock.open(iface); +#endif + if (retcode != NSAPI_ERROR_OK) { #if MBED_CONF_APP_SOCK_TYPE == TCP print_function("TCPSocket.open() fails, code: %d\n", retcode); -#else +#elif MBED_CONF_APP_SOCK_TYPE == UDP print_function("UDPSocket.open() fails, code: %d\n", retcode); +#elif MBED_CONF_APP_SOCK_TYPE == NONIP + print_function("CellularNonIPSocket.open() fails, code: %d\n", retcode); #endif return -1; } + int n = 0; + const char *echo_string = "TEST"; + char recv_buf[4]; + + sock.set_timeout(15000); + +#if MBED_CONF_APP_SOCK_TYPE == NONIP + retcode = sock.send((void*) echo_string, sizeof(echo_string)); + if (retcode < 0) { + print_function("CellularNonIPSocket.send() fails, code: %d\n", retcode); + return -1; + } else { + print_function("CellularNonIPSocket: Sent %d Bytes\n", retcode); + } + + n = sock.recv((void*) recv_buf, sizeof(recv_buf)); + +#else + SocketAddress sock_addr; retcode = iface->gethostbyname(host_name, &sock_addr); if (retcode != NSAPI_ERROR_OK) { @@ -160,10 +194,6 @@ sock_addr.set_port(port); - sock.set_timeout(15000); - int n = 0; - const char *echo_string = "TEST"; - char recv_buf[4]; #if MBED_CONF_APP_SOCK_TYPE == TCP retcode = sock.connect(sock_addr); if (retcode < 0) { @@ -193,6 +223,7 @@ n = sock.recvfrom(&sock_addr, (void*) recv_buf, sizeof(recv_buf)); #endif +#endif sock.close(); @@ -219,10 +250,17 @@ dot_thread.start(dot_event); #endif // #if MBED_CONF_MBED_TRACE_ENABLE - // sim pin, apn, credentials and possible plmn are taken atuomtically from json when using get_default_instance() - iface = NetworkInterface::get_default_instance(); +#if MBED_CONF_APP_SOCK_TYPE == NONIP + iface = CellularContext::get_default_nonip_instance(); +#else + iface = CellularContext::get_default_instance(); +#endif + MBED_ASSERT(iface); + // sim pin, apn, credentials and possible plmn are taken automatically from json when using NetworkInterface::set_default_parameters() + iface->set_default_parameters(); + nsapi_error_t retcode = NSAPI_ERROR_NO_CONNECTION; /* Attempt to connect to a cellular network */