
This is an example based on mbed-os cellular APIs that demonstrates a TCP or UDP echo transaction with a public echo server.
Diff: main.cpp
- Revision:
- 40:c46ee5b71843
- Parent:
- 36:6294a71c9e9e
- Child:
- 42:cab443dff75e
--- 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 */