summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-02-26extmod/modlwip: Add back support for empty IP addresses.Felix Dörre
Prior to commit 628abf8f25a7705a2810fffe2ca6ae652c532896 which added IPv6 support, binding a socket with s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(("", PORT)) was possible. But, the empty string is not regarded as a valid IP address by lwip. This commit adds a special case for the empty IP string, restoring the previous CPython-compatible behaviour. Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-26extmod/modwebsocket: Fix websocket to send correct close frame.Felix Dörre
When the websocket closes currently, it does not send a proper "close"-frame, but rather encodes the 0x8800-sequence inside a binary packet, which is wrong. The close packet is a different kind of websocket frame, according to https://www.rfc-editor.org/rfc/rfc6455. This change resolves an error in Firefox when the websocket closes. Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-26stm32/sdram: Support remapping FMC memory banks.iabdalkader
The patch enables SDRAM banks 1 and 2 to be accessible at 0xC0000000 and 0xD0000000 respectively (default mapping) or remapped to addresses 0x60000000 and 0x70000000. Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-02-24github/ISSUE_TEMPLATE: Convert issue templates to forms.Angus Gratton
Allows giving more specific advice, provides more links to other places to ask questions, check details, etc. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-22py/emitglue: Make mp_emit_glue_assign_native's fun_data arg a const ptr.Damien George
It will only ever be read from, and in some cases (eg on esp8266) can actually be in ROM. Signed-off-by: Damien George <damien@micropython.org>
2024-02-21extmod/modmachine: Remove MICROPY_PY_MACHINE guard from header.Damien George
So this header file can expose declarations for contents of the `machine` module even if that module is disabled. Other parts of the system -- or third-party code -- may need these declarations, for example when a single component like MICROPY_PY_MACHINE_UART is enabled with MICROPY_PY_MACHINE disabled. Signed-off-by: Damien George <damien@micropython.org>
2024-02-21stm32/mpbthciport: Allow building with MICROPY_PY_MACHINE_UART disabled.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-21py/compile: Remove TODO about name mangling.Damien George
This TODO is now covered by the tests/cpydiff/core_class_name_mangling.py test. Signed-off-by: Damien George <damien@micropython.org>
2024-02-21tests/cpydiff: Add new CPy diff test for class name mangling.Trent Warlaven
Adds new tests/documentation for missing name mangling for private class members. Signed-off-by: Trent Warlaven <trwbox@gmail.com>
2024-02-21extmod/vfs_posix_file: Ensure file object has safe default fd.Andrew Leech
With this commit, if file open fails, the object will have fd = -1 (closed) and the finaliser will not attempt to close anything. Fixes issue #13672. Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
2024-02-20esp32/machine_hw_spi: Combine argument parsing for constructor and init.Trent Piepho
This combines the argument parsing and checking for the machine.SPI.init() and machine.SPI() interfaces. The only real difference was unspecified arguments in init() mean to keep the same value, while in new they get default values. Behavior has changed for passing the "id" argument to init(). On other ports this isn't allowed. But on esp32 it would change the SPI controller of the static SPI instance to the new id. This results in multiple static spi objects for the same controller and they would fight over which one has inconsistent mpy vs esp-idf state. This has been changed to not allow "id" with init(), like other ports. In a few causes, a loop is used over arguments that are handled the same way instead of cut & pasting the same stanza of code for each argument. The init_internal function had a lot of arguments, which is not efficient to pass. Pass the args mp_arg_val_t array instead as a single argument. This reduced both the number of C lines and the compiled code size. Summary of code size change: Two argument lists of 72 bytes are replaced by a single shared 72 byte list. New shared argument parsing code is small enough to be inlined, but is still efficient enough to shrink the overall code size by 349 bytes of the three argument handlering functions. add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-349 (-349) Function old new delta machine_hw_spi_make_new 255 203 -52 machine_hw_spi_init 122 67 -55 machine_hw_spi_init_internal 698 456 -242 Total: Before=1227667, After=1227318, chg -0.03% add/remove: 2/0 grow/shrink: 0/2 up/down: 92/-144 (-52) Data old new delta spi_allowed_args - 72 +72 defaults$0 - 20 +20 allowed_args$1 240 168 -72 allowed_args$0 1080 1008 -72 Total: Before=165430, After=165378, chg -0.03% add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0) Signed-off-by: Trent Piepho <tpiepho@gmail.com>
2024-02-20esp32/machine_i2c: Fix build warnings when I2C is disabled.IhorNehrutsa
Signed-off-by: IhorNehrutsa <Ihor.Nehrutsa@gmail.com>
2024-02-20stm32/mboot: Generate FLASH_LAYOUT_STR at runtime on H5 MCUs.Damien George
The size of the flash varies among MCU variants. Instead of requiring a build-time variable to configure this, compute it at runtime using the special device information word accessible through the FLASH_SIZE macro. This feature is currently only implemented for H5 MCUs, but can be extended to others. Signed-off-by: Damien George <damien@micropython.org>
2024-02-20py/builtinevex: Fix setting globals for native functions in compile().Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-20py/emitglue: Remove n_pos_args from DEBUG_printf.Damien George
This argument was renamed in 39bf055d23be4b0f761af115773c3db1074fc2dd. Signed-off-by: Damien George <damien@micropython.org>
2024-02-20py/objfun: Inline mp_obj_code_get_name() into mp_obj_fun_get_name().Damien George
The former is static and does not need to be a separate function. Signed-off-by: Damien George <damien@micropython.org>
2024-02-20py/objfun: Support __name__ on native functions and generators.Damien George
This is now easy to support, since the first machine-word of a native function tells how to find the prelude, from which the function name can be extracted in the same way as for bytecode. Signed-off-by: Damien George <damien@micropython.org>
2024-02-20py/emitnative: Simplify layout and loading of native function prelude.Damien George
Now native functions and native generators have similar behaviour: the first machine-word of their code is an index to get to the prelude. This simplifies the handling of these types of functions, and also reduces the size of the emitted native machine code by no longer requiring special code at the start of the function to load a pointer to the prelude. Signed-off-by: Damien George <damien@micropython.org>
2024-02-20py/objfun: Split viper fun type out to separate mp_type_fun_viper type.Damien George
Viper functions are quite different to native functions and benefit from being a separate type. For example, viper functions don't have a bytecode- style prelude, and don't support generators or default arguments. Signed-off-by: Damien George <damien@micropython.org>
2024-02-20py/objfun: Make mp_obj_new_fun_native/mp_obj_new_fun_asm static-inline.Damien George
To reduce code size, since they are only used once by py/emitglue.c. Signed-off-by: Damien George <damien@micropython.org>
2024-02-20py/misc: Remove m_new_obj[_var]_with_finaliser macros.Damien George
They are no longer used. The new `mp_obj_malloc_with_finaliser()` macros should be used instead, which force the setting of the `base.type` field. And there's always `m_malloc_with_finaliser()` if needed. Signed-off-by: Damien George <damien@micropython.org>
2024-02-20all: Use mp_obj_malloc_with_finaliser everywhere it's applicable.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-20py/obj: Introduce mp_obj_malloc_with_finaliser to allocate and set type.Damien George
Following 709e8328d9812a2e02da6fba65a03f9a873d60a2. Using this helps to reduce code size. And it ensure that the type is always set as soon as the object is allocated, which is important for the GC to function correctly. Signed-off-by: Damien George <damien@micropython.org>
2024-02-19py/obj: Change sizeof to offsetof in mp_obj_malloc_var macro.Damien George
Following b6a977848407a4ced45d118cf926bd915cc89dfb, to properly calculate the size of the variable-length allocation. Signed-off-by: Damien George <damien@micropython.org>
2024-02-19py/makeversionhdr.py: Reinstate MICROPY_GIT_HASH in mpversion.h.Damien George
MICROPY_GIT_HASH was removed in 69e34b6b6bdf45bc1111777c46839a8b5fcb30bd but it is useful for, and used by, third-party code to tell which hash of MicroPython is used. Signed-off-by: Damien George <damien@micropython.org>
2024-02-19tools/manifestfile.py: Add --unix-ffi option.Angus Gratton
Follow up to 35dd959133fb233d75e9b3cddbf98b2ed01c6594, allows explicitly adding the unix-ffi library path from the command line. This option is needed when building unix-ffi manifests in micropython-lib CI. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-16py/emitglue: Include fun_data_len in mp_raw_code_t only when saving.Damien George
Reduces the size of mp_raw_code_t in the case when MICROPY_DEBUG_PRINTERS is enabled. Signed-off-by: Damien George <damien@micropython.org>
2024-02-16tests/ports/unix: Add coverage test for frozen functions and generators.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-16tools/mpy-tool.py: Skip generating frozen mp_raw_code_t when possible.Damien George
This reduces frozen code size by using the bytecode directly as the `mp_proto_fun_t`. Signed-off-by: Damien George <damien@micropython.org>
2024-02-16py/emitglue: Introduce mp_proto_fun_t as a more general mp_raw_code_t.Damien George
Allows bytecode itself to be used instead of an mp_raw_code_t in the simple and common cases of a bytecode function without any children. This can be used to further reduce frozen code size, and has the potential to optimise other areas like importing. Signed-off-by: Damien George <damien@micropython.org>
2024-02-16py/emitglue: Simplify mp_raw_code_t's kind and scope_flags members.Damien George
To simplify their access and reduce code size. The `scope_flags` member is only ever used to determine if a function is a generator or not, so make it reflect that fact as a bool type. Signed-off-by: Damien George <damien@micropython.org>
2024-02-16py/emitglue: Provide a truncated mp_raw_code_t for non-asm code.Damien George
The `asm_n_pos_args` and `asm_type_sig` members of `mp_raw_code_t` are only used for raw codes of type MP_CODE_NATIVE_ASM, which are rare, for example in frozen code. So using a truncated `mp_raw_code_t` in these cases helps to reduce frozen code size on targets that have MICROPY_EMIT_INLINE_ASM enabled. With this, change in firmware size of RPI_PICO builds is -648. Signed-off-by: Damien George <damien@micropython.org>
2024-02-16py/emitglue: Reorder and resize members of mp_raw_code_t.Damien George
The mp_raw_code_t struct has been reordered and some members resized. The `n_pos_args` member is renamed to `asm_n_pos_args`, and `type_sig` renamed to `asm_type_sig` to indicate that these are used only for the inline-asm emitters. These two members are also grouped together in the struct. The justifications for resizing the members are: - `fun_data_len` can be 32-bits without issue - `n_children` is already limited to 16-bits by `mp_emit_common_t::ct_cur_child` - `scope_flags` is already limited to 16-bits by `scope_t::scope_flags` - `prelude_offset` is already limited to 16-bits by the argument to `mp_emit_glue_assign_native()` - it's reasonable to limit the maximim number of inline-asm arguments to 12 (24 bits for `asm_type_sig` divided by 2) This change helps to reduce frozen code size (and in some cases RAM usage) in the following cases: - 64-bit targets - builds with MICROPY_PY_SYS_SETTRACE enabled - builds with MICROPY_EMIT_MACHINE_CODE enabled but MICROPY_EMIT_INLINE_ASM disabled With this change, unix 64-bit builds are -4080 bytes in size. Bare-metal ports like rp2 are unchanged (because mp_raw_code_t is still 32 bytes on those 32-bit targets). Signed-off-by: Damien George <damien@micropython.org>
2024-02-16extmod/network_wiznet5k: Adjust IP types for IPv6.Felix Dörre
Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-16extmod/modlwip: Support IPv6.Felix Dörre
With these changes IPv6 works on the rp2 port (and possibly others that use the lwIP socket implementation). Things that have been tested and work: - Neighbour solicitation for v6 link local address. - Ping of v6 link-local address. - Receiving a SLAAC address via router advertisement. - Ping a v6 address allocated via SLAAC. - Perform an outgoing connection to a routed v6-address (via default gateway). - Create a listening IPv6 wildcard socked bound to ::, and trying to access it via link-local, SLAAC, and IPv4 (to ensure the dual-stack binding works). Things that could be improved: - socket.socket().getaddrinfo only returns the v4 address. It could also return v6 addresses (getaddrinfo is actively programmed to only return a single address, and this is the v4-address by default, with fallback to the v6 address if both are enabled). Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-16tests/multi_bluetooth/ble_irq_calls.py: Enhance test to test recursion.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-16esp32: Increase NimBLE task stack size and overflow detection headroom.Damien George
The Python BLE IRQ handler will most likely run on the NimBLE task, so its C stack must be large enough to accommodate reasonably complicated Python code (eg a few call depths). So increase this stack size. Also increase the headroom from 1024 to 2048 bytes. This is needed because (1) the esp32 architecture uses a fair amount of stack in general; and (2) by the time execution gets to setting the Python stack top via `mp_stack_set_top()` in this interlock code, about 600 bytes of stack are already used, which reduces the amount available for Python. Fixes issue #12349. Signed-off-by: Damien George <damien@micropython.org>
2024-02-15unix: Don't include system headers when features are disabled.YAMAMOTO Takashi
Because the target system may not have these headers at all. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
2024-02-15unix/input: Flush the prompt after writing it to stdout.YAMAMOTO Takashi
Depending on your setup, stdout might be buffered/line-buffered. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
2024-02-15minimal: Use printf instead of echo -e.YAMAMOTO Takashi
macOS's echo doesn't have -e option. printf is in POSIX and more widely available these days. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
2024-02-15minimal: Allow compiling on macOS.YAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
2024-02-15esp32/mpnimbleport: Release the GIL while doing NimBLE port deinit.Damien George
In case callbacks must run (eg a disconnect event happens during the deinit) and the GIL must be obtained to run the callback. Fixes part of issue #12349. Signed-off-by: Damien George <damien@micropython.org>
2024-02-15esp32/network_ppp: Make PPP support optional.Trent Piepho
PPP is not that commonly used, let it be turned off in the board config to save space. It is still on by default. On an basic ESP32-S3 build, turning off PPP with LWIP still on saves ~35 kB of codend 4 kB of data. text data bss dec hex filename 1321257 304296 2941433 4566986 45afca before-ppp-off.elf 1285101 299920 2810305 4395326 43113e after-ppp-off.elf ------------------------------- -36156 -4376 -56 Note that the BSS segment size includes all NOBITS sections in ELF file. Some of these are aligned to 64kB chunk sized dummy blocks, I think for alignment to MMU boundaries, and these went down by 1 block each, so 128 kiB of BSS is not really part of the binary size reduction. Signed-off-by: Trent Piepho <tpiepho@gmail.com>
2024-02-15ports: On cold boot, enable USB after boot.py completes.Angus Gratton
For mimxrt, nrf, renesas-ra, rp2 and samd ports, this commit implements similar behaviour to the stm32 port, where USB is only brought up after boot.py completes execution. Currently this doesn't add any useful functionality (and may break workflows that depend on USB-CDC being live in boot.py), however it's a precondition for more usable workflows with USB devices defined in Python (allows setting up USB interfaces in boot.py before the device enumerates for the first time). This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-15shared/timeutils: Remove useless void-return.Yoctopuce
The C99 standard states: 6.8.6.4 The return statement Constraints A return statement with an expression shall not appear in a function whose return type is void. A return statement without an expression shall only appear in a function whose return type is void. And when `-pedantic` is enabled the compiler gives an error. Signed-off-by: Yoctopuce <dev@yoctopuce.com>
2024-02-15extmod/modrandom: Add integer type casts where appropriate.Yoctopuce
To prevent compiler warnings when `mp_int_t` is 64-bits. Signed-off-by: Yoctopuce <dev@yoctopuce.com>
2024-02-15embed: Improve stack top estimation.YAMAMOTO Takashi
Obtaining the stack-top via a few function calls may yield a pointer which is too deep within the stack. So require the user to obtain it from a higher level (or via some other means). Fixes issue #11781. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
2024-02-15mimxrt: Fix header include guard names.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-02-12tools/mpy-tool.py: Fix static qstrs when freezing without qstr header.Damien George
It's rare to freeze .mpy files without specifying a qstr header from a firmware build, but it can be useful for testing, eg `mpy-tool.py -f test.mpy`. Fix this case so static qstrs are properly excluded from the frozen qstr list. Signed-off-by: Damien George <damien@micropython.org>
2024-02-12extmod/btstack: Reset pending_value_handle before calling read-done cb.Damien George
Similar to the previous commit but for MP_BLUETOOTH_IRQ_GATTC_READ_DONE: the pending_value_handle needs to be reset before calling mp_bluetooth_gattc_on_read_write_status(), which will call the Python IRQ handler, which may in turn call back into BTstack to perform an action like a write. In that case the pending_value_handle will need to be available for the write/read/etc to proceed. Fixes issue #13634. Signed-off-by: Damien George <damien@micropython.org>