Skip to content

Fixing interrupts in LEDC and other minor fixes #54

New issue

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

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

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Jan 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/scripts/install-arduino-core-esp32.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ if [ ! -d "$ARDUINO_ESP32_PATH" ]; then
pip install requests > /dev/null
fi

if [ "$GITHUB_REPOSITORY" == "espressif/arduino-esp32" ]; then
if [ ! -z "$GITHUB_REPOSITORY" ]; then
echo "Linking Core..."
ln -s $GITHUB_WORKSPACE esp32
else
Expand Down
23 changes: 19 additions & 4 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
@@ -1,27 +1,42 @@
name: ESP32 Arduino CI

on:
workflow_dispatch:
push:
branches:
- master
- release/*
pull_request:

concurrency:
group: build-${{github.event.pull_request.number || github.ref}}
cancel-in-progress: true

jobs:

# Ubuntu
build-arduino-linux:
name: Arduino ${{ matrix.chunk }} on ubuntu-latest
runs-on: ubuntu-latest
strategy:
matrix:
chunk: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Cache tools
id: cache-linux
uses: actions/cache@v2
with:
path: |
./tools/dist
~/arduino_ide
key: ${{ runner.os }}-${{ hashFiles('package/package_esp32_index.template.json',
'tools/get.py',
'.github/scripts/install-arduino-ide.sh') }}
- name: Build Sketches
run: bash ./.github/scripts/on-push.sh ${{ matrix.chunk }} 15

Expand All @@ -32,7 +47,7 @@ jobs:
strategy:
matrix:
os: [windows-latest, macOS-latest]

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
Expand All @@ -48,7 +63,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ set(LIBRARY_SRCS
libraries/WebServer/src/Parsing.cpp
libraries/WebServer/src/detail/mimetable.cpp
libraries/WiFiClientSecure/src/ssl_client.cpp
libraries/WiFiClientSecure/src/esp_crt_bundle.c
libraries/WiFiClientSecure/src/WiFiClientSecure.cpp
libraries/WiFi/src/WiFiAP.cpp
libraries/WiFi/src/WiFiClient.cpp
Expand Down
149 changes: 147 additions & 2 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7349,7 +7349,7 @@ wt32-eth01.build.bootloader_addr=0x1000
wt32-eth01.build.target=esp32
wt32-eth01.build.mcu=esp32
wt32-eth01.build.core=esp32
wt32-eth01.build.variant=wt32-eth0
wt32-eth01.build.variant=wt32-eth01
wt32-eth01.build.board=WT32_ETH01

wt32-eth01.build.f_cpu=240000000L
Expand Down Expand Up @@ -10953,4 +10953,149 @@ sonoff_dualr3.menu.DebugLevel.debug.build.code_debug=4
sonoff_dualr3.menu.DebugLevel.verbose=Verbose
sonoff_dualr3.menu.DebugLevel.verbose.build.code_debug=5

##############################################################
##############################################################
lionbit.name=Lion:Bit Dev Board

lionbit.upload.tool=esptool_py
lionbit.upload.maximum_size=1310720
lionbit.upload.maximum_data_size=327680
lionbit.upload.flags=
lionbit.upload.extra_flags=

lionbit.serial.disableDTR=true
lionbit.serial.disableRTS=true

lionbit.build.tarch=xtensa
lionbit.build.bootloader_addr=0x1000
lionbit.build.target=esp32
lionbit.build.mcu=esp32
lionbit.build.core=esp32
lionbit.build.variant=lionbit
lionbit.build.board=Lion:Bit_Dev_Board

lionbit.build.f_cpu=240000000L
lionbit.build.flash_size=4MB
lionbit.build.flash_freq=80m
lionbit.build.flash_mode=dio
lionbit.build.boot=dio
lionbit.build.partitions=default
lionbit.build.defines=
lionbit.build.loop_core=
lionbit.build.event_core=


lionbit.menu.PartitionScheme.default=Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
lionbit.menu.PartitionScheme.default.build.partitions=default
lionbit.menu.PartitionScheme.defaultffat=Default 4MB with ffat (1.2MB APP/1.5MB FATFS)
lionbit.menu.PartitionScheme.defaultffat.build.partitions=default_ffat
lionbit.menu.PartitionScheme.default_8MB=8M Flash (3MB APP/1.5MB FAT)
lionbit.menu.PartitionScheme.default_8MB.build.partitions=default_8MB
lionbit.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336
lionbit.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS)
lionbit.menu.PartitionScheme.minimal.build.partitions=minimal
lionbit.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS)
lionbit.menu.PartitionScheme.no_ota.build.partitions=no_ota
lionbit.menu.PartitionScheme.no_ota.upload.maximum_size=2097152
lionbit.menu.PartitionScheme.noota_3g=No OTA (1MB APP/3MB SPIFFS)
lionbit.menu.PartitionScheme.noota_3g.build.partitions=noota_3g
lionbit.menu.PartitionScheme.noota_3g.upload.maximum_size=1048576
lionbit.menu.PartitionScheme.noota_ffat=No OTA (2MB APP/2MB FATFS)
lionbit.menu.PartitionScheme.noota_ffat.build.partitions=noota_ffat
lionbit.menu.PartitionScheme.noota_ffat.upload.maximum_size=2097152
lionbit.menu.PartitionScheme.noota_3gffat=No OTA (1MB APP/3MB FATFS)
lionbit.menu.PartitionScheme.noota_3gffat.build.partitions=noota_3gffat
lionbit.menu.PartitionScheme.noota_3gffat.upload.maximum_size=1048576
lionbit.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA/1MB SPIFFS)
lionbit.menu.PartitionScheme.huge_app.build.partitions=huge_app
lionbit.menu.PartitionScheme.huge_app.upload.maximum_size=3145728
lionbit.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS)
lionbit.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs
lionbit.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080
lionbit.menu.PartitionScheme.fatflash=16M Flash (2MB APP/12.5MB FAT)
lionbit.menu.PartitionScheme.fatflash.build.partitions=ffat
lionbit.menu.PartitionScheme.fatflash.upload.maximum_size=2097152
lionbit.menu.PartitionScheme.app3M_fat9M_16MB=16M Flash (3MB APP/9MB FATFS)
lionbit.menu.PartitionScheme.app3M_fat9M_16MB.build.partitions=app3M_fat9M_16MB
lionbit.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum_size=3145728
lionbit.menu.PartitionScheme.rainmaker=RainMaker
lionbit.menu.PartitionScheme.rainmaker.build.partitions=rainmaker
lionbit.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728

lionbit.menu.CPUFreq.240=240MHz (WiFi/BT)
lionbit.menu.CPUFreq.240.build.f_cpu=240000000L
lionbit.menu.CPUFreq.160=160MHz (WiFi/BT)
lionbit.menu.CPUFreq.160.build.f_cpu=160000000L
lionbit.menu.CPUFreq.80=80MHz (WiFi/BT)
lionbit.menu.CPUFreq.80.build.f_cpu=80000000L
lionbit.menu.CPUFreq.40=40MHz (40MHz XTAL)
lionbit.menu.CPUFreq.40.build.f_cpu=40000000L
lionbit.menu.CPUFreq.26=26MHz (26MHz XTAL)
lionbit.menu.CPUFreq.26.build.f_cpu=26000000L
lionbit.menu.CPUFreq.20=20MHz (40MHz XTAL)
lionbit.menu.CPUFreq.20.build.f_cpu=20000000L
lionbit.menu.CPUFreq.13=13MHz (26MHz XTAL)
lionbit.menu.CPUFreq.13.build.f_cpu=13000000L
lionbit.menu.CPUFreq.10=10MHz (40MHz XTAL)
lionbit.menu.CPUFreq.10.build.f_cpu=10000000L


lionbit.menu.FlashMode.dio=DIO
lionbit.menu.FlashMode.dio.build.flash_mode=dio
lionbit.menu.FlashMode.dio.build.boot=dio
lionbit.menu.FlashMode.qio=QIO
lionbit.menu.FlashMode.qio.build.flash_mode=dio
lionbit.menu.FlashMode.qio.build.boot=qio
lionbit.menu.FlashMode.qout=QOUT
lionbit.menu.FlashMode.qout.build.flash_mode=dout
lionbit.menu.FlashMode.qout.build.boot=qout
lionbit.menu.FlashMode.dout=DOUT
lionbit.menu.FlashMode.dout.build.flash_mode=dout
lionbit.menu.FlashMode.dout.build.boot=dout

lionbit.menu.FlashFreq.80=80MHz
lionbit.menu.FlashFreq.80.build.flash_freq=80m
lionbit.menu.FlashFreq.40=40MHz
lionbit.menu.FlashFreq.40.build.flash_freq=40m

lionbit.menu.FlashSize.4M=4MB (32Mb)
lionbit.menu.FlashSize.4M.build.flash_size=4MB
lionbit.menu.FlashSize.4M.build.partitions=default



lionbit.menu.UploadSpeed.115200=115200
lionbit.menu.UploadSpeed.115200.upload.speed=115200
lionbit.menu.UploadSpeed.256000.windows=256000
lionbit.menu.UploadSpeed.256000.upload.speed=256000
lionbit.menu.UploadSpeed.230400.windows.upload.speed=256000
lionbit.menu.UploadSpeed.230400=230400
lionbit.menu.UploadSpeed.230400.upload.speed=230400
lionbit.menu.UploadSpeed.460800.linux=460800
lionbit.menu.UploadSpeed.460800.macosx=460800
lionbit.menu.UploadSpeed.460800.upload.speed=460800


lionbit.menu.LoopCore.1=Core 1
lionbit.menu.LoopCore.1.build.loop_core=-DARDUINO_RUNNING_CORE=1
lionbit.menu.LoopCore.0=Core 0
lionbit.menu.LoopCore.0.build.loop_core=-DARDUINO_RUNNING_CORE=0

lionbit.menu.EventsCore.1=Core 1
lionbit.menu.EventsCore.1.build.event_core=-DARDUINO_EVENT_RUNNING_CORE=1
lionbit.menu.EventsCore.0=Core 0
lionbit.menu.EventsCore.0.build.event_core=-DARDUINO_EVENT_RUNNING_CORE=0

lionbit.menu.DebugLevel.none=None
lionbit.menu.DebugLevel.none.build.code_debug=0
lionbit.menu.DebugLevel.error=Error
lionbit.menu.DebugLevel.error.build.code_debug=1
lionbit.menu.DebugLevel.warn=Warn
lionbit.menu.DebugLevel.warn.build.code_debug=2
lionbit.menu.DebugLevel.info=Info
lionbit.menu.DebugLevel.info.build.code_debug=3
lionbit.menu.DebugLevel.debug=Debug
lionbit.menu.DebugLevel.debug.build.code_debug=4
lionbit.menu.DebugLevel.verbose=Verbose
lionbit.menu.DebugLevel.verbose.build.code_debug=5

##############################################################
2 changes: 2 additions & 0 deletions cores/esp32/esp32-hal-ledc.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ void ledcAttachPin(uint8_t pin, uint8_t chan)
.hpoint = 0
};
ledc_channel_config(&ledc_channel);

pinMode(pin,OUTPUT);
}

void ledcDetachPin(uint8_t pin)
Expand Down
4 changes: 4 additions & 0 deletions libraries/Ticker/src/Ticker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,7 @@ void Ticker::detach() {
_timer = nullptr;
}
}

bool Ticker::active() {
return esp_timer_is_active(_timer);
}
26 changes: 26 additions & 0 deletions libraries/WiFiClientSecure/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,32 @@ Then:

Please see the WiFiClientSecure example.

Using a bundle of root certificate authority certificates
---------------------------------------------------------
This method is similar to the single root certificate verfication above, but it uses a standard set of
root certificates from Mozilla to authenticate against, while the previous method only accepts a single
certificate for a given server. This allows the client to connect to all public SSL servers.

To use this feature in PlatformIO:
1. create a certificate bundle as described in the document below, or obtain a pre-built one you trust:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/protocols/esp_crt_bundle.htm
(gen_crt_bundle.py can be found in the /tools folder)
a. note: the full bundle will take up around 64k of flash space, but has minimal RAM usage, as only
the index of the certificates is kept in RAM
2. Place the bundle under the file name "data/cert/x509_crt_bundle.bin" in your platformio project
3. add "board_build.embed_files = data/cert/x509_crt_bundle.bin" in your platformio.ini
4. add the following global declaration in your project:
extern const uint8_t rootca_crt_bundle_start[] asm("_binary_data_cert_x509_crt_bundle_bin_start");
5. before initiating the first SSL connection, call
my_client.setCACertBundle(rootca_crt_bundle_start);

To use this feature in Android IDE:
If the Arduino IDE added support for embedding files in the meantime, then follow the instructions above.
If not, you have three choices:
1. convert your project to PlatformIO
2. create a makefile where you can add the idf_component_register() declaration to include the certificate bundle
3. Store the bundle as a SPIFFS file, but then you have to load it into RAM in runtime and waste 64k of precious memory

Using a root CA cert and client cert/keys
-----------------------------------------
This method authenticates the server and additionally also authenticates
Expand Down
18 changes: 16 additions & 2 deletions libraries/WiFiClientSecure/src/WiFiClientSecure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
*/

#include "WiFiClientSecure.h"
#include "esp_crt_bundle.h"
#include <lwip/sockets.h>
#include <lwip/netdb.h>
#include <errno.h>
Expand All @@ -44,6 +45,7 @@ WiFiClientSecure::WiFiClientSecure()
_psKey = NULL;
next = NULL;
_alpn_protos = NULL;
_use_ca_bundle = false;
}


Expand Down Expand Up @@ -129,7 +131,7 @@ int WiFiClientSecure::connect(const char *host, uint16_t port, const char *CA_ce
if(_timeout > 0){
sslclient->handshake_timeout = _timeout;
}
int ret = start_ssl_client(sslclient, host, port, _timeout, CA_cert, cert, private_key, NULL, NULL, _use_insecure, _alpn_protos);
int ret = start_ssl_client(sslclient, host, port, _timeout, CA_cert, _use_ca_bundle, cert, private_key, NULL, NULL, _use_insecure, _alpn_protos);
_lastError = ret;
if (ret < 0) {
log_e("start_ssl_client: %d", ret);
Expand All @@ -149,7 +151,7 @@ int WiFiClientSecure::connect(const char *host, uint16_t port, const char *pskId
if(_timeout > 0){
sslclient->handshake_timeout = _timeout;
}
int ret = start_ssl_client(sslclient, host, port, _timeout, NULL, NULL, NULL, pskIdent, psKey, _use_insecure, _alpn_protos);
int ret = start_ssl_client(sslclient, host, port, _timeout, NULL, false, NULL, NULL, pskIdent, psKey, _use_insecure, _alpn_protos);
_lastError = ret;
if (ret < 0) {
log_e("start_ssl_client: %d", ret);
Expand Down Expand Up @@ -263,6 +265,18 @@ void WiFiClientSecure::setCACert (const char *rootCA)
_CA_cert = rootCA;
}

void WiFiClientSecure::setCACertBundle(const uint8_t * bundle)
{
if (bundle != NULL)
{
esp_crt_bundle_set(bundle);
_use_ca_bundle = true;
} else {
esp_crt_bundle_detach(NULL);
_use_ca_bundle = false;
}
}

void WiFiClientSecure::setCertificate (const char *client_ca)
{
_cert = client_ca;
Expand Down
2 changes: 2 additions & 0 deletions libraries/WiFiClientSecure/src/WiFiClientSecure.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class WiFiClientSecure : public WiFiClient
const char *_pskIdent; // identity for PSK cipher suites
const char *_psKey; // key in hex for PSK cipher suites
const char **_alpn_protos;
bool _use_ca_bundle;

public:
WiFiClientSecure *next;
Expand Down Expand Up @@ -70,6 +71,7 @@ class WiFiClientSecure : public WiFiClient
void setCertificate(const char *client_ca);
void setPrivateKey (const char *private_key);
bool loadCACert(Stream& stream, size_t size);
void setCACertBundle(const uint8_t * bundle);
bool loadCertificate(Stream& stream, size_t size);
bool loadPrivateKey(Stream& stream, size_t size);
bool verify(const char* fingerprint, const char* domain_name);
Expand Down
Loading