changed at for testing

Fork of example-reading-imei-imsi by u-blox

Committer:
simudvarac
Date:
Fri Oct 12 11:38:49 2018 +0000
Revision:
3:103f58fac4cf
Parent:
2:c845f4f6c2b6
new;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
euygun 0:b51700dcba34 1 /* mbed Microcontroller Library
euygun 0:b51700dcba34 2 * Copyright (c) 2017 u-blox
euygun 0:b51700dcba34 3 *
euygun 0:b51700dcba34 4 * Licensed under the Apache License, Version 2.0 (the "License");
euygun 0:b51700dcba34 5 * you may not use this file except in compliance with the License.
euygun 0:b51700dcba34 6 * You may obtain a copy of the License at
euygun 0:b51700dcba34 7 *
euygun 0:b51700dcba34 8 * http://www.apache.org/licenses/LICENSE-2.0
euygun 0:b51700dcba34 9 *
euygun 0:b51700dcba34 10 * Unless required by applicable law or agreed to in writing, software
euygun 0:b51700dcba34 11 * distributed under the License is distributed on an "AS IS" BASIS,
euygun 0:b51700dcba34 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
euygun 0:b51700dcba34 13 * See the License for the specific language governing permissions and
euygun 0:b51700dcba34 14 * limitations under the License.
euygun 0:b51700dcba34 15 */
euygun 0:b51700dcba34 16
euygun 0:b51700dcba34 17 #include "mbed.h"
euygun 0:b51700dcba34 18 #include "ATCmdParser.h"
euygun 0:b51700dcba34 19 #include "FileHandle.h"
euygun 0:b51700dcba34 20 #include "onboard_modem_api.h"
simudvarac 3:103f58fac4cf 21 #include "stdlib.h"
euygun 0:b51700dcba34 22
euygun 0:b51700dcba34 23 /* Definitions */
euygun 0:b51700dcba34 24 #define OUTPUT_ENTER_KEY "\r"
euygun 0:b51700dcba34 25 #define AT_PARSER_BUFFER_SIZE 256
euygun 0:b51700dcba34 26 #define AT_PARSER_TIMEOUT 8*1000 // Milliseconds
euygun 0:b51700dcba34 27
simudvarac 3:103f58fac4cf 28 /* The example program for the u-blox C030 boards. It sets up the Cellular Module then read out the IMSI of the eUICC/SIM.
euygun 0:b51700dcba34 29 * The Uer LEDs (RGB) and User Button are utilised to show the activity on the board.
simudvarac 3:103f58fac4cf 30 * When GNSS has a location fix, the Red Timepulse LED, next to the User LEDs, blinks every 1 second.
euygun 0:b51700dcba34 31 */
euygun 0:b51700dcba34 32
euygun 0:b51700dcba34 33 /* File handler */
euygun 0:b51700dcba34 34 FileHandle *fh;
euygun 0:b51700dcba34 35
euygun 0:b51700dcba34 36 /* AT Command Parser handle */
euygun 0:b51700dcba34 37 ATCmdParser *at;
euygun 0:b51700dcba34 38
euygun 0:b51700dcba34 39 // User LEDs
euygun 0:b51700dcba34 40 DigitalOut ledRed(LED1, 1);
euygun 0:b51700dcba34 41 DigitalOut ledGreen(LED2, 1);
euygun 0:b51700dcba34 42 DigitalOut ledBlue(LED3, 1);
euygun 0:b51700dcba34 43
simudvarac 3:103f58fac4cf 44 // Ethernet socket LED
euygun 0:b51700dcba34 45 DigitalOut ledYellow(LED4,1);
euygun 0:b51700dcba34 46
euygun 0:b51700dcba34 47 // User Button
euygun 0:b51700dcba34 48 #ifdef TARGET_UBLOX_C027
simudvarac 3:103f58fac4cf 49 // No user button on C027
simudvarac 3:103f58fac4cf 50 InterruptIn userButton(NC);
euygun 0:b51700dcba34 51 #else
simudvarac 3:103f58fac4cf 52 InterruptIn userButton(SW0);
euygun 0:b51700dcba34 53 #endif
simudvarac 3:103f58fac4cf 54
euygun 0:b51700dcba34 55 // Delay between LED changes in second
euygun 0:b51700dcba34 56 volatile float delay = 0.5;
euygun 0:b51700dcba34 57
euygun 0:b51700dcba34 58 // To check if the user pressed the User Button or not
simudvarac 3:103f58fac4cf 59 void threadBodyUserButtonCheck(void const *args)
simudvarac 3:103f58fac4cf 60 {
euygun 0:b51700dcba34 61 float delayToggle = delay;
simudvarac 3:103f58fac4cf 62 while (1) {
euygun 0:b51700dcba34 63 if (userButton.read() == 1 ) {
simudvarac 3:103f58fac4cf 64 // User Button is pressed
euygun 0:b51700dcba34 65 delay = 0.1;
simudvarac 3:103f58fac4cf 66 // Indicate with the Yellow LED on Ethernet socket
euygun 0:b51700dcba34 67 ledYellow = 0;
simudvarac 3:103f58fac4cf 68 } else {
simudvarac 3:103f58fac4cf 69 // User button is released
euygun 0:b51700dcba34 70 delay = 0.5;
euygun 0:b51700dcba34 71 // Turn off the Yellow LED on Ethernet socket
euygun 0:b51700dcba34 72 ledYellow = 1;
euygun 0:b51700dcba34 73 }
euygun 0:b51700dcba34 74 }
euygun 0:b51700dcba34 75 }
simudvarac 3:103f58fac4cf 76
simudvarac 3:103f58fac4cf 77 void sendATCommandAndPrintResponse(char* command)
simudvarac 3:103f58fac4cf 78 {
simudvarac 3:103f58fac4cf 79 char buffer[505];//sa crtom
simudvarac 3:103f58fac4cf 80 for (int i=0; i<505; i++)buffer[i]=0;
simudvarac 3:103f58fac4cf 81 printf ("Sending following command:");
simudvarac 3:103f58fac4cf 82 printf(command);
simudvarac 3:103f58fac4cf 83 printf ("\r\n");
euygun 0:b51700dcba34 84
simudvarac 3:103f58fac4cf 85 if (!at->send(command)) {
simudvarac 3:103f58fac4cf 86 printf("failed!!!!\r\n");
simudvarac 3:103f58fac4cf 87 return;
simudvarac 3:103f58fac4cf 88 }
simudvarac 3:103f58fac4cf 89 printf ("RESPONSE:\r\n");
simudvarac 3:103f58fac4cf 90 at->read(buffer,500);
simudvarac 3:103f58fac4cf 91 printf(buffer);
simudvarac 3:103f58fac4cf 92 printf ("\r\n");
simudvarac 2:c845f4f6c2b6 93 }
euygun 0:b51700dcba34 94 // Setup the modem
simudvarac 3:103f58fac4cf 95 bool setup_modem()
simudvarac 3:103f58fac4cf 96 {
euygun 0:b51700dcba34 97
euygun 0:b51700dcba34 98 bool success = false;
simudvarac 3:103f58fac4cf 99
euygun 0:b51700dcba34 100 /* Initialize GPIO lines */
euygun 0:b51700dcba34 101 onboard_modem_init();
simudvarac 3:103f58fac4cf 102
euygun 0:b51700dcba34 103 /* Give modem a little time to settle down */
euygun 0:b51700dcba34 104 wait_ms(250);
euygun 0:b51700dcba34 105
RobMeades 1:63483ec4d0ff 106 printf("Powering up the modem\r\n");
RobMeades 1:63483ec4d0ff 107 onboard_modem_power_up();
RobMeades 1:63483ec4d0ff 108 #ifdef TARGET_UBLOX_C030_N211
RobMeades 1:63483ec4d0ff 109 wait_ms(5000);
simudvarac 3:103f58fac4cf 110 sendATCommandAndPrintResponse("AT+CFUN=1");
RobMeades 1:63483ec4d0ff 111 #else
RobMeades 1:63483ec4d0ff 112 wait_ms(500);
RobMeades 1:63483ec4d0ff 113 #endif
RobMeades 1:63483ec4d0ff 114
RobMeades 1:63483ec4d0ff 115 // Set AT parser timeout to 1sec for AT OK check
RobMeades 1:63483ec4d0ff 116 at->set_timeout(1000);
simudvarac 3:103f58fac4cf 117
RobMeades 1:63483ec4d0ff 118 printf("Checking for AT response from the modem\r\n");
euygun 0:b51700dcba34 119 for (int retry_count = 0; !success && (retry_count < 20); retry_count++) {
euygun 0:b51700dcba34 120 printf("...wait\r\n");
RobMeades 1:63483ec4d0ff 121 // The modem tends to sends out some garbage during power up.
euygun 0:b51700dcba34 122 at->flush();
simudvarac 3:103f58fac4cf 123
euygun 0:b51700dcba34 124 // AT OK talk to the modem
euygun 0:b51700dcba34 125 if (at->send("AT")) {
euygun 0:b51700dcba34 126 wait_ms(100);
euygun 0:b51700dcba34 127 if (at->recv("OK")) {
euygun 0:b51700dcba34 128 success = true;
euygun 0:b51700dcba34 129 }
euygun 0:b51700dcba34 130 }
euygun 0:b51700dcba34 131 }
simudvarac 3:103f58fac4cf 132
RobMeades 1:63483ec4d0ff 133 // Increase the parser time to 8 sec
RobMeades 1:63483ec4d0ff 134 at->set_timeout(8000);
simudvarac 3:103f58fac4cf 135
euygun 0:b51700dcba34 136 if (success) {
RobMeades 1:63483ec4d0ff 137 printf("Configuring the modem\r\n");
RobMeades 1:63483ec4d0ff 138
RobMeades 1:63483ec4d0ff 139 #ifdef TARGET_UBLOX_C030_N211
simudvarac 2:c845f4f6c2b6 140 printf("TARGET IS N211");
RobMeades 1:63483ec4d0ff 141 // Turn off modem echoing and turn on verbose responses
RobMeades 1:63483ec4d0ff 142 success = at->send("AT+CMEE=1");
RobMeades 1:63483ec4d0ff 143 #else
simudvarac 2:c845f4f6c2b6 144 printf("TARGET IS NOT N211");
euygun 0:b51700dcba34 145 // Set the final baud rate
euygun 0:b51700dcba34 146 if (at->send("AT+IPR=%d", 115200) && at->recv("OK")) {
euygun 0:b51700dcba34 147 // Need to wait for things to be sorted out on the modem side
euygun 0:b51700dcba34 148 wait_ms(100);
euygun 0:b51700dcba34 149 ((UARTSerial *)fh)->set_baud(115200);
euygun 0:b51700dcba34 150 }
simudvarac 3:103f58fac4cf 151
euygun 0:b51700dcba34 152 // Turn off modem echoing and turn on verbose responses
euygun 0:b51700dcba34 153 success = at->send("ATE0;+CMEE=2") && at->recv("OK") &&
euygun 0:b51700dcba34 154 // The following commands are best sent separately
euygun 0:b51700dcba34 155 // Turn off RTC/CTS handshaking
RobMeades 1:63483ec4d0ff 156 at->send("AT&K0") && at->recv("OK") &&
simudvarac 3:103f58fac4cf 157 // Set DCD circuit(109), changes in accordance with
euygun 0:b51700dcba34 158 // the carrier detect status
euygun 0:b51700dcba34 159 at->send("AT&C1") && at->recv("OK") &&
simudvarac 3:103f58fac4cf 160 // Set DTR circuit, we ignore the state change of DTR
simudvarac 3:103f58fac4cf 161 at->send("AT&D0") && at->recv("OK");
simudvarac 3:103f58fac4cf 162 #endif
euygun 0:b51700dcba34 163 }
simudvarac 3:103f58fac4cf 164
euygun 0:b51700dcba34 165 return success;
euygun 0:b51700dcba34 166 }
euygun 0:b51700dcba34 167 /*
euygun 0:b51700dcba34 168 ** Reading the modem IMEI and eUICC/SIM IMSI
simudvarac 3:103f58fac4cf 169 **
euygun 0:b51700dcba34 170 */
simudvarac 3:103f58fac4cf 171 void connectNB(){
simudvarac 3:103f58fac4cf 172
simudvarac 3:103f58fac4cf 173
simudvarac 3:103f58fac4cf 174 sendATCommandAndPrintResponse("at+NCONFIG=\"AUTOCONNECT\",\"FALSE\"");
simudvarac 3:103f58fac4cf 175 sendATCommandAndPrintResponse("at+NCONFIG=\"CR_0354_0338_SCRAMBLING\",\"TRUE\"");
simudvarac 3:103f58fac4cf 176
simudvarac 3:103f58fac4cf 177
simudvarac 3:103f58fac4cf 178 sendATCommandAndPrintResponse("at+NCONFIG=\"CR_0859_SI_AVOID\",\"TRUE\"");
simudvarac 3:103f58fac4cf 179 sendATCommandAndPrintResponse("at+NCONFIG?");
simudvarac 3:103f58fac4cf 180 sendATCommandAndPrintResponse("at+cfun=0");
simudvarac 3:103f58fac4cf 181 sendATCommandAndPrintResponse("AT+CGDCONT=1, \"IP\",\"nb.inetd.gdsp\"");
simudvarac 3:103f58fac4cf 182 sendATCommandAndPrintResponse("at+cfun=1");
simudvarac 3:103f58fac4cf 183
simudvarac 3:103f58fac4cf 184 sendATCommandAndPrintResponse("at+cimi");
simudvarac 3:103f58fac4cf 185
simudvarac 3:103f58fac4cf 186
simudvarac 3:103f58fac4cf 187 sendATCommandAndPrintResponse("at+cgatt=1");
simudvarac 3:103f58fac4cf 188
simudvarac 3:103f58fac4cf 189
simudvarac 3:103f58fac4cf 190
simudvarac 3:103f58fac4cf 191 sendATCommandAndPrintResponse("at+cops=1,2,\"26202\"");
simudvarac 3:103f58fac4cf 192 wait_ms(5000);
simudvarac 3:103f58fac4cf 193 sendATCommandAndPrintResponse("at+cereg?");
simudvarac 3:103f58fac4cf 194 wait_ms(5000);
simudvarac 3:103f58fac4cf 195 sendATCommandAndPrintResponse("AT+CSQ");
simudvarac 3:103f58fac4cf 196 wait_ms(5000);
simudvarac 3:103f58fac4cf 197 sendATCommandAndPrintResponse("AT+COPS?");
simudvarac 3:103f58fac4cf 198 sendATCommandAndPrintResponse("AT+NBAND?");
simudvarac 3:103f58fac4cf 199 sendATCommandAndPrintResponse("AT+NBAND=20");
simudvarac 3:103f58fac4cf 200 sendATCommandAndPrintResponse("AT+NUESTATS");
simudvarac 3:103f58fac4cf 201
simudvarac 3:103f58fac4cf 202 sendATCommandAndPrintResponse("AT+CGATT?");
simudvarac 3:103f58fac4cf 203 wait_ms(5000);
simudvarac 3:103f58fac4cf 204 sendATCommandAndPrintResponse("AT+CGPADDR");
simudvarac 3:103f58fac4cf 205
simudvarac 3:103f58fac4cf 206 }
simudvarac 3:103f58fac4cf 207 void reverse(char *str)
simudvarac 3:103f58fac4cf 208 {
simudvarac 3:103f58fac4cf 209 /* skip null */
simudvarac 3:103f58fac4cf 210 if (str == 0)
simudvarac 3:103f58fac4cf 211 {
simudvarac 3:103f58fac4cf 212 return;
simudvarac 3:103f58fac4cf 213 }
simudvarac 3:103f58fac4cf 214
simudvarac 3:103f58fac4cf 215 /* skip empty string */
simudvarac 3:103f58fac4cf 216 if (*str == 0)
simudvarac 3:103f58fac4cf 217 {
simudvarac 3:103f58fac4cf 218 return;
simudvarac 3:103f58fac4cf 219 }
simudvarac 3:103f58fac4cf 220
simudvarac 3:103f58fac4cf 221 /* get range */
simudvarac 3:103f58fac4cf 222 char *start = str;
simudvarac 3:103f58fac4cf 223 char *end = start + strlen(str) - 1; /* -1 for \0 */
simudvarac 3:103f58fac4cf 224 char temp;
simudvarac 3:103f58fac4cf 225
simudvarac 3:103f58fac4cf 226 /* reverse */
simudvarac 3:103f58fac4cf 227 while (end > start)
simudvarac 3:103f58fac4cf 228 {
simudvarac 3:103f58fac4cf 229 /* swap */
simudvarac 3:103f58fac4cf 230 temp = *start;
simudvarac 3:103f58fac4cf 231 *start = *end;
simudvarac 3:103f58fac4cf 232 *end = temp;
simudvarac 3:103f58fac4cf 233
simudvarac 3:103f58fac4cf 234 /* move */
simudvarac 3:103f58fac4cf 235 ++start;
simudvarac 3:103f58fac4cf 236 --end;
simudvarac 3:103f58fac4cf 237 }
simudvarac 3:103f58fac4cf 238 }
simudvarac 3:103f58fac4cf 239 char* itoa(int num, char* str, int base)
simudvarac 3:103f58fac4cf 240 {
simudvarac 3:103f58fac4cf 241 int i = 0;
simudvarac 3:103f58fac4cf 242 bool isNegative = false;
simudvarac 3:103f58fac4cf 243
simudvarac 3:103f58fac4cf 244 /* Handle 0 explicitely, otherwise empty string is printed for 0 */
simudvarac 3:103f58fac4cf 245 if (num == 0)
simudvarac 3:103f58fac4cf 246 {
simudvarac 3:103f58fac4cf 247 str[i++] = '0';
simudvarac 3:103f58fac4cf 248 str[i] = '\0';
simudvarac 3:103f58fac4cf 249 return str;
simudvarac 3:103f58fac4cf 250 }
simudvarac 3:103f58fac4cf 251
simudvarac 3:103f58fac4cf 252 // In standard itoa(), negative numbers are handled only with
simudvarac 3:103f58fac4cf 253 // base 10. Otherwise numbers are considered unsigned.
simudvarac 3:103f58fac4cf 254 if (num < 0 && base == 10)
simudvarac 3:103f58fac4cf 255 {
simudvarac 3:103f58fac4cf 256 isNegative = true;
simudvarac 3:103f58fac4cf 257 num = -num;
simudvarac 3:103f58fac4cf 258 }
simudvarac 3:103f58fac4cf 259
simudvarac 3:103f58fac4cf 260 // Process individual digits
simudvarac 3:103f58fac4cf 261 while (num != 0)
simudvarac 3:103f58fac4cf 262 {
simudvarac 3:103f58fac4cf 263 int rem = num % base;
simudvarac 3:103f58fac4cf 264 str[i++] = (rem > 9)? (rem-10) + 'a' : rem + '0';
simudvarac 3:103f58fac4cf 265 num = num/base;
simudvarac 3:103f58fac4cf 266 }
simudvarac 3:103f58fac4cf 267
simudvarac 3:103f58fac4cf 268 // If number is negative, append '-'
simudvarac 3:103f58fac4cf 269 if (isNegative)
simudvarac 3:103f58fac4cf 270 str[i++] = '-';
simudvarac 3:103f58fac4cf 271
simudvarac 3:103f58fac4cf 272 str[i] = '\0'; // Append string terminator
simudvarac 3:103f58fac4cf 273
simudvarac 3:103f58fac4cf 274 // Reverse the string
simudvarac 3:103f58fac4cf 275 reverse(str);
simudvarac 3:103f58fac4cf 276
simudvarac 3:103f58fac4cf 277 return str;
simudvarac 3:103f58fac4cf 278 }
simudvarac 3:103f58fac4cf 279
simudvarac 3:103f58fac4cf 280 void sendUDPMessage(char* ip, int port, char* message){
simudvarac 3:103f58fac4cf 281
simudvarac 3:103f58fac4cf 282 char commandbuffer[100];
simudvarac 3:103f58fac4cf 283 sprintf(commandbuffer,"AT+NSOCR=\"DGRAM\",17,%d",port);
simudvarac 3:103f58fac4cf 284 sendATCommandAndPrintResponse(commandbuffer);
simudvarac 3:103f58fac4cf 285 int ret=strlen(message);
simudvarac 3:103f58fac4cf 286 char data[ret*2];
simudvarac 3:103f58fac4cf 287 for (int i=0,j=0; i<ret; i++,j+=2){
simudvarac 3:103f58fac4cf 288 char res[2];
simudvarac 3:103f58fac4cf 289 itoa((message[i] & 0xFF), res, 16);
simudvarac 3:103f58fac4cf 290 if (res[1] == 0) {
simudvarac 3:103f58fac4cf 291 data[j] = 0x30; data[j+1] = res[0];
simudvarac 3:103f58fac4cf 292 }else {
simudvarac 3:103f58fac4cf 293 data[j] = res[0]; data[j + 1] = res[1];
simudvarac 3:103f58fac4cf 294 }
simudvarac 3:103f58fac4cf 295 }
simudvarac 3:103f58fac4cf 296
simudvarac 3:103f58fac4cf 297 data[(ret * 2)] = 0;
simudvarac 3:103f58fac4cf 298
simudvarac 3:103f58fac4cf 299 sprintf(commandbuffer,"AT+NSOST=0,\"%s\",%d,%d,\"%s\"",ip,port,ret,data);
simudvarac 3:103f58fac4cf 300 sendATCommandAndPrintResponse(commandbuffer);
simudvarac 3:103f58fac4cf 301
simudvarac 3:103f58fac4cf 302 }
euygun 0:b51700dcba34 303
euygun 0:b51700dcba34 304 int main()
euygun 0:b51700dcba34 305 {
RobMeades 1:63483ec4d0ff 306 bool success = false;
simudvarac 3:103f58fac4cf 307
RobMeades 1:63483ec4d0ff 308 printf("\n\r\n\ru-blox C030 reading the modem IMEI and eUICC/SIM IMSI\n\r");
euygun 0:b51700dcba34 309 printf("Initialising UART for modem communication");
RobMeades 1:63483ec4d0ff 310 fh = new UARTSerial(MDMTXD, MDMRXD, 9600);
euygun 0:b51700dcba34 311 printf("...DONE\r\n");
simudvarac 3:103f58fac4cf 312
RobMeades 1:63483ec4d0ff 313 // NOTE: if you are experiencing problems with the AT command
RobMeades 1:63483ec4d0ff 314 // exchange, change the "false" below to "true" to get debug output
RobMeades 1:63483ec4d0ff 315 // from the AT command parser
RobMeades 1:63483ec4d0ff 316 printf("Initialising the modem AT command parser");
euygun 0:b51700dcba34 317 at = new ATCmdParser(fh, OUTPUT_ENTER_KEY, AT_PARSER_BUFFER_SIZE,
simudvarac 3:103f58fac4cf 318 AT_PARSER_TIMEOUT, false);
euygun 0:b51700dcba34 319 printf("...DONE\r\n");
simudvarac 3:103f58fac4cf 320
euygun 0:b51700dcba34 321 printf("Initializing the modem\r\n");
RobMeades 1:63483ec4d0ff 322 if (setup_modem()) {
euygun 0:b51700dcba34 323 printf("...DONE\r\nThe modem powered up\r\n");
RobMeades 1:63483ec4d0ff 324 char imei[25+1];
euygun 0:b51700dcba34 325 char imsi[15+1];
simudvarac 2:c845f4f6c2b6 326 char buffer[512];
euygun 0:b51700dcba34 327 printf("Reading IMEI and IMSI\r\n");
simudvarac 3:103f58fac4cf 328
RobMeades 1:63483ec4d0ff 329 #ifdef TARGET_UBLOX_C030_N211
simudvarac 3:103f58fac4cf 330 if (at->send("AT+CGSN=1") && at->recv("\nOK\n%25[^\n]\nOK\n", imei)) {
RobMeades 1:63483ec4d0ff 331 printf("IMEI: %s\r\n",imei + 6); // Avoid the "+CGSN:" prefix
RobMeades 1:63483ec4d0ff 332 }
simudvarac 3:103f58fac4cf 333
RobMeades 1:63483ec4d0ff 334 #else
simudvarac 3:103f58fac4cf 335 if (at->send("AT+CGSN") && at->recv("%15[^\n]\nOK\n", imei)) {
euygun 0:b51700dcba34 336 printf("IMEI: %s\r\n",imei);
euygun 0:b51700dcba34 337 }
RobMeades 1:63483ec4d0ff 338 #endif
RobMeades 1:63483ec4d0ff 339 // Sometimes it takes a little while for the SIM to be initialised,
RobMeades 1:63483ec4d0ff 340 // so retry this until done
RobMeades 1:63483ec4d0ff 341 at->set_timeout(1000);
RobMeades 1:63483ec4d0ff 342 for (int retry_count = 0; !success && (retry_count < 10); retry_count++) {
simudvarac 3:103f58fac4cf 343 if (at->send("AT+CIMI") && at->recv("%15[^\n]\nOK\n", imsi)) {
RobMeades 1:63483ec4d0ff 344 printf("IMSI: %s\r\n",imsi);
RobMeades 1:63483ec4d0ff 345 success = true;
RobMeades 1:63483ec4d0ff 346 }
simudvarac 3:103f58fac4cf 347
simudvarac 3:103f58fac4cf 348 }
RobMeades 1:63483ec4d0ff 349 if (!success) {
RobMeades 1:63483ec4d0ff 350 printf("Unable to read IMSI: has a SIM been inserted?\r\n");
euygun 0:b51700dcba34 351 }
RobMeades 1:63483ec4d0ff 352 } else {
RobMeades 1:63483ec4d0ff 353 printf("Unable to intialize modem\r\n");
euygun 0:b51700dcba34 354 }
simudvarac 2:c845f4f6c2b6 355 char buffer[500+5];
RobMeades 1:63483ec4d0ff 356 printf("FINISHED...\r\n");
simudvarac 3:103f58fac4cf 357 printf ("sending nconfig");
simudvarac 3:103f58fac4cf 358 printf ("\r\n");
simudvarac 3:103f58fac4cf 359
simudvarac 3:103f58fac4cf 360
simudvarac 3:103f58fac4cf 361 connectNB();
simudvarac 3:103f58fac4cf 362 sendUDPMessage("52.215.10.12",3333,"HAUS");
simudvarac 3:103f58fac4cf 363
simudvarac 2:c845f4f6c2b6 364
euygun 0:b51700dcba34 365 // Create threadUserButtonCheck thread
euygun 0:b51700dcba34 366 Thread threadUserButtonCheck(threadBodyUserButtonCheck);
euygun 0:b51700dcba34 367
euygun 0:b51700dcba34 368 // Set the LED states
euygun 0:b51700dcba34 369 ledRed = 0;
euygun 0:b51700dcba34 370 ledGreen = 1;
euygun 0:b51700dcba34 371 ledBlue = 1;
simudvarac 3:103f58fac4cf 372
euygun 0:b51700dcba34 373 // Main loop
euygun 0:b51700dcba34 374 while(1) {
euygun 0:b51700dcba34 375 wait(delay);
euygun 0:b51700dcba34 376 // Shift the LED states
euygun 0:b51700dcba34 377 int carry = ledBlue;
euygun 0:b51700dcba34 378 ledBlue = ledRed;
euygun 0:b51700dcba34 379 ledRed = ledGreen;
euygun 0:b51700dcba34 380 ledGreen = carry;
euygun 0:b51700dcba34 381 }
euygun 0:b51700dcba34 382 }
euygun 0:b51700dcba34 383
euygun 0:b51700dcba34 384 // End Of File