arduino-esp32/cores/esp32/HardwareSerial.cpp

555 lines
18 KiB
C++
Raw Permalink Normal View History

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <ctime>
#include "pins_arduino.h"
Add support for the Arduino Nano ESP32 on 3.x branch (#8909) * [pin_remap 1/3] platform: define ARDUINO_CORE_BUILD when building core files * [pin_remap 2/3] core,libs: add pin remap hooks * platform: remove previous build options if file is missing "touch" would create the file if not present, but not delete its contents if a previous run left the file in the build dir. * platform: make debug_custom.json file customizable by board * platform: fix default debug prefix "debug.toolchain.prefix" must end with a dash, since only the tool name is appended to this string. The reason this is not a major issue is that the "debug_custom.json" file (copied in the sketch directory when debugging is enabled) forces its own prefix. And to make things more interesting, the "toolchainPrefix" entry in that file should _not_ end with a dash. * [pin_remap 3/3]: add Arduino Nano ESP32 board * fix: periman: include it by default, add include guard * fix: io_pin_remap: adjust for new perimap APIs * fix: libraries: manually handled pin remapping files Previously all libraries invoked either high-level APIs (transparently remapped, like the user sketch) or low-level ESP-IDF calls (where the remap to GPIO numbers had to be added manually). Since 3.x, some of these are mixed (for example, periman* APIs are remapped, while soc* are not). This must be handled by disabling the automatic API remapping and making sure all calls use GPIO numbers. * feat: show remapped pins in chip debug reports --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Co-authored-by: Me No Dev <me-no-dev@users.noreply.github.com>
2023-11-29 10:43:59 +00:00
#include "io_pin_remap.h"
#include "HardwareSerial.h"
#include "soc/soc_caps.h"
#include "driver/uart.h"
#include "freertos/queue.h"
#ifndef ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE
#define ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE 2048
#endif
#ifndef ARDUINO_SERIAL_EVENT_TASK_PRIORITY
#define ARDUINO_SERIAL_EVENT_TASK_PRIORITY (configMAX_PRIORITIES - 1)
#endif
#ifndef ARDUINO_SERIAL_EVENT_TASK_RUNNING_CORE
#define ARDUINO_SERIAL_EVENT_TASK_RUNNING_CORE -1
#endif
void serialEvent(void) __attribute__((weak));
void serialEvent(void) {}
#if SOC_UART_NUM > 1
void serialEvent1(void) __attribute__((weak));
void serialEvent1(void) {}
#endif /* SOC_UART_NUM > 1 */
#if SOC_UART_NUM > 2
void serialEvent2(void) __attribute__((weak));
void serialEvent2(void) {}
#endif /* SOC_UART_NUM > 2 */
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL)
// There is always Seria0 for UART0
HardwareSerial Serial0(0);
#if SOC_UART_NUM > 1
HardwareSerial Serial1(1);
#endif
#if SOC_UART_NUM > 2
HardwareSerial Serial2(2);
#endif
#if HWCDC_SERIAL_IS_DEFINED == 1 // Hardware JTAG CDC Event
extern void HWCDCSerialEvent(void) __attribute__((weak));
void HWCDCSerialEvent(void) {}
#endif
#if USB_SERIAL_IS_DEFINED == 1 // Native USB CDC Event
// Used by Hardware Serial for USB CDC events
extern void USBSerialEvent(void) __attribute__((weak));
void USBSerialEvent(void) {}
#endif
void serialEventRun(void) {
#if HWCDC_SERIAL_IS_DEFINED == 1 // Hardware JTAG CDC Event
if (HWCDCSerial.available()) {
HWCDCSerialEvent();
}
#endif
#if USB_SERIAL_IS_DEFINED == 1 // Native USB CDC Event
if (USBSerial.available()) {
USBSerialEvent();
}
#endif
// UART0 is default serialEvent()
if (Serial0.available()) {
serialEvent();
}
#if SOC_UART_NUM > 1
if (Serial1.available()) {
serialEvent1();
}
#endif
#if SOC_UART_NUM > 2
if (Serial2.available()) {
serialEvent2();
}
#endif
}
#endif
#if !CONFIG_DISABLE_HAL_LOCKS
#define HSERIAL_MUTEX_LOCK() \
do { \
} while (xSemaphoreTake(_lock, portMAX_DELAY) != pdPASS)
#define HSERIAL_MUTEX_UNLOCK() xSemaphoreGive(_lock)
#else
ESP-IDF v5.1 (#7733) * Initial changes to compile under ESP-IDF v5.1 * Initial import for ESP-IDF v5.1 libs * Update toolchain * Update esp32-hal-psram.c * Add missing LDs * Update platform.txt * Stop some CI jobs, because they will always fail * Fix examples * Update app_httpd.cpp * Update ResetReason.ino * Warnings fixes * Added the example guideline and template (#7665) * Added the example guideline and template * PR review changes with some typos and grammar fixes * Changes according to the PR review * Added ESP32-S3 link to the datasheet (#7738) * Update HiFreq_ADC.ino * Replace periph_ctrl.h use because of deprecation * Replace esp_spi_flash.h use because of deprecation * Add includes to male mDNS::enableWorkstation compile * Fix ssl_client mbedtls_pk_parse_key callback * Update temperature sensor driver * Allow sketch_utils to compile with arduino-cli * Run CI with arduino-cli * Fix arduino-cli CI build on Windows * Refactor platform.txt to not use components installed through the board manager when running from git * Initial Peripheral Manager Implementation * Update SigmaDelta driver to use the new ESP-IDF driver API * Small improvements to peripheral manager and SigmaDelta * Remove deleted function from SigmaDelta header * Update DAC driver to use the new ESP-IDF driver API * Adds softAp(String) to make it compatible with ESP8266 (#7801) * Fix commentary (#7800) Minor fix based on observation done in https://github.com/espressif/arduino-esp32/issues/7795#issuecomment-1416868611 * add adafruit new board feather esp32s2 reserve tft (#7794) * bugfix: add <stdint.h> for uint8_t to avoid compilation failure (GCC 11.2.0) (#7744) * Adding 3rd party boards for VALTRACK-V4-VTS-ESP32-C3 & VALTRACK-V4-MFW-ESP32-C3 (#7735) * Added VALTRACK-V4-VTS-ESP32-C3 board definition Created pins_arduino.h & made changes to boards.txt with necessary changes * Modified the URL * Renamed json * renamed all auRL * Adding VALTRACK-V4 series board definitions Added VALTRACK-V4-VTS-ESP32C3 & VALTRACK-V4-MFW-ESP32-C3 board variants * Adding VALTRACK-V4 series board definitions Added VALTRACK-V4-VTS-ESP32C3 & VALTRACK-V4-MFW-ESP32-C3 board variants * Reverted package_esp32_index.template.json restored package_esp32_index.template.json from edits * Reverted package_esp32_index.template.json Added new line to package_esp32_index.template.json * Update Platformio CI (#7725) * WiFiClient example fix (#7711) * Modified WiFiClient example to use thingspeak instead of non-functionig sparkfun * Moved instructions to README * Fixed spelling * Added link to S3 datasheet --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Mirror update from Heltec repository (#7709) Heltec updated the I2C pins in https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/commit/b10f4bf85d13fd01be80dcdb0eb59e6a8c8ba19a * Fixes BLE data printing (#7699) * Fixes BLE data printing BLE data has no '\0' terminator, therefore it can't be printed as a regular C string. This fix just prints the BLE data based on its length. * Simplify printing to a single call * split menu options + lora_32_V3 fix (#7697) * Change header gaurd name (#7696) * Fix Name (#7691) Wrong name in definitions. * Fix error in WiFiClient.cpp where the connect function fails for timeouts below 1 second (#7686) * Update WiFiClient.cpp This change will allow specifying connect timeouts below 1 second. Without this change, if connect timeouts under 1 second are given, the connect defaults to 0ms and fails. This will also allow timeouts in fractions of seconds, e.g. 1500ms. Without this change, connect timeouts are truncated to full second increments. * Make parameter timeout_ms clear * Change connection timeout_ms name for clarity --------- Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * fixed the function header (#7674) * fixed the function header * fixed function name and paramaters --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Ticker fix solving #6155 (#7664) * Wrapped Ticker functions with #pragma disabling -Wcast-function-type * Revert "Wrapped Ticker functions with #pragma disabling -Wcast-function-type" This reverts commit 160be7e67a10d01b6e44c4bf2521c0ccd6348976. * Fixed Ticker example * Modified Ticker example * Fixed LED_BUILTIN err for ESP32 --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * setPins fix ESP32 "specified pins are not supported by this chip." (#7646) [ESP32: SDMMCFS::begin hardcodes the usage of slot 1, only check if the pins match slot 1 pins.] setPins() was testing pins D1, D2 and D3 all against D1 ... fine in 1 pin mode when all are -1 not so much if you're trying to get 4 pin mode working. I now see this function doesn't really do anything on the ESP32...accept now correctly checks that you are trying to use the slot 1 pins. Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Allow passing IP as connect method parameter in WiFiClientSecure and skip unnecessary host-ip conversions (#7643) * Add LED_BUILTIN* definitions and initialization for LEDs to stop them floating. (#7636) Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * Expand path to tinuf2 image when checking existence in platformio-build.py (#7631) * Expand path to tinuf2 image when checking existence * More isFiles fixed * Remove (useless) trailing semicolon from Print.cpp (#7622) * ADD: New variant Edgebox-ESP-100 (#7771) * ADD: New variant Edgebox-ESP-100 * FIX: Edgebox-ESP-100 Board.txt usb mode option change back to default value as ESP32S3 * Add Crabik Slot ESP32-S3 board (#7790) * Added Crabik Slot ESP32-S3 * Adding CPU frequency settings and removing excess from partition scheme settings * new variant LilyGO T-Display-S3 (#7763) * new variant LilyGO T-Display-S3 https://github.com/Xinyuan-LilyGO/T-Display-S3 * Add boards.txt definition --------- Co-authored-by: Me No Dev <me-no-dev@users.noreply.github.com> * Update get.py to support Apple ARM64 * Update package_esp32_index.template.json * WString Return bool (#7774) * Add Roboheart Hercules development board to the esp32-core (#7672) * added Roboheart Hercules pin definitions and board.txt entries * added package_roboheat.json for prototyping * Roboheart Hercules pins * Updated the pins * Delete package_roboheart.json * Requested changes --------- Co-authored-by: renebohne <rene.bohne@gmail.com> * Reword "ESP-IDF as Component" (#7812) I think "Arduino as an ESP-IDF component" or just "As ESP-IDF component" instead of "ESP-IDF as Component" is more correct way to name the link. 1. "ESP-IDF as Component" would imply that ESP-IDF is some sort of library for Arduino, which is (IMO) misleading, because it's true the other way around. 2. It's written as "Arduino as an ESP-IDF component" on the webpage it points to as well. - Also I removed the capitalization from "Component" as I have not found a reason why is it capitalized. * add new board Adafruit Feather ESP32-S3 Reverse TFT (#7811) * Multi threading examples (tasks, queues, semaphores, mutexes) (#7660) * Moved and renamed example ESP32/FreeRTOS to MultiThreading/BasicMultiThreading * Added dummy files * Modified original example * Fixed BasicMultiThreading.ino * Added Example demonstrating use of queues * Extended info in BasicMultiThreading * Renamed Queues to singular Queue * Added Mutex example * Added Semaphore example * Moved info from example to README * Moved doc from Mutex to README * Added Queue README * Removed unecesary text * Fixed grammar * Increased stack size for Sempahore example * Added headers into .ino files * Added word Example at the end of title in README * removed unused line * Added forgotten README * Modified BasicMultiThreading example * Added missing S3 entry in README * moved location * Update ESP-IDF libs * Update CMakeLists.txt * Update esptool to v4.4 * Add function timerAttachInterruptFlag (#7809) * Update esptool to v4.5 * ADC refactoring (#7827) * Adc refactored + periman implementation Peripheral manager still needs to be checked if the implementation is right. * switched to working solution for milivolts read * Periman detachbus fix * coding style * fix CI warnings * fix FreeRTOS example * Update ETH.cpp * Update FunctionalInterruptStruct.ino * Update package_esp32_index.template.json * Update package_esp32_index.template.json * Fixes for the latest IDF v5.1 * update esp-idf libs and toolchain * Turn OFF auto crystal frequency for ESP32 (needed by TWAI) * Update examples * Switch build to mostly use flags from files Includes can not be done this way * Reorganize flag files * Optimize chip build flags further * Revert defines from file. MBEDTLS_CONFIG_FILE does not properly expand * Add support for includes and defines from file * Replace old sdk path references in platform.txt * use gcc-ar (#8013) * Makes F_CPU generic for all SoC (#8007) Based on CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ that is correctly defined in the sdkconfig file for each SoC. * TIMER refactoring (#7904) * refactor using GPtimer * Updated timer HW test * fix examples * Add v2.0.7 in issue template (#7871) * refactor using GPtimer * Updated timer HW test * fix examples * Revert "Add v2.0.7 in issue template (#7871)" This reverts commit fcc3b17d62ff57861f8913ca1f142fd5163b7457. * Update upload-artifact to v3 in HW CI * Revert "Update upload-artifact to v3 in HW CI" This reverts commit 1ba228071718ba37c4e26d98db22f77b2a7364a6. * replace resolution with frequency * remove count_down option * countup removed from examples + header * Refactored timer object * code cleanup + examples and tests fixes * TimerAlarm fix --------- Co-authored-by: Vojtěch Bartoška <76958047+VojtechBartoska@users.noreply.github.com> * [Docs] ADC and Timer API Update (+some docs fixes) (#7906) * updated docs * remove hall sensor docs Removed Hall sensor documentation as its no longer supported in IDF-5 * Fixed ESPNow examples location in docs * Last timer refactored API + gpio small fix * AlarmWrite fix * Fixes APLL/PLL with RTC Frequency (#8025) log_d() was displaying APLL for any SoC, but S3 and C3 has not such option, causing compilation errors. * Update IDF libs and fix OPI PSRAM on S3 * Add setMode function HardwareSerial.c to set the esp32 uart mode for use with RS485 auto RTS (#7935) * Added setMode function to set the esp32 uart mode Used to set the esp32 uart mode for use with RS485 Half Duplex and the auto RTS pin mode. This will set/clear the RTS pin output to control the RE/DE pin on most RS485 chips. * Add Success (bool) return in some functions * Add Success (bool) return code to some functions * Add Success (bool) return to some functions * Add Success (bool) return to some functions * Fix uartSetRxTimeout return type --------- Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * Add support for esp-elf-gdb * WFG Crashfix (#8044) * Update component libs * IDF release/v5.1 (#8061) * IDF release/v5.1 bb9200acec * Update Esp.cpp * IDF release/v5.1 420ebd208a * Update esp32-hal-psram.c * Switch SDK to be an external package * fix path (#8096) * Makes UART work at any APB Frequency (#8097) Fixes HardwareSerial to work with IDF 5.1 on any CPU/APB Frequency (240MHz to 10MHZ), including user created low power modes. * Add required callbacks for TinyUSB DFU * Update version to 3.0.0 * Add ESP.getCoreVersion() and update ESP.getChipModel() * Update timer hal for the latest 5.1 * Use separate RX and TX buffer sizes in HTTP client optimizes download by allowing up to 4K packets to be received * Rename clock tree enum name in latest 5.1 * ESP32-H4 support was removed in ESP-IDF v5.1 * IDF release/v5.1 2004bf4e11 (#8165) * Deinit previous bus first (#8180) * TIMER - add timer_started flag, fix timerEnd() + timer HW test (#8135) * Add timer_started flag and stop before disable * Fix timer HW test * TOUCH - Peripheral manager implementation (#8129) * Touch periman implemented * Deinit previous bus first * LEDC Refactoring - Peripheral manager implemented (#8126) * LEDC periman implementation * Fix examples * Rework tone * Update ledc docs * fix missing bracket * Update analog funtions esp32-hal.h * Update CameraWebServer example * Fix HiFreq_ADC example * minor fixes - typos * Avoid calling tone/notone when tone already runs on dif. pin * Remove unused channels_resolution * GPIO - Peripheral manager implementation (#8179) * periman-implementation * fix RGB_BUILTIN and remove space * Enforces more consistency into Peripheral Manager (#8188) * Avoid log_i() message the first time a bus is assigned * Prevent operation with ESP32_BUS_TYPE_INIT * keeps coding style * do not print messages on INIT bus type * [Arduino Core 3.0.0] RMT IDF5.1 Refactoring (#7994) * RMT IDF5.1 refactoring * Fixes initial value setting * removed rmtRead() with user callback * simplify/remove Read data structure * Deep API simplification * fixes the examples * fix rmt.h * adds support to APB different frequencies * fixes CI and not defined RGB_BUILTIN * new RMT API and examples * fixing commentaties * Update esp32-hal-rgb-led.c * changes Filter API * Fixes example with Filter API * Update PlatformIO scripts for the upcoming 3.0 core (#8183) * Update PlatformIO scripts for the upcoming 3.0 core * Dynamically select proper framework-arduinoespressif32-libs package With this change the dev-platform will be dynamically configured to pull the latest .zip package with precompiled libraries from extracted from package_esp32_index.template.json * free memory on detach (#8264) * SPI - Peripheral manager implementation (#8255) * spi periman implementation * fix header file * remove unused struct * fix missing braces * Update esp32-hal-rmt.c (#8216) Optimizing Peripheral Manager Test * I2C - Peripheral manager implementation (#8220) * i2c-master periman initial commit * i2c-master make detachbus static + comment remove * i2c-slave periman implementation * SetPinBus to INIT on i2cDeinits * Fix slave pins deinit * remove dbg logs * set ret to ESP_FAIL instead of returning * Fix warnings in hal-spi caused by pariman transition * Update esptool.py to version 4.6 * Add platform support for ESP_SR * Add USB Type and valid pin check to periman * replace bus with spi->num+1 (#8279) * Remove default pins from SPI HAL * Add commented out handlers for esptool.js in TinyUSB CDC For future use * Add build defines for host os and fqbn (for debug purposes) * Provide proper memory caps total size * Update Esp.cpp * SDMMC - Peripheral manager implementation (#8289) * sdmmc periman implemented * save pins when SOC_SDMMC_USE_IOMUX * IDF release/v5.1 4bc762621d (#8292) * Adds missing pinMode (#8312) * Adds missing pinMode The example code lacks a pinMode() to initialize the GPIO 0 (button). In Arduino Core 3.0.0, it prints an error message when trying to read a not initialized GPIO. * Update KeyboardLogout.ino Adds <buttonPin> to keep code standard * Update KeyboardReprogram.ino Adds <buttonPin> to keep code standard * LEDC Fade implementation (#8338) * fade API + pointer fixes * Add fade api * Add fade example * update ledc docs * remove unused variables * fix path to example * Adds USB to Peripheral Manager - Arduino Core 3.0.0 (#8335) * ETHERNET - Peripheral manager implementation (#8297) * Peripheral manager implemented * remove unused variable * Add all RMII pins * fix typo * Adds HardwareSerial to Peripheral Manager Arduino 3.0.0 (#8328) * Do not limit ETHERNET in periman to only ESP32. SPI is also an option * Initial support for ESP32-C6 (#8337) * Add checks for SOC defines (#8351) * Add checks for SOC defines * Add SoC checks to BLE library * fix i2c compilation error * fix wrong placement of include * add check to SPI library * add check to USB library * add checks to Wire library * Feature/esp32h2 support (#8373) * Initial support for ESP32H2 * Additional changes for ESP32H2 * Update libs for ESP32H2 * Fix flashing on ESP32-H2 * Fix GPIO Configs for ESP32-C6 and ESP32-H2 * Update Timer test sketch * Fix upload flash parameters * Use ets_write_char_uart instead of ets_printf in log_printfv * Print full chip report when log level is sufficient (#8282) * ESP32-C3 does not have ets_write_char_uart * Fix BLE gap event name * HW Testing - Pytest update (#8389) * update tests requirements * remove already handled components * Update version of pytest * Add missing ESP32-H2 to hil.yml * Updated FreeRTOS names (#8418) * HW Testing - ESP32-C6 + ESP32-H2 fixes (#8404) * add C6/H2 to tests cfg.json * remove , * workflow runs-on runner by matrix * Add need for arduino tag to select runner * Add cryptography to requirements.txt * Removed duplicate TX1 define for H2 (#8402) * Fix broken examples * Fixes RMT filter & idle timing and setup (#8359) * Fixes Filter and Idle parameter to uint32 * Fixes Filter and Idle setup * Fixes it to 5.1Libs branch * fix RMT CLK source and Filter API * fixes missing ; * fixes missing ; * fixes RMT example * IDF release/v5.1 a7b62bbcaf (#8438) * Add workflow to build executables from python scripts (#8290) * Add workflow to build executables from python scripts * Push binary to tools * Enable executable signing on Windows * Update get.py * Push binary to tools * Try with multiple files * Try more actions * Try powershell * Restore tools so they do not get rebuilt * Finalize scripts * Push binary to tools * App rollback should be after PSRAM is initialized * Correcting RX1 to GPIO4 and TX1 to GPIO5 to be consistent with documentation. Previous pin use works but is inconsistent with C6 docs. * Fixes Memory Leak (#8486) * fixes preprocessor test (#8485) * fixes preprocessor test When using `#define USE_SOFT_AP` Change `&& not USE_SOFT_AP` ==> `&& !defined(USE_SOFT_AP)` * Adds any BLE capable device in WiFiProv.ino Removing ESP32 restriction for BLE Provisioning. * fix flash mode read out for C6 * Add option for custom partitions without restrictions * SD_MMC update (#8298) * Updated SD_MMC lib and examples * Removed getter implementation and commented usage in examples * squashed updates * IDF release/v5.1 f0437b945f (#8599) * Update package_esp32_index.template.json * Fix printf format build error in BTAdvertisedDeviceSet.cpp --------- Co-authored-by: Pedro Minatel <pedro.minatel@espressif.com> Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> Co-authored-by: Ha Thach <thach@tinyusb.org> Co-authored-by: Martin Turski <quiret@vfemail.net> Co-authored-by: raviypujar <raviypujar@gmail.com> Co-authored-by: Jason2866 <24528715+Jason2866@users.noreply.github.com> Co-authored-by: Tomáš Pilný <34927466+PilnyTomas@users.noreply.github.com> Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Co-authored-by: Daniel Berlin <dberlin@dberlin.org> Co-authored-by: Nima Askari (نیما عسکری) <nimaltd@yahoo.com> Co-authored-by: rtpmsys <106180646+rtpmsys@users.noreply.github.com> Co-authored-by: bytiful <55647551+bytiful@users.noreply.github.com> Co-authored-by: tmfarrington <tmfarrington@users.noreply.github.com> Co-authored-by: Krzysiek S <chris.streh@gmail.com> Co-authored-by: surt <carl.olsson@gmail.com> Co-authored-by: Max Scheffler <max.scheffler@pm.me> Co-authored-by: Clemens Kirchgatterer <clemens@1541.org> Co-authored-by: Peter Pan's Techland <twinkle-pirate@hotmail.com> Co-authored-by: Roman <programmeofficemilkyway@gmail.com> Co-authored-by: Eistee <Eistee82@users.noreply.github.com> Co-authored-by: David McCurley <44048235+mrengineer7777@users.noreply.github.com> Co-authored-by: Gaya3N25 <30388176+Gaya3N25@users.noreply.github.com> Co-authored-by: renebohne <rene.bohne@gmail.com> Co-authored-by: Olivér Remény <25034625+remenyo@users.noreply.github.com> Co-authored-by: davidk88 <david.kotar@gmail.com> Co-authored-by: Vojtěch Bartoška <76958047+VojtechBartoska@users.noreply.github.com> Co-authored-by: James Armstrong <jamesarmstrong3@me.com> Co-authored-by: Valerii Koval <valeros@users.noreply.github.com> Co-authored-by: Peter G. Jensen <root@petergjoel.dk>
2023-10-05 11:54:25 +00:00
#define HSERIAL_MUTEX_LOCK()
#define HSERIAL_MUTEX_UNLOCK()
#endif
HardwareSerial::HardwareSerial(uint8_t uart_nr)
: _uart_nr(uart_nr), _uart(NULL), _rxBufferSize(256), _txBufferSize(0), _onReceiveCB(NULL), _onReceiveErrorCB(NULL), _onReceiveTimeout(false), _rxTimeout(1),
_rxFIFOFull(0), _eventTask(NULL)
#if !CONFIG_DISABLE_HAL_LOCKS
,
_lock(NULL)
#endif
{
#if !CONFIG_DISABLE_HAL_LOCKS
if (_lock == NULL) {
_lock = xSemaphoreCreateMutex();
if (_lock == NULL) {
log_e("xSemaphoreCreateMutex failed");
return;
}
}
#endif
// set deinit function in the Peripheral Manager
uart_init_PeriMan();
}
HardwareSerial::~HardwareSerial() {
end(); // explicit Full UART termination
#if !CONFIG_DISABLE_HAL_LOCKS
if (_lock != NULL) {
vSemaphoreDelete(_lock);
}
#endif
}
void HardwareSerial::_createEventTask(void *args) {
// Creating UART event Task
xTaskCreateUniversal(
_uartEventTask, "uart_event_task", ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE, this, ARDUINO_SERIAL_EVENT_TASK_PRIORITY, &_eventTask,
ARDUINO_SERIAL_EVENT_TASK_RUNNING_CORE
);
if (_eventTask == NULL) {
log_e(" -- UART%d Event Task not Created!", _uart_nr);
}
}
void HardwareSerial::_destroyEventTask(void) {
if (_eventTask != NULL) {
vTaskDelete(_eventTask);
_eventTask = NULL;
}
}
void HardwareSerial::onReceiveError(OnReceiveErrorCb function) {
HSERIAL_MUTEX_LOCK();
// function may be NULL to cancel onReceive() from its respective task
_onReceiveErrorCB = function;
// this can be called after Serial.begin(), therefore it shall create the event task
if (function != NULL && _uart != NULL && _eventTask == NULL) {
_createEventTask(this);
}
HSERIAL_MUTEX_UNLOCK();
}
void HardwareSerial::onReceive(OnReceiveCb function, bool onlyOnTimeout) {
HSERIAL_MUTEX_LOCK();
// function may be NULL to cancel onReceive() from its respective task
_onReceiveCB = function;
// setting the callback to NULL will just disable it
if (_onReceiveCB != NULL) {
// When Rx timeout is Zero (disabled), there is only one possible option that is callback when FIFO reaches 120 bytes
_onReceiveTimeout = _rxTimeout > 0 ? onlyOnTimeout : false;
// in case that onReceive() shall work only with RX Timeout, FIFO shall be high
// this is a work around for an IDF issue with events and low FIFO Full value (< 3)
if (_onReceiveTimeout) {
uartSetRxFIFOFull(_uart, 120);
log_w("OnReceive is set to Timeout only, thus FIFO Full is now 120 bytes.");
}
// this method can be called after Serial.begin(), therefore it shall create the event task
if (_uart != NULL && _eventTask == NULL) {
_createEventTask(this); // Create event task
}
}
HSERIAL_MUTEX_UNLOCK();
}
// This function allow the user to define how many bytes will trigger an Interrupt that will copy RX FIFO to the internal RX Ringbuffer
// ISR will also move data from FIFO to RX Ringbuffer after a RX Timeout defined in HardwareSerial::setRxTimeout(uint8_t symbols_timeout)
// A low value of FIFO Full bytes will consume more CPU time within the ISR
// A high value of FIFO Full bytes will make the application wait longer to have byte available for the Stkech in a streaming scenario
// Both RX FIFO Full and RX Timeout may affect when onReceive() will be called
bool HardwareSerial::setRxFIFOFull(uint8_t fifoBytes) {
HSERIAL_MUTEX_LOCK();
// in case that onReceive() shall work only with RX Timeout, FIFO shall be high
// this is a work around for an IDF issue with events and low FIFO Full value (< 3)
if (_onReceiveCB != NULL && _onReceiveTimeout) {
fifoBytes = 120;
log_w("OnReceive is set to Timeout only, thus FIFO Full is now 120 bytes.");
}
bool retCode = uartSetRxFIFOFull(_uart, fifoBytes); // Set new timeout
if (fifoBytes > 0 && fifoBytes < SOC_UART_FIFO_LEN - 1) {
_rxFIFOFull = fifoBytes;
}
HSERIAL_MUTEX_UNLOCK();
return retCode;
}
// timeout is calculates in time to receive UART symbols at the UART baudrate.
Adds HardwareSerial::setRxTimeout() (#6397) * Adds HardwareSerial::onReceiveTimeout() * Fixed typo * Changes requested * Fix eventQueueReset * Changed _onReceiveTimeout to _rxTimeout for consistency * Uniform uart_set_rx_timeout condition * test _uart not NULL in eventQueueReset() check if _uart is not NULL before using it. * revert last commit - no need for it reverting last change made - it is not necessary. * adds onReceive() parameter In order to allow the user to choose if onReceive() call back will be called only when UART Rx timeout happens or also when UART FIFO gets 120 bytes, a new parameter has been added to onReceive() with the default behavior based on timeout. void onReceive(OnReceiveCb function, bool onlyOnTimeout = true); onReceive will setup a callback that will be called whenever an UART interruption occurs (UART_INTR_RXFIFO_FULL or UART_INTR_RXFIFO_TOUT) UART_INTR_RXFIFO_FULL interrupt triggers at UART_FULL_THRESH_DEFAULT bytes received (defined as 120 bytes by default in IDF) UART_INTR_RXFIFO_TOUT interrupt triggers at UART_TOUT_THRESH_DEFAULT symbols passed without any reception (defined as 10 symbos by default in IDF) onlyOnTimeout parameter will define how onReceive will behave: Default: true -- The callback will only be called when RX Timeout happens. Whole stream of bytes will be ready for being read on the callback function at once. This option may lead to Rx Overflow depending on the Rx Buffer Size and number of bytes received in the streaming false -- The callback will be called when FIFO reaches 120 bytes and also on RX Timeout. The stream of incommig bytes will be "split" into blocks of 120 bytes on each callback. This option avoid any sort of Rx Overflow, but leaves the UART packet reassembling work to the Application. * Adds onReceive() parameter for timeout only * Adds back setRxTimeout() * Adds setRxTimeout() * CI Syntax error - "," missing Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com>
2022-03-28 11:18:30 +00:00
// the estimation is about 11 bits per symbol (SERIAL_8N1)
bool HardwareSerial::setRxTimeout(uint8_t symbols_timeout) {
HSERIAL_MUTEX_LOCK();
// Zero disables timeout, thus, onReceive callback will only be called when RX FIFO reaches 120 bytes
// Any non-zero value will activate onReceive callback based on UART baudrate with about 11 bits per symbol
_rxTimeout = symbols_timeout;
if (!symbols_timeout) {
_onReceiveTimeout = false; // only when RX timeout is disabled, we also must disable this flag
}
bool retCode = uartSetRxTimeout(_uart, _rxTimeout); // Set new timeout
HSERIAL_MUTEX_UNLOCK();
return retCode;
}
void HardwareSerial::eventQueueReset() {
QueueHandle_t uartEventQueue = NULL;
if (_uart == NULL) {
return;
}
uartGetEventQueue(_uart, &uartEventQueue);
if (uartEventQueue != NULL) {
xQueueReset(uartEventQueue);
}
}
void HardwareSerial::_uartEventTask(void *args) {
HardwareSerial *uart = (HardwareSerial *)args;
uart_event_t event;
QueueHandle_t uartEventQueue = NULL;
uartGetEventQueue(uart->_uart, &uartEventQueue);
if (uartEventQueue != NULL) {
for (;;) {
//Waiting for UART event.
if (xQueueReceive(uartEventQueue, (void *)&event, (TickType_t)portMAX_DELAY)) {
hardwareSerial_error_t currentErr = UART_NO_ERROR;
switch (event.type) {
case UART_DATA:
if (uart->_onReceiveCB && uart->available() > 0 && ((uart->_onReceiveTimeout && event.timeout_flag) || !uart->_onReceiveTimeout)) {
uart->_onReceiveCB();
}
break;
case UART_FIFO_OVF:
log_w("UART%d FIFO Overflow. Consider adding Hardware Flow Control to your Application.", uart->_uart_nr);
currentErr = UART_FIFO_OVF_ERROR;
break;
case UART_BUFFER_FULL:
log_w("UART%d Buffer Full. Consider increasing your buffer size of your Application.", uart->_uart_nr);
currentErr = UART_BUFFER_FULL_ERROR;
break;
case UART_BREAK:
log_v("UART%d RX break.", uart->_uart_nr);
currentErr = UART_BREAK_ERROR;
break;
case UART_PARITY_ERR:
log_v("UART%d parity error.", uart->_uart_nr);
currentErr = UART_PARITY_ERROR;
break;
case UART_FRAME_ERR:
log_v("UART%d frame error.", uart->_uart_nr);
currentErr = UART_FRAME_ERROR;
break;
default: log_v("UART%d unknown event type %d.", uart->_uart_nr, event.type); break;
}
if (currentErr != UART_NO_ERROR) {
if (uart->_onReceiveErrorCB) {
uart->_onReceiveErrorCB(currentErr);
}
}
}
}
}
vTaskDelete(NULL);
}
void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin, bool invert, unsigned long timeout_ms, uint8_t rxfifo_full_thrhd) {
if (_uart_nr >= SOC_UART_NUM) {
log_e("Serial number is invalid, please use a number from 0 to %u", SOC_UART_NUM - 1);
return;
}
#if !CONFIG_DISABLE_HAL_LOCKS
if (_lock == NULL) {
log_e("MUTEX Lock failed. Can't begin.");
return;
}
#endif
HSERIAL_MUTEX_LOCK();
// First Time or after end() --> set default Pins
if (!uartIsDriverInstalled(_uart)) {
// get previously used RX/TX pins, if any.
int8_t _rxPin = uart_get_RxPin(_uart_nr);
int8_t _txPin = uart_get_TxPin(_uart_nr);
switch (_uart_nr) {
case UART_NUM_0:
if (rxPin < 0 && txPin < 0) {
// do not change RX0/TX0 if it has already been set before
rxPin = _rxPin < 0 ? (int8_t)SOC_RX0 : _rxPin;
txPin = _txPin < 0 ? (int8_t)SOC_TX0 : _txPin;
}
break;
#if SOC_UART_NUM > 1 // may save some flash bytes...
case UART_NUM_1:
if (rxPin < 0 && txPin < 0) {
// do not change RX1/TX1 if it has already been set before
rxPin = _rxPin < 0 ? (int8_t)RX1 : _rxPin;
txPin = _txPin < 0 ? (int8_t)TX1 : _txPin;
}
break;
#endif
#if SOC_UART_NUM > 2 // may save some flash bytes...
case UART_NUM_2:
if (rxPin < 0 && txPin < 0) {
// do not change RX2/TX2 if it has already been set before
rxPin = _rxPin < 0 ? (int8_t)RX2 : _rxPin;
txPin = _txPin < 0 ? (int8_t)TX2 : _txPin;
}
break;
#endif
}
}
// map logical pins to GPIO numbers
rxPin = digitalPinToGPIONumber(rxPin);
txPin = digitalPinToGPIONumber(txPin);
// IDF UART driver keeps Pin setting on restarting. Negative Pin number will keep it unmodified.
// it will detach previous UART attached pins
// indicates that uartbegin() has to initialize a new IDF driver
if (_testUartBegin(_uart_nr, baud ? baud : 9600, config, rxPin, txPin, _rxBufferSize, _txBufferSize, invert, rxfifo_full_thrhd)) {
_destroyEventTask(); // when IDF uart driver must be restarted, _eventTask must finish too
}
// IDF UART driver keeps Pin setting on restarting. Negative Pin number will keep it unmodified.
// it will detach previous UART attached pins
_uart = uartBegin(_uart_nr, baud ? baud : 9600, config, rxPin, txPin, _rxBufferSize, _txBufferSize, invert, rxfifo_full_thrhd);
if (_uart == NULL) {
log_e("UART driver failed to start. Please check the logs.");
HSERIAL_MUTEX_UNLOCK();
return;
}
if (!baud) {
// using baud rate as zero, forces it to try to detect the current baud rate in place
uartStartDetectBaudrate(_uart);
time_t startMillis = millis();
unsigned long detectedBaudRate = 0;
while (millis() - startMillis < timeout_ms && !(detectedBaudRate = uartDetectBaudrate(_uart))) {
yield();
}
if (detectedBaudRate) {
delay(100); // Give some time...
_uart = uartBegin(_uart_nr, detectedBaudRate, config, rxPin, txPin, _rxBufferSize, _txBufferSize, invert, rxfifo_full_thrhd);
if (_uart == NULL) {
log_e("UART driver failed to start. Please check the logs.");
HSERIAL_MUTEX_UNLOCK();
return;
}
} else {
log_e("Could not detect baudrate. Serial data at the port must be present within the timeout for detection to be possible");
_uart = NULL;
}
}
// create a task to deal with Serial Events when, for example, calling begin() twice to change the baudrate,
// or when setting the callback before calling begin()
if (_uart != NULL && (_onReceiveCB != NULL || _onReceiveErrorCB != NULL) && _eventTask == NULL) {
_createEventTask(this);
}
// Set UART RX timeout
uartSetRxTimeout(_uart, _rxTimeout);
// Set UART FIFO Full depending on the baud rate.
// Lower baud rates will force to emulate byte-by-byte reading
// Higher baud rates will keep IDF default of 120 bytes for FIFO FULL Interrupt
// It can also be changed by the application at any time
if (!_rxFIFOFull) { // it has not being changed before calling begin()
// set a default FIFO Full value for the IDF driver
uint8_t fifoFull = 1;
if (baud > 57600 || (_onReceiveCB != NULL && _onReceiveTimeout)) {
fifoFull = 120;
}
uartSetRxFIFOFull(_uart, fifoFull);
_rxFIFOFull = fifoFull;
}
HSERIAL_MUTEX_UNLOCK();
}
void HardwareSerial::updateBaudRate(unsigned long baud) {
ESP-IDF v5.1 (#7733) * Initial changes to compile under ESP-IDF v5.1 * Initial import for ESP-IDF v5.1 libs * Update toolchain * Update esp32-hal-psram.c * Add missing LDs * Update platform.txt * Stop some CI jobs, because they will always fail * Fix examples * Update app_httpd.cpp * Update ResetReason.ino * Warnings fixes * Added the example guideline and template (#7665) * Added the example guideline and template * PR review changes with some typos and grammar fixes * Changes according to the PR review * Added ESP32-S3 link to the datasheet (#7738) * Update HiFreq_ADC.ino * Replace periph_ctrl.h use because of deprecation * Replace esp_spi_flash.h use because of deprecation * Add includes to male mDNS::enableWorkstation compile * Fix ssl_client mbedtls_pk_parse_key callback * Update temperature sensor driver * Allow sketch_utils to compile with arduino-cli * Run CI with arduino-cli * Fix arduino-cli CI build on Windows * Refactor platform.txt to not use components installed through the board manager when running from git * Initial Peripheral Manager Implementation * Update SigmaDelta driver to use the new ESP-IDF driver API * Small improvements to peripheral manager and SigmaDelta * Remove deleted function from SigmaDelta header * Update DAC driver to use the new ESP-IDF driver API * Adds softAp(String) to make it compatible with ESP8266 (#7801) * Fix commentary (#7800) Minor fix based on observation done in https://github.com/espressif/arduino-esp32/issues/7795#issuecomment-1416868611 * add adafruit new board feather esp32s2 reserve tft (#7794) * bugfix: add <stdint.h> for uint8_t to avoid compilation failure (GCC 11.2.0) (#7744) * Adding 3rd party boards for VALTRACK-V4-VTS-ESP32-C3 & VALTRACK-V4-MFW-ESP32-C3 (#7735) * Added VALTRACK-V4-VTS-ESP32-C3 board definition Created pins_arduino.h & made changes to boards.txt with necessary changes * Modified the URL * Renamed json * renamed all auRL * Adding VALTRACK-V4 series board definitions Added VALTRACK-V4-VTS-ESP32C3 & VALTRACK-V4-MFW-ESP32-C3 board variants * Adding VALTRACK-V4 series board definitions Added VALTRACK-V4-VTS-ESP32C3 & VALTRACK-V4-MFW-ESP32-C3 board variants * Reverted package_esp32_index.template.json restored package_esp32_index.template.json from edits * Reverted package_esp32_index.template.json Added new line to package_esp32_index.template.json * Update Platformio CI (#7725) * WiFiClient example fix (#7711) * Modified WiFiClient example to use thingspeak instead of non-functionig sparkfun * Moved instructions to README * Fixed spelling * Added link to S3 datasheet --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Mirror update from Heltec repository (#7709) Heltec updated the I2C pins in https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/commit/b10f4bf85d13fd01be80dcdb0eb59e6a8c8ba19a * Fixes BLE data printing (#7699) * Fixes BLE data printing BLE data has no '\0' terminator, therefore it can't be printed as a regular C string. This fix just prints the BLE data based on its length. * Simplify printing to a single call * split menu options + lora_32_V3 fix (#7697) * Change header gaurd name (#7696) * Fix Name (#7691) Wrong name in definitions. * Fix error in WiFiClient.cpp where the connect function fails for timeouts below 1 second (#7686) * Update WiFiClient.cpp This change will allow specifying connect timeouts below 1 second. Without this change, if connect timeouts under 1 second are given, the connect defaults to 0ms and fails. This will also allow timeouts in fractions of seconds, e.g. 1500ms. Without this change, connect timeouts are truncated to full second increments. * Make parameter timeout_ms clear * Change connection timeout_ms name for clarity --------- Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * fixed the function header (#7674) * fixed the function header * fixed function name and paramaters --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Ticker fix solving #6155 (#7664) * Wrapped Ticker functions with #pragma disabling -Wcast-function-type * Revert "Wrapped Ticker functions with #pragma disabling -Wcast-function-type" This reverts commit 160be7e67a10d01b6e44c4bf2521c0ccd6348976. * Fixed Ticker example * Modified Ticker example * Fixed LED_BUILTIN err for ESP32 --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * setPins fix ESP32 "specified pins are not supported by this chip." (#7646) [ESP32: SDMMCFS::begin hardcodes the usage of slot 1, only check if the pins match slot 1 pins.] setPins() was testing pins D1, D2 and D3 all against D1 ... fine in 1 pin mode when all are -1 not so much if you're trying to get 4 pin mode working. I now see this function doesn't really do anything on the ESP32...accept now correctly checks that you are trying to use the slot 1 pins. Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Allow passing IP as connect method parameter in WiFiClientSecure and skip unnecessary host-ip conversions (#7643) * Add LED_BUILTIN* definitions and initialization for LEDs to stop them floating. (#7636) Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * Expand path to tinuf2 image when checking existence in platformio-build.py (#7631) * Expand path to tinuf2 image when checking existence * More isFiles fixed * Remove (useless) trailing semicolon from Print.cpp (#7622) * ADD: New variant Edgebox-ESP-100 (#7771) * ADD: New variant Edgebox-ESP-100 * FIX: Edgebox-ESP-100 Board.txt usb mode option change back to default value as ESP32S3 * Add Crabik Slot ESP32-S3 board (#7790) * Added Crabik Slot ESP32-S3 * Adding CPU frequency settings and removing excess from partition scheme settings * new variant LilyGO T-Display-S3 (#7763) * new variant LilyGO T-Display-S3 https://github.com/Xinyuan-LilyGO/T-Display-S3 * Add boards.txt definition --------- Co-authored-by: Me No Dev <me-no-dev@users.noreply.github.com> * Update get.py to support Apple ARM64 * Update package_esp32_index.template.json * WString Return bool (#7774) * Add Roboheart Hercules development board to the esp32-core (#7672) * added Roboheart Hercules pin definitions and board.txt entries * added package_roboheat.json for prototyping * Roboheart Hercules pins * Updated the pins * Delete package_roboheart.json * Requested changes --------- Co-authored-by: renebohne <rene.bohne@gmail.com> * Reword "ESP-IDF as Component" (#7812) I think "Arduino as an ESP-IDF component" or just "As ESP-IDF component" instead of "ESP-IDF as Component" is more correct way to name the link. 1. "ESP-IDF as Component" would imply that ESP-IDF is some sort of library for Arduino, which is (IMO) misleading, because it's true the other way around. 2. It's written as "Arduino as an ESP-IDF component" on the webpage it points to as well. - Also I removed the capitalization from "Component" as I have not found a reason why is it capitalized. * add new board Adafruit Feather ESP32-S3 Reverse TFT (#7811) * Multi threading examples (tasks, queues, semaphores, mutexes) (#7660) * Moved and renamed example ESP32/FreeRTOS to MultiThreading/BasicMultiThreading * Added dummy files * Modified original example * Fixed BasicMultiThreading.ino * Added Example demonstrating use of queues * Extended info in BasicMultiThreading * Renamed Queues to singular Queue * Added Mutex example * Added Semaphore example * Moved info from example to README * Moved doc from Mutex to README * Added Queue README * Removed unecesary text * Fixed grammar * Increased stack size for Sempahore example * Added headers into .ino files * Added word Example at the end of title in README * removed unused line * Added forgotten README * Modified BasicMultiThreading example * Added missing S3 entry in README * moved location * Update ESP-IDF libs * Update CMakeLists.txt * Update esptool to v4.4 * Add function timerAttachInterruptFlag (#7809) * Update esptool to v4.5 * ADC refactoring (#7827) * Adc refactored + periman implementation Peripheral manager still needs to be checked if the implementation is right. * switched to working solution for milivolts read * Periman detachbus fix * coding style * fix CI warnings * fix FreeRTOS example * Update ETH.cpp * Update FunctionalInterruptStruct.ino * Update package_esp32_index.template.json * Update package_esp32_index.template.json * Fixes for the latest IDF v5.1 * update esp-idf libs and toolchain * Turn OFF auto crystal frequency for ESP32 (needed by TWAI) * Update examples * Switch build to mostly use flags from files Includes can not be done this way * Reorganize flag files * Optimize chip build flags further * Revert defines from file. MBEDTLS_CONFIG_FILE does not properly expand * Add support for includes and defines from file * Replace old sdk path references in platform.txt * use gcc-ar (#8013) * Makes F_CPU generic for all SoC (#8007) Based on CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ that is correctly defined in the sdkconfig file for each SoC. * TIMER refactoring (#7904) * refactor using GPtimer * Updated timer HW test * fix examples * Add v2.0.7 in issue template (#7871) * refactor using GPtimer * Updated timer HW test * fix examples * Revert "Add v2.0.7 in issue template (#7871)" This reverts commit fcc3b17d62ff57861f8913ca1f142fd5163b7457. * Update upload-artifact to v3 in HW CI * Revert "Update upload-artifact to v3 in HW CI" This reverts commit 1ba228071718ba37c4e26d98db22f77b2a7364a6. * replace resolution with frequency * remove count_down option * countup removed from examples + header * Refactored timer object * code cleanup + examples and tests fixes * TimerAlarm fix --------- Co-authored-by: Vojtěch Bartoška <76958047+VojtechBartoska@users.noreply.github.com> * [Docs] ADC and Timer API Update (+some docs fixes) (#7906) * updated docs * remove hall sensor docs Removed Hall sensor documentation as its no longer supported in IDF-5 * Fixed ESPNow examples location in docs * Last timer refactored API + gpio small fix * AlarmWrite fix * Fixes APLL/PLL with RTC Frequency (#8025) log_d() was displaying APLL for any SoC, but S3 and C3 has not such option, causing compilation errors. * Update IDF libs and fix OPI PSRAM on S3 * Add setMode function HardwareSerial.c to set the esp32 uart mode for use with RS485 auto RTS (#7935) * Added setMode function to set the esp32 uart mode Used to set the esp32 uart mode for use with RS485 Half Duplex and the auto RTS pin mode. This will set/clear the RTS pin output to control the RE/DE pin on most RS485 chips. * Add Success (bool) return in some functions * Add Success (bool) return code to some functions * Add Success (bool) return to some functions * Add Success (bool) return to some functions * Fix uartSetRxTimeout return type --------- Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * Add support for esp-elf-gdb * WFG Crashfix (#8044) * Update component libs * IDF release/v5.1 (#8061) * IDF release/v5.1 bb9200acec * Update Esp.cpp * IDF release/v5.1 420ebd208a * Update esp32-hal-psram.c * Switch SDK to be an external package * fix path (#8096) * Makes UART work at any APB Frequency (#8097) Fixes HardwareSerial to work with IDF 5.1 on any CPU/APB Frequency (240MHz to 10MHZ), including user created low power modes. * Add required callbacks for TinyUSB DFU * Update version to 3.0.0 * Add ESP.getCoreVersion() and update ESP.getChipModel() * Update timer hal for the latest 5.1 * Use separate RX and TX buffer sizes in HTTP client optimizes download by allowing up to 4K packets to be received * Rename clock tree enum name in latest 5.1 * ESP32-H4 support was removed in ESP-IDF v5.1 * IDF release/v5.1 2004bf4e11 (#8165) * Deinit previous bus first (#8180) * TIMER - add timer_started flag, fix timerEnd() + timer HW test (#8135) * Add timer_started flag and stop before disable * Fix timer HW test * TOUCH - Peripheral manager implementation (#8129) * Touch periman implemented * Deinit previous bus first * LEDC Refactoring - Peripheral manager implemented (#8126) * LEDC periman implementation * Fix examples * Rework tone * Update ledc docs * fix missing bracket * Update analog funtions esp32-hal.h * Update CameraWebServer example * Fix HiFreq_ADC example * minor fixes - typos * Avoid calling tone/notone when tone already runs on dif. pin * Remove unused channels_resolution * GPIO - Peripheral manager implementation (#8179) * periman-implementation * fix RGB_BUILTIN and remove space * Enforces more consistency into Peripheral Manager (#8188) * Avoid log_i() message the first time a bus is assigned * Prevent operation with ESP32_BUS_TYPE_INIT * keeps coding style * do not print messages on INIT bus type * [Arduino Core 3.0.0] RMT IDF5.1 Refactoring (#7994) * RMT IDF5.1 refactoring * Fixes initial value setting * removed rmtRead() with user callback * simplify/remove Read data structure * Deep API simplification * fixes the examples * fix rmt.h * adds support to APB different frequencies * fixes CI and not defined RGB_BUILTIN * new RMT API and examples * fixing commentaties * Update esp32-hal-rgb-led.c * changes Filter API * Fixes example with Filter API * Update PlatformIO scripts for the upcoming 3.0 core (#8183) * Update PlatformIO scripts for the upcoming 3.0 core * Dynamically select proper framework-arduinoespressif32-libs package With this change the dev-platform will be dynamically configured to pull the latest .zip package with precompiled libraries from extracted from package_esp32_index.template.json * free memory on detach (#8264) * SPI - Peripheral manager implementation (#8255) * spi periman implementation * fix header file * remove unused struct * fix missing braces * Update esp32-hal-rmt.c (#8216) Optimizing Peripheral Manager Test * I2C - Peripheral manager implementation (#8220) * i2c-master periman initial commit * i2c-master make detachbus static + comment remove * i2c-slave periman implementation * SetPinBus to INIT on i2cDeinits * Fix slave pins deinit * remove dbg logs * set ret to ESP_FAIL instead of returning * Fix warnings in hal-spi caused by pariman transition * Update esptool.py to version 4.6 * Add platform support for ESP_SR * Add USB Type and valid pin check to periman * replace bus with spi->num+1 (#8279) * Remove default pins from SPI HAL * Add commented out handlers for esptool.js in TinyUSB CDC For future use * Add build defines for host os and fqbn (for debug purposes) * Provide proper memory caps total size * Update Esp.cpp * SDMMC - Peripheral manager implementation (#8289) * sdmmc periman implemented * save pins when SOC_SDMMC_USE_IOMUX * IDF release/v5.1 4bc762621d (#8292) * Adds missing pinMode (#8312) * Adds missing pinMode The example code lacks a pinMode() to initialize the GPIO 0 (button). In Arduino Core 3.0.0, it prints an error message when trying to read a not initialized GPIO. * Update KeyboardLogout.ino Adds <buttonPin> to keep code standard * Update KeyboardReprogram.ino Adds <buttonPin> to keep code standard * LEDC Fade implementation (#8338) * fade API + pointer fixes * Add fade api * Add fade example * update ledc docs * remove unused variables * fix path to example * Adds USB to Peripheral Manager - Arduino Core 3.0.0 (#8335) * ETHERNET - Peripheral manager implementation (#8297) * Peripheral manager implemented * remove unused variable * Add all RMII pins * fix typo * Adds HardwareSerial to Peripheral Manager Arduino 3.0.0 (#8328) * Do not limit ETHERNET in periman to only ESP32. SPI is also an option * Initial support for ESP32-C6 (#8337) * Add checks for SOC defines (#8351) * Add checks for SOC defines * Add SoC checks to BLE library * fix i2c compilation error * fix wrong placement of include * add check to SPI library * add check to USB library * add checks to Wire library * Feature/esp32h2 support (#8373) * Initial support for ESP32H2 * Additional changes for ESP32H2 * Update libs for ESP32H2 * Fix flashing on ESP32-H2 * Fix GPIO Configs for ESP32-C6 and ESP32-H2 * Update Timer test sketch * Fix upload flash parameters * Use ets_write_char_uart instead of ets_printf in log_printfv * Print full chip report when log level is sufficient (#8282) * ESP32-C3 does not have ets_write_char_uart * Fix BLE gap event name * HW Testing - Pytest update (#8389) * update tests requirements * remove already handled components * Update version of pytest * Add missing ESP32-H2 to hil.yml * Updated FreeRTOS names (#8418) * HW Testing - ESP32-C6 + ESP32-H2 fixes (#8404) * add C6/H2 to tests cfg.json * remove , * workflow runs-on runner by matrix * Add need for arduino tag to select runner * Add cryptography to requirements.txt * Removed duplicate TX1 define for H2 (#8402) * Fix broken examples * Fixes RMT filter & idle timing and setup (#8359) * Fixes Filter and Idle parameter to uint32 * Fixes Filter and Idle setup * Fixes it to 5.1Libs branch * fix RMT CLK source and Filter API * fixes missing ; * fixes missing ; * fixes RMT example * IDF release/v5.1 a7b62bbcaf (#8438) * Add workflow to build executables from python scripts (#8290) * Add workflow to build executables from python scripts * Push binary to tools * Enable executable signing on Windows * Update get.py * Push binary to tools * Try with multiple files * Try more actions * Try powershell * Restore tools so they do not get rebuilt * Finalize scripts * Push binary to tools * App rollback should be after PSRAM is initialized * Correcting RX1 to GPIO4 and TX1 to GPIO5 to be consistent with documentation. Previous pin use works but is inconsistent with C6 docs. * Fixes Memory Leak (#8486) * fixes preprocessor test (#8485) * fixes preprocessor test When using `#define USE_SOFT_AP` Change `&& not USE_SOFT_AP` ==> `&& !defined(USE_SOFT_AP)` * Adds any BLE capable device in WiFiProv.ino Removing ESP32 restriction for BLE Provisioning. * fix flash mode read out for C6 * Add option for custom partitions without restrictions * SD_MMC update (#8298) * Updated SD_MMC lib and examples * Removed getter implementation and commented usage in examples * squashed updates * IDF release/v5.1 f0437b945f (#8599) * Update package_esp32_index.template.json * Fix printf format build error in BTAdvertisedDeviceSet.cpp --------- Co-authored-by: Pedro Minatel <pedro.minatel@espressif.com> Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> Co-authored-by: Ha Thach <thach@tinyusb.org> Co-authored-by: Martin Turski <quiret@vfemail.net> Co-authored-by: raviypujar <raviypujar@gmail.com> Co-authored-by: Jason2866 <24528715+Jason2866@users.noreply.github.com> Co-authored-by: Tomáš Pilný <34927466+PilnyTomas@users.noreply.github.com> Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Co-authored-by: Daniel Berlin <dberlin@dberlin.org> Co-authored-by: Nima Askari (نیما عسکری) <nimaltd@yahoo.com> Co-authored-by: rtpmsys <106180646+rtpmsys@users.noreply.github.com> Co-authored-by: bytiful <55647551+bytiful@users.noreply.github.com> Co-authored-by: tmfarrington <tmfarrington@users.noreply.github.com> Co-authored-by: Krzysiek S <chris.streh@gmail.com> Co-authored-by: surt <carl.olsson@gmail.com> Co-authored-by: Max Scheffler <max.scheffler@pm.me> Co-authored-by: Clemens Kirchgatterer <clemens@1541.org> Co-authored-by: Peter Pan's Techland <twinkle-pirate@hotmail.com> Co-authored-by: Roman <programmeofficemilkyway@gmail.com> Co-authored-by: Eistee <Eistee82@users.noreply.github.com> Co-authored-by: David McCurley <44048235+mrengineer7777@users.noreply.github.com> Co-authored-by: Gaya3N25 <30388176+Gaya3N25@users.noreply.github.com> Co-authored-by: renebohne <rene.bohne@gmail.com> Co-authored-by: Olivér Remény <25034625+remenyo@users.noreply.github.com> Co-authored-by: davidk88 <david.kotar@gmail.com> Co-authored-by: Vojtěch Bartoška <76958047+VojtechBartoska@users.noreply.github.com> Co-authored-by: James Armstrong <jamesarmstrong3@me.com> Co-authored-by: Valerii Koval <valeros@users.noreply.github.com> Co-authored-by: Peter G. Jensen <root@petergjoel.dk>
2023-10-05 11:54:25 +00:00
uartSetBaudRate(_uart, baud);
}
void HardwareSerial::end() {
// default Serial.end() will completely disable HardwareSerial,
// including any tasks or debug message channel (log_x()) - but not for IDF log messages!
_onReceiveCB = NULL;
_onReceiveErrorCB = NULL;
if (uartGetDebug() == _uart_nr) {
uartSetDebug(0);
}
_rxFIFOFull = 0;
uartEnd(_uart_nr); // fully detach all pins and delete the UART driver
_destroyEventTask(); // when IDF uart driver is deleted, _eventTask must finish too
_uart = NULL;
}
void HardwareSerial::setDebugOutput(bool en) {
if (_uart == 0) {
return;
}
if (en) {
uartSetDebug(_uart);
} else {
if (uartGetDebug() == _uart_nr) {
uartSetDebug(NULL);
}
}
}
int HardwareSerial::available(void) {
return uartAvailable(_uart);
}
int HardwareSerial::availableForWrite(void) {
return uartAvailableForWrite(_uart);
}
int HardwareSerial::peek(void) {
if (available()) {
return uartPeek(_uart);
}
return -1;
}
int HardwareSerial::read(void) {
uint8_t c = 0;
if (uartReadBytes(_uart, &c, 1, 0) == 1) {
return c;
} else {
return -1;
}
}
// read characters into buffer
// terminates if size characters have been read, or no further are pending
// returns the number of characters placed in the buffer
// the buffer is NOT null terminated.
size_t HardwareSerial::read(uint8_t *buffer, size_t size) {
return uartReadBytes(_uart, buffer, size, 0);
}
// Overrides Stream::readBytes() to be faster using IDF
size_t HardwareSerial::readBytes(uint8_t *buffer, size_t length) {
return uartReadBytes(_uart, buffer, length, (uint32_t)getTimeout());
}
void HardwareSerial::flush(void) {
uartFlush(_uart);
}
void HardwareSerial::flush(bool txOnly) {
uartFlushTxOnly(_uart, txOnly);
}
size_t HardwareSerial::write(uint8_t c) {
uartWrite(_uart, c);
return 1;
}
size_t HardwareSerial::write(const uint8_t *buffer, size_t size) {
uartWriteBuf(_uart, buffer, size);
return size;
}
uint32_t HardwareSerial::baudRate() {
ESP-IDF v5.1 (#7733) * Initial changes to compile under ESP-IDF v5.1 * Initial import for ESP-IDF v5.1 libs * Update toolchain * Update esp32-hal-psram.c * Add missing LDs * Update platform.txt * Stop some CI jobs, because they will always fail * Fix examples * Update app_httpd.cpp * Update ResetReason.ino * Warnings fixes * Added the example guideline and template (#7665) * Added the example guideline and template * PR review changes with some typos and grammar fixes * Changes according to the PR review * Added ESP32-S3 link to the datasheet (#7738) * Update HiFreq_ADC.ino * Replace periph_ctrl.h use because of deprecation * Replace esp_spi_flash.h use because of deprecation * Add includes to male mDNS::enableWorkstation compile * Fix ssl_client mbedtls_pk_parse_key callback * Update temperature sensor driver * Allow sketch_utils to compile with arduino-cli * Run CI with arduino-cli * Fix arduino-cli CI build on Windows * Refactor platform.txt to not use components installed through the board manager when running from git * Initial Peripheral Manager Implementation * Update SigmaDelta driver to use the new ESP-IDF driver API * Small improvements to peripheral manager and SigmaDelta * Remove deleted function from SigmaDelta header * Update DAC driver to use the new ESP-IDF driver API * Adds softAp(String) to make it compatible with ESP8266 (#7801) * Fix commentary (#7800) Minor fix based on observation done in https://github.com/espressif/arduino-esp32/issues/7795#issuecomment-1416868611 * add adafruit new board feather esp32s2 reserve tft (#7794) * bugfix: add <stdint.h> for uint8_t to avoid compilation failure (GCC 11.2.0) (#7744) * Adding 3rd party boards for VALTRACK-V4-VTS-ESP32-C3 & VALTRACK-V4-MFW-ESP32-C3 (#7735) * Added VALTRACK-V4-VTS-ESP32-C3 board definition Created pins_arduino.h & made changes to boards.txt with necessary changes * Modified the URL * Renamed json * renamed all auRL * Adding VALTRACK-V4 series board definitions Added VALTRACK-V4-VTS-ESP32C3 & VALTRACK-V4-MFW-ESP32-C3 board variants * Adding VALTRACK-V4 series board definitions Added VALTRACK-V4-VTS-ESP32C3 & VALTRACK-V4-MFW-ESP32-C3 board variants * Reverted package_esp32_index.template.json restored package_esp32_index.template.json from edits * Reverted package_esp32_index.template.json Added new line to package_esp32_index.template.json * Update Platformio CI (#7725) * WiFiClient example fix (#7711) * Modified WiFiClient example to use thingspeak instead of non-functionig sparkfun * Moved instructions to README * Fixed spelling * Added link to S3 datasheet --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Mirror update from Heltec repository (#7709) Heltec updated the I2C pins in https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/commit/b10f4bf85d13fd01be80dcdb0eb59e6a8c8ba19a * Fixes BLE data printing (#7699) * Fixes BLE data printing BLE data has no '\0' terminator, therefore it can't be printed as a regular C string. This fix just prints the BLE data based on its length. * Simplify printing to a single call * split menu options + lora_32_V3 fix (#7697) * Change header gaurd name (#7696) * Fix Name (#7691) Wrong name in definitions. * Fix error in WiFiClient.cpp where the connect function fails for timeouts below 1 second (#7686) * Update WiFiClient.cpp This change will allow specifying connect timeouts below 1 second. Without this change, if connect timeouts under 1 second are given, the connect defaults to 0ms and fails. This will also allow timeouts in fractions of seconds, e.g. 1500ms. Without this change, connect timeouts are truncated to full second increments. * Make parameter timeout_ms clear * Change connection timeout_ms name for clarity --------- Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * fixed the function header (#7674) * fixed the function header * fixed function name and paramaters --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Ticker fix solving #6155 (#7664) * Wrapped Ticker functions with #pragma disabling -Wcast-function-type * Revert "Wrapped Ticker functions with #pragma disabling -Wcast-function-type" This reverts commit 160be7e67a10d01b6e44c4bf2521c0ccd6348976. * Fixed Ticker example * Modified Ticker example * Fixed LED_BUILTIN err for ESP32 --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * setPins fix ESP32 "specified pins are not supported by this chip." (#7646) [ESP32: SDMMCFS::begin hardcodes the usage of slot 1, only check if the pins match slot 1 pins.] setPins() was testing pins D1, D2 and D3 all against D1 ... fine in 1 pin mode when all are -1 not so much if you're trying to get 4 pin mode working. I now see this function doesn't really do anything on the ESP32...accept now correctly checks that you are trying to use the slot 1 pins. Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Allow passing IP as connect method parameter in WiFiClientSecure and skip unnecessary host-ip conversions (#7643) * Add LED_BUILTIN* definitions and initialization for LEDs to stop them floating. (#7636) Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * Expand path to tinuf2 image when checking existence in platformio-build.py (#7631) * Expand path to tinuf2 image when checking existence * More isFiles fixed * Remove (useless) trailing semicolon from Print.cpp (#7622) * ADD: New variant Edgebox-ESP-100 (#7771) * ADD: New variant Edgebox-ESP-100 * FIX: Edgebox-ESP-100 Board.txt usb mode option change back to default value as ESP32S3 * Add Crabik Slot ESP32-S3 board (#7790) * Added Crabik Slot ESP32-S3 * Adding CPU frequency settings and removing excess from partition scheme settings * new variant LilyGO T-Display-S3 (#7763) * new variant LilyGO T-Display-S3 https://github.com/Xinyuan-LilyGO/T-Display-S3 * Add boards.txt definition --------- Co-authored-by: Me No Dev <me-no-dev@users.noreply.github.com> * Update get.py to support Apple ARM64 * Update package_esp32_index.template.json * WString Return bool (#7774) * Add Roboheart Hercules development board to the esp32-core (#7672) * added Roboheart Hercules pin definitions and board.txt entries * added package_roboheat.json for prototyping * Roboheart Hercules pins * Updated the pins * Delete package_roboheart.json * Requested changes --------- Co-authored-by: renebohne <rene.bohne@gmail.com> * Reword "ESP-IDF as Component" (#7812) I think "Arduino as an ESP-IDF component" or just "As ESP-IDF component" instead of "ESP-IDF as Component" is more correct way to name the link. 1. "ESP-IDF as Component" would imply that ESP-IDF is some sort of library for Arduino, which is (IMO) misleading, because it's true the other way around. 2. It's written as "Arduino as an ESP-IDF component" on the webpage it points to as well. - Also I removed the capitalization from "Component" as I have not found a reason why is it capitalized. * add new board Adafruit Feather ESP32-S3 Reverse TFT (#7811) * Multi threading examples (tasks, queues, semaphores, mutexes) (#7660) * Moved and renamed example ESP32/FreeRTOS to MultiThreading/BasicMultiThreading * Added dummy files * Modified original example * Fixed BasicMultiThreading.ino * Added Example demonstrating use of queues * Extended info in BasicMultiThreading * Renamed Queues to singular Queue * Added Mutex example * Added Semaphore example * Moved info from example to README * Moved doc from Mutex to README * Added Queue README * Removed unecesary text * Fixed grammar * Increased stack size for Sempahore example * Added headers into .ino files * Added word Example at the end of title in README * removed unused line * Added forgotten README * Modified BasicMultiThreading example * Added missing S3 entry in README * moved location * Update ESP-IDF libs * Update CMakeLists.txt * Update esptool to v4.4 * Add function timerAttachInterruptFlag (#7809) * Update esptool to v4.5 * ADC refactoring (#7827) * Adc refactored + periman implementation Peripheral manager still needs to be checked if the implementation is right. * switched to working solution for milivolts read * Periman detachbus fix * coding style * fix CI warnings * fix FreeRTOS example * Update ETH.cpp * Update FunctionalInterruptStruct.ino * Update package_esp32_index.template.json * Update package_esp32_index.template.json * Fixes for the latest IDF v5.1 * update esp-idf libs and toolchain * Turn OFF auto crystal frequency for ESP32 (needed by TWAI) * Update examples * Switch build to mostly use flags from files Includes can not be done this way * Reorganize flag files * Optimize chip build flags further * Revert defines from file. MBEDTLS_CONFIG_FILE does not properly expand * Add support for includes and defines from file * Replace old sdk path references in platform.txt * use gcc-ar (#8013) * Makes F_CPU generic for all SoC (#8007) Based on CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ that is correctly defined in the sdkconfig file for each SoC. * TIMER refactoring (#7904) * refactor using GPtimer * Updated timer HW test * fix examples * Add v2.0.7 in issue template (#7871) * refactor using GPtimer * Updated timer HW test * fix examples * Revert "Add v2.0.7 in issue template (#7871)" This reverts commit fcc3b17d62ff57861f8913ca1f142fd5163b7457. * Update upload-artifact to v3 in HW CI * Revert "Update upload-artifact to v3 in HW CI" This reverts commit 1ba228071718ba37c4e26d98db22f77b2a7364a6. * replace resolution with frequency * remove count_down option * countup removed from examples + header * Refactored timer object * code cleanup + examples and tests fixes * TimerAlarm fix --------- Co-authored-by: Vojtěch Bartoška <76958047+VojtechBartoska@users.noreply.github.com> * [Docs] ADC and Timer API Update (+some docs fixes) (#7906) * updated docs * remove hall sensor docs Removed Hall sensor documentation as its no longer supported in IDF-5 * Fixed ESPNow examples location in docs * Last timer refactored API + gpio small fix * AlarmWrite fix * Fixes APLL/PLL with RTC Frequency (#8025) log_d() was displaying APLL for any SoC, but S3 and C3 has not such option, causing compilation errors. * Update IDF libs and fix OPI PSRAM on S3 * Add setMode function HardwareSerial.c to set the esp32 uart mode for use with RS485 auto RTS (#7935) * Added setMode function to set the esp32 uart mode Used to set the esp32 uart mode for use with RS485 Half Duplex and the auto RTS pin mode. This will set/clear the RTS pin output to control the RE/DE pin on most RS485 chips. * Add Success (bool) return in some functions * Add Success (bool) return code to some functions * Add Success (bool) return to some functions * Add Success (bool) return to some functions * Fix uartSetRxTimeout return type --------- Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * Add support for esp-elf-gdb * WFG Crashfix (#8044) * Update component libs * IDF release/v5.1 (#8061) * IDF release/v5.1 bb9200acec * Update Esp.cpp * IDF release/v5.1 420ebd208a * Update esp32-hal-psram.c * Switch SDK to be an external package * fix path (#8096) * Makes UART work at any APB Frequency (#8097) Fixes HardwareSerial to work with IDF 5.1 on any CPU/APB Frequency (240MHz to 10MHZ), including user created low power modes. * Add required callbacks for TinyUSB DFU * Update version to 3.0.0 * Add ESP.getCoreVersion() and update ESP.getChipModel() * Update timer hal for the latest 5.1 * Use separate RX and TX buffer sizes in HTTP client optimizes download by allowing up to 4K packets to be received * Rename clock tree enum name in latest 5.1 * ESP32-H4 support was removed in ESP-IDF v5.1 * IDF release/v5.1 2004bf4e11 (#8165) * Deinit previous bus first (#8180) * TIMER - add timer_started flag, fix timerEnd() + timer HW test (#8135) * Add timer_started flag and stop before disable * Fix timer HW test * TOUCH - Peripheral manager implementation (#8129) * Touch periman implemented * Deinit previous bus first * LEDC Refactoring - Peripheral manager implemented (#8126) * LEDC periman implementation * Fix examples * Rework tone * Update ledc docs * fix missing bracket * Update analog funtions esp32-hal.h * Update CameraWebServer example * Fix HiFreq_ADC example * minor fixes - typos * Avoid calling tone/notone when tone already runs on dif. pin * Remove unused channels_resolution * GPIO - Peripheral manager implementation (#8179) * periman-implementation * fix RGB_BUILTIN and remove space * Enforces more consistency into Peripheral Manager (#8188) * Avoid log_i() message the first time a bus is assigned * Prevent operation with ESP32_BUS_TYPE_INIT * keeps coding style * do not print messages on INIT bus type * [Arduino Core 3.0.0] RMT IDF5.1 Refactoring (#7994) * RMT IDF5.1 refactoring * Fixes initial value setting * removed rmtRead() with user callback * simplify/remove Read data structure * Deep API simplification * fixes the examples * fix rmt.h * adds support to APB different frequencies * fixes CI and not defined RGB_BUILTIN * new RMT API and examples * fixing commentaties * Update esp32-hal-rgb-led.c * changes Filter API * Fixes example with Filter API * Update PlatformIO scripts for the upcoming 3.0 core (#8183) * Update PlatformIO scripts for the upcoming 3.0 core * Dynamically select proper framework-arduinoespressif32-libs package With this change the dev-platform will be dynamically configured to pull the latest .zip package with precompiled libraries from extracted from package_esp32_index.template.json * free memory on detach (#8264) * SPI - Peripheral manager implementation (#8255) * spi periman implementation * fix header file * remove unused struct * fix missing braces * Update esp32-hal-rmt.c (#8216) Optimizing Peripheral Manager Test * I2C - Peripheral manager implementation (#8220) * i2c-master periman initial commit * i2c-master make detachbus static + comment remove * i2c-slave periman implementation * SetPinBus to INIT on i2cDeinits * Fix slave pins deinit * remove dbg logs * set ret to ESP_FAIL instead of returning * Fix warnings in hal-spi caused by pariman transition * Update esptool.py to version 4.6 * Add platform support for ESP_SR * Add USB Type and valid pin check to periman * replace bus with spi->num+1 (#8279) * Remove default pins from SPI HAL * Add commented out handlers for esptool.js in TinyUSB CDC For future use * Add build defines for host os and fqbn (for debug purposes) * Provide proper memory caps total size * Update Esp.cpp * SDMMC - Peripheral manager implementation (#8289) * sdmmc periman implemented * save pins when SOC_SDMMC_USE_IOMUX * IDF release/v5.1 4bc762621d (#8292) * Adds missing pinMode (#8312) * Adds missing pinMode The example code lacks a pinMode() to initialize the GPIO 0 (button). In Arduino Core 3.0.0, it prints an error message when trying to read a not initialized GPIO. * Update KeyboardLogout.ino Adds <buttonPin> to keep code standard * Update KeyboardReprogram.ino Adds <buttonPin> to keep code standard * LEDC Fade implementation (#8338) * fade API + pointer fixes * Add fade api * Add fade example * update ledc docs * remove unused variables * fix path to example * Adds USB to Peripheral Manager - Arduino Core 3.0.0 (#8335) * ETHERNET - Peripheral manager implementation (#8297) * Peripheral manager implemented * remove unused variable * Add all RMII pins * fix typo * Adds HardwareSerial to Peripheral Manager Arduino 3.0.0 (#8328) * Do not limit ETHERNET in periman to only ESP32. SPI is also an option * Initial support for ESP32-C6 (#8337) * Add checks for SOC defines (#8351) * Add checks for SOC defines * Add SoC checks to BLE library * fix i2c compilation error * fix wrong placement of include * add check to SPI library * add check to USB library * add checks to Wire library * Feature/esp32h2 support (#8373) * Initial support for ESP32H2 * Additional changes for ESP32H2 * Update libs for ESP32H2 * Fix flashing on ESP32-H2 * Fix GPIO Configs for ESP32-C6 and ESP32-H2 * Update Timer test sketch * Fix upload flash parameters * Use ets_write_char_uart instead of ets_printf in log_printfv * Print full chip report when log level is sufficient (#8282) * ESP32-C3 does not have ets_write_char_uart * Fix BLE gap event name * HW Testing - Pytest update (#8389) * update tests requirements * remove already handled components * Update version of pytest * Add missing ESP32-H2 to hil.yml * Updated FreeRTOS names (#8418) * HW Testing - ESP32-C6 + ESP32-H2 fixes (#8404) * add C6/H2 to tests cfg.json * remove , * workflow runs-on runner by matrix * Add need for arduino tag to select runner * Add cryptography to requirements.txt * Removed duplicate TX1 define for H2 (#8402) * Fix broken examples * Fixes RMT filter & idle timing and setup (#8359) * Fixes Filter and Idle parameter to uint32 * Fixes Filter and Idle setup * Fixes it to 5.1Libs branch * fix RMT CLK source and Filter API * fixes missing ; * fixes missing ; * fixes RMT example * IDF release/v5.1 a7b62bbcaf (#8438) * Add workflow to build executables from python scripts (#8290) * Add workflow to build executables from python scripts * Push binary to tools * Enable executable signing on Windows * Update get.py * Push binary to tools * Try with multiple files * Try more actions * Try powershell * Restore tools so they do not get rebuilt * Finalize scripts * Push binary to tools * App rollback should be after PSRAM is initialized * Correcting RX1 to GPIO4 and TX1 to GPIO5 to be consistent with documentation. Previous pin use works but is inconsistent with C6 docs. * Fixes Memory Leak (#8486) * fixes preprocessor test (#8485) * fixes preprocessor test When using `#define USE_SOFT_AP` Change `&& not USE_SOFT_AP` ==> `&& !defined(USE_SOFT_AP)` * Adds any BLE capable device in WiFiProv.ino Removing ESP32 restriction for BLE Provisioning. * fix flash mode read out for C6 * Add option for custom partitions without restrictions * SD_MMC update (#8298) * Updated SD_MMC lib and examples * Removed getter implementation and commented usage in examples * squashed updates * IDF release/v5.1 f0437b945f (#8599) * Update package_esp32_index.template.json * Fix printf format build error in BTAdvertisedDeviceSet.cpp --------- Co-authored-by: Pedro Minatel <pedro.minatel@espressif.com> Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> Co-authored-by: Ha Thach <thach@tinyusb.org> Co-authored-by: Martin Turski <quiret@vfemail.net> Co-authored-by: raviypujar <raviypujar@gmail.com> Co-authored-by: Jason2866 <24528715+Jason2866@users.noreply.github.com> Co-authored-by: Tomáš Pilný <34927466+PilnyTomas@users.noreply.github.com> Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Co-authored-by: Daniel Berlin <dberlin@dberlin.org> Co-authored-by: Nima Askari (نیما عسکری) <nimaltd@yahoo.com> Co-authored-by: rtpmsys <106180646+rtpmsys@users.noreply.github.com> Co-authored-by: bytiful <55647551+bytiful@users.noreply.github.com> Co-authored-by: tmfarrington <tmfarrington@users.noreply.github.com> Co-authored-by: Krzysiek S <chris.streh@gmail.com> Co-authored-by: surt <carl.olsson@gmail.com> Co-authored-by: Max Scheffler <max.scheffler@pm.me> Co-authored-by: Clemens Kirchgatterer <clemens@1541.org> Co-authored-by: Peter Pan's Techland <twinkle-pirate@hotmail.com> Co-authored-by: Roman <programmeofficemilkyway@gmail.com> Co-authored-by: Eistee <Eistee82@users.noreply.github.com> Co-authored-by: David McCurley <44048235+mrengineer7777@users.noreply.github.com> Co-authored-by: Gaya3N25 <30388176+Gaya3N25@users.noreply.github.com> Co-authored-by: renebohne <rene.bohne@gmail.com> Co-authored-by: Olivér Remény <25034625+remenyo@users.noreply.github.com> Co-authored-by: davidk88 <david.kotar@gmail.com> Co-authored-by: Vojtěch Bartoška <76958047+VojtechBartoska@users.noreply.github.com> Co-authored-by: James Armstrong <jamesarmstrong3@me.com> Co-authored-by: Valerii Koval <valeros@users.noreply.github.com> Co-authored-by: Peter G. Jensen <root@petergjoel.dk>
2023-10-05 11:54:25 +00:00
return uartGetBaudRate(_uart);
}
HardwareSerial::operator bool() const {
return uartIsDriverInstalled(_uart);
}
void HardwareSerial::setRxInvert(bool invert) {
uartSetRxInvert(_uart, invert);
}
// negative Pin value will keep it unmodified
// can be called after or before begin()
bool HardwareSerial::setPins(int8_t rxPin, int8_t txPin, int8_t ctsPin, int8_t rtsPin) {
// map logical pins to GPIO numbers
rxPin = digitalPinToGPIONumber(rxPin);
txPin = digitalPinToGPIONumber(txPin);
ctsPin = digitalPinToGPIONumber(ctsPin);
rtsPin = digitalPinToGPIONumber(rtsPin);
Add support for the Arduino Nano ESP32 on 3.x branch (#8909) * [pin_remap 1/3] platform: define ARDUINO_CORE_BUILD when building core files * [pin_remap 2/3] core,libs: add pin remap hooks * platform: remove previous build options if file is missing "touch" would create the file if not present, but not delete its contents if a previous run left the file in the build dir. * platform: make debug_custom.json file customizable by board * platform: fix default debug prefix "debug.toolchain.prefix" must end with a dash, since only the tool name is appended to this string. The reason this is not a major issue is that the "debug_custom.json" file (copied in the sketch directory when debugging is enabled) forces its own prefix. And to make things more interesting, the "toolchainPrefix" entry in that file should _not_ end with a dash. * [pin_remap 3/3]: add Arduino Nano ESP32 board * fix: periman: include it by default, add include guard * fix: io_pin_remap: adjust for new perimap APIs * fix: libraries: manually handled pin remapping files Previously all libraries invoked either high-level APIs (transparently remapped, like the user sketch) or low-level ESP-IDF calls (where the remap to GPIO numbers had to be added manually). Since 3.x, some of these are mixed (for example, periman* APIs are remapped, while soc* are not). This must be handled by disabling the automatic API remapping and making sure all calls use GPIO numbers. * feat: show remapped pins in chip debug reports --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Co-authored-by: Me No Dev <me-no-dev@users.noreply.github.com>
2023-11-29 10:43:59 +00:00
// uartSetPins() checks if pins are valid and, if necessary, detaches the previous ones
return uartSetPins(_uart_nr, rxPin, txPin, ctsPin, rtsPin);
}
// Enables or disables Hardware Flow Control using RTS and/or CTS pins
// must use setAllPins() in order to set RTS/CTS pins
// SerialHwFlowCtrl = UART_HW_FLOWCTRL_DISABLE, UART_HW_FLOWCTRL_RTS,
// UART_HW_FLOWCTRL_CTS, UART_HW_FLOWCTRL_CTS_RTS
bool HardwareSerial::setHwFlowCtrlMode(SerialHwFlowCtrl mode, uint8_t threshold) {
return uartSetHwFlowCtrlMode(_uart, mode, threshold);
ESP-IDF v5.1 (#7733) * Initial changes to compile under ESP-IDF v5.1 * Initial import for ESP-IDF v5.1 libs * Update toolchain * Update esp32-hal-psram.c * Add missing LDs * Update platform.txt * Stop some CI jobs, because they will always fail * Fix examples * Update app_httpd.cpp * Update ResetReason.ino * Warnings fixes * Added the example guideline and template (#7665) * Added the example guideline and template * PR review changes with some typos and grammar fixes * Changes according to the PR review * Added ESP32-S3 link to the datasheet (#7738) * Update HiFreq_ADC.ino * Replace periph_ctrl.h use because of deprecation * Replace esp_spi_flash.h use because of deprecation * Add includes to male mDNS::enableWorkstation compile * Fix ssl_client mbedtls_pk_parse_key callback * Update temperature sensor driver * Allow sketch_utils to compile with arduino-cli * Run CI with arduino-cli * Fix arduino-cli CI build on Windows * Refactor platform.txt to not use components installed through the board manager when running from git * Initial Peripheral Manager Implementation * Update SigmaDelta driver to use the new ESP-IDF driver API * Small improvements to peripheral manager and SigmaDelta * Remove deleted function from SigmaDelta header * Update DAC driver to use the new ESP-IDF driver API * Adds softAp(String) to make it compatible with ESP8266 (#7801) * Fix commentary (#7800) Minor fix based on observation done in https://github.com/espressif/arduino-esp32/issues/7795#issuecomment-1416868611 * add adafruit new board feather esp32s2 reserve tft (#7794) * bugfix: add <stdint.h> for uint8_t to avoid compilation failure (GCC 11.2.0) (#7744) * Adding 3rd party boards for VALTRACK-V4-VTS-ESP32-C3 & VALTRACK-V4-MFW-ESP32-C3 (#7735) * Added VALTRACK-V4-VTS-ESP32-C3 board definition Created pins_arduino.h & made changes to boards.txt with necessary changes * Modified the URL * Renamed json * renamed all auRL * Adding VALTRACK-V4 series board definitions Added VALTRACK-V4-VTS-ESP32C3 & VALTRACK-V4-MFW-ESP32-C3 board variants * Adding VALTRACK-V4 series board definitions Added VALTRACK-V4-VTS-ESP32C3 & VALTRACK-V4-MFW-ESP32-C3 board variants * Reverted package_esp32_index.template.json restored package_esp32_index.template.json from edits * Reverted package_esp32_index.template.json Added new line to package_esp32_index.template.json * Update Platformio CI (#7725) * WiFiClient example fix (#7711) * Modified WiFiClient example to use thingspeak instead of non-functionig sparkfun * Moved instructions to README * Fixed spelling * Added link to S3 datasheet --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Mirror update from Heltec repository (#7709) Heltec updated the I2C pins in https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/commit/b10f4bf85d13fd01be80dcdb0eb59e6a8c8ba19a * Fixes BLE data printing (#7699) * Fixes BLE data printing BLE data has no '\0' terminator, therefore it can't be printed as a regular C string. This fix just prints the BLE data based on its length. * Simplify printing to a single call * split menu options + lora_32_V3 fix (#7697) * Change header gaurd name (#7696) * Fix Name (#7691) Wrong name in definitions. * Fix error in WiFiClient.cpp where the connect function fails for timeouts below 1 second (#7686) * Update WiFiClient.cpp This change will allow specifying connect timeouts below 1 second. Without this change, if connect timeouts under 1 second are given, the connect defaults to 0ms and fails. This will also allow timeouts in fractions of seconds, e.g. 1500ms. Without this change, connect timeouts are truncated to full second increments. * Make parameter timeout_ms clear * Change connection timeout_ms name for clarity --------- Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * fixed the function header (#7674) * fixed the function header * fixed function name and paramaters --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Ticker fix solving #6155 (#7664) * Wrapped Ticker functions with #pragma disabling -Wcast-function-type * Revert "Wrapped Ticker functions with #pragma disabling -Wcast-function-type" This reverts commit 160be7e67a10d01b6e44c4bf2521c0ccd6348976. * Fixed Ticker example * Modified Ticker example * Fixed LED_BUILTIN err for ESP32 --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * setPins fix ESP32 "specified pins are not supported by this chip." (#7646) [ESP32: SDMMCFS::begin hardcodes the usage of slot 1, only check if the pins match slot 1 pins.] setPins() was testing pins D1, D2 and D3 all against D1 ... fine in 1 pin mode when all are -1 not so much if you're trying to get 4 pin mode working. I now see this function doesn't really do anything on the ESP32...accept now correctly checks that you are trying to use the slot 1 pins. Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> * Allow passing IP as connect method parameter in WiFiClientSecure and skip unnecessary host-ip conversions (#7643) * Add LED_BUILTIN* definitions and initialization for LEDs to stop them floating. (#7636) Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * Expand path to tinuf2 image when checking existence in platformio-build.py (#7631) * Expand path to tinuf2 image when checking existence * More isFiles fixed * Remove (useless) trailing semicolon from Print.cpp (#7622) * ADD: New variant Edgebox-ESP-100 (#7771) * ADD: New variant Edgebox-ESP-100 * FIX: Edgebox-ESP-100 Board.txt usb mode option change back to default value as ESP32S3 * Add Crabik Slot ESP32-S3 board (#7790) * Added Crabik Slot ESP32-S3 * Adding CPU frequency settings and removing excess from partition scheme settings * new variant LilyGO T-Display-S3 (#7763) * new variant LilyGO T-Display-S3 https://github.com/Xinyuan-LilyGO/T-Display-S3 * Add boards.txt definition --------- Co-authored-by: Me No Dev <me-no-dev@users.noreply.github.com> * Update get.py to support Apple ARM64 * Update package_esp32_index.template.json * WString Return bool (#7774) * Add Roboheart Hercules development board to the esp32-core (#7672) * added Roboheart Hercules pin definitions and board.txt entries * added package_roboheat.json for prototyping * Roboheart Hercules pins * Updated the pins * Delete package_roboheart.json * Requested changes --------- Co-authored-by: renebohne <rene.bohne@gmail.com> * Reword "ESP-IDF as Component" (#7812) I think "Arduino as an ESP-IDF component" or just "As ESP-IDF component" instead of "ESP-IDF as Component" is more correct way to name the link. 1. "ESP-IDF as Component" would imply that ESP-IDF is some sort of library for Arduino, which is (IMO) misleading, because it's true the other way around. 2. It's written as "Arduino as an ESP-IDF component" on the webpage it points to as well. - Also I removed the capitalization from "Component" as I have not found a reason why is it capitalized. * add new board Adafruit Feather ESP32-S3 Reverse TFT (#7811) * Multi threading examples (tasks, queues, semaphores, mutexes) (#7660) * Moved and renamed example ESP32/FreeRTOS to MultiThreading/BasicMultiThreading * Added dummy files * Modified original example * Fixed BasicMultiThreading.ino * Added Example demonstrating use of queues * Extended info in BasicMultiThreading * Renamed Queues to singular Queue * Added Mutex example * Added Semaphore example * Moved info from example to README * Moved doc from Mutex to README * Added Queue README * Removed unecesary text * Fixed grammar * Increased stack size for Sempahore example * Added headers into .ino files * Added word Example at the end of title in README * removed unused line * Added forgotten README * Modified BasicMultiThreading example * Added missing S3 entry in README * moved location * Update ESP-IDF libs * Update CMakeLists.txt * Update esptool to v4.4 * Add function timerAttachInterruptFlag (#7809) * Update esptool to v4.5 * ADC refactoring (#7827) * Adc refactored + periman implementation Peripheral manager still needs to be checked if the implementation is right. * switched to working solution for milivolts read * Periman detachbus fix * coding style * fix CI warnings * fix FreeRTOS example * Update ETH.cpp * Update FunctionalInterruptStruct.ino * Update package_esp32_index.template.json * Update package_esp32_index.template.json * Fixes for the latest IDF v5.1 * update esp-idf libs and toolchain * Turn OFF auto crystal frequency for ESP32 (needed by TWAI) * Update examples * Switch build to mostly use flags from files Includes can not be done this way * Reorganize flag files * Optimize chip build flags further * Revert defines from file. MBEDTLS_CONFIG_FILE does not properly expand * Add support for includes and defines from file * Replace old sdk path references in platform.txt * use gcc-ar (#8013) * Makes F_CPU generic for all SoC (#8007) Based on CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ that is correctly defined in the sdkconfig file for each SoC. * TIMER refactoring (#7904) * refactor using GPtimer * Updated timer HW test * fix examples * Add v2.0.7 in issue template (#7871) * refactor using GPtimer * Updated timer HW test * fix examples * Revert "Add v2.0.7 in issue template (#7871)" This reverts commit fcc3b17d62ff57861f8913ca1f142fd5163b7457. * Update upload-artifact to v3 in HW CI * Revert "Update upload-artifact to v3 in HW CI" This reverts commit 1ba228071718ba37c4e26d98db22f77b2a7364a6. * replace resolution with frequency * remove count_down option * countup removed from examples + header * Refactored timer object * code cleanup + examples and tests fixes * TimerAlarm fix --------- Co-authored-by: Vojtěch Bartoška <76958047+VojtechBartoska@users.noreply.github.com> * [Docs] ADC and Timer API Update (+some docs fixes) (#7906) * updated docs * remove hall sensor docs Removed Hall sensor documentation as its no longer supported in IDF-5 * Fixed ESPNow examples location in docs * Last timer refactored API + gpio small fix * AlarmWrite fix * Fixes APLL/PLL with RTC Frequency (#8025) log_d() was displaying APLL for any SoC, but S3 and C3 has not such option, causing compilation errors. * Update IDF libs and fix OPI PSRAM on S3 * Add setMode function HardwareSerial.c to set the esp32 uart mode for use with RS485 auto RTS (#7935) * Added setMode function to set the esp32 uart mode Used to set the esp32 uart mode for use with RS485 Half Duplex and the auto RTS pin mode. This will set/clear the RTS pin output to control the RE/DE pin on most RS485 chips. * Add Success (bool) return in some functions * Add Success (bool) return code to some functions * Add Success (bool) return to some functions * Add Success (bool) return to some functions * Fix uartSetRxTimeout return type --------- Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> * Add support for esp-elf-gdb * WFG Crashfix (#8044) * Update component libs * IDF release/v5.1 (#8061) * IDF release/v5.1 bb9200acec * Update Esp.cpp * IDF release/v5.1 420ebd208a * Update esp32-hal-psram.c * Switch SDK to be an external package * fix path (#8096) * Makes UART work at any APB Frequency (#8097) Fixes HardwareSerial to work with IDF 5.1 on any CPU/APB Frequency (240MHz to 10MHZ), including user created low power modes. * Add required callbacks for TinyUSB DFU * Update version to 3.0.0 * Add ESP.getCoreVersion() and update ESP.getChipModel() * Update timer hal for the latest 5.1 * Use separate RX and TX buffer sizes in HTTP client optimizes download by allowing up to 4K packets to be received * Rename clock tree enum name in latest 5.1 * ESP32-H4 support was removed in ESP-IDF v5.1 * IDF release/v5.1 2004bf4e11 (#8165) * Deinit previous bus first (#8180) * TIMER - add timer_started flag, fix timerEnd() + timer HW test (#8135) * Add timer_started flag and stop before disable * Fix timer HW test * TOUCH - Peripheral manager implementation (#8129) * Touch periman implemented * Deinit previous bus first * LEDC Refactoring - Peripheral manager implemented (#8126) * LEDC periman implementation * Fix examples * Rework tone * Update ledc docs * fix missing bracket * Update analog funtions esp32-hal.h * Update CameraWebServer example * Fix HiFreq_ADC example * minor fixes - typos * Avoid calling tone/notone when tone already runs on dif. pin * Remove unused channels_resolution * GPIO - Peripheral manager implementation (#8179) * periman-implementation * fix RGB_BUILTIN and remove space * Enforces more consistency into Peripheral Manager (#8188) * Avoid log_i() message the first time a bus is assigned * Prevent operation with ESP32_BUS_TYPE_INIT * keeps coding style * do not print messages on INIT bus type * [Arduino Core 3.0.0] RMT IDF5.1 Refactoring (#7994) * RMT IDF5.1 refactoring * Fixes initial value setting * removed rmtRead() with user callback * simplify/remove Read data structure * Deep API simplification * fixes the examples * fix rmt.h * adds support to APB different frequencies * fixes CI and not defined RGB_BUILTIN * new RMT API and examples * fixing commentaties * Update esp32-hal-rgb-led.c * changes Filter API * Fixes example with Filter API * Update PlatformIO scripts for the upcoming 3.0 core (#8183) * Update PlatformIO scripts for the upcoming 3.0 core * Dynamically select proper framework-arduinoespressif32-libs package With this change the dev-platform will be dynamically configured to pull the latest .zip package with precompiled libraries from extracted from package_esp32_index.template.json * free memory on detach (#8264) * SPI - Peripheral manager implementation (#8255) * spi periman implementation * fix header file * remove unused struct * fix missing braces * Update esp32-hal-rmt.c (#8216) Optimizing Peripheral Manager Test * I2C - Peripheral manager implementation (#8220) * i2c-master periman initial commit * i2c-master make detachbus static + comment remove * i2c-slave periman implementation * SetPinBus to INIT on i2cDeinits * Fix slave pins deinit * remove dbg logs * set ret to ESP_FAIL instead of returning * Fix warnings in hal-spi caused by pariman transition * Update esptool.py to version 4.6 * Add platform support for ESP_SR * Add USB Type and valid pin check to periman * replace bus with spi->num+1 (#8279) * Remove default pins from SPI HAL * Add commented out handlers for esptool.js in TinyUSB CDC For future use * Add build defines for host os and fqbn (for debug purposes) * Provide proper memory caps total size * Update Esp.cpp * SDMMC - Peripheral manager implementation (#8289) * sdmmc periman implemented * save pins when SOC_SDMMC_USE_IOMUX * IDF release/v5.1 4bc762621d (#8292) * Adds missing pinMode (#8312) * Adds missing pinMode The example code lacks a pinMode() to initialize the GPIO 0 (button). In Arduino Core 3.0.0, it prints an error message when trying to read a not initialized GPIO. * Update KeyboardLogout.ino Adds <buttonPin> to keep code standard * Update KeyboardReprogram.ino Adds <buttonPin> to keep code standard * LEDC Fade implementation (#8338) * fade API + pointer fixes * Add fade api * Add fade example * update ledc docs * remove unused variables * fix path to example * Adds USB to Peripheral Manager - Arduino Core 3.0.0 (#8335) * ETHERNET - Peripheral manager implementation (#8297) * Peripheral manager implemented * remove unused variable * Add all RMII pins * fix typo * Adds HardwareSerial to Peripheral Manager Arduino 3.0.0 (#8328) * Do not limit ETHERNET in periman to only ESP32. SPI is also an option * Initial support for ESP32-C6 (#8337) * Add checks for SOC defines (#8351) * Add checks for SOC defines * Add SoC checks to BLE library * fix i2c compilation error * fix wrong placement of include * add check to SPI library * add check to USB library * add checks to Wire library * Feature/esp32h2 support (#8373) * Initial support for ESP32H2 * Additional changes for ESP32H2 * Update libs for ESP32H2 * Fix flashing on ESP32-H2 * Fix GPIO Configs for ESP32-C6 and ESP32-H2 * Update Timer test sketch * Fix upload flash parameters * Use ets_write_char_uart instead of ets_printf in log_printfv * Print full chip report when log level is sufficient (#8282) * ESP32-C3 does not have ets_write_char_uart * Fix BLE gap event name * HW Testing - Pytest update (#8389) * update tests requirements * remove already handled components * Update version of pytest * Add missing ESP32-H2 to hil.yml * Updated FreeRTOS names (#8418) * HW Testing - ESP32-C6 + ESP32-H2 fixes (#8404) * add C6/H2 to tests cfg.json * remove , * workflow runs-on runner by matrix * Add need for arduino tag to select runner * Add cryptography to requirements.txt * Removed duplicate TX1 define for H2 (#8402) * Fix broken examples * Fixes RMT filter & idle timing and setup (#8359) * Fixes Filter and Idle parameter to uint32 * Fixes Filter and Idle setup * Fixes it to 5.1Libs branch * fix RMT CLK source and Filter API * fixes missing ; * fixes missing ; * fixes RMT example * IDF release/v5.1 a7b62bbcaf (#8438) * Add workflow to build executables from python scripts (#8290) * Add workflow to build executables from python scripts * Push binary to tools * Enable executable signing on Windows * Update get.py * Push binary to tools * Try with multiple files * Try more actions * Try powershell * Restore tools so they do not get rebuilt * Finalize scripts * Push binary to tools * App rollback should be after PSRAM is initialized * Correcting RX1 to GPIO4 and TX1 to GPIO5 to be consistent with documentation. Previous pin use works but is inconsistent with C6 docs. * Fixes Memory Leak (#8486) * fixes preprocessor test (#8485) * fixes preprocessor test When using `#define USE_SOFT_AP` Change `&& not USE_SOFT_AP` ==> `&& !defined(USE_SOFT_AP)` * Adds any BLE capable device in WiFiProv.ino Removing ESP32 restriction for BLE Provisioning. * fix flash mode read out for C6 * Add option for custom partitions without restrictions * SD_MMC update (#8298) * Updated SD_MMC lib and examples * Removed getter implementation and commented usage in examples * squashed updates * IDF release/v5.1 f0437b945f (#8599) * Update package_esp32_index.template.json * Fix printf format build error in BTAdvertisedDeviceSet.cpp --------- Co-authored-by: Pedro Minatel <pedro.minatel@espressif.com> Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com> Co-authored-by: Ha Thach <thach@tinyusb.org> Co-authored-by: Martin Turski <quiret@vfemail.net> Co-authored-by: raviypujar <raviypujar@gmail.com> Co-authored-by: Jason2866 <24528715+Jason2866@users.noreply.github.com> Co-authored-by: Tomáš Pilný <34927466+PilnyTomas@users.noreply.github.com> Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Co-authored-by: Daniel Berlin <dberlin@dberlin.org> Co-authored-by: Nima Askari (نیما عسکری) <nimaltd@yahoo.com> Co-authored-by: rtpmsys <106180646+rtpmsys@users.noreply.github.com> Co-authored-by: bytiful <55647551+bytiful@users.noreply.github.com> Co-authored-by: tmfarrington <tmfarrington@users.noreply.github.com> Co-authored-by: Krzysiek S <chris.streh@gmail.com> Co-authored-by: surt <carl.olsson@gmail.com> Co-authored-by: Max Scheffler <max.scheffler@pm.me> Co-authored-by: Clemens Kirchgatterer <clemens@1541.org> Co-authored-by: Peter Pan's Techland <twinkle-pirate@hotmail.com> Co-authored-by: Roman <programmeofficemilkyway@gmail.com> Co-authored-by: Eistee <Eistee82@users.noreply.github.com> Co-authored-by: David McCurley <44048235+mrengineer7777@users.noreply.github.com> Co-authored-by: Gaya3N25 <30388176+Gaya3N25@users.noreply.github.com> Co-authored-by: renebohne <rene.bohne@gmail.com> Co-authored-by: Olivér Remény <25034625+remenyo@users.noreply.github.com> Co-authored-by: davidk88 <david.kotar@gmail.com> Co-authored-by: Vojtěch Bartoška <76958047+VojtechBartoska@users.noreply.github.com> Co-authored-by: James Armstrong <jamesarmstrong3@me.com> Co-authored-by: Valerii Koval <valeros@users.noreply.github.com> Co-authored-by: Peter G. Jensen <root@petergjoel.dk>
2023-10-05 11:54:25 +00:00
}
// Sets the uart mode in the esp32 uart for use with RS485 modes
// HwFlowCtrl must be disabled and RTS pin set
// SerialMode = UART_MODE_UART, UART_MODE_RS485_HALF_DUPLEX, UART_MODE_IRDA,
// or testing mode: UART_MODE_RS485_COLLISION_DETECT, UART_MODE_RS485_APP_CTRL
bool HardwareSerial::setMode(SerialMode mode) {
return uartSetMode(_uart, mode);
}
// minimum total RX Buffer size is the UART FIFO space (128 bytes for most SoC) + 1. IDF imposition.
size_t HardwareSerial::setRxBufferSize(size_t new_size) {
if (_uart) {
log_e("RX Buffer can't be resized when Serial is already running. Set it before calling begin().");
return 0;
}
if (new_size <= SOC_UART_FIFO_LEN) {
log_w("RX Buffer set to minimum value: %d.", SOC_UART_FIFO_LEN + 1); // ESP32, S2, S3 and C3 means higher than 128
new_size = SOC_UART_FIFO_LEN + 1;
}
_rxBufferSize = new_size;
return _rxBufferSize;
}
// minimum total TX Buffer size is the UART FIFO space (128 bytes for most SoC).
size_t HardwareSerial::setTxBufferSize(size_t new_size) {
if (_uart) {
log_e("TX Buffer can't be resized when Serial is already running. Set it before calling begin().");
return 0;
}
if (new_size <= SOC_UART_FIFO_LEN) {
log_w("TX Buffer set to minimum value: %d.", SOC_UART_FIFO_LEN); // ESP32, S2, S3 and C3 means higher than 128
_txBufferSize = 0; // it will use just UART FIFO with SOC_UART_FIFO_LEN bytes (128 for most SoC)
return SOC_UART_FIFO_LEN;
}
// if new_size is higher than SOC_UART_FIFO_LEN, TX Ringbuffer will be active and it will be used to report back "availableToWrite()"
_txBufferSize = new_size;
return new_size;
}