/** * \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 }
bool ESP8266::unregisterUDP(uint8_t mux_id) { return sATCIPCLOSEMulitple(mux_id); }
/** * \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; }
bool ESP8266::releaseTCP(uint8_t mux_id) { return sATCIPCLOSEMulitple(mux_id); }