Example program that uses the mbed UbloxATCellularInterface or OnboardCellularInterface classes to perform simple sockets operations. This program can be used on the C027 and C030 boards, including the C030 N2xx version with a little editing.

Dependencies:   ublox-at-cellular-interface ublox-cellular-base ublox-cellular-base-n2xx ublox-at-cellular-interface-n2xx

Revision:
33:48101a4c3f14
Parent:
32:bdc45c7052cc
Child:
35:8e65f2bee044
--- a/main.cpp	Mon Oct 30 14:49:58 2017 +0000
+++ b/main.cpp	Wed Feb 28 15:13:03 2018 +0000
@@ -16,7 +16,7 @@
 
 #include "mbed.h"
 #include "UbloxATCellularInterface.h"
-#include "UbloxPPPCellularInterface.h"
+#include "OnboardCellularInterface.h"
 #include "UbloxATCellularInterfaceN2xx.h"
 
 // You must select the correct interface library for your board, by
@@ -24,12 +24,12 @@
 // indicated with a "Y" in the table below.
 //
 //                            C030_U201   C030_N211      C027
-// UbloxPPPCellularInterface      Y            -           Y
 // UbloxATCellularInterface       Y            -           Y
+// OnboardCellularInterface       Y            -           Y
 // UbloxATCellularInterfaceN2xx   -            Y           -
 // Note: the N211 module supports only UDP, not TCP
 
-// UbloxPPPCellularInterface uses LWIP and the PPP cellular interface
+// OnboardCellularInterface uses LWIP and the PPP cellular interface
 // on the mbed MCU, while using UbloxATCellularInterface and
 // UbloxATCellularInterfaceN2xx uses an IP stack on the cellular
 // module and hence uses less RAM (significant on C027).  This also
@@ -39,7 +39,7 @@
 // library).  However, it is slower than using the LWIP/PPP on the mbed
 // MCU interface since more string parsing is required.
 #define INTERFACE_CLASS  UbloxATCellularInterface
-//#define INTERFACE_CLASS  UbloxPPPCellularInterface
+//#define INTERFACE_CLASS  OnboardCellularInterface
 //#define INTERFACE_CLASS  UbloxATCellularInterfaceN2xx
 
 // The credentials of the SIM in the board.  If PIN checking is enabled
@@ -124,7 +124,7 @@
 }
 
 /* This example program for the u-blox C030 and C027 boards instantiates
- * the UbloxAtCellularInterface or UbloxPPPCellularInterface and uses it
+ * the UbloxATCellularInterface or OnboardCellularInterface and uses it
  * to make a simple sockets connection to a server, using 2.pool.ntp.org
  * for UDP and developer.mbed.org for TCP.  For a more comprehensive example,
  * where higher layer protocols make use of the same sockets interface,
@@ -166,113 +166,105 @@
     
     good();
     printf("Starting up, please wait up to 180 seconds for network registration to complete...\n");
-    if (interface->init(PIN)) {
+    interface->set_credentials(APN, USERNAME, PASSWORD);
+    for (x = 0; interface->connect(PIN) != 0; x++) {
+        if (x > 0) {
+            bad();
+            printf("Retrying (have you checked that an antenna is plugged in and your APN is correct?)...\n");
+        }
+    }
+    pulseEvent();
+    
+    printf("Getting the IP address of \"developer.mbed.org\" and \"2.pool.ntp.org\"...\n");
+    if ((interface->gethostbyname("2.pool.ntp.org", &udpServer) == 0) &&
+        (interface->gethostbyname("developer.mbed.org", &tcpServer) == 0)) {
         pulseEvent();
-        interface->set_credentials(APN, USERNAME, PASSWORD);
-        printf("Registered, connecting to the packet network...\n");
-        for (x = 0; interface->connect() != 0; x++) {
-            if (x > 0) {
-                bad();
-                printf("Retrying (have you checked that an antenna is plugged in and your APN is correct?)...\n");
-            }
-        }
-        pulseEvent();
-        
-        printf("Getting the IP address of \"developer.mbed.org\" and \"2.pool.ntp.org\"...\n");
-        if ((interface->gethostbyname("2.pool.ntp.org", &udpServer) == 0) &&
-            (interface->gethostbyname("developer.mbed.org", &tcpServer) == 0)) {
-            pulseEvent();
+
+        udpServer.set_port(123);
+        printf("\"2.pool.ntp.org\" address: %s on port %d.\n", udpServer.get_ip_address(), udpServer.get_port());
+        printf("\"developer.mbed.org\" address: %s on port %d.\n", tcpServer.get_ip_address(), tcpServer.get_port());
+        tcpServer.set_port(80);
 
-            udpServer.set_port(123);
-            printf("\"2.pool.ntp.org\" address: %s on port %d.\n", udpServer.get_ip_address(), udpServer.get_port());
-            printf("\"developer.mbed.org\" address: %s on port %d.\n", tcpServer.get_ip_address(), tcpServer.get_port());
-            tcpServer.set_port(80);
-
-            printf("Performing socket operations in a loop (until the user button is pressed on C030 or forever on C027)...\n");
-            while (!buttonPressed) {
-                // UDP Sockets
-                printf("=== UDP ===\n");
-                printf("Opening a UDP socket...\n");
-                if (sockUdp.open(interface) == 0) {
+        printf("Performing socket operations in a loop (until the user button is pressed on C030 or forever on C027)...\n");
+        while (!buttonPressed) {
+            // UDP Sockets
+            printf("=== UDP ===\n");
+            printf("Opening a UDP socket...\n");
+            if (sockUdp.open(interface) == 0) {
+                pulseEvent();
+                printf("UDP socket open.\n");
+                sockUdp.set_timeout(10000);
+                printf("Sending time request to \"2.pool.ntp.org\" over UDP socket...\n");
+                memset (buf, 0, sizeof(buf));
+                *buf = '\x1b';
+                if (sockUdp.sendto(udpServer, (void *) buf, 48) == 48) {
                     pulseEvent();
-                    printf("UDP socket open.\n");
-                    sockUdp.set_timeout(10000);
-                    printf("Sending time request to \"2.pool.ntp.org\" over UDP socket...\n");
-                    memset (buf, 0, sizeof(buf));
-                    *buf = '\x1b';
-                    if (sockUdp.sendto(udpServer, (void *) buf, 48) == 48) {
+                    printf("Socket send completed, waiting for UDP response...\n");
+                    x = sockUdp.recvfrom(&udpSenderAddress, buf, sizeof (buf));
+                    if (x > 0) {
                         pulseEvent();
-                        printf("Socket send completed, waiting for UDP response...\n");
-                        x = sockUdp.recvfrom(&udpSenderAddress, buf, sizeof (buf));
+                        printf("Received %d byte response from server %s on UDP socket:\n"
+                               "-------------------------------------------------------\n",
+                               x, udpSenderAddress.get_ip_address());
+                        printNtpTime(buf, x);
+                        printf("-------------------------------------------------------\n");
+                    }
+                }                
+                printf("Closing socket...\n");
+                sockUdp.close();
+                pulseEvent();
+                printf("Socket closed.\n");
+            }
+            
+#ifndef TARGET_UBLOX_C030_N211
+            // TCP Sockets
+            printf("=== TCP ===\n");
+            printf("Opening a TCP socket...\n");
+            if (sockTcp.open(interface) == 0) {
+                pulseEvent();
+                printf("TCP socket open.\n");
+                sockTcp.set_timeout(10000);
+                printf("Connecting socket to %s on port %d...\n", tcpServer.get_ip_address(), tcpServer.get_port());
+                if (sockTcp.connect(tcpServer) == 0) {
+                    pulseEvent();
+                    printf("Connected, sending HTTP GET request to \"developer.mbed.org\" over socket...\n");
+                    strcpy (buf, "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\r\n\r\n");
+                    // Note: since this is a short string we can send it in one go as it will
+                    // fit within the default buffer sizes.  Normally you should call sock.send()
+                    // in a loop until your entire buffer has been sent.
+                    if (sockTcp.send((void *) buf, strlen(buf)) == (int) strlen(buf)) {
+                        pulseEvent();
+                        printf("Socket send completed, waiting for response...\n");
+                        x = sockTcp.recv(buf, sizeof (buf));
                         if (x > 0) {
                             pulseEvent();
-                            printf("Received %d byte response from server %s on UDP socket:\n"
-                                   "-------------------------------------------------------\n",
-                                   x, udpSenderAddress.get_ip_address());
-                            printNtpTime(buf, x);
-                            printf("-------------------------------------------------------\n");
-                        }
-                    }                
-                    printf("Closing socket...\n");
-                    sockUdp.close();
-                    pulseEvent();
-                    printf("Socket closed.\n");
-                }
-                
-#ifndef TARGET_UBLOX_C030_N211
-                // TCP Sockets
-                printf("=== TCP ===\n");
-                printf("Opening a TCP socket...\n");
-                if (sockTcp.open(interface) == 0) {
-                    pulseEvent();
-                    printf("TCP socket open.\n");
-                    sockTcp.set_timeout(10000);
-                    printf("Connecting socket to %s on port %d...\n", tcpServer.get_ip_address(), tcpServer.get_port());
-                    if (sockTcp.connect(tcpServer) == 0) {
-                        pulseEvent();
-                        printf("Connected, sending HTTP GET request to \"developer.mbed.org\" over socket...\n");
-                        strcpy (buf, "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\r\n\r\n");
-                        // Note: since this is a short string we can send it in one go as it will
-                        // fit within the default buffer sizes.  Normally you should call sock.send()
-                        // in a loop until your entire buffer has been sent.
-                        if (sockTcp.send((void *) buf, strlen(buf)) == (int) strlen(buf)) {
-                            pulseEvent();
-                            printf("Socket send completed, waiting for response...\n");
-                            x = sockTcp.recv(buf, sizeof (buf));
-                            if (x > 0) {
-                                pulseEvent();
-                                printf("Received %d byte response from server on TCP socket:\n"
-                                       "----------------------------------------------------\n%.*s"
-                                       "----------------------------------------------------\n",
-                                        x, x, buf);
-                            }
+                            printf("Received %d byte response from server on TCP socket:\n"
+                                   "----------------------------------------------------\n%.*s"
+                                   "----------------------------------------------------\n",
+                                    x, x, buf);
                         }
                     }
-                    printf("Closing socket...\n");
-                    sockTcp.close();
-                    pulseEvent();
-                    printf("Socket closed.\n");
                 }
-#endif
-                wait_ms(5000);
-#ifndef TARGET_UBLOX_C027
-                printf("[Checking if user button has been pressed]\n");
-#endif
+                printf("Closing socket...\n");
+                sockTcp.close();
+                pulseEvent();
+                printf("Socket closed.\n");
             }
-            
-            pulseEvent();
-            printf("User button was pressed, stopping...\n");
-            interface->disconnect();
-            interface->deinit();
-            ledOff();
-            printf("Stopped.\n");
-        } else {
-            bad();
-            printf("Unable to get IP address of \"developer.mbed.org\" or \"2.pool.ntp.org\".\n");
+#endif
+            wait_ms(5000);
+#ifndef TARGET_UBLOX_C027
+            printf("[Checking if user button has been pressed]\n");
+#endif
         }
+        
+        pulseEvent();
+        printf("User button was pressed, stopping...\n");
+        interface->disconnect();
+        ledOff();
+        printf("Stopped.\n");
     } else {
         bad();
-        printf("Unable to initialise the interface.\n");
+        printf("Unable to get IP address of \"developer.mbed.org\" or \"2.pool.ntp.org\".\n");
     }
 }