USB Host Library for Sprint Dongles

Dependencies:   Socket USBHostWANDongleSprint lwip-sys lwip

Dependents:   SprintUSBModemWebsocketTest SprintUSBModemHTTPClientTest SprintUSBModemNTPClientTest SprintUSBModemSMSTest ... more

Fork of SprintUSBModem_bleedingedge by Donatien Garnier

Committer:
donatien
Date:
Wed Sep 26 07:08:18 2012 +0000
Revision:
2:f4d9c4ea17f9
Parent:
0:8f57713b2147
Child:
3:9dd2b131afa0
USB lib update

Who changed what in which revision?

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