ON Semiconductor / mbed-os

Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
group-onsemi
Date:
Wed Jan 25 20:34:15 2017 +0000
Revision:
0:098463de4c5d
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1 /* UbloxUSBCDMAModem.cpp */
group-onsemi 0:098463de4c5d 2 /* Copyright (C) 2012 mbed.org, MIT License
group-onsemi 0:098463de4c5d 3 *
group-onsemi 0:098463de4c5d 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
group-onsemi 0:098463de4c5d 5 * and associated documentation files (the "Software"), to deal in the Software without restriction,
group-onsemi 0:098463de4c5d 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
group-onsemi 0:098463de4c5d 7 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
group-onsemi 0:098463de4c5d 8 * furnished to do so, subject to the following conditions:
group-onsemi 0:098463de4c5d 9 *
group-onsemi 0:098463de4c5d 10 * The above copyright notice and this permission notice shall be included in all copies or
group-onsemi 0:098463de4c5d 11 * substantial portions of the Software.
group-onsemi 0:098463de4c5d 12 *
group-onsemi 0:098463de4c5d 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
group-onsemi 0:098463de4c5d 14 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
group-onsemi 0:098463de4c5d 15 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
group-onsemi 0:098463de4c5d 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
group-onsemi 0:098463de4c5d 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
group-onsemi 0:098463de4c5d 18 */
group-onsemi 0:098463de4c5d 19
group-onsemi 0:098463de4c5d 20 #define __DEBUG__ 4
group-onsemi 0:098463de4c5d 21 #ifndef __MODULE__
group-onsemi 0:098463de4c5d 22 #define __MODULE__ "UbloxUSBCDMAModem.cpp"
group-onsemi 0:098463de4c5d 23 #endif
group-onsemi 0:098463de4c5d 24
group-onsemi 0:098463de4c5d 25 #include "core/fwk.h"
group-onsemi 0:098463de4c5d 26
group-onsemi 0:098463de4c5d 27 #include "UbloxUSBCDMAModem.h"
group-onsemi 0:098463de4c5d 28 #include "UbloxCDMAModemInitializer.h"
group-onsemi 0:098463de4c5d 29 #include "USBHost.h"
group-onsemi 0:098463de4c5d 30
group-onsemi 0:098463de4c5d 31 #define USE_ONE_PORT 1
group-onsemi 0:098463de4c5d 32
group-onsemi 0:098463de4c5d 33 UbloxUSBCDMAModem::UbloxUSBCDMAModem(PinName powerGatingPin /*= NC*/, bool powerGatingOnWhenPinHigh /* = true*/, int serial /* 0 */) : m_dongle(),
group-onsemi 0:098463de4c5d 34 m_stream(m_dongle.getSerial(serial)),
group-onsemi 0:098463de4c5d 35 m_at(&m_stream),
group-onsemi 0:098463de4c5d 36 m_sms(&m_at), m_ppp(&m_stream),
group-onsemi 0:098463de4c5d 37 m_dongleConnected(false), m_ipInit(false), m_smsInit(false), m_atOpen(false),
group-onsemi 0:098463de4c5d 38 m_powerGatingPin(powerGatingPin), m_powerGatingOnWhenPinHigh(powerGatingOnWhenPinHigh)
group-onsemi 0:098463de4c5d 39 {
group-onsemi 0:098463de4c5d 40 USBHost* host = USBHost::getHostInst();
group-onsemi 0:098463de4c5d 41 m_dongle.addInitializer(new UbloxCDMAModemInitializer(host));
group-onsemi 0:098463de4c5d 42 if( m_powerGatingPin != NC )
group-onsemi 0:098463de4c5d 43 {
group-onsemi 0:098463de4c5d 44 power(false); //Dongle will have to be powered on manually
group-onsemi 0:098463de4c5d 45 }
group-onsemi 0:098463de4c5d 46 }
group-onsemi 0:098463de4c5d 47
group-onsemi 0:098463de4c5d 48 class CSSProcessor : public IATCommandsProcessor
group-onsemi 0:098463de4c5d 49 {
group-onsemi 0:098463de4c5d 50 public:
group-onsemi 0:098463de4c5d 51 CSSProcessor() : status(STATUS_REGISTERING)
group-onsemi 0:098463de4c5d 52 {
group-onsemi 0:098463de4c5d 53
group-onsemi 0:098463de4c5d 54 }
group-onsemi 0:098463de4c5d 55 enum REGISTERING_STATUS { STATUS_REGISTERING, STATUS_OK };
group-onsemi 0:098463de4c5d 56 REGISTERING_STATUS getStatus()
group-onsemi 0:098463de4c5d 57 {
group-onsemi 0:098463de4c5d 58 return status;
group-onsemi 0:098463de4c5d 59 }
group-onsemi 0:098463de4c5d 60 private:
group-onsemi 0:098463de4c5d 61 virtual int onNewATResponseLine(ATCommandsInterface* pInst, const char* line)
group-onsemi 0:098463de4c5d 62 {
group-onsemi 0:098463de4c5d 63 char b;
group-onsemi 0:098463de4c5d 64 char bc[3] = "";
group-onsemi 0:098463de4c5d 65 int sid = 99999;
group-onsemi 0:098463de4c5d 66
group-onsemi 0:098463de4c5d 67 //if( sscanf(line, "%*d, %c", &r) == 1 )
group-onsemi 0:098463de4c5d 68 if(sscanf(line, "%*s %c,%2s,%d", &b,bc,&sid)==3)
group-onsemi 0:098463de4c5d 69 {
group-onsemi 0:098463de4c5d 70 if(strcmp("Z", bc) == 0)
group-onsemi 0:098463de4c5d 71 status = STATUS_REGISTERING;
group-onsemi 0:098463de4c5d 72 else
group-onsemi 0:098463de4c5d 73 status = STATUS_OK;
group-onsemi 0:098463de4c5d 74 }
group-onsemi 0:098463de4c5d 75 return OK;
group-onsemi 0:098463de4c5d 76 }
group-onsemi 0:098463de4c5d 77 virtual int onNewEntryPrompt(ATCommandsInterface* pInst)
group-onsemi 0:098463de4c5d 78 {
group-onsemi 0:098463de4c5d 79 return OK;
group-onsemi 0:098463de4c5d 80 }
group-onsemi 0:098463de4c5d 81 volatile REGISTERING_STATUS status;
group-onsemi 0:098463de4c5d 82 };
group-onsemi 0:098463de4c5d 83
group-onsemi 0:098463de4c5d 84 int UbloxUSBCDMAModem::connect(const char* apn, const char* user, const char* password)
group-onsemi 0:098463de4c5d 85 {
group-onsemi 0:098463de4c5d 86 if( !m_ipInit )
group-onsemi 0:098463de4c5d 87 {
group-onsemi 0:098463de4c5d 88 m_ipInit = true;
group-onsemi 0:098463de4c5d 89 m_ppp.init();
group-onsemi 0:098463de4c5d 90 }
group-onsemi 0:098463de4c5d 91 m_ppp.setup(user, password, DEFAULT_MSISDN_CDMA);
group-onsemi 0:098463de4c5d 92
group-onsemi 0:098463de4c5d 93 int ret = init();
group-onsemi 0:098463de4c5d 94 if(ret)
group-onsemi 0:098463de4c5d 95 {
group-onsemi 0:098463de4c5d 96 return ret;
group-onsemi 0:098463de4c5d 97 }
group-onsemi 0:098463de4c5d 98
group-onsemi 0:098463de4c5d 99 #if USE_ONE_PORT
group-onsemi 0:098463de4c5d 100 m_smsInit = false; //SMS status reset
group-onsemi 0:098463de4c5d 101 //m_ussdInit = false; //USSD status reset
group-onsemi 0:098463de4c5d 102 //m_linkMonitorInit = false; //Link monitor status reset
group-onsemi 0:098463de4c5d 103 #endif
group-onsemi 0:098463de4c5d 104
group-onsemi 0:098463de4c5d 105 ATCommandsInterface::ATResult result;
group-onsemi 0:098463de4c5d 106
group-onsemi 0:098463de4c5d 107 if(apn != NULL)
group-onsemi 0:098463de4c5d 108 {
group-onsemi 0:098463de4c5d 109 char cmd[48];
group-onsemi 0:098463de4c5d 110 sprintf(cmd, "AT+CGDCONT=1,\"IP\",\"%s\"", apn);
group-onsemi 0:098463de4c5d 111 ret = m_at.executeSimple(cmd, &result);
group-onsemi 0:098463de4c5d 112 DBG("Result of command: Err code=%d", ret);
group-onsemi 0:098463de4c5d 113 DBG("ATResult: AT return=%d (code %d)", result.result, result.code);
group-onsemi 0:098463de4c5d 114 DBG("APN set to %s", apn);
group-onsemi 0:098463de4c5d 115 }
group-onsemi 0:098463de4c5d 116
group-onsemi 0:098463de4c5d 117
group-onsemi 0:098463de4c5d 118 //Connect
group-onsemi 0:098463de4c5d 119 DBG("Connecting");
group-onsemi 0:098463de4c5d 120 #if USE_ONE_PORT
group-onsemi 0:098463de4c5d 121 m_at.close(); // Closing AT parser
group-onsemi 0:098463de4c5d 122 m_atOpen = false; //Will need to be reinitialized afterwards
group-onsemi 0:098463de4c5d 123 #endif
group-onsemi 0:098463de4c5d 124
group-onsemi 0:098463de4c5d 125 DBG("Connecting PPP");
group-onsemi 0:098463de4c5d 126
group-onsemi 0:098463de4c5d 127 ret = m_ppp.connect();
group-onsemi 0:098463de4c5d 128 DBG("Result of connect: Err code=%d", ret);
group-onsemi 0:098463de4c5d 129 return ret;
group-onsemi 0:098463de4c5d 130 }
group-onsemi 0:098463de4c5d 131
group-onsemi 0:098463de4c5d 132
group-onsemi 0:098463de4c5d 133 int UbloxUSBCDMAModem::disconnect()
group-onsemi 0:098463de4c5d 134 {
group-onsemi 0:098463de4c5d 135 DBG("Disconnecting from PPP");
group-onsemi 0:098463de4c5d 136 int ret = m_ppp.disconnect();
group-onsemi 0:098463de4c5d 137 if(ret)
group-onsemi 0:098463de4c5d 138 {
group-onsemi 0:098463de4c5d 139 ERR("Disconnect returned %d, still trying to disconnect", ret);
group-onsemi 0:098463de4c5d 140 }
group-onsemi 0:098463de4c5d 141
group-onsemi 0:098463de4c5d 142 //Ugly but leave dongle time to recover
group-onsemi 0:098463de4c5d 143 Thread::wait(500);
group-onsemi 0:098463de4c5d 144
group-onsemi 0:098463de4c5d 145 #if USE_ONE_PORT
group-onsemi 0:098463de4c5d 146 ATCommandsInterface::ATResult result;
group-onsemi 0:098463de4c5d 147 DBG("Starting AT thread");
group-onsemi 0:098463de4c5d 148 ret = m_at.open();
group-onsemi 0:098463de4c5d 149 if(ret)
group-onsemi 0:098463de4c5d 150 {
group-onsemi 0:098463de4c5d 151 return ret;
group-onsemi 0:098463de4c5d 152 }
group-onsemi 0:098463de4c5d 153 #endif
group-onsemi 0:098463de4c5d 154
group-onsemi 0:098463de4c5d 155 DBG("Trying to hangup");
group-onsemi 0:098463de4c5d 156
group-onsemi 0:098463de4c5d 157 #if 0 //Does not appear to work
group-onsemi 0:098463de4c5d 158 int tries = 10;
group-onsemi 0:098463de4c5d 159 do
group-onsemi 0:098463de4c5d 160 {
group-onsemi 0:098463de4c5d 161 ret = m_at.executeSimple("+++", &result, 1000);
group-onsemi 0:098463de4c5d 162 DBG("Result of command: Err code=%d\n", ret);
group-onsemi 0:098463de4c5d 163 DBG("ATResult: AT return=%d (code %d)\n", result.result, result.code);
group-onsemi 0:098463de4c5d 164 } while(tries-- && ret);
group-onsemi 0:098463de4c5d 165 if(!ret)
group-onsemi 0:098463de4c5d 166 {
group-onsemi 0:098463de4c5d 167 ret = m_at.executeSimple("ATH", &result);
group-onsemi 0:098463de4c5d 168 DBG("Result of command: Err code=%d\n", ret);
group-onsemi 0:098463de4c5d 169 DBG("ATResult: AT return=%d (code %d)\n", result.result, result.code);
group-onsemi 0:098463de4c5d 170 }
group-onsemi 0:098463de4c5d 171 #endif
group-onsemi 0:098463de4c5d 172
group-onsemi 0:098463de4c5d 173 #if USE_ONE_PORT
group-onsemi 0:098463de4c5d 174 //Reinit AT parser
group-onsemi 0:098463de4c5d 175 ret = m_at.init();
group-onsemi 0:098463de4c5d 176 DBG("Result of command: Err code=%d\n", ret);
group-onsemi 0:098463de4c5d 177 if(ret)
group-onsemi 0:098463de4c5d 178 {
group-onsemi 0:098463de4c5d 179 m_at.close(); // Closing AT parser
group-onsemi 0:098463de4c5d 180 DBG("AT Parser closed, could not complete disconnection");
group-onsemi 0:098463de4c5d 181 return NET_TIMEOUT;
group-onsemi 0:098463de4c5d 182 }
group-onsemi 0:098463de4c5d 183
group-onsemi 0:098463de4c5d 184 #if 0
group-onsemi 0:098463de4c5d 185 m_at.close(); // Closing AT parser
group-onsemi 0:098463de4c5d 186 DBG("AT Parser closed");
group-onsemi 0:098463de4c5d 187 #endif
group-onsemi 0:098463de4c5d 188 #endif
group-onsemi 0:098463de4c5d 189 return OK;
group-onsemi 0:098463de4c5d 190 }
group-onsemi 0:098463de4c5d 191
group-onsemi 0:098463de4c5d 192 int UbloxUSBCDMAModem::sendSM(const char* number, const char* message)
group-onsemi 0:098463de4c5d 193 {
group-onsemi 0:098463de4c5d 194 int ret = init();
group-onsemi 0:098463de4c5d 195 if(ret)
group-onsemi 0:098463de4c5d 196 {
group-onsemi 0:098463de4c5d 197 return ret;
group-onsemi 0:098463de4c5d 198 }
group-onsemi 0:098463de4c5d 199
group-onsemi 0:098463de4c5d 200 if(!m_smsInit)
group-onsemi 0:098463de4c5d 201 {
group-onsemi 0:098463de4c5d 202 ret = m_sms.init();
group-onsemi 0:098463de4c5d 203 if(ret)
group-onsemi 0:098463de4c5d 204 {
group-onsemi 0:098463de4c5d 205 return ret;
group-onsemi 0:098463de4c5d 206 }
group-onsemi 0:098463de4c5d 207 m_smsInit = true;
group-onsemi 0:098463de4c5d 208 }
group-onsemi 0:098463de4c5d 209
group-onsemi 0:098463de4c5d 210 ret = m_sms.send(number, message);
group-onsemi 0:098463de4c5d 211 if(ret)
group-onsemi 0:098463de4c5d 212 {
group-onsemi 0:098463de4c5d 213 return ret;
group-onsemi 0:098463de4c5d 214 }
group-onsemi 0:098463de4c5d 215
group-onsemi 0:098463de4c5d 216 return OK;
group-onsemi 0:098463de4c5d 217 }
group-onsemi 0:098463de4c5d 218
group-onsemi 0:098463de4c5d 219 int UbloxUSBCDMAModem::getSM(char* number, char* message, size_t maxLength)
group-onsemi 0:098463de4c5d 220 {
group-onsemi 0:098463de4c5d 221 int ret = init();
group-onsemi 0:098463de4c5d 222 if(ret)
group-onsemi 0:098463de4c5d 223 {
group-onsemi 0:098463de4c5d 224 return ret;
group-onsemi 0:098463de4c5d 225 }
group-onsemi 0:098463de4c5d 226
group-onsemi 0:098463de4c5d 227 if(!m_smsInit)
group-onsemi 0:098463de4c5d 228 {
group-onsemi 0:098463de4c5d 229 ret = m_sms.init();
group-onsemi 0:098463de4c5d 230 if(ret)
group-onsemi 0:098463de4c5d 231 {
group-onsemi 0:098463de4c5d 232 return ret;
group-onsemi 0:098463de4c5d 233 }
group-onsemi 0:098463de4c5d 234 m_smsInit = true;
group-onsemi 0:098463de4c5d 235 }
group-onsemi 0:098463de4c5d 236
group-onsemi 0:098463de4c5d 237 ret = m_sms.get(number, message, maxLength);
group-onsemi 0:098463de4c5d 238 if(ret)
group-onsemi 0:098463de4c5d 239 {
group-onsemi 0:098463de4c5d 240 return ret;
group-onsemi 0:098463de4c5d 241 }
group-onsemi 0:098463de4c5d 242
group-onsemi 0:098463de4c5d 243 return OK;
group-onsemi 0:098463de4c5d 244 }
group-onsemi 0:098463de4c5d 245
group-onsemi 0:098463de4c5d 246 int UbloxUSBCDMAModem::getSMCount(size_t* pCount)
group-onsemi 0:098463de4c5d 247 {
group-onsemi 0:098463de4c5d 248 int ret = init();
group-onsemi 0:098463de4c5d 249 if(ret)
group-onsemi 0:098463de4c5d 250 {
group-onsemi 0:098463de4c5d 251 return ret;
group-onsemi 0:098463de4c5d 252 }
group-onsemi 0:098463de4c5d 253
group-onsemi 0:098463de4c5d 254 if(!m_smsInit)
group-onsemi 0:098463de4c5d 255 {
group-onsemi 0:098463de4c5d 256 ret = m_sms.init();
group-onsemi 0:098463de4c5d 257 if(ret)
group-onsemi 0:098463de4c5d 258 {
group-onsemi 0:098463de4c5d 259 return ret;
group-onsemi 0:098463de4c5d 260 }
group-onsemi 0:098463de4c5d 261 m_smsInit = true;
group-onsemi 0:098463de4c5d 262 }
group-onsemi 0:098463de4c5d 263
group-onsemi 0:098463de4c5d 264 ret = m_sms.getCount(pCount);
group-onsemi 0:098463de4c5d 265 if(ret)
group-onsemi 0:098463de4c5d 266 {
group-onsemi 0:098463de4c5d 267 return ret;
group-onsemi 0:098463de4c5d 268 }
group-onsemi 0:098463de4c5d 269
group-onsemi 0:098463de4c5d 270 return OK;
group-onsemi 0:098463de4c5d 271 }
group-onsemi 0:098463de4c5d 272
group-onsemi 0:098463de4c5d 273 ATCommandsInterface* UbloxUSBCDMAModem::getATCommandsInterface()
group-onsemi 0:098463de4c5d 274 {
group-onsemi 0:098463de4c5d 275 return &m_at;
group-onsemi 0:098463de4c5d 276 }
group-onsemi 0:098463de4c5d 277
group-onsemi 0:098463de4c5d 278 int UbloxUSBCDMAModem::power(bool enable)
group-onsemi 0:098463de4c5d 279 {
group-onsemi 0:098463de4c5d 280 if( m_powerGatingPin == NC )
group-onsemi 0:098463de4c5d 281 {
group-onsemi 0:098463de4c5d 282 return NET_INVALID; //A pin name has not been provided in the constructor
group-onsemi 0:098463de4c5d 283 }
group-onsemi 0:098463de4c5d 284
group-onsemi 0:098463de4c5d 285 if(!enable) //Will force components to re-init
group-onsemi 0:098463de4c5d 286 {
group-onsemi 0:098463de4c5d 287 cleanup();
group-onsemi 0:098463de4c5d 288 }
group-onsemi 0:098463de4c5d 289
group-onsemi 0:098463de4c5d 290 DigitalOut powerGatingOut(m_powerGatingPin);
group-onsemi 0:098463de4c5d 291 powerGatingOut = m_powerGatingOnWhenPinHigh?enable:!enable;
group-onsemi 0:098463de4c5d 292
group-onsemi 0:098463de4c5d 293 return OK;
group-onsemi 0:098463de4c5d 294 }
group-onsemi 0:098463de4c5d 295
group-onsemi 0:098463de4c5d 296 bool UbloxUSBCDMAModem::power()
group-onsemi 0:098463de4c5d 297 {
group-onsemi 0:098463de4c5d 298 if( m_powerGatingPin == NC )
group-onsemi 0:098463de4c5d 299 {
group-onsemi 0:098463de4c5d 300 return true; //Assume power is always on
group-onsemi 0:098463de4c5d 301 }
group-onsemi 0:098463de4c5d 302
group-onsemi 0:098463de4c5d 303 DigitalOut powerGatingOut(m_powerGatingPin);
group-onsemi 0:098463de4c5d 304 return m_powerGatingOnWhenPinHigh?powerGatingOut:!powerGatingOut;
group-onsemi 0:098463de4c5d 305 }
group-onsemi 0:098463de4c5d 306
group-onsemi 0:098463de4c5d 307 int UbloxUSBCDMAModem::init()
group-onsemi 0:098463de4c5d 308 {
group-onsemi 0:098463de4c5d 309 if( !m_dongleConnected )
group-onsemi 0:098463de4c5d 310 {
group-onsemi 0:098463de4c5d 311 if(!power())
group-onsemi 0:098463de4c5d 312 {
group-onsemi 0:098463de4c5d 313 //Obviously cannot initialize the dongle if it is disconnected...
group-onsemi 0:098463de4c5d 314 ERR("Power is off");
group-onsemi 0:098463de4c5d 315 return NET_INVALID;
group-onsemi 0:098463de4c5d 316 }
group-onsemi 0:098463de4c5d 317 m_dongleConnected = true;
group-onsemi 0:098463de4c5d 318 while( !m_dongle.connected() )
group-onsemi 0:098463de4c5d 319 {
group-onsemi 0:098463de4c5d 320 m_dongle.tryConnect();
group-onsemi 0:098463de4c5d 321 Thread::wait(100);
group-onsemi 0:098463de4c5d 322 }
group-onsemi 0:098463de4c5d 323 }
group-onsemi 0:098463de4c5d 324
group-onsemi 0:098463de4c5d 325 if(m_atOpen)
group-onsemi 0:098463de4c5d 326 {
group-onsemi 0:098463de4c5d 327 return OK;
group-onsemi 0:098463de4c5d 328 }
group-onsemi 0:098463de4c5d 329
group-onsemi 0:098463de4c5d 330 DBG("Starting AT thread if needed");
group-onsemi 0:098463de4c5d 331 int ret = m_at.open();
group-onsemi 0:098463de4c5d 332 if(ret)
group-onsemi 0:098463de4c5d 333 {
group-onsemi 0:098463de4c5d 334 return ret;
group-onsemi 0:098463de4c5d 335 }
group-onsemi 0:098463de4c5d 336
group-onsemi 0:098463de4c5d 337 DBG("Sending initialisation commands");
group-onsemi 0:098463de4c5d 338 ret = m_at.init();
group-onsemi 0:098463de4c5d 339 if(ret)
group-onsemi 0:098463de4c5d 340 {
group-onsemi 0:098463de4c5d 341 return ret;
group-onsemi 0:098463de4c5d 342 }
group-onsemi 0:098463de4c5d 343
group-onsemi 0:098463de4c5d 344 if(m_dongle.getDongleType() == WAN_DONGLE_TYPE_UBLOX_LISAC200)
group-onsemi 0:098463de4c5d 345 {
group-onsemi 0:098463de4c5d 346 INFO("Using a UBLOX C200 Dongle");
group-onsemi 0:098463de4c5d 347 }
group-onsemi 0:098463de4c5d 348 else
group-onsemi 0:098463de4c5d 349 {
group-onsemi 0:098463de4c5d 350 WARN("Using an Unknown Dongle");
group-onsemi 0:098463de4c5d 351 }
group-onsemi 0:098463de4c5d 352
group-onsemi 0:098463de4c5d 353 ATCommandsInterface::ATResult result;
group-onsemi 0:098463de4c5d 354
group-onsemi 0:098463de4c5d 355 //Wait for network registration
group-onsemi 0:098463de4c5d 356 CSSProcessor cssProcessor;
group-onsemi 0:098463de4c5d 357 do
group-onsemi 0:098463de4c5d 358 {
group-onsemi 0:098463de4c5d 359 DBG("Waiting for network registration");
group-onsemi 0:098463de4c5d 360 ret = m_at.execute("AT+CSS?", &cssProcessor, &result);
group-onsemi 0:098463de4c5d 361 DBG("Result of command: Err code=%d\n", ret);
group-onsemi 0:098463de4c5d 362 DBG("ATResult: AT return=%d (code %d)\n", result.result, result.code);
group-onsemi 0:098463de4c5d 363 if(cssProcessor.getStatus() == CSSProcessor::STATUS_REGISTERING)
group-onsemi 0:098463de4c5d 364 {
group-onsemi 0:098463de4c5d 365 Thread::wait(3000);
group-onsemi 0:098463de4c5d 366 }
group-onsemi 0:098463de4c5d 367 } while(cssProcessor.getStatus() == CSSProcessor::STATUS_REGISTERING);
group-onsemi 0:098463de4c5d 368
group-onsemi 0:098463de4c5d 369 m_atOpen = true;
group-onsemi 0:098463de4c5d 370
group-onsemi 0:098463de4c5d 371 return OK;
group-onsemi 0:098463de4c5d 372 }
group-onsemi 0:098463de4c5d 373
group-onsemi 0:098463de4c5d 374 int UbloxUSBCDMAModem::cleanup()
group-onsemi 0:098463de4c5d 375 {
group-onsemi 0:098463de4c5d 376 if(m_ppp.isConnected())
group-onsemi 0:098463de4c5d 377 {
group-onsemi 0:098463de4c5d 378 WARN("Data connection is still open"); //Try to encourage good behaviour from the user
group-onsemi 0:098463de4c5d 379 m_ppp.disconnect();
group-onsemi 0:098463de4c5d 380 }
group-onsemi 0:098463de4c5d 381
group-onsemi 0:098463de4c5d 382 m_smsInit = false;
group-onsemi 0:098463de4c5d 383 // m_linkMonitorInit = false;
group-onsemi 0:098463de4c5d 384 //We don't reset m_ipInit as PPPIPInterface::init() only needs to be called once
group-onsemi 0:098463de4c5d 385
group-onsemi 0:098463de4c5d 386 if(m_atOpen)
group-onsemi 0:098463de4c5d 387 {
group-onsemi 0:098463de4c5d 388 m_at.close();
group-onsemi 0:098463de4c5d 389 m_atOpen = false;
group-onsemi 0:098463de4c5d 390 }
group-onsemi 0:098463de4c5d 391
group-onsemi 0:098463de4c5d 392 m_dongle.disconnect();
group-onsemi 0:098463de4c5d 393 m_dongleConnected = false;
group-onsemi 0:098463de4c5d 394
group-onsemi 0:098463de4c5d 395 return OK;
group-onsemi 0:098463de4c5d 396 }
group-onsemi 0:098463de4c5d 397
group-onsemi 0:098463de4c5d 398