summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-03-22webassembly/library: Fix formatting and style for Biome.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Update README.md to describe latest changes.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly/variants/pyscript: Add pyscript variant.Damien George
This commit adds a pyscript variant for use in https://pyscript.net/. The configuration is: - No ASYNCIFY, in order to keep the WASM size down and have good performance. - MICROPY_CONFIG_ROM_LEVEL_FULL_FEATURES to enable most features. - Custom manifest that includes many of the python-stdlib libraries. - MICROPY_GC_SPLIT_HEAP_AUTO to increase GC heap size instead of doing a collection when memory is exhausted. This is needed because ASYNCIFY is disabled. Instead the GC collection is run at the top-level before executing any Python code. - No MICROPY_VARIANT_ENABLE_JS_HOOK because there is no asynchronous keyboard input to interrupt a running script. Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Implement replInit() and replProcessChar().Damien George
This is the JavaScript API for starting and running a REPL. Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Implement runCLI() for a Node-based CLI.Damien George
This allows running MicroPython webassembly from the command line using: node micropython.mjs Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Implement runPythonAsync() for top-level async code.Damien George
With this commit, `interpreter.runPythonAsync(code)` can now be used to run Python code that uses `await` at the top level. That will yield up to JavaScript and produce a thenable, which the JavaScript runtime can then resume. Also implemented is the ability for Python code to await on JavaScript promises/thenables. For example, outer JavaScript code can await on `runPythonAsync(code)` which then runs Python code that does `await js.fetch(url)`. The entire chain of calls will be suspended until the fetch completes. Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Add JavaScript proxying, and js and jsffi modules.Damien George
This commit improves the webassembly port by adding: - Proxying of Python objects to JavaScript with a PyProxy type that lives on the JavaScript side. PyProxy implements JavaScript Proxy traps such as has, get, set and ownKeys, to make Python objects have functionality on the JavaScript side. - Proxying of JavaScript objects to Python with a JsProxy type that lives on the Python side. JsProxy passes through calls, attributes, subscription and iteration from Python to JavaScript. - A top-level API on the JavaScript side to construct a MicroPython interpreter instance via `loadMicroPython()`. That function returns an object that can be used to execute Python code, access the Python globals dict, access the Emscripten filesystem, and other things. This API is based on the API provided by Pyodide (https://pyodide.org/). As part of this, the top-level file is changed from `micropython.js` to `micropython.mjs`. - A Python `js` module which can be used to access all JavaScript-side symbols, for example the DOM when run within a browser. - A Python `jsffi` module with various helper functions like `create_proxy()` and `to_js()`. - A dedenting lexer which automatically dedents Python source code if every non-empty line in that source starts with a common whitespace prefix. This is very helpful when Python source code is indented within a string within HTML or JavaScript for formatting reasons. Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Clean up Makefile and add variant support.Damien George
This commit cleans up and generalises the Makefile, adds support for variants (following the unix port) and adds the "standard" variant as the default variant. Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Add support for enabling MICROPY_GC_SPLIT_HEAP_AUTO.Damien George
When enabled the GC will not reclaim any memory on a call to `gc_collect()`. Instead it will grow the heap. Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Use POSIX write for output and add stderr.Damien George
All output is now handled by Emscripten's stdio facility. Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Enable time localtime, gmtime, time, time_ns.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Implement MICROPY_PY_RANDOM_SEED_INIT_FUNC.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Move MP_JS_EPOCH init to library postset.Damien George
This eliminates the need for wrapper.js to run to set up the time. Signed-off-by: Damien George <damien@micropython.org>
2024-03-22webassembly: Include lib in sys.path.Damien George
Following other ports. Signed-off-by: Damien George <damien@micropython.org>
2024-03-22py/compile: Add option to allow compiling top-level await.Damien George
Enabled by MICROPY_COMPILE_ALLOW_TOP_LEVEL_AWAIT. When enabled, this means that scope such as module-level functions and REPL statements can yield. The outer C code must then handle this yielded generator. Signed-off-by: Damien George <damien@micropython.org>
2024-03-22esp32: Workaround IDF issue placing ISR ringbuf functions in IRAM.Jim Mussared
This workaround makes sure that all ringbuf functions that may be called from an ISR are placed in IRAM. See https://github.com/espressif/esp-idf/issues/13378 Note that this means that all esp32-og builds get non-ISR ringbuf functions placed in flash now, whereas previously it was just the spiram variant. This might be a good thing (e.g. free up some IRAM for native/viper). Fixes issue #14005. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2024-03-22py/parse: Zero out dangling parse tree pointer to fix potential GC leak.Angus Gratton
This fixes a bug where a random Python object may become un-garbage-collectable until an enclosing Python file (compiled on device) finishes executing. Details: The mp_parse_tree_t structure is stored on the stack in top-level functions such as parse_compile_execute() in pyexec.c (and others). Although it quickly falls out of scope in these functions, it is usually still in the current stack frame when the compiled code executes. (Compiler dependent, but usually it's one stack push per function.) This means if any Python object happens to allocate at the same address as the (freed) root parse tree chunk, it's un-garbage-collectable as there's a (dangling) pointer up the stack referencing this same address. As reported by @GitHubsSilverBullet here: https://github.com/orgs/micropython/discussions/14116#discussioncomment-8837214 This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-03-20tests/float/float_struct_e.py: Add specific test for struct 'e' type.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-20unix/variants: Don't use native _Float16 type.Damien George
Using it increases code size by about 2k. Signed-off-by: Damien George <damien@micropython.org>
2024-03-20stm32/stm32.mk: Enable _Float16 support on MCUs with hardware floats.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-20py/binary: Support half-float 'e' format in struct pack/unpack.Matthias Urlichs
This commit implements the 'e' half-float format: 10-bit mantissa, 5-bit exponent. It uses native _Float16 if supported by the compiler, otherwise uses custom bitshifting encoding/decoding routines. Signed-off-by: Matthias Urlichs <matthias@urlichs.de> Signed-off-by: Damien George <damien@micropython.org>
2024-03-19docs/library/rp2.DMA: Add documentation for rp2 DMA support.Nicko van Someren
Signed-off-by: Nicko van Someren <nicko@nicko.org>
2024-03-19extmod/modnetwork: Implement IPv6 API to set and get NIC configuration.Felix Dörre
This commit implements a new <AbstractNIC>.ipconfig() function for the NIC classes that use lwIP, to set and retrieve network configuration for a NIC. Currently this method supports: - ipconfig("addr4"): obtain a tuple (addr, netmask) of the currently configured ipv4 address - ipconfig("addr6"): obtain a list of tuples (addr, state, prefered_lifetime, valid_lifetime) of all currently active ipv6 addresses; this includes static, slaac and link-local addresses - ipconfig("has_dhcp4"): whether ipv4 dhcp has supplied an address - ipconfig("has_autoconf6"): if there is a valid, non-static ipv6 address - ipconfig(addr4="1.2.3.4/24"): to set the ipv4 address and netmask - ipconfig(addr6="2a01::2"): to set a static ipv6 address; note that this does not configure an interface route, as this does not seem supported by lwIP - ipconfig(autoconf6=True): to enable ipv6 network configuration with slaac - ipconfig(gw4="1.2.3.1"): to set the ipv4 gateway - ipconfig(dhcp4=True): enable ipv4 dhcp; this sets ipv4 address, netmask, gateway and a dns server - ipconfig(dhcp4=False): stops dhcp, releases the ip, and clears the configured ipv4 address. - ipconfig(dhcp6=True): enable stateless dhcpv6 to obtain a dns server There is also a new global configuration function network.ipconfig() that supports the following: - network.ipconfig(dns="2a01::2"): set the primary dns server (can be a ipv4 or ipv6 address) - network.ipconfig(prefer=6): to prefer ipv6 addresses to be returned as dns responses (falling back to ipv4 if the host does not have an ipv6 address); note that this does not flush the dns cache, so if a host is already in the dns cache with its v4 address, subsequent lookups will return that address even if prefer=6 is set This interface replaces NIC.ifconfig() completely, and ifconfig() should be marked as deprecated and removed in a future version. Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-03-19stm32/boards/LEGO_HUB_NO6: Use a raw filesystem for mboot to update fw.Damien George
The C-based SPI flash driver is needed because the `_copy_file_to_raw_filesystem()` function must copy from a filesystem (eg FAT) to another part of flash, and the same C code must be used for both reading (from FAT) and writing (to flash). Signed-off-by: Damien George <damien@micropython.org>
2024-03-19stm32/boards/LEGO_HUB_NO6: Move robust logic to mboot.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-19stm32/mboot: Add support for a raw filesystem.Damien George
This is enabled by default if MBOOT_FSLOAD is enabled, although a board can explicitly disable it by `#define MBOOT_VFS_RAW (0)`. Signed-off-by: Damien George <damien@micropython.org>
2024-03-19py/emitnative: Implement viper unary ops positive, negative and invert.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-19py/asmxtensa: Optimise asm_xtensa_mov_reg_i32_optimised() for tiny ints.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-19py/asm: Add ASM_NOT_REG and ASM_NEG_REG macros for unary ops.Damien George
ASM_NOT_REG is optional, it can be synthesised by xor(reg, -1). ASM_NEG_REG can also be synthesised with a subtraction, but most architectures have a dedicated instruction for it. Signed-off-by: Damien George <damien@micropython.org>
2024-03-19docs/library/collections: Update deque docs to describe new features.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-19tests/basics: Split MicroPython-specific deque tests to separate file.Damien George
So that the MicroPython-specific behaviour can be isolated, and the CPython compatible test don't need a .exp file. Signed-off-by: Damien George <damien@micropython.org>
2024-03-19tools/mpy-tool.py: Fix merging of more than 128 mpy files.Damien George
The argument to MP_BC_MAKE_FUNCTION (raw code index) was being encoded as a byte instead of a variable unsigned int. That meant that if there were more than 128 merged mpy files the encoding would be invalid. Fix that by using `mp_encode_uint(idx)` to encode the raw code index. And also use `Opcode` constants for the opcode values to make it easier to understand the code. Signed-off-by: Damien George <damien@micropython.org>
2024-03-18py/objdeque: Expand implementation to be doubly-ended and support iter.Dash Peters
Add `pop()`, `appendleft()`, and `extend()` methods, support iteration and indexing, and initializing from an existing sequence. Iteration and indexing (subscription) have independent configuration flags to enable them. They are enabled by default at the same level that collections.deque is enabled (the extra features level). Also add tests for checking new behavior. Signed-off-by: Damien George <damien@micropython.org>
2024-03-16all: Update extmod, ports, examples to build with new berkeley-db lib.Damien George
This provides a MicroPython-specific berkeley-db configuration in extmod/berkeley-db/berkeley_db_config_port.h, and cleans up the include path for this library. Fixes issue #13092. Signed-off-by: Damien George <damien@micropython.org>
2024-03-16lib/berkeley-db-1.xx: Update submodule URL and version.Damien George
This updates the berkeley-db-1.xx submodule URL to a repository hosted under the micropython organisation, and makes the following changes: - Moves the berkeley-db header files to a single directory within the submodule, and references all these headers with a much fuller path, which prevents symbol clashes (eg with esp32 and queue.h). - Removes unused/non-working files from berkeley-db, which removes all symlinks in that repo (symlinks don't play well under Windows). - Allows injecting an external configuration header into berkeley-db, so the configuration doesn't have to be provided by -Dxx=yy flags to the compiler (and possibly clashing with other symbols). - Removes the advertising clause from the BSD 4-clause license of berkeley-db (see relevant commit and README.Impt.License.Change for details). Signed-off-by: Damien George <damien@micropython.org>
2024-03-16extmod/os_dupterm: Handle exception properly when it occurs in parallel.Felix Dörre
When an exception is handled and the stream is closed, but while this happens, another exception occurs or dupterm is deactivated for another reason, the initial deactivation crashes, because its dupterm is removed. Co-authored-by: Damien George <damien@micropython.org> Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-03-16nrf/boards: Enable MICROPY_HW_ENABLE_USBDEV on boards with USB CDC.Damien George
These boards were broken by 9d0d262be069089f01da6b40d2cd78f1da14de0f. Signed-off-by: Damien George <damien@micropython.org>
2024-03-15LICENSE: Add libmetal and open-amp to 3rd-party license list.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-15tools/ci.sh: Add Arduino GIGA to stm32 CI build.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15docs/library/openamp: Document the new openamp module.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15stm32/boards/ARDUINO_PORTENTA_H7: Enable OpenAMP.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15stm32/boards/ARDUINO_NICLA_VISION: Enable OpenAMP.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15stm32/boards/ARDUINO_GIGA: Enable OpenAMP.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15stm32: Implement port backend for OpenAMP's remoteproc.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15stm32: Implement port backend for libmetal.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15extmod/modopenamp_remoteproc: Add new OpenAMP RemoteProc class.iabdalkader
RemoteProc provides an API to load firmware and control remote processors. Note: port-specific operations must be implemented to support this class. Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15extmod/modopenamp: Add new OpenAMP module.iabdalkader
This module implements OpenAMP's basic initialization and shared resources support, and provides support for OpenAMP's RPMsg component, by providing an `endpoint` type (a logical connection on top of RPMsg channel) which can be used to communicate with the remote core. Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15stm32/mpu: Add MPU config for shared, uncached memory region.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15py/stream: Factor stream implementations.Damien George
So there's only one location that does the ioctl(MP_STREAM_SEEK) call. Signed-off-by: Damien George <damien@micropython.org>
2024-03-15py/stream: Add mp_stream_seek() helper function.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>