Слияние кода завершено, страница обновится автоматически
#ifndef BLINKER_HTTP_SIM7020_H
#define BLINKER_HTTP_SIM7020_H
#if ARDUINO >= 100
#include <Arduino.h>
#else
#include <WProgram.h>
#endif
// #include "Adapters/BlinkerSerialMQTT.h"
#include "../Blinker/BlinkerATMaster.h"
#include "../Blinker/BlinkerConfig.h"
#include "../Blinker/BlinkerDebug.h"
#include "../Blinker/BlinkerStream.h"
#include "../Blinker/BlinkerUtility.h"
// #if defined(ESP32)
// #include <HardwareSerial.h>
// HardwareSerial *HSerial_HTTP;
// #else
// #include <SoftwareSerial.h>
// SoftwareSerial *SSerial_HTTP;
// #endif
#define BLINKER_HTTP_SIM7020_DEFAULT_TIMEOUT 5000UL
#define BLINKER_HTTP_SIM7020_DATA_BUFFER_SIZE 1024
enum sim7020_http_status_t
{
sim7020_http_creat_req,
sim7020_http_creat_resp,
sim7020_http_creat_success,
sim7020_http_con_req,
sim7020_http_con_success,
sim7020_http_send_req,
sim7020_http_send_success,
sim7020_http_nmih_wait,
sim7020_http_nmih_success,
sim7020_http_nmic_wait,
sim7020_http_nmic_success,
sim7020_http_discon_req,
sim7020_http_discon_success,
sim7020_http_destroy_req,
sim7020_http_destroy_success,
};
class BlinkerHTTPSIM7020
{
public :
BlinkerHTTPSIM7020(Stream& s, bool isHardware, blinker_callback_t func)
{
stream = &s; isHWS = isHardware; listenFunc = func;
// streamData = (char*)malloc(BLINKER_HTTP_SIM7020_DATA_BUFFER_SIZE*sizeof(char));
}
~BlinkerHTTPSIM7020() { flush(); }
void streamPrint(const String & s)
{
// stream->flush();
BLINKER_LOG_ALL(BLINKER_F("HTTP streamPrint: "), s);
stream->println(s);
}
void _streamPrint(const String & s)
{
// stream->flush();
BLINKER_LOG_ALL(BLINKER_F("HTTP streamPrint: "), s);
stream->print(s);
}
void _streamPrint()
{
// stream->flush();
BLINKER_LOG_ALL(BLINKER_F("HTTP streamPrint: "));
stream->println();
}
bool begin(String host, String uri) { _host = host; _uri = uri; }
void setTimeout(uint16_t timeout) { _httpTimeout = timeout; }
void reboot()
{
// streamPrint(BLINKER_CMD_CRESET_RESQ);
// ::delay(500);
// streamPrint(BLINKER_CMD_AT);
// streamPrint("ATE0");
}
bool GET()
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPCREATE_REQ) + \
"=\"" + _host + "/\"");
uint8_t h_id = 0;
uint32_t http_time = millis();
sim7020_http_status_t http_status = sim7020_http_creat_req;
while(millis() - http_time < _httpTimeout * 4)
{
if (available())
{
_masterAT = new BlinkerMasterAT();
_masterAT->update(STRING_format(streamData));
if (_masterAT->getState() != AT_M_NONE &&
_masterAT->reqName() == BLINKER_CMD_CHTTPCREATE)
{
h_id = _masterAT->getParam(0).toInt();
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_creat_resp, h_id: "), h_id);
http_status = sim7020_http_creat_resp;
free(_masterAT);
break;
}
free(_masterAT);
}
}
if (http_status != sim7020_http_creat_resp)
{
for (uint8_t id_num = 0; id_num < 5; id_num++)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(id_num));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(id_num));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
}
reboot();
return false;
}
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_creat_success check"));
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_creat_success"));
http_status = sim7020_http_creat_success;
break;
}
}
}
if (http_status != sim7020_http_creat_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
streamPrint(STRING_format(BLINEKR_CMD_CHTTPCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
http_status = sim7020_http_con_req;
while(millis() - http_time < _httpTimeout * 4)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_con_success"));
http_status = sim7020_http_con_success;
break;
}
}
}
if (http_status != sim7020_http_con_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPSEND_REQ) + \
"=" + STRING_format(h_id) + ",0,\"" + _uri + "\"");
http_time = millis();
http_status = sim7020_http_send_req;
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_send_success"));
http_status = sim7020_http_send_success;
break;
}
}
}
if (http_status != sim7020_http_send_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
http_time = millis();
http_status = sim7020_http_nmih_wait;
while(millis() - http_time < _httpTimeout * 4)
{
if (available())
{
_masterAT = new BlinkerMasterAT();
_masterAT->update(STRING_format(streamData));
if (_masterAT->getState() != AT_M_NONE &&
_masterAT->reqName() == BLINKER_CMD_CHTTPNMIH)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_nmih_success"));
http_status = sim7020_http_nmih_success;
free(_masterAT);
break;
}
free(_masterAT);
}
}
if (http_status != sim7020_http_nmih_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
http_time = millis();
http_status = sim7020_http_nmic_wait;
while(millis() - http_time < _httpTimeout * 4)
{
if (available())
{
if (strstr(streamData, BLINKER_CMD_CHTTPNMIC))
{
_masterAT = new BlinkerMasterAT();
_masterAT->update(STRING_format(streamData));
if (_masterAT->getState() != AT_M_NONE &&
_masterAT->reqName() == BLINKER_CMD_CHTTPNMIC)
{
// streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
// "=" + STRING_format(h_id));
String http_data = STRING_format(streamData);
// delay(100);
time_t now_time = millis();
while (millis() - now_time < 5000)
{
if (stream->available())
{
http_data += stream->readStringUntil('\n').c_str();
}
// delay(1000);
}
// _masterAT->update(http_data);
BLINKER_LOG_ALL(BLINKER_F("http_data: "), http_data);
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_nmic_success"));
http_status = sim7020_http_nmic_success;
if (strlen(strrchr(http_data.c_str(), ',')) < 1024)
{
if (isFreshPayload) free(payload);
isFreshPayload = true;
char data_buff[1024] = { '\0' };
memcpy(data_buff,strrchr(http_data.c_str(), ',')+1, strlen(strrchr(http_data.c_str(), ',')));
payload = (char*)malloc((strlen(data_buff)/2 + 1)*sizeof(char));
memset(payload, '\0', (strlen(data_buff)/2 + 1));
// memcpy(payload,strrchr(streamData, ',')+1, strlen(strrchr(streamData, ',')));
for(uint16_t num = 0; num < strlen(data_buff)/2; num++)
{
payload[num] = (char)(dcode_data(data_buff[num*2])<< 4 | dcode_data(data_buff[num*2+1]));
}
BLINKER_LOG_ALL(BLINKER_F("data_buff: "), data_buff);
BLINKER_LOG_ALL(BLINKER_F("data_buff num: "), strlen(data_buff)/2);
BLINKER_LOG_ALL(BLINKER_F("payload: "), payload);
free(_masterAT);
break;
}
else
{
free(_masterAT);
}
}
free(_masterAT);
}
}
}
if (http_status != sim7020_http_nmic_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
http_status = sim7020_http_discon_req;
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_discon_success"));
http_status = sim7020_http_discon_success;
break;
}
}
}
if (http_status != sim7020_http_discon_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
http_status = sim7020_http_destroy_req;
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_destroy_success"));
http_status = sim7020_http_destroy_success;
return true;
}
}
}
if (http_status != sim7020_http_discon_success)
{
reboot();
return false;
}
}
bool POST(String _msg, String _type, String _application)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPCREATE_REQ) + \
"=\"" + _host + "/\"");
uint8_t h_id = 0;
uint32_t http_time = millis();
sim7020_http_status_t http_status = sim7020_http_creat_req;
while(millis() - http_time < _httpTimeout * 4)
{
if (available())
{
_masterAT = new BlinkerMasterAT();
_masterAT->update(STRING_format(streamData));
if (_masterAT->getState() != AT_M_NONE &&
_masterAT->reqName() == BLINKER_CMD_CHTTPCREATE)
{
h_id = _masterAT->getParam(0).toInt();
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_creat_resp, h_id: "), h_id);
http_status = sim7020_http_creat_resp;
free(_masterAT);
break;
}
free(_masterAT);
}
}
if (http_status != sim7020_http_creat_resp)
{
for (uint8_t id_num = 0; id_num < 5; id_num++)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(id_num));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(id_num));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
}
reboot();
return false;
}
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_creat_success"));
http_status = sim7020_http_creat_success;
break;
}
}
}
if (http_status != sim7020_http_creat_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
streamPrint(STRING_format(BLINEKR_CMD_CHTTPCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
http_status = sim7020_http_con_req;
while(millis() - http_time < _httpTimeout * 20)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_con_success"));
http_status = sim7020_http_con_success;
break;
}
}
}
if (http_status != sim7020_http_con_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
_streamPrint(STRING_format(BLINKER_CMD_CHTTPSEND_REQ));// +
_streamPrint("=" + STRING_format(h_id) + ",1,\"" + _uri);// +
_streamPrint("\",4163636570743a202a2f2a0d0a436f6e6");// +
_streamPrint("e656374696f6e3a204b6565702d416c6976650d0a557365722d41");// +
_streamPrint("67656e743a2053494d434f4d5f4d4f44554c450d0a,\"");// +
_streamPrint("application/json\",");// +
_streamPrint(encode(_msg));
_streamPrint();
http_time = millis();
http_status = sim7020_http_send_req;
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_send_success"));
http_status = sim7020_http_send_success;
break;
}
}
}
if (http_status != sim7020_http_send_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
http_time = millis();
http_status = sim7020_http_nmih_wait;
while(millis() - http_time < _httpTimeout * 4)
{
if (available())
{
_masterAT = new BlinkerMasterAT();
_masterAT->update(STRING_format(streamData));
if (_masterAT->getState() != AT_M_NONE &&
_masterAT->reqName() == BLINKER_CMD_CHTTPNMIH)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_nmih_success"));
http_status = sim7020_http_nmih_success;
free(_masterAT);
break;
}
free(_masterAT);
}
}
if (http_status != sim7020_http_nmih_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
http_time = millis();
http_status = sim7020_http_nmic_wait;
while(millis() - http_time < _httpTimeout * 4)
{
if (available())
{
_masterAT = new BlinkerMasterAT();
_masterAT->update(STRING_format(streamData));
if (_masterAT->getState() != AT_M_NONE &&
_masterAT->reqName() == BLINKER_CMD_CHTTPNMIC)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
String http_data = STRING_format(streamData);
delay(1000);
while (available())
{
http_data += STRING_format(streamData);
delay(1000);
}
_masterAT->update(http_data);
BLINKER_LOG_ALL(BLINKER_F("http_data: "), http_data);
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_nmic_success"));
http_status = sim7020_http_nmic_success;
if (strlen(strrchr(streamData, ',')) < 1024)
{
if (isFreshPayload) free(payload);
isFreshPayload = true;
char data_buff[1024] = { '\0' };
memcpy(data_buff,strrchr(streamData, ',')+1, strlen(strrchr(streamData, ',')));
payload = (char*)malloc((strlen(data_buff)/2 + 1)*sizeof(char));
memset(payload, '\0', (strlen(data_buff)/2 + 1));
// memcpy(payload,strrchr(streamData, ',')+1, strlen(strrchr(streamData, ',')));
for(uint16_t num = 0; num < strlen(data_buff)/2; num++)
{
payload[num] = (char)(dcode_data(data_buff[num*2])<< 4 | dcode_data(data_buff[num*2+1]));
}
BLINKER_LOG_ALL(payload);
}
free(_masterAT);
break;
}
free(_masterAT);
}
}
if (http_status != sim7020_http_nmic_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
http_status = sim7020_http_discon_req;
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_discon_success"));
http_status = sim7020_http_discon_success;
break;
}
}
}
if (http_status != sim7020_http_discon_success)
{
streamPrint(STRING_format(BLINKER_CMD_CHTTPDISCON_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
break;
}
}
}
reboot();
return false;
}
// streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) + +
// "=" + STRING_format(h_id));
// http_time = millis();
// http_status = sim7020_http_destroy_req;
// while(millis() - http_time < _httpTimeout * 2)
// {
// if (available())
// {
// if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
// {
// // BLINKER_LOG_ALL(BLINKER_F("sim7020_http_destroy_success"));
// // http_status = sim7020_http_destroy_success;
// // return true;
// break;
// }
// }
// }
// if (http_status != sim7020_http_discon_success) return false;
streamPrint(STRING_format(BLINKER_CMD_CHTTPDESTROY_REQ) +
"=" + STRING_format(h_id));
http_time = millis();
http_status = sim7020_http_destroy_req;
while(millis() - http_time < _httpTimeout * 2)
{
if (available())
{
if (strncmp(streamData, BLINKER_CMD_OK, 2) == 0)
{
BLINKER_LOG_ALL(BLINKER_F("sim7020_http_destroy_success"));
http_status = sim7020_http_destroy_success;
return true;
}
}
}
if (http_status != sim7020_http_discon_success)
{
reboot();
return false;
}
}
String getString()
{
if (isFreshPayload) return payload;//TBD
return "";
}
void flush()
{
if (isFreshPayload) free(payload);
if (isFresh) free(streamData);
BLINKER_LOG_ALL(BLINKER_F("flush sim7020 http"));
}
protected :
class BlinkerMasterAT * _masterAT;
Stream* stream;
// String streamData;
// char streamData[1024];
char* streamData;
// char streamBuffer[2048] = { '\0' };
char* payload;
bool isFreshPayload = false;
bool isFresh = false;
bool isHWS = false;
String _host;
String _uri;
blinker_callback_t listenFunc = NULL;
uint16_t _httpTimeout = BLINKER_HTTP_SIM7020_DEFAULT_TIMEOUT;
char c_hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
int8_t dcode_data(char d_test)
{
for (uint8_t num = 0; num < 16; num++)
{
if (d_test == c_hex[num]) return num;
}
return -1;
}
char ecode_data(uint8_t d_test)
{
return c_hex[d_test];
}
String encode(String data)
{
// char _d[2048] = {'\0'};
String _d = "";
BLINKER_LOG_FreeHeap_ALL();
BLINKER_LOG_ALL("encode data: ", data);
BLINKER_LOG_ALL("encode len: ", data.length());
for(uint16_t num = 0; num < data.length(); num++)
{
_d += (ecode_data((uint8_t)data.c_str()[num] >> 4));
_d += (ecode_data((uint8_t)data.c_str()[num] & 0x0F));
}
BLINKER_LOG_ALL("encode data: ", _d);
return _d;
}
// String encode(char data[])
// {
// // char _d[2048] = {'\0'};
// String _d = "";
// BLINKER_LOG_FreeHeap_ALL();
// BLINKER_LOG_ALL("encode data: ", data);
// BLINKER_LOG_ALL("encode len: ", strlen(data));
// for(uint16_t num = 0; num < strlen(data); num++)
// {
// _d += (ecode_data(data[num] >> 4));
// _d += (ecode_data(data[num] & 0x0F));
// }
// BLINKER_LOG_ALL("encode data: ", _d);
// return _d;
// }
// for(uint16_t num = 0; num < strlen(test); num++)
// {
// Serial.print(ecode_data(test[num] >> 4));
// Serial.print(ecode_data(test[num] & 0x0F));
// }
// Serial.println();
int timedRead()
{
int c;
uint32_t _startMillis = millis();
do {
c = stream->read();
if (c >= 0) return c;
} while(millis() - _startMillis < 1000);
return -1;
}
bool available(const char *str)
{
uint32_t http_time = millis();
char _data[1024];// = { '\0' };
memset(_data, '\0', 1024);
BLINKER_LOG_ALL(BLINKER_F("available str: "), str);
while(millis() - http_time < _httpTimeout * 4)
{
if (stream->available())
{
// if (isFresh) free(streamData);
// streamData = (char*)malloc(1*sizeof(char));
// isFresh = true;
// if (strspn(streamData, str)) return true;
// // BLINKER_LOG_ALL(BLINKER_F("handleSerial rs: "), stream->readStringUntil('\n'));
strcpy(_data, stream->readStringUntil('\n').c_str());
BLINKER_LOG_ALL(BLINKER_F("handleSerial rs available(const char *str): "), _data);
if (strstr(_data, str))
{
_data[strlen(_data) - 1] = '\0';
if (isFresh) free(streamData);
streamData = (char*)malloc((strlen(_data) + 1)*sizeof(char));
strcpy(streamData, _data);
isFresh = true;
return true;
}
BLINKER_LOG_ALL(BLINKER_F("strstr(_data, str): "), strstr(_data, str));
memset(_data, '\0', 1024);
}
yield();
// delay(100);
}
return false;
}
bool available()
{
yield();
if (!isHWS)
{
// #if defined(__AVR__) || defined(ESP8266)
// if (!SSerial_HTTP->isListening())
// {
// SSerial_HTTP->listen();
// ::delay(100);
// }
// #endif
if (listenFunc) listenFunc();
}
// char _data[BLINKER_HTTP_SIM7020_DATA_BUFFER_SIZE];// = { '\0' };
// memset(_data, '\0', BLINKER_HTTP_SIM7020_DATA_BUFFER_SIZE);
// if (!isFresh) streamData = (char*)malloc(BLINKER_HTTP_SIM7020_DATA_BUFFER_SIZE*sizeof(char));
if (stream->available())
{
// strcpy(_data, stream->readStringUntil('\n').c_str());
String _data = stream->readStringUntil('\n');
// if ( _data[_data.length() - 1] == '\n')
// _data[_data.length() - 1] = '\0';
BLINKER_LOG_ALL(BLINKER_F("handleSerial rs: "), _data);
if (isFresh)
{
free(streamData);
isFresh = false;
}
if (_data.length() <= 1) return false;
streamData = (char*)malloc((_data.length() + 1)*sizeof(char));
strcpy(streamData, _data.c_str());
if (_data.length() > 0) streamData[_data.length()] = '\0';
isFresh = true;
return true;
}
else
{
return false;
}
}
};
#endif
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )