Tasmota/lib/libesp32/ESP-Mail-Client/src/extras/SDHelper.h
s-hadinger c2f8821b2f
Sendmail upgraded to ESP-Mail-Client v3.4.9 from v1.2.0, using BearSSL instead of MbedTLS (#19460)
* `Sendmail` upgraded to ESP-Mail-Client v3.4.9 from v1.2.0, using BearSSL instead of MbedTLS

* Fix compilation on ESP8266

* Fix compilation

* fix compilation
2023-09-04 23:00:37 +02:00

164 lines
3.9 KiB
C

#pragma once
#ifndef SD_HELPER_H_
#define SD_HELPER_H_
#include <Arduino.h>
#include <ESP_Mail_Client.h>
// If SD Card used for storage, assign SD card type and FS used in src/ESP_Mail_FS.h and
// change the config for that card interfaces in this file (src/extras/SDHelper.h)
#if defined(MBFS_SD_FS) && defined(MBFS_CARD_TYPE_SD)
#if defined(ESP32)
#define SPI_CS_PIN 13
#define SPI_SCK_PIN 14
#define SPI_MISO_PIN 2
#define SPI_MOSI_PIN 15
#define SPI_CLOCK_IN_MHz 16
// #define SPI_CS_PIN 5
// #define SPI_SCK_PIN 18
// #define SPI_MISO_PIN 19
// #define SPI_MOSI_PIN 23
// #define SPI_CLOCK_IN_MHz 4 // may work on lower clock rate
#elif defined(ESP8266)
#define SPI_CS_PIN 15
#elif defined(MB_ARDUINO_PICO)
// Use SPI 1's SS (GPIO 13) port as CS for SPI
#define SPI_CS_PIN PIN_SPI1_SS
#elif defined(MB_ARDUINO_ARCH_SAMD) || defined(MB_ARDUINO_NANO_RP2040_CONNECT) || defined(MB_ARDUINO_TEENSY)
#define SPI_CS_PIN 4
#if defined(MBFS_SDFAT_ENABLED)
#define SPI_SCK_PIN -1
#define SPI_MISO_PIN -1
#define SPI_MOSI_PIN -1
#define SPI_CLOCK_IN_MHz 4 // works on lower clock rate
#endif
#endif
// if SdFat library installed and ESP_Mail_FS.h was set to use it (for ESP32 only)
#if defined(MBFS_ESP32_SDFAT_ENABLED) || defined(MBFS_SDFAT_ENABLED)
// https://github.com/greiman/SdFat
SdSpiConfig sdFatSPIConfig(SPI_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(SPI_CLOCK_IN_MHz));
#elif defined(ESP32) // if ESP32 and no SdFat library installed
SPIClass spi;
#elif defined(ESP8266)
SDFSConfig sdFSConfig(SPI_CS_PIN, SPI_HALF_SPEED);
#elif defined(MB_ARDUINO_PICO)
/** Use Pico SPI 1 for SPI
* MISO GPIO 12
* MOSI GPIO 15
* SCK GPIO 14
* SS GPIO 13
*/
SDFSConfig sdFSConfig(SPI_CS_PIN, SPI_HALF_SPEED, SPI1);
#endif
#endif
bool SD_Card_Mounting()
{
#if defined(MBFS_SD_FS) && defined(MBFS_CARD_TYPE_SD)
#if defined(MBFS_ESP32_SDFAT_ENABLED) || defined(MBFS_SDFAT_ENABLED)
Serial.print("\nMounting SD Card... ");
if (!MailClient.sdBegin(&sdFatSPIConfig, SPI_CS_PIN, SPI_SCK_PIN, SPI_MISO_PIN, SPI_MOSI_PIN)) // pointer to SdSpiConfig, SS, SCK,MISO, MOSI
{
Serial.println("failed\n");
return false;
}
else
{
Serial.println("success\n");
return true;
}
#elif defined(ESP32) // if ESP32 and no SdFat library installed
Serial.print("\nMounting SD Card... ");
spi.begin(SPI_SCK_PIN, SPI_MISO_PIN, SPI_MOSI_PIN, SPI_CS_PIN); // SPI pins config -> SCK,MISO, MOSI, SS
if (!MailClient.sdBegin(SPI_CS_PIN, &spi)) // SS, pointer to SPIClass <- SPIClass object should defined as static or global
{
Serial.println("failed\n");
return false;
}
else
{
Serial.println("success\n");
return true;
}
#elif defined(ESP8266)
Serial.print("\nMounting SD Card... ");
if (!MailClient.sdBegin(SPI_CS_PIN)) // or Firebase.sdBegin(&sdFSConfig)
{
Serial.println("failed\n");
return false;
}
else
{
Serial.println("success\n");
return true;
}
#elif defined(MB_ARDUINO_PICO)
Serial.print("\nMounting SD Card... ");
if (!MailClient.sdBegin(&sdFSConfig)) // We begin with the SDFSConfig to use SPI 1 port
{
Serial.println("failed\n");
return false;
}
else
{
Serial.println("success\n");
return true;
}
#endif
#endif
#if defined(MBFS_SD_FS) && defined(MBFS_CARD_TYPE_SD_MMC)
Serial.print("\nMounting SD_MMC Card... ");
if (!MailClient.sdMMCBegin("/sdcard", false, true))
{
Serial.println("failed\n");
return false;
}
else
{
Serial.println("success\n");
return true;
}
#endif
Serial.println("\nSD filesystem was not setup yet.");
return false;
}
#endif