summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
3 daysrenesas-ra/mpconfigport: Enable MICROPY_TIME_SUPPORT_Y1969_AND_BEFORE.HEADorigin/masterorigin/HEADmasterDamien George
This setting was missed in df05caea6c6437a8b4756ec502a5e6210f4b6256. It's needed for this port to pass its `tests/ports/renesas-ra/modtime.py` test. Signed-off-by: Damien George <damien@micropython.org>
4 dayslib/micropython-lib: Update submodule to latest.Damien George
This brings in: - lora: fix SNR value in SX126x received packets - utop: add initial implementation for ESP32 - utop: print MicroPython memory info - utop: print IDF heap details - urllib.urequest: add support for headers to urequest.urlopen - aiorepl: use blocking reads for raw REPL and raw paste - errno: add ENOTCONN constant - logging: allow logging.exception helper to handle tracebacks - aioble-l2cap: raise correct error if l2cap disconnects during send - abc: add ABC base class - aiohttp: fix partial reads by using readexactly - aiorepl: handle stream shutdown Signed-off-by: Damien George <damien@micropython.org>
4 dayspy/parse: Fix missing nlr_pop call in complex path of binary_op_maybe.Jeff Epler
Reproducer (needs to be run as one compilation unit): ans = (-1) ** 2.3 aa Fixes issue #17815. Signed-off-by: Jeff Epler <jepler@gmail.com>
5 daysgithub/workflows: Add a CI job to build ESP32-C2 and ESP32-C6 boards.Damien George
So that all six supported SoCs are built by CI. Signed-off-by: Damien George <damien@micropython.org>
5 daysesp32/mpconfigport: Disable I2CTarget on ESP32-C6 to reduce code size.Damien George
I2CTarget costs about 8k of flash size on ESP32-S2, and about 11k on ESP32-C6. The ESP32-C6 only has about 8k remaining, so disable I2CTarget on that SoC until more flash can be made available. Signed-off-by: Damien George <damien@micropython.org>
6 daysrp2/rp2_flash: Add binary info for ROMFS.Phil Howard
This describes the ROMFS location and size in Pico SDK's binary declaration format, so it can be read from a .uf2 file for use with various tools. Signed-off-by: Phil Howard <github@gadgetoid.com>
6 daysdocs/reference/mpremote: Document location of config file.Jos Verlinde
Signed-off-by: Jos Verlinde <Jos_Verlinde@hotmail.com>
6 daystools/mpremote: Locate config.py location across different host OSes.Jos Verlinde
Use `platformdirs.user_config_dir()` (see https://platformdirs.readthedocs.io/en/latest/api.html#user-config-directory) to provide portability across many different OSes and configuration styles. Signed-off-by: Jos Verlinde <Jos_Verlinde@hotmail.com>
6 daystools/mpremote: Add platformdirs dependency to requirements.txt.Jos Verlinde
Needed to easily find the user configuration file. Signed-off-by: Jos Verlinde <Jos_Verlinde@hotmail.com>
6 daystests/extmod_hardware: Add basic tests for machine.Counter and Encoder.Angus Gratton
These don't test any advanced features, just the basics. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
6 daysdocs/library/machine: Add docs for Counter and Encoder.Jonathan Hogg
Add documentation for `machine.Counter` and `machine.Encoder` as currently implemented by the esp32 port, but intended to be implemented by other ports. Originally authored by: Ihor Nehrutsa <Ihor.Nehrutsa@gmail.com> and Jonathan Hogg <me@jonathanhogg.com>. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
6 daysesp32/modules/machine.py: Add Counter and Encoder classes.Jonathan Hogg
Adds a Python override of the `machine` module, which delegates to the built-in module and adds an implementation of `Counter` and `Encoder`, based on the `esp32.PCNT` class. Original implementation by: Jonathan Hogg <me@jonathanhogg.com> Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
6 daysdocs/esp32: Add documentation for esp32.PCNT.Jonathan Hogg
Document the new `esp32.PCNT` class for hardware pulse counting. Originally authored by: Jonathan Hogg <me@jonathanhogg.com> Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
6 daysesp32/modesp32: Add esp32.PCNT class.Jonathan Hogg
Add a new `esp32.PCNT` class that provides complete, low-level support to the ESP32 PCNT pulse counting hardware units. This can be used as a building block to implement the higher-level `machine.Counter` and `machine.Encoder` classes. This is enabled by default on all OG, S2, S3, C6 boards, but not on C3 (as the PCNT peripheral is not supported). Original implementation by: Jonathan Hogg <me@jonathanhogg.com> Signed-off-by: Jim Mussared <jim.mussared@gmail.com> Signed-off-by: Angus Gratton <angus@redyak.com.au>
6 daysdocs/library: Document the new machine.I2CTarget class.Damien George
With some working examples that show how to use all the features. Signed-off-by: Damien George <damien@micropython.org>
6 daystests/multi_extmod: Add I2CTarget multi tests.Damien George
These require two boards wired together, SCL-SCL and SDA-SDA. Signed-off-by: Damien George <damien@micropython.org>
6 daystests/extmod_hardware: Add self unittest for I2CTarget.Damien George
This test uses a SoftI2C controller wired to an I2CTarget on the one board, and tests all functionality of the I2CTarget class. Signed-off-by: Damien George <damien@micropython.org>
6 daysesp32/machine_i2c_target: Implement I2CTarget class.Damien George
Only soft IRQs are supported. Signed-off-by: Damien George <damien@micropython.org>
6 daysesp32/machine_i2c: Factor default pin macros to header file.Damien George
So the implementation of I2CTarget can use them. Signed-off-by: Damien George <damien@micropython.org>
6 dayssamd/machine_i2c_target: Support I2C target mode.robert-hh
Supporting readfrom_mem*(). writeto_mem() and a set of IRQs. Enabled by default for SAMD51 devices and SAMD21 devices with external flash. Tested with ItsyBitsy M4 and ItsyBitsy M0 with both on-board SoftI2C and a RP2 Pico as controller. Signed-off-by: Damien George <damien@micropython.org> Signed-off-by: robert-hh <robert@hammelrath.com>
6 daysmimxrt/machine_i2c_target: Support I2C target mode.robert-hh
The functionality is similar to the RP2 implementation. The supported address size is 7 bit. In order to achieve a sufficient response, the target I2C IRQ handler has to run from RAM, causing much more code moved to RAM than required. Tested with Teensy 4.1, MIMXRT1021EVK, MIMXRT1011EVK and MIMXRT1170, using both a On-Board SoftI2C as controller and a RP2 Pico as external controller. Signed-off-by: Damien George <damien@micropython.org> Signed-off-by: robert-hh <robert@hammelrath.com>
6 daysalif/machine_i2c: Allow changing I2C SCL/SDA pins.Damien George
Signed-off-by: Damien George <damien@micropython.org>
6 daysalif/machine_i2c_target: Implement I2CTarget class.Damien George
Signed-off-by: Damien George <damien@micropython.org>
6 dayszephyr/machine_i2c_target: Implement I2CTarget class.Damien George
Tested and working on rpi_pico and nucleo_wb55rg. Signed-off-by: Damien George <damien@micropython.org>
6 daysrp2/machine_i2c_target: Implement I2CTarget class.Damien George
Signed-off-by: Damien George <damien@micropython.org>
6 daysrp2/machine_i2c: Factor default pin macros to header file.Damien George
So they can be reused by the I2CTarget implementation. Signed-off-by: Damien George <damien@micropython.org>
6 daysstm32/machine_i2c_target: Implement I2CTarget class.Damien George
Works, tested on PYBV10, PYBD_SF2 and PYBD_SF6: buf = bytearray(16) machine.I2CTargetMemory("X", addr=67, mem=buf) Signed-off-by: Damien George <damien@micropython.org>
6 daysstm32/i2cslave: Account for slow addr_match callback.Damien George
Signed-off-by: Damien George <damien@micropython.org>
6 daysstm32/i2cslave: Support i2c_slave_process_tx_end callback on F4.Damien George
The rounds out the F4 implementation to match the other supported MCUs. Signed-off-by: Damien George <damien@micropython.org>
6 daysstm32/i2cslave: Add functions to read/write I2C data.Damien George
Instead of requiring the callback to consume/provide the data. This allows the data to be consumed/provided later on, which will stretch the I2C clock until that occurs. Signed-off-by: Damien George <damien@micropython.org>
6 daysstm32/i2cslave: Change irq handler name to i2c_slave_irq_handler.Damien George
Remove the "ev" part, so this handler can be generalised to also handle error IRQs. Signed-off-by: Damien George <damien@micropython.org>
6 daysstm32/i2c: Move I2C IRQ handlers from stm32_it.c to i2c.c.Damien George
And add MP_STATIC_ASSERT to statically check that the IRQ names are correct on the MCU that it's compiled for. Signed-off-by: Damien George <damien@micropython.org>
6 daysextmod/machine_i2c_target: Add new machine.I2CTarget class.Damien George
This commit implements a generic I2C target/peripheral/"slave" device, called `machine.I2CTarget`. It can work in two separate modes: - A general device with interrupts/events/callbacks for low-level I2C operations like address match, read request and stop. - A memory device that allows reading/writing a specific region of memory (or "registers") on the target I2C device. To make a memory device is very simple: from machine import I2CTarget mem = bytearray(8) i2c = I2CTarget(addr=67, mem=mem) That's all that's needed to start the I2C target. From then on it will respond to any I2C controller on the bus, allowing reads and writes to the mem bytearray. It's also possible to register to receive events. For example to be notified when the memory is read/written: from machine import I2CTarget def irq_handler(i2c_target): flags = i2c_target.irq().flags() if flags & I2CTarget.IRQ_END_READ: print("controller read target at addr", i2c_target.memaddr) if flags & I2CTarget.IRQ_END_WRITE: print("controller wrote target at addr", i2c_target.memaddr) mem = bytearray(8) i2c = I2CTarget(addr=67, mem=mem) i2c.irq(irq_handler) Instead of a memory device, an arbitrary I2C device can be implemented using all the events (see docs). This is based on the discussion in #3935. Signed-off-by: Damien George <damien@micropython.org>
6 daysdocs/library/btree: Fix method links to explicitly specify class.Koudai Aono
So they don't clash with other potential references. Signed-off-by: Koudai Aono <koxudaxi@gmail.com>
6 daysrp2/rp2_pio: Fix use of PIO2 in prog data structure.root
The RP2350 PIO2 State Machines (8, 9, 10, 11) did not work. The data structure used to pass the PIO arguments was missing an entry for PIO2, thus causing the PIO2 instances to write wrong data to wrong locations. Fixes issue #17509. Signed-off-by: Matt Westveld <github@intergalacticmicro.com>
6 daysrp2/CMakeLists.txt: Fix flash size check logic.Dryw Wade
Follow up to 6bfb83e30aa28e7bbfb0f77f378da05b32574f3d, if the variable `PICO_FLASH_SIZE_BYTES` is not a numeric constant, eg "(2 * 1024 * 1024)", then it won't pass the GREATER check. So change the if logic to just test if it's defined. Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
6 daysdocs/library/rp2.StateMachine: Add a note about PIO in and jmp pins.Damien George
Signed-off-by: Damien George <damien@micropython.org>
6 daysrp2/rp2_pio: Configure jmp_pin for PIO use if it's isolation is set.Damien George
Signed-off-by: Damien George <damien@micropython.org>
6 daystools/mpremote: Update ESPxxx detection for USB-CDC ports.Jos Verlinde
Detection of ESP-XX devices was based on just the names of the USB driver name, and did not account for the switch of the newer ESP-xx devices to USB-CDC. On Windows this caused unwanted/unneeded resets as the DTR/RTS signals are also used for automatic device reset over USB-CDC. See https://github.com/micropython/micropython/issues/9659#issuecomment-3124704572 This commit uses the Espressif registered VID 0x303A to detect USB-CDC ports, to enable the same DTR/RTS settings as used on the UART-USB connection. Also improved the robustness of the code using `getattr()`. Signed-off-by: Jos Verlinde <Jos_Verlinde@hotmail.com>
6 daystools/mpremote: Fix errno.ENOTBLK attribute error on Windows.Jos Verlinde
Not all errors defined in stdlib errno are available on Windows. Specifically, errno.ENOTBLK is not. Fixes issue #17773. Signed-off-by: Jos Verlinde <Jos_Verlinde@hotmail.com>
6 daystests/micropython: Test that viper offset stores don't clobber base reg.Chris Webb
When running the viper boundary tests, assert that the offset stores don't clobber the base register, which is saved and temporarily modified on some architectures. Signed-off-by: Chris Webb <chris@arachsys.com>
6 dayspy/asmthumb: Don't corrupt base register in large offset store.Chris Webb
asm_thumb_store_reg_reg_offset() modifies the base register when storing with a large offset which triggers the generic path. If a variable lives in that register, this corrupts it. Fix this by saving the base register on the stack before modifying it. Signed-off-by: Chris Webb <chris@arachsys.com>
6 dayspy/parse: Add support for math module constants and float folding.Yoctopuce dev
Add a new MICROPY_COMP_CONST_FLOAT feature, enabled by in mpy-cross and when compiling with MICROPY_CONFIG_ROM_LEVEL_CORE_FEATURES. The new feature leverages the code of MICROPY_COMP_CONST_FOLDING to support folding of floating point constants. If MICROPY_COMP_MODULE_CONST is defined as well, math module constants are made available at compile time. For example: _DEG_TO_GRADIANT = const(math.pi / 180) _INVALID_VALUE = const(math.nan) A few corner cases had to be handled: - The float const folding code should not fold expressions resulting into complex results, as the mpy parser for complex immediates has limitations. - The constant generation code must distinguish between -0.0 and 0.0, which are different even if C consider them as ==. This change removes previous limitations on the use of `const()` expressions that would result in floating point number, so the test cases of micropython/const_error have to be updated. Additional test cases have been added to cover the new repr() code (from a previous commit). A few other simple test cases have been added to handle the use of floats in `const()` expressions, but the float folding code itself is also tested when running general float test cases, as float expressions often get resolved at compile-time (with this change). Signed-off-by: Yoctopuce dev <dev@yoctopuce.com>
6 daysembed/port: Fix alloca include for Windows platforms.SiZiOUS
When building the embedded port on MinGW-w64, I receive the following error: fatal error: alloca.h: No such file or directory MinGW-w64 (used on MSYS2) doesn't include `alloca.h`, but `alloca()` is provided via `malloc.h` instead. And this fix is also needed for other Windows build systems. Signed-off-by: SiZiOUS <sizious@gmail.com>
6 daysnrf/drivers/bluetooth: Change soft-device download URL to self hosted.Damien George
The existing URLs have started to return a HTTP 403. The simplest way around this is to host the files at micropython.org, and point to them from the download script. The soft-device files have been retrieved from: - https://www.nordicsemi.com/Products/Development-software/s110/download - https://www.nordicsemi.com/Products/Development-software/s132/download - https://www.nordicsemi.com/Products/Development-software/s140/download Signed-off-by: Damien George <damien@micropython.org>
6 daystests/cpydiff: Remove passing types_float_rounding test.Damien George
Since commit dbbaa959c85c04dbbcde5908b5d0775b574e44e7, this test now produces the same output on MicroPython as CPython does, namely -1e+01. Signed-off-by: Damien George <damien@micropython.org>
6 daysgithub/workflows: Build unix port for docs and run workflow more often.Damien George
The unix port is needed to build the docs, due to the cpydiff tests which run both CPython and MicroPython (unix port). That was previously not failing the CI because the output from MicroPython was: /bin/sh: 1: ../ports/unix/build-standard/micropython: not found which doesn't match the CPython output for any of the cpydiff tests, and so it was considered a "pass" in terms of the output differing. Also, run the docs workflow when py/ or tests/cpydiff/ changes, because the cpydiff results may change when the core code changes. Signed-off-by: Damien George <damien@micropython.org>
7 dayspy/formatfloat: Improve accuracy of float formatting code.Yoctopuce dev
Following discussions in PR #16666, this commit updates the float formatting code to improve the `repr` reversibility, i.e. the percentage of valid floating point numbers that do parse back to the same number when formatted by `repr` (in CPython it's 100%). This new code offers a choice of 3 float conversion methods, depending on the desired tradeoff between code size and conversion precision: - BASIC method is the smallest code footprint - APPROX method uses an iterative method to approximate the exact representation, which is a bit slower but but does not have a big impact on code size. It provides `repr` reversibility on >99.8% of the cases in double precision, and on >98.5% in single precision (except with REPR_C, where reversibility is 100% as the last two bits are not taken into account). - EXACT method uses higher-precision floats during conversion, which provides perfect results but has a higher impact on code size. It is faster than APPROX method, and faster than the CPython equivalent implementation. It is however not available on all compilers when using FLOAT_IMPL_DOUBLE. Here is the table comparing the impact of the three conversion methods on code footprint on PYBV10 (using single-precision floats) and reversibility rate for both single-precision and double-precision floats. The table includes current situation as a baseline for the comparison: PYBV10 REPR_C FLOAT DOUBLE current = 364688 12.9% 27.6% 37.9% basic = 364812 85.6% 60.5% 85.7% approx = 365080 100.0% 98.5% 99.8% exact = 366408 100.0% 100.0% 100.0% Signed-off-by: Yoctopuce dev <dev@yoctopuce.com>
7 dayspy/parsenum: Refactor float parsing code.Yoctopuce dev
This commit extracts from the current float parsing code two functions which could be reused elsewhere in MicroPython. The code used to multiply a float x by a power of 10 is also simplified by applying the binary exponent separately from the power of 5. This avoids the risk of overflow in the intermediate stage, before multiplying by x. Signed-off-by: Yoctopuce dev <dev@yoctopuce.com>
7 dayswebassembly/proxy_js: Reuse JsProxy ref if object matches.Damien George
This reduces memory use by reusing objects, and improves identity/equality relationships of JavaScript objects on the Python side. In 77bd8fe5b80b0e7e02cdb6b4272c401ae3dca638 PyProxy's were reused when the same Python object was proxied across to JavaScript. This commit does the same thing but for JsProxy's going from JS to Python. If an existing JsProxy reference exists for the JS object about to be proxied across, then it's reused. This helps reduce the number of alive objects (memory use), and, more importantly, improves equality relationships of JavaScript objects on the Python side. Eg we now get, on the Python side: import js print(js.Object == js.Object) that prints True. Previously it was False. Note that this change does not make identity work with `is`, for example `js.Object is js.Object` is actually False. With more work that could be made True but for now we leave that as-is. The behaviour with this commit matches Pyodide semantics. Signed-off-by: Damien George <damien@micropython.org>