This flag is in the main branch of TinyUSB, included in Espressif since
their v0.18.0~3 component release (but it's not actually in TinyUSB v0.18.0
release).
Setting the flag is needed for the USB device not to block waiting for
space in the FIFO if the host is disconnected.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
This is recommended by Espressif, and it's the only way to ensure
everyone builds the same set of component versions.
The awkward part is that updating the ESP-IDF version will churn a line
in each of these files (and possibly other changes).
Adds a build-time check for lock file changes, which is either a warning or
a hard error depending on the value of MICROPY_MAINTAINER_BUILD
flag (introduced in previous commit).
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
This allows us to have some things which are fatal errors in CI or nightly
builds, but warnings in normal developer builds.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
Reported to fix issues reported with serial corruption when interacting
with MicroPython from macOS hosts.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
This commit fixes the build issues in the ESP32 port that arise when
explicitly disabling USB CDC support.
The USB support code gated the USB serial number retrieval behind the
USB CDC support definition, even though all USB devices must be able to
be queried for their serial number.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit fixes the build issues in the SAMD port that arise when
explicitly disabling USB CDC support.
The console code assumed CDC support is always enabled even if it was
disabled in mpconfigport.h. These changes make accessing CDC
conditional to that support configuration being enabled.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit fixes the build issues in the MIMXRT port that arise when
explicitly disabling USB CDC support.
The console code assumed CDC support is always enabled even if it was
disabled in mpconfigport.h. These changes make accessing CDC
conditional to that support configuration being enabled.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit fixes the linking issues in the RP2 port that arise when
explicitly disabling USB CDC support.
The console input ringbuffer needs to be made available if dupterm
support is enabled, and the console character input function would
always attempt to read from the input ringbuffer even if CDC support is
disabled and the console isn't bound to any UART.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit makes possible building MicroPython with USB CDC support
disabled.
The original code does support such a configuration but missed a few
spots where build errors would arise. These changes fix the remaining
issues, fixing also warnings caused by the changes needed to make the
build succeed.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
A fast host (eg Mac M4) may request the status for the SET_ADDRESS before
TinyUSB gets to process it. This is because TinyUSB does not handle events
inside the USB ISR, rather it waits for the top-level thread to process
them. Fix that by setting the USB device address as soon as
TUSB_REQ_SET_ADDRESS comes in.
This patch follows the corresponding upstream fix:
fc40ea7fc6
Signed-off-by: Damien George <damien@micropython.org>
All the existing `machine.UART` tests in extmod and extmod_hardware are
converted to use the new `target_wiring` scheme, which removes a lot of
duplicated board-specific settings.
All the existing boards that were supported by these UART tests now have
their own `target_wiring` file. Some configurations are board specific (eg
NUCLEO_WB55) and others are port specific.
Signed-off-by: Damien George <damien@micropython.org>
There are currently a few "hardware" tests that need external board
connections to be made for them to work, such as bridging a pair of pins.
For example, all tests in `tests/extmod_hardware` need some kind of
connection.
Along with the physical connections -- which are different for each board
-- there needs to be corresponding Python settings, eg which UART instance
to use and which pins for TX/RX.
These settings are currently hard-coded in each test file. That has a few
problems:
- settings are repeated, eg all the UART tests have pretty much the same
settings code duplicated across them
- changing the settings means changing many files
- adding a new board means adding a lot of code
- the tests get bigger and bigger with each new board that they support,
meaning they may not fit on targets with a small amount of RAM (that's
already the case with `tests/extmod_hardware/machine_pwm.py`)
- if you have a custom board you have to manually edit the test to add your
own settings
This commit aims to solve all the above problems by splitting the board-
specific settings out into separate files, one for each board (or port).
They are placed in the `tests/target_wiring/` directory. The
`run-tests.py` test runner then loads the appropriate configuration for the
target that is being tested, sends it to the board so it's available as
`import target_wiring` (without needing a filesystem), and then executes
the test. Note tht only tests that need `target_wiring` have it loaded.
This commit adds support for this `target_wiring` scheme.
Signed-off-by: Damien George <damien@micropython.org>
This makes the rp2-specific lightsleep test more lenient, so it passes.
This test was added in PR #16454 / 69993daa5c
and even back then it did not pass reliably on RP2040. The issue is that
threads can race each other to enter lightsleep mode, and when one of them
actually stops the CPU clock the other thread is stopped as well.
Depending on whether the other thread was just entering or just exiting
lightsleep itself, the total duration of all sleeps can vary and can be as
small as 2*T.
Therefore, adjust the minimum to allow 2*T.
`machine.lightsleep()` is anyway 1) specified only to wait at most the
given time; and 2) not well specified when multiple threads call it at the
same time. So it seems OK to make the test more lenient.
Work done in collaboration with @projectgus.
Signed-off-by: Damien George <damien@micropython.org>
STM32L4 uses the same I2C controller as STM32WB. Change `defined(STM32WB)`
to `defined(STM32L4) || defined(STM32WB) ` in relevant files.
Also remove the dummy definition of I2C2_BASE for STM32L432xx. It's now
provided by the dummy definition in `i2cslave.h`.
Signed-off-by: Chris Mason <c.mason@inchipdesign.com.au>
Signed-off-by: Damien George <damien@micropython.org>
This reverts commit 3c9546ea09.
I2CTarget now fits on ESP32-C6 because it's compiled with -Os, see commit
5b98126c21.
Signed-off-by: Damien George <damien@micropython.org>
I2S works on the ESP32-C6, and it now has enough space to fit.
Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
Signed-off-by: Damien George <damien@micropython.org>
Reduces ESP32_GENERIC_C6 application flash size from 2024432 to
1813216 (206KB smaller).
Also has benefit of reducing D/IRAM size, increasing free memory at
runtime (167187 to 148584, -18603 bytes).
Most of this savings comes from building with -Os instead of -O2,
but about 10KB comes from using the SPI flash functions from the ROM.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
The unix port doesn't have `micropython.alloc_emergency_exception_buf()`
but it's still possible to run and pass this test. So make that call
optional.
Signed-off-by: Damien George <damien@micropython.org>
Following the similar change to `run-tests.py` and `run-multitests.py`.
What was previously, eg, `-p -d /dev/ttyACM0` is now `-t a0`.
Signed-off-by: Damien George <damien@micropython.org>
Back in commit 8978102f35 (see PR #16111) the
`run-tests.py` script was changed to use an improved way of selecting the
test instance, eg:
$ ./run-tests.py -t a0
that would run on /dev/ttyACM0. This has been a very nice improvement,
makes it easier to specify the target.
This commit updates `run-multitests.py` to use the same scheme. It
previously used `-i` but now that's changed to `-t`.
Signed-off-by: Damien George <damien@micropython.org>
These files are only built on demand for developers, and it is a quick
process.
Without FORCE, a sequence like this would leave the developer with an
outdated `main.pp` to inspect:
make build-standard/main.pp
touch input.h
make build-standard/main.pp # Rebuilds now, wouldn't have before
Signed-off-by: Jeff Epler <jepler@gmail.com>
Re-organize `mp_parse_num_integer()` (for longlong) slightly so that the
most negative 64-bit integer can be parsed.
Fixes issue #17932.
Signed-off-by: Jeff Epler <jepler@gmail.com>
These functions were removed in 6c9fca2 for v1.9.3. This commit removes
their declarations as well.
See-also: 6c9fca2aa9
Signed-off-by: Anson Mansfield <amansfield@mantaro.com>
The `thread/thread_gc1.py` test is a constant source of spurious failures
in Github CI.
This commit adds it to the list of tests skipped when running on Github CI
using either macos, qemu_riscv64, qemu_mips, or qemu_arm, to help reduce
the overall false positive rate and improve the predictive value of the
test fail indication.
Signed-off-by: Anson Mansfield <amansfield@mantaro.com>
This commit lets "tools/mpy-tool.py" extract MPY segments into their own
files, one file per segment.
A pair of new command line arguments were added, namely "-e"/"--extract"
that takes a filename prefix to use as a base for the generated files'
name, and "--extract-only" that - combined with "--extract" - allows
selecting which kinds of segment should be dumped to the filesystem.
So, for example, assuming there's a file called "module.mpy", running
"./mpy-tool.py --extract segments module.mpy" would yield a series of
files with names like "segments_0_module.py_QSTR_module.py.bin",
"segments_1_module.py_META__module_.bin",
"segments_2_module.py_QSTR_function.bin", etc. In short the file name
format is "<base>_<count>_<sourcefile>_<segmentkind>_<segmentname>.bin",
with <segmentkind> being META, QSTR, OBJ, or CODE. Source file names
and segment names will only contain characters in the range
"a-zA-Z0-9_-." to avoid having output file names with unexpected
characters.
The "--extract-only" option can accept one or more kinds, separated by
commas and treated as case insensitive strings. The supported kinds
match what is currently handled by the "MPYSegment" class in
"tools/mpy-tool.py": "META", "QSTR", "OBJ", and "CODE". The absence of
this command line option implies dumping every segment found.
If "--extract" is passed along with "--merge", dumping is performed
after the merge process takes place, in order to dump all possible
segments that match the requested segment kinds.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This was missed as part of the transition to make_new a mp_obj_type_t slot.
See also: 94beeabd2e
Signed-off-by: David Schneider <schneidav81@gmail.com>
This commits lifts the unconditional restriction on inline assembler FPU
tests for the Qemu platform, and makes said restriction conditional to
the lack of an available floating point unit on the running platform.
The Qemu platform supported only emulated machines that could target up
to a Cortex-M3, so an ArmV7-M target that had no support for floating
point. With the addition of MPS2_AN500 to the list of emulated targets
the range was extended to cover up to Cortex-M7, so a floating point
unit may possibly be available and thus able to run the FPU inlineasm
tests.
For that, the test runner was changed to detect the running architecture
when checking the target capabilities; if the target reports its
MicroPython architecture to be either "armv7emsp" or "armv7emdp"
(providing single-precision and double-precision floating point unit
support respectively) then the FPU-only inline tests are not put into
the blocked tests list.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit fixes a linking issue on certain Arm toolchains where
library code is compiled with exception support.
If a library with exception support is included in the MicroPython
build, the linker had no place to put the stack unwinding tables
necessary to perform exception handling at runtime. This change adds a
new section to the linkerscript (and therefore the final ELF file) where
that data can be placed into.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit lets CI extend the testing scope of the QEMU Arm target, by
letting it perform the usual battery of tests (interpreter and natmods)
also on hardfp targets.
The default board for Arm testing lacks hardware floating point support,
so natmods weren't tested in that specific configuration. With the
introduction of the "MPS_AN500" QEMU target, now this is made possible
as said board emulates a Cortex-M7 machine with a single- and
double-precision floating point unit.
To reduce the impact on build times, the "ci_qemu_build_arm_thumb" CI
step was split in two: "ci_qemu_build_arm_thumb_softfp" and
"ci_qemu_build_arm_thumb_hardfp" - so hopefully those can run in
parallel whenever possible.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit extends the QEMU port's CPU error handler for the Arm target
by printing out in detail the ARMv7-M debug registers if the firmware is
compiled for such a target.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit introduces a new target for the QEMU port called
"MPS2_AN500", an ARMv7-M machine with a Cortex-M7 CPU and
single-/double-precision floating point unit.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit lets board use a different floating point mode rather than
the usual soft-float that was the original default for all QEMU-based
boards.
The configuration options are the same available in the "stm32" port.
Boards can set "MICROPY_FLOAT_IMPL" to either "float", "double", or
"none" to indicate which floating point mode they want, and optionally
"SUPPORTS_HARDWARE_FP_SINGLE" or "SUPPORTS_HARDWARE_FP_DOUBLE" can be
set to 1 to further indicate the hardware capabilities of the hardware
floating point unit, if present.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit changes the "viper_ptr*_store_boundary" tests to make them
fail more gracefully in low memory conditions.
The original version of the tests compiled viper code blocks on the fly
when it needed them, making them fail at runtime on some boards that do
not come with enough memory for this test. This clashes with
"run-tests.py"'s ability to look for a particular signature to mark
tests as skipped due to not enough memory.
Now compiled code blocks are generated at the beginning of the test
inside an appropriate exception handler. In case of a memory error when
pre-compiling a code block, the running test exits reporting a low
memory condition to the test runner. This allows to have clean test
runs on all platforms when it comes to viper pointer tests.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
When disconnecting from PPP the modem sends a confirmation. This message
is received, like all messages, through the poll() method. lwIP may then
immediately call our status callback with code PPPERR_USER to indicate
the connection was closed. Our callback then immediately proceeds to
free the PCB. Thus, during each new iteration of the loop in poll() we
must check if we haven't disconnected in the meantime to prevent calling
the pppos_input_tcpip with a PCB that is now NULL.
Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
If while a polling operation is active the stream is removed we should
stop polling data from that stream.
This was already the intended behaviour, but implemented incorrectly.
Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
These were regenerated by the NXP Config tool for v2.11.
The board_init update was needed to ensure CLOCK_SetMode() is run
at the appropriate time during startup.
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
The official mcux-sdk follows a slightly different structure to the
current nxp_sdk submodule, with many drivers moved to a common location.
To ease updating the newer versions of the SDK and/or add new families
the nxp_sdk submodule has been updated to follow the structure of
mcux-sdk, just trimmed down to families used here to considerably
reduce the size.
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>