Commit Graph

4834 Commits

Author SHA1 Message Date
gamblor21 ba229f1007 Initial commit of uzlib module 2022-02-19 10:41:42 -06:00
Dan Halbert 28714963d5 don't wait for USB or BLE workflow after true deep sleep 2022-02-17 15:41:55 -05:00
Jeff Epler 2b32dce256
genlast: Actually catch errors when preprocessing files
Due to a number of problems, an error calling the preprocessor wasn't
making the whole genlast process fail.

Now, after an execption during preprocess is printed, it is re-raised.
Then, by actually collating the results of executor.map, the exception
will be raised in the main thread context. Any CalledProcessError is simply
converted to a nonzero exit status.
2022-02-17 08:36:29 -06:00
Jeff Epler c4ae8c8320
Merge pull request #6028 from jepler/fix-test-natmod
Fix all natmod tests to run on x64
2022-02-15 20:52:36 -06:00
Scott Shawcroft 947a53c8d1
Merge pull request #6033 from jepler/better-describe
Improve use of `git describe`
2022-02-15 10:48:55 -08:00
Jeff Epler adfa6ef019
Fix all natmod tests to run on x64
My testing sequence is

```
git clean -dxf examples
arch=x64; make -C examples/natmod/features1 ARCH=$arch && make -C examples/natmod/features2 ARCH=$arch && make -C examples/natmod/btree ARCH=$arch && make -C examples/natmod/framebuf ARCH=$arch && make -C examples/natmod/uheapq ARCH=$arch && make -C examples/natmod/urandom ARCH=$arch && make -C examples/natmod/ure ARCH=$arch && make -C examples/natmod/uzlib ARCH=$arch
(cd tests && ./run-natmodtests.py "$@" extmod/{btree*,framebuf*,uheapq*,ure*,uzlib*}.py)
```
2022-02-13 11:18:38 -06:00
Mark 5972fdc108
Merge branch 'main' into is31pixelbuf 2022-02-01 13:59:28 -06:00
Scott Shawcroft 5a6f456dbb
Add BLE scanning for S3 and C3.
Everything else should raise NotImplementedError.

First step in #5926
2022-01-25 16:28:46 -08:00
Mark 21c8ac9d4c
Merge branch 'main' into is31pixelbuf 2022-01-23 13:41:10 -06:00
gamblor21 563d8f297c Major refractor to make a common base object 2022-01-23 13:12:37 -06:00
microDev 67293c265c
Merge branch 'main' into board-bus 2022-01-21 10:08:39 +05:30
George Waters ab57299bd6
Update the io module's __name__ 2022-01-20 17:37:51 -05:00
Jeff Epler af353c9b59
update to ulab 4.0.0 2022-01-14 14:19:50 -06:00
Scott Shawcroft 838a007ca9
Merge pull request #5813 from EmergReanimator/code_improvements
Introduced ringbuf_init to perform static buffer initialisation
2022-01-10 12:12:25 -08:00
EmergReanimator 6b872acab7
Update py/ringbuf.c
Co-authored-by: Scott Shawcroft <scott@tannewt.org>
2022-01-07 21:18:51 +01:00
EmergReanimator da58c029a0 Introduced ringbuf_init to perform static buffer initialisation 2022-01-05 20:48:44 +01:00
EmergReanimator 6dbb662787 Allow to tailor tinyusb configuration for port specific needs 2022-01-05 19:28:07 +01:00
Jeff Epler 23022a5a7f
Add, use tools/describe script
This isn't intended to make any overt behavioral change, but
there is a slight one in the value of CP_VERSION that will be used
during CI, because it will now include `--always --match "..."`,
so there could be a change to the uploaded name of the mpy-cross
artifacts on s3.
2022-01-04 11:14:03 -06:00
Dan Halbert 9d2a32d07e countio: add selectable rise and fall detection, pulls 2021-12-31 16:34:58 -05:00
Dan Halbert 3bc48802b1
Merge pull request #5783 from jepler/longint-config
Centralize LONGINT_IMPL handling
2021-12-28 12:55:26 -05:00
Michael Himing fe71ee0812 Fix busdevice stub path 2021-12-28 19:31:40 +11:00
Jeff Epler 1d13c4ccd1
Centralize LONGINT_IMPL handling
This closes #5782
2021-12-27 10:21:47 -06:00
microDev 70b3e73349
traceback: fix for crash on non-native exceptions
Co-authored-by: Tim Hawes <me@timhawes.com>
2021-12-15 12:29:21 +05:30
microDev b6858e4ca7
allow multiple board buses
Co-authored-by: Neradoc <neraOnGit@ri1.fr>
2021-12-11 23:07:21 +05:30
Scott Shawcroft ee5536386d
Merge remote-tracking branch 'adafruit/main' into rpi 2021-11-24 14:23:23 -08:00
Scott Shawcroft b09c777d0a
Merge pull request #5584 from gamblor21/is31
IS31FL3741 Framebuffer Driver
2021-11-24 11:41:51 -08:00
gamblor21 97032fdbd0 Renaming files 2021-11-23 17:21:13 -06:00
Timon a1052d5f73
Initial broadcom port for Raspberry Pi
This targets the 64-bit CPU Raspberry Pis. The BCM2711 on the Pi 4
and the BCM2837 on the Pi 3 and Zero 2W. There are 64-bit fixes
outside of the ports directory for it.

There are a couple other cleanups that were incidental:
* Use const mcu_pin_obj_t instead of omitting the const. The structs
  themselves are const because they are in ROM.
* Use PTR <-> OBJ conversions in more places. They were found when
  mp_obj_t was set to an integer type rather than pointer.
* Optimize submodule checkout because the Pi submodules are heavy
  and unnecessary for the vast majority of builds.

Fixes #4314
2021-11-22 14:54:44 -08:00
microDev ed9595a9be
traceback object init - set it to empty only if null 2021-11-22 21:38:02 +05:30
gamblor21 d063bf2675 Initial commit for IS31 2021-11-20 13:46:11 -06:00
Dan Halbert b9ecb0fdb4
Merge pull request #5575 from jepler/bitmaptools-on-host
Enable bitmaptools on the 'unix' build, 'coverage' variant
2021-11-12 16:16:53 -05:00
Jeff Epler c6dbc7df3a
Add displayio bitmaps to unix build 2021-11-12 10:47:17 -06:00
Jeff Epler a1069ebcc2
check size of integers if possible 2021-11-12 10:45:50 -06:00
microDev ac1ca57a17
fix traceback object init 2021-11-12 18:37:29 +05:30
Scott Shawcroft c1177662cd
Merge pull request #5537 from microDev1/monitor-mode
Add Monitor Mode
2021-11-11 10:10:39 -08:00
Dan Halbert adac5ee596
Merge pull request #5563 from jepler/enable-error-missing-prototypes
Additional missing-prototypes fixes
2021-11-11 11:57:43 -05:00
Dan Halbert b01e2d6674 enable running asyncio 2021-11-10 16:00:38 -05:00
Jeff Epler 621953c960
Additional missing-prototypes fixes
I think this correctly enables missing-prototypes in atmel-samd
and raspberrypi ports.
2021-11-10 10:55:53 -06:00
microDev 6d2f4f59f8
refactor traceback handling 2021-11-10 20:23:33 +05:30
Jeff Epler 334a9c85ce Merge remote-tracking branch 'origin/main' into gifio 2021-11-04 20:22:00 -05:00
Jeff Epler a8614a61dc ParallelImageCapture: Add continuous capture on espressif
By having a pair of buffers, the capture hardware can fill one buffer while
Python code (including displayio, etc) operates on the other buffer.  This
increases the responsiveness of camera-using code.

On the Kaluga it makes the following improvements:
 * 320x240 viewfinder at 30fps instead of 15fps using directio
 * 240x240 animated gif capture at 10fps instead of 7.5fps

As discussed at length on Discord, the "usual end user" code will look like
this:

    camera = ...

    with camera.continuous_capture(buffer1, buffer2) as capture:
        for frame in capture:
            # Do something with frame

However, rather than presenting a context manager, the core code consists of
three new functions to start & stop continuous capture, and to get the next
frame.  The reason is twofold.  First, it's simply easier to implement the
context manager object in pure Python.  Second, for more advanced usage, the
context manager may be too limiting, and it's easier to iterate on the right
design in Python code.  In particular, I noticed that adapting the
JPEG-capturing programs to use continuous capture mode needed a change in
program structure.

The camera app was structured as
```python
while True:
    if shutter button was just pressed:
        capture a jpeg frame
    else:
        update the viewfinder
```

However, "capture a jpeg frame" needs to (A) switch the camera settings and (B)
capture into a different, larger buffer then (C) return to the earlier
settings. This can't be done during continuous capture mode. So just
restructuring it as follows isn't going to work:

```python
with camera.continuous_capture(buffer1, buffer2) as capture:
    for frame in capture:
        if shutter button was just pressed:
            capture a jpeg frame, without disturbing continuous capture mode
        else:
            update the viewfinder
```

The continuous mode is only implemented in the espressif port; others
will throw an exception if the associated methods are invoked.  It's not
impossible to implement there, just not a priority, since these micros don't
have enough RAM for two framebuffer copies at any resonable sizes.

The capture code, including single-shot capture, now take mp_obj_t in the
common-hal layer, instead of a buffer & length.  This was done for the
continuous capture mode because it has to identify & return to the user the
proper Python object representing the original buffer.  In the Espressif port,
it was convenient to implement single capture in terms of a multi-capture,
which is why I changed the singleshot routine's signature too.
2021-11-03 11:02:46 -05:00
microDev 27b137f931
Merge branch 'main' into monitor-mode 2021-11-02 13:56:56 +05:30
microDev 95172cf3ce
add monitor class
Co-authored-by: anecdata <16617689+anecdata@users.noreply.github.com>
2021-11-02 12:32:09 +05:30
Jeff Epler 694af3dd23 main: redesign boot_out.txt writing
New design:
 * capture output to a vstr
 * compare the complete vstr to boot_out.txt
 * rewrite if not a complete match

This is resilient against future changes to the automatic
text written to boot_out.txt.

This also fixes rewriting boot_out.txt in the case where
boot.py prints something.

Perhaps it also saves a bit of code space. Some tricks:
 * no need to close a file in read mode
 * no need to switch on/off USB write access, going down to the
   oofatfs layer doesn't check it anyway
2021-11-01 23:05:34 -05:00
Jeff Epler 3e020a73a8 Disable gifio if no displayio & for small boards
Technically all gifio needs from displayio is the definition of
colorspaces, but let's just disable it for now.
2021-10-26 08:54:18 -05:00
Jeff Epler c34b6f757f Implement gifio.GifWriter
This involves:
 * Adding a new "L8" colorspace for colorconverters
 * factoring out displayio_colorconverter_convert_pixel
 * Making a minimal "colorspace only" version of displayio for the
   unix port (testing purposes)
 * fixing an error message

I only tested writing B&W animated images, with the following script:
```python
import displayio
import gifio

with gifio.GifWriter("foo.gif", 64, 64, displayio.Colorspace.L8) as g:
    for i in range(0, 256, 14):
        data = bytes([i, 255-i] * 32 + [255-i, i] * 32) * 32
        print("add_frame")
        g.add_frame(data)

# expected to raise an error, buffer is not big enough
with gifio.GifWriter("/dev/null", 64, 64, displayio.Colorspace.L8) as g:
    g.add_frame(bytes([3,3,3]))
```
2021-10-26 08:54:18 -05:00
microDev e2652f8aac
add packet class 2021-10-22 20:19:56 +05:30
Kattni Rembor 2c15f5439b Update help() to have circuitpython.org 2021-10-21 18:07:07 -04:00
Jeff Epler 74457d81f2 str_modulo_format: Make error better match standard python
Before this, "%c" % 3.14 would raise the error `integer required`
even though python3 uses `%c requires int or char`, just like both
already did for "%c" % "ab".

This gets rid of a string to translate, and makes behavior match
python3 better.
2021-10-19 10:52:14 -05:00
Dan Halbert 23d2c96476
Merge pull request #5466 from jepler/merge-1.17
Merge 1.17
2021-10-15 23:34:31 -04:00