Commit Graph

2616 Commits

Author SHA1 Message Date
gamblor21 b2a205e615 Doc fix 2023-02-17 15:48:26 -06:00
gamblor21 20eb7d11bd Changes times to seconds, remove dirty bitmap flag 2023-02-17 13:06:56 -06:00
Scott Shawcroft 931c7c1c51
Add Bangle.js 2, JDI memory displays and ACeP epd
This 2-in-1 PR started with the goal of support the Bangle.js 2
smartwatch with *no USB*.
* Adds "secure" DFU build support with a committed private key.
* Adds 3-bit color support with one dummy bit for the JDI memory display
* Allows nrf boards to have a board_background_task() run in RUN_BACKGROUND_TASK.
  This is needed because the Bangle.js 2 uses the watchdog to reset.
* Renamed port_background_task() to port_background_tick() to indicate it
  runs on tick, not RUN_BACKGROUND_TASK.
* Marks serial connected when the display terminal is inited. This means
  that safe mode messages show up on the display.

ACep, 7-color epaper displays also pack 3 bits in 4. So, I added that
support as well.
* Adds 3-bit ACeP color support for 7-color e-paper displays. (Not
  watch related but similar due to color depth.)
* Allows a refresh sequence instead of a single int command. The 7" ACeP
  display requires a data byte for refresh.
* Adds optional delay after resetting the display. The ACeP displays
  need this. (Probably to load LUTs from flash.)
* Adds a cleaning phase for ACeP displays before the real refresh.

For both:
* Add dither support to Palette.
* Palette no longer converts colors when set. Instead, it caches
  converted colors at each index.
* ColorConverter now caches the last converted color. It should make
  conversions faster for repeated colors (not dithering.)
2023-02-15 15:03:40 -08:00
Dan Halbert 328585f160 don't enter safemode.py on USER safe mode 2023-02-14 11:20:29 -05:00
Dan Halbert d46d9d5c21 shorten safe mode messages; improve message printing; fix CIRCUITPY_SAFEMODE_PY=0 2023-02-13 21:29:57 -05:00
Mark fa435468fa
Merge branch 'main' into gif_displayio_support 2023-02-13 18:30:51 -06:00
Dan Halbert d8231f1588 Implement safemode.py 2023-02-13 18:26:38 -05:00
gamblor21 88212b066e Doc fix 2023-02-13 11:32:25 -06:00
gamblor21 cab38ed6a6 Doc fixes and renamed play_frame to next_frame 2023-02-12 11:51:23 -06:00
gamblor21 0c95e6a08e Moving to gifio module 2023-02-12 11:17:34 -06:00
gamblor21 da9b6fb0e2 Moving library to /lib 2023-02-10 18:31:59 -06:00
gamblor21 19eba41630 Doc fixes and return next frame delay 2023-02-08 22:58:44 -06:00
gamblor21 dbe518680a Memory savings and more properties 2023-02-05 10:54:04 -06:00
gamblor21 2b26242c66 need gif.c in shared-bindings to build 2023-02-04 18:38:07 -06:00
gamblor21 6a9b7199ec Initial gif proof of concept 2023-02-04 16:44:29 -06:00
MicroDev d9d94eacca
run updated pre-commit 2023-02-01 13:38:41 +05:30
MicroDev 4ef363a797
improve dualbank and storage extension docs 2023-01-29 23:16:45 +05:30
Neradoc f0058774d0 add CIRCUITPY_SKIP_SAFE_MODE_WAIT to circuitpy_mpconfig.mk
use #if (also a CIRCUITPY_ULAB)
2023-01-29 00:56:16 +01:00
MicroDev cda5689263
move `esp32_camera` to `espcamera` 2023-01-27 22:05:43 +05:30
Maciej Sokołowski e474df3a18 Add function for drawing polygons to bitmaptools 2023-01-20 23:14:38 +01:00
Dan Halbert 7dd76fc7e4
Merge pull request #7467 from matemaciek/main
Allow lines with ends out of bitmap in `bitmaptools_obj_draw_line`
2023-01-19 21:11:17 -05:00
Maciej Sokołowski 483f14b73f Allow lines with ends out of bitmap in `bitmaptools_obj_draw_line` 2023-01-19 21:37:25 +01:00
Scott Shawcroft dca66eb98c
Watch for ctrl-c over BLE workflow serial
Before this, it was impossible to interrupt a running program over
BLE.
2023-01-18 16:28:35 -08:00
Dan Halbert 79b76f7bea
Merge pull request #7445 from tannewt/fix_rpi_mdns
Share the web workflow MDNS object with the user
2023-01-17 14:46:38 -05:00
Scott Shawcroft 8b0db804ba
Fix SPI readinto with negative start or end 2023-01-12 16:25:11 -08:00
Scott Shawcroft 987d9a31c8
Fix pin_or_none 2023-01-12 16:03:45 -08:00
Scott Shawcroft ee2fe993dd
Fix repeated MDNS use on Pico W 2023-01-12 14:56:06 -08:00
Scott Shawcroft ca80f30348
Share the web workflow MDNS object with the user
Fixes #7369
2023-01-11 16:05:19 -08:00
Scott Shawcroft aa2ba4d88b
Have start and end kwargs respect element size
The comment says it is `buffer[start:end]` but it assumed elements
were a single byte long. Now it correctly does multibyte elements
from array.array.

Fixes #4988
2023-01-11 15:36:41 -08:00
Dan Halbert a974402542 Improve type validation errors messages, especially for pins 2023-01-10 15:02:55 -05:00
Scott Shawcroft 6b3ae630a9
Improve time alarm doc
Fixes #7406
2023-01-04 14:16:35 -05:00
Dan Halbert 03b43b7b3f complete rework for microcontroller.cpu.frequency and wifi.radio MAC addresses 2023-01-02 11:45:58 -05:00
Dan Halbert a3adcf0e1a clarify read-only mac address; reuse translate msgs 2023-01-02 10:13:20 -05:00
Jeff Epler 928fb0a9c4
Make the "name or service not known" message translatable 2022-12-26 13:58:31 -06:00
Scott Shawcroft c16b42e972
Tweak arg checking and comments 2022-12-20 11:00:13 -05:00
Scott Shawcroft f8ac1d9261
Rework the coproc API
It is now a generic `memorymap` API and an ESP specific `espulp` module.

Fixes #7218. Fixes #3234. Fixes #7300.
2022-12-19 14:08:38 -05:00
Jeff Epler 297657ea9a
Refactor so that all sites of name lookup failure result in gaierror 2022-12-14 14:45:32 -06:00
Jeff Epler 5ac622a30d
get rid of nearly-empty getenv.c file 2022-12-13 13:13:01 -06:00
Jeff Epler 3459fe322b
Withdraw the _environ module
This existed solely for testing, so expose it a different way during
the unix coverage build

Also turn off os.getenv support on samd21.
2022-12-08 15:33:10 -06:00
Jeff Epler a05829528b
_environ: update documentation 2022-12-08 13:36:48 -06:00
Jeff Epler ef2bfdb5db
dotenv becomes settings.toml 2022-12-08 12:44:20 -06:00
s-ol 99b8564e8f Add VfsFat.readonly property for getting current state
Previously the only other way of determining whether the Vfs has been mounted
read-write or read-only appears to be to attempt a write operation and detect a
possible OSError.

It wasn't possible for the user code to keep track of the state of the state
since the boot VM has to decide whether to (re)mount read-write or read-only,
but can't (easily) pass this information on to the runtime VM.
2022-12-08 14:45:24 +01:00
Scott Shawcroft 4c064c263e
Merge pull request #7294 from tannewt/analogbufio_rework
Rework the analogbufio API.
2022-12-02 14:53:16 -08:00
Scott Shawcroft d6c3dfb461
Merge pull request #7297 from jepler/chain-exception-doc
Implement the chain= argument of traceback.print_exception
2022-12-02 14:53:03 -08:00
Scott Shawcroft f7504ff857
Tweaks based on review comments 2022-12-02 10:19:31 -08:00
Jeff Epler b83c42e41a
Implement the chain= argument of traceback.print_exception 2022-12-02 10:50:31 -06:00
Scott Shawcroft 9e104c04ae
Merge pull request #7215 from FoamyGuy/set_root_group
displayio.show() API change
2022-12-02 08:45:20 -08:00
Scott Shawcroft 255e997345
Rework the analogbufio API.
* read() is now readinto() and takes the buffer to write into.
* readinto() returns the number of valid samples.
* readinto() can be interrupted by ctrl-c.
* readinto() API doesn't support signed numbers because it never did.
* sample_rate is now required in the constructor because supported
  values will vary per-port.
* 16 bit values are full range. 12 bit samples from RP2040 are stretched
  in the same way they are for AnalogIn.

Fixes #7226
2022-12-01 17:46:07 -08:00
Dan Halbert 082b0d1aed
Merge pull request #7191 from jepler/fastpixelmap
Add a fast PixelMap-like class
2022-12-01 11:43:00 -05:00
foamyguy 0563487433 get slicing 2022-11-30 19:16:20 -06:00
Jeff Epler 530e5a1df2
Use standard validation function 2022-11-30 14:39:51 -06:00
Jeff Epler c46e219795
Having an input-only pin is rare, save a string on other ports 2022-11-30 14:39:49 -06:00
Jeff Epler d39d146352
Merge some messages 2022-11-30 14:39:47 -06:00
Jeff Epler f67bca94c4
On python3 log(0) raises math domain error, not zerodivisionerror 2022-11-30 14:39:33 -06:00
Jeff Epler 2b01c139f5
use a standard validator function 2022-11-30 12:06:20 -06:00
Jeff Epler 7c9cd567a0
If uart is disabled, no pins will work; show NotImplementedError instead 2022-11-30 12:06:18 -06:00
Jeff Epler 8658e7a954
re-use length validator 2022-11-30 12:06:18 -06:00
Jeff Epler ac999098ee
merge a message 2022-11-30 12:06:18 -06:00
Jeff Epler 6ac2022093
merge a message 2022-11-30 12:06:16 -06:00
Jeff Epler 284ac21f51
merge a message 2022-11-30 12:06:16 -06:00
Dan Halbert 1bcfff3716
Merge pull request #7272 from tannewt/picow_mdns
Add MDNS support to Pico W
2022-11-29 10:09:24 -05:00
MicroDev 8a9d841da9
Merge pull request #7275 from jshimbo/main
supervisor.ticks_ms() documentation has an error
2022-11-29 14:34:24 +05:30
MicroDev e93af31b63
Merge pull request #7269 from jepler/socketpool-gaierror
Add SocketPool.gaierror
2022-11-29 14:33:12 +05:30
Scott Shawcroft 81afe05811
Merge pull request #7265 from jepler/wifi-monitor-docs
Fix documentation of wifi.Monitor
2022-11-28 16:23:40 -08:00
Scott Shawcroft c13ca95da1
Add MDNS support to Pico W
This adds both cpy-MAC.local and circuitpython.local support.

Fixes #7214
2022-11-28 16:15:28 -08:00
Jeff Epler aef55b7e41
Add SocketPool.gaierror
gaierror(-2) is raised in the failure case of getaddrinfo. This is
compatible with cpython's socket module.

Typical session:
```
>>> import socketpool
>>> import wifi
>>> socket = socketpool.SocketPool(wifi.radio)
>>> try: socket.getaddrinfo("boo", 0)
... except socket.gaierror as e: ee = e
...
>>> type(ee)
<class 'gaierror'>
>>> ee.errno == socket.EAI_NONAME
True
>>> ee.strerror
'Name or service not known'
>>> raise ee
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <module>
gaierror: (-2, 'Name or service not known')
```

Closes: #6941
2022-11-28 16:57:44 -06:00
Scott Shawcroft ad2d190507
Merge pull request #7247 from tannewt/picow_web_workflow
Enable* web workflow for Pico W
2022-11-28 14:19:42 -08:00
Jeff Epler e1c025d6dd
Fix documentation of wifi.Monitor
Its methods & properties were incorrectly documented as being directly
in 'wifi'
2022-11-28 13:30:08 -06:00
foamyguy 57d7f7f2ad move to _pixelmap 2022-11-24 09:07:08 -06:00
Jeffrey Shimbo c0b57ff8c5
Typo in docs for supervisor.ticks_ms()
https://docs.circuitpython.org/en/latest/shared-bindings/supervisor/index.html#supervisor.ticks_ms
ticks_add() helper function has an error
2022-11-24 06:05:46 -08:00
Dan Halbert 17be447c4b correct Radio.connect() and .start_ap() signatures; clean up some code 2022-11-22 17:11:03 -05:00
Scott Shawcroft dc20390588
Fix stubs 2022-11-22 09:04:12 -08:00
foamyguy 19f1119994 Merge branch 'main' into fastpixelmap
# Conflicts:
#	shared-module/adafruit_pixelbuf/PixelBuf.c
2022-11-21 20:25:58 -06:00
Scott Shawcroft c3a96a63c0
Enable* web workflow for Pico W
* Except for circuitpython.local which depends on MDNS and will be
done in a follow up PR.

Progress on #7214
2022-11-21 16:24:05 -08:00
s-ol 40d35e9eaa Don't block in I2CTarget.request(-1)
Partially reverts #6985
Closes #7241
2022-11-20 16:08:00 +01:00
foamyguy ef3398422a allow set_root_group for FrameBufferDisplay instead of show() 2022-11-19 11:41:48 -06:00
foamyguy e3cae22297 allow set_root_group for EPaperDisplay instead of show() 2022-11-18 17:34:03 -06:00
foamyguy 403e3ef430 change to CIRCUITPYTHON_TERMINAL. change internal API to use set_root_group 2022-11-18 16:53:18 -06:00
MicroDev f637332de6
Merge pull request #7209 from jepler/code-optimize-pixelbuf
Save code space by packing rgbw values into C union
2022-11-18 14:46:55 +05:30
Scott Shawcroft 866ff5bd21
Merge pull request #7197 from FoamyGuy/vectorio_hidden
implement self hidden property for vectorio shapes
2022-11-16 12:56:10 -08:00
foamyguy 788638f727 displayio.SERIAL_GROUP constant 2022-11-15 19:15:25 -06:00
foamyguy 1329fe998c add to .h and format code 2022-11-14 15:33:55 -06:00
foamyguy 2cd5d4f5a5 allow setting root_group on Display 2022-11-14 15:10:28 -06:00
Jeff Epler adca341d3b
Save code space by packing rgbw values into C union
It's more efficient passing one register-sized structure than 4
arguments or 4 pointers; working on intermediate values of 'int' size
is also more efficient in code size!

On raspberry pi pico w, this increased free flash space by +104 bytes.
It also increased the speed of my testing animation very slightly, from
187fps to 189fps when run 'unthrottled'
2022-11-14 09:29:45 -06:00
Jeff Epler cdab078d9d
shared-bindings: Get rid of CYW43 special cases in shared-bindings
.. by moving it into a new weak function that can be replaced
just by the picow build.
2022-11-14 08:44:08 -06:00
foamyguy 56be547754 fix type name 2022-11-11 20:18:42 -06:00
foamyguy 3c4d8c6926 implement self hidden property for vectorio shapes 2022-11-11 17:50:07 -06:00
Jeff Epler f5c637dc10
Add adafruit_pixelmap.PixelMap
.. a fast helper for animations. It is similar to and inspired by the
PixelMap helper in Adafruit LED Animation library, but with an extremely
fast 'paste' method for setting a series of pixels. This is a common
operation for many animations, and can give a substantial speed improvement.

It's named `adafruit_pixelmap` so that we can package a compatible version
in pure Python for systems that can't fit it in C in flash, or for
Blinka.

This is a proof of concept and can make a very fast comet animation:
```python
import time
import adafruit_pixelbuf
import adafruti_pixelmap
import board
import neopixel
from supervisor import ticks_ms
from adafruit_led_animation.animation.solid import Solid
from adafruit_led_animation import color

pixel_pin = board.GP0
pixel_num = 96

pixels = neopixel.NeoPixel(pixel_pin, pixel_num, brightness=1, auto_write=False, pixel_order="RGB")

evens = adafruit_pixelmap.PixelMap(pixels, tuple(range(0, pixel_num, 2)))
odd_indices = tuple((i, i+2) for i in range(1, pixel_num, 4))
print(odd_indices)
odds = adafruit_pixelbuf.PixelMap(pixels, odd_indices)
assert len(odds) == len(odd_indices)


comet_length = 16

comet1 = [color.calculate_intensity(color.GREEN, ((1+i) / comet_length) ** 2.4)
        for i in range(comet_length)]
comet2 = [color.calculate_intensity(color.PURPLE, ((1+i) / comet_length) ** 2.4)
        for i in range(comet_length)]

pos1 = 0
pos2 = 96//4

while True:
    evens.paste(comet1, pos1, wrap=True, reverse=False, others=0)
    pos1 = (pos1 + 1) % len(evens)

    odds.paste(comet2, pos2, wrap=True, reverse=True, others=0)
    pos2 = (pos2 - 1) % len(odds)
    pixels.show()

    m = ticks_ms()
    if m % 2000 > 1000:
        time.sleep(.02)
```
2022-11-11 07:54:33 -06:00
Jeff Epler 09f6919c93
Add ability to read VOLTAGE_MONITOR on Pico W
Because this must be treated like an in-use pin for all other purposes,
unfortunately a special case must be added in shared-bindings.

Multiple AnalogIn objects for VOLTAGE_MONITOR can be created (because
in use tracking isn't working) but this causes no harm.

Testing performed: Read the monitor, then imported wifi. When the
pin state was insufficiently restored, the second step would fail
with debug messages about do_ioctl timeout.

```
import analogio, board
a = analogio.AnalogIn(board.VOLTAGE_MONITOR)
print(a.value)
import wifi
```

Closes: #7020
2022-11-08 09:37:15 -06:00
Dan Halbert c9ad92d133
Merge pull request #7173 from jepler/async-socket
asyncio bugfixes, select bugfixes & selectable socket
2022-11-07 18:32:05 -05:00
Jeff Epler 319d9b04f1
Fix type annotation mistake 2022-11-07 13:51:58 -06:00
Jeff Epler 9cdfba2e47
Simplify argument checking to reduce translated strings
Build size on proxlight trinkey m0 en_US:
Before:  2412 (en_US)  820 (ru)
After:   2544 (en_US)  984 (ru)
Savings: +132 (en_US) +164 (ru) bytes available flash
2022-11-07 12:37:11 -06:00
Jeff Epler 452ebe27ae
socketpool: make socket objects selectable
.. which will lead to them being usable in async contexts, pending
relevant changes in asyncio
2022-11-05 12:05:19 -05:00
Jeff Epler 1f6cd7bfac
This compatibility name has been removed in 8.x 2022-11-02 17:39:34 -05:00
Dan Halbert 9307b62ad5 wip 2022-10-27 22:42:04 -04:00
Dan Halbert 2bba6a68e8
Merge pull request #7130 from dhalbert/characteristic-descriptors-missing
add Characteristic.descriptors to locals dict
2022-10-26 18:09:04 -04:00
Dan Halbert c52b5b64e5 add Characteristic.descriptors to locals dict 2022-10-26 12:34:33 -04:00
Dan Halbert fed77e918a Fix formatting of "Limitations:" in a couple of modules
When "Limitations:" is in the class docstring, it is sometimes taken
as a class attribute name because of the colon. When exactly is not clear, but
changing embedded colons or various indentations fixes the problem.
2022-10-26 12:33:16 -04:00
microDev 8f0a674a1b
coproc module enhancements
- add light and pretend-to-deep sleep support
- check coproc running status
2022-10-22 19:08:49 +05:30
Kattni a4238d815d
Merge pull request #7097 from dhalbert/document-limitations
catalog implementation limitations in documentation
2022-10-21 18:02:03 -04:00