Example NB-IoT Project for ublox C030-N211
Dependencies: ublox-at-cellular-interface ublox-cellular-base ublox-cellular-base-n2xx ublox-at-cellular-interface-n2xx
main.cpp@36:2faea462ea54, 2018-12-29 (annotated)
- Committer:
- andreas_hbrs
- Date:
- Sat Dec 29 12:34:08 2018 +0000
- Revision:
- 36:2faea462ea54
- Parent:
- 35:a543c24a27a3
commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rob.meades@u-blox.com | 1:581335dbdd60 | 1 | /* mbed Microcontroller Library |
rob.meades@u-blox.com | 1:581335dbdd60 | 2 | * Copyright (c) 2017 u-blox |
rob.meades@u-blox.com | 1:581335dbdd60 | 3 | * |
rob.meades@u-blox.com | 1:581335dbdd60 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
rob.meades@u-blox.com | 1:581335dbdd60 | 5 | * you may not use this file except in compliance with the License. |
rob.meades@u-blox.com | 1:581335dbdd60 | 6 | * You may obtain a copy of the License at |
rob.meades@u-blox.com | 1:581335dbdd60 | 7 | * |
rob.meades@u-blox.com | 1:581335dbdd60 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
rob.meades@u-blox.com | 1:581335dbdd60 | 9 | * |
rob.meades@u-blox.com | 1:581335dbdd60 | 10 | * Unless required by applicable law or agreed to in writing, software |
rob.meades@u-blox.com | 1:581335dbdd60 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
rob.meades@u-blox.com | 1:581335dbdd60 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
rob.meades@u-blox.com | 1:581335dbdd60 | 13 | * See the License for the specific language governing permissions and |
rob.meades@u-blox.com | 1:581335dbdd60 | 14 | * limitations under the License. |
rob.meades@u-blox.com | 1:581335dbdd60 | 15 | */ |
rob.meades@u-blox.com | 1:581335dbdd60 | 16 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 17 | #include "mbed.h" |
rob.meades@u-blox.com | 1:581335dbdd60 | 18 | #include "UbloxATCellularInterface.h" |
RobMeades | 33:48101a4c3f14 | 19 | #include "OnboardCellularInterface.h" |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 20 | #include "UbloxATCellularInterfaceN2xx.h" |
RobMeades | 8:3e170c40a284 | 21 | |
rob.meades@u-blox.com | 31:4a36566b5385 | 22 | // You must select the correct interface library for your board, by |
rob.meades@u-blox.com | 31:4a36566b5385 | 23 | // uncommenting the correct line below. Supported combinations are |
rob.meades@u-blox.com | 31:4a36566b5385 | 24 | // indicated with a "Y" in the table below. |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 25 | // |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 26 | // C030_U201 C030_N211 C027 |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 27 | // UbloxATCellularInterface Y - Y |
RobMeades | 33:48101a4c3f14 | 28 | // OnboardCellularInterface Y - Y |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 29 | // UbloxATCellularInterfaceN2xx - Y - |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 30 | // Note: the N211 module supports only UDP, not TCP |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 31 | |
RobMeades | 33:48101a4c3f14 | 32 | // OnboardCellularInterface uses LWIP and the PPP cellular interface |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 33 | // on the mbed MCU, while using UbloxATCellularInterface and |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 34 | // UbloxATCellularInterfaceN2xx uses an IP stack on the cellular |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 35 | // module and hence uses less RAM (significant on C027). This also |
RobMeades | 8:3e170c40a284 | 36 | // allows other AT command operations (e.g. sending an SMS) to happen |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 37 | // during a data transfer (for which you should replace the |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 38 | // UbloxATCellularInterface library with the UbloxATCellularInterfaceExt |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 39 | // library). However, it is slower than using the LWIP/PPP on the mbed |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 40 | // MCU interface since more string parsing is required. |
andreas_hbrs | 35:a543c24a27a3 | 41 | //#define INTERFACE_CLASS UbloxATCellularInterface |
RobMeades | 33:48101a4c3f14 | 42 | //#define INTERFACE_CLASS OnboardCellularInterface |
andreas_hbrs | 35:a543c24a27a3 | 43 | #define INTERFACE_CLASS UbloxATCellularInterfaceN2xx |
rob.meades@u-blox.com | 1:581335dbdd60 | 44 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 45 | // The credentials of the SIM in the board. If PIN checking is enabled |
rob.meades@u-blox.com | 1:581335dbdd60 | 46 | // for your SIM card you must set this to the required PIN. |
andreas_hbrs | 35:a543c24a27a3 | 47 | #define PIN "1833" |
rob.meades@u-blox.com | 1:581335dbdd60 | 48 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 49 | // Network credentials. You should set this according to your |
rob.meades@u-blox.com | 30:4e55e975dd0b | 50 | // network/SIM card. For C030 non-N2xx boards, leave the parameters as NULL |
rob.meades@u-blox.com | 1:581335dbdd60 | 51 | // otherwise, if you do not know the APN for your network, you may |
rob.meades@u-blox.com | 1:581335dbdd60 | 52 | // either try the fairly common "internet" for the APN (and leave the |
rob.meades@u-blox.com | 1:581335dbdd60 | 53 | // username and password NULL), or you may leave all three as NULL and then |
rob.meades@u-blox.com | 1:581335dbdd60 | 54 | // a lookup will be attempted for a small number of known networks |
rob.meades@u-blox.com | 1:581335dbdd60 | 55 | // (see APN_db.h in mbed-os/features/netsocket/cellular/utils). |
andreas_hbrs | 35:a543c24a27a3 | 56 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 57 | #define APN NULL |
rob.meades@u-blox.com | 1:581335dbdd60 | 58 | #define USERNAME NULL |
rob.meades@u-blox.com | 1:581335dbdd60 | 59 | #define PASSWORD NULL |
rob.meades@u-blox.com | 1:581335dbdd60 | 60 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 61 | // LEDs |
rob.meades@u-blox.com | 1:581335dbdd60 | 62 | DigitalOut ledRed(LED1, 1); |
rob.meades@u-blox.com | 1:581335dbdd60 | 63 | DigitalOut ledGreen(LED2, 1); |
rob.meades@u-blox.com | 1:581335dbdd60 | 64 | DigitalOut ledBlue(LED3, 1); |
rob.meades@u-blox.com | 1:581335dbdd60 | 65 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 66 | // The user button |
rob.meades@u-blox.com | 1:581335dbdd60 | 67 | volatile bool buttonPressed = false; |
rob.meades@u-blox.com | 1:581335dbdd60 | 68 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 69 | static void good() { |
rob.meades@u-blox.com | 1:581335dbdd60 | 70 | ledGreen = 0; |
rob.meades@u-blox.com | 1:581335dbdd60 | 71 | ledBlue = 1; |
rob.meades@u-blox.com | 1:581335dbdd60 | 72 | ledRed = 1; |
rob.meades@u-blox.com | 1:581335dbdd60 | 73 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 74 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 75 | static void bad() { |
rob.meades@u-blox.com | 1:581335dbdd60 | 76 | ledRed = 0; |
rob.meades@u-blox.com | 1:581335dbdd60 | 77 | ledGreen = 1; |
rob.meades@u-blox.com | 1:581335dbdd60 | 78 | ledBlue = 1; |
rob.meades@u-blox.com | 1:581335dbdd60 | 79 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 80 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 81 | static void event() { |
rob.meades@u-blox.com | 1:581335dbdd60 | 82 | ledBlue = 0; |
rob.meades@u-blox.com | 1:581335dbdd60 | 83 | ledRed = 1; |
rob.meades@u-blox.com | 1:581335dbdd60 | 84 | ledGreen = 1; |
rob.meades@u-blox.com | 1:581335dbdd60 | 85 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 86 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 87 | static void pulseEvent() { |
rob.meades@u-blox.com | 1:581335dbdd60 | 88 | event(); |
rob.meades@u-blox.com | 1:581335dbdd60 | 89 | wait_ms(500); |
rob.meades@u-blox.com | 1:581335dbdd60 | 90 | good(); |
rob.meades@u-blox.com | 1:581335dbdd60 | 91 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 92 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 93 | static void ledOff() { |
rob.meades@u-blox.com | 1:581335dbdd60 | 94 | ledBlue = 1; |
rob.meades@u-blox.com | 1:581335dbdd60 | 95 | ledRed = 1; |
rob.meades@u-blox.com | 1:581335dbdd60 | 96 | ledGreen = 1; |
rob.meades@u-blox.com | 1:581335dbdd60 | 97 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 98 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 99 | static void printNtpTime(char * buf, int len) |
rob.meades@u-blox.com | 1:581335dbdd60 | 100 | { |
rob.meades@u-blox.com | 1:581335dbdd60 | 101 | time_t timestamp = 0; |
rob.meades@u-blox.com | 1:581335dbdd60 | 102 | struct tm *localTime; |
rob.meades@u-blox.com | 1:581335dbdd60 | 103 | char timeString[25]; |
rob.meades@u-blox.com | 1:581335dbdd60 | 104 | time_t TIME1970 = 2208988800U; |
rob.meades@u-blox.com | 1:581335dbdd60 | 105 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 106 | if (len >= 43) { |
rob.meades@u-blox.com | 1:581335dbdd60 | 107 | timestamp |= ((int) *(buf + 40)) << 24; |
rob.meades@u-blox.com | 1:581335dbdd60 | 108 | timestamp |= ((int) *(buf + 41)) << 16; |
rob.meades@u-blox.com | 1:581335dbdd60 | 109 | timestamp |= ((int) *(buf + 42)) << 8; |
rob.meades@u-blox.com | 1:581335dbdd60 | 110 | timestamp |= ((int) *(buf + 43)); |
rob.meades@u-blox.com | 1:581335dbdd60 | 111 | timestamp -= TIME1970; |
rob.meades@u-blox.com | 1:581335dbdd60 | 112 | localTime = localtime(×tamp); |
rob.meades@u-blox.com | 1:581335dbdd60 | 113 | if (localTime) { |
rob.meades@u-blox.com | 1:581335dbdd60 | 114 | if (strftime(timeString, sizeof(timeString), "%a %b %d %H:%M:%S %Y", localTime) > 0) { |
rob.meades@u-blox.com | 1:581335dbdd60 | 115 | printf("NTP timestamp is %s.\n", timeString); |
rob.meades@u-blox.com | 1:581335dbdd60 | 116 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 117 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 118 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 119 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 120 | |
andreas_hbrs | 35:a543c24a27a3 | 121 | static void printUbloxEcho(char * buf, int len) |
andreas_hbrs | 35:a543c24a27a3 | 122 | { |
andreas_hbrs | 35:a543c24a27a3 | 123 | printf("Received Message = "); |
andreas_hbrs | 35:a543c24a27a3 | 124 | for(int i = 0;i < len; i++) { |
andreas_hbrs | 35:a543c24a27a3 | 125 | printf("%s", &buf[i]); |
andreas_hbrs | 35:a543c24a27a3 | 126 | } |
andreas_hbrs | 35:a543c24a27a3 | 127 | printf("\n"); |
andreas_hbrs | 35:a543c24a27a3 | 128 | } |
andreas_hbrs | 35:a543c24a27a3 | 129 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 130 | static void cbButton() |
rob.meades@u-blox.com | 1:581335dbdd60 | 131 | { |
rob.meades@u-blox.com | 1:581335dbdd60 | 132 | buttonPressed = true; |
rob.meades@u-blox.com | 1:581335dbdd60 | 133 | pulseEvent(); |
rob.meades@u-blox.com | 1:581335dbdd60 | 134 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 135 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 136 | /* This example program for the u-blox C030 and C027 boards instantiates |
RobMeades | 33:48101a4c3f14 | 137 | * the UbloxATCellularInterface or OnboardCellularInterface and uses it |
rob.meades@u-blox.com | 30:4e55e975dd0b | 138 | * to make a simple sockets connection to a server, using 2.pool.ntp.org |
rob.meades@u-blox.com | 13:d31b8735cca8 | 139 | * for UDP and developer.mbed.org for TCP. For a more comprehensive example, |
rob.meades@u-blox.com | 13:d31b8735cca8 | 140 | * where higher layer protocols make use of the same sockets interface, |
rob.meades@u-blox.com | 13:d31b8735cca8 | 141 | * see example-ublox-mbed-client. |
rob.meades@u-blox.com | 1:581335dbdd60 | 142 | * Progress may be monitored with a serial terminal running at 9600 baud. |
rob.meades@u-blox.com | 1:581335dbdd60 | 143 | * The LED on the C030 board will turn green when this program is |
rob.meades@u-blox.com | 1:581335dbdd60 | 144 | * operating correctly, pulse blue when a sockets operation is completed |
rob.meades@u-blox.com | 1:581335dbdd60 | 145 | * and turn red if there is a failure. |
rob.meades@u-blox.com | 1:581335dbdd60 | 146 | */ |
rob.meades@u-blox.com | 1:581335dbdd60 | 147 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 148 | int main() |
rob.meades@u-blox.com | 1:581335dbdd60 | 149 | { |
andreas_hbrs | 35:a543c24a27a3 | 150 | // INTERFACE_CLASS *interface = new INTERFACE_CLASS(); |
RobMeades | 5:bf352de1d3e5 | 151 | // If you need to debug the cellular interface, comment out the |
RobMeades | 5:bf352de1d3e5 | 152 | // instantiation above and uncomment the one below. |
rob.meades@u-blox.com | 31:4a36566b5385 | 153 | // For the N2xx interface, change xxx to MBED_CONF_UBLOX_CELL_BAUD_RATE, |
rob.meades@u-blox.com | 31:4a36566b5385 | 154 | // while for the non-N2xx interface change it to MBED_CONF_UBLOX_CELL_N2XX_BAUD_RATE. |
andreas_hbrs | 35:a543c24a27a3 | 155 | INTERFACE_CLASS *interface = new INTERFACE_CLASS(MDMTXD, MDMRXD, |
andreas_hbrs | 35:a543c24a27a3 | 156 | MBED_CONF_UBLOX_CELL_N2XX_BAUD_RATE, |
andreas_hbrs | 35:a543c24a27a3 | 157 | true); |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 158 | #ifndef TARGET_UBLOX_C030_N211 |
rob.meades@u-blox.com | 1:581335dbdd60 | 159 | TCPSocket sockTcp; |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 160 | #endif |
rob.meades@u-blox.com | 1:581335dbdd60 | 161 | UDPSocket sockUdp; |
rob.meades@u-blox.com | 1:581335dbdd60 | 162 | SocketAddress udpServer; |
rob.meades@u-blox.com | 1:581335dbdd60 | 163 | SocketAddress udpSenderAddress; |
rob.meades@u-blox.com | 1:581335dbdd60 | 164 | SocketAddress tcpServer; |
rob.meades@u-blox.com | 1:581335dbdd60 | 165 | char buf[1024]; |
rob.meades@u-blox.com | 1:581335dbdd60 | 166 | int x; |
RobMeades | 4:3e2b789c3adc | 167 | #ifdef TARGET_UBLOX_C027 |
RobMeades | 4:3e2b789c3adc | 168 | // No user button on C027 |
RobMeades | 4:3e2b789c3adc | 169 | InterruptIn userButton(NC); |
RobMeades | 4:3e2b789c3adc | 170 | #else |
rob.meades@u-blox.com | 1:581335dbdd60 | 171 | InterruptIn userButton(SW0); |
RobMeades | 4:3e2b789c3adc | 172 | #endif |
rob.meades@u-blox.com | 1:581335dbdd60 | 173 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 174 | // Attach a function to the user button |
rob.meades@u-blox.com | 1:581335dbdd60 | 175 | userButton.rise(&cbButton); |
rob.meades@u-blox.com | 1:581335dbdd60 | 176 | |
rob.meades@u-blox.com | 1:581335dbdd60 | 177 | good(); |
rob.meades@u-blox.com | 1:581335dbdd60 | 178 | printf("Starting up, please wait up to 180 seconds for network registration to complete...\n"); |
RobMeades | 33:48101a4c3f14 | 179 | interface->set_credentials(APN, USERNAME, PASSWORD); |
RobMeades | 33:48101a4c3f14 | 180 | for (x = 0; interface->connect(PIN) != 0; x++) { |
RobMeades | 33:48101a4c3f14 | 181 | if (x > 0) { |
RobMeades | 33:48101a4c3f14 | 182 | bad(); |
RobMeades | 33:48101a4c3f14 | 183 | printf("Retrying (have you checked that an antenna is plugged in and your APN is correct?)...\n"); |
RobMeades | 33:48101a4c3f14 | 184 | } |
RobMeades | 33:48101a4c3f14 | 185 | } |
RobMeades | 33:48101a4c3f14 | 186 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 187 | |
andreas_hbrs | 35:a543c24a27a3 | 188 | //printf("Getting the IP address of \"2.pool.ntp.org\"...\n"); |
andreas_hbrs | 35:a543c24a27a3 | 189 | printf("Getting the IP address of \"echo.ublox.com\" ...\n"); |
andreas_hbrs | 35:a543c24a27a3 | 190 | |
andreas_hbrs | 35:a543c24a27a3 | 191 | if ( |
andreas_hbrs | 35:a543c24a27a3 | 192 | //(interface->gethostbyname("echo.ublox.com", &udpServer) == 0) |
andreas_hbrs | 35:a543c24a27a3 | 193 | (interface->gethostbyname("195.34.89.241", &udpServer) == 0) // echo.ublox.com IP Address |
andreas_hbrs | 35:a543c24a27a3 | 194 | //(interface->gethostbyname("2.pool.ntp.org", &udpServer) == 0) |
andreas_hbrs | 35:a543c24a27a3 | 195 | ) { |
rob.meades@u-blox.com | 1:581335dbdd60 | 196 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 197 | |
andreas_hbrs | 35:a543c24a27a3 | 198 | //udpServer.set_port(123); |
andreas_hbrs | 35:a543c24a27a3 | 199 | udpServer.set_port(7); // 123 für ntp und meine Anwendung |
andreas_hbrs | 35:a543c24a27a3 | 200 | //printf("\"2.pool.ntp.org\" address: %s on port %d.\n", udpServer.get_ip_address(), udpServer.get_port()); |
andreas_hbrs | 35:a543c24a27a3 | 201 | printf("\"echo.ublox.com\" address: %s on port %d.\n", udpServer.get_ip_address(), udpServer.get_port()); |
andreas_hbrs | 35:a543c24a27a3 | 202 | //printf("\"developer.mbed.org\" address: %s on port %d.\n", tcpServer.get_ip_address(), tcpServer.get_port()); |
andreas_hbrs | 35:a543c24a27a3 | 203 | //tcpServer.set_port(80); |
rob.meades@u-blox.com | 28:e33af9f1ce3e | 204 | |
RobMeades | 33:48101a4c3f14 | 205 | printf("Performing socket operations in a loop (until the user button is pressed on C030 or forever on C027)...\n"); |
RobMeades | 33:48101a4c3f14 | 206 | while (!buttonPressed) { |
RobMeades | 33:48101a4c3f14 | 207 | // UDP Sockets |
RobMeades | 33:48101a4c3f14 | 208 | printf("=== UDP ===\n"); |
RobMeades | 33:48101a4c3f14 | 209 | printf("Opening a UDP socket...\n"); |
RobMeades | 33:48101a4c3f14 | 210 | if (sockUdp.open(interface) == 0) { |
RobMeades | 33:48101a4c3f14 | 211 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 212 | printf("UDP socket open.\n"); |
RobMeades | 33:48101a4c3f14 | 213 | sockUdp.set_timeout(10000); |
andreas_hbrs | 35:a543c24a27a3 | 214 | //printf("Sending time request to \"2.pool.ntp.org\" over UDP socket...\n"); |
andreas_hbrs | 35:a543c24a27a3 | 215 | printf("Sending echo request to \"echo.ublox.com\" over UDP socket...\n"); |
RobMeades | 33:48101a4c3f14 | 216 | memset (buf, 0, sizeof(buf)); |
andreas_hbrs | 35:a543c24a27a3 | 217 | //*buf = '\x1b'; |
andreas_hbrs | 35:a543c24a27a3 | 218 | *buf = 'A'; //'\x1b'; // https://stackoverflow.com/questions/26937857/what-does-the-x1b-47-0-message-sent-to-an-ntp-server-mean |
andreas_hbrs | 35:a543c24a27a3 | 219 | // "Sending such a packet to port 123 of an NTP server will force the server to send a reply package." |
RobMeades | 33:48101a4c3f14 | 220 | if (sockUdp.sendto(udpServer, (void *) buf, 48) == 48) { |
rob.meades@u-blox.com | 1:581335dbdd60 | 221 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 222 | printf("Socket send completed, waiting for UDP response...\n"); |
andreas_hbrs | 35:a543c24a27a3 | 223 | |
andreas_hbrs | 35:a543c24a27a3 | 224 | |
RobMeades | 33:48101a4c3f14 | 225 | x = sockUdp.recvfrom(&udpSenderAddress, buf, sizeof (buf)); |
andreas_hbrs | 35:a543c24a27a3 | 226 | |
andreas_hbrs | 35:a543c24a27a3 | 227 | |
RobMeades | 33:48101a4c3f14 | 228 | if (x > 0) { |
rob.meades@u-blox.com | 1:581335dbdd60 | 229 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 230 | printf("Received %d byte response from server %s on UDP socket:\n" |
RobMeades | 33:48101a4c3f14 | 231 | "-------------------------------------------------------\n", |
RobMeades | 33:48101a4c3f14 | 232 | x, udpSenderAddress.get_ip_address()); |
andreas_hbrs | 35:a543c24a27a3 | 233 | //printNtpTime(buf, x); |
andreas_hbrs | 35:a543c24a27a3 | 234 | printUbloxEcho(buf, x); // statt printNtpTime |
RobMeades | 33:48101a4c3f14 | 235 | printf("-------------------------------------------------------\n"); |
RobMeades | 33:48101a4c3f14 | 236 | } |
RobMeades | 33:48101a4c3f14 | 237 | } |
RobMeades | 33:48101a4c3f14 | 238 | printf("Closing socket...\n"); |
RobMeades | 33:48101a4c3f14 | 239 | sockUdp.close(); |
RobMeades | 33:48101a4c3f14 | 240 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 241 | printf("Socket closed.\n"); |
RobMeades | 33:48101a4c3f14 | 242 | } |
RobMeades | 33:48101a4c3f14 | 243 | |
RobMeades | 33:48101a4c3f14 | 244 | #ifndef TARGET_UBLOX_C030_N211 |
RobMeades | 33:48101a4c3f14 | 245 | // TCP Sockets |
RobMeades | 33:48101a4c3f14 | 246 | printf("=== TCP ===\n"); |
RobMeades | 33:48101a4c3f14 | 247 | printf("Opening a TCP socket...\n"); |
RobMeades | 33:48101a4c3f14 | 248 | if (sockTcp.open(interface) == 0) { |
RobMeades | 33:48101a4c3f14 | 249 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 250 | printf("TCP socket open.\n"); |
RobMeades | 33:48101a4c3f14 | 251 | sockTcp.set_timeout(10000); |
RobMeades | 33:48101a4c3f14 | 252 | printf("Connecting socket to %s on port %d...\n", tcpServer.get_ip_address(), tcpServer.get_port()); |
RobMeades | 33:48101a4c3f14 | 253 | if (sockTcp.connect(tcpServer) == 0) { |
RobMeades | 33:48101a4c3f14 | 254 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 255 | printf("Connected, sending HTTP GET request to \"developer.mbed.org\" over socket...\n"); |
RobMeades | 33:48101a4c3f14 | 256 | strcpy (buf, "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\r\n\r\n"); |
RobMeades | 33:48101a4c3f14 | 257 | // Note: since this is a short string we can send it in one go as it will |
RobMeades | 33:48101a4c3f14 | 258 | // fit within the default buffer sizes. Normally you should call sock.send() |
RobMeades | 33:48101a4c3f14 | 259 | // in a loop until your entire buffer has been sent. |
RobMeades | 33:48101a4c3f14 | 260 | if (sockTcp.send((void *) buf, strlen(buf)) == (int) strlen(buf)) { |
RobMeades | 33:48101a4c3f14 | 261 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 262 | printf("Socket send completed, waiting for response...\n"); |
RobMeades | 33:48101a4c3f14 | 263 | x = sockTcp.recv(buf, sizeof (buf)); |
rob.meades@u-blox.com | 1:581335dbdd60 | 264 | if (x > 0) { |
rob.meades@u-blox.com | 1:581335dbdd60 | 265 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 266 | printf("Received %d byte response from server on TCP socket:\n" |
RobMeades | 33:48101a4c3f14 | 267 | "----------------------------------------------------\n%.*s" |
RobMeades | 33:48101a4c3f14 | 268 | "----------------------------------------------------\n", |
RobMeades | 33:48101a4c3f14 | 269 | x, x, buf); |
rob.meades@u-blox.com | 1:581335dbdd60 | 270 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 271 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 272 | } |
RobMeades | 33:48101a4c3f14 | 273 | printf("Closing socket...\n"); |
RobMeades | 33:48101a4c3f14 | 274 | sockTcp.close(); |
RobMeades | 33:48101a4c3f14 | 275 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 276 | printf("Socket closed.\n"); |
rob.meades@u-blox.com | 1:581335dbdd60 | 277 | } |
RobMeades | 33:48101a4c3f14 | 278 | #endif |
RobMeades | 33:48101a4c3f14 | 279 | wait_ms(5000); |
RobMeades | 33:48101a4c3f14 | 280 | #ifndef TARGET_UBLOX_C027 |
RobMeades | 33:48101a4c3f14 | 281 | printf("[Checking if user button has been pressed]\n"); |
RobMeades | 33:48101a4c3f14 | 282 | #endif |
rob.meades@u-blox.com | 1:581335dbdd60 | 283 | } |
RobMeades | 33:48101a4c3f14 | 284 | |
RobMeades | 33:48101a4c3f14 | 285 | pulseEvent(); |
RobMeades | 33:48101a4c3f14 | 286 | printf("User button was pressed, stopping...\n"); |
RobMeades | 33:48101a4c3f14 | 287 | interface->disconnect(); |
RobMeades | 33:48101a4c3f14 | 288 | ledOff(); |
RobMeades | 33:48101a4c3f14 | 289 | printf("Stopped.\n"); |
rob.meades@u-blox.com | 1:581335dbdd60 | 290 | } else { |
rob.meades@u-blox.com | 1:581335dbdd60 | 291 | bad(); |
andreas_hbrs | 35:a543c24a27a3 | 292 | //printf("Unable to get IP address of \"2.pool.ntp.org\".\n"); |
andreas_hbrs | 35:a543c24a27a3 | 293 | printf("Unable to get IP address of \"echo.ublox.com\".\n"); |
rob.meades@u-blox.com | 1:581335dbdd60 | 294 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 295 | } |
rob.meades@u-blox.com | 1:581335dbdd60 | 296 | |
RobMeades | 32:bdc45c7052cc | 297 | // End Of File |