mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-19 08:46:32 +00:00
basic P4 support (#23663)
This commit is contained in:
parent
c909e20fb1
commit
9e25fc0f30
46
boards/esp32p4_ev.json
Normal file
46
boards/esp32p4_ev.json
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"core": "esp32",
|
||||||
|
"extra_flags": [
|
||||||
|
"-DARDUINO_TASMOTA -DESP32P4 -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE"
|
||||||
|
],
|
||||||
|
"f_cpu": "360000000L",
|
||||||
|
"f_flash": "80000000L",
|
||||||
|
"flash_mode": "qio",
|
||||||
|
"mcu": "esp32p4",
|
||||||
|
"variant": "esp32p4",
|
||||||
|
"partitions": "partitions/esp32_partition_app3904k_fs3392k.csv"
|
||||||
|
},
|
||||||
|
"connectivity": [
|
||||||
|
"wifi",
|
||||||
|
"bluetooth",
|
||||||
|
"openthread",
|
||||||
|
"ethernet"
|
||||||
|
],
|
||||||
|
"debug": {
|
||||||
|
"openocd_target": "esp32p4.cfg"
|
||||||
|
},
|
||||||
|
"frameworks": [
|
||||||
|
"arduino",
|
||||||
|
"espidf"
|
||||||
|
],
|
||||||
|
"name": "Espressif ESP32-P4 Function EV Board",
|
||||||
|
"upload": {
|
||||||
|
"arduino": {
|
||||||
|
"flash_extra_images": [
|
||||||
|
[
|
||||||
|
"0x10000",
|
||||||
|
"tasmota32p4-safeboot.bin"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"flash_size": "16MB",
|
||||||
|
"maximum_ram_size": 768000,
|
||||||
|
"maximum_size": 16777216,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"speed": 1500000
|
||||||
|
},
|
||||||
|
"url": "https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/index.html",
|
||||||
|
"vendor": "Espressif"
|
||||||
|
}
|
||||||
|
|
@ -61,7 +61,7 @@
|
|||||||
// SPI_MOSI_DLEN_REG is not defined anymore in esp32s3
|
// SPI_MOSI_DLEN_REG is not defined anymore in esp32s3
|
||||||
#define SPI_MOSI_DLEN_REG(x) SPI_MS_DLEN_REG(x)
|
#define SPI_MOSI_DLEN_REG(x) SPI_MS_DLEN_REG(x)
|
||||||
|
|
||||||
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
#define SPI_HOST SPI1_HOST
|
#define SPI_HOST SPI1_HOST
|
||||||
#define HSPI_HOST SPI2_HOST
|
#define HSPI_HOST SPI2_HOST
|
||||||
#define VSPI_HOST SPI2_HOST /* No SPI3_host on C2/C6 */
|
#define VSPI_HOST SPI2_HOST /* No SPI3_host on C2/C6 */
|
||||||
|
@ -166,6 +166,10 @@ int WiFiHelper::getPhyMode() {
|
|||||||
WIFI_PHY_MODE_HE20, // PHY mode for Bandwidth HE20 (11ax)
|
WIFI_PHY_MODE_HE20, // PHY mode for Bandwidth HE20 (11ax)
|
||||||
} wifi_phy_mode_t;
|
} wifi_phy_mode_t;
|
||||||
*/
|
*/
|
||||||
|
#ifndef SOC_WIFI_SUPPORTED
|
||||||
|
// ESP32-P4 does not support PHY modes, return 0
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
int phy_mode = 0; // "low rate|11b|11g|HT20|HT40|HE20"
|
int phy_mode = 0; // "low rate|11b|11g|HT20|HT40|HE20"
|
||||||
wifi_phy_mode_t WiFiMode;
|
wifi_phy_mode_t WiFiMode;
|
||||||
if (esp_wifi_sta_get_negotiated_phymode(&WiFiMode) == ESP_OK) {
|
if (esp_wifi_sta_get_negotiated_phymode(&WiFiMode) == ESP_OK) {
|
||||||
@ -175,9 +179,13 @@ int WiFiHelper::getPhyMode() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return phy_mode;
|
return phy_mode;
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WiFiHelper::setPhyMode(WiFiPhyMode_t mode) {
|
bool WiFiHelper::setPhyMode(WiFiPhyMode_t mode) {
|
||||||
|
# ifndef SOC_WIFI_SUPPORTED
|
||||||
|
return false; // ESP32-P4 does not support PHY modes
|
||||||
|
# else
|
||||||
uint8_t protocol_bitmap = WIFI_PROTOCOL_11B; // 1
|
uint8_t protocol_bitmap = WIFI_PROTOCOL_11B; // 1
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
#if ESP_IDF_VERSION_MAJOR >= 5
|
#if ESP_IDF_VERSION_MAJOR >= 5
|
||||||
@ -187,6 +195,7 @@ bool WiFiHelper::setPhyMode(WiFiPhyMode_t mode) {
|
|||||||
case 2: protocol_bitmap |= WIFI_PROTOCOL_11G; // 2
|
case 2: protocol_bitmap |= WIFI_PROTOCOL_11G; // 2
|
||||||
}
|
}
|
||||||
return (ESP_OK == esp_wifi_set_protocol(WIFI_IF_STA, protocol_bitmap));
|
return (ESP_OK == esp_wifi_set_protocol(WIFI_IF_STA, protocol_bitmap));
|
||||||
|
#endif // CONFIG_IDF_TARGET_ESP32P4
|
||||||
}
|
}
|
||||||
|
|
||||||
void WiFiHelper::setOutputPower(int n) {
|
void WiFiHelper::setOutputPower(int n) {
|
||||||
@ -370,8 +379,11 @@ String WiFiHelper::macAddress(void) {
|
|||||||
#else
|
#else
|
||||||
uint8_t mac[6] = {0,0,0,0,0,0};
|
uint8_t mac[6] = {0,0,0,0,0,0};
|
||||||
char macStr[18] = { 0 };
|
char macStr[18] = { 0 };
|
||||||
|
#ifdef CONFIG_SOC_HAS_WIFI
|
||||||
esp_read_mac(mac, ESP_MAC_WIFI_STA);
|
esp_read_mac(mac, ESP_MAC_WIFI_STA);
|
||||||
|
#else
|
||||||
|
esp_read_mac(mac, ESP_MAC_BASE);
|
||||||
|
#endif // CONFIG_SOC_HAS_WIFI
|
||||||
snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||||
return String(macStr);
|
return String(macStr);
|
||||||
#endif
|
#endif
|
||||||
|
@ -235,7 +235,7 @@ bool directRead(IO_REG_TYPE mask)
|
|||||||
static inline __attribute__((always_inline))
|
static inline __attribute__((always_inline))
|
||||||
IO_REG_TYPE directRead(IO_REG_TYPE pin)
|
IO_REG_TYPE directRead(IO_REG_TYPE pin)
|
||||||
{
|
{
|
||||||
#if SOC_GPIO_PIN_COUNT <= 32
|
#if SOC_GPIO_PIN_COUNT <= 32 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
return (GPIO.in.val >> pin) & 0x1;
|
return (GPIO.in.val >> pin) & 0x1;
|
||||||
#else // ESP32 with over 32 gpios
|
#else // ESP32 with over 32 gpios
|
||||||
if ( pin < 32 )
|
if ( pin < 32 )
|
||||||
@ -250,7 +250,7 @@ IO_REG_TYPE directRead(IO_REG_TYPE pin)
|
|||||||
static inline __attribute__((always_inline))
|
static inline __attribute__((always_inline))
|
||||||
void directWriteLow(IO_REG_TYPE pin)
|
void directWriteLow(IO_REG_TYPE pin)
|
||||||
{
|
{
|
||||||
#if SOC_GPIO_PIN_COUNT <= 32
|
#if SOC_GPIO_PIN_COUNT <= 32 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
GPIO.out_w1tc.val = ((uint32_t)1 << pin);
|
GPIO.out_w1tc.val = ((uint32_t)1 << pin);
|
||||||
#else // ESP32 with over 32 gpios
|
#else // ESP32 with over 32 gpios
|
||||||
if ( pin < 32 )
|
if ( pin < 32 )
|
||||||
@ -263,7 +263,7 @@ void directWriteLow(IO_REG_TYPE pin)
|
|||||||
static inline __attribute__((always_inline))
|
static inline __attribute__((always_inline))
|
||||||
void directWriteHigh(IO_REG_TYPE pin)
|
void directWriteHigh(IO_REG_TYPE pin)
|
||||||
{
|
{
|
||||||
#if SOC_GPIO_PIN_COUNT <= 32
|
#if SOC_GPIO_PIN_COUNT <= 32 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
GPIO.out_w1ts.val = ((uint32_t)1 << pin);
|
GPIO.out_w1ts.val = ((uint32_t)1 << pin);
|
||||||
#else // ESP32 with over 32 gpios
|
#else // ESP32 with over 32 gpios
|
||||||
if ( pin < 32 )
|
if ( pin < 32 )
|
||||||
@ -280,7 +280,7 @@ void directModeInput(IO_REG_TYPE pin)
|
|||||||
if ( digitalPinIsValid(pin) )
|
if ( digitalPinIsValid(pin) )
|
||||||
{
|
{
|
||||||
// Input
|
// Input
|
||||||
#if SOC_GPIO_PIN_COUNT <= 32
|
#if SOC_GPIO_PIN_COUNT <= 32 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
GPIO.enable_w1tc.val = ((uint32_t)1 << (pin));
|
GPIO.enable_w1tc.val = ((uint32_t)1 << (pin));
|
||||||
#else // ESP32 with over 32 gpios
|
#else // ESP32 with over 32 gpios
|
||||||
if ( pin < 32 )
|
if ( pin < 32 )
|
||||||
@ -298,7 +298,7 @@ void directModeOutput(IO_REG_TYPE pin)
|
|||||||
if ( digitalPinCanOutput(pin) )
|
if ( digitalPinCanOutput(pin) )
|
||||||
{
|
{
|
||||||
// Output
|
// Output
|
||||||
#if SOC_GPIO_PIN_COUNT <= 32
|
#if SOC_GPIO_PIN_COUNT <= 32 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
GPIO.enable_w1ts.val = ((uint32_t)1 << (pin));
|
GPIO.enable_w1ts.val = ((uint32_t)1 << (pin));
|
||||||
#else // ESP32 with over 32 gpios
|
#else // ESP32 with over 32 gpios
|
||||||
if ( pin < 32 )
|
if ( pin < 32 )
|
||||||
|
@ -112,7 +112,7 @@ enum uColorType { uCOLOR_BW, uCOLOR_COLOR };
|
|||||||
#undef GPIO_SET_SLOW
|
#undef GPIO_SET_SLOW
|
||||||
#undef GPIO_CLR_SLOW
|
#undef GPIO_CLR_SLOW
|
||||||
|
|
||||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
#define GPIO_CLR(A) GPIO.out_w1tc.val = (1 << A)
|
#define GPIO_CLR(A) GPIO.out_w1tc.val = (1 << A)
|
||||||
#define GPIO_SET(A) GPIO.out_w1ts.val = (1 << A)
|
#define GPIO_SET(A) GPIO.out_w1ts.val = (1 << A)
|
||||||
#else // plain ESP32
|
#else // plain ESP32
|
||||||
|
@ -160,6 +160,16 @@ build_flags = ${env:tasmota32_base.build_flags}
|
|||||||
lib_extra_dirs = lib/lib_ssl, lib/libesp32
|
lib_extra_dirs = lib/lib_ssl, lib/libesp32
|
||||||
lib_ignore = ${safeboot_flags.lib_ignore}
|
lib_ignore = ${safeboot_flags.lib_ignore}
|
||||||
|
|
||||||
|
[env:tasmota32p4-safeboot]
|
||||||
|
extends = env:tasmota32_base
|
||||||
|
board = esp32p4_ev
|
||||||
|
board_build.app_partition_name = safeboot
|
||||||
|
build_flags = ${env:tasmota32_base.build_flags}
|
||||||
|
-DFIRMWARE_SAFEBOOT
|
||||||
|
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32p4-safeboot.bin"'
|
||||||
|
lib_extra_dirs = lib/lib_ssl, lib/libesp32
|
||||||
|
lib_ignore = ${safeboot_flags.lib_ignore}
|
||||||
|
|
||||||
[env:tasmota32]
|
[env:tasmota32]
|
||||||
extends = env:tasmota32_base
|
extends = env:tasmota32_base
|
||||||
build_flags = ${env:tasmota32_base.build_flags}
|
build_flags = ${env:tasmota32_base.build_flags}
|
||||||
@ -234,6 +244,15 @@ build_flags = ${env:tasmota32_base.build_flags}
|
|||||||
lib_ignore = ${env:tasmota32_base.lib_ignore}
|
lib_ignore = ${env:tasmota32_base.lib_ignore}
|
||||||
Micro-RTSP
|
Micro-RTSP
|
||||||
|
|
||||||
|
[env:tasmota32p4]
|
||||||
|
extends = env:tasmota32_base
|
||||||
|
board = esp32p4_ev
|
||||||
|
build_flags = ${env:tasmota32_base.build_flags}
|
||||||
|
-DFIRMWARE_TASMOTA32
|
||||||
|
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32p4.bin"'
|
||||||
|
lib_ignore = ${env:tasmota32_base.lib_ignore}
|
||||||
|
Micro-RTSP
|
||||||
|
|
||||||
[env:tasmota32s3]
|
[env:tasmota32s3]
|
||||||
extends = env:tasmota32_base
|
extends = env:tasmota32_base
|
||||||
board = esp32s3-qio_qspi
|
board = esp32s3-qio_qspi
|
||||||
|
@ -1454,6 +1454,20 @@ const char PINS_WEMOS[] PROGMEM = "IOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOIO-
|
|||||||
// 0 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748
|
// 0 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748
|
||||||
const char PINS_WEMOS[] PROGMEM = "IOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOIO--------FLFLFLFLFLFLFLIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO";
|
const char PINS_WEMOS[] PROGMEM = "IOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOIO--------FLFLFLFLFLFLFLIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO";
|
||||||
|
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32P4
|
||||||
|
/* ****************************************
|
||||||
|
* ESP32P4
|
||||||
|
* GPIOs 0..54
|
||||||
|
* - 34..38 strapping pins
|
||||||
|
* ****************************************/
|
||||||
|
#define MAX_GPIO_PIN 55 // Number of supported GPIO, 0..55
|
||||||
|
#define MIN_FLASH_PINS 00 // Number of flash chip pins unusable for configuration (22-25 don't exist, 26-32 for SPI)
|
||||||
|
#define MAX_USER_PINS 55 // MAX_GPIO_PIN - MIN_FLASH_PINS
|
||||||
|
#define WEMOS_MODULE 0 // Wemos module
|
||||||
|
|
||||||
|
// 0 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
|
||||||
|
const char PINS_WEMOS[] PROGMEM = "IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOAOAOAOAOAOAOAOAOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOAOAOAOAOAOAO";
|
||||||
|
|
||||||
#else // not CONFIG_IDF_TARGET_ESP32C2/C3/C6 nor CONFIG_IDF_TARGET_ESP32S2 - ESP32
|
#else // not CONFIG_IDF_TARGET_ESP32C2/C3/C6 nor CONFIG_IDF_TARGET_ESP32S2 - ESP32
|
||||||
|
|
||||||
/* ****************************************
|
/* ****************************************
|
||||||
@ -1485,7 +1499,7 @@ const char PINS_WEMOS[] PROGMEM = "IOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOIO-
|
|||||||
// 0 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839
|
// 0 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839
|
||||||
const char PINS_WEMOS[] PROGMEM = "IOTXIORXIOIOFLFLFLFLFLFLIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO--------AOAOIAIAIAIAIAIA";
|
const char PINS_WEMOS[] PROGMEM = "IOTXIORXIOIOFLFLFLFLFLFLIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO--------AOAOIAIAIAIAIAIA";
|
||||||
|
|
||||||
#endif // ESP32/S2/C2/C3/C6 selection
|
#endif // ESP32/S2/C2/C3/C6/P4 selection
|
||||||
#endif // ESP32
|
#endif // ESP32
|
||||||
|
|
||||||
/********************************************************************************************\
|
/********************************************************************************************\
|
||||||
@ -3114,6 +3128,95 @@ const mytmplt kModules[] PROGMEM = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*********************************************************************************************\
|
||||||
|
Known templates
|
||||||
|
\*********************************************************************************************/
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32P4
|
||||||
|
/********************************************************************************************\
|
||||||
|
* ESP32-P4 Module templates
|
||||||
|
\********************************************************************************************/
|
||||||
|
|
||||||
|
#define USER_MODULE 255
|
||||||
|
|
||||||
|
#define WT32_ETH01 4 //TODO: Why needed?
|
||||||
|
|
||||||
|
// Supported hardware modules
|
||||||
|
enum SupportedModulesESP32P4 {
|
||||||
|
WEMOS, // not really correct, a placeholder for now
|
||||||
|
MAXMODULE };
|
||||||
|
|
||||||
|
// Default module settings
|
||||||
|
const uint8_t kModuleNiceList[] PROGMEM = {
|
||||||
|
WEMOS,
|
||||||
|
};
|
||||||
|
|
||||||
|
// !!! Update this list in the same order as kModuleNiceList !!!
|
||||||
|
const char kModuleNames[] PROGMEM =
|
||||||
|
"ESP32P4|"
|
||||||
|
;
|
||||||
|
|
||||||
|
// !!! Update this list in the same order as SupportedModulesESP32P4 !!!
|
||||||
|
const mytmplt kModules[] PROGMEM = {
|
||||||
|
{ // Generic ESP32P4 device
|
||||||
|
AGPIO(GPIO_USER), // 0 IO GPIO0, LP_GPIO0
|
||||||
|
AGPIO(GPIO_USER), // 1 IO GPIO1, LP_GPIO1
|
||||||
|
AGPIO(GPIO_USER), // 2 IO GPIO2, TOUCH0, LP_GPIO2
|
||||||
|
AGPIO(GPIO_USER), // 3 IO GPIO3, TOUCH1, LP_GPIO3
|
||||||
|
AGPIO(GPIO_USER), // 4 IO GPIO4, TOUCH2, LP_GPIO4
|
||||||
|
AGPIO(GPIO_USER), // 5 IO GPIO5, TOUCH3, LP_GPIO5
|
||||||
|
AGPIO(GPIO_USER), // 6 IO GPIO6, TOUCH4, LP_GPIO6
|
||||||
|
AGPIO(GPIO_USER), // 7 IO GPIO7, TOUCH5, LP_GPIO7
|
||||||
|
AGPIO(GPIO_USER), // 8 IO GPIO8, TOUCH6, LP_GPIO8
|
||||||
|
AGPIO(GPIO_USER), // 9 IO GPIO9, TOUCH7, LP_GPIO9
|
||||||
|
AGPIO(GPIO_USER), // 10 IO GPIO10, TOUCH8, LP_GPIO10
|
||||||
|
AGPIO(GPIO_USER), // 11 IO GPIO11, TOUCH9, LP_GPIO11
|
||||||
|
AGPIO(GPIO_USER), // 12 IO GPIO12, TOUCH10, LP_GPIO12
|
||||||
|
AGPIO(GPIO_USER), // 13 IO GPIO13, TOUCH11, LP_GPIO13
|
||||||
|
AGPIO(GPIO_USER), // 14 IO GPIO14, TOUCH12, LP_GPIO14
|
||||||
|
AGPIO(GPIO_USER), // 15 IO GPIO15, TOUCH13, LP_GPIO15
|
||||||
|
AGPIO(GPIO_USER), // 16 IO GPIO16, ADC1_CH0
|
||||||
|
AGPIO(GPIO_USER), // 17 IO GPIO17, ADC1_CH1
|
||||||
|
AGPIO(GPIO_USER), // 18 IO GPIO18, ADC1_CH2
|
||||||
|
AGPIO(GPIO_USER), // 19 IO GPIO19, ADC1_CH3
|
||||||
|
AGPIO(GPIO_USER), // 20 IO GPIO20, ADC1_CH4
|
||||||
|
AGPIO(GPIO_USER), // 21 IO GPIO21, ADC1_CH5
|
||||||
|
AGPIO(GPIO_USER), // 22 IO GPIO22, ADC1_CH6
|
||||||
|
AGPIO(GPIO_USER), // 23 IO GPIO23, ADC1_CH7
|
||||||
|
AGPIO(GPIO_USER), // 24 IO GPIO24
|
||||||
|
AGPIO(GPIO_USER), // 25 IO GPIO25
|
||||||
|
AGPIO(GPIO_USER), // 26 IO GPIO26
|
||||||
|
AGPIO(GPIO_USER), // 27 IO GPIO27
|
||||||
|
AGPIO(GPIO_USER), // 28 IO GPIO28
|
||||||
|
AGPIO(GPIO_USER), // 29 IO GPIO29
|
||||||
|
AGPIO(GPIO_USER), // 30 IO GPIO30
|
||||||
|
AGPIO(GPIO_USER), // 31 IO GPIO31
|
||||||
|
AGPIO(GPIO_USER), // 32 IO GPIO32
|
||||||
|
AGPIO(GPIO_USER), // 33 IO GPIO33
|
||||||
|
AGPIO(GPIO_USER), // 34 IO GPIO34, Strapping pin
|
||||||
|
AGPIO(GPIO_USER), // 35 IO GPIO35, Strapping pin
|
||||||
|
AGPIO(GPIO_USER), // 36 IO GPIO36, Strapping pin
|
||||||
|
AGPIO(GPIO_USER), // 37 IO GPIO37, Strapping pin
|
||||||
|
AGPIO(GPIO_USER), // 38 IO GPIO38, Strapping pin
|
||||||
|
AGPIO(GPIO_USER), // 39 IO GPIO39
|
||||||
|
AGPIO(GPIO_USER), // 40 IO GPIO40
|
||||||
|
AGPIO(GPIO_USER), // 41 IO GPIO41
|
||||||
|
AGPIO(GPIO_USER), // 42 IO GPIO42
|
||||||
|
AGPIO(GPIO_USER), // 43 IO GPIO43
|
||||||
|
AGPIO(GPIO_USER), // 44 IO GPIO44
|
||||||
|
AGPIO(GPIO_USER), // 45 IO GPIO45
|
||||||
|
AGPIO(GPIO_USER), // 46 IO GPIO46
|
||||||
|
AGPIO(GPIO_USER), // 47 IO GPIO47
|
||||||
|
AGPIO(GPIO_USER), // 48 IO GPIO48
|
||||||
|
AGPIO(GPIO_USER), // 49 IO GPIO49, ADC1_CH8
|
||||||
|
AGPIO(GPIO_USER), // 50 IO GPIO50, ADC1_CH9
|
||||||
|
AGPIO(GPIO_USER), // 51 IO GPIO51, ADC1_CH10, ANA_CMPR_CH0 reference voltage
|
||||||
|
AGPIO(GPIO_USER), // 52 IO GPIO52, ADC1_CH11, ANA_CMPR_CH0 input (non-inverting)
|
||||||
|
AGPIO(GPIO_USER), // 53 IO GPIO53, ADC1_CH12, ANA_CMPR_CH1 reference voltage
|
||||||
|
AGPIO(GPIO_USER), // 54 IO GPIO54, ADC1_CH13, ANA_CMPR_CH1 input (non-inverting)
|
||||||
|
0 // Flag
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
Known templates
|
Known templates
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
@ -212,7 +212,7 @@ WiFiUDP PortUdp; // UDP Syslog and Alexa
|
|||||||
CONFIG_IDF_TARGET_ESP32S2 || // support USB via USBCDC
|
CONFIG_IDF_TARGET_ESP32S2 || // support USB via USBCDC
|
||||||
CONFIG_IDF_TARGET_ESP32S3 // support USB via HWCDC using JTAG interface or USBCDC
|
CONFIG_IDF_TARGET_ESP32S3 // support USB via HWCDC using JTAG interface or USBCDC
|
||||||
*/
|
*/
|
||||||
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
|
|
||||||
//#if CONFIG_TINYUSB_CDC_ENABLED // This define is not recognized here so use USE_USB_CDC_CONSOLE
|
//#if CONFIG_TINYUSB_CDC_ENABLED // This define is not recognized here so use USE_USB_CDC_CONSOLE
|
||||||
#ifdef USE_USB_CDC_CONSOLE
|
#ifdef USE_USB_CDC_CONSOLE
|
||||||
@ -493,7 +493,7 @@ void setup(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
#ifdef USE_USB_CDC_CONSOLE
|
#ifdef USE_USB_CDC_CONSOLE
|
||||||
|
|
||||||
bool is_connected_to_USB = false;
|
bool is_connected_to_USB = false;
|
||||||
|
@ -1714,7 +1714,7 @@ void TemplateGpios(myio *gp)
|
|||||||
j++;
|
j++;
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
dest[i] = src[i];
|
dest[i] = src[i];
|
||||||
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
||||||
if (22 == i) { j = 33; } // skip 22-32
|
if (22 == i) { j = 33; } // skip 22-32
|
||||||
@ -1790,6 +1790,8 @@ bool FlashPin(uint32_t pin) {
|
|||||||
return ((pin == 24) || (pin == 25) || (pin == 27) || (pin == 29) || (pin == 30)); // ESP32C6 has GPIOs 24-30 reserved for Flash, with some boards GPIOs 26 28 are useable
|
return ((pin == 24) || (pin == 25) || (pin == 27) || (pin == 29) || (pin == 30)); // ESP32C6 has GPIOs 24-30 reserved for Flash, with some boards GPIOs 26 28 are useable
|
||||||
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
||||||
return (pin > 21) && (pin < 33); // ESP32S2 skip 22-32
|
return (pin > 21) && (pin < 33); // ESP32S2 skip 22-32
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32P4
|
||||||
|
return false; // ESP32P4 has no flash pins, but GPIOs 34-38 are strapping pins
|
||||||
#else
|
#else
|
||||||
return (pin >= 28) && (pin <= 31); // ESP32 skip 28-31
|
return (pin >= 28) && (pin <= 31); // ESP32 skip 28-31
|
||||||
#endif // ESP32C2/C3/C6 and S2/S3
|
#endif // ESP32C2/C3/C6 and S2/S3
|
||||||
@ -1809,6 +1811,8 @@ bool RedPin(uint32_t pin) { // Pin may be dangerous to change, displa
|
|||||||
return (26 == pin) || (28 == pin); // ESP32C6: GPIOs 26 28 are usually used for Flash (mode QIO/QOUT)
|
return (26 == pin) || (28 == pin); // ESP32C6: GPIOs 26 28 are usually used for Flash (mode QIO/QOUT)
|
||||||
#elif CONFIG_IDF_TARGET_ESP32S2
|
#elif CONFIG_IDF_TARGET_ESP32S2
|
||||||
return false; // No red pin on ESP32S3
|
return false; // No red pin on ESP32S3
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32P4
|
||||||
|
return (34 >= pin) && (38 <= pin); // strapping pins on ESP32P4
|
||||||
#elif CONFIG_IDF_TARGET_ESP32S3
|
#elif CONFIG_IDF_TARGET_ESP32S3
|
||||||
return (33 <= pin) && (37 >= pin); // ESP32S3: GPIOs 33..37 are usually used for PSRAM
|
return (33 <= pin) && (37 >= pin); // ESP32S3: GPIOs 33..37 are usually used for PSRAM
|
||||||
#else // ESP32 red pins are 6-11 for original ESP32, other models like PICO are not impacted if flash pins are condfigured
|
#else // ESP32 red pins are 6-11 for original ESP32, other models like PICO are not impacted if flash pins are condfigured
|
||||||
|
@ -261,7 +261,7 @@ void CrashDump(void)
|
|||||||
}
|
}
|
||||||
ResponseJsonEnd();
|
ResponseJsonEnd();
|
||||||
}
|
}
|
||||||
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
// esp-idf 3.x
|
// esp-idf 3.x
|
||||||
|
@ -35,6 +35,8 @@ const static char kWifiPhyMode[] PROGMEM = "low rate|11b|11g|HT20|HT40|HE20"; //
|
|||||||
#define ESP32_ARCH "esp32c6"
|
#define ESP32_ARCH "esp32c6"
|
||||||
#elif CONFIG_IDF_TARGET_ESP32H2
|
#elif CONFIG_IDF_TARGET_ESP32H2
|
||||||
#define ESP32_ARCH "esp32h2"
|
#define ESP32_ARCH "esp32h2"
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32P4
|
||||||
|
#define ESP32_ARCH "esp32p4"
|
||||||
#else
|
#else
|
||||||
#define ESP32_ARCH ""
|
#define ESP32_ARCH ""
|
||||||
#endif
|
#endif
|
||||||
@ -55,6 +57,8 @@ const static char kWifiPhyMode[] PROGMEM = "low rate|11b|11g|HT20|HT40|HE20"; //
|
|||||||
#include "esp32c6/rom/rtc.h"
|
#include "esp32c6/rom/rtc.h"
|
||||||
#elif CONFIG_IDF_TARGET_ESP32H2 // ESP32-H2
|
#elif CONFIG_IDF_TARGET_ESP32H2 // ESP32-H2
|
||||||
#include "esp32h2/rom/rtc.h"
|
#include "esp32h2/rom/rtc.h"
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32P4 // ESP32-P4
|
||||||
|
#include "esp32p4/rom/rtc.h"
|
||||||
#else
|
#else
|
||||||
#error Target CONFIG_IDF_TARGET is not supported
|
#error Target CONFIG_IDF_TARGET is not supported
|
||||||
#endif
|
#endif
|
||||||
@ -64,7 +68,9 @@ size_t getArduinoLoopTaskStackSize(void) {
|
|||||||
return SET_ESP32_STACK_SIZE;
|
return SET_ESP32_STACK_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef CONFIG_IDF_TARGET_ESP32P4
|
||||||
#include <esp_phy_init.h>
|
#include <esp_phy_init.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// Handle 20k of NVM
|
// Handle 20k of NVM
|
||||||
|
|
||||||
@ -139,9 +145,11 @@ void SettingsErase(uint8_t type) {
|
|||||||
break;
|
break;
|
||||||
case 1: // Reset 3 = SDK parameter area
|
case 1: // Reset 3 = SDK parameter area
|
||||||
case 4: // WIFI_FORCE_RF_CAL_ERASE = SDK parameter area
|
case 4: // WIFI_FORCE_RF_CAL_ERASE = SDK parameter area
|
||||||
|
#ifdef SOC_SUPPORTS_WIFI
|
||||||
r1 = esp_phy_erase_cal_data_in_nvs();
|
r1 = esp_phy_erase_cal_data_in_nvs();
|
||||||
// r1 = NvmErase("cal_data");
|
// r1 = NvmErase("cal_data");
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " PHY data (%d)"), r1);
|
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " PHY data (%d)"), r1);
|
||||||
|
#endif //SOC_SUPPORTS_WIFI
|
||||||
break;
|
break;
|
||||||
case 3: // QPC Reached = QPC, Tasmota and SDK parameter area (0x0F3xxx - 0x0FFFFF)
|
case 3: // QPC Reached = QPC, Tasmota and SDK parameter area (0x0F3xxx - 0x0FFFFF)
|
||||||
// nvs_flash_erase(); // Erase RTC, PHY, sta.mac, ap.sndchan, ap.mac, Tasmota etc.
|
// nvs_flash_erase(); // Erase RTC, PHY, sta.mac, ap.sndchan, ap.mac, Tasmota etc.
|
||||||
@ -246,6 +254,9 @@ extern "C" {
|
|||||||
#elif CONFIG_IDF_TARGET_ESP32H2 // ESP32-H2
|
#elif CONFIG_IDF_TARGET_ESP32H2 // ESP32-H2
|
||||||
#include "esp32h2/rom/spi_flash.h"
|
#include "esp32h2/rom/spi_flash.h"
|
||||||
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32h2 is located at 0x0000
|
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32h2 is located at 0x0000
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32P4 // ESP32-P4
|
||||||
|
#include "esp32p4/rom/spi_flash.h"
|
||||||
|
#define ESP_FLASH_IMAGE_BASE 0x2000 // Esp32p4 is located at 0x2000
|
||||||
#else
|
#else
|
||||||
#error Target CONFIG_IDF_TARGET is not supported
|
#error Target CONFIG_IDF_TARGET is not supported
|
||||||
#endif
|
#endif
|
||||||
@ -587,6 +598,8 @@ extern "C" {
|
|||||||
bool FoundPSRAM(void) {
|
bool FoundPSRAM(void) {
|
||||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || DISABLE_PSRAMCHECK || CORE32SOLO1
|
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || DISABLE_PSRAMCHECK || CORE32SOLO1
|
||||||
return psramFound();
|
return psramFound();
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32P4
|
||||||
|
return ESP.getPsramSize() > 0;
|
||||||
#else
|
#else
|
||||||
return psramFound() && esp_psram_is_initialized();
|
return psramFound() && esp_psram_is_initialized();
|
||||||
#endif
|
#endif
|
||||||
@ -903,11 +916,6 @@ typedef struct {
|
|||||||
return F("ESP32-H2");
|
return F("ESP32-H2");
|
||||||
}
|
}
|
||||||
case 18: { // ESP32-P4
|
case 18: { // ESP32-P4
|
||||||
#ifdef CONFIG_IDF_TARGET_ESP32P4
|
|
||||||
switch (pkg_version) {
|
|
||||||
case 0: return F("ESP32-P4");
|
|
||||||
}
|
|
||||||
#endif // CONFIG_IDF_TARGET_ESP32P4
|
|
||||||
return F("ESP32-P4");
|
return F("ESP32-P4");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,7 @@ const char HTTP_SCRIPT_TEMPLATE2[] PROGMEM =
|
|||||||
"}";
|
"}";
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
const char HTTP_SCRIPT_TEMPLATE2[] PROGMEM =
|
const char HTTP_SCRIPT_TEMPLATE2[] PROGMEM =
|
||||||
"for(i=0;i<" STR(MAX_USER_PINS) ";i++){"
|
"for(i=0;i<" STR(MAX_USER_PINS) ";i++){"
|
||||||
"sk(g[i],i);" // Set GPIO
|
"sk(g[i],i);" // Set GPIO
|
||||||
@ -2178,7 +2178,7 @@ void HandleTemplateConfiguration(void) {
|
|||||||
WSContentBegin(200, CT_PLAIN);
|
WSContentBegin(200, CT_PLAIN);
|
||||||
WSContentSend_P(PSTR("%s}1"), AnyModuleName(module).c_str()); // NAME: Generic
|
WSContentSend_P(PSTR("%s}1"), AnyModuleName(module).c_str()); // NAME: Generic
|
||||||
for (uint32_t i = 0; i < nitems(template_gp.io); i++) { // 17,148,29,149,7,255,255,255,138,255,139,255,255
|
for (uint32_t i = 0; i < nitems(template_gp.io); i++) { // 17,148,29,149,7,255,255,255,138,255,139,255,255
|
||||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C6
|
||||||
// ESP32C2/C3/C6 we always send all GPIOs, Flash are just hidden
|
// ESP32C2/C3/C6 we always send all GPIOs, Flash are just hidden
|
||||||
WSContentSend_P(PSTR("%s%d"), (i>0)?",":"", template_gp.io[i]);
|
WSContentSend_P(PSTR("%s%d"), (i>0)?",":"", template_gp.io[i]);
|
||||||
#else
|
#else
|
||||||
@ -2226,7 +2226,7 @@ void HandleTemplateConfiguration(void) {
|
|||||||
"<hr/>"));
|
"<hr/>"));
|
||||||
WSContentSend_P(HTTP_TABLE100); // "<table style='width:100%%'>"
|
WSContentSend_P(HTTP_TABLE100); // "<table style='width:100%%'>"
|
||||||
for (uint32_t i = 0; i < MAX_GPIO_PIN; i++) {
|
for (uint32_t i = 0; i < MAX_GPIO_PIN; i++) {
|
||||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
||||||
// ESP32C2/C3/C6 all gpios are in the template, flash are hidden
|
// ESP32C2/C3/C6 all gpios are in the template, flash are hidden
|
||||||
bool hidden = FlashPin(i);
|
bool hidden = FlashPin(i);
|
||||||
WSContentSend_P(PSTR("<tr%s><td><b><font color='#%06x'>" D_GPIO "%d</font></b></td><td%s><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
|
WSContentSend_P(PSTR("<tr%s><td><b><font color='#%06x'>" D_GPIO "%d</font></b></td><td%s><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
|
||||||
@ -2304,7 +2304,7 @@ void TemplateSaveSettings(void) {
|
|||||||
j++;
|
j++;
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
snprintf_P(command, sizeof(command), PSTR("%s%s%d"), command, (i>0)?",":"", WebGetGpioArg(i));
|
snprintf_P(command, sizeof(command), PSTR("%s%s%d"), command, (i>0)?",":"", WebGetGpioArg(i));
|
||||||
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
||||||
if (22 == i) { j = 33; } // skip 22-32
|
if (22 == i) { j = 33; } // skip 22-32
|
||||||
|
@ -346,9 +346,10 @@ void GVHandleEspInfo(void) {
|
|||||||
jsonResponse += "\",\"cycle_count\":" + String(ESP.getCycleCount());
|
jsonResponse += "\",\"cycle_count\":" + String(ESP.getCycleCount());
|
||||||
jsonResponse += ",\"mac\":\"" + ESP_getEfuseMac();
|
jsonResponse += ",\"mac\":\"" + ESP_getEfuseMac();
|
||||||
|
|
||||||
|
#ifndef CONFIG_IDF_TARGET_ESP32P4
|
||||||
const FlashMode_t flashMode = ESP.getFlashChipMode(); // enum
|
const FlashMode_t flashMode = ESP.getFlashChipMode(); // enum
|
||||||
jsonResponse += "\",\"flash_mode\":" + String(flashMode);
|
jsonResponse += "\",\"flash_mode\":" + String(flashMode);
|
||||||
|
#endif // CONFIG_IDF_TARGET_ESP32P4
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
jsonResponse += ",\"flash_chip_size\":" + String(ESP.getFlashChipRealSize());
|
jsonResponse += ",\"flash_chip_size\":" + String(ESP.getFlashChipRealSize());
|
||||||
#else // ESP32
|
#else // ESP32
|
||||||
|
@ -597,6 +597,7 @@ void I2sInit(void) {
|
|||||||
|
|
||||||
bool init_tx_ok = false;
|
bool init_tx_ok = false;
|
||||||
bool init_rx_ok = false;
|
bool init_rx_ok = false;
|
||||||
|
exclusive = true; //TODO: try fix full dupleyx mode
|
||||||
if (tx && rx && exclusive) {
|
if (tx && rx && exclusive) {
|
||||||
i2s->setExclusive(true);
|
i2s->setExclusive(true);
|
||||||
audio_i2s.Settings->sys.exclusive = exclusive;
|
audio_i2s.Settings->sys.exclusive = exclusive;
|
||||||
|
@ -24,7 +24,40 @@
|
|||||||
|
|
||||||
#include <berry.h>
|
#include <berry.h>
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <byteswap.h>
|
// #include <byteswap.h>
|
||||||
|
|
||||||
|
#ifndef __bswap_16
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# define __bswap_16(x) \
|
||||||
|
(__extension__ \
|
||||||
|
({ unsigned short int __bsx = (x); \
|
||||||
|
((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); }))
|
||||||
|
#else
|
||||||
|
static INLINE unsigned short int
|
||||||
|
__bswap_16 (unsigned short int __bsx)
|
||||||
|
{
|
||||||
|
return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif // __bswap_16
|
||||||
|
|
||||||
|
/* Swap bytes in 32 bit value. */
|
||||||
|
#ifndef __bswap_32
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# define __bswap_32(x) \
|
||||||
|
(__extension__ \
|
||||||
|
({ unsigned int __bsx = (x); \
|
||||||
|
((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | \
|
||||||
|
(((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); }))
|
||||||
|
#else
|
||||||
|
static INLINE unsigned int
|
||||||
|
__bswap_32 (unsigned int __bsx)
|
||||||
|
{
|
||||||
|
return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) |
|
||||||
|
(((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif // __bswap_32
|
||||||
|
|
||||||
// read the `bus` attribute and return `Wire` or `Wire1`
|
// read the `bus` attribute and return `Wire` or `Wire1`
|
||||||
// Can return nullptr reference if the bus is not initialized
|
// Can return nullptr reference if the bus is not initialized
|
||||||
|
@ -273,7 +273,11 @@ void EthernetInit(void) {
|
|||||||
bool init_ok = false;
|
bool init_ok = false;
|
||||||
if (!eth_uses_spi) {
|
if (!eth_uses_spi) {
|
||||||
#if CONFIG_ETH_USE_ESP32_EMAC
|
#if CONFIG_ETH_USE_ESP32_EMAC
|
||||||
init_ok = (ETH.begin((eth_phy_type_t)eth_type, Settings->eth_address, eth_mdc, eth_mdio, eth_power, (eth_clock_mode_t)Settings->eth_clk_mode));
|
#ifdef CONFIG_IDF_TARGET_ESP32P4
|
||||||
|
init_ok = (ETH.begin((eth_phy_type_t)eth_type, Settings->eth_address, eth_mdc, eth_mdio, eth_power, EMAC_CLK_EXT_IN));
|
||||||
|
#else
|
||||||
|
init_ok = (ETH.begin((eth_phy_type_t)eth_type, Settings->eth_address, eth_mdc, eth_mdio, eth_power, (eth_clock_mode_t)Settings->eth_clk_mode));
|
||||||
|
#endif //CONFIG_IDF_TARGET_ESP32P4
|
||||||
#endif // CONFIG_ETH_USE_ESP32_EMAC
|
#endif // CONFIG_ETH_USE_ESP32_EMAC
|
||||||
} else {
|
} else {
|
||||||
// ETH_SPI_SUPPORTS_CUSTOM
|
// ETH_SPI_SUPPORTS_CUSTOM
|
||||||
@ -282,7 +286,7 @@ void EthernetInit(void) {
|
|||||||
init_ok = (ETH.begin((eth_phy_type_t)eth_type, Settings->eth_address, eth_mdc, eth_mdio, eth_power, SPI, ETH_PHY_SPI_FREQ_MHZ));
|
init_ok = (ETH.begin((eth_phy_type_t)eth_type, Settings->eth_address, eth_mdc, eth_mdio, eth_power, SPI, ETH_PHY_SPI_FREQ_MHZ));
|
||||||
}
|
}
|
||||||
if (!init_ok) {
|
if (!init_ok) {
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_ETH "Bad EthType or init error"));
|
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_ETH "Bad EthType %i or init error"),eth_type);
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -377,7 +381,7 @@ void CmndEthernet(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CmndEthAddress(void) {
|
void CmndEthAddress(void) {
|
||||||
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 31)) {
|
if ((XdrvMailbox.payload >= -1) && (XdrvMailbox.payload <= 31)) {
|
||||||
Settings->eth_address = XdrvMailbox.payload;
|
Settings->eth_address = XdrvMailbox.payload;
|
||||||
TasmotaGlobal.restart_flag = 2;
|
TasmotaGlobal.restart_flag = 2;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user