summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-05-27tests/extmod: Fix regex strings to be of r"" type.Damien George
Otherwise escape characters like \s and \W won't work correctly. Signed-off-by: Damien George <damien@micropython.org>
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-27tools/ci.sh: Simplify selection of natmod tests to run.Damien George
The `run-natmodtests.py` script now properly excludes tests that don't use the corresponding native module. Signed-off-by: Damien George <damien@micropython.org>
2024-05-27tests/run-natmodtests.py: Fix search for supported native tests.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-24examples/natmod/btree: Make btree.open use mp_arg_parse_all for kwargs.Damien George
Python code is no longer needed to implement keyword arguments in `btree.open()`, it can now be done in C. Signed-off-by: Damien George <damien@micropython.org>
2024-05-24py/dynruntime: Export mp_load_method_maybe and mp_arg_parse_all* funcs.Brian Pugh
Also define `mp_type_bytearray`. These all help to write native modules. Signed-off-by: Brian Pugh <bnp117@gmail.com> Signed-off-by: Damien George <damien@micropython.org>
2024-05-23esp32: Add support for TCP_NODELAY.Jared Hancock
This adds support for the TCP_NODELAY socket option for lwIP sockets. Generally, TCP sockets use the Nagle algorithm and will send data when an ACK is received or after all previously-sent data has already been ACKed. If the TCP_NODELAY option is set for a socket, every write to the socket will trigger a packet to be sent. Signed-off-by: Jared Hancock <jared@greezybacon.me>
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-23examples/natmod/features4: Create custom FactorialError as exc example.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-23py/dynruntime: Add mp_obj_exception_init function to create C exception.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-22webassembly/modjsffi: Add mem_info function to get detailed stats.Damien George
This allows querying the GC heap size/used/free values, as well as the number of alive JsProxy and PyProxy objects, referenced by proxy_c_ref and proxy_js_ref. Signed-off-by: Damien George <damien@micropython.org>
2024-05-22webassembly: Register PyProxy objects for JS-side finalisation.Damien George
And clear the corresponding `proxy_c_ref[c_ref]` entry when the finaliser runs. This then allows the C side to (eventually) garbage collect the corresponding Python object. Signed-off-by: Damien George <damien@micropython.org>
2024-05-22webassembly: Add C-level finaliser to JsProxy object.Damien George
And clear the corresponding `proxy_js_ref[js_ref]` entry when the finaliser runs. This then allows the JavaScript side to (eventually) free the corresponding JavaScript object. Signed-off-by: Damien George <damien@micropython.org>
2024-05-22webassembly: Set GC threshold and do top-level GC collect when possible.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-22webassembly: Track the current depth of calls to external C functions.Damien George
So it's possible to know when an external C function is being called at the top-level, eg by JavaScript without any intermediate C->JS->C calls. Signed-off-by: Damien George <damien@micropython.org>
2024-05-21webassembly/proxy_c: Don't return value of a void function.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-21webassembly/objjsproxy: Make jsproxy_it keep ref to jsproxy.Damien George
So that there is a one-to-one correspondence between js_ref and JsProxy objects. Signed-off-by: Damien George <damien@micropython.org>
2024-05-16webassembly/proxy_c: Return undefined if dict lookup failed on JS side.Damien George
Instead of raising KeyError. These semantics match JavaScript behaviour and make it much more seamless to pass Python dicts through to JavaScript as though they were JavaScript {} objects. Signed-off-by: Damien George <damien@micropython.org>
2024-05-16webassembly/proxy_js: Create a special "undefined" type for Python.Damien George
This adds a new undefined singleton to Python, that corresponds directly to JavaScript `undefined`. It's accessible via `js.undefined`. Signed-off-by: Damien George <damien@micropython.org>
2024-05-16webassembly/proxy_js: Revert back to converting Py None to JS null.Damien George
This reverts part of commit fa23e4b093f81f03a24187c7ea0c928a9b4a661b, to make it so that Python `None` converts to JavaScript `null` (and JavaScript `null` already converts to Python `None`). That's consistent with how the `json` module converts these values back and forth. Signed-off-by: Damien George <damien@micropython.org>
2024-05-16esp32/panichandler: Print support information on panic.Daniël van de Giessen
When a fatal error occurs it's important to know which precise version it occurred on in order to be able to decode the crash dump information such as the backtrace. By wrapping around the built-in IDF panic handler we can print some extra information whenever a fatal error occurs. The message links to a new wiki page which contains additional information on how to debug ESP32 issues, and links to the bug reporting issue template. Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
2024-05-15stm32/pyb_can: Fix STM32G4 FDCAN source clock frequency.Angus Gratton
Fixes automatic baudrate calculation results. Default clock source on this SoC is HSE not PCLK1. We could fix this by switching to PCLK1 instead, but two extra complications: - PCLK1 on this board is a 42.5MHz and the Pyboard CAN sample_point calculation requires an exact match, which is harder to hit with this source frequency. - Would be a breaking change for any existing Python code on this board, i.e. specifying brp, bs1, bs2 to initialise CAN. In the future it might be worth looking switching to the PLL source on this SoC instead, as this is a much higher frequency that would give higher quality BRS bitrate matches (probably too high without using the second divider going into the CAN peripheral though, so more code changes needed also). This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-05-15examples/usb: Add README that points out the alternative usb modules.Angus Gratton
If someone starts from this directory then they won't know they exist, otherwise. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-05-15docs/library/asyncio: Document that ThreadSafeFlag now works on unix.Damien George
ThreadSafeFlag works on the unix port since commit df08c38c286561c08d5ac354428074817eb0c163. Signed-off-by: Damien George <damien@micropython.org>
2024-05-15docs/reference: Document how to mip install packages from GitLab.Olivier Lenoir
Signed-off-by: Olivier Lenoir <olivier.len02@gmail.com>
2024-05-15tools/mpremote: Add support to mip install from GitLab.Olivier Lenoir
Changes are: - main.py: Add gitlab:org/repo, gitlab:org/repo@branch. - mip.py: Implement install from GitLab. - README.md: Add mip install gitlab:org/repo@branch example. Signed-off-by: Olivier Lenoir <olivier.len02@gmail.com>
2024-05-14tests/micropython/import_mpy_invalid.py: Skip if target cant import mpy.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-14webassembly/mpconfigport: Enable importing of .mpy files.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-13webassembly/proxy_js: Convert JS undefined and JS null to Py None.Damien George
And change Py None conversion so it converts to JS undefined. The semantics for conversion of these objects are then: - Python None -> JavaScript undefined - JavaScript undefined -> Python None - JavaScript null -> Python None This follows Pyodide: https://pyodide.org/en/stable/usage/type-conversions.html Signed-off-by: Damien George <damien@micropython.org>
2024-05-13webassembly/proxy_c: Ensure objs thrown into generators are exceptions.Damien George
This commit defines a new `JsException` exception type which is used on the Python side to wrap JavaScript errors. That's then used when a JavaScript Promise is rejected, and the reason is then converted to a `JsException` for the Python side to handle. This new exception is exposed as `jsffi.JsException`. Signed-off-by: Damien George <damien@micropython.org>
2024-05-13webassembly/asyncio: Fix case where a Promise is resolved with no arg.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-13webassembly/proxy_c: Support more than 4 args when JS calls Py func.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-13examples/network: Add example of HTTPS client using non-blocking socket.Damien George
Non-blocking SSL streams can be difficult to get right, so provide a working example, of a HTTPS client. Signed-off-by: Damien George <damien@micropython.org>
2024-05-13examples/network: Rename SSL examples to start with https.Damien George
It's better for discoverability to have these examples named `https_xxx.py` rather than `http_xxx_ssl.py`. Signed-off-by: Damien George <damien@micropython.org>
2024-05-13examples/usb: Add a USBDevice example implementing the DFU protocol.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-13examples/usb: Add a very simple USBDevice example with host.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-09docs/library/machine.USBDevice: Update note about packages in mp-lib.Angus Gratton
Also fix a small typo. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-05-09shared/tinyusb: Stall the CDC IN endpoint while disconnecting.Angus Gratton
Only when dynamic USB devices are enabled. The issue here is that when the USB reset triggers, the dynamic USB device reset callback is called from inside the TinyUSB task. If that callback tries to print something then it'll call through to tud_cdc_write_flush(), but TinyUSB hasn't finished updating state yet to know it's no longer configured. Subsequently it may try to queue a transfer and then the low-level DCD layer panics. By explicitly stalling the endpoint first, usbd_edpt_claim() will fail and tud_cdc_write_flush() returns immediately. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
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-05-07esp32/modesp32: Add mcu_temperature() function for C3/S2/S3 devices.Rick Sorensen
For ESP32C3/S2/S3 IDFv5 exposes new internal temperature API which is different to the base ESP32, IDFv4. Thanks to @robert-hh for cleaner code and testing sensor capability in these devices. See discussion #10443. Signed-off-by: Rick Sorensen <rick.sorensen@gmail.com>
2024-05-07docs/esp32/quickref: Add note about different ESP32 varieties.Rick Sorensen
Signed-off-by: Rick Sorensen <rick.sorensen@gmail.com>
2024-05-07webassembly/api: Resolve thenables returned from runPythonAsync.Damien George
JavaScript semantics are such that the caller of an async function does not need to await that function for it to run to completion. This commit makes that behaviour also apply to top-level async Python code run via `runPythonAsync()`. Signed-off-by: Damien George <damien@micropython.org>
2024-05-07webassembly/objpyproxy: Implement JS iterator protocol for Py iterables.Damien George
This allows using JavaScript for..of on Python iterables. Signed-off-by: Damien George <damien@micropython.org>
2024-05-06webassembly/objjsproxy: Fix proxying in arguments to JS new function.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-05-06webassembly/proxy_c: Only proxy across resolve/reject funs when needed.Damien George
To improve efficiency. Signed-off-by: Damien George <damien@micropython.org>
2024-05-06webassembly/proxy_c: Reject promises with a PythonError instance.Damien George
The `reason` in a rejected promise should be an instance of `Error`. That leads to better error messages on the JavaScript side. Signed-off-by: Damien George <damien@micropython.org>
2024-05-06webassembly/api: Fix importing micropython.mjs module from node REPL.Damien George
Fixes issue #14363. Signed-off-by: Damien George <damien@micropython.org>
2024-05-03stm32/i2c: Fix clock enable for I2C4 on STM32F7 MCUs.Damien George
This was broken by 5aec051f9f0e1be9750ca4f08478275f298087a3 when adding support for I2C4 on H7 MCUs. Signed-off-by: Damien George <damien@micropython.org>
2024-05-01stm32/mboot: Buffer the correct amount of bytes for a flash write.Damien George
Different MCUs have different requirements for the minimum number of bytes that can be written to internal flash. Signed-off-by: Damien George <damien@micropython.org>
2024-05-01stm32/flash: Fix writing final words to flash on H5 and H7 MCUs.Damien George
The calculations `num_word32 / 4` and `num_word32 / 8` were rounding down the number of words to program to flash, and therefore possibly truncating the data (eg mboot could miss writing the final few words of the firmware). That's fixed in this commit by adding extra logic to program any remaining words. And the logic for H5 and H7 is combined. Signed-off-by: Damien George <damien@micropython.org>