Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

typedef File32 File; causes conflicts with previous declarations inside the ESP8266WiFi libraries #21

Open
shyney7 opened this issue Dec 12, 2023 · 0 comments

Comments

@shyney7
Copy link

shyney7 commented Dec 12, 2023

Operating System

Windows 10

IDE version

PlatformIO Core, version 6.1.11

Board

D1 Mini Pro ESP8266

BSP version

framework-arduinoespressif8266 @ 3.20704.0 (2.7.4)

SPIFlash Library version

tool-esptool @ 1.413.0 (4.13) - tool-esptoolpy @ 1.30000.201119 (3.0.0)

Sketch

click here for the used sourcecode

main.cpp:

/*
WebSerialLite Demo AP
------
This example code works for both ESP8266 & ESP32 Microcontrollers
WebSerial is accessible at 192.168.4.1/webserial URL.

Author: HomeboyC
*/
#include <Arduino.h>
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#elif defined(ESP32)
#include <WiFi.h>
#include <AsyncTCP.h>
#endif
#include <ESPAsyncWebServer.h>
#include <WebSerialLite.h>
#include <SPI.h>
#include <TimeLib.h>
#include <RtcDS3231.h>
#include <SdFat.h>

struct __attribute__((__packed__)) nrfData {
float pm1;
float pm25;
float pm10;
float sumBins;
float temp;
float altitude;
float hum;
float xtra;
float co2;
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
double lat;
double lng;
double heading;
}data;

//SD Card
const uint8_t SD_CS_PIN = D8;

// Try max SPI clock for an SD. Reduce SPI_CLOCK if errors occur.
#define SPI_CLOCK SD_SCK_MHZ(50)

// Try to select the best SD card configuration.
#if HAS_SDIO_CLASS
#define SD_CONFIG SdioConfig(FIFO_SDIO)
#elif  ENABLE_DEDICATED_SPI
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SPI_CLOCK)
#else  // HAS_SDIO_CLASS
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, SHARED_SPI, SPI_CLOCK)
#endif  // HAS_SDIO_CLASS

SdFat32 sd;
File32 file;

unsigned long epochTime = 0;
unsigned long previousMillis = 0;
unsigned long printTimeTimer = 0;
float tzDiff = 1;

void printUTCTime() {
//unsigned long t = epochTime;
//char buff[32];
//sprintf(buff, "%02d.%02d.%02d %02d:%02d:%02d", day(t), month(t), year(t), hour(t), minute(t), second(t));
WebSerial.printf("%02d.%02d.%02d %02d:%02d:%02d\n", day(epochTime), month(epochTime), year(epochTime), hour(epochTime), minute(epochTime), second(epochTime));
}

void initData(nrfData &data) {
data.pm1 = 0;
data.pm25 = 0;
data.pm10 = 0;
data.sumBins = 0;
data.temp = 0;
data.altitude = 0;
data.hum = 0;
data.xtra = 0;
data.co2 = 0;
data.year = year(epochTime);
data.month = month(epochTime);
data.day = day(epochTime);
data.hour = hour(epochTime);
data.minute = minute(epochTime);
data.second = second(epochTime);
data.lat = 0;
data.lng = 0;
data.heading = 0;
}


AsyncWebServer server(80);

const char* ssid = "ESPWebSerial"; // Your WiFi AP SSID 
const char* password = "abc123456"; // Your WiFi Password

void setup() {
  Serial.begin(115200);
  WiFi.softAP(ssid, password);

  //Serial.print("AP IP address: ");
  //Serial.println(IP);
  // WebSerial is accessible at "<IP Address>/webserial" in browser
  WebSerial.begin(&server);
  /* Attach Message Callback */
  //WebSerial.onMessage(recvMsg);
  server.begin();

  RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
  epochTime = compiled.Epoch32Time(); /*+ 946684800*/ //+ (tzDiff * 3600);
  WebSerial.println(epochTime);

  // Setup SD card
  if (!sd.begin(SD_CONFIG)) {
    WebSerial.print("SD card mount failed\n");
    return;
  }

  // open csv file
  if (!file.open("GPS_filtered.csv", O_READ)) {
    WebSerial.print("Opening file failed!\n");
    return;
  }

  initData(data);

}

void loop() {

  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= 1000) {
    previousMillis = currentMillis;
    epochTime++;
    if (currentMillis - printTimeTimer >= 10000) {
      printTimeTimer = currentMillis;
      printUTCTime();
    }

    // read data from SD card
    char buf[128];
    if (file.fgets(buf, sizeof(buf)) <= 0) {
      file.rewind();
      file.fgets(buf, sizeof(buf));
    }
    sscanf(buf, "%lf,%lf,%f,%lf", &data.lat, &data.lng, &data.altitude, &data.heading);

    data.pm1 = random(0, 100);
    data.pm25 = random(0, 100);
    data.pm10 = random(0, 100);
    data.sumBins = random(0, 500);
    data.temp = random(0, 40);
    //data.altitude = random(0, 1000);
    data.hum = random(0, 95);
    data.xtra = random(0, 100);
    data.co2 = random(0, 2000);
    data.year = year(epochTime);
    data.month = month(epochTime);
    data.day = day(epochTime);
    data.hour = hour(epochTime);
    data.minute = minute(epochTime);
    data.second = second(epochTime);
    //data.lat = random(0, 100);
    //data.lng = random(0, 100);
    Serial.write('<');
    Serial.write((const char*)&data, sizeof(data));
    Serial.write('>');
  }

}

Gist Link to Code

What happened ?

typedef File32 File; inside the SdFat.h library seems to create conflicts with previous declarations inside the ESP8266WiFi libraries:
Compiler Errors:

In file included from src\main.cpp:22:0:
.pio\libdeps\d1_mini_pro\SdFat - Adafruit Fork\src/SdFat.h:458:16: error: 'typedef class File32 File' conflicts with a previous declaration
 typedef File32 File;
                ^
In file included from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/CertStoreBearSSL.h:26:0,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:30,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiClientSecure.h:41,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiServerSecure.h:20,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/ESP8266WiFi.h:41,
                 from src\main.cpp:11:
C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FS.h:52:7: note: previous declaration 'class fs::File'
 class File : public Stream
       ^
In file included from src\main.cpp:22:0:
.pio\libdeps\d1_mini_pro\SdFat - Adafruit Fork\src/SdFat.h:458:16: error: 'typedef class File32 File' conflicts with a previous declaration
 typedef File32 File;
                ^
In file included from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/CertStoreBearSSL.h:26:0,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:30,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiClientSecure.h:41,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiServerSecure.h:20,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/ESP8266WiFi.h:41,
                 from src\main.cpp:11:
C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FS.h:52:7: note: previous declaration 'class fs::File'
 class File : public Stream
       ^
In file included from src\main.cpp:22:0:
.pio\libdeps\d1_mini_pro\SdFat - Adafruit Fork\src/SdFat.h:458:16: error: 'typedef class File32 File' conflicts with a previous declaration
 typedef File32 File;
                ^
In file included from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/CertStoreBearSSL.h:26:0,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:30,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiClientSecure.h:41,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiServerSecure.h:20,
                 from C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/ESP8266WiFi.h:41,
                 from src\main.cpp:11:
C:\Users\olivei_m\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FS.h:52:7: note: previous declaration 'class fs::File'
 class File : public Stream
       ^
*** [.pio\build\d1_mini_pro\src\main.cpp.o] Error 1

My platformio ini

[env:d1_mini_pro]
platform = espressif8266
board = d1_mini_pro
framework = arduino
lib_deps = 
	asjdf/WebSerialLite@^2.2.0
	adafruit/SdFat - Adafruit Fork@^2.2.1
	paulstoffregen/Time@^1.6.1
	makuna/RTC@^2.4.2

How to reproduce ?

  1. Include SdFat library in a ESP8266 project.
  2. Use Wifi libraries.
  3. compile
  4. get errors

Debug Log

No response

Screenshots

No response

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant