#circuitpython-dev
1 messages · Page 49 of 1
not sure exactly but I know it include bad block tracking
definitely not worth your time
sd cards include microcontrollers that manage it all for you
you can find chips that act like sd cards but I don't think they are worth the cost over an sd card
ya, but then they aren't removable
I’m not bothered by not being removable
I am making some gifts that will be used by my kids so removable isn’t super desirable
Whatever the hardware underneath is, you could (no idea how) display a "fake" filesystem (like uf2 bootloaders do), such that writing actually writes to the real filesystem under the hood and "removing" does nothing. Maybe with some button on boot to disable this (cant remove) behaviour.
I would just use a SD card and edit its content by plugging on the computer tho
I’m actually wondering if given the right NAND flash that SDIO would work.. I kind of want to try now..
Lol.. I’ll let you know the results
ya, if you can find an IC that acts like an SD card then it should work
no promises
My guess is the biggest thing would be needing continuous read support and being able load the entire contents of the flash.
I am sucking at English today, wow.
adafruit sells one, doesn't it?
Yeah, it’s one that’s not exactly readily available outside Adafruit’s module
The SD card does not have to be a physical SD card. https://www.adafruit.com/product/4899
I see the raw chip on lcsc or versions of it anyway
Clean build -- great!
I will rebase this in locally after the first V1.21 merge commit.
@RetiredWizard Curious I just had another look at the 8.2 branch compared to MP and the only thing different that stands out (but that I don't think it the issue) is CP is not setting CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL to anything. MP sets it to CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=8192
That setting will try to put smaller allocations in internal SRAM instead of PSRAM - which might cause less fragmentation in PSRAM. You could try building with that added to the TinyPICO settings.
A...
Hi again,
I checked and apparently mbedtls has the ability to cache the handshake (and possibly speedup), using the MBEDTLS_SSL_CACHE_C:
https://github.com/Mbed-TLS/mbedtls/blob/1bc2c9cb8b8fe4659bd94b8ebba5a4c02029b7fa/include/mbedtls/config.h#L2884-L2894
BUT, as i see MBEDTLS_SSL_CACHE_C was NOT defined in circuitpythons' mbedtls_config.h, therefore currently cache seems disabled:
https://github.com/adafruit/circuitpython/blob/main/ports/raspberrypi/mbedtls/mbedtls_config.h
No...
Pushed the update with my GRB LED edit and updated the USB PID to one given by espressif specifically for this board.
requested changes implemented.
Not sure why it wasn't enabled (given that it's slow), but i'll try to enable it (🐰) and see if indeed it improves performance on subsequent requests.
Thanks for giving it a shot! We'd be happy to merge as long as it doesn't impact other stuff.
Thanks for getting a new PID! You'll need to fix the pre-commit test before we can merge. It should be auto-fixable on your machine. See pre-commit info here: https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/check-your-code
Pending discussions with the team - this is staged to remove Google Analytics from circuitpython.org.
This is not ready to be merged.
This is fine with me!
@candid sun want to video chat to go over HUSB review comments? I had a lot...
@slender iron sure yeah
I'll hop in the amelia voice/video chat channel
@candid sun I just realized I sent you the wrong talk. Will find it after lunch
oh okay, thanks!
Scott Shawcroft explains best practices for open interface design, using the Feather as an example case study.
It sounds as though the current problems with BLE service support relate to dynamically adding services / characteristics / descriptors after things are running. IIRC, a similar limitation exists for USB HID devices. The solution for USB was to require things to be setup within boot.py.
Could a similar requirement to setup BLE in boot.py avoid the dynamic update problems you listed above, and thus enable BLE on these boards in an earlier milestone?
Thanks for getting a new PID! You'll need to fix the pre-commit test before we can merge. It should be auto-fixable on your machine. See pre-commit info here: https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/check-your-code
Ah I see what happened - I got lazy and edited it on github directly so not everything got triggered properly. Updated from my own machine now - thank you for your patience.
I had some guide feedback mentioning the pins were missing, so took a look at the board definition and they were missing. So this adds them in.
Is here more the right place to ask than #help-with-circuitpython ?
There's a core library - usb_midi - that isn't available on the Winterbloom Big Honking Button board. What would I have to do to make that library available on that board in a future CP release?
Thanks @UnexpectedMaker!
I threw CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=8192 in boards/unexpectedmaker_tinypico/sdkconfig but that didn't appear to have any impact.
I also just loaded the latest v1.22 preview Micropython again and it still seems to work fine.
https://learn.adafruit.com/building-circuitpython/customizing-included-modulesT he Winterbloom manufacturer chose to turn it off. We would go by what they want. You could ask Thea about it.
Yeah, I didn't think it would help - but bummer anyway, sorry.
Thanks! I'll ping her on her discord when she's back online.
@lone axle have you had issues with the .root_group changes? I'm seeing it ignore when assigning to root_group on a subclass of BusDisplay
Not quite sure what's going wrong now. The pre-commit hook wanted to run some translation with generated additional files and now one of those additional files is throwing errors?
I haven't seen anything like that
hrm
What is an example of a BusDisplay subclass? I don't recall seeing that name before I don't think
its the new name for Display
I think the MP merge may have broken it
(which is good)
needs to add a test
tests 8.2.6
yup, that works
(I was worried we'd have to add show() back)
If you look here: https://github.com/adafruit/circuitpython/pull/8468/files, you'll see that you have different versions (probably outdated) of the ulab module and a library module. These should not be in your commits. These should be brought up to date. The only files changed in your commits should be the files you are adding. That's causing the build problems.
I notice that you forked for this PR, but are working on main. Instead. you can fork once, and then reuse the fork. But alway...
I know there's going to be an effort to update the libraries replacing .show with .root_group once the 7.x libraries are frozen but if I run into individual cases while working with pre-release 9.x (main) should I just modify a local copy of the library or would it be helpful to also submit a PR?
feel free to submit a PR and we can hold off merging it until we're ready. We can do a survey of all the libraries by grepping over the Bundle repo, but all the changes will need PR's anyway. Thank you.
CircuitPython version
Adafruit CircuitPython 8.2.6 on 2023-09-12; Adafruit Metro M4 Airlift Lite with samd51j19
Code/REPL
# not available, see below
Behavior
TL;DR: my best guess at the moment is broken memory hardware, but if that's not the case (the board is not very old), it's really weird behavior. Read on below for much more details and the whole story.
It boils down to a few things:
- Getting into bootloader mode with double-pressing ...
This does sound like a hardware problem of some kind. It is not CircuitPython core related. Could you open a thread in https://forums.adafruit.com/viewforum.php?f=60 and we'll pick it up there? Post a link to the thread here and then close this issue.
In the thread, could you answer the question below? You don't need to repost all the above. Just link to this issue.
Does double-clicking RESET cause the red LED nearest SWD connector to pulse? Is it a fast or a slow pulse? If the red LED ...
I think we can remove show() from libraries now because the 7.x bundle is turned off
Unfortunately, BLE is implemented differently than USB. BLE is reset after every VM run and relies on BLE reconnection. USB starts and connects once.
The best way forward is to enhance the IDF's BLE library to support changing services like the BLE spec allows.
CircuitPython version
Adafruit CircuitPython 9.0.0-alpha.1-74-geae426ed90 on 2023-10-18; ProS3 with ESP32S3
Code/REPL
id = board.board_id
if id == 'unexpectedmaker_pros3':
use_neopixel = True
import pros3
import neopixel
my_brightness = 0.005
BLK = 0
RED = 1
GRN = 200
else:
use_neopixel = False
my_brightness = None
BLK = None
RED = None
GRN = None
# in setup()
if id == 'unexpectedmaker_pr...
Automated website update for release 8.2.7 by Blinka.
New boards:
- magiclick_s3_n4r2
- unexpectedmaker_blizzard_s3
- waveshare_rp2040_touch_lcd_1_28
I'm using framebufferio.FramebufferDisplay. display.rotation=270 works, display.rotation=-90 does not. Seems like either should work.
documentation only lists 270: https://docs.circuitpython.org/en/latest/shared-bindings/framebufferio/index.html#framebufferio.FramebufferDisplay
rotation (int) – The rotation of the display in degrees clockwise. Must be in 90 degree increments (0, 90, 180, 270)
These actual values are checked for
@grand hamlet your latest push still is changing the submodule commits. You need to do make fetch-port-submodules in the ports/espressif directory
remerging does not automatically fix the commits
I suspect we need #4688 again and we should add a test this time.
Trying to sort things out a step at a time, got rid of the mpy-cross/mpy-cross
Just now.
I have done done make fetch-port-submodules before, I guess I need to do it again to get things properly up to date?
right, or you probably could jsut do git submodule update extmod/ulab and the same for the other one, in the right directory
You mentioned my ulab probobably being out of date, does that get sorted out with that? I was just looking into running updates through apt but not even sure what to update 😛
ulab is just another submodule
This has been such a disaster haha. Not helped by 2 random power outages and the VM randomly crashing. I'm very much out of my depth here.
Submodules are updating at least
What do I need to run after that because I'm very much lost
git add the changed folder and commit them
axeia@axeia-VirtualBox:~/repos/circuitpython-ESP32-S3-Zero/ports/espressif$ make fetch-port-submodules
wall of things completing
axeia@axeia-VirtualBox:~/repos/circuitpython-ESP32-S3-Zero/ports/espressif$ git status
On branch main
Your branch is up-to-date with 'origin/main'.
nothing to commit, working tree clean```
Going by git, there's nothing to commit
Tried running make BOARD=waveshare_esp32_s3_zero
But that's running into a problem.
LINK build/mpy-cross
text data bss dec hex filename
330068 14200 904 345172 54454 build/mpy-cross
make[1]: Leaving directory '/home/axeia/repos/circuitpython-ESP32-S3-Zero/mpy-cross'
In file included from ../../py/mpstate.h:35,
from ../../py/runtime.h:31,
from ../../extmod/ulab/code/ulab.c:17:
../../extmod/ulab/code/ulab.c:140:11: error: 'ndarray_properties_attr' undeclared here (not in a function)
140 | attr, ndarray_properties_attr,
| ^~~~~~~~~~~~~~~~~~~~~~~
../../py/obj.h:801:44: note: in definition of macro 'MP_DEFINE_CONST_OBJ_TYPE_EXPAND'
801 | #define MP_DEFINE_CONST_OBJ_TYPE_EXPAND(x) x
| ^
../../py/obj.h:805:179: note: in expansion of macro 'MP_DEFINE_CONST_OBJ_TYPE_NARGS_9'
805 | , _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, N, ...) MP_DEFINE_CONST_OBJ_TYPE_NARGS_##N
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../extmod/ulab/code/ulab.c:129:1: note: in expansion of macro 'MP_DEFINE_CONST_OBJ_TYPE'
129 | MP_DEFINE_CONST_OBJ_TYPE(
| ^~~~~~~~~~~~~~~~~~~~~~~~
make: *** [../../py/mkrules.mk:84: build-waveshare_esp32_s3_zero/extmod/ulab/code/ulab.o] Error 1
You could save the changes you need out of the repo. Then maybe just delete that fork. Re-fork, get the latest main, git fetch-port-submodules and check out a branch for the changes. Check in yoru changes, and push a new PR. Close the old PR. That may be less work than trying to clean up your fork, since your main out of sync with ours anyway.
I was looking for your circuitpython repo but it's not a fork of adafruit/circuitpython. That was confusing 🙂
you may want to rename it to something else so you can then fork adafruit/circuitpython and keep the circuitpython name
Where is the setter code for display.rotation? It should raise an exception for an invalid value.
Probably a better plan, thought it might be easier as well myself to just set the actual things that need changing aside and start afresh.
I'll give that a go tomorrow. Definitely turned out to be a lot more involved process than I thought it was.
it's often easier to bake a new cake than cut the burned parts off the original one
Not related but I saw in the documentation a little while ago that ESP32's should have enough memory to have 'dual screen' to be enabled by default.
Is that still something that's being considered?
I plan on making a keyboard with 2 screens and it would be nice if I could stick to the normal builds rather than having to roll my own and having to maintain the entire environment to be able to do so.
Scott is working on something that will allow dynamic allocation of displays, if I understand correctly
Question for all the CircuitPython devs who know RP2040 and neopixel & adafruit_pixelbuf: Is there any reason why for neopixel.NeoPixel(some_pin, n=8) that "n=8" would be a "special" value that could cause weird issues? Over in help-with-circuitpython, user Muck is having this weird issue where on the PropMaker RP2040 when having i2s audio going, doing things like for i in range(8): pixels[i] = (255,0,0) goes all non-linear for them. But changing it to 12 or 16 and it works. Link to video of the issue as replicated by me. But it's really flaky when it happens: #help-with-circuitpython message
CircuitPython version
Adafruit CircuitPython 8.2.6 on 2023-09-12; Adafruit Feather RP2040 Prop-Maker with rp2040
Code/REPL
import time, board, digitalio
import audiobusio, audiocore, audiomixer
import rainbowio, neopixel
num_pixels = 8
power_pin = digitalio.DigitalInOut(board.EXTERNAL_POWER)
power_pin.switch_to_output(value=True)
pixels = neopixel.NeoPixel(board.EXTERNAL_NEOPIXELS, num_pixels, brightness=0.2, auto_write=True)
audio = audiobusio.I...
Also, it seems to happen when the REPL is connected, but not when it's not.
The RP2040 neopixels are driven by the PIO and the problem seems to be a timing issue. Which something with I2S could be triggering. I have found sometimes adding "extra" non-existent pixels fixs a problem as it evens out timing sending data nothing interprets.
The green instead of red light is also a good indications of a timing issue. Not sure any more off the top of my head.
As of v1.21.0, MicroPython provided a new lib/uzlib which has a slightly different API: it returns wbits instead of you supplying wbits. I reverted to the old one in the v1.21.0 merge until someone can study the implications and change our code.
Also note that MicroPython has decided to provide deflate instead of gzip. We should try to understand that and see if we might follow suit.
This changes a few of the Hacktablet and Makerfabs pin names for consistency. I also believe the RGB pins were defined backwards on the Makerfabs board. I actually have the 1024x600 board but from everything I have seen online they should be connected the same way as the 800x480 board. Before this change, the following code drew a black line rather than a green line, reversing the order of the RGB pins resolved it.
import board
from adafruit_turtle import Color, turtle
import frameb...
Interesting CircuitPython build result. I have a 6-core/12-thread Intel CPU, i7-8700. I have been running make -j12, assuming that the threading would buy me a little speed. In fact it's the opposite: -j6 is faster, by up to 10% or so (wall-clock time)
Same. Not directly comparable, but I found a similar result a few months where on my M1 Mac getconf _NPROCESSORS_ONLN returns 10 but about half that was anecdotally faster at CirPy builds. Weird because I was taught to "+1" the nproc value because of I/O contention
i was also using that getconf, and to get the actual number of cores I found this compact search on stack overflow: lscpu | awk -F ":" '/Core/ { c=$2; }; /Socket/ { print c*$2 }. There is not a comparable getconf or similar that I know of.
Building on an i7-10700 (8C/16T) running Ubuntu 22.04, scaling tracks up to 4T, then additional threads give diminished improvement.
i would divide by 2 but it varies across CPU's
10700 does not have "efficiency cores", is that right? So you are using -j12 or -j4? I could try -j7 and up
Right. All cores are the same. Using -jxx to set number of threads. Terminology is confusing, in this case threads are Intel hyperthreads.
What's your OS?
Weird. You may be having heating issues that are causing your cores to slew down their clock dividers.
fan is quiet. it's a Dell Optiplex small form factor
I've got a heatsink the size of a brick on mine. And my fans spool up running the build. Maybe the stock Dell fan speed profile is skewed to quiet?
-j6 33.3ecs, -j7 36.7 secs, -j5 32.8 secs, -j4 33.7 secs, -j3 43.0 secs
i can check the bios settings
i hear it spool up sometimes
metro m4 build, but it's not whining
the builds above are pico, not metro m4, so no LTO
Your -j5 is just one second more than my best at -j8. This is a Pico W build here.
it's an old machine, maybe I should redo the thermal paste (Dell Optiplex 7060 SFF)
I should rummage around for a temp monitor
in Linux
Also consider disabling hyperthreading in your BIOS. You'll get more bang per core on this sort of workload.
I am not sure how much is in parallel beyond the basic compilation of all the sources. The qstr, etc. stuff at the begininng is probably single thread, and so is the linking, I assume
True, that's what I've observed. That's where no hyperthreading will double the single thread bits.
using watch sensors, highest CPU temps I am seeing are 77C, typical is low seventies or lower
You can also monitor clock slewing with watch -n1 "lscpu | grep MHz | awk '{print $1}'";
There are some long sequential steps. The final link, even if it uses LTO, doesn't use a while lot of parallelism but can be the very longest running step...
Generating compressed error messages is also lengthy and not parallel
New thermal paste time! Last time I re-pasted my rig the old paste had dried to a powder.
I turned off hyperthreading; seems to make no difference. SpeedShift, SpeedStep, TurboBoost are all on. I will check the paste -- thanks!
Interesting -j3 to -j6 (i5-9600) goes from 37 to 33 seconds. (-j1 is 1:45 or so). I see all CPU cores showing about 80% usage at 3 but max at 6
do you see improvements above -j6?
Just tried and seems consistent. Going to try -j5 too
-j4 on and higher seems to be consistent in build time, not up or down.
I'm seeing the same as @Mark. I wonder if the top-level make is again invoking make with a smaller -jxx somewhere in the build?
The jobserver stuff may not be set up right. As I mentioned in the merge thread, with gcc12 I am now seeing lto-wrapper: warning: jobserver is not available: '--jobserver-auth=' is not present in 'MAKEFLAGS' lto-wrapper: note: see the '-flto' option documentation for more information on the Metro M4 builds
I think just trying gcc12 on main would have the same effect. Merge build is branch v1.21-merge in dhalbert/circuitpython right now
For example, see this rule inports/raspberrypi/Makefile:
$(Q)cmake -S pioasm -B $(BUILD)/pioasm
$(Q)$(MAKE) -C $(BUILD)/pioasm PioasmBuild
i was looking at this last night and saw mention of adding + prefix to the $(MAKE) lines.
i am unfamiliar with that and haven't had time to research it yet.
I did notice all my cores would max out for the first 10-15%, then dip for a few seconds, then shoot back to 100% till the end when again a few more seconds of 50%. Just the two dips from maxing it all out though.
On second take, make accounts for nested use of make automatically. Breaking it down, the bulk of the build time is spent constructing qstrdefs.generated.h.
FWIW, I'm thrilled having ~30 second full build times. Seems like just yesterday I was watching the dots while a small Pascal program compiled on my Apple II.
I'd love to see us optimize across board builds to reduce our CI time
we should merge 8.2.x into main now
I can confirm this issue. I have a forum post with details here:
https://forums.adafruit.com/viewtopic.php?t=205186
Has anyone come up with a solution/workaround?
Confirming what @onyx hinge said earlier, compressing error strings is a large part of the single-threaded portion of the build. Re-coding maketranslationdata.py and huffman in C could help. Huffman encoding is bit-string based, which is not one of Python's strengths.
I'd rather preserve the flexibility, we keep refining just what maketranslationdata does. Huffman hasn't changed in ages though so a pip installable c version wouldn't hurt, even if it changes API
I'd rather compress them all once and use them for all boards 🙂
Good point. It should be possible to pull huffman plus the generic encode/decode bits from maketranslationdata.py into a C library.
compression depends on qstrs now and they change per-board for now
and it depends on the subset of all compressed messages in a build as well
what we could do is have a "go faster" knob where all the fancy tricks aren't used for boards with plenty of flash space
like almost all rp2040 & espressif boards
ya, it'd be good to factor all of that out
I've got an experiment in mind that factors out the huffman library, decompress, and compress from maketranslationdata.py to a new C library. I'll report back and open a PR if it pans out.
are you hung up on the pico w ble stuff?
Just need a pallet cleanser. You were right, it is complicated.
I know the feeling, I fled the country after my last big project. 🌍
and this laptop has never compiled circuitpython before, wild
to trade compile speed & flash size
Initially enable the faster mode on rp2040 and espressif, where there's usually plenty of flash available (these advanced techniques save hundreds to thousands of bytes, which is important on a lot of old samd21 boards but is a drop in the lake of a 4MB flash chip)
Levels are:
- 1: fastest
- 3: use qstrs
- 5: use custom dictionary
Tested on the unix build (level 1) and still passes tests.
real time duration of running just maketranslationd...
@tannewt seems fixed in 8.2.7 ran it through some paces after the new release last night and no more hard faults. I cannot attest to issue 8444 though.
I'd like some help with UART control of the Audio FX Sound Board (Product ID: 2217). I got it working with discrete pin triggering, but I would like to change to serial control over UART. I have found some example code, but for some reason it only does receive(https://learn.adafruit.com/circuitpython-essentials/circuitpython-uart-serial). I think a simple example of CircuitPython doing both Rx AND Tx would get me going. Can anyone think of some example code I can learn from?
@onyx hinge , @slender iron Looks like the problem is not bit-string manipulation but rather the search for an optimal set of n-grams. Factoring out huffman encoding/decoding to C won't speed thing up as all of the overhead is in the while len(words) < max_words: loop.
This is a question for #help-with-circuitpython
@slender iron ok I got ports/unix coverage variant to compile, pushed all changes, didn't try any tests yet; will go eat
👍 I'll try the tests
Hey folks - just finished work on my CP board support for my new BLING! and TinyWATCHS3 boards and they are not like my usual "development boards" - but instead have fixed functionality and no user exposed IO.
What I'm wanting to know is what the consensus is on including frozen libraries?
For instance, my TinyWATCHS3 uses an ST7789 screen, has a bunch of peripherals like RTC, Fuel Gauge, IMU, Magnetometer etc... these are fixed hardware. Should I provide support for these in a frozen form?
It's not like users would choose to "use or not use" the screen 😉
I know I can ship a bunch of libraries in \lib but that means if someone stomps their CP install, they no longer have them and then have to hunt them down themselves and add them back in etc.
we originally started using frozen modules to save RAM space on chips with limited RAM. There are pluses and minuses: it's very convenient, but if there's a library change, then we need to release a new CircuitPython or else have people override the frozen module. The libraries had more churn early on; now the base libraries don't change all that much: new releases often have nothing to do with code: they are just build infrastructure changes.
So I'm saying it's really up to you. It's a use case question, not really a policyt question. There are manufacturers who like things frozen to make it easy to use out of the box, and there are others who are tweaking their custom libraries often and might want a new release.
you could always make custom releases: 8.2.7+c-um-tinywatchs3 or whatever
Right-o. I notice that not all libraries I'd want to include are available in the frozen folder anyway.
we're happy to add more there; it's just more submodules
Yah, I don't want to have to maintain a seperate build or list of libraries/bundles etc and then have to worry about keeping them current etc.
it's support one way or the other: either you maintain it in our repo, and tell people how to override if there are bugs, or you supply builds
Yeah, just what I need - extra tasks 🙂 hahaha
Ok, I might just include essential libs frozen - Display, Neopixels etc and then any "can work without ones" I'll have as seperate things I include and users would need to add back in.
it's convenient for the onboard sensors too, if you think those libraries are stable
There are bunch of peripherals on these boards I've never used in CP befoe, so not even sure the libs are compatible or how well they work etc - or even if they are supported!
Maybe my best bet is to get the board definitions PR'd and then over time update them and freeze "known good libs".
I was trying to get these ready for 8.2.7 - woops! haha. I'll still add them for 8.x today and then start work on adding them to main.
8.2.7 is almost certainly not the last 8.2.x release 🙂
These are moved:
- Display -> busdisplay.BusDisplay
- FourWire -> fourwire.FourWire
- EPaperDisplay -> epaperdisplay.EPaperDisplay
- I2CDisplay -> i2cdisplaybus.I2CDisplayBus
paralleldisplay is now paralleldisplaybus (and registered as
paralleldisplay too).
Bus related helpers are split out of display_core into bus_core.
It is in still displayio since it is a dependency of both
busdisplay and epaperdisplay.
Fixes https://github.com/adafruit/circuitpython/issues/7667
T...
Yeah I figured it might not be, and I've done the work anyway, so might as well raise a PR as they are ready now.
@atomic summit scott is doing a deep dive right now and looking to update your 8.2.x boards
to merge 8.2.x to main
Oh....
i am not paying that close attention
Added 2 of my new boards for the 8.2.x branch
CircuitPython version
Adafruit CircuitPython 8.2.7 on 2023-10-19; Adafruit Matrix Portal M4 with samd51j19
Code/REPL
import time
from random import randrange
import board
import terminalio
from adafruit_matrixportal.matrixportal import MatrixPortal
matrixportal = MatrixPortal(
url=None,
json_path=None,
status_neopixel=board.NEOPIXEL,
height=32,
width=128
)
# --- Display Setup --- #
# Colors for guide name
colors =...
can you use a much longer uFL -> SMA adapter cable to really make sure that signal isn't getting to the board?
Adds support to supervisor/shared/status_leds.c for GRB status LEDs (should be easy enough for others to extend to BRG or whatever if such things exist).
Adds support for the Waveshare ESP32-S3-Zero board. My thanks to espressif for proving me with a USB PID and Waveshare for granting me permission to request a USB PID from Espressif for their product. This board unsurprisingly uses a BRG status LED.
fingers crossed
I see there was some discussion on using more threads above. Coincidentally I tried using -j6 (AMD Ryzen 5 1600 AF under virtualbox) - I did see all 6 cores being pushed hard at some points
Annoyingly virtualbox refuses to install on my main rig, I'd be curious to see how much faster it goes on my Ryzen 7 5800X.
Looks good! Thanks for your patience with the redo. The commit is clean.
I am also struggling with this issue. I have a forum post with details here: https://forums.adafruit.com/viewtopic.php?t=205186
Has anyone come up with a solution/workaround?
My workaround was to switch from a soldered spring coil antenna to an external antenna using the ufl to sma adapter and just keep the antenna a few inches from the board. No issues since doing that for my project at least. I have about 10 of these set up with the external antenna and max power for an i...
Don't know why the 'A' was added , in uppercase? (I was off the livestream after a while.)
Thanks @dhalbert ! But why are you awake working now? Go to bed!
Thank you for the recommendations. At least I understand the problem now. I have multiple applications for these boards. In some cases, I won't need USB, so that's fine. When possible, I'll go with the ufl to sma. Where space is an issue, I'll just have to lower the power and deal with the potentially reduced range.
I wish I had found this page earlier. I didn't realize it was an interference issue until after a few days of troubleshooting. Since this is a known issue, adding a note to th...
I briefly tested the artifacts from this PR in 3 contexts:
- Funhouse using print() to show messages on the display that was initialized automatically by default
- Magtag using adafruit_display_text to show a label on the display at various locations
- Matrix portal using some Bitmaps that have lines drawn within them, the display was initialized by adafruit_matrixportal library
All appeared to work as expected.
Does that mean it will get a page under https://circuitpython.org/board/waveshare_esp32_s3_zero/ whenever the next circuitpython version is released?
ok we made a page for the guide here
https://learn.adafruit.com/feather-rp2040-rfm95/rp2040-usb-radio
we really do think that its a RF coupling issue - we saw very similar behavior when we had 'high current drive' on the RP2040 pins for the SCORPIO driver board. and that's not even amplified!
please check it out, i'm going to close this issue because we have a few workarounds :)
If you haven't already, take a look at https://learn.adafruit.com/how-to-add-a-new-board-to-the-circuitpython-org-website
Want to add your CircuitPython or Blinka board to CircuitPython.org? Here's how.
Ah thanks, I'll check that out. Thought it would create some place holder by default which can be edited from there.
I'm going to steal Jeff's train of thought from #5179 but for the esp32s3 chip.
The Makerfabs MaTouch TFT 7" board has an SD card slot wired up for 1bit SDIO and using the link Jeff referenced and example code from the esp-idf, I will take a stab at i...
bumped into this too - commenting so i get notified when its closed :)
@tannewt i think synthio is basically this? we can close :)
CircuitPython version
Adafruit CircuitPython 9.0.0-alpha.1-77-g2c47221cac on 2023-10-21; Adafruit Camera with ESP32S3
Code/REPL
def init_display(self):
# construct displayio by hand
displayio.release_displays()
self._display_bus = displayio.FourWire(self._spi, command=board.TFT_DC,
chip_select=board.TFT_CS,
reset=board.TFT_RESET...
I believe .show was depreciated in 8.x and removed in 9.x
ooh ok that maybe what im forgetting!
I recently added support for these boards, this should add all the info so they can start showing up on the circuitpython.org website.
It doesn't really show which image it's not happy about. I guess it's unhappy about the 'original' being only 800x600?
or.. I completely overlooked one being in a completely wrong directory.
How the heck did it up end there
Bummer! Still, I appreciate your responding. I now have five ESP32-S3 devices, which I have really wanted to used with CircuitPython for BLE HID (mouse, keyboard, joystick, etc.). I did not realize until a few days ago that it wouldn't work for my needs. I'll be watching this issue, although sad because of the likely long timeline involved.
Keep up the great work! I'm overall a very happy customer of Adafruit hardware!
It looks to me like the Makerfabs TFT7 board has shared the I2S audio pins with the USB data pins (D-, D+). If I attempt to initialize audiobusio I get an I2S_BIT_CLOCK pin in use message and when I run the Arduino audio example, the USB serial connection repeatedly disconnects/reconnects while the audio is playing. Is there anyway to get Circuit Python to release the USB data pins?
CircuitPython version
Using the latest main of asyncio https://github.com/adafruit/Adafruit_CircuitPython_asyncio
Using the latest ticks https://github.com/adafruit/Adafruit_CircuitPython_Ticks
Using "A" latest circuitpython nightly: adafruit-circuitpython-unexpectedmaker_tinys3-en_US-20231018-eae426e.bin
Adafruit CircuitPython 9.0.0-alpha.1-74-geae426ed90 on 2023-10-18; TinyS3 with ESP32S3
Board ID:unexpectedmaker_tinys3
UID:4F21AFD4FF0B
boot.py output:
Code/...
Oh
I think this is it
// CIRCUITPY-style ticks
#define _TICKS_PERIOD (1lu << 29)
#define _TICKS_MAX (_TICKS_PERIOD - 1)
#define _TICKS_HALFPERIOD (_TICKS_PERIOD >> 1)
#if !CIRCUITPY || (defined(__unix__) || defined(__APPLE__))
STATIC mp_obj_t ticks(void) {
return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_ms() & _TICKS_MAX);
}
#else
// We don't sha...
Copy and paste error I believe, sorry.
Updated files for new Unexpected Maker boards to make them conform with new sdkconfig setup
Thanks for the diagnosis! If you have a build environment for CircuitPython, could you try adding back the code? A PR to fix would be welcome. Otherwise we'll take a look early this week.
CircuitPython version
Adafruit CircuitPython 9.0.0-alpha.1-64-gf14ca95df4 on 2023-10-06; Adafruit MatrixPortal S3 with ESP32S3
Code/REPL
import os
import gc
import ssl
import time
import wifi
import socketpool
import adafruit_requests
import adafruit_display_text.label
import board
import terminalio
import displayio
import framebufferio
import rgbmatrix
import adafruit_json_stream as json_stream
import microcontroller
from adafruit_ticks impo...
show is still valid in 8.x and will be the last version it is valid.
transitioning to total deprecation of display.show in 9.x in favor of display.root_group
do something like this instead
main_group = displayio.Group
display.root_group = main_group
i was able to have it happen again with the chrome console open:
Connected!
3index.js:37 write
index.js:37 Initializing File Transfer Client...
index.js:37 Waiting for connection status to change...
index.js:37 PUT http://cpy-2048dc.local/fs/code.py net::ERR_CONNECTION_RESET
_fetch @ index.js:37
writeFile @ index.js:37
await in writeFile (async)
writeFile @ index.js:24
writeFile @ index.js:35
op @ index.js:37
saveFile @ index.js:35
Gd @ index.js:37
await in Gd (async)...
Change from "pinto" to "pino"
I had a weird LED turning off issue, it seems to be related to the time.sleep call.
When I run this code on an RP2040 propmaker my LED will turn off, and occasionally turn back on while sleeping.
import board
import pwmio
import time
rled = pwmio.PWMOut(board.D10, frequency=5000, duty_cycle=2**15)
time.sleep(5)
Without the sleep the LED stays on as expected.
Has anyone played with the latest macOS 14.1 beta to see if the USB sync issue is still there? I'm not signed up for the betas, and don't really have a "spare Mac" I'm able to risk betas on right now, but I'm curious to know if by some fluke the issue has been addressed?
Also, @slender iron I released this morning I accidentally PR'd my updated BlizzardS3 board files in main with my other 2 boards. I know you did the work already on it moving it from 8.2x to 9.x sdkconfig setup - sorry.
No worries! I think someone did try the Sonoma release candidate and still had the problem
bummer 😦
Anybody available to verify a potential bug with me? It's in the RP2040 version of the PulseIn component on the PulseIO module.
I can't download the build tools I need to build circuitpy locally (hotel wifi, 44 hour estimate). I need to change 2 files to fix this bug; can somebody help build a test branch for me?
Let me know what branch you're building from and where I can find the two files and I'll git it a shot
I'm modifying the main branch, I can toss the two files up here if that's OK, or DM them to you.
ports/raspberrypi/common-hal/pulseio/ ( the files I'll give you ) for position.
I suck at replying. >.<
ok, be a few minuts to get things going
(Want to build against the latest version, not against the alpha)
thank you!
SO much!
what board are use using?
:laugh: reply....
Oh, sorry - just the default raspberry pi pico (non-w)
... I didn't change that. :/ I might have pulled files from the alpha. Let me make sure I have the latest 8.2.7 files and put my modifications onto that.
Thank you so much for trying; I think it's ultimately going to need more work. I don't know if I can debug my problem well enough while I'm in a hotel... so... can I tip you or buy you a coffee for your help?
No worries, I was working on CP anyway so wasn't any bother at all. Good luck tracking the bugs down when you have real internet 😄
Thanks. I think ultimately I'm going to have to make a custom version of the pulseio that won't get mainstreamed. It's not great.
(My solution is not great, that is)
I noticed a bug in the pulseio module for the RP2040 when using it:
Under specific circumstances, an item getting pushed into the queue during the PIO interrupt handler can be overwritten.
This happens specifically when the "len--" of popleft() is being executed: len is loaded into a register, then the register is decremented, then written back to memory. If the interrupt happens after len is loaded from memory into a register, or after it's decremented - but before it's written back t...
I found better internet. 😄 Managed to compile. For real, though, I want to thank you for your willingness to help. Anything I can do?
All good, thanks though, and congrats on finding the Internet 😄
Thanks!
We use Weblate to do translations: this is an easy way to edit and add to a translation: https://hosted.weblate.org/engage/circuitpython/
See also https://github.com/adafruit/circuitpython/issues/1098
@wtuemura - your latest set of translations flips this back, only because this was not done in weblate. I can add another commit to https://github.com/adafruit/circuitpython/pull/8506 to fix it.
I am trying to test out the cleveland art project to see if I can replicate any of the issues that a user on the forums and github is having or see if I can find a way to help. In reading into the issue I saw that this message from someone whose seemingly associated with Cleveland art: https://github.com/ClevelandMuseumArt/openaccess/issues/8#issuecomment-1743348001 They are asking for the removal of the CMA logo from the learn guide: https://learn.adafruit.com/cleveland-museum-of-art-pyportal-frame. My assumption is they mean the one depicted on the pyportal display in the main photo on the overview page.
I'm not sure whether they realize that photo is used in the project that runs o n the pyportal also (the photo is of it running on a device). The CMA persom mentions removing it from the web page, but perhaps it is best to remove it from the project as well?
Thanks for coming up with an elegant fix. But it also perfectly ok to disable interrupts, and that's typically what we'd do in this kind of case, with common_hal_mcu_disable_interrupts() and common_hal_mcu_enable_interrupts(). That is straightforward, and fast to execute. It would be more robust against future code changes.
There was an additional in-line image of the logo in the guide, which I removed a few days ago. Not sure if we need to remove it from the photo as well, but I could just substitute one of the other photos
I think I will move up the landscapce and remove it from lower down on the first page
do you think it's okay to leave the logo image file in the project itself? It uses it basically as a sort of loading splash screen.
maybe we should just change it to text
Okay, yeah I like that idea. I was thinking to just credit them by name as well even though not explicitly required by cc0
i removed the photo but if the code is going to change anyway that can be done at the same time.
@tulip sleet Got your suggested changes, I’ll make those when I get a chance later today. Do you know the cycle penalty for disabling and reenabling interrupts?
no, but I think it's pretty trivial. I'll look
There are some other small improvements I think can be made in this project as well. The random image selection uses a hardcoded upper bound. But it appears there are more images in the collection now so we could increase it. Or perhaps read the value out of the JSON responses so it's "self updating"
Thanks. It definitely reads better and doesn’t need a comment. I DID test my solution though and it worked. I’m assuming this glitch might be present in other platforms, too.
it boils down to a couple of single instructions; I think it's nothing to worry about.
if you could re-test that would be great, thanks
Oh, nice. I can retest, yeah.
It’s probably better than the occasional branch penalty I was getting in my solution.
other ones typically use PWM hardware, atmel-samd would be a typical one to look at
Thanks for the help. My first real contribution upstream!
we appreciate it!
atmel-samd guards already:
uint16_t common_hal_pulseio_pulsein_popleft(pulseio_pulsein_obj_t *self) {
if (self->len == 0) {
mp_raise_IndexError_varg(translate("pop from empty %q"), MP_QSTR_PulseIn);
}
if (self->errored_too_fast) {
self->errored_too_fast = 0;
mp_raise_RuntimeError(translate("Input taking too long"));
}
common_hal_mcu_disable_interrupts();
uint16_t value = self->buffer[self->start];
self->start = (self->start + 1) % self->maxlen;
self->len--;
common_hal_mcu_enable_interrupts();
return value;
}
I was just looking but I’m on my phone atm.
That’s where I was going to put my interrupt guards, at least, so that’s a nice sanity check
<@&356864093652516868> Regular Monday meeting is in less than two hours, at the normal time of 11am Pacific / 2pm Eastern here on Discord. Add your hug reports and status updates if you haven't already.
https://docs.google.com/document/d/13dm8Dw4AJq_dwmmmlnnBj79qUaau48uXwYyJTO2_YMs/edit?usp=sharing
You can use github actions to build for you too in a pinch. Just enable actions on your fork and push your changes
@slender iron I've improved maketranslatedata.py so that build times are improved from 31.5 seconds to 20.2 seconds. I'm having a small loss of compression efficiency from 12873 to 12652 bytes saved (I'm 221 bytes worse). The loss is due to qstr compression, where some cases trade-off on the razor's edge.
what port's build time?
The iterative dictionary word search is the heart of the problem. The regular expression with qstrs included becomes quickly becomes unwieldy.
using a bit more space is fine as long as all of the boards still fit
The port is raspberrypi
@tulip sleet I think I recall recently you mentioning working on something related to SSL certs issued by Let's Encrypt. I'm starting to wonder if there is something similar in play for ESP32SPI or nina-fw? I was able to replicate reliably one of the errors that this user reported and simplify the reproducer down to a slightly modified wifi test script rather than the full art museam project.
I'm noticing that requests to https://openaccess-api.clevelandart.org/api/artworks?cc0=1&has_image=1&indent=2&limit=1&skip=9786 are always failing with TimeoutError: ESP32 not responding The requests to adafruit test file, and coindesk API both suceed as does an https version of the coindesk URL so I know it's not generally an https issue. Looking at the cert for that cleveland art API it does show that it's from Let's Encrypt.
Also, considering all possible n-grams for scoring is very expensive. I've found a heuristic that trims the set under consideration.
even if unrelated to the recent Let's Encrypt cert stuff it does seem that CircuitPython 8.2.7 with nina-fw 1.7.5 on the PyPortal Titano does reliably always fail the request to that art API.
@lone axle my display split PR will break a library of yours I think because it removes displayio.Shape. https://github.com/adafruit/Adafruit_CircuitPython_DisplayIO_Layout/blob/main/adafruit_displayio_layout/layouts/grid_layout.py#L267
If it's Let's Encrypt with a particular cert chain, then it appears to be unsolvable on the AirLift (ESP32) NINA-FW
Could you give me a URL?
https://api.intra.io/api/v1/healthz, which has a Let's Encrypt cert chain, causes failure. It is Cloudflare based. The cert chain as reported by Firefox is: *.intra.io server cert <- Let'...
going for a walk be back in a bit.
I've come up with a new version of a board that I had working earlier (background: https://discord.com/channels/327254708534116352/1143997801274015774) The board is mostly the same, but attempting to use a W25Q32JVSSIQ memory chip rather than the W25Q128JVSIQ I was using before.
RPi shows up, allows me to flash it with firmware, then doesn't show up again unless I reconnect with the boot button depressed. So it SEEMS to be storing something. I changed the mpconfigboard.mk around as shown below and recompiled.
Is there something I am doing wrong here, and/or is there something off about how this particular memory module compiles. Or might something else not be correct?
What is interesting is that when I flash an older board with my new(?) firmware, it still says it has ~16MB of memory even though I put in the 32mbit ~ 4MB. Does this mean I'm not compiling it correctly?
USB_PID = 0x80F4
USB_PRODUCT = "Pico"
USB_MANUFACTURER = "Raspberry Pi"
CHIP_VARIANT = RP2040
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q32JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_PICODVI = 1
What is interesting is that when I flash an older board with my new(?) firmware, it still says it has ~16MB of memory even though I put in the 32mbit ~ 4MB. Does this mean I'm not compiling it correctly?
You specified the new chip, so that's what it thinks is on the board.
RPi shows up, allows me to flash it with firmware, then doesn't show up again unless I do the reset button. So it SEEMS to be storing something. I changed the mpconfigboard.mk around as shown below and recompiled.
if, when you press reset again, RPI-RP2 shows up, that means the flash was unsuccessful.
Can you do anything else with the board, such as loading an Arduino Blink UF2 that you built with Arduino, or something with pico-sdk? I would be inclined to think there might be a hw problem with the board if that is unsuccessful. Since the bootloader is in ROM on the RP2040, that will show up even when the flash chip is messed up in some way
*Meant boot button (original edited)
changing the flash device will also change the stage2 flash setup code run after the bootloader
So do you mean that I have done what I needed to here?
that should be what you need to do for it to work
any board that you flash with your W25Q32JVxQ version will think it has that flash chip on the board, even if it has something else
OK, so if I flash a board with what I think is the W25Q32JVxQ and it says ~16MB of memory in Mac/Finder, then is it fair to say I haven't actually compiled the UF2 correctly?
For that matter, if I put a UF2 that specifies 16MB on a Flash chip with 4MB of memory, would Finder even recognize it?
@slender iron is it using the generic ??
we are jsut going into a meeting, may not be that responsive
I thought the rp2040 read the flash size from the chip
that's what i meant, so maybe all I said is just wrong
the stage2 will try to optimize for the specific chip though
So I can spec a generic flash chip instead of Wxxx? How would I state that?
It'll do the most basic of multiple flash chips
most basic settings
I usually use a logic analyzer to debug flash chip issues
Hmm, what I mean is if I want the RP2040 to take care of deciding on the flash chip, what would I put here instead of what I have: @slender iron
USB_PID = 0x80F4
USB_PRODUCT = "Pico"
USB_MANUFACTURER = "Raspberry Pi"
CHIP_VARIANT = RP2040
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q32JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_PICODVI = 1
Do I need to change anything?
(If that is what you mean)
you can comma separate the two
When I first started testing today I was getting successful responses from that API. My Nina-fw was on a rather old version though 1.2.2 I'm not sure if I ever updated it on this device. If I start working backwards in nina-fw versions and find the most recent one that allows it to succeed would it make sense to add alertbox or something to the learn guide stating which firmware version it's known to work with?
I think frozen libraries are only updated on major and minor updates rather than bug fix updates and I think the fix for this came out after 8.2.0 was released.
CircuitPython version
Absolute Latest CircuitPython 9
Code/REPL
N/A
Behavior
The buttons are on the GPIO Expander and the code for the expander (inside dotclockframebuffer) seems to only allow sending init sequences, but not reading values.
Description
No response
Additional information
No response
there should be some library for this particular i2c chip that would be used after the LCD initialization. (maybe it doesn't exist yet?) We talked about adding I/O expander in the core (#8377) but didn't do it for some reasons described there.
py/obj.c: mp_warning(MP_WARN_CAT(BytesWarning), "Comparison between bytes and str");
apparently there is anmp_warningnow @slender iron
Ok, I'll see if I can get it working with Adafruit_CircuitPython_PCF8574 and if so, add an example and close this issue.
you could probably call it in the module's __init__ to warn on the import of an entirely deprecated module
Right now I'm mapping displayio.Display -> busdisplay.BusDisplay
It almost works. Pushing the button has no effect, but it does grab a value from the expander. I'll have to dive more into the specifics of why that may be when I have more than 10 minues.
just in the local dict
i will not be talking today had dental surgery, mouth full of gauze.
yipe, feel better soon @midnight ember
We just discussed this in our internal meeting. We decided to add a show() function implementation that raises an exception when used to specify how to fix the code.
oh i got some feel good meds, feeling really good 🙂
I believe they are still memory mapped, but the device name changed
was previously /dev/gpiomem and is now /dev/gpiomem4
This is CircuitPython 8.2.7, the latest bugfix revision of CircuitPython, and is a new stable release.
WARNING for nRF52 boards only: If your board has an nRF52 UF2 bootloader whose version is befo...
10.0 milestone I assume?
yup, did I say label?
I think you said "issue" but I don't remember now
I'm dropping off now so do read my status update 🙂
have a great vacation @onyx hinge
CGrovers automatic sensor calibration code is really great.
Been seeing a lot of Sonoma related issues in discord, figured that was going to be a big issue.
FoamyGuys work on the template engine and stuff is great. Almost like a local host of AdafruitIO which has a lot of advantages. Very exciting to see that progress.
@errant grail I think that everything in requirements.txt needs to be formatted as pypi library names. I'm not sure how circup translates those over to the format it needs for installing, but I think something similar would need to occur for the community bundle libraries in order to have them be counted as dependencies that get installed automatically.
Playground note on that project Liz? Sounds great.
i plan to 😺
Ah, that would make sense. Ironic that the second Community Bundle dependency in this case isn't on pypi.
With Pi 5 I imagine Melissa is going to be quite busy with Blinka. Good luck!
Yeah, I have a pi 5 and was working on adding Blinka support over the weekend
A lot of people use Display_Shapes is that a different library?
yeah that is different
displayio.Shape (the one that was removed) isn't used hardly anywhere. The one place mentioned so far was a place I chose to use it mostly because it wasn't used anywhere else 😅
I just found and used shape, I sure I can find another approach:)
vectorio should work for the most basic use-cases.
Thx 😊
+1 for vectorio
Thank you!
thanks for hosting Dan!
Thank you for hosting Dan. Lots of neat changes on the horizon.
thanks
Ha my last meeting ending and I joined just in time to hear "... join next week"
Trying to load as few libs as I can, I think I'm already displaying a bitmap so that should work
Can do a monitor capture instead of window capture to get around all of that.
Thanks for hosting Dan, have a good week everyone!
I use hitclips, free video editing program. It's for windows though.
I might go back to having discord open in a browser instance instead of the app. I believe my OBS still see's it that way without any issue.
I do that for my streams but not the meeting
Same, I used to do it for the meeting, but I started suspecting that having the browser instance and the app open was making the audio call get broken sometimes. If I can't figure out how to have it find the discord app I might switch over to the browser entirely for running the meeting.
It might be a good topic for a future "weeds section", it would be nice if there was something seperate from requirements.txt and pypi that circup could look for at least optionally. IIRC circup's usage of requirements.txt and pypi names was the thing behind our descision to start releasing all libraries on pypi. Before there was a time when libraries that aren't meant to work with Blinka weren't released on pypi. Maybe there could be an optional circup-requirements.txt or something that can hold the list of requirements that can be found specifically with circup without necessarily being released on pypi.
Historically, Community Bundle libraries weren't and currently aren't required to simultaneously exist on pypi -- and none of mine are there. In my case I'm probably being recalcitrant about having to open up another account just for publishing Community Bundle libraries.
agree'd I think we should try to find a solution that allows it to remain optional for community bundle. Whatever that solution is though I think it will need to be seperate from requirements.txt because we don't want to break usage of pip install -r requirements.txt so we can't list things in there that can't be found on pypi.
maybe something in pyproject.toml?
I thought that file was also associated with pypi, though I'm not that familiar with it beyond having seen it in our libraries and knowing a few of the things that have popped up needing to be changed in there.
I don't think the webrepl is going to work on this board, because it doesn't have native wifi in CircuitPython itself. The wifi is handled by the ESP32SPI library. You would need to use a board whose primary processor is Espressif or use the Pico W.
Nevertheless the original question still stands.
it does look like our cookie-cutter creates it even if the user selects no for pypi so we could use it as a place to keep the circup-requirements.
I think its meant to be a generic metadata file
neat. I'm guessing it would be best to use some specific namespace for a block within the toml like [circup.requirements] or something to try to ensure that this value won't be recognized by any tool except circup. Does that sound like a reasonable way to add it? Id be willing to tinker with circup some to try to get it to read an alternative list of requirements sometime.
https://peps.python.org/pep-0621/ that's my understanding of it
Should we do an 8.3 with updated frozen? Could be 8.2.8 too.
Is there any place to find older releases of nina-fw than the ones listed on this page? https://github.com/adafruit/nina-fw/releases the earliest one here is 1.4.0 and even it has the same "ESP32 timed out" issue with these ECDSA style certs. My titano had 1.2.2 on it before I upgraded to day and I was getting successfull responses with that one.
I was getting successfull responses with that one.
Recently, or in the past? There is no regression that I know of that would cause
recently, I got successful responses today before upgrading the nina-fw.
I was at first unable to replicate the issue the user reporeted but eventually realized my nina-fw was a different version and updated it, now I do always see that timed out error.
I don't think the webrepl is going to work on this board, because it doesn't have native wifi in CircuitPython itself. The wifi is handled by the ESP32SPI library. You would need to use a board whose primary processor is Espressif or use the Pico W.
Nevertheless the original question still stands.
I was afraid that might be the case - unfortunately, this board predates the newer Matrix Portal S3, with native wifi. Still, if it's possible to get this working with SPI-connected wif...
You just can't use the web workflow, but you could use secrets.py or settings.toml, whichever works.
you can look at the 1.2.2 tag and see the sources. Building it is a bit of a pain. I am looking for a download. I don't think it's a root cert issue, but it might be an sdkconfig settings issue. I tried the ECDSA cert chain with the latest Arduino NINA-FW and it also didn't work, so whatever stopped working was a long time ago.
maybe you could try the arduino nina-fw 1.2.1 or 1.2.2, but I'm not sure that's going to work for other reasons. I don't remember why we forked it originally.
@lone axle ^^
You just can't use the web workflow, but you could use secrets.py or settings.toml, whichever works.
It looks like settings.toml's variables are added to the env, so I guess that works - but it's pointless if secrets.py still has to exist and contain wifi credentials.
Thank you ill poke around and try a few more things. Perhaps weird question, but is it possible to pull a .bin off of a co-processor, I have a few others that I think it's likely I never upgraded, maybe if I could grab it from one of them I could load it back to the titano esp32
btw I have tried to insert a clip into the meeting video with both pitivi and flowblade, unsuccessfully
yes, you should be able to load the passthrough uf2 and use esptool.py to save the firmware
i am going to stop wasting time on these video editors for now, since the video is not that important. I am missing about 11:30 of screenshots in the beginner
I can insert a static image as a clip, but in pitivi, it did not render for long enough, and in flowblade, it did not render the audio. I can fix this but it seems like a waste of time.
openshot was worse
Sounds good to me, the video component for one meeting isn't worth too much extra time imo.
Strangely there are no 1.2.2 tags on either the adafruit or arduino repositories. Adafruit goes from 1.1.0 to 1.4.0 and arduino goes from 1.1.0 to 1.3.0. I am certain that my device was originally reporting Firmware vers. bytearray(b'1.2.2\x00') I still have the history in my terminal from this morning somehow.
looks like it was not tagged, but there are version changes: https://github.com/adafruit/nina-fw/pull/1
@tannewt I made a change in weblate to fix pino again, but it hasn't showed up yet.
Nice, thank you! I'm going to work on something different for a bit. After a break from this i'll come back to it and try to get it building locally. I don't necessarily think pointing folks toward installing the very old ones is the best option either though.
It might be good to add a warning in learn to projects that are known to be affected by it.
In time I imagine esp32-s2 and newer will eventually find their way into more of the form factors and the projects could go back to working on the newer hardware. But on the original hardware it's looking very tricky to get it working.
i will do a diff of that old version and the current one and see whether there's something obvious. Not at the moment, but soon.
Do you know if the ESP board restarted?
You probably want this to be qio. This will run the flash in dual mode.
Please try qio for quad io to the flash. In dio was only used for flashing. Now it controls the speed it actually executes at. qio flashing gets automatically downgraded to dio now.
Yup, I was bummed too. I started bleio implementation thinking it'd be straight forward and it wasn't. Hopefully we can circle back to it after 9.0 is out.
@eightycc What do you think? How does this interact with your changes?
Looks good to me! I suspect eightycc will integrate their changes to speed up level 5.
Very curious to see how much faster builds are since this step is run for every board and translation combination.
@WoutStandaert Please try 8.2.7 and see if the issue is fixed. Thanks!
What version of CircuitPython was this with? Please try "Absolute Newest" to see if it is fixed there. Thanks!
i'm not sure. i can try a newer build and see if the issue persists.
Should we do an 8.3 with updated frozen? Could be 8.2.8 too.
Maybe 8.2.8 is OK, because there aren't any API updates to core modules.
What does this fix? Just want to know what to expect. Thanks.
The changes stem from here: https://github.com/adafruit/adabot/pull/359
From the release notes in the comment that dependabot left, It looks the bump in version for dependency GitPython to 3.1.37 provides a fix for security for a published vulnerability: https://github.com/advisories/GHSA-cwvm-v4w8-q58c as well as potentially some other changes.
You just can't use the web workflow, but you could use secrets.py or settings.toml, whichever works.
Yeah, that's the main thing updating the libs would fix.
I've taken to using settings.toml AND secrets.py in such cases, where the latter is like:
import os
class Secrets:
def __getitem__(self,name):
return os.getenv(name)
def get(self, name, fallback=None):
return os.getenv(name) or fallback
secrets = Secrets()
Thank you for noticing and fixing!
Here is the notes document for next Monday’s CircuitPython Weekly meeting. It is at the normal time of 11am Pacific / 2pm Eastern here on Discord. Everyone is encouraged to attend! Please add your hug reports and status updates even if you’ll be attending the meeting - it’s super helpful! If you are unable to attend but would still like to include updates, feel free to include them in the notes and we’ll read them off during the meeting. Hope to see you there! <@&356864093652516868>
https://docs.google.com/document/d/1Pz4-FdEH1Du5bWghjJ7dUheGoq61ijuFpowd5qFlIFI/edit?usp=sharing
This merges changes from MicroPython v1.21.0. Thanks to @tannewt for a bunch of intermediate fixes.
There are some remaining things that will need to be fixed or looked at. I will open issues for those.
Whenever I try switching it to an input and I get the following error:
Traceback (most recent call last):
File "code.py", line 87, in <module>
File "/lib/adafruit_pcf8574.py", line 142, in switch_to_input
File "/lib/adafruit_pcf8574.py", line 170, in direction
File "/lib/adafruit_pcf8574.py", line 87, in write_pin
File "/lib/adafruit_pcf8574.py", line 74, in write_gpio
OSError: [Errno 19] No such device
I also tried using bitbangio, but received this error:
T...
The v1.21 merge (#8508) includes some incomplete changes for the UART clock divisor on mimxrt10xx.
In ports/mimxrt10xx/peripherals/mimxrt10xx/MIMXRT10*/clocks.c, the clock divisor was changed from 0 to 1:
CLOCK_SetDiv(kCLOCK_UartDiv, 1); // WAS 0
However, this change appears to be incomplete; these sorts of lines will also need to change:
#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL
See if https://github.com/micropython/micropython/pull/7491 for shared/runtime/stdout_helpers.c is worth
incorporating to reduce skew from MicroPython.
Can we define const compressed_string_t * as mp_rom_error_text_t to reduce code skew from MicroPython, so that functions take mp_rom_error_text_t as an argument? @jepler has remarked on this, and @dhalbert was reminded of that during #8508.
We added gc_deinit() and gc_never_free(), but I think they need work for split heap use.
Tentatively assigned to @tannewt as part of the split heap work.
Looks good to me, too. My changes will fit at level 5.
What is our most flash constrained port? Thinking it's atmel-samd.
Samd21 yeah. And it’s not just flash constrained but also severely RAM constrained too
trinket m0, gemma m0, feather m0 basic: 256kB flash, no external flash chip ("express"), so 192kB for firmware + 64kB for CIRCUITPY
no longints, other missing features
feather m0 basic has more pins(and so pin names) than trinket or gemma so it's even tighter
CircuitPython version
Adafruit CircuitPython 9.0.0-alpha.1-82-gec678a54ce on 2023-10-23; ESP32-S2-DevKitC-1-N4R2 with ESP32S2
Code/REPL
No code, compilation issue
Behavior
A few weeks ago I was trying to perform a debug build on CircuitPython and I ran into an issue with the placement of the #endif on line 371 of web_workflow.c. I moved the #endif down two lines which I think resolved that issue and figured I get back to filing an issue/pr once I...
Speed up maketranslationdata.py by reducing work done in optimization loop.
| Port | Optimization Setting | Build Time -j16 | Bytes Saved |
|---|---|---|---|
| RP2 Pico W | 1 | 16.3 sec | 8336 |
| 9 (before this pull) | 31.6 sec | 12873 | |
| 9 (with this pull) | 17.8 sec | 13093 | |
| Atmel-SAMD Pyruler | 9 (before this pull) | 12.87 sec | 4494 |
| 9 (with this pull) | 12.83 | 4476 |
Speed improves, slight variation in compression (improves on RP2, very slightly worse on Atmel-SAMD). Speed on RP2 optimizat...
Hi @tannewt, thank you!
I had to erase the flash memory via the factory reset. Just dragging the new 8.2.7 UF2 file onto the matrixBoot drive didn't work.
But now that I've reflashed the whole thing, I was able to save the code file like 10 times in a row without problems.
Then, I still made it crash by connecting it to a UART source while saving. So the RX pin might ha...
I made it back to nina-fw 1.2.2 on my titano but I am stumped because now the requests to the art API are failing the same way as the newer nina-fw's did (ESP32 Timeout). I still have the logs from the successful requests yesterday morning and confirmed in them that my device was reporting 1.2.2 during the time it was succeeding.
I found that there may have been multiple versions technically that were all 1.2.2. This PR that you pointed me to: https://github.com/adafruit/nina-fw/pull/1 actually had accidentally included a bin file in the repo. I tested with that bin file and it does report 1.2.2 however it was failing the requests just as all the newer ones were.
The next PR after that removes the bin file from the repo. The following one https://github.com/adafruit/nina-fw/pull/3 adds wpa2 enterprise support but does not increase the version number. I think I was able to build successfully from the commit where #3 was merged and it does also report version 1.2.2 but does also fail the requests to those URLs
The next PR after that one is when the version is changed to 1.3.0, I haven't tried that one yet. I also haven't yet tried building from the commit where #1 was merged, perhaps the .bin file that was checked in was different somehow. in https://github.com/adafruit/nina-fw/pull/2 Jerry mentions that the accidentally added bin file was "only built by using make firmware" implying perhaps that the "real" builds are made some different way?
One thing I noticed when I built from the commit merging #3 was that after running make firmware there was a long list of prompts that wanted me to input answers for various bits of configuration. I tried to stick to the defaults, but I didnot understand much of anything that was asked 😅. Do you know if there might be specific choices needed for use with circuitpython or anything like that?
It'll be much later tonight or tomorrow before I can get back to it again. I still intend to round up my other airlift style devices to see if I can luck out on finding another one that succeeds the requests to those URLs.
I wonder if the museum might have multiple servers, with different cert chains
That could be a possibility but the timing of consistent failures for me starting after I changed firmware and having had no other successes since then would be terribly unlucky.
I will see if I have an old one with 1.2.2, but I think I upgraded them all
Unfortunately I was also not in a completely known state on my device at the time. I had been using it before this for testing the changes to ESP32SPI library. I am unsure whether at the time of my successes I was using the frozen libraries, or if I had them overwritten with ones I put in. And if they were overwritten I have no idea what specific versions I would have had at the time.
I have a PyPortal Titano that identifies as 1.2.2 !
This just looks like a bug. Feel free to PR a change to move it.
Why aren't SAMD build times improved at all?
I assume it does. I may need to get you setup with separate UART debug logging for more details.
Sounds like the issue is still occurring. We'll need to look into it once we've transitioned to bug fixing on 9.0.0.
@tannewt SAMD has a smaller pool of strings to compress, so it was already under the size where performance fell off a cliff.
@slender iron Want to discuss 8514 or does the explanation I added make sense?
All good. Will merge now. Thanks!
I've taken to using settings.toml AND secrets.py in such cases, where the latter is like:
import os class Secrets: def __getitem__(self,name): return os.getenv(name) def get(self, name, fallback=None): return os.getenv(name) or fallback secrets = Secrets()
That's not a bad idea. Thanks @rimwolf-redux!
I have been away for a bit of time and lost track of recent changes, testing with today's artifacts, the issue has gotten a whole lot worse, now failing repeatedly, many times in a row..
I don't even think I can make a decent workaround for how badly it breaks now.
I will have to investigate in more detail.
any feedback on ```
Adafruit CircuitPython 9.0.0-alpha.1-99-gecaf9e6b14-dirty on 2023-10-24; Adafruit Feather ESP32-S3 TFT with ESP32S3
import board
board.DISPLAY.show(None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: .show(x) removed. Use .root_group = x
any rewording?
It was a joint effort! @tannewt and @jepler thanks for all the fixes!
@tulip sleet I think the _transmit fix will be blocked by the displayio split PR
because I can use some test stuff there to verify that _transmit works
you mean wait on merging, or merge split first?
I have a fix without a new test
could PR that separately and add a test with the displayio PR
i am starting to review the split pr
👍
Fixes #8499
Adafruit CircuitPython 9.0.0-alpha.1-99-gecaf9e6b14-dirty on 2023-10-24; Adafruit Feather ESP32-S3 TFT with ESP32S3
>>> import board
>>> board.DISPLAY.show(None)
Traceback (most recent call last):
File "", line 1, in
AttributeError: .show(x) removed. Use .root_group = x
>>>
@slender iron MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS is set if there are class properties?? (They didn't document the flag.)
okee, i didn't add it anywhere, glad you got those. no examples of using that flag in MPy
they don't use it on native class afaict
since they don't use properties in their native apis
@tulip sleet I've got the _transfer fix ready too
Thanks for fixing all the MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS!
I just have some CIRCUITPY-CHANGE changes and a few doc additions.
// CIRCUITPY-CHANGE
#if MICROPY_PY_BUILTINS_PROPERTY
// Validate that the type has the correct flag for properties. It is manually
// managed for native types. If the flag is missing, then act like the
// attribute doesn't exist.
if (mp_obj_is_type(elem->value, &mp_type_property) && (type->flags & MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS) == 0) {
dest[1] = MP_OBJ_NULL;
retur...
// CIRCUITPY-CHANGE: test native base classes.
extern const mp_obj_type_t native_base_class_type;
mp_store_global(MP_QSTR_NativeBaseClass, MP_OBJ_FROM_PTR(&native_base_class_type));
// CIRCUITPY-CHANGE: documentation
// When defining native classes that use properties, you *must* set the
// MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS flag. Otherwise, the property will be
// ignored.
Also MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS is not documented in obj.h with the other flags. Could you add a comment line there (with CIRCUITPY-CHANGE?). Thanks.
// CIRCUITPY-CHANGE: CircuitPython uses properties on native classes, so we always return them.
This wording looks good to me.
Updated! Sorry for the rebase.
@slender iron
Also MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS is not documented in obj.h with the other flags. Could you add a comment line there (with CIRCUITPY-CHANGE?). Thanks.
could you add one comment line to obj.h to document that flag? Not vital.
also is the .show fix going to be outdated by this merge? Maybe you said that already above.
Never mind, I will add a comment and approve and merge.
Never mind even more. The set of comments there needs a lot more work.
Thanks @tulip sleet I’ll do it tomorrow. Had to run off to get the kiddo
After some poking, I was able to reproduce the compile errors I was getting when trying to build a DEBUG image. It turns out the problem shows up with you use the CIRCUITPY_FULL_BUILD=0 option. The issues I was seeing could have been resolved by turning on select modules (CIRCUITPY_DISPLAYIO=1 for example) and perhaps that's the expected route to take but I figured I'd put the changes I made into a PR just in case. I'm not sure these changes have been made in the most appropriate way or place...
.. and also use MP_ERROR_TEXT instead of translate in py/
this hopefully gets us a bit closer to upstream.
Closes #8511
maybe "obsolete" instead of "removed"?
I'll look at the build errors in the next few days
I downloaded the "latest" CPY file:
2023-10-25T02:50:15.000Z 2.9 MB [adafruit-circuitpython-unexpectedmaker_pros3-en_US-20231025-702b4a5.uf2](https://adafruit-circuit-python.s3.amazonaws.com/bin/unexpectedmaker_pros3/en_US/adafruit-circuitpython-unexpectedmaker_pros3-en_US-20231025-702b4a5.uf2)
about 9 hours after Dan closed this issue:
Contents boot_out.txt:
Adafruit CircuitPython 9.0.0-alpha.1-86-g702b4a58f8 on 2023-10-25; ProS3 with ESP32S3
Still get:
...
Are the errors are due to the substitution not removing the *? mp_rom_error_text_t is a pointer in itself, so I thought the substitution would be
compressed_string_t * -> mp_rom_error_text_t
with the asterisk *.
it is now non-functional, so it's not just obsolete, it doesn't work. The error message is an attempt to reduce support questions when it doesn't work.
right, but then you get questions of why it is removed and if there is a way to put it back and so on, while I think that at least in the computer jargon the word "obsolete" conveys the reason and the fact that it won't be coming back
I was thinking of "obsolete" as "deprecated" (still working but going away)
The espressif implementation sets the is_read flag always as true, which prevents the user from reading data as a target.
Closing due to inactivity, but we can reopen if this is still an issue for you.
Closing due to inactivity. Please reopen if this is still an issue for you.
Closing due to inactivity. Please reopen if this is still an issue for you.
Closing due to inactivity. Please reopen if this is still an issue for you.
Closing due to inactivity. Please reopen if this is still an issue for you.
Closing due to inactivity. Please reopen if this is still an issue for you.
Closing because I think this is solved.
@microdev1 Could you comment on this? Thanks.
@calcut did you manage to get it working on FeatherS2?
I'm trying your code on FeatherS3 and first call to dualbank.flash fails, I suspect due to external flash
>>> dualbank.flash(response.content, offset=position)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: storage is extended
Quick aside: you can get the length dynamically like this
# length = 1354336 #determined manually just now.
head = requests.head...
Why are you trying to make FULL_BUILD=0 work?
I'd rather have these settings dependencies raise an error when missing. So if you enable CAMERA without displayio it'll error for example.
I thought I had fixed it but it looks like my test was wrong. Will look more today. Thanks for testing!
I think weblate will update this automatically. The other messages in these files haven't been updated either.
Hey, still working on this idea: #circuitpython-dev message
I think it's best if the Minecraft scripting functionality is implemented in Blinka. However, in order to communicate between Blinka and Minecraft, we'd probably need another library (websockets and grpc are my top two choices) as a dependency of Blinka. Would the Blinka folks be opposed to adding to the package requirements? Is there a better solution? Thanks!
websockets are really complex for a microcontroller
It won't be running on a microcontroller. It'll be blinka running on a PC
then why do you need to add it to Blinka?
im not quite sure what's the API/functionality Blinka adds, but as i already said back in the day, i feel like it wouldn't add any value
The hope is that you'll be able to use NeoPixels, pin io, etc in Minecraft via blinka
just add some external program which takes python code (or perhaps some GUI in the game within the mod) + then interacts with the game
or a library outside of blinka for talking to minecraft
note: im guessing your goal is that some python code causes signals (redstone) to appear on the game, not like a lever activating a LED on your MCU and whatnot
That exists, but Blinka's api is very user friendly, and I think there's potential for its existing APIs to have virtual counterparts in Minecraft, such as temp sensors, LEDs, basic pin io, etc
and afaik blinka adds support for hardware-specific things (eg I2C) to be run somewhere other than a MCU/dev-board...
which would probably be best(and easier) to handle on the mod itself .... ie Java, which doesnt quite fit Blinka (?)
you probably won't be using stuff like SPI or I2C in the game, to begin with, so may not even need a bunch of those things being provided by blinka
I'm not sure I understand what you mean. Here's an example of how it would work, just so we're all on the same page:
import board
import digitalio
import time
pin = digitalio.DigitalInOut(board.D0)
pin.direction = digitalio.Direction.OUTPUT
while True:
pin.value = 1
time.sleep(0.5)
pin.value = 0
time.sleep(0.5)
In-game, that would be a redstone lamp connected to a modded-in block, which would blink every half second.
Again, this might not be a plausible/useful idea, but I think it is because it provides a way to get used to CircuitPython syntax in a familiar way (minecraft) without needing actual hardware.
I think this could be great for young kids who already enjoy Minecraft and want to learn how to code
I2C could maybe be implemented. An example of this is an in-game temperature sensor block, and if you put it close to lava, the value goes up.
May be worth looking into Jython or whatever it was named (Py interpreter written in Java), instead of using CPy/CircuitPy and having to come up with a way of communicating that code (C) with the game (Java)
I think I would just write a Minecraft mod in Java, and it would use gRPC or Websockets to talk to Blinka. That goes back to my original question if it would be OK to add a dependency. The user wouldn't need to interact with Java code.
So then your java mod would be just a RPC used to place/destroy blocks, listening to an external program (written in Py? C?) which sends those events?
@digital ibex I don't think you need to use blinka. instead you could create your own version of digitalio that has a DigitalInOut that does the calls into minecraft
How/where would the the user input their code? Custom block and mod talks to such program, which then causes some RPCs to trigger logic in the game?
Switching windows back and forth between game and some editor?
Also, all of this would mean the mod relies on another program to be running, which doesnt sound too good for me
I'd rather make Java handle everything without an external dependency
My concern is that most of the work is already done with Blinka, and adding a backend that interacts with Minecraft is somewhat simple. I also want this to have support for complex I/O devices, such as NeoPixels, simple sensors, etc. I'd really hate to make what would essentially be a copy of Blinka with hardware functionality replaced with Minecraft functionality. Most of the code is already there.
The user would just use a code editor (Mu, VSCode) to write code that controls Minecraft.
I dont like the interface, i would aim for all to happen in-game
The problem with that is it would be harder to transition from an in-game editor to a real hardware device, when the purpose of this project has been served and it's been used to teach CircuitPython to the user. Also, writing an entire code editor in Minecraft from scratch would be pretty tough. I can imagine the process I have in mind being a little clunky, but I think it's worth not having to use an in-game code editor with limited functionality.
I meant just a text input where mostly you can:
- See the code running
- Paste existing code to start running it
I wouldnt plan on making a full editor lol 😬
My question was more on how to feed the code to the game, not on how to edit it.
Your approach would be something like minecraft_py code.py as im understanding it. While i would opt for having a (basic) method of writing/reading code within the game
why are you suggesting micha do a different project? it isn't helpful
Im not saying "do this", im giving some ideas/opinions
@digital ibex are you thinking the user code would run on a CP device or from with python on the desktop?
Desktop python
and what does neopixel support mean in a minecraft context?
pixels.fill((255, 0, 0)) would make a red block appear in-game
There's some tricks you can use to get blocks of any RGB color
I think you really do just want to reimplement things then
make a neopixel class that looks like it from the outside but does custom minecraft stuff under the hood
So this would be completely outside of Blinka, but with the exact same API syntax? I could see that
regardless of what the "interface" ends up being, there has to be some basic building blocks like reading/writing digital/analog pins(redstone lines). i would start with that code as soon as posible as it may lead to some meaningful insight of what limitations you will face along the way
then, however that code is called shouldn't be a problem, that compatibility layer is what will mostly cause headaches
right. that's the beauty of python. code that uses DigitalInOut shouldn't care about the implementation
Ok, thanks! I'll try that.
This allows PixelBuf to call transmit after setting a value.
Fixes #8488
Looks like I only fixed calling .show() directly. The pixel assignment also calls show under the hood when auto_write is enabled. It wasn't fixed by the first change. The new PR fixes it too.
@tulip sleet I think ☝️ is the last thing for an alpha
Is this leftover debugging prints?
That's what I was thinking. Thanks!
I think I found some leftover debugging prints in the code. I marked that in the review.
No, the prints in this class are deliberate. They ensure the test code actually calls it. Otherwise you risk the subclass storing and retrieving the right value without the native class.
Wondering if there's a discount code for devs purchasing from Adafruit?
I need a couple of nrf and espressif boards for Bluetooth LE comparision testing
oops. failure to RTMF.
for others trying this,
Subsumed by #3898, so I'll close in favor of that issue.
One extra complexity is that you'll somehow need to associate an x,y,z location in the game with your pin You might end up needing some property or init argument for that which differs from the Blinka / CircuitPython API since that concept of location doesn't exist in the same way for the physical pin in the real world.
Temperature sensor in the game might be hard, I don't know if the game tracks a heat value beyond the most basic "touch lava or fire -> take damage" . The game does track light level I believe, and there is already a light sensor in the game. I think it'd be fairly straight forward to rig up similar python code that treats it as an AnologIn that is connected to a photoresistor.
For DigitalInOut you can get away without needing a custom block created in your mod I think as well if you want to go that route. You can have it just spawn or not spawn a redstone torch at the specificed location based on the value of the pin.
I can't get copying files to a Pico CIRCUITPY from a Mac (M1 Macbook Pro running Sonoma) to reliably work with all/any of the workarounds i.e. I've added to boot.py
import supervisor
supervisor.runtime.autoreload = False
I've done sync in Terminal.
From a newly Flashed-to-CIRCUITPY drive on my Pico, I can copy over the small .py files (boot.py, code.py) quite reliably, but it almost always fails with the (small) MP3s including the ones from the Adafruit sample project (slow.m...
I'm looking into the build failure now
qrio passed CI before 1.21 was merged and wasn't run again
I have had good luck with this shell script that remounts the USB drive on the MatrixPort S3.
#!/bin/csh
This works around bug where, by default, macOS 14.0 writes part of a file
immediately, and then doesn't update the directory for 20-60 seconds, causing
the file system to be corrupted.
set disky=df | grep CIRCUITPY | cut -d" " -f1
sudo umount /Volumes/CIRCUITPY
sudo mkdir /Volumes/CIRCUITPY
sleep 2
sudo mount -v -o noasync -t msdos $disky /Volumes/CIRCUITPY
The FULL_BUILD=0 option was the first thing I tried when the DEBUG=1 build didn't fit. I did get a build to work by turning off/on individual features which is fine, but I figured if there was a CIRCUITPY_FULL_BUILD flag it should work.
I agree that raising an error message rather than simply ignoring the option would be a better option, I can try and rework this with error messages if you like, or if you think the FULL_BUILD option is not really needed I can see that point as well.
CircuitPython version
Adafruit CircuitPython 8.2.4 on 2023-08-22; Adafruit Feather ESP32-S2 TFT with ESP32S2
Code/REPL
>>> import re
>>> re.search(r">\S*?test>> re.search(r">\s*? >> re.search(r">[\s\S]*? test >> re.compile(">.*? test <") is None
False
Behavior
When searching for \S aka any non-whitespace character, re module finds a match.
Similarly, when searching for \s aka any whitespace character, re module also finds a match.
...
At first glance, this proposal seems reasonable.
After a moment of reflection (in my situation, as a noob with circuitpython, a beginner in uC and a programmer with many years of experience), it begins to be: a lot of work that is not necessarily necessary for anyone.
Each board has a list of built-in modules that are available. Each module and library has its own very good documentation. It took me about 2 days to find documentation for the modules... And this should be the link.
Could you test this on a 9.0.0 build to see if the updates from MicroPython fixed it? Thanks.
Could you test this on a 9.0.0 build to see if the updates from MicroPython fixed it? Thanks.
Sure thing. I will test and come back with results.
Well, turns out it does in fact seem to fix the issue. I probably should have tested it myself before posting. Sorry for that.
No problem - this is good. We'll want to decide whether to backport the fix to 8.2.x or simply leave your workaround in until 8.x.x has been supplanted by 9.x.x.
@slender iron the latest rtd builds have been failing for several days, e.g. https://readthedocs.org/projects/circuitpython/builds/22353971/
i am working on 9.0.0-alpha.2 release notes
Ari is home today so I’ll be off and on
@slender iron I finished the 9.0.0-alpha.2 release notes. I think the RTD build should be fixed, but other than that, maybe ready to go. Did you look at RTD or should I do that?
I haven’t had a chance yet. Going to the pharmacy. Will have time once he’s down for nap
Error
Build output directory for format "pdf" contains multiple files and it is not currently supported. Please, remove all the files but the "pdf" you want to upload.
Maybe we should just drop the Support Matrix PDF
I'm fine if you want to fix FULL_BUILD by having it error. I usually do different modules so I know which ones I've disabled. (ulab is usually first.)
ah bummer! ya, I'd drop the support matrix
want me to do it? ari just went down
sure, you are familiar with the CI steps you just changed
anything else you want to get in for alpha.2?
not really. the warning stuff can go in the next release
the docs build isn't really needed for the release either
(though I know the change to make)
I'd like to have to doc build work so people can see the displayio changes; I looked myself to write up the release notes, and that's when I noticed it wasn't building
but otherwise I think we have a good snapshot
Thanks Dan for fixing that. I must have forgotten to set up pre-commit
PR to disable the second pdf is in the queue
Failed builds are a red herring. They are the CI runs for the commit push to the branch that I cancelled. The PR triggered ones worked just fine.
Thanks for the quick fix!
This looks great! Thanks for doing this!
I will merge this after the release of 9.0.0-alpha.2, since it is not a functionality change.
I2SOut is implemented but PDMIn isn't yet.
That does seem to fix it. After running your script, I can now copy over files on Mac Sonoma reliably just like the Pi400. Thank you! 🤩
Automated website update for release 9.0.0-alpha.2 by Blinka.
New boards:
- adafruit_esp32s3_camera
- adafruit_qualia_s3_rgb666
- es3ink
- espressif_esp32c6_devkitc_1_n8
- espressif_esp32c6_devkitm_1_n4
- espressif_esp32h2_devkitm_1_n4
- espressif_esp32s3_devkitc_1_n8r8_hacktablet
- espressif_esp32s3_lcd_ev
- luatos_core_esp32c3_ch343
- m5stack_atoms3
- m5stack_atoms3u
- m5stack_m5paper
- m5stack_stick_c_plus
- makerfabs_tft7
- pimoroni_pico_dv_base_w
- supermini_nrf52840
- ugame22
- wavesha...
CircuitPython version
Adafruit CircuitPython 8.2.7 on 2023-10-19; VCC-GND YD-ESP32-S3 (N16R8) with ESP32S3
Code/REPL
from busio import I2C, UART
import board
i2c = I2C(board.GPIO41, board.GPIO42)
uart = UART(board.GPIO1, board.GPIO2, baudrate=9600)
Behavior
Board disconnects from the computer, power cycles, then flashes triple yellow lights on loop.
On plugging it in and connecting via serial, this is the readout
You are in safe mode be...
boards/adafruit_esp32s3_camera/board.c:90:9: error: passing argument 19 of 'common_hal_busdisplay_busdisplay_construct' makes pointer from integer without a cast [-Werror=int-conversion]
90 | 45, // backlight pin
| ^~
| |
| int
In file included from ../../shared-module/displayio/__init__.h:28,
from boards/adafruit_esp32s3_camera/board.c:33:
../../shared-bindings/busdisplay/BusDisplay.h:44:78: note: expected 'co...
Hey @tannewt - Sorry for the delay in replying, been busy making hardware all week. Sure, I'll change this and get the PR updated.
Thanks - this is a nice skew reduction!
Fixed by #8281, which removed long-lived allocations, and so removed objects moving around after creation.
Rendered moot by #8281, which removed long-lived allocations, and so removed objects moving around after creation.
Fixed by https://github.com/adafruit/circuitpython/pull/8281, which removed long-lived allocations, and so removed objects moving around after creation.
Fixed by https://github.com/adafruit/circuitpython/pull/8281, which removed long-lived allocations, and so removed objects moving around after creation.
Rendered moot by #8281, which removed long-lived allocations.
@slender iron https://github.com/adafruit/circuitpython/pull/8519 was green before merging, but had a bunch of errors in the merge build. I'll take a look.
I can look too. Just got to my desk
ok sure, go ahead
@tulip sleet my guess is that the PR was green based on a merge before my warnings PR went in
this is what the build queue is supposed to solve
yah, I think so, so it should be easy to fix
does turning on the build queue change our workflow?
I don't think so: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue
looks a bit complicated to setup
want me to fix the bundles thing (see email), or do you want to do it
I can look
I might be able to help with the merge queue issues. My company's tools specifically help with high PR velocity repos. I got permission to use it for free on open source projects.
what tool is it? I was thinking we'd enable the github merge queue to start
Yes, that's a good start.
I mainly work on the Check tools, which manage all of the linters and code prettiers, but I just learned about Merge from another engineer this week, and it sounds exactly like what would help your PR collisions.
Lgtm, though I'm surprised there weren't callsites to change. Candidate to upstream?
Lgtm, though I'm surprised there weren't callsites to change. Candidate to upstream?
Yup. MP has their version too but its more limited. It only prints string warnings.
The call sites all use translate() and it's return type was updated.
The problem seems unrelated to the kind of FAT filesystem (FAT12, FAT16, etc.). Maybe of some interest, the mount flags differ:
For both a CIRCUITPY FAT12 drive and a regular several-GB USB stick, the mount flags are:
Ventura: msdos, local, nodev, nosuid, noowners
Sonoma: msdos, local, nodev, nosuid, noowners, noatime
build tools PR is green
merged - i changed to 8.2.0 instead of 8.0.0 to get the paths right
@dhalbert Manually remounting clears the nodev, nosuid, and noatime flags. Manually mounting with or without the noasync option works around the problem. Likewise, manually mounting with various permutations of these four flags always works around the problem, including the case where no mount flags are provided. Looks like the mount flags are a red herring, it's some other difference between an automatic vs. a manual mount.
Testing on Sonoma 14.1.
@mortal kernel - ugh, this is sort of worse, since now there's something hidden going on
Do I know it. The manual remount works around the problem, so I think that's the best we can do until Apple finds and fixes the underlying problem. We just don't know why it works around it. File your bug reports early and often!
Any luck with 14.2 beta?
Apologies if this has been covered already; I skimmed and it looks like most of the focus has been on async and auto-reload.
The problem also happens with the UF2 boot loader drive - for instance, trying to update CircuitPython firmware by dragging its .uf2 file to the boot loader drive under Sonoma fails.
Given that, it also unsurprisingly happens with non-CircuitPython devices - I couldn't install Bluetooth sniffer firmware on a Nordic nRF dongle on a Sonoma Mac. I was able to using L...
@romkey note that @eightycc's testing seems to show that any manual remount with any flags seems to clear the problem. Your last two tests probably included a manual remount, so maybe that explains what you are seeing.
I have not installed 14.2 beta yet, but @romkey said they were going to.
@romkey You should be able to work around any of the FAT filesystem write problems by unmounting, making a mount point, and then re-mounting the device. No need to specify mount option flags. Give it a try and let me know if you run into a case where that doesn't work.
CircuitPython version
Adafruit CircuitPython 9.0.0-alpha.2 on 2023-10-27; Raspberry Pi Pico with rp2040
Code/REPL
>>> import adafruit_pcf8575
Traceback (most recent call last):
File "", line 1, in
ImportError: no module named 'adafruit_pcf8575'
>>> import sys
>>> sys.path
['', '/', '/lib']
>>> open('/lib/adafruit_pcf8575.mpy')
Traceback (most recent call last):
File "", line 1, in
OSError: [Errno 2] No such file/directory: /lib/adafruit_...
The first public beta of macOS 14.2 still has the issue.
@dhalbert Good point! I just re-ran the test:
- prepped a clean 64MB filesystem on a USB flash drive (using
ddfrom a filesystem image prepared under Linux) - unplugged the drive
- rebooted the Mac (just to be absolutely sure)
- plugged the drive back in and let macOS mount it
- confirmed it was empty
- copied a batch of .py files that cause the error on a 4MB filesystem
- successful copy, no errors
/dev/disk6 on /Volumes/NO NAME (msdos, local, nodev, nosuid, noowners, noat...
CircuitPython version
Adafruit CircuitPython 8.2.7 on 2023-10-19; Raspberry Pi Pico with rp2040
Code/REPL
import busio
i2c = busio.I2C(board.GP21, board.GP20)
print(i2c.scan())
Behavior
RuntimeError: Function requires lock
Description
The sample code given at the top of the busio documentation doesn't work.
Later on in the documentation of `busio.I2C...
This works:
import busio
i2c = busio.I2C(board.GP21, board.GP20)
assert i2c.try_lock()
print(i2c.scan())
i2c.unlock()
i2c.deinit()
@eightycc Just tested this:
- prepped a clean 4MB filesystem on a USB flash drive (using dd from a filesystem image prepared under Linux)
- unplugged the drive
- plugged the drive back in
- confirmed it was empty
mkdir /Volumes/NO\ NAMEmount -t msdos -o nodev,nosuid,noowners,noatime /dev/disk6 /Volumes/NO\ NAME- copied a batch of .py files that normally cause the error on a 4MB filesystem
- as you predicted, this actually worked and they copied successfully
/dev/...
@romkey It's fascinating and unexpected that filesystem size makes a difference, thank you for running that down. So that I can get trace data, I'm going build a modified CP that reports a 64M device. Also, thanks for the confirmation on the work around.
If it really is filesystem-size related I can see how that could easily slip through QA and testing; unless you're familiar with this part of the world you would probably not expect that there were 4MB USB keys in use these days.
It would be nicer to write
pin = digitalio.DigitalOut(pin=board.GP123)
# or this
pin = digitalio.DigitalInOut(pin=board.GP123, direction=digitalio.Direction.OUTPUT)
# than this
pin = digitalio.DigitalInOut(pin=board.GP123)
pin.switch_to_output()
"Explicit is better than implicit." Defaulting to input seems arbitrary and it would be better for code to be explicit about direction. And it makes it a one-liner to define an output pin, which is nice if you're doing many of...
We didn't do this because there are different pin settings for input vs output mode. Pull is only valid for input for example. Having direction in the constructor would require cross parameter validation (if pull is set but direction is output then fail.)
@eightycc I tried again with a few other sizes. 8MB fails while 8.5MB, 10MB, 12MB and 16MB succeed (worked backwards on this, I'm not completely erratic).
Just to be sure I rebooted and 8.5MB still succeeded.
I tried 8MB three times with fresh filesystems and it failed each time.
I'm going to take a wild guess that 8MB is the breakpoint.
Seems like that's an argument for splitting DigitalIn and DigitalOut so that there is less complexity in what combination of settings are allowed?
@danh I'm checking into the >8M filesystem reported by @romkey on 8449 just now. If I can confirm that, I have an idea for a workaround. If we report a >8M filesystem, but mark the excess blocks as in use in the FAT without a corresponding directory entry, the OS will think it has a larger device but won't be able to access the non-existent blocks. If the OS does try to read those blocks as part of a caching scheme, return them as zeroes. Could this work?
@romkey That's super helpful. Thank you!
Sometimes you want to switch a pin from input to output or vice versa and then back again. For instance this is useful when scanning keyboard matrices. We are thinking in the long run about separating pin I/O state from pin functionality. For instance, you'd create a "Pad" or some name like that on a given pin. Then you could control its I/O state (pulls, open-collector output, drive strength), and pass that around to DigitalInOut, busio.whatever, etc., rather than simply passing a pin name...
See https://github.com/adafruit/circuitpython/issues/2751, including second post.
- #2751 has some discussion about faking a FAT16 filesystem.
Exactly. Marking the excess clusters bad looks like it could work. Your comment that it was "not so simple" worries me. Are there complexities beyond filesystem formatting?
I started to work on it several years ago and I think I found I would have to do some restructuring in oofatfs. Maybe it was not so clear where I could initialize the FAT; I don't remember that well. Or maybe it was that normally FAT16 and up have two FAT tables for redundancy and it was not clear how to enable that.
i don't remember if oofatfs has the ability to have two FAT's. Also it would take up extra space in the 64kB CIRCUITPY's.
FAT12 will handle up to 32M, so we can skip going to FAT16 with the redundant FAT's.
the original goal was to get to FAT16, because Android didn't/doesn't have support for FAT12. Also Windows had a bug of long write times for FAT12 (floppy legacy), which supposedly was fixed but I haven't checked that again. See https://github.com/adafruit/circuitpython/issues/111, which was a really old problem we had with Windows early in the life of CircuitPython.
oofatfs does support FAT16 and up, but maybe just with one FAT. So maybe the two FAT's are not necessary, but it seemed like some OS's wanted two FAT's. We'd need some experimentation and studying of oofatfs
this Sonoma problem is all too familiar, in some ways
Could Sonoma have gotten rid of some older filesystems in their tools? That seems very Apple.
They broke FAT12 support in the past, and then fixed it again. It's not missing, but it doesn't work the same way.
So, seems like a maybe. How about I study oofatfs for a bit and get back to you later?
sounds great!
If you could make it fake FAT16, that might solve two problems. But also see if it reports a false size with the bad blocks. That will be a support issue.
Yes, it probably will report a larger size. Is that show-stopper for support?
Previous Apple issues:
https://blog.adafruit.com/2022/10/31/uploading-uf2-files-with-macos-13-0-ventura-apple-microbit_edu-raspberry_pi-circuitpython/
https://blog.adafruit.com/2019/06/25/ios-13-beta-1-erases-files-off-drive-resets-ipad-fat12-issue-it-seems-apple/
https://blog.adafruit.com/2019/07/30/its-now-possible-to-open-edit-and-save-python-code-on-ios-for-embedded-electronics-plugged-in-circuitpython-usb-devices-apple-ios-circuitpython/
if we could just get Apple to fix the problem, then we can live with the curren FAT12 support. ... Of course, what we really want is for Apple to support MTP...
Thank you @eightycc and @romkey for your diligent investigation. That should make the fix much easier for the macOS team at Apple.
i think if say 75% of the FAT was bad blocks, would it show the remaining capacity properly, or does it subtract off the bad blocks from the capacity. It may depend on the OS.
i thinik I have seen capacity go down on hard drives that had a lot of bad blocks
Testing this involves a lot of compiles and is taking me some time to work through so I figured I'd switch to a draft while I'm working through the ports/boards in case there are any suggestions or comments on my approach.
If anyone on this issue hasn't already done so, file an issue using Apple's Feedback Assistant app. When you do, please mention FB13226668 (the issue I opened) so that Apple ties the reports together and raises the priority of the issue. If you've already opened an issue, you can append a note mentioning my issue number. Thank you!
I'll look for that when I get some oofatfs mods to test. What I think it will do is show the fake size as the total fs size but show available size with the "bad" clusters subtracted out.
just copied the entire .py library bundle to a 16MB FAT16 CIRCUITPY (UnexpectedMaker FeatherS2) w/o mishap (macOS 14.1)
Ditto 32MB FAT16 (espressif N32R8). 300+ library files copied to 8MB FAT16 (espressif N8R8) also look intact. I didn't reboot between or do any kind of manual mounting, just plugged in new devices.
Thank you for testing that. The cluster size will grow from 4K to just 8K on devices with small flash for a faked 8M filesystem.
statvfs:
N32R8 (2048, 2048, 15176, 10309, 10309, 0, 0, 0, 0, 255)
UM16 (2048, 2048, 5969, 511, 511, 0, 0, 0, 0, 255)
N8R8 (1024, 1024, 5796, 728, 728, 0, 0, 0, 0, 255)
wasn't the 8MB expected to fail on the copy though? (or is that just on UF2)
I can't get an error at all now on macOS 14.1 ... 4MB FAT12 (QT Py S3 N4R2): copied (and edited) files appear OK ((1024, 1024, 2348, 2050, 2050, 0, 0, 0, 0, 255))
(I had copy issues on 14.0)
not at all convinced all is good, just can't get an obvious failure
Re-read @romkey 's entry in the issue and it looks like anything greater than 8M should be OK. Maybe/maybe not coincidentally that's the line where cluster size jumps from 8K to 16K. 16K happens to be the native page size for Apple silicon (M1/M2). My pet theory du jour is that the underlying Sonoma bug is in xnu's mmap.
I thought the 8MB FAT16 and the 4MB FAT12 would fail, but not so far
That's what I think, too.
oh, btw, did this on an Intel-based macOS14.1
(not ready to do other Macs yet, need them issue-free)
That's an interesting data point. I'm on an Apple Silicon machine at 14.1, but I don't have anything handy with a flash bigger than 4M. This bug gets uglier and uglier.
I think the branch needs the newer changes from adafruit/main merged in to fix the build.
We don't have any Intel machines to test on anymore or I'd be happy to
where do I start helping figure this out? https://github.com/adafruit/Adafruit_CircuitPython_BLE/issues/186
Hi everyone, This issue was originally posted on the Adafruit Forums: https://forums.adafruit.com/viewtopic.php?p=970491#p970491 I've been trying to use BLE with CircuitPython, and I've hit...
Looking at that issue ... have you upgraded the firmware to 1.7.4, and are you sure it's upgraded? Use the Internet test program in the guide to check the firmware version.
I am flashing NINA as we speak
1.7.5 still happening
@danh Disappointed to report that faking out the filesystem will eat up a relatively large amount of flash on smaller devices. For example, on a ATSAMD21E18 64K is allocated for the filesystem. Ballooning that to 8M+64K increases the cluster size from 512 bytes to 2048 bytes. It also increases the FAT table size from 512 bytes to 6656 bytes decreasing the amount of available filesystem space to about 53K. Each file stored will cost ~896 bytes more.
Easier way to verify, doesn't even need a USB drive.
Create an 8MB FAT12 disk image. Not sure how to do this on macOS, on Linux it's:
truncate -s 8M disk8.img
mkfs.vfat -F 12 disk8.img
Transfer this to your Mac.
Mount it - either open Disk Utility in the Finder and use File | Open Disk Image...
or
diskutil image attach disk8.img
This should mount as /Volumes/NO NAME and appear in the sidebar in the Finder.
Copy small files to it from the command line...
https://fosstodon.org/@brettcannon/111309638874068503 something to potentially investigate for circuitpython libs
Trusted publishing on #PyPI is great! https://docs.pypi.org/trusted-publishers/
Not worrying about API tokens is very nice (I used to create a temporary token to upload via twine)! Now a release is a 3 step process:
- Bump version (and I'm using CalVer for everything I push to PyPI, so that's easy to figure out)
- Run the release workflow ...
This got turned out at some point. I tested on Trinket M0, Metro M4, RP2040.
This now exists, not sure when it showed up:
Adafruit CircuitPython 9.0.0-alpha.2 on 2023-10-27; Adafruit Metro M4 Express with samd51j19
>>> b'abc'.hex()
'616263'
I think most of this has been handled in one way or another. Closing. More specific issues can be opened if wanted.
Switching to Libraries tag, since doing this in Python seems best.
I think supervisor.runtime.usb_connected serves this purpose now.
Sorry, this is about __setattr__() and __delattr__(), not setattr() and delattr(). Reopening.
Closing this because I think it's resolved.
Closing this because many things have happened since it was opened.
Closing this because we have keypad support.
Because the RP2040 bootloader in ROM presents a 128M FAT16 filesystem, the process of flashing an RP2040 with a new .uf2 image should not fail on MacOS Sonoma. If anyone is experiencing otherwise, please add a note to this issue.
I think we have this figured out now -- nothing to change.
MCLK support was added to mimxrt10xx in #8291.
@danh If you saw my message from last night, I think I've got a workaround that doesn't eat up flash on flash-constrained device (ex., M0 trinket). Changing to FAT16 increases the FAT table entry size so that cluster size remains 512 bytes. This gives us 128 clusters on a 64K device. Only the first 512-byte block of the expanded FAT is meaningful, the remainder is filled with bad block codes, so it can be faked without consuming flash.
Retested with 8.2.7 and latest libraries. It fails even earlier:
Adafruit CircuitPython 8.2.7 on 2023-10-19; Adafruit CLUE nRF52840 Express with nRF52840
>>> from adafruit_clue import clue
>>> import time, gc, random
>>> gc.collect() ; gc.mem_free()
87200
>>> a=[(1.0, 2.0, 3.0) for x in range(500)
... ]
>>> def read(n):
... for idx in range(n):
... a[idx] = clue.magnetic
...
...
...
>>>
>>>
>>> gc.collect() ; gc.mem_free()
68800
>>> re...
Note that in order to reduce skew from MicroPython, which does not use SPDX tags, we have removed SPDX from core files we inherit from MicroPython.
Closing this because we'd like to see the same symptoms now in a reproducible way. Many things have changed, including with nRF impls since this report.
Closing this since many versions have passed, and nRF BLE has been working. A new issue can be opened if necessary.
Closing this because we don't have code for reproduction.
Thank you for working on this!
Many things have changed since this was filed. I'm closing in favor of any newer issues that show similar problems.
Closing because it is so old and we've moved forward on the ESP-IDF.
BLE on Titano
@jepler is this moot or still an idea?
Reported as working, so closing.
NP, I'm enjoying this. oofatfs gets a bit sloppy setting cluster sizes, i.e., it sets FAT16 cluster size using a FAT12 table that in turn sets the cluster size too large for FAT12. Also, it always allocates 512 root directory entries, eating up 16K on a device that can only hold a few fewer than 128 files.
Looks like a similar, but not identical oofatfs is in tinyusb that has the same issues. Any suggestions on how/if I should proceed? File pulls for tinyusb?
@tulip sleet was there a change in keypad.Keys in 9.x? I'm getting AttributeError: 'Keys' object has no attribute 'events'...
>>> import board
>>> import keypad
>>> keys = keypad.Keys((board.X, board.DOWN, board.LEFT, board.RIGHT,
... board.UP, board.O), value_when_pressed=False, interval=0.01)
>>> keys.
deinit reset
>>> keys.events
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Keys' object has no attribute 'events'
>>> dir(keys)
['__enter__', '__exit__', 'deinit', 'reset']
@tannewt might this have been fixed?
Let's close this based on probably being fixed by #6303.
hmm, I see I need CIRCUITPY_KEYPAD_KEYS = 1 now
but even that doesn't make it work
scratches his head
I can't get it to work, even if I put CIRCUITPY_KEYPAD_KEYS define in mpconfigboard.h
@onyx hinge I think it's your change at https://github.com/adafruit/circuitpython/commit/05cf5213e20568f269f4fab678b307b06bf97fe3 – any hints on how to re-enable keypad.Keys?
I merged main to this PR branch
my money's on it being something weird with the latest merge, not the ability to disable individual classes within keypad, but I don't have any HW to test with rn
@tannewt Is this still an issue?
now is green! mark out of draft when ready
No deliberate change. Seems like a bug.
Ok I see previous dialogue. Will look at this but I’m in issue review mode at the moment
sorry, no hurry, I was just surprised
hmm, it looks like the attribute is there on the class, it just it doesn't work as a property on the instance
adding MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS to the class definition fixes it
@jepler is this addressed in some way now?
It looks like we need the MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS flag on the class for properties to work, and the Keys, KeyMatrix and ShiftRegisterKeys classes were missing it, so the "events" property didn't appear on the instances.
Closing due to no followup.
Closing because we have no plans to update the Windows 7/8.1 drivers.
Closing this because no further work has been done, and the internal pullups are too weak for general use.
This is now merged in and is fixed in 9.0.0, at least:
>>> '{:09}'.format('Jan')
'Jan000000'
Closing because this appears to be a hardware problem.
Increasing the buffer size may help. We saw similar issues on RP2040 PropMaker.
As of 9.0.0 alpha.2 we are using GCC 12
Implemented by #8183.
Closing in favor of #5865, but will xref to here.
Also see #3822 for a specific example.
Please don't crosspost - this is already in #help-with-circuitpython which is the right place. This channel is for development of CircuitPython itself
my apologies
Closing as apparently fixed.
This appears to be a fragmentation issue, as noted in the most recent post. Closing for now.
Closing since too non-specific.
Re-tested. This is fixed as of 9.0.0-alpha.2
._machine added with the recent MicroPython merges. Present in 9.0.0-alpha.2
Given that this seems to be another manifestation of #2687, this is fixed in 9.0.0-alpha.2 because long-lived heap was removed.
@jepler is this moot now and could be closed?
Closing as we have moved to gcc 12. Can be reopened if this is still happening.
I think this is fixed by #8305. Please re-open if not.
@slender iron @onyx hinge as might be clear, I went through all the "Long Term" issues and tried to close those that could be closed.
closed not quite 50 issues
so from about 600 to about 550
thanks! i was about to sit down and figure this out and its done for me <3 it :)