//URC recognize. bool GSM3ShieldV1ServerProvider::recognizeUnsolicitedEvent(byte oldTail) { int nlength; char auxLocate [15]; //REMOTE SOCKET CLOSED. prepareAuxLocate("CLOSED\r\n", auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. theGSM3ShieldV1ModemCore.setStatus(GPRS_READY); } //REMOTE SOCKET ACCEPTED. prepareAuxLocate("CONNECT\r\n", auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. theGSM3ShieldV1ModemCore.theBuffer().chopUntil(auxLocate, true); theGSM3ShieldV1ModemCore.gss.spaceAvailable(); theGSM3ShieldV1ModemCore.setStatus(TRANSPARENT_CONNECTED); return true; } return false; }
//URC recognize. bool GSM3ShieldV1VoiceProvider::recognizeUnsolicitedEvent(byte oldTail) { int nlength; char auxLocate [15]; //RING. prepareAuxLocate(PSTR("RING"), auxLocate); if(theGSM3ShieldV1ModemCore.theBuffer().locate(auxLocate)) { // RING setvoiceCallStatus(RECEIVINGCALL); theGSM3ShieldV1ModemCore.theBuffer().flush(); return true; } //CALL ACEPTED. prepareAuxLocate(PSTR("+COLP:"), auxLocate); if(theGSM3ShieldV1ModemCore.theBuffer().locate(auxLocate)) { //DEBUG //Serial.println("Call Accepted."); setvoiceCallStatus(TALKING); theGSM3ShieldV1ModemCore.theBuffer().flush(); return true; } //NO CARRIER. prepareAuxLocate(PSTR("NO CARRIER"), auxLocate); if(theGSM3ShieldV1ModemCore.theBuffer().locate(auxLocate)) { //DEBUG //Serial.println("NO CARRIER received."); setvoiceCallStatus(IDLE_CALL); theGSM3ShieldV1ModemCore.theBuffer().flush(); return true; } //BUSY. prepareAuxLocate(PSTR("BUSY"), auxLocate); if(theGSM3ShieldV1ModemCore.theBuffer().locate(auxLocate)) { //DEBUG //Serial.println("BUSY received."); setvoiceCallStatus(IDLE_CALL); theGSM3ShieldV1ModemCore.theBuffer().flush(); return true; } //CALL RECEPTION. prepareAuxLocate(PSTR("+CLIP:"), auxLocate); if(theGSM3ShieldV1ModemCore.theBuffer().locate(auxLocate)) { theGSM3ShieldV1ModemCore.theBuffer().flush(); setvoiceCallStatus(RECEIVINGCALL); return true; } return false; }
void SIM808TCPProvider::TCPModemConfigurationCB(){ bool resp; char auxLocate[15]; switch (SIM808ModemCore_t.getCommandCounter()){ case 1: SIM808ModemCore_t.genericCommand_rq(PSTR("AT+CIPSTART="), false);//tcp SIM808ModemCore_t.genericCommand_rqc(this->tcpip); this->setTCPStatus(LAUNCHED); SIM808ModemCore_t.setCommandCounter(2); break; case 2: prepareAuxLocate(PSTR("CONNECT OK"), auxLocate); if (SIM808ModemCore_t.genericParse_rsp(resp, auxLocate)){ if (resp){ SIM808ModemCore_t.setStatus(TCP_CONNECTED);// this->setTCPStatus(CONNECTED); #if ANDYDEBUG Serial.println("------------------------------"); Serial.print(" TCP Connected Success:"); Serial.print(++nums); Serial.print(" "); Serial.println(this->TCPSendTime()); Serial.println("------------------------------"); #endif SIM808ModemCore_t.closeCommand(1); } } break; case 4: SIM808ModemCore_t.genericCommand_rq(PSTR("AT+CIPCLOSE=0"));//tcp SIM808ModemCore_t.setCommandCounter(5); break; case 5: prepareAuxLocate(PSTR("CLOSE OK"), auxLocate); if (SIM808ModemCore_t.genericParse_rsp(resp, auxLocate)){ if (resp){ SIM808ModemCore_t.setStatus(TCP_DISCONNECTED);// this->setTCPStatus(DISCONNECTED); SIM808ModemCore_t.closeCommand(1); #if ANDYDEBUG Serial.println("TCP closed connected..."); #endif } } break; default: // //this->reStr_t = 1; break; } }
//Read Socket Parse head. bool GSM3ShieldV1MultiClientProvider::parseQIRD_head(bool& rsp) { char _qird [8]; prepareAuxLocate("+QIRD:", _qird); fullBufferSocket = (theGSM3ShieldV1ModemCore.theBuffer().availableBytes()<3); if(theGSM3ShieldV1ModemCore.theBuffer().locate(_qird)) { theGSM3ShieldV1ModemCore.theBuffer().chopUntil(_qird, true); // Saving more memory, reuse _qird _qird[0]='\n'; _qird[1]=0; theGSM3ShieldV1ModemCore.theBuffer().chopUntil(_qird, true); rsp = true; return true; } else if(theGSM3ShieldV1ModemCore.theBuffer().locate("OK")) { rsp = false; return true; } else { rsp = false; return false; } }
// URC recognize. // Yes, we recognize "closes" in client mode bool GSM3ShieldV1ClientProvider::recognizeUnsolicitedEvent(byte oldTail) { char auxLocate [12]; prepareAuxLocate(PSTR("CLOSED"), auxLocate); if((theGSM3ShieldV1ModemCore.getStatus()==TRANSPARENT_CONNECTED) & theGSM3ShieldV1ModemCore.theBuffer().chopUntil(auxLocate, false, false)) { theGSM3ShieldV1ModemCore.setStatus(GPRS_READY); theGSM3ShieldV1ModemCore.unRegisterUMProvider(this); return true; } return false; }
//URC recognize. bool GSM3ShieldV1::recognizeUnsolicitedEvent(byte oldTail) { int nlength; char auxLocate [15]; //POWER DOWN. prepareAuxLocate("POWER DOWN", auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { theGSM3ShieldV1ModemCore.gss.cb.flush(); return true; } return false; }
bool SIM808TCPProvider::recognizeUnsolicitedEvent(int oldTail){ int nlength; char auxLocate[20]; //RING. prepareAuxLocate(PSTR("CLOSED"), auxLocate); if (SIM808ModemCore_t.theBuffer().locate(auxLocate)){ SIM808ModemCore_t.setStatus(TCP_DISCONNECTED);// this->setTCPStatus(DISCONNECTED); SIM808ModemCore_t.closeCommand(1); SIM808ModemCore_t.theBuffer().Flush(); return true; } return false; }
void GSM3ShieldV1DataNetworkProvider::detachGPRSContinue() { bool resp; // 1: Detach to GPRS service "AT+CGATT=0" // 2: Wait dettach +PDP DEACT // 3: Wait for OK switch (theGSM3ShieldV1ModemCore.getCommandCounter()) { case 1: //AT+CGATT=0 theGSM3ShieldV1ModemCore.genericCommand_rq(_command_CGATT,false); theGSM3ShieldV1ModemCore.print(0); theGSM3ShieldV1ModemCore.print('\r'); theGSM3ShieldV1ModemCore.setCommandCounter(2); break; case 2: char auxLocate[12]; prepareAuxLocate(PSTR("+PDP DEACT"), auxLocate); if(theGSM3ShieldV1ModemCore.theBuffer().locate(auxLocate)) { if(resp) { // Received +PDP DEACT; theGSM3ShieldV1ModemCore.setCommandCounter(3); } else theGSM3ShieldV1ModemCore.closeCommand(3); } break; case 3: if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp)) { // OK received if (resp) { theGSM3ShieldV1ModemCore.setStatus(GSM_READY); theGSM3ShieldV1ModemCore.closeCommand(1); } else theGSM3ShieldV1ModemCore.closeCommand(3); } theGSM3ShieldV1ModemCore.theBuffer().flush(); theGSM3ShieldV1ModemCore.gss.spaceAvailable(); break; } }
bool SIM808AccessProvider::shutdown() { unsigned long m; bool resp; char auxLocate[12]; // It makes no sense to have an asynchronous shutdown pinMode(__RESETPIN__, OUTPUT); digitalWrite(__RESETPIN__, HIGH); delay(1500); digitalWrite(__RESETPIN__, LOW); SIM808ModemCore_t.setStatus(IDLE); SIM808ModemCore_t.gss.close(); m = millis(); prepareAuxLocate(PSTR("POWER DOWN"), auxLocate); while ((millis() - m) < __TOUTSHUTDOWN__){ delay(1); if (SIM808ModemCore_t.genericParse_rsp(resp, auxLocate)) return resp; } return false; }
//Connect TCP continue function. void GSM3ShieldV1ClientProvider::connectTCPClientContinue() { bool resp; // 0: Dot or DNS notation activation // 1: Disable SW flow control // 2: Waiting for IFC OK // 3: Start-up TCP connection "AT+QIOPEN" // 4: Wait for connection OK // 5: Wait for CONNECT switch (theGSM3ShieldV1ModemCore.getCommandCounter()) { case 1: theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QIDNSIP="), false); if ((theGSM3ShieldV1ModemCore.getPhoneNumber()!=0)&& ((*(theGSM3ShieldV1ModemCore.getPhoneNumber())<'0')||((*(theGSM3ShieldV1ModemCore.getPhoneNumber())>'9')))) { theGSM3ShieldV1ModemCore.print('1'); theGSM3ShieldV1ModemCore.print('\r'); } else { theGSM3ShieldV1ModemCore.print('0'); theGSM3ShieldV1ModemCore.print('\r'); } theGSM3ShieldV1ModemCore.setCommandCounter(2); break; case 2: if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp)) { //Response received if(resp) { // AT+QIOPEN theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QIOPEN="),false); theGSM3ShieldV1ModemCore.print("\"TCP\",\""); if(theGSM3ShieldV1ModemCore.getPhoneNumber()!=0) { theGSM3ShieldV1ModemCore.print(theGSM3ShieldV1ModemCore.getPhoneNumber()); } else { remoteIP.printTo(theGSM3ShieldV1ModemCore); } theGSM3ShieldV1ModemCore.print('"'); theGSM3ShieldV1ModemCore.print(','); theGSM3ShieldV1ModemCore.print(theGSM3ShieldV1ModemCore.getPort()); theGSM3ShieldV1ModemCore.print('\r'); theGSM3ShieldV1ModemCore.setCommandCounter(3); } else theGSM3ShieldV1ModemCore.closeCommand(3); } break; case 3: if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp)) { // Response received if(resp) { // OK Received // Great. Go for the next step theGSM3ShieldV1ModemCore.setCommandCounter(4); } else theGSM3ShieldV1ModemCore.closeCommand(3); } break; case 4: char auxLocate [12]; prepareAuxLocate(PSTR("CONNECT\r\n"), auxLocate); if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp,auxLocate)) { // Response received if(resp) { // Received CONNECT OK // Great. We're done theGSM3ShieldV1ModemCore.setStatus(TRANSPARENT_CONNECTED); theGSM3ShieldV1ModemCore.theBuffer().chopUntil(auxLocate, true); theGSM3ShieldV1ModemCore.closeCommand(1); } else theGSM3ShieldV1ModemCore.closeCommand(3); } break; } }
//URC recognize. bool GSM3ShieldV1MultiServerProvider::recognizeUnsolicitedEvent(byte oldTail) { int nlength; char auxLocate [15]; //REMOTE SOCKET CLOSED. prepareAuxLocate(PSTR("0, CLOSED\r\n"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. releaseSocket(0); socketsAccepted &= ~(0x0001); //Serial.println("JCR_DB REMOTE CLOSED"); } //REMOTE SOCKET CLOSED. prepareAuxLocate(PSTR("1, CLOSED\r\n"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. releaseSocket(1); socketsAccepted &= ~(0x0002); } //REMOTE SOCKET CLOSED. prepareAuxLocate(PSTR("2, CLOSED\r\n"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. releaseSocket(2); socketsAccepted &= ~(0x0004); } //REMOTE SOCKET CLOSED. prepareAuxLocate(PSTR("3, CLOSED\r\n"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. releaseSocket(3); socketsAccepted &= ~(0x0008); } //REMOTE SOCKET CLOSED. prepareAuxLocate(PSTR("4, CLOSED\r\n"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. releaseSocket(4); socketsAccepted &= ~(0x0010); } //REMOTE SOCKET CLOSED. prepareAuxLocate(PSTR("5, CLOSED\r\n"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. releaseSocket(5); socketsAccepted &= ~(0x0020); } //REMOTE SOCKET CLOSED. prepareAuxLocate(PSTR("6, CLOSED\r\n"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. releaseSocket(6); socketsAccepted &= ~(0x0040); } //REMOTE SOCKET CLOSED. prepareAuxLocate(PSTR("7, CLOSED\r\n"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. releaseSocket(7); socketsAccepted &= ~(0x0080); } //REMOTE SOCKET ACCEPTED. prepareAuxLocate(PSTR("0, REMOTE IP"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. theGSM3ShieldV1ModemCore.gss.cb.flush(); socketsAccepted |= (0x0001); return true; } //REMOTE SOCKET ACCEPTED. prepareAuxLocate(PSTR("1, REMOTE IP"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. theGSM3ShieldV1ModemCore.gss.cb.flush(); socketsAccepted |= (0x0002); return true; } //REMOTE SOCKET ACCEPTED. prepareAuxLocate(PSTR("2, REMOTE IP"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. theGSM3ShieldV1ModemCore.gss.cb.flush(); socketsAccepted |= (0x0004); return true; } //REMOTE SOCKET ACCEPTED. prepareAuxLocate(PSTR("3, REMOTE IP"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. theGSM3ShieldV1ModemCore.gss.cb.flush(); socketsAccepted |= (0x0008); return true; } //REMOTE SOCKET ACCEPTED. prepareAuxLocate(PSTR("4, REMOTE IP"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. theGSM3ShieldV1ModemCore.gss.cb.flush(); socketsAccepted |= (0x0010); return true; } //REMOTE SOCKET ACCEPTED. prepareAuxLocate(PSTR("5, REMOTE IP"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. theGSM3ShieldV1ModemCore.gss.cb.flush(); socketsAccepted |= (0x0020); return true; } //REMOTE SOCKET ACCEPTED. prepareAuxLocate(PSTR("6, REMOTE IP"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. theGSM3ShieldV1ModemCore.gss.cb.flush(); socketsAccepted |= (0x0040); return true; } //REMOTE SOCKET ACCEPTED. prepareAuxLocate(PSTR("7, REMOTE IP"), auxLocate); if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate)) { //To detect remote socket closed for example inside socket data. theGSM3ShieldV1ModemCore.gss.cb.flush(); socketsAccepted |= (0x0080); return true; } return false; }
//Initial configuration continue function. void GSM3ShieldV1AccessProvider::ModemConfigurationContinue() { bool resp; // 1: Send AT // 2: Wait AT OK and SetPin or CGREG // 3: Wait Pin OK and CGREG // 4: Wait CGREG and Flow SW control or CGREG // 5: Wait IFC OK and SMS Text Mode // 6: Wait SMS text Mode OK and Calling line identification // 7: Wait Calling Line Id OK and Echo off // 8: Wait for OK and COLP command for connecting line identification. // 9: Wait for OK. int ct=theGSM3ShieldV1ModemCore.getCommandCounter(); if(ct==1) { // Launch AT theGSM3ShieldV1ModemCore.setCommandCounter(2); theGSM3ShieldV1ModemCore.genericCommand_rq(_command_AT); } else if(ct==2) { // Wait for AT - OK. if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp)) { if(resp) { // OK received if(theGSM3ShieldV1ModemCore.getPhoneNumber() && (theGSM3ShieldV1ModemCore.getPhoneNumber()[0]!=0)) { theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+CPIN="), false); theGSM3ShieldV1ModemCore.setCommandCounter(3); theGSM3ShieldV1ModemCore.genericCommand_rqc(theGSM3ShieldV1ModemCore.getPhoneNumber()); } else { //DEBUG //Serial.println("AT+CGREG?"); theGSM3ShieldV1ModemCore.setCommandCounter(4); theGSM3ShieldV1ModemCore.takeMilliseconds(); theGSM3ShieldV1ModemCore.genericCommand_rq(_command_CGREG); } } else theGSM3ShieldV1ModemCore.closeCommand(3); } } else if(ct==3) { if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp)) { if(resp) { theGSM3ShieldV1ModemCore.setCommandCounter(4); theGSM3ShieldV1ModemCore.takeMilliseconds(); theGSM3ShieldV1ModemCore.delayInsideInterrupt(2000); theGSM3ShieldV1ModemCore.genericCommand_rq(_command_CGREG); } else theGSM3ShieldV1ModemCore.closeCommand(3); } } else if(ct==4) { char auxLocate1 [12]; char auxLocate2 [12]; prepareAuxLocate(PSTR("+CGREG: 0,1"), auxLocate1); prepareAuxLocate(PSTR("+CGREG: 0,5"), auxLocate2); if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp, auxLocate1, auxLocate2)) { if(resp) { theGSM3ShieldV1ModemCore.setCommandCounter(5); theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+IFC=1,1")); } else { // If not, launch command again if(theGSM3ShieldV1ModemCore.takeMilliseconds() > __TOUTMODEMCONFIGURATION__) { theGSM3ShieldV1ModemCore.closeCommand(3); } else { theGSM3ShieldV1ModemCore.delayInsideInterrupt(2000); theGSM3ShieldV1ModemCore.genericCommand_rq(_command_CGREG); } } } } else if(ct==5) { // 5: Wait IFC OK if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp)) { //Delay for SW flow control being active. theGSM3ShieldV1ModemCore.delayInsideInterrupt(2000); // 9: SMS Text Mode theGSM3ShieldV1ModemCore.setCommandCounter(6); theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+CMGF=1")); } } else if(ct==6) { // 6: Wait SMS text Mode OK if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp)) { //Calling line identification theGSM3ShieldV1ModemCore.setCommandCounter(7); theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+CLIP=1")); } } else if(ct==7) { // 7: Wait Calling Line Id OK if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp)) { // Echo off theGSM3ShieldV1ModemCore.setCommandCounter(8); theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("ATE0")); } } else if(ct==8) { // 8: Wait ATEO OK, send COLP // In Arduino Mega, attention, take away the COLP step // It looks as we can only have 8 steps if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp)) { theGSM3ShieldV1ModemCore.setCommandCounter(9); theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+COLP=1")); } } else if(ct==9) { // 9: Wait ATCOLP OK if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp)) { if (resp) { theGSM3ShieldV1ModemCore.setStatus(GSM_READY); theGSM3ShieldV1ModemCore.closeCommand(1); } else theGSM3ShieldV1ModemCore.closeCommand(3); } } }
void SIM808TCPProvider::TCPTransmissionCB(){ bool resp; char auxLocate[10]; switch (SIM808ModemCore_t.getCommandCounter()){ case 1: SIM808ModemCore_t.genericCommand_rq(PSTR("AT+CIPSEND"));// SIM808ModemCore_t.setCommandCounter(2);//send data break; case 2: prepareAuxLocate(PSTR(">"), auxLocate); if (SIM808ModemCore_t.genericParse_rsp(resp, auxLocate)){ if (resp){ if (this->tcpStatus_t == SETTING){ uint8_t dta[10] = { 0x00, 0x03, 0x45, 0x44, 0x50, 0x01, 0x40, 0x01, 0x00, 0x00 }; SIM808ModemCore_t.write(0x10);// SIM808ModemCore_t.write(this->tcpLen);//--------2 for (char i = 0; i < 10; ++i){//--------3 SIM808ModemCore_t.write(dta[i]); } SIM808ModemCore_t.write(strlen(this->idDevice));// SIM808ModemCore_t.genericCommand_rqc(this->idDevice, false);//--------5 135506 SIM808ModemCore_t.write(0x00); SIM808ModemCore_t.write(strlen(this->pKeys)); SIM808ModemCore_t.genericCommand_rqc(this->pKeys, false); }else{// uint8_t strLens = strlen(this->pdta)+strlen(this->idNames)+59; SIM808ModemCore_t.write(0x80);//--------1 SIM808ModemCore_t.write(strLens); if (strLens>127){ SIM808ModemCore_t.write(0x01); } SIM808ModemCore_t.write(0x00); SIM808ModemCore_t.write(0x01);//type SIM808ModemCore_t.write(0x00); SIM808ModemCore_t.write(strLens-4); SIM808ModemCore_t.genericCommand_rq(_streamA_, false);////"{\"datastreams\":[{\"id\":\"" SIM808ModemCore_t.genericCommand_rqc(this->idDevice, false);//id SIM808ModemCore_t.genericCommand_rq(_streamB_, false);//"\",\"datapoints\":[{\"value\":\"" SIM808ModemCore_t.genericCommand_rqc(this->pdta, false);//GPS data SIM808ModemCore_t.genericCommand_rq(_streamC_, false);// } SIM808ModemCore_t.write(0x1a); SIM808ModemCore_t.write(0x0d); SIM808ModemCore_t.write(0x0a); SIM808ModemCore_t.setCommandCounter(3); } } break; case 3: prepareAuxLocate(PSTR("SEND OK"), auxLocate); if (SIM808ModemCore_t.genericParse_rsp(resp, auxLocate)){ if (resp){ if (this->tcpStatus_t == SETTING){ memset(auxLocate, 10, 4 * sizeof(char)); auxLocate[0] = 0x20; auxLocate[1] = 0x02; if (SIM808ModemCore_t.genericParse_rsp(resp, auxLocate,4)) { if (resp) { SIM808ModemCore_t.closeCommand(1); }else{ SIM808ModemCore_t.setStatus(TCP_CONNECTED);// SIM808ModemCore_t.closeCommand(3); } } }else{ SIM808ModemCore_t.setStatus(TCP_CONNECTED); this->gpsRep = false; SIM808ModemCore_t.closeCommand(1);// } } } break; default: break; } }
void SIM808AccessProvider::ModemConfigurationContinue(){ bool resp; //ct--->>>commandCounter int ct = SIM808ModemCore_t.getCommandCounter(); flags_st = 0; if (ct == 1){ //Æô¶¯AT char i = 0; SIM808ModemCore_t.setCommandCounter(2); while (1){ SIM808ModemCore_t.genericCommand_rq(_command_AT);// i++; delay(1000); if (flags_t){ break; } if (i > 1){ SIM808ModemCore_t.closeCommand(3); break; } } }else if (ct == 2){ if (SIM808ModemCore_t.genericParse_rsp(resp))// { if (resp) { // OK received if (SIM808ModemCore_t.getPhoneNumber() && (SIM808ModemCore_t.getPhoneNumber()[0] != 0))// { SIM808ModemCore_t.genericCommand_rq(PSTR("AT+CPIN="),false); SIM808ModemCore_t.setCommandCounter(3); SIM808ModemCore_t.genericCommand_rqc(SIM808ModemCore_t.getPhoneNumber()); }else{//received "OK" SIM808ModemCore_t.setCommandCounter(11); SIM808ModemCore_t.takeMilliseconds(); SIM808ModemCore_t.genericCommand_rq(PSTR("AT+CIURC=1"));//¡°Call Ready¡± } }else { SIM808ModemCore_t.closeCommand(3); } } }else if (ct == 3){ if (SIM808ModemCore_t.genericParse_rsp(resp)){ if (resp){ SIM808ModemCore_t.setCommandCounter(4); SIM808ModemCore_t.takeMilliseconds(); SIM808ModemCore_t.delayInsideInterrupt(2000); SIM808ModemCore_t.genericCommand_rq(_command_CGREG); }else{ SIM808ModemCore_t.closeCommand(3); } } }else if (ct == 4){ char auxLocate1[12]; char auxLocate2[12]; prepareAuxLocate(PSTR("+CGREG: 0,0"), auxLocate1);// prepareAuxLocate(PSTR("+CGREG: 0,5"), auxLocate2);// if (SIM808ModemCore_t.genericParse_rsp(resp, auxLocate1, auxLocate2)){ if (resp){// SIM808ModemCore_t.setCommandCounter(5); SIM808ModemCore_t.genericCommand_rq(PSTR("AT+IFC=1,1"));// }else{ if (SIM808ModemCore_t.takeMilliseconds() > __TOUTMODEMCONFIGURATION__){// SIM808ModemCore_t.closeCommand(3); }else{ SIM808ModemCore_t.delayInsideInterrupt(2000); SIM808ModemCore_t.genericCommand_rq(PSTR("AT+IFC=1,1"));// } } } }else if (ct == 5){ // 5: Wait IFC OK if (SIM808ModemCore_t.genericParse_rsp(resp)){ //Delay for SW flow control being active. SIM808ModemCore_t.delayInsideInterrupt(2000); // 9: SMS Text Mode SIM808ModemCore_t.setCommandCounter(6); SIM808ModemCore_t.genericCommand_rq(PSTR("AT+CMGF=1")); } }else if (ct == 6){ // 6: Wait SMS text Mode OK if (SIM808ModemCore_t.genericParse_rsp(resp)){ //Calling line identification if (resp){ SIM808ModemCore_t.setCommandCounter(7); SIM808ModemCore_t.genericCommand_rq(PSTR("AT+CLIP=1")); }else{ SIM808ModemCore_t.delayInsideInterrupt(2000); SIM808ModemCore_t.genericCommand_rq(PSTR("AT+CMGF=1"));// } } }else if (ct == 7){ // 7: Wait Calling Line Id OK if (SIM808ModemCore_t.genericParse_rsp(resp)){ SIM808ModemCore_t.setCommandCounter(8); SIM808ModemCore_t.genericCommand_rq(PSTR("ATE0"));// } }else if (ct == 8){ if (SIM808ModemCore_t.genericParse_rsp(resp)){ SIM808ModemCore_t.setCommandCounter(9); SIM808ModemCore_t.genericCommand_rq(PSTR("AT+COLP=1")); } }else if (ct == 9){ if (SIM808ModemCore_t.genericParse_rsp(resp)){ SIM808ModemCore_t.setCommandCounter(10); SIM808ModemCore_t.genericCommand_rq(PSTR("AT+CSQ")); } }else if (ct == 10){ char auxLocate[12]; prepareAuxLocate(PSTR("+CSQ: 0,0"), auxLocate); if (SIM808ModemCore_t.genericParse_rsp(resp, auxLocate)){ if (resp){ SIM808ModemCore_t.delayInsideInterrupt(2000); SIM808ModemCore_t.setCommandCounter(10); SIM808ModemCore_t.genericCommand_rq(PSTR("AT+CSQ")); // }else{ flags_t = true; SIM808ModemCore_t.setCommandCounter(12); } } }else if (ct == 11){ if (SIM808ModemCore_t.genericParse_rsp(resp)){ SIM808ModemCore_t.setCommandCounter(4); SIM808ModemCore_t.genericCommand_rq(_command_CGREG); } } else if (ct == 12){ char auxLocate[12]; prepareAuxLocate(PSTR("Call Ready"), auxLocate); if (SIM808ModemCore_t.genericParse_rsp(resp, auxLocate)){ if (resp){ #if ANDYDEBUG Serial.println("-------->>>>>>>>>>CALL READY..."); Serial.println("-------->>>>>>>>Kernel Initialization is Complete..."); #endif SIM808ModemCore_t.setCommandCounter(13); //SIM808ModemCore_t.setStatus(SIM808_READY); //SIM808ModemCore_t.closeCommand(1); }else{ SIM808ModemCore_t.closeCommand(3); } } } else if (ct == 13){ char auxLocate[12]; prepareAuxLocate(PSTR("Call Ready"), auxLocate); if (SIM808ModemCore_t.genericParse_rsp(resp, auxLocate)){ if (resp){ #if ANDYDEBUG Serial.println("-------->>>>>>>>>>SMS READY..."); Serial.println("-------->>>>>>>>Kernel Initialization is Complete..."); #endif SIM808ModemCore_t.setStatus(SIM808_READY); SIM808ModemCore_t.closeCommand(1); } else{ SIM808ModemCore_t.closeCommand(3); } } } }