spigotx / Moodlite

Moodlite
GNU General Public License v3.0
109 stars 17 forks source link

Lots of Error compiling #16

Closed 1975felix closed 4 years ago

1975felix commented 5 years ago

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,

             from C:\Users\******\Documents\Arduino\libraries\FastLED-master/FastLED.h:41,

             from C:\Users\*****\Documents\Arduino\Moodlite-master\Arduino\Moodlite\Moodlite.ino:31:

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,

             from C:\Users\*****\******\Arduino\Moodlite-master\Arduino\Moodlite\Moodlite.ino:31:

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 '()' ?)

spigotx commented 5 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.

spigotx commented 4 years ago

Removed obsolete code. It should compile fine now.