Wykres commitów

40 Commity (master)

Autor SHA1 Wiadomość Data
Angus Gratton decf8e6a8b all: Remove the "STATIC" macro and just use "static" instead.
The STATIC macro was introduced a very long time ago in commit
d5df6cd44a.  The original reason for this was
to have the option to define it to nothing so that all static functions
become global functions and therefore visible to certain debug tools, so
one could do function size comparison and other things.

This STATIC feature is rarely (if ever) used.  And with the use of LTO and
heavy inline optimisation, analysing the size of individual functions when
they are not static is not a good representation of the size of code when
fully optimised.

So the macro does not have much use and it's simpler to just remove it.
Then you know exactly what it's doing.  For example, newcomers don't have
to learn what the STATIC macro is and why it exists.  Reading the code is
also less "loud" with a lowercase static.

One other minor point in favour of removing it, is that it stops bugs with
`STATIC inline`, which should always be `static inline`.

Methodology for this commit was:

1) git ls-files | egrep '\.[ch]$' | \
   xargs sed -Ei "s/(^| )STATIC($| )/\1static\2/"

2) Do some manual cleanup in the diff by searching for the word STATIC in
   comments and changing those back.

3) "git-grep STATIC docs/", manually fixed those cases.

4) "rg -t python STATIC", manually fixed codegen lines that used STATIC.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-03-07 14:20:42 +11:00
Maarten van der Schrieck 3bca93b2d0 ports: Fix sys.stdout.buffer.write() return value.
MicroPython code may rely on the return value of sys.stdout.buffer.write()
to reflect the number of bytes actually written. While in most scenarios a
write() operation is successful, there are cases where it fails, leading to
data loss. This problem arises because, currently, write() merely returns
the number of bytes it was supposed to write, without indication of
failure.

One scenario where write() might fail, is where USB is used and the
receiving end doesn't read quickly enough to empty the receive buffer. In
that case, write() on the MicroPython side can timeout, resulting in the
loss of data without any indication, a behavior observed notably in
communication between a Pi Pico as a client and a Linux host using the ACM
driver.

A complex issue arises with mp_hal_stdout_tx_strn() when it involves
multiple outputs, such as USB, dupterm and hardware UART. The challenge is
in handling cases where writing to one output is successful, but another
fails, either fully or partially. This patch implements the following
solution:

mp_hal_stdout_tx_strn() attempts to write len bytes to all of the possible
destinations for that data, and returns the minimum successful write
length.

The implementation of this is complicated by several factors:
- multiple outputs may be enabled or disabled at compiled time
- multiple outputs may be enabled or disabled at runtime
- mp_os_dupterm_tx_strn() is one such output, optionally containing
  multiple additional outputs
- each of these outputs may or may not be able to report success
- each of these outputs may or may not be able to report partial writes

As a result, there's no single strategy that fits all ports, necessitating
unique logic for each instance of mp_hal_stdout_tx_strn().

Note that addressing sys.stdout.write() is more complex due to its data
modification process ("cooked" output), and it remains unchanged in this
patch. Developers who are concerned about accurate return values from
write operations should use sys.stdout.buffer.write().

This patch might disrupt some existing code, but it's also expected to
resolve issues, considering that the peculiar return value behavior of
sys.stdout.buffer.write() is not well-documented and likely not widely
known. Therefore, it's improbable that much existing code relies on the
previous behavior.

Signed-off-by: Maarten van der Schrieck <maarten@thingsconnected.nl>
2023-12-22 10:32:46 +11:00
Andrew Leech d8a263435f esp32/mphalport: Add function to wake main from separate FreeRTOS task.
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2023-11-01 16:24:57 +11:00
Daniël van de Giessen f74131134c esp32: Poll serial/JTAG for unread data to prevent blocking.
If data is pushed over serial/JTAG too fast we may fill up stdin_ringbuf
and not be able to read all the data out of the serial/JTAG buffer. Thus
we need to explicitly poll and read the serial/JTAG RX buffer to prevent
blocking (since if the serial/JTAG buffer is already filled, we will not
get another interrupt to transfer it to the stdin ringbuffer).

Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2023-10-31 11:59:15 +11:00
IhorNehrutsa 00930b213e esp32/mphalport: Add function/line/file info to check_esp_err exception.
Currently, check_esp_err() raises an exception without a location in the
source code, eg:

    Traceback (most recent call last):
      File "<stdin>", line 8, in <module>
    OSError: (-258, 'ESP_ERR_INVALID_ARG')

This commit allows additional error reporting (function, line and file) to
be enabled via detailed exceptions.  Change the error reporting config to

    #define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_DETAILED)

and then exception messages from IDF errors look like:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OSError: (-258, "0x0102 ESP_ERR_INVALID_ARG in function 'set_duty_u16'
    at line 342 in file './machine_pwm.c'")

Signed-off-by: Ihor Nehrutsa <IhorNehrutsa@gmail.com>
2023-09-18 11:26:43 +10:00
Daniël van de Giessen f8bd6778c8 esp32: Support JTAG console, free up UART.
CONFIG_USB_OTG_SUPPORTED is automatically set by the ESP-IDF when the chip
supports USB-OTG, which is the case for the ESP32-S2 and ESP32-S3.

When trying to use the JTAG console with these chips, it would not work
because our USB implementation will take over control over the USB port,
breaking the JTAG console in the process.

Thus, when the board is configured to use the JTAG console, we should not
enable our USB console support.

Additionally, this change also frees up UART0 when an USB-based console is
configured, since there's no reason to prevent (re)configuration of UART0
for other uses in that case.

Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2023-09-01 21:01:26 +10:00
Damien George e4650125b8 esp32: Update port to support IDF v5.0.2.
This commit updates the esp32 port to work exclusively with ESP-IDF v5.
IDF v5 is needed for some of the newer ESP32 SoCs to work, and it also
cleans up a lot of the inconsistencies between existing SoCs (eg S2, S3,
and C3).

Support for IDF v4 is dropped because it's a lot of effort to maintain both
versions at the same time.

The following components have been verified to work on the various SoCs:

                ESP32     ESP32-S2  ESP32-S3  ESP32-C3
    build       pass      pass      pass      pass
    SPIRAM      pass      pass      pass      N/A
    REPL (UART) pass      pass      pass      pass
    REPL (USB)  N/A       pass      pass      N/A
    filesystem  pass      pass      pass      pass
    GPIO        pass      pass      pass      pass
    SPI         pass      pass      pass      pass
    I2C         pass      pass      pass      pass
    PWM         pass      pass      pass      pass
    ADC         pass      pass      pass      pass
    WiFi STA    pass      pass      pass      pass
    WiFi AP     pass      pass      pass      pass
    BLE         pass      N/A       pass      pass
    ETH         pass      --        --        --
    PPP         pass      pass      pass      --
    sockets     pass      pass      pass      pass
    SSL         pass      ENOMEM    pass      pass
    RMT         pass      pass      pass      pass
    NeoPixel    pass      pass      pass      pass
    I2S         pass      pass      pass      N/A
    ESPNow      pass      pass      pass      pass
    ULP-FSM     pass      pass      pass      N/A
    SDCard      pass      N/A       N/A       pass
    WDT         pass      pass      pass      pass

Signed-off-by: Damien George <damien@micropython.org>
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2023-06-23 15:34:22 +10:00
Jim Mussared f5f9edf645 all: Rename UMODULE to MODULE in preprocessor/Makefile vars.
This work was funded through GitHub Sponsors.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2023-06-08 17:54:11 +10:00
Jim Mussared 1bf2dcb15e all: Rename mp_umodule*, mp_module_umodule* to remove the "u" prefix.
This work was funded through GitHub Sponsors.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2023-06-08 17:54:04 +10:00
Damien George 38e7b842c6 ports: Implement simple write polling for stdout.
This is a best-effort implementation of write polling.  It's difficult to
do correctly because if there are multiple output streams (eg UART and USB
CDC) then some may not be writeable while others are.  A full solution
should also have a return value from mp_hal_stdout_tx_strn(), returning the
number of bytes written to the stream(s).  That's also hard to define.

The renesas-ra and stm32 ports already implement a similar best-effort
mechanism for write polling.

Fixes issue #11026.

Signed-off-by: Damien George <damien@micropython.org>
2023-03-23 13:51:17 +11:00
Damien George 0e8c2204da esp32/mphalport: Fix calculation of large sleep by using 64-bit arith.
Fixes issue #9304.

Signed-off-by: Damien George <damien@micropython.org>
2022-09-14 14:03:37 +10:00
Damien George fe9eaf12f3 esp32: Add MICROPY_HW_ENABLE_UART_REPL and enable on generic S2/S3.
Some S2/S3 modules don't use the native USB interface but instead have an
external USB-UART.  To make the GENERIC_S3/S3 firmware work on these boards
the UART REPL is enabled in addition to the native USB CDC REPL.

Fixes issues #8418 and #8524.

Signed-off-by: Damien George <damien@micropython.org>
2022-04-14 14:39:20 +10:00
Daniël van de Giessen 665f0e2a68 esp32: Sleep one tick in MICROPY_EVENT_POLL_HOOK.
If MicroPython threads are enabled, loops waiting for an incoming event
should release the GIL and suspend, allowing other tasks to run while they
wait.

Prior to this commit, the problem can easily be observed by running a
thread that is both busy and regularly releases the GIL (for example a loop
doing something then sleeping a few ms after each iteration).  When the
main task is at the REPL, the thread is significantly stalled.  If the main
task is manually made to release the GIL (for example, by calling
utime.sleep_ms(500)) the other thread can be seen immediately working at
the expected speed again.

Additionally, there are various instances in where blocking functions run
MICROPY_EVENT_POLL_HOOK in a loop while they wait for a certain event/
condition.  For example the uselect methods poll objects to determine
whether data is available, but uses 100% of CPU while it does, constantly
calling MICROPY_EVENT_POLL_HOOK in the process.

The MICROPY_EVENT_POLL_HOOK macro is only ever used in waiting loops, where
(if threads are enabled) it makes sense to yield for a single tick so that
these loops do not consume all CPU cycles but instead other threads may
execute.  (In fact, the thing these loops wait for may even indirectly or
directly depend on another task being able to run.)

This change moves the sleep that was inside the REPL input function to
inside the MICROPY_EVENT_POLL_HOOK macro, where the GIL is already being
released, solving both the blocking REPL issue and the 100% CPU use issue
at the same time.

Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2022-03-02 12:57:43 +11:00
Andrew Leech 2cc9232781 esp32/uart: Correctly init low-level UART driver for REPL.
uart_driver_install() needs to be called to set up the UART correctly.
2022-03-01 17:33:36 +11:00
Patrick Van Oosterwijck a66bd7a489 esp32/boards: Add GENERIC_C3_USB board with USB serial/JTAG support.
Add a new board type for ESP32-C3 revision 3 and up that implement the USB
serial/JTAG port on pin 18 and 19.  This variant uses the USB serial for
programming and console, leaving the UART free.

- Pins 18 and 19 are correctly reserved for this variant.  Also pins 14-17
  are reserved for flash for any ESP32-C3 so they can't be reconfigured
  anymore to crash the system.
- Added usb_serial_jtag.c and .h to implement this interface.
- Interface was tested to work correctly together with webrepl.
- Interface was tested to work correctly when sending and receiving
  large files with ampy.
- Disconnecting terminal or USB will not hang the system when it's
  trying to print.
2021-08-31 00:12:41 +10:00
Damien George 6214fa3f9e esp32/mphalport: Always yield at least once in delay_ms.
This helps the OS switch to and give other threads processing time during
the sleep.  It also ensures that pending events are handled, even when
sleeping for 0ms.

Fixes issue #5344.

Signed-off-by: Damien George <damien@micropython.org>
2021-07-22 00:20:53 +10:00
Damien George 6823514845 esp32: Add initial support for ESP32C3 SoCs.
Supported features for this SoC are:
- UART REPL, filesystem
- Pin, ADC, PWM, SoftI2C, SoftSPI, Timer, RTC
- OneWire, DHT, NeoPixel
- RMT
- WiFi, Bluetooth

Signed-off-by: Damien George <damien@micropython.org>
2021-07-18 23:58:24 +10:00
Damien George 59dbbe9be7 esp32: Fix use of mp_int_t, size_t and uintptr_t.
Signed-off-by: Damien George <damien@micropython.org>
2021-07-18 23:58:16 +10:00
Damien George 136369d72f all: Update to point to files in new shared/ directory.
Signed-off-by: Damien George <damien@micropython.org>
2021-07-12 17:08:10 +10:00
Damien George 132d93886f ports: Use common mp_hal_stdout_tx_strn_cooked instead of custom one.
To reduce code duplication.

Signed-off-by: Damien George <damien@micropython.org>
2021-07-08 12:59:31 +10:00
Damien George 5093d49fae esp32: Extend support for S2 series, and S3 where applicable.
Improvements made:
- PSRAM support for S2
- partition definition for 16MiB flash
- correct ADC and DAC pins
- correct GPIO and IRQ pins
- S3 components in CMakeLists

Based on original commit made by Seon Rozenblum aka @UnexpectedMaker.

Signed-off-by: Damien George <damien@micropython.org>
2021-05-10 16:56:53 +10:00
Damien George c81d048bb3 esp32: Add support for USB with CDC ACM.
The REPL will be available on the USB serial port.

Signed-off-by: Damien George <damien@micropython.org>
2021-04-15 10:31:06 +10:00
Damien George f12462ddc4 esp32: Remove obsolete IDF v3 code wrapped in MICROPY_ESP_IDF_4.
Signed-off-by: Damien George <damien@micropython.org>
2021-02-15 23:22:05 +11:00
Damien George 97072b7224 esp32: Add explicit initialisers to silence compiler warnings.
This makes no functional change.  See similar commit
9aa58cf8ba

Signed-off-by: Damien George <damien@micropython.org>
2021-02-15 16:37:58 +11:00
Damien George 8f20cdc353 all: Rename absolute time-based functions to include "epoch".
For time-based functions that work with absolute time there is the need for
an Epoch, to set the zero-point at which the absolute time starts counting.
Such functions include time.time() and filesystem stat return values.  And
different ports may use a different Epoch.

To make it clearer what functions use the Epoch (whatever it may be), and
make the ports more consistent with their use of the Epoch, this commit
renames all Epoch related functions to include the word "epoch" in their
name (and remove references to "2000").

Along with this rename, the following things have changed:

- mp_hal_time_ns() is now specified to return the number of nanoseconds
  since the Epoch, rather than since 1970 (but since this is an internal
  function it doesn't change anything for the user).

- littlefs timestamps on the esp8266 have been fixed (they were previously
  off by 30 years in nanoseconds).

Otherwise, there is no functional change made by this commit.

Signed-off-by: Damien George <damien@micropython.org>
2020-09-18 17:20:34 +10:00
Damien George 40153b800a esp32/mphalport: Fix mp_hal_time_ns offset.
gettimeofday returns seconds since 2000/1/1 so needs to be adjusted to
seconds since 1970/1/1 to give the correct return value of mp_hal_time_ns.

Signed-off-by: Damien George <damien@micropython.org>
2020-08-31 00:49:58 +10:00
Damien George ee50a6effe py/mphal.h: Introduce mp_hal_time_ns and implement on various ports.
This should return a 64-bit value being the number of nanoseconds since
1970/1/1.

Signed-off-by: Damien George <damien@micropython.org>
2020-08-22 16:13:44 +10:00
Damien George e08ca78f40 py/stream: Remove mp_stream_errno and use system errno instead.
This change is made for two reasons:

1. A 3rd-party library (eg berkeley-db-1.xx, axtls) may use the system
   provided errno for certain errors, and yet MicroPython stream objects
   that it calls will be using the internal mp_stream_errno.  So if the
   library returns an error it is not known whether the corresponding errno
   code is stored in the system errno or mp_stream_errno.  Using the system
   errno in all cases (eg in the mp_stream_posix_XXX wrappers) fixes this
   ambiguity.

2. For systems that have threading the system-provided errno should always
   be used because the errno value is thread-local.

For systems that do not have an errno, the new lib/embed/__errno.c file is
provided.
2020-04-27 23:58:46 +10:00
Thorsten von Eicken 1ae7e0e561 esp32: Consolidate check_esp_err functions and add IDF error string.
This commit consolidates a number of check_esp_err functions that check
whether an ESP-IDF return code is OK and raises an exception if not.  The
exception raised is an OSError with the error code as the first argument
(negative if it's ESP-IDF specific) and the ESP-IDF error string as the
second argument.

This commit also fixes esp32.Partition.set_boot to use check_esp_err, and
uses that function for a unit test.
2020-04-23 10:59:07 +10:00
Damien George 98a3911c43 py/scheduler: Add "raise_exc" argument to mp_handle_pending.
Previous behaviour is when this argument is set to "true", in which case
the function will raise any pending exception.  Setting it to "false" will
cancel any pending exception.
2020-02-07 16:08:20 +11:00
Jim Mussared 96008ff59a esp32: Support building with ESP IDF 4.0-beta1.
This commit adds support for a second supported hash (currently set to the
4.0-beta1 tag).  When this hash is detected, the relevant changes are
applied.

This allows to start using v4 features (e.g. BLE with Nimble), and also
start doing testing, while still supporting the original, stable, v3.3 IDF.

Note: this feature is experimental, not well tested, and network.LAN and
network.PPP are currently unsupported.
2019-09-17 12:25:36 +10:00
Damien George c80614dfc8 ports: Provide mp_hal_stdio_poll for sys.stdio polling where needed. 2019-07-01 17:10:12 +10:00
Damien George 297092a76a esp32/mphalport: Use ets_delay_us for mp_hal_delay_us_fast.
The system provided one is in ROM and is more accurate.
2019-03-12 15:46:44 +11:00
Damien George efe0569c26 esp32/mphalport: When tx'ing to REPL only release GIL if many chars sent
Otherwise, if multiple threads are active, printing data to the REPL may be
very slow because in some cases only one character is output per call to
mp_hal_stdout_tx_strn.
2019-01-10 15:43:47 +11:00
Nicko van Someren 14ab81e87a esp32: Reduce latency for handling of scheduled Python callbacks.
Prior to this patch there was a large latency for executing scheduled
callbacks when when Python code is sleeping: at the heart of the
implementation of sleep_ms() is a call to vTaskDelay(1), which always
sleeps for one 100Hz tick, before performing another call to
MICROPY_EVENT_POLL_HOOK.

This patch fixes this issue by using FreeRTOS Task Notifications to signal
the main thread that a new callback is pending.
2018-07-04 10:49:37 +10:00
Damien George 98b05e3614 esp32: Add support for and enable uos.dupterm(). 2018-04-27 23:51:45 +10:00
Damien George 04dc4a5034 esp32/mphalport: Improve mp_hal_stdout_tx_XXX functions.
This makes way for enabling uos.dupterm().
2018-04-27 23:49:21 +10:00
Damien George 4ed5865280 esp32/mphalport: Improve mp_hal_delay_us so it handles pending events.
Thanks to @bboser for the initial idea and implementation.
2018-04-26 20:21:33 +10:00
Damien George e1fe3abd09 esp32/mphalport: Use esp_timer_get_time instead of gettimeofday.
It's more efficient and improves accuracy.
2018-04-26 20:19:31 +10:00
Damien George bc08c884a2 esp32: Add new port to Espressif ESP32 SoC.
This commit is a combination of 216 commits from the initial stages of
development of this port, up to and including the point where the code was
moved to the ports/esp32 directory.  These commits were mostly concerned
with setting up the build system and getting a reliable port working with
basic features.  The following is a digest of the original commits in their
original order (most recent listed first), grouped where possible per
author.  The list is here to give credit for the work and provide some
level of traceability and accountability.  For the full history of
development please consult the original repository.

All code is MIT licensed and the relevant copyright holders are listed in
the comment-header of each file.

Damien George <damien.p.george@gmail.com>
  esp32: Update to latest ESP IDF.
  esp32: Update module symlinks now that code lives under the ports dir.
  esp32: Update to compile with new ports/esp32 directory structure.
  esp32: Move it to the ports/ directory.
  esp32/machine_uart: Don't save baudrate but compute it instead.
  esp32/modsocket: Add socket.readinto() method.
  esp32/modesp: Add esp.gpio_matrix_in and esp.gpio_matrix_out functions.
  esp32/machine_uart: Wait for all data to be tx'd before changing config.

NyxCode <moritz.bischof1@gmail.com>
  esp32: Add note to README.md about updating the submodules of ESP IDF.

Anthony Briggs <anthony.briggs@gmail.com>
  esp32: Update README.md installation and flashing instructions.

Javier Candeira <javier@candeira.com>
  esp32: Raise error when setting input-only pin to output.

  With help from Adrian Smith (fon@thefon.net)

Javier Candeira <javier@candeira.com>
  esp32: Replace exception raising with corresponding mp_raise_XXX funcs.

Tisham Dhar <whatnickd@gmail.com>
  esp32: Add some specific notes about building on Windows using WSL.

Ben Gamari <ben@smart-cactus.org>
  esp32: Provide machine.Signal class.

Damien George <damien.p.george@gmail.com>
  esp32/modnetwork: Implement AP version of network.isconnected().

Eric Poulsen <eric@zyxod.com>
  esp32/README.md: Add note about btree submodule initialization.

Damien George <damien.p.george@gmail.com>
  esp32: Make firmware.bin start at 0x1000 to allow flash size autodetect.
  esp32: Changes to follow latest version of upstream uPy.
  esp32/Makefile: Separate ESP-specific inc dirs to avoid header clashes.
  esp32: Enable "btree" database module.
  esp32: Update to latest ESP IDF.

Roosted7 <thomasroos@live.nl>
  esp32: Update to latest ESP-IDF.

Alex King <alex_w_king@yahoo.com>
  esp32/machine_timer: Add support for esp32 hardware timer.

  Code lineage:
  Timer() is based loosely on the version in esp8266, although the
  implementation is differs significantly because of the change in
  the underlying platform.

Damien George <damien.p.george@gmail.com>
  esp32/machine_uart: Increase UART TX buffer size to 64.
  esp32/modules: Update dht symlink.
  esp32/mpconfigport.h: Enable utimeq module, needed for uasyncio.
  esp32: Changes to follow latest version of upstream uPy.
  esp32: Update to latest ESP-IDF.
  esp32/machine_uart: Add uart.any() method.
  esp32/machine_uart: Uninstall the UART driver before installing it.

Thomas Roos <mail@thomasroos.nl>
  esp32: Update to latest ESP-IDF.

Eric Poulsen <eric@zyxod.com>
  esp32/modsocket: Make read/write return None when in non-blocking mode.
  esp32/modsocket.c: Fix send/sendto/write for non-blocking sockets.

Odd Stråbø <oddstr13@openshell.no>
  esp32: Initial working implementation of machine.UART.

  Code lineage (as seen by previous commits): I copied the ESP8266 code,
  renamed pyb -> machine, and used esp-idf as a reference while implementing
  minimal functionality.  I provide all of my changes under the MIT license.

Odd Stråbø <oddstr13@openshell.no>
  esp32/machine_uart: Rename pyb to machine.
  esp32: Copy machine_uart.c from esp8266 port.

Damien George <damien.p.george@gmail.com>
  esp32/moduos: Add uos.ilistdir() function.
  esp32: Mount filesystem at the root of the VFS, following esp8266.

Andy Valencia <vandyswa@gmail.com>
  esp32: Add hardware SHA1/SHA256 support via mbedtls API.

  Code lineage: a copy of extmod/moduhashlib with the API invocation details
  edited.  Total derivative work.

Andy Valencia <vandyswa@gmail.com>
  esp32: Add PWM support via machine.PWM class.

  Code lineage:
  I started by copying the esp8266 machine_pwm.c. I used information from the
  ESP32 Technical Reference Manual, the esp-idf documentation, and the SDK's
  sample ledc example code (but I did not copy that code, just studied it to
  understand the SDK's API for PWM). So aside from the code copied from the
  esp8266 PWM support, everything else you see is just new code I wrote.

  I wasn't an employee of anybody when I wrote it, and I wrote it with the
  understanding and intention that it's simply a derivative work of the
  existing micropython code. I freely and willingly contribute it to the
  project and intend that it not change the legal status of the micropython
  code base in any way, even if it is included in that base in whole or part.

Damien George <damien.p.george@gmail.com>
  esp32/modules: Add symlinks for upysh and upip.

Eric Poulsen <eric@zyxod.com>
  esp32/modmachine: Add unique_id() function to machine module.

Damien George <damien.p.george@gmail.com>
  esp32: Change dac_out_voltage to dac_output_voltage for new IDF API.
  esp32: Update esp32.custom_common.ld to align with changes in ESP IDF.

Eric Poulsen <eric@zyxod.com>
  esp32: Update to latest ESP IDF.

Damien George <damien.p.george@gmail.com>
  esp32/modsocket: When resolving IP addr handle the case of host=''.
  esp32: Update to latest ESP IDF.

Eric Poulsen <eric@zyxod.com>
  esp32/Makefile: Change default FLASH_MODE to dio for WROOM-32 module.
  esp32: Move FAT FS to start at 0x200000 and increase size to 2MiB.

Damien George <damien.p.george@gmail.com>
  esp32: Remove enable_irq/disable_irq and use ATOMIC_SECTION instead.
  esp32/mpconfigport.h: Provide ATOMIC_SECTION macros.
  esp32/main: Restart the MCU if there is a failed NLR jump.

Daniel Campora <daniel@pycom.io>
  esp32: Enable threading; be sure to exit GIL when a thread will block.
  esp32: Trace the registers when doing a gc collect. Also make it thread ready.
  esp32: Add threading implementation, disabled for the time being.

Damien George <damien.p.george@gmail.com>
  esp32: Update to latest ESP IDF.
  esp32/uart: Use high-level function to install UART0 RX ISR handler.
  esp32/Makefile: Make FreeRTOS private include dir really private.

Eric Poulsen <eric@zyxod.com>
  esp32: Add support for hardware SPI peripheral (block 1 and 2).

Sergio Conde Gómez <skgsergio@gmail.com>
  esp32/modules/inisetup.py: Mount filesystem at /flash like ESP8266

Damien George <damien.p.george@gmail.com>
  esp32: Convert to use core-provided KeyboardInterrupt exception.
  esp32: Pump the event loop while waiting for rx-chr or delay_ms.
  esp32: Implement Pin.irq() using "soft" scheduled interrupts.
  esp32: Update to latest ESP IDF version.

Eric Poulsen <eric@zyxod.com>
  esp32/README: Add troubleshooting section to the end.

tyggerjai <tyggerjai@gmail.com>
  esp32: Add support for WS2812 and APA106 RGB LEDs.

Damien George <damien.p.george@gmail.com>
  esp32: Add makeimg.py script to build full firmware; use it in Makefile.
  esp32/modsocket: Make socket.read return when socket closes.
  esp32/modsocket: Initialise the timeout on an accepted socket.
  esp32/mphalport: Provide proper implementations of disable_/enable_irq.
  esp32/modmachine: Add disable_irq/enable_irq functions.

Nick Moore <nick@zoic.org>
  esp32/modsocket.c: add comment explaining timeout behaviour
  esp32/modsocket.c: clean up send methods for retries too
  esp32/modsocket.c: sockets always nonblocking, accept timeout in modsocket
  esp32: Update to latest ESP IDF version.
  esp32/modsocket.c: remove MSG_PEEK workaround on select ioctl.
  esp32/modsocket.c: Initialize tcp when modsocket loads.

Damien George <damien.p.george@gmail.com>
  esp32/main: Bump heap size from 64k to 96k.
  esp32/modutime: Add time.time() function.
  esp32/modsocket: Convert lwip errnos to uPy ones.
  esp32/modules: Provide symlink to ds18x20 module.
  esp32: Add support for onewire protocol via OneWire module.
  esp32: Add support for DHT11 and DHT22 sensors.
  esp32/mphalport: Improve delay and ticks functions.
  esp32: Update to latest ESP IDF.
  esp32/modules: Provide symlink to urequests from micropython-lib.
  esp32: Populate sys.path.

Nick Moore <nick@zoic.org>
  esp32/machine_dac.c: implement DAC pins as well
  esp32/machine_adc.c: also machine.ADC
  esp32/machine_touchpad.c: add support for touchpad

Damien George <damien.p.george@gmail.com>
  esp32/README: Add hint about using GNUmakefile on case-insensitive FS.
  esp32/mpconfigport.h: Enable maximum speed software SPI.
  esp32: Provide improved version of mp_hal_delay_us_fast.
  esp32/mpconfigport.h: Enable MICROPY_PY_BUILTINS_POW3 option.
  esp32: Update to latest ESP IDF.
  esp32: Convert to use new oofatfs library and generic VFS sub-system.
  esp32: Enable help('modules') to list builtin modules.
  esp32: Convert to use new builtin help function.

Aaron Kelly <AaronKelly@email.com>
  esp32/README: Add comment about ESP-IDF version

Damien George <damien.p.george@gmail.com>
  esp32: Consistently use size_t instead of mp_uint_t.
  esp32: Change "Micro Python" to "MicroPython" in license comments.
  esp32/Makefile: Use -C argument to git instead of cd'ing.
  esp32/help: Add section to help about using the network module.
  esp32/README: Add section about configuring and using an ESP32 board.
  esp32/README: Remove paragraph about buggy toolchain, it's now fixed.
  esp32/modnetwork: Change network init logging from info to debug.
  esp32/modnetwork: Don't start AP automatically when init'ing wifi.
  esp32/modsocket: Implement socket.setsockopt, to support SO_REUSEADDR.
  esp32: Update to latest ESP IDF.
  esp32/sdkconfig.h: Remove unused CONFIG_ESPTOOLPY_xxx config settings.
  esp32/modsocket: Add support for DGRAM and RAW, and sendto/recvfrom.
  esp32/modsocket: Fix return value of "port" in socket.accept.
  esp32/modsocket: Make socket.recv take exactly 2 args.
  esp32: Enable ussl module, using mbedtls component from ESP IDF.
  esp32/modsocket: Rename "socket" module to "usocket".
  esp32/sdkconfig: Increase max number of open sockets from 4 to 8.
  esp32/modsocket: Add error checking for creating and closing sockets.
  esp32/modsocket: Use _r (re-entrant) versions of LWIP socket API funcs.
  esp32/modsocket: Raise an exception if socket.connect did not succeed.
  esp32/modsocket: Make socket.accept return a tuple: (client, addr).
  esp32/modsocket: Use m_new_obj_with_finaliser instead of calloc.
  esp32/Makefile: Add check for IDF version, and warn if not supported.
  esp32/esp32.custom_common.ld: Update to follow changes in IDF.
  esp32: Update to latest ESP IDF.

nubcore <x@nubcore.com>
  esp32: add #define CONFIG_ESP32_WIFI_RX_BUFFER_NUM 25

Nick Moore <nick@zoic.org>
  esp32/modsocket.c: add in sendall and makefile methods #10
  esp32/modsocket.c: fixups for #10
  esp32/modsocket.c: fix copyright, socket_recv gets param and exception
  esp32/modnetwork.c: fix copyright, network.active param to bool

Damien George <damien.p.george@gmail.com>
  esp32/modnetwork: Implement wlan.isconnected() method.
  esp32/modnetwork: Add initial implementation of wlan.config().
  esp32/modnetwork: Simplify event_handler messages.

Nick Moore <nick@zoic.org>
  esp32/modsocket.c: support for ioctl, settimeout, setblocking, getaddrinfo

Damien George <damien.p.george@gmail.com>
  esp32/README: Add comment about FLASH_MODE being dio.
  esp32: Update to latest ESP IDF.
  esp32/modnetwork: Remove unnecessary indirection variable for scan list.
  esp32/modnetwork: Check that STA is active before trying to scan.
  esp32/mphalport: Replace portTICK_RATE_MS with portTICK_PERIOD_MS.
  esp32/README: Add comment about using $(HOME) in makefile.
  esp32/modnetwork: Use memset instead of bzero, the latter is deprecated.
  esp32/modnetwork: Improve error handling when STA is connecting to AP.
  esp32/Makefile: Use tab instead of spaces, and use shorter variable.

Nick Moore <nick@zoic.org>
  esp32/modsocket.c: AF_*, SOCK_* and IPPROTO_* constants
  esp32/modsocket.c: socket.settimeout implementation

Damien George <damien.p.george@gmail.com>
  esp32/Makefile: Update to latest ESP IDF.

Nick Moore <nick@zoic.org>
  esp32/modsocket.c: use mp streams for sockets
  esp32: network.WLAN.ifconfig based on esp8266 version
  esp32: Fix up exception handling
  esp32: sketchy modsocket ... revisit this once modnetwork is sorted
  esp32: First cut at modnetwork, manually rebased from prev. version

Damien George <damien.p.george@gmail.com>
  esp32/help: Update help text.
  esp32: Add info about Microbric Pty Ltd being the sponsor of this port.
  esp32: Add README.md file.
  esp32/mpconfigport.h: Add weak links to many of the builtin modules.
  esp32: Enable soft implementation of machine.SPI class.
  esp32/Makefile: Simplify APP_LD_ARGS by using OBJ variable.
  esp32/Makefile: Reorganise Makefile and add some comments.
  esp32/Makefile: Clean up CFLAGS for ESP IDF components.
  esp32/Makefile: Tidy up names of ESP IDF components, to match dir name.
  esp32/Makefile: Define and use ESPCOMP variable.
  esp32: Update to latest ESP IDF.
  esp32/main: Enable filesystem support.
  esp32: Use custom ld script to ensure correct code get placed in iram.
  esp32: Update to latest ESP IDF.
  esp32/main: Pin the uPy task to core 0.
  esp32: Update to use latest ESP IDF.
  esp32: Disable boot-up scripts, spi_flash_erase_sector no longer works.
  esp32: Add scripts to init and mount filesystem.
  esp32: Enable frozen bytecode, with scripts stored in "modules/" dir.
  esp32/modesp: Increase flash_user_start position to 1Mbyte.
  esp32/Makefile: Add "erase" target for convenient erasure.
  esp32/sdkconfig: Reorder config settings to put common things together.
  esp32/sdkconfig: Change to use single core only.
  esp32: Add esp module.
  esp32/uart.c: Make sure uart ISR handler is all in iram.
  esp32/main.c: Use ESP_TASK_PRIO_MIN + 1 for mp_task's priority.
  esp32/Makefile: Use only bare-minimum flags when compiling .S files.
  esp32/Makefile: Rename "firmware" to "application".
  esp32: Update ESP IDF version.
  esp32/Makefile: Add declarations to build bootloader and partitions.
  esp32/Makefile: When deploying, write the application last.
  esp32/Makefile: Use $(INC) variable instead of listing include dirs.
  esp32/Makefile: Use locally built versions of freertos and newlib libs.
  esp32: Add low-level uart handler with ISR and ringbuf for stdin.
  esp32: Add machine.idle() function.
  esp32: Add machine.I2C class.
  esp32: Enable machine.time_pulse_us.
  esp32: Add initial implementation of machine.Pin class.
  esp32: Prepare main.c for using xTaskCreateStatic.
  esp32: Clean up mphalport.h.
  esp32: Add initial uos module.
  esp32: Clean up mpconfigport.h, enable more features.
  esp32: Use new reset function.
  esp32: Update to latest ESP IDF.
  esp32: Add idf-version target to Makefile, to track IDF commit.
  esp32: Initial port to ESP32.
2017-12-13 14:48:53 +11:00