Add code base for better support for FYSETC WIFI SD PRO - WIP

This commit is contained in:
Luc 2023-10-18 21:18:32 +08:00
parent 4c5c21653c
commit dc84b0bbdb
7 changed files with 736 additions and 637 deletions

View File

@ -45,10 +45,15 @@
#define DEFAULT_SCREEN_FLAG 1
#define DEFAULT_SERIAL_BRIDGE_FLAG 1
//position in EEPROM / preferences will use `P_` + <position> to make a string : P_0 for 0
// position in EEPROM / preferences will use `P_` + <position> to make a string
// : P_0 for 0
#define ESP_RADIO_MODE 0 // 1 byte = flag
#define ESP_STA_SSID 1 //33 bytes 32+1 = string ; warning does not support multibyte char like chinese
#define ESP_STA_PASSWORD 34 //65 bytes 64 +1 = string ;warning does not support multibyte char like chinese
#define ESP_STA_SSID \
1 // 33 bytes 32+1 = string ; warning does not support multibyte char like
// chinese
#define ESP_STA_PASSWORD \
34 // 65 bytes 64 +1 = string ;warning does not support multibyte char like
// chinese
#define ESP_STA_IP_MODE 99 // 1 byte = flag
#define ESP_STA_IP_VALUE 100 // 4 bytes xxx.xxx.xxx.xxx
#define ESP_STA_MASK_VALUE 104 // 4 bytes xxx.xxx.xxx.xxx
@ -62,13 +67,23 @@
#define ESP_HTTP_PORT 121 // 4 bytes = int
#define ESP_TELNET_PORT 125 // 4 bytes = int
#define ESP_SERIAL_FLAG 129 // 1 bytes = flag
#define ESP_HOSTNAME 130 //33 bytes 32+1 = string ; warning does not support multibyte char like chinese
#define ESP_HOSTNAME \
130 // 33 bytes 32+1 = string ; warning does not support multibyte char like
// chinese
#define ESP_SENSOR_INTERVAL 164 // 4 bytes = int
#define ESP_SETTINGS_VERSION 168 // 8 bytes = 7+1 = string ESP3D + 2 digits
#define ESP_ADMIN_PWD 176 //21 bytes 20+1 = string ; warning does not support multibyte char like chinese
#define ESP_USER_PWD 197 //21 bytes 20+1 = string ; warning does not support multibyte char like chinese
#define ESP_AP_SSID 218 //33 bytes 32+1 = string ; warning does not support multibyte char like chinese
#define ESP_AP_PASSWORD 251 //65 bytes 64 +1 = string ;warning does not support multibyte char like chinese
#define ESP_ADMIN_PWD \
176 // 21 bytes 20+1 = string ; warning does not support multibyte char
// like chinese
#define ESP_USER_PWD \
197 // 21 bytes 20+1 = string ; warning does not support multibyte char
// like chinese
#define ESP_AP_SSID \
218 // 33 bytes 32+1 = string ; warning does not support multibyte char like
// chinese
#define ESP_AP_PASSWORD \
251 // 65 bytes 64 +1 = string ;warning does not support multibyte char like
// chinese
#define ESP_AP_IP_VALUE 316 // 4 bytes xxx.xxx.xxx.xxx
#define ESP_BOOT_DELAY 320 // 4 bytes = int
#define ESP_WEBSOCKET_PORT 324 // 4 bytes= int
@ -76,21 +91,33 @@
#define ESP_TELNET_ON 329 // 1 byte = flag
#define ESP_WEBSOCKET_ON 330 // 1 byte = flag
#define ESP_SD_SPEED_DIV 331 // 1 byte = flag
#define ESP_NOTIFICATION_TOKEN1 332 //64 bytes 63+1 = string ; warning does not support multibyte char like chinese
#define ESP_NOTIFICATION_TOKEN2 396 //64 bytes 63+1 = string ; warning does not support multibyte char like chinese
#define ESP_NOTIFICATION_TOKEN1 \
332 // 64 bytes 63+1 = string ; warning does not support multibyte char like
// chinese
#define ESP_NOTIFICATION_TOKEN2 \
396 // 64 bytes 63+1 = string ; warning does not support multibyte char like
// chinese
#define ESP_SENSOR_TYPE 460 // 1 bytes = flag
#define ESP_TARGET_FW 461 // 1 bytes = flag
#define ESP_TIMEZONE 462 // 1 bytes = flag
#define ESP_TIME_IS_DST 463 // 1 bytes = flag
#define ESP_TIME_SERVER1 464 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese
#define ESP_TIME_SERVER2 593 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese
#define ESP_TIME_SERVER3 722 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese
#define ESP_TIME_SERVER1 \
464 // 129 bytes 128+1 = string ; warning does not support multibyte char
// like chinese
#define ESP_TIME_SERVER2 \
593 // 129 bytes 128+1 = string ; warning does not support multibyte char
// like chinese
#define ESP_TIME_SERVER3 \
722 // 129 bytes 128+1 = string ; warning does not support multibyte char
// like chinese
#define ESP_REMOTE_SCREEN_FLAG 851 // 1 bytes = flag
#define ESP_SD_MOUNT 852 // 1 bytes = flag
#define ESP_SESSION_TIMEOUT 853 // 1 bytes = flag
#define ESP_WEBSOCKET_FLAG 854 // 1 bytes = flag
#define ESP_SD_CHECK_UPDATE_AT_BOOT 855 // 1 bytes = flag
#define ESP_NOTIFICATION_SETTINGS 856 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese
#define ESP_NOTIFICATION_SETTINGS \
856 // 129 bytes 128+1 = string ; warning does not support multibyte char
// like chinese
#define ESP_CALIBRATION_1 985 // 4 bytes = int
#define ESP_CALIBRATION_2 989 // 4 bytes = int
#define ESP_CALIBRATION_3 993 // 4 bytes = int
@ -126,7 +153,6 @@
#define DEBUG_OUTPUT_TELNET 4
#define DEBUG_OUTPUT_WEBSOCKET 5
// Serial
#define USE_SERIAL_0 1
#define USE_SERIAL_1 2
@ -136,7 +162,6 @@
#define MAIN_SERIAL 1
#define BRIDGE_SERIAL 2
// Communication protocols
#define RAW_SERIAL 0
#define MKS_SERIAL 1
@ -161,6 +186,10 @@
#define ESP_DIRECT_SD 1
#define ESP_SHARED_SD 2
// SD Device type
#define ESP_NORMAL_SDCARD 0
#define ESP_FYSETC_WIFI_PRO_SDCARD 1
// Upload type
#define ESP_UPLOAD_DIRECT_SD 1
#define ESP_UPLOAD_SHARED_SD 2

View File

@ -439,9 +439,36 @@
#define ESP_SD_DETECT_VALUE LOW
#endif // ESP_SD_DETECT_VALUE
#if SD_DEVICE_CONNECTION == ESP_SHARED_SD
#if SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD
// #define all pins
// 1 - Undef all pins to be clear
#undef ESP_SD_CS_PIN
#undef ESP_SD_MISO_PIN
#undef ESP_SD_MOSI_PIN
#undef ESP_SD_SCK_PIN
#undef ESP_SD_DETECT_PIN
#undef ESP_FLAG_SHARED_SD_PIN
#undef ESP_FLAG_SHARED_SD_VALUE
// 2 - Define all pins / values for FYSETC_WIFI_PRO_SDCARD
#define ESP_SD_CS_PIN 13 // D3
#define ESP_SD_MISO_PIN 2 // D0
#define ESP_SD_MOSI_PIN 15 // CMD
#define ESP_SD_SCK_PIN 14 // CLK
#define ESP_SD_DETECT_PIN -1
#define ESP_FLAG_SHARED_SD_PIN 26
#define ESP_FLAG_SHARED_SD_VALUE LOW
#define ESP_SD_CS_SENSE 32
#define ESP_SD_POWER_PIN 27
#define ESP_POWER_SD_VALUE LOW
#define ESP_SD_D1_PIN 4
#define ESP_SD_D2_PIN 12
#else
#ifndef ESP_FLAG_SHARED_SD_PIN
#define ESP_FLAG_SHARED_SD_PIN -1
#endif // ESP_PIN_SHARED_SD
#endif // SD_CARD_TYPE==ESP_FYSETC_WIFI_PRO_SDCARD
#ifndef ESP_FLAG_SHARED_SD_VALUE
#define ESP_FLAG_SHARED_SD_VALUE 0
#endif // ESP_FLAG_SHARED_SD_VALUE

View File

@ -20,13 +20,12 @@
#ifndef _SANITY_ESP3D_H
#define _SANITY_ESP3D_H
#include "esp3d_config.h"
#if not defined(ESP_NO_SANITY_CHECK)
/**************************
* Settings
* ***********************/
#if (ESP_SAVE_SETTINGS == SETTINGS_IN_PREFERENCES) && defined( ARDUINO_ARCH_ESP8266)
#if (ESP_SAVE_SETTINGS == SETTINGS_IN_PREFERENCES) && \
defined(ARDUINO_ARCH_ESP8266)
#error Preferences library is not available for ESP8266
#endif
@ -55,16 +54,16 @@
#error ESP_SERIAL_OUTPUT must be defined
#endif //! defined(ESP_SERIAL_OUTPUT) && COMMUNICATION_PROTOCOL!=SOCKET_SERIAL
#if COMMUNICATION_PROTOCOL!=SOCKET_SERIAL && defined(ESP_SERIAL_BRIDGE_OUTPUT) && ESP_SERIAL_OUTPUT==ESP_SERIAL_BRIDGE_OUTPUT
#if COMMUNICATION_PROTOCOL != SOCKET_SERIAL && \
defined(ESP_SERIAL_BRIDGE_OUTPUT) && \
ESP_SERIAL_OUTPUT == ESP_SERIAL_BRIDGE_OUTPUT
#error ESP_SERIAL_OUTPUT cannot be same as ESP_SERIAL_BRIDGE_OUTPUT
#endif //! defined(ESP_SERIAL_OUTPUT) && COMMUNICATION_PROTOCOL!=SOCKET_SERIAL
#if (ESP_SERIAL_OUTPUT == USE_SERIAL2) && defined(ARDUINO_ARCH_ESP8266)
#error Serial 2 is not available in ESP8266
#endif // ESP_SERIAL_OUTPUT == USE_SERIAL_2 ) && ARDUINO_ARCH_ESP8266
/**************************
* Bluetooth
* ***********************/
@ -72,7 +71,6 @@
#error Bluetooth is not available in ESP8266
#endif
/**************************
* Ethernet
* ***********************/
@ -84,7 +82,6 @@
* Time
* ***********************/
/**************************
* Filesystem
* ***********************/
@ -111,12 +108,21 @@
#endif
#endif
#if defined (SD_DEVICE_CONNECTION) && defined(PIN_RESET_FEATURE) && ESP3D_RESET_PIN!=-1
#if SD_DEVICE_CONNECTION == ESP_SHARED_SD && ESP_FLAG_SHARED_SD_PIN == ESP3D_RESET_PIN
#if defined(SD_DEVICE_CONNECTION) && defined(PIN_RESET_FEATURE) && \
ESP3D_RESET_PIN != -1
#if SD_DEVICE_CONNECTION == ESP_SHARED_SD && \
ESP_FLAG_SHARED_SD_PIN == ESP3D_RESET_PIN
#error ESP_FLAG_SHARED_SD_PIN and ESP3D_RESET_PIN are same, it is not allowed.
#endif
#endif
#if SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD && \
(SD_DEVICE != ESP_SD_NATIVE || SD_DEVICE_CONNECTION != ESP_SHARED_SD)
#error ESP_FYSETC_WIFI_PRO_SDCARD only works with ESP_SD_NATIVE and ESP_SHARED_SD
#define ESP_NO_SANITY_CHECK 1
#endif // SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD && SD_DEVICE !=
// ESP_SD_NATIVE && SD_DEVICE_CONNECTION!=ESP_SHARED_SD
/**************************
* FTP
* ***********************/

View File

@ -61,24 +61,24 @@ File tSDFile_handle[ESP_MAX_SD_OPENHANDLE];
#if SD_DEVICE_CONNECTION == ESP_SHARED_SD
bool ESP_SD::_enabled = false;
#if SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD
#include <SPI.h>
#endif // SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD
bool ESP_SD::enableSharedSD() {
log_esp3d("Enable Shared SD if possible");
if (_enabled) {
log_esp3d("Already enabled, skip");
return false;
}
_enabled = true;
#if defined(ESP3D_CS_SD_SENSE)
log_esp3d("Setup SD sense pin %d", ESP3D_CS_SD_SENSE);
pinMode(ESP3D_CS_SD_SENSE, INPUT_PULLUP);
#endif // defined(ESP3D_CS_SD_SENSE)
#if defined(ESP3D_POWER_SD_PIN) && ESP3D_POWER_SD_PIN != -1
log_esp3d("Setup SD power pin %d", ESP3D_POWER_SD_PIN);
pinMode(ESP3D_POWER_SD_PIN, OUTPUT);
// digitalWrite(ESP3D_POWER_SD_PIN, ESP3D_POWER_SD_VALUE);
#endif // defined(ESP3D_POWER_SD_PIN)
#if defined(ESP_SD_CS_SENSE) && ESP_SD_CS_SENSE != -1
bool active_cs = !digitalRead(ESP_SD_CS_SENSE);
if (active_cs) {
log_esp3d("SD CS is active, skip");
return false;
}
#endif // ESP_SD_CS_SENSE
_enabled = true;
#if defined(ESP_FLAG_SHARED_SD_PIN) && ESP_FLAG_SHARED_SD_PIN != -1
// need to check if SD is in use ?
// Method : TBD
@ -89,6 +89,13 @@ bool ESP_SD::enableSharedSD() {
digitalWrite(ESP_FLAG_SHARED_SD_PIN, ESP_FLAG_SHARED_SD_VALUE);
Hal::wait(100);
#endif // ESP_FLAG_SHARED_SD_PIN
#if SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD
log_esp3d("Custom spi : CS: %d, Miso: %d, Mosi: %d, SCK: %d", ESP_SD_CS_PIN,
ESP_SD_MISO_PIN, ESP_SD_MOSI_PIN, ESP_SD_SCK_PIN);
SPI.begin(ESP_SD_SCK_PIN, ESP_SD_MISO_PIN, ESP_SD_MOSI_PIN, ESP_SD_CS_PIN);
#endif // SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD
#if defined(ESP3DLIB_ENV)
// check if card is not currently in use
if (card.isMounted() && (IS_SD_PRINTING() || IS_SD_FETCHING() ||
@ -101,6 +108,22 @@ bool ESP_SD::enableSharedSD() {
return _enabled;
}
bool ESP_SD::disableSharedSD() {
#if SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD
pinMode(ESP_SD_CS_PIN, INPUT_PULLUP);
pinMode(ESP_SD_MISO_PIN, INPUT_PULLUP);
pinMode(ESP_SD_MOSI_PIN, INPUT_PULLUP);
pinMode(ESP_SD_SCK_PIN, INPUT_PULLUP);
pinMode(ESP_SD_D1_PIN, INPUT_PULLUP);
pinMode(ESP_SD_D2_PIN, INPUT_PULLUP);
SPI.end();
#endif // SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD
// do the switch
digitalWrite(ESP_FLAG_SHARED_SD_PIN, !ESP_FLAG_SHARED_SD_VALUE);
Hal::wait(100);
return true;
}
#endif // SD_DEVICE_CONNECTION == ESP_SHARED_SD
bool ESP_SD::_started = false;
@ -144,9 +167,9 @@ void ESP_SD::releaseFS(uint8_t FS) {
#if SD_DEVICE_CONNECTION == ESP_SHARED_SD
_enabled = false;
#if defined(ESP_FLAG_SHARED_SD_PIN) && ESP_FLAG_SHARED_SD_PIN != -1
log_esp3d("SD shared disabled PIN %d with %d", ESP_FLAG_SHARED_SD_PIN,
!ESP_FLAG_SHARED_SD_VALUE);
digitalWrite(ESP_FLAG_SHARED_SD_PIN, !ESP_FLAG_SHARED_SD_VALUE);
if (ESP_SD::disableSharedSD()) {
log_esp3d("Shared SD disabled");
}
#endif // ESP_FLAG_SHARED_SD_PIN
#if defined(ESP3DLIB_ENV)
log_esp3d("Mount SD in Marlin");

View File

@ -20,19 +20,22 @@
#ifndef _ESP_SD_H
#define _ESP_SD_H
#include "../../include/esp3d_config.h"
#include "../../core/esp3doutput.h"
#include <time.h>
#include "../../core/esp3doutput.h"
#include "../../include/esp3d_config.h"
#define ESP_SD_FS_HEADER "/SD"
#define ESP_MAX_SD_OPENHANDLE 4
class ESP_SDFile
{
class ESP_SDFile {
public:
ESP_SDFile(void * handle = nullptr, bool isdir =false, bool iswritemode = false, const char * path = nullptr);
ESP_SDFile(const char * name, const char * filename, bool isdir = true, size_t size =0);
ESP_SDFile(void* handle = nullptr, bool isdir = false,
bool iswritemode = false, const char* path = nullptr);
ESP_SDFile(const char* name, const char* filename, bool isdir = true,
size_t size = 0);
~ESP_SDFile();
operator bool() const;
bool isDirectory();
@ -52,6 +55,7 @@ public:
size_t read(uint8_t* buf, size_t size);
void flush();
ESP_SDFile openNextFile();
private:
String _dirlist;
bool _isdir;
@ -63,8 +67,7 @@ private:
time_t _lastwrite;
};
class ESP_SD
{
class ESP_SD {
public:
static String& formatBytes(uint64_t bytes);
static bool begin();
@ -89,17 +92,12 @@ public:
static bool rmdir(const char* path);
static bool rename(const char* oldpath, const char* newpath);
static void closeAll();
static uint8_t getSPISpeedDivider()
{
return _spi_speed_divider;
}
static uint8_t getSPISpeedDivider() { return _spi_speed_divider; }
static bool setSPISpeedDivider(uint8_t speeddivider);
#if SD_DEVICE_CONNECTION == ESP_SHARED_SD
static bool enableSharedSD();
static bool isEnabled()
{
return _enabled;
}
static bool disableSharedSD();
static bool isEnabled() { return _enabled; }
#endif // SD_DEVICE_CONNECTION == ESP_SHARED_SD
private:
static bool _started;
@ -111,5 +109,4 @@ private:
static bool _sizechanged;
};
#endif //_ESP_SD_H

View File

@ -27,7 +27,6 @@ sd_native_esp32.cpp - ESP3D sd support class
#include "FS.h"
#include "SD.h"
// TBC: base frequency
// or use (1000000 * ESP.getCpuFreqMHz())
#define ESP_SPI_FREQ 4000000
@ -73,12 +72,6 @@ uint8_t ESP_SD::getState(bool refresh) {
}
bool ESP_SD::begin() {
#if (ESP_SD_CS_PIN != -1) || (ESP_SD_MISO_PIN != -1) || \
(ESP_SD_MOSI_PIN != -1) || (ESP_SD_SCK_PIN != -1)
log_esp3d("Custom spi : CS: %d, Miso: %d, Mosi: %d, SCK: %d", ESP_SD_CS_PIN,
ESP_SD_MISO_PIN, ESP_SD_MOSI_PIN, ESP_SD_SCK_PIN);
SPI.begin(ESP_SD_SCK_PIN, ESP_SD_MISO_PIN, ESP_SD_MOSI_PIN, ESP_SD_CS_PIN);
#endif
_started = true;
_state = ESP_SDCARD_NOT_PRESENT;
_spi_speed_divider = Settings_ESP3D::read_byte(ESP_SD_SPEED_DIV);
@ -95,7 +88,28 @@ bool ESP_SD::begin() {
pinMode(ESP_FLAG_SHARED_SD_PIN, OUTPUT);
digitalWrite(ESP_FLAG_SHARED_SD_PIN, !ESP_FLAG_SHARED_SD_VALUE);
#endif // ESP_FLAG_SHARED_SD_PIN
#if SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD
#if defined(ESP_SD_CS_SENSE)
log_esp3d("Setup SD sense pin %d", ESP_SD_CS_SENSE);
pinMode(ESP_SD_CS_SENSE, INPUT_PULLUP);
#endif // defined(ESP_SD_CS_SENSE)
#if defined(ESP_SD_POWER_PIN) && ESP_SD_POWER_PIN != -1
log_esp3d("Setup SD power pin %d", ESP_SD_POWER_PIN);
pinMode(ESP_SD_POWER_PIN, OUTPUT);
digitalWrite(ESP_SD_POWER_PIN, ESP_POWER_SD_VALUE);
#endif // defined(ESP3D_POWER_SD_PIN)
#endif // SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD
#endif // SD_DEVICE_CONNECTION == ESP_SHARED_SD
#if (ESP_SD_CS_PIN != -1) || (ESP_SD_MISO_PIN != -1) || \
(ESP_SD_MOSI_PIN != -1) || (ESP_SD_SCK_PIN != -1)
log_esp3d("Custom spi : CS: %d, Miso: %d, Mosi: %d, SCK: %d", ESP_SD_CS_PIN,
ESP_SD_MISO_PIN, ESP_SD_MOSI_PIN, ESP_SD_SCK_PIN);
SPI.begin(ESP_SD_SCK_PIN, ESP_SD_MISO_PIN, ESP_SD_MOSI_PIN, ESP_SD_CS_PIN);
#endif
#if SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD && \
SD_DEVICE_CONNECTION == ESP_SHARED_SD
SPI.end();
#endif // SD_CARD_TYPE == ESP_FYSETC_WIFI_PRO_SDCARD
return _started;
}

View File

@ -20,6 +20,7 @@ sd_sdfat2_esp32.cpp - ESP3D sd support class
#include "../../../include/esp3d_config.h"
#if defined(ARDUINO_ARCH_ESP32) && defined(SD_DEVICE)
#if (SD_DEVICE == ESP_SDFAT2)
#include <SdFat.h>
#include <sdios.h>
@ -151,10 +152,7 @@ uint8_t ESP_SD::getState(bool refresh) {
}
bool ESP_SD::begin() {
#if (ESP_SD_CS_PIN != -1) || (ESP_SD_MISO_PIN != -1) || \
(ESP_SD_MOSI_PIN != -1) || (ESP_SD_SCK_PIN != -1)
SPI.begin(ESP_SD_SCK_PIN, ESP_SD_MISO_PIN, ESP_SD_MOSI_PIN, ESP_SD_CS_PIN);
#endif
pinMode(ESP_SD_CS_PIN, OUTPUT);
_started = true;
_state = ESP_SDCARD_NOT_PRESENT;
_spi_speed_divider = Settings_ESP3D::read_byte(ESP_SD_SPEED_DIV);
@ -176,6 +174,11 @@ bool ESP_SD::begin() {
digitalWrite(ESP_FLAG_SHARED_SD_PIN, !ESP_FLAG_SHARED_SD_VALUE);
#endif // ESP_FLAG_SHARED_SD_PIN
#endif // SD_DEVICE_CONNECTION == ESP_SHARED_SD
#if (ESP_SD_CS_PIN != -1) || (ESP_SD_MISO_PIN != -1) || \
(ESP_SD_MOSI_PIN != -1) || (ESP_SD_SCK_PIN != -1)
SPI.begin(ESP_SD_SCK_PIN, ESP_SD_MISO_PIN, ESP_SD_MOSI_PIN, ESP_SD_CS_PIN);
#endif // SPI
return _started;
}