Exemple #1
0
/**
 * \brief envia pacote de dados
 * \param mux_id  >  0   envia o AT+HTTPDATA e os dados
 * \param mux_id ==  0  somente dados
 * \param mux_id == -1  aguarda retorno de dados
 * \return 0=erro, 1=OK
 */
boolean sATCIPSENDMultiple(int mux_id, uint8_t tipo_buffer, uint8_t *buffer, boolean flag_flush)
{
	int len;
	
	if (mux_id==-1) {
			return gprs.sendCommand(0);
	}

	//debugvar(freeMemory());
	if (tipo_buffer == POINTER_CHAR_RAM)
	len=strlen((char*)buffer);
	else
	len=strlen_P((char*)buffer);

	if (!len) return true;
	
	///	rx_empty();
	//if (bitRead(ccStatus,CC_DEBUG))	debugvar(freeMemory());
	#if DEBUG >= 1 || HAS_BLUETOOTH >= 1
	debugvar(len);
		uint8_t *b=buffer;
		for (uint16_t i = 0; i < len; i++) {
			if (tipo_buffer==POINTER_CHAR_PROGMEM) {
				SSdebug.write(pgm_read_byte(b++));
				} else {
				SSdebug.write(*b++);
			}
		} // for
	SSdebug.write('\n');

	#endif
	
	#ifdef GSM_CSTT
	//	esp8266Flush();
	SSwifi.print("AT+CIPSEND=");
	#if USE_MUX == 1
	SSwifi.print(mux_id);
	SSwifi.print(",");
	#endif
	SSwifi.print(len);
	SSwifi.print("\r\n");
	SSwifi.flush();
	if (recvFind(">",6000)) {
		PGM_PRINT("+");
		//esp8266Flush();
		#if 0
		if (tipo_buffer==POINTER_CHAR_PROGMEM) {
			#if 0
			char *u;
			if (len < SERIAL_TX_BUFFER_SIZE-1 && (u=(char*)malloc(SERIAL_TX_BUFFER_SIZE))) {
				strcpy_P(u,(char*)buffer);
				SSwifi.print(u);
				SSwifi.flush();
				free(u);
			} else
			#endif
			for (uint16_t i = 0; i < len; i++) {
				// SSdebug.write(pgm_read_byte(buffer));
				SSwifi.write(pgm_read_byte(buffer++));
			}
			}else {
			SSwifi.print((char*)buffer);
		}
		#else
		for (uint16_t i = 0; i < len; i++) {
			if (tipo_buffer==POINTER_CHAR_PROGMEM) {
				//			SSdebug.write(pgm_read_byte(buffer));
				SSwifi.write(pgm_read_byte(buffer++));
				}else {
				//				SSdebug.write(*buffer);
				SSwifi.write(*buffer++);
			}
		}
		#endif
		//		ret=recvFind("SEND OK", 5000);
		PGM_PRINT("* ");
		SSwifi.write(0x1a);
		recvString(str_ret, "SEND OK", "busy","link is", 10000,flag_flush);
		#if DEBUG > 0
		//if (bitRead(ccStatus,CC_DEBUG))
		debugln(str_ret);
		#endif
		if (!strncmp(str_ret,"SEND OK",7)) {
			//			PGM_PRINTLN("SOK");
			//delay(100);
			//SSwifi.flush();
			//eATCIPSTATUS();

			return true;
		}
		if (!strncmp(str_ret,"link",4)) {
			sATCIPCLOSEMulitple(mux_id);
		}
	}
	return false;
	#else
	if (mux_id>0) {
		sprintf_P(gprs.buffer,PSTR("AT+HTTPDATA=%d,5000"),mux_id);
		gprs.sendCommand(gprs.buffer,5000,"DOWNLOAD");
	}
	for (uint16_t i = 0; i < len; i++) {
		if (tipo_buffer==POINTER_CHAR_PROGMEM) {
			SSwifi.write(pgm_read_byte(buffer++));
		} else {
			SSwifi.write(*buffer++);
		}
	}
	delay(150);
	return 1; 
	#endif
}
Exemple #2
0
bool ESP8266::unregisterUDP(uint8_t mux_id)
{
    return sATCIPCLOSEMulitple(mux_id);
}
Exemple #3
0
/**
 * \brief GSM inicia comunicação para enviar dados ao servidor
 * \param mux_id
 * \param addr endereco do servidor
 * \param port porta de conexao
 * \param http_proxy servidor proxy
 * \param http_port porta do servidor proxy, se ==0 sem proxy
 * \return 1=ok, 0=erro
 */
boolean sATCIPSTARTMultiple(uint8_t mux_id)
{
	char *data=reqHTTP;
	uint16_t http_port=gParam.web.http_port;
	static uint8_t t_reboot=MAX_T_REBOOT;
	boolean ret=true;
	
	//getStatus();
	//delay(250);
	//PGM_PRINTLN(">ST");
	esp8266Flush();
#ifdef GSM_CSTT
	#if 1
	if (http_port)
		sprintf_P(data,str_CIPSTART,mux_id,type,gParam.web.server_addr,http_port);
	else
		sprintf_P(data,str_CIPSTART,mux_id,type,gParam.web.server_addr,gParam.web.server_port);
	debugvarln(data);
	SSwifi.println(data);
	#else
	SSwifi.print("AT+CIPSTART=");
	#if USE_MUX == 1
	SSwifi.print(mux_id);
	SSwifi.print(",\"");
	#endif
	SSwifi.print(type);
	SSwifi.print("\",\"");
	SSwifi.print(addr);
	// acerto das " (aspas)
	SSwifi.print("\",");
	SSwifi.print(port);
	SSwifi.print("\r\n");
	#endif

	SSwifi.flush();
	delay(200);
	#if DEBUG > 0
	bitSet(ccStatus,CC_DEBUG);
	#endif
	recvString(data,"OK", "ALR", NULL,10000,true); // ALREADY ou Linked
	#if DEBUG > 0
	debugvarln(data);
	while (SSwifi.available() > 0)
	{
		char c=SSwifi.read();
		SSdebug.write(c);
	}
	#endif

	gprs.sendCommand("AT+CIPSTATUS");
	if (!strncmp(data,"OK",2) || !strncmp(data,"ALR",3)) {
		bitSet(ccStatus,CC_WIFI_INTERNET);
		led2_status=LED_APAGA;
		//	t_reboot=MAX_T_REBOOT;
		return true;
	}
	//	if (!strncmp(data,"ready",5)   || !strncmp(data,"Link typ",8)) {
	//	bitSet(ccStatus,CC_WIFI_ERROR);
	bitClear(ccStatus,CC_WIFI_INTERNET);
	led2_status=LED_PISCA_LONGO; // sem conexao ao roteador TAG_2
	//if (!t_reboot--) bitSet(gParam.status,P_STATUS_RESET);
	//	}
	//debugvarln(t_reboot);
	//ESP8266reset(true);
	sATCIPCLOSEMulitple(5);
	return false;
#else
  if (http_port) {
		sprintf_P(gprs.buffer,PSTR("AT+HTTPPARA=\"PROIP\",\"%s\""),gParam.web.http_proxy);
		ret &=gprs.sendCommand(gprs.buffer);
		if (ret) {
			sprintf_P(gprs.buffer,PSTR("AT+HTTPPARA=\"PROPORT\",\"%d\""),http_port);
			ret &=gprs.sendCommand(gprs.buffer);
		}
	  
  }
  strcpy_P(gprs.buffer,PSTR("AT+HTTPPARA=\"CONTENT\",\"application/x-www-form-urlencoded\""));
  ret&=gprs.sendCommand(gprs.buffer);
  sprintf_P(gprs.buffer,PSTR("AT+HTTPPARA=\"URL\",\"http://%s/uts0\""),gParam.web.server_addr);
  if (ret) ret &=gprs.sendCommand(gprs.buffer);
 if (ret) {
		  t_reboot=MAX_T_REBOOT;
		  led2_status=LED_APAGA;
	  } else
	  if (!--t_reboot) {
		  led2_status=LED_PISCA_CURTO;
		  setup_gsm(3);
		  t_reboot=MAX_T_REBOOT;
	  }

  
#endif
/*#if HAS_SENSOR_SECO == 1
	if (seco_int) {
		parse_seco(false);
	}
#endif*/
  return ret;
}
Exemple #4
0
bool ESP8266::releaseTCP(uint8_t mux_id)
{
    return sATCIPCLOSEMulitple(mux_id);
}