Пример #1
0
//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;
}
Пример #3
0
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;
}
Пример #6
0
//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;
}
Пример #7
0
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;	
	}
}
Пример #9
0
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;
}
Пример #10
0
//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);
		}
 	}
}
Пример #13
0
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;
	}
}
Пример #14
0
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);
			}
		}
	}
}