summaryrefslogtreecommitdiff
path: root/extmod
AgeCommit message (Collapse)Author
2024-06-27extmod/extmod.mk: Disable maybe-uninitialized warnings in libm_dbl.Damien George
These warnings are emitted by arm-none-eabi-gcc 14.1.0 with -O2 enabled. Signed-off-by: Damien George <damien@micropython.org>
2024-06-20extmod/modasyncio: Add support for a callback on TaskQueue push.Damien George
Allows passing in a callback to `TaskQueue()` that is called when something is pushed on to the queue. Signed-off-by: Damien George <damien@micropython.org>
2024-06-17extmod/modplatform: Add picolibc to the recognised libcs list.Alessandro Gatti
This adds picolibc to the list of the recognised libc options. Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2024-06-08extmod/modlwip: Consolidate socket.accept timeout logic.Damien George
This makes the code a bit simpler to understand for the three cases of timeout behaviour (-1, 0, non-zero), and eliminates a dependency on the (slow) `mp_hal_delay_ms(100)` call. Signed-off-by: Damien George <damien@micropython.org>
2024-06-08extmod/modlwip: Make socket.connect raise ETIMEDOUT on non-zero timeout.Damien George
If the socket timeout is 0 then a failed socket.connect() raises EINPROGRESS (which is what the lwIP bindings already did), but if the socket timeout is non-zero then a failed socket.connect() should raise ETIMEDOUT. The latter is fixed in this commit. A test is added for these timeout cases. Signed-off-by: Damien George <damien@micropython.org>
2024-06-04extmod/network_lwip: Allow using the CIDR notation for addr4.robert-hh
There was a little omisssion in the code. Signed-off-by: robert-hh <robert@hammelrath.com>
2024-06-04extmod/network_ninaw10: Implement the ipconfig methods for ninaw10.robert-hh
This implements network.ipconfig() and network.WLAN.ipconfig() when the ninaw10 driver is used for WLAN. Due to a omission in the ninaw10 driver stack, setting the DNS address has no effect. But the interface is kept here just in case it's fixed eventually. dhcp4 and has_dhcp4 are dummy arguments. Ninaw10 seems to always use DHCP. Signed-off-by: robert-hh <robert@hammelrath.com>
2024-05-27extmod/modos: Only sync FAT filesystems using disk_ioctl.Damien George
Eventually this needs to be made a generic call to the underlying VFS. But for now this prevents `disk_ioctl()` crashing on non-FAT filesystems. Signed-off-by: Damien George <damien@micropython.org>
2024-05-23extmod/modlwip: Use Nagle algorithm and add support for TCP_NODELAY.Jared Hancock
This adds support to use the Nagle algorithm implemented already in lwIP to determine when TCP data should be sent. As currently written, MicroPython will only create packets if there is <25% remaining in the send buffer. Using it, sending a small message of ~50 bytes will not trigger output of the message on the network. So it will remained queued until the TCP interval timer expires, which can be up to 500ms. Using Nagle's algorithm, the first write, no matter how small, will generate a packet on the network. And sending lots of data still makes efficient use of the link. In addition to this, an application designer may choose to always create packets for every write by setting the TCP_NODELAY socket option. That's also implemented in this commit.
2024-05-07extmod/network_wiznet5k: Properly enable socket buffers for W5100(S).Jared Hancock
The W5100 and W5100S only have 4 available sockets and 16kB of socket buffer. Allocating 16kB to either the receive or transmit buffer of a single socket is not allowed, so the current setup does not change the allocation for socket 0 from the reset default. ctlwizchip is returning -1 to indicate the error, but the response isn't being inspected and probably doesn't need to be. Signed-off-by: Jared Hancock <jared@greezybacon.me>
2024-04-24extmod/modasyncio: Make mp_asyncio_context variable public.Damien George
So it can be accessed by a port if needed, for example to see if asyncio has been imported. Signed-off-by: Damien George <damien@micropython.org>
2024-03-29extmod/modopenamp: Use metal logging functions exclusively.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-29extmod/modopenamp: Set a default log handler for ports.iabdalkader
Use the existing metal log handling mechanism instead of overriding the metal_log, which causes build issues when logging is enabled. Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-28extmod/modtls_axtls: Add verify_mode and CERT_NONE constant.Damien George
Supporting `verify_mode` and `CERT_NONE` is required for the new `ssl.py` code, as well as `requests` to work. Signed-off-by: Damien George <damien@micropython.org>
2024-03-28examples/natmod/framebuf: Enable FrameBuffer.poly method.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-03-28extmod: Add interface and security constants at WLAN class level.iabdalkader
Other constants such as `machine.Pin.OUT` are defined on the class that uses them, rather than at the module level. This commit makes that the case for WLAN network interfaces, adding IF_xxx and SEC_xxx constants. The SEC_xxx constants are named as such to match the `security` keyword that they are used with. And the IF_xxx constants have IF as a prefix so they are grouped together as names. This scheme of putting constants on the class means that only the available features (eg security configurations) are made available as constants. It also means that different network interfaces (eg WLAN vs LAN) can keep their own specific constants within their class, such as PHY_xxx for LAN. Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-25extmod/network_wiznet5k: Properly enable interrupt signal on w5100s.Jared Hancock
According to the datasheet, the IEN bit to enable the interrupt is in the MR2 register, not the MR register. This is just cleanup as the interrupt appears to be enabled by default after resetting the chip. Tested on W5100S_EVB_PICO.
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-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-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-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-15extmod/libmetal: Add MicroPython platform for libmetal.iabdalkader
Add a MicroPython platform for libmetal, based on the generic platform. The MicroPython platform uses common mp_hal_xxx functions and allows ports to customize default configurations for libmetal. Signed-off-by: Jim Mussared <jim.mussared@gmail.com> Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-15extmod/machine_usb_device: Add support for Python USB devices.Angus Gratton
This new machine-module driver provides a "USBDevice" singleton object and a shim TinyUSB "runtime" driver that delegates the descriptors and all of the TinyUSB callbacks to Python functions. This allows writing arbitrary USB devices in pure Python. It's also possible to have a base built-in USB device implemented in C (eg CDC, or CDC+MSC) and a Python USB device added on top of that. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-03-15extmod/nimble: Check for active before setting address mode.Daniël van de Giessen
`BLE().config(addr_mode=...)` is not safe to call if the NimBLE stack is not yet active (because it tries to acquire mutexes which should be initialized first). Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-03-15extmod/modmachine: Add MICROPY_PY_MACHINE_RESET configuration option.Damien George
Disabled by default, but enabled on all boards that previously had `MICROPY_PY_MACHINE_BARE_METAL_FUNCS` enabled. Signed-off-by: Damien George <damien@micropython.org>
2024-03-15extmod/modmachine: Add MICROPY_PY_MACHINE_MEMX configuration option.Damien George
Enabled by default. Signed-off-by: Damien George <damien@micropython.org>
2024-03-15extmod/modmachine: Add MICROPY_PY_MACHINE_SIGNAL configuration option.Damien George
Enabled by default. Signed-off-by: Damien George <damien@micropython.org>
2024-03-14extmod/network_ninaw10: Fix error messages.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-14extmod/network_ninaw10: Set the proper security mode if none provided.iabdalkader
If no security mode is provided, use WPA for station and WEP for AP. Note only WEP is supported in AP mode. Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-14extmod/network_ninaw10: Activate the NIC on demand.iabdalkader
Activate the NIC on calls to connect() or config() if it's not already active. This change makes the NINA NIC more in line with CYW43 and other NICs, which allow configuring the NIC before or after it is activated. Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-08esp32/machine_i2s: Integrate new I2S IDF driver.MikeTeachman
The legacy I2S "shim" is removed and replaced by the new I2S driver. The new driver fixes a bug where mono audio plays only in one channel. Application code size is reduced by 2672 bytes with this change. Tested on ESP32, ESP32+spiram, ESP32-S3 using example code from https://github.com/miketeachman/micropython-i2s-examples Signed-off-by: Mike Teachman <mike.teachman@gmail.com>
2024-03-07all: Prune trailing whitespace.Phil Howard
Prune trailing whitespace across the whole project (almost), done automatically with: grep -IUrl --color "[[:blank:]]$" --exclude-dir=.git --exclude=*.exp |\ xargs sed -i 's/[[:space:]]*$//' Exceptions: - Skip third-party code in lib/ and drivers/cc3100/ - Skip generated code in bluetooth_init_cc2564C_1.5.c - Preserve command output whitespace in docs, eg: docs/esp8266/tutorial/repl.rst Signed-off-by: Phil Howard <phil@gadgetoid.com>
2024-03-07all: Remove the "STATIC" macro and just use "static" instead.Angus Gratton
The STATIC macro was introduced a very long time ago in commit d5df6cd44a433d6253a61cb0f987835fbc06b2de. 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-02-29py/modthread: Move thread state initialisation to shared function.Daniël van de Giessen
Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-02-29extmod/nimble: Enable key distribution to support bonding.Daniël van de Giessen
This sets the BLE key distribution parameters at runtime. This isn't needed in most ports since we already set the default values in `extmod/nimble/syscfg/syscfg.h`; however in the ESP32 port that headerfile is not used, and the default values in the ESP-IDF don't enable key distribution nor can we change those defaults via `sdkconfig`. Thus we're setting these values explicitly at runtime. Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-02-29extmod/nimble: Override configuration options set in nimble_port_init.Daniël van de Giessen
This moves the runtime initialisation of `ble_hs_cfg` to happen after `nimble_port_init()`. That is consistent with the order used in NimBLE examples. On the ESP32 port this is needed because the ESP-IDF sets up the default RAM secret store callbacks in its implementation of `nimble_port_init()` (specifically, it calls `esp_nimble_init()` which in turn calls `ble_store_ram_init()`). We want to override those with our own callbacks to implement the `IRQ_[GS]ET_SECRET` events in Python. Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-02-28extmod/asyncio: Make current_task raise exception when there is no task.Damien George
Matches CPython behaviour. Fixes issue #11530. Signed-off-by: Damien George <damien@micropython.org>
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-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-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-20all: Use mp_obj_malloc_with_finaliser everywhere it's applicable.Damien George
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-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-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-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-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>
2024-02-09extmod/btstack: Reset pending_value_handle before calling write-done cb.Damien George
The pending_value_handle needs to be freed and 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 #13611. Signed-off-by: Damien George <damien@micropython.org>