summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-06-25tests/extmod: Make uasyncio_heaplock test more deterministic.Damien George
This helps the test pass on systems with an inaccurate sleep time. Signed-off-by: Damien George <damien@micropython.org>
2021-06-25github/workflows: Add workflow to build and test javascript port.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-06-25javascript: Rework Makefile and GC so it works with latest Emscripten.Damien George
The GC now works correctly using asyncify and the functions emscripten_scan_stack() and emscripten_scan_registers(). Stack/call depth is monitored via the use of the pystack option. Fixes issue #6738. Signed-off-by: Damien George <damien@micropython.org>
2021-06-25py: Mark unused arguments from bytecode decoding macros.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-06-25py/makeqstrdefs.py: Don't include .h files explicitly in preprocessing.Damien George
Only include .c and .cpp files explicitly in the list of files passed to the preprocessor for QSTR extraction. All relevant .h files will be included in this process by "#include" from the .c(pp) files. In particular for moduledefs.h, this is included by py/objmodule.c (and doesn't actually contain any extractable MP_QSTR_xxx, but rather defines macros with MP_QSTR_xxx's in them which are then part of py/objmodule.c). The main reason for this change is to simplify the preprocessing step on the javascript port, which tries to compile .h files as C++ precompiled headers if they are passed with -E to clang. Signed-off-by: Damien George <damien@micropython.org>
2021-06-25mpy-cross: Disable stack check when building with Emscripten.David Lechner
`mpy-cross` can be compiled to WASM using Emscripten, but it is not happy unless the stack check is disabled. Signed-off-by: David Lechner <david@pybricks.com>
2021-06-25tools/ci.sh: Run apt-get update in ci_powerpc_setup.David Lechner
This fixes failing builds when the GitHub CI image lags behind Ubuntu security updates.
2021-06-25rp2/machine_rtc: In RTC.datetime, compute weekday automatically.Krzysztof Adamski
Calculating the weekday each time you want to set a date is error prone and tiresome. MicroPython can do it on its own - hardware on some ports do not support storing weekday in hardware and always computes it on the fly, ignoring the value given to the constructor. During discussion for #7432 the conclusion was that there seems to be no obvious reason to let user set the weekday to an incorrect value so it makes sense to just ignore the provided weekday value and always compute the correct value. This patch introduces this change for the rp2 port. Signed-off-by: Krzysztof Adamski <k@japko.eu>
2021-06-25rp2: Use 0=Monday datetime convention in RTC.Krzysztof Adamski
The RTC in rp2 can store any, even wrong, number as a weekday in RTC. It was, however, discussed in #7394 that we would like to unify all ports and use 0 as Monday, not Sunday in the machine.RTC implementation. This patch makes sure that the default date set in RTC is adheres to this convention. It also fixes the example in quickref to use proper weekday to avoid confusion. Signed-off-by: Krzysztof Adamski <k@japko.eu>
2021-06-25mimxrt: Move calc_weekday helper function to timeutils.Krzysztof Adamski
This function may be useful for other ports as well so lets move it to timeutils so it can be reused. Signed-off-by: Krzysztof Adamski <k@japko.eu>
2021-06-24py/mperrno: Add MP_ECANCELED error code.David Lechner
This is useful when binding asynchronous functions in C. Signed-off-by: David Lechner <david@pybricks.com>
2021-06-24unix/modffi: Add option to lock GC in callback, and cfun access.Amir Gonnen
Add an optional 'lock' kwarg to callback that locks GC and scheduler. This allows the callback to be invoked asynchronously in 'interrupt context', for example as a signal handler. Also add the 'cfun' member function to callback, that allows retrieving the C callback function address. This is needed when the callback should be set to a struct field. See related #7373. Signed-off-by: Amir Gonnen <amirgonnen@gmail.com>
2021-06-24all: Fix signed shifts and NULL access errors from -fsanitize=undefined.Jeff Epler
Fixes the following (the line numbers match commit 0e87459e2bfd07): ../../extmod/crypto-algorithms/sha256.c:49:19: runtime error: left shif... ../../extmod/moduasyncio.c:106:35: runtime error: member access within ... ../../py/binary.c:210:13: runtime error: left shift of negative value -... ../../py/mpz.c:744:16: runtime error: negation of -9223372036854775808 ... ../../py/objint.c:109:22: runtime error: left shift of 1 by 31 places c... ../../py/objint_mpz.c:374:9: runtime error: left shift of 4611686018427... ../../py/objint_mpz.c:374:9: runtime error: left shift of negative valu... ../../py/parsenum.c:106:14: runtime error: left shift of 46116860184273... ../../py/runtime.c:395:33: runtime error: left shift of negative value ... ../../py/showbc.c:177:28: runtime error: left shift of negative value -... ../../py/vm.c:321:36: runtime error: left shift of negative value -1``` Testing was done on an amd64 Debian Buster system using gcc-8.3 and these settings: CFLAGS += -g3 -Og -fsanitize=undefined LDFLAGS += -fsanitize=undefined The introduced TASK_PAIRHEAP macro's conditional (x ? &x->i : NULL) assembles (under amd64 gcc 8.3 -Os) to the same as &x->i, since i is the initial field of the struct. However, for the purposes of undefined behavior analysis the conditional is needed. Signed-off-by: Jeff Epler <jepler@gmail.com>
2021-06-24esp32/main: Allow MICROPY_DIR to be overridden.Damien George
This is necessary when building a custom out-of-tree board. Signed-off-by: Damien George <damien@micropython.org>
2021-06-23tools: Remove obsolete build-stm-latest.sh script.Damien George
The tools/autobuild/ scripts replace this. Signed-off-by: Damien George <damien@micropython.org>
2021-06-23tools/autobuild: Add scripts to build release firmware.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-06-23stm32/usb: Make irq's default trigger enable all events.Damien George
Following how other .irq() methods work on other objects. Signed-off-by: Damien George <damien@micropython.org>
2021-06-23extmod/btstack: Check that BLE is active before performing operations.Damien George
Otherwise it can easily lead to a hard crash. Signed-off-by: Damien George <damien@micropython.org>
2021-06-23extmod/btstack: Add missing call to mp_bluetooth_hci_uart_deinit.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-06-23stm32: Provide a custom BTstack runloop that integrates with soft timer.Damien George
It reschedules the BT HCI poll soft timer so that it is called exactly when the next timer expires. Signed-off-by: Damien George <damien@micropython.org>
2021-06-23stm32/mpbthciport: Change from systick to soft-timer for BT scheduling.Damien George
Instead of using systick the BT subsystem is now scheduled using a soft timer. This means it is scheduled only when it is enabled. Signed-off-by: Damien George <damien@micropython.org>
2021-06-23stm32/softtimer: Add soft_timer_reinsert() helper function.Damien George
And call mp_pairheap_init_node() in soft_timer_static_init() so that reinsert can be called after static_init. Signed-off-by: Damien George <damien@micropython.org>
2021-06-22esp32,esp8266: Add __len__ to NeoPixel driver to support iterating.Michael Weiss
Signed-off-by: mishafarms <github@mishafarms.us>
2021-06-22LICENSE: Reference third-party licenses.Jim Mussared
This is to provide a summary of the licenses used by MicroPython. - Add SPDX identifier for every directory that includes non-MIT-licensed content. - Add brief summary. - Update docs license to be more explicit. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2021-06-20esp32/boards/sdkconfig.base: Disable MEMPROT_FEATURE to alloc from IRAM.Damien George
Dynamically generate/loaded native code (eg from @micropython.native or native .mpy files) needs to be able allocate from IRAM, and the memory protection feature must be disabled for that to work. Disabling it is needed to get native code working on ESP32-S2 and -C3. Signed-off-by: Damien George <damien@micropython.org>
2021-06-19py/mpstate: Schedule KeyboardInterrupt on main thread.David Lechner
This introduces a new macro to get the main thread and uses it to ensure that asynchronous exceptions such as KeyboardInterrupt (CTRL+C) are only scheduled on the main thread. This is more deterministic than being scheduled on a random thread and is more in line with CPython that only allow signal handlers to run on the main thread. Fixes issue #7026. Signed-off-by: David Lechner <david@pybricks.com>
2021-06-19py/mpstate: Make exceptions thread-local.David Lechner
This moves mp_pending_exception from mp_state_vm_t to mp_state_thread_t. This allows exceptions to be scheduled on a specific thread. Signed-off-by: David Lechner <david@pybricks.com>
2021-06-18all: Bump version to 1.16.v1.16Damien George
Signed-off-by: Damien George <damien@micropython.org>
2021-06-18tests/float: Make bytes/bytearray construct tests work with obj repr C.Damien George
2.5 can be represented correctly in object representation C, but 2.3 cannot (it is slightly truncated). Signed-off-by: Damien George <damien@micropython.org>
2021-06-18py/gc: Only use no_sanitize_address attribute for GCC 4.8 and above.Damien George
It's not supported on older GCC versions. Signed-off-by: Damien George <damien@micropython.org>
2021-06-18esp8266/boards/GENERIC_512K: Add custom minimal _boot.py.Damien George
Commit 0abf6f830cd390e2e5dbd4a2c68f611f5c9507dc removed _boot.py from the manifest for the GENERIC_512K board because the build does not include a filesystem. But the main code expects _boot.py to be there and prints an error if it's not. So add a custom _boot.py, which just sets the gc.threshold(). Signed-off-by: Damien George <damien@micropython.org>
2021-06-18esp32/machine_sdcard: Use deinit_p to deinit SD bus in SPI mode.Damien George
Fixes issue #7352. Signed-off-by: Damien George <damien@micropython.org>
2021-06-17drivers/display/ssd1306.py: Add support for 72x40 displays.Mike Causer
The 72x40 OLED requires selecting the internal IREF, as opposed to the default external IREF. This is an undocumented feature in the SSD1306 datasheet, but is present in the SSD1315 datasheet. It's possible the 72x40 OLED is actually using the newer SSD1315 controller. Sending the IREF select command to SSD1306 displays has no effect on them, so it's added to the init_display() instead of wrapping in an "if width = 72". Also tested on a 128x64 OLED using the SSD1315 controller (smaller ribbon cable) and the proposed change has no effect on the display, as the module comes with the correct current limiting resistor. Internal and external IREF work the same. Fixes issue #7281.
2021-06-17esp32/machine_hw_spi: Allow None for unused pins in initializer.Jonathan Hogg
Make the hardware SPI initializer method match the `init()` method by allowing `None` to be given for `sck`/`mosi`/`miso` to specify an unused signal.
2021-06-17docs/esp32: Document WLAN "reconnects" config option.Thomas Wenrich
2021-06-17esp32/modnetwork: Add "reconnects" option to WLAN STA interface.Thomas Wenrich
This adds a wlan.config(reconnects=N) option to set the number of reconnect attempts that will be made if the WLAN connection goes down. The default is N=-1 (infinite retries, current behavior). Setting wlan.config(reconnects=0) will disable the reconnect attempts. A nice side effect of reconnects=0 is that wlan.status() will report the disconnect reason now. See related issue #5326.
2021-06-17esp32/network_lan: Add Ethernet support for IDF v4.1 and above.Tobias Eydam
Ethernet-PHYs from ESP-IDF (LAN8720, IP101, RTL8201, DP83848) are now supported in IDF v4.1 and above. PHY_KSZ8041 is only for ESP-IDF 4.3 and above. ESP32S2 is not supported. Signed-off-by: Tobias Eydam <eydam-prototyping@outlook.com>
2021-06-17extmod/nimble: Remove TODO comment about notify_custom freeing om.Damien George
The comments in NimBLE for ble_gattc_notify_custom() state that "This function consumes the supplied mbuf regardless of the outcome.". And inspection of NimBLE code shows that this is the case. So the comment can be removed. Signed-off-by: Damien George <damien@micropython.org>
2021-06-16extmod/uasyncio: Fix race with cancelled task waiting on finished task.Damien George
This commit fixes a problem with a race between cancellation of task A and completion of task B, when A waits on B. If task B completes just before task A is cancelled then the cancellation of A does not work. Instead, the CancelledError meant to cancel A gets passed through to B (that's expected behaviour) but B handles it as a "Task exception wasn't retrieved" scenario, printing out such a message (this is because finished tasks point their "coro" attribute to themselves to indicate they are done, and implement the throw() method, but that method inadvertently catches the CancelledError). The correct behaviour is for B to bounce that CancelledError back out. This bug is mainly seen when wait_for() is used, and in that context the symptoms are: - occurs when using wait_for(T, S), if the task T being waited on finishes at exactly the same time as the wait-for timeout S expires - task T will have run to completion - the "Task exception wasn't retrieved message" is printed with "<class 'CancelledError'>" as the error (ie no traceback) - the wait_for(T, S) call never returns (it's never put back on the uasyncio run queue) and all tasks waiting on this are blocked forever from running - uasyncio otherwise continues to function and other tasks continue to be scheduled as normal The fix here reworks the "waiting" attribute of Task to be called "state" and uses it to indicate whether a task is: running and not awaited on, running and awaited on, finished and not awaited on, or finished and awaited on. This means the task does not need to point "coro" to itself to indicate finished, and also allows removal of the throw() method. A benefit of this is that "Task exception wasn't retrieved" messages can go back to being able to print the name of the coroutine function. Fixes issue #7386. Signed-off-by: Damien George <damien@micropython.org>
2021-06-16mimxrt/modutime: Extend the time module.robert-hh
Methods added: - time.time() - time.time_ns() - time.gmtime() - time.localtime() - time.mktime() The rp2 port was uses as the template for the change.
2021-06-16mimxrt/machine_pin: Implement pin.irq() functionality.robert-hh
2021-06-16mimxrt/machine_uart: Add the UART class to the machine module.robert-hh
The implementation uses the LPUARTx devices. Up to 8 UARTs can be used, given that the pins are accessible. E.g. 8 on Teensy 4.1, 5 on MIMXRT1020_EVK. For Tennsy 4.0 and 4.1 the UART numbers are as printed on the pinout 1..N. The MIMXRT10xx-EVK boards have only one UART named, which gets the number 1. All other UART are assigned to different Pins: MIMXRT1010-EVK: D0/D1 UART 1 D6/D7 UART 2 A0/D4 UART 3 MIMXRT1020-EVK: D0/D1 UART 1 D6/D9 UART 2 D10/D12 UART 3 D14/D15 UART 4 A0/A1 UART 5 MIMXRT1050-EVK, MIMXRT1060-EVK, MIMXRT1064-EVK: D0/D1 UART 1 D7/D6 UART 2 D8/D9 UART 3 A1/A0 UART 4
2021-06-15tools/mpremote: Use signal to capture and handle ctrl-C on Windows.Damien George
Now a ctrl-C will not stop mpremote, rather this character will be passed through to the attached device. The mpremote version is also increased to 0.0.5. Signed-off-by: Damien George <damien@micropython.org>
2021-06-15tools/mpremote: Use available ports instead of auto-connect list.Damien George
Using just the list of available ports, instead of a hard-coded list of possible ports, means that all ports will be available for auto connection. And the order that they will be attempted in will match what's printed by "mpremote connect list" (and will be the same as before, trying ACMx before USBx). Auto-connect will also now work on Mac, and will allow all COM ports on Windows. Signed-off-by: Damien George <damien@micropython.org>
2021-06-15extmod/uasyncio: Add readinto() method to Stream class.Mike Teachman
With docs and a multi-test using TCP server/client. This method is a MicroPython extension, although there is discussion of adding it to CPython: https://bugs.python.org/issue41305 Signed-off-by: Mike Teachman <mike.teachman@gmail.com>
2021-06-15unix: Fix build on arm64-darwin due to integer cast.Pavol Rusnak
This fixes error: cast to smaller integer type 'int' from 'pthread_t'. pthread_t is defined as long, not as int. Signed-off-by: Pavol Rusnak <pavol@rusnak.io>
2021-06-15rp2/machine_rtc: Check return value from rtc_set_datetime.Krzysztof Adamski
The rtc_set_datetime() from pico-sdk will validate the values in the datetime_t structure and refuse to set the time if they aren't valid. It makes sense to raise an exception if this happens instead of failing silently which might be confusing (as an example, see: https://github.com/micropython/micropython/pull/6928#issuecomment-860166044 ).
2021-06-13stm32/eth: Fix eth_link_status function to use correct BSR bit.iabdalkader
Fixes #7346.
2021-06-13stm32/eth: Add low-power mode configuration option.iabdalkader
Add low power functionality configurable with: lan.config(low_power=True/False)
2021-06-13tests/cpydiff: Add test for array constructor with overflowing value.Zoltán Vörös