454
Fork of C027_Support by
Diff: MDM.cpp
- Revision:
- 32:8f12ac182bbb
- Parent:
- 31:a0bed6c1e05d
- Child:
- 33:fb8fb5021b09
diff -r a0bed6c1e05d -r 8f12ac182bbb MDM.cpp --- a/MDM.cpp Wed Apr 09 11:48:04 2014 +0000 +++ b/MDM.cpp Wed Apr 09 13:03:48 2014 +0000 @@ -121,7 +121,7 @@ TRACE("Socket %d: closed by remote host\r\n", a); _sockets[a].state = SOCK_CREATED/*=CLOSED*/; } - if (_dev.model == MODEL_LISA_C200) { + if (_dev.dev == DEV_LISA_C200) { // CDMA Specific ------------------------------------------- // +CREG: <n><SID>,<NID>,<stat> if (sscanf(cmd, "CREG: %*d,%*d,%*d,%d",&a) == 1) { @@ -220,16 +220,28 @@ wait_ms(40); // identify the module sendFormated("ATI\r\n"); - if (OK != waitFinalResp(_cbATI, &_dev.model)) + if (OK != waitFinalResp(_cbATI, &_dev.dev)) return false; - if (_dev.model == MODEL_UNKNOWN) + if (_dev.dev == DEV_UNKNOWN) return false; - // model specific init - if (_dev.model == MODEL_LISA_C200) { + // device specific init + if (_dev.dev == DEV_LISA_C200) { // disable flow control sendFormated("AT+IFC=0,0\r\n"); if (OK != waitFinalResp()) return false; + // get the manufacturer + sendFormated("AT+GMI\r\n"); + if (OK != waitFinalResp(_cbString, _dev.manu)) + return false; + // get the model identification + sendFormated("AT+GMM\r\n"); + if (OK != waitFinalResp(_cbString, _dev.model)) + return false; + // get the sw version + sendFormated("AT+GMR\r\n"); + if (OK != waitFinalResp(_cbString, _dev.ver)) + return false; // Return the pseudo ESN or MEID sendFormated("AT+GSN\r\n"); if (OK != waitFinalResp(_cbString, _dev.imei)) @@ -244,7 +256,7 @@ if (OK != waitFinalResp()) return false; // enable the network identification feature - if (_dev.model == MODEL_LISA_U200) { + if (_dev.dev == DEV_LISA_U200) { sendFormated("AT+UGPIOC=20,2\r\n"); if (OK != waitFinalResp()) return false; @@ -273,6 +285,18 @@ } if (_dev.sim != SIM_READY) return false; + // get the manufacturer + sendFormated("AT+CGMI\r\n"); + if (OK != waitFinalResp(_cbString, _dev.manu)) + return false; + // get the model identification + sendFormated("AT+CGMM\r\n"); + if (OK != waitFinalResp(_cbString, _dev.model)) + return false; + // get the + sendFormated("AT+CGMR\r\n"); + if (OK != waitFinalResp(_cbString, _dev.ver)) + return false; // Returns the ICCID (Integrated Circuit Card ID) of the SIM-card. // ICCID is a serial number identifying the SIM. sendFormated("AT+CCID\r\n"); @@ -305,18 +329,18 @@ return true; } -int MDMParser::_cbATI(int type, const char* buf, int len, Model* model) +int MDMParser::_cbATI(int type, const char* buf, int len, Dev* dev) { - if ((type == TYPE_UNKNOWN) && model) { + if ((type == TYPE_UNKNOWN) && dev) { if (strstr(buf, "SARA-G350")) { - *model = MODEL_SARA_G350; - /*TRACE("Identified Model: SARA-G350 2G\\n")*/; + *dev = DEV_SARA_G350; + /*TRACE("Identified Device: SARA-G350 2G\\n")*/; } else if (strstr(buf, "LISA-U200")) { - *model = MODEL_LISA_U200; - /*TRACE("Identified Model: LISA-U200 2G/3G\r\n")*/; + *dev = DEV_LISA_U200; + /*TRACE("Identified Device: LISA-U200 2G/3G\r\n")*/; } else if (strstr(buf, "LISA-C200")) { - *model= MODEL_LISA_C200; - /*TRACE("Identified Model: LISA-C200 CDMA\r\n")*/; + *dev= DEV_LISA_C200; + /*TRACE("Identified Device: LISA-C200 CDMA\r\n")*/; } } return WAIT; @@ -351,10 +375,22 @@ if ((_net.reg != REG_ROAMING) && (_net.reg != REG_HOME)) return false; // check modem specific status messages - if (_dev.model == MODEL_LISA_C200) { + if (_dev.dev == DEV_LISA_C200) { sendFormated("AT+CSS?\r\n"); if (OK != waitFinalResp()) return false; + // get the Telephone number + sendFormated("AT$MDN?\r\n"); + if (OK != waitFinalResp(_cbString, _net.num)) + return false; + // check if we have a Mobile Directory Number + if (memcmp(_net.num, "0000", 4) == 0); + return false; + // get the the Network access identifier string + char nai[64]; + sendFormated("AT$QCMIPNAI?\r\n"); + if (OK != waitFinalResp(_cbString, nai)) + return false; } else { // check GPRS attach status int state = 0; @@ -440,20 +476,14 @@ MDMParser::IP MDMParser::join(const char* apn /*= NULL*/, const char* user /*= NULL*/, const char* password /*= NULL*/) { - IP ip = NOIP; - if (_dev.model == MODEL_LISA_C200) { -#ifdef TODO // TODO implement - // enable the - sendFormated("AT$QCMIPEP=1\r\n"); - if (OK != waitFinalResp()) - return NOIP; + _ip = NOIP; + if (_dev.dev == DEV_LISA_C200) { + // TODO: is there something to do here? + //Get local IP address sendFormated("AT+CMIP?\r\n"); - // extract: +CMIP: xxx.xxx.xxx.xxx - if (OK != waitFinalResp()) + if (OK != waitFinalResp(_cbCMIP, &_ip)) return NOIP; - -#endif } else { // check gprs attach status sendFormated("AT+CGATT?\r\n"); @@ -497,12 +527,22 @@ return NOIP; //Get local IP address sendFormated("AT+UPSND=" PROFILE ",0\r\n"); - if (OK != waitFinalResp(_cbUPSND, &ip)) + if (OK != waitFinalResp(_cbUPSND, &_ip)) return NOIP; } - return ip; + return _ip; } +int MDMParser::_cbCMIP(int type, const char* buf, int len, IP* ip) +{ + if ((type == TYPE_PLUS) && ip) { + int a,b,c,d; + if (sscanf(buf, "\r\n+CMIP: " IPSTR, &a,&b,&c,&d) == 4) + *ip = IPADR(a,b,c,d); + } + return WAIT; +} + int MDMParser::_cbUPSND(int type, const char* buf, int len, int* act) { if ((type == TYPE_PLUS) && act) { @@ -537,15 +577,13 @@ { if (_ip == NOIP) return true; - if (_dev.model == MODEL_LISA_C200) { -#ifdef TODO // TODO implement - sendFormated("AT$QCMIPEP=0\r\n"); -#endif + if (_dev.dev == DEV_LISA_C200) { + // TODO: is there something to do here? } else { sendFormated("AT+UPSDA=" PROFILE ",4\r\n"); + if (OK != waitFinalResp()) + return false; } - if (OK != waitFinalResp()) - return false; _ip = NOIP; return true; }