Closed 1975felix closed 4 years ago
Hi. You can solve the problem by removing this part:
class ByteString : public String {
public:
ByteString(void *data, size_t len) :
String() {
copy(data, len);
}
ByteString() :
String() {
}
String& copy(const void *data, unsigned int length) {
if (!reserve(length)) {
invalidate();
return (*this);
}
len = length;
memcpy(buffer, data, length);
buffer[length] = 0;
return (*this);
}
};
// Asynchronous TCP Client to retrieve data/time
struct AsyncHTTPClient {
AsyncClient *aClient = NULL;
bool initialized = false;
String protocol;
String base64Authorization;
String host;
int port;
String uri;
String request;
ByteString response;
int statusCode;
void(*onSuccess)();
void(*onFail)(String);
void initialize(String url) {
// check for : (http: or https:
int index = url.indexOf(':');
if (index < 0) {
initialized = false; // This is not a URLs
}
protocol = url.substring(0, index);
DEBUGLN(protocol);
url.remove(0, (index + 3)); // remove http:// or https://
index = url.indexOf('/');
String hostPart = url.substring(0, index);
DEBUGLN(hostPart);
url.remove(0, index); // remove hostPart part
// get Authorization
index = hostPart.indexOf('@');
if (index >= 0) {
// auth info
String auth = hostPart.substring(0, index);
hostPart.remove(0, index + 1); // remove auth part including @
base64Authorization = base64::encode(auth);
}
// get port
port = 80; //Default
index = hostPart.indexOf(':');
if (index >= 0) {
host = hostPart.substring(0, index); // hostname
host.remove(0, (index + 1)); // remove hostname + :
DEBUGLN(host);
port = host.toInt(); // get port
DEBUGLN(port);
}
else {
host = hostPart;
DEBUGLN(host);
}
uri = url;
if (protocol != "http") {
initialized = false;
}
DEBUGLN(initialized);
request = "GET " + uri + " HTTP/1.1\r\nHost: " + host + "\r\n\r\n";
DEBUGLN(request);
initialized = true;
}
int getStatusCode() {
return (statusCode);
}
String getBody() {
if (statusCode == 200) {
int bodyStart = response.indexOf("\r\n\r\n") + 4;
return (response.substring(bodyStart));
}
else {
return ("");
}
}
static void clientError(void *arg, AsyncClient *client, int error) {
DEBUGLN("Connect Error");
AsyncHTTPClient *self = (AsyncHTTPClient *)arg;
self->onFail("Connection error");
self->aClient = NULL;
delete client;
}
static void clientDisconnect(void *arg, AsyncClient *client) {
DEBUGLN("Disconnected");
AsyncHTTPClient *self = (AsyncHTTPClient *)arg;
self->aClient = NULL;
delete client;
}
static void clientData(void *arg, AsyncClient *client, void *data, size_t len) {
DEBUGLN("Got response");
AsyncHTTPClient *self = (AsyncHTTPClient *)arg;
self->response = ByteString(data, len);
String status = self->response.substring(9, 12);
self->statusCode = atoi(status.c_str());
DEBUGLN(status.c_str());
if (self->statusCode == 200) {
self->onSuccess();
}
else {
self->onFail("Failed with code " + status);
}
}
static void clientConnect(void *arg, AsyncClient *client) {
DEBUGLN("Connected");
AsyncHTTPClient *self = (AsyncHTTPClient *)arg;
self->response.copy("", 0);
self->statusCode = -1;
// Clear oneError handler
self->aClient->onError(NULL, NULL);
// Set disconnect handler
client->onDisconnect(clientDisconnect, self);
client->onData(clientData, self);
//send the request
client->write(self->request.c_str());
}
void makeRequest(void(*success)(), void(*fail)(String msg)) {
onFail = fail;
if (!initialized) {
fail("Not initialized");
return;
}
if (aClient) { //client already exists
fail("Call taking forever");
return;
}
aClient = new AsyncClient();
if (!aClient) { //could not allocate client
fail("Out of memory");
return;
}
onSuccess = success;
aClient->onError(clientError, this);
aClient->onConnect(clientConnect, this);
if (!aClient->connect(host.c_str(), port)) {
DEBUGLN("Connect Fail");
fail("Connection failed");
AsyncClient *client = aClient;
aClient = NULL;
delete client;
}
}
};
AsyncHTTPClient httpClient;
It's no longer needed.
Removed obsolete code. It should compile fine now.
Arduino:1.8.9 (Windows 10), Scheda:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
ATTENZIONE: la libreria Timezone dichiara di funzionare sulle architetture (avr) e potrebbe non essere compatibile con la tua scheda che utilizza l'architettura (esp8266) In file included from C:\Users*****\Documents\Arduino\Moodlite-master\Arduino\Moodlite\Moodlite.ino:31:0:
C:\Users\Andrea****\Arduino\libraries\FastLED-master/FastLED.h:14:21: note: #pragma message: FastLED version 3.002.006
pragma message "FastLED version 3.002.006"
In file included from C:\Users***\Documents\Arduino\libraries\FastLED-master/led_sysdefs.h:27:0,
C:\Users\Andrea******\Arduino\libraries\FastLED-master/platforms/esp/8266/led_sysdefs_esp8266.h:15:17: error: conflicting declaration 'typedef uint8_t boolean'
typedef uint8_t boolean;
In file included from sketch\Moodlite.ino.cpp:1:0:
C:\Users******\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\cores\esp8266/Arduino.h:191:14: error: 'boolean' has a previous declaration as 'typedef bool boolean'
typedef bool boolean;
In file included from C:\Users****\Arduino\libraries\FastLED-master/FastLED.h:65:0,
C:\Users***\Arduino\libraries\FastLED-master/fastspi.h:110:23: note: #pragma message: No hardware SPI pins defined. All SPI access will default to bitbanged output
pragma message "No hardware SPI pins defined. All SPI access will default to bitbanged output"
C:\Users********\Arduino\Moodlite-master\Arduino\Moodlite\Moodlite.ino: In member function 'String& ByteString::copy(const void*, unsigned int)':
Moodlite:419:7: error: invalid use of member function (did you forget the '()' ?)
len = length;
Moodlite:420:30: error: cannot convert 'String::buffer' from type 'const char (String::)()const' to type 'void'
memcpy(buffer, data, length);
Moodlite:421:16: error: invalid types '[unsigned int]' for array subscript
buffer[length] = 0;
exit status 1 invalid use of member function (did you forget the '()' ?)