#circuitpython-dev

1 messages Β· Page 42 of 1

cobalt grail
#

Nope.

#

And the use of UNIX timestamp is a "strange design decision". πŸ™‚

tulip sleet
brazen hatch
#

Seeed xiao nrf52 which I got has a uf2 bootloader, just not the ada one. That works just fine with latest commit with stock bootloader.

#

I have no clue actually where the source for that bootloader even is

#
UF2 Bootloader 0.6.2-12-g459adc9-dirty lib/nrfx (v2.0.0) lib/tinyusb (0.10.1-293-gaf8e5a90) lib/uf2 (remotes/origin/configupdate-9-gadbb8c7)
Model: Seeed XIAO nRF52840
Board-ID: Seeed_XIAO_nRF52840_Sense
Date: Nov 30 2021
SoftDevice: S140 7.3.0
#

Oh wait, yours is looking the same. I didn't see that.

manic glacierBOT
idle owl
#

@lone axle After the meeting today, if you have a few minutes, I'd appreciate some assistance with submitting a board to OSHWA. Let me know if you'll be around. Thanks!

lone axle
idle owl
#

Excellent, thanks! We can coordinate when it's time.

onyx hinge
#

enough time to make a fresh cup of tea before the meeting. yay/phew

midnight ember
#

same, β˜•

idle owl
#

My tea takes 4 minutes to steep. The kettle takes n minutes to boil. My tea is not quick.

midnight ember
#

Keurig ftw

solar whale
#

πŸ‘‹

gilded cradle
#

I use an electric kettle for tea and it's pretty quick (1-2 mins)

idle owl
#

@solar whale Nice to see you!

solar whale
#

Thanks -- Nice to be here

onyx hinge
#

i use an electric kettle and an instant chai mix

spare jacinth
#

can anyone join to hear? im free today πŸ˜„

slender iron
#

yup!

onyx hinge
#

@spare jacinth scroll down and under "voice" find "circuitpython" there

#

in the channel list

slender iron
#

to speak you'll need to be a circuitpythonista (which we can add you to if you want)

spare jacinth
idle owl
#

Everyone is welcome!

turbid radish
#

😊

lone axle
slender iron
#

(she's the host)

lone axle
midnight ember
#

micro = u, such as ulab is called microlab. perhaps they started out with using u for micro.

lone axle
onyx hinge
#

and skerr is no stranger to this discord. hi skerr!

midnight ember
#

Ohh Skerr has a library for his FPGA feather now. Very nice Skerr!

onyx hinge
#

hooray!

midnight ember
#

1042 very nice.

onyx hinge
#

(automating the testing of github "composite actions" seems to be extremely tricky if not impossible, so mostly you just hope for the best and merge changes, fixing problems when they crop up...)

midnight ember
#

Well done Deshipu! Hopefully next hacktoberfest will be a little easier for beginners.

onyx hinge
#

I implemented alphablend, others implemented blit. I did recently fix "blit" not showing up in the docs, however.

midnight ember
#

ohh there's a synthio panel. awesome.

lone axle
#

I think maybe Kmatch originally implemented blit but it was inside of Bitmap class at the time. I recently refactored it to bitmaptools when adding a bit of new functionality pushed some builds over the limit.

midnight ember
#

8.2.2 is working very well on the boards i've updated so far

thorny jay
midnight ember
#

synthio and gamejam. sounds awesome. can't wait.

#

There was a recent interview on Alpenglow with a former Leap Frog developer. Could try to get in touch with her.

lone axle
#

Ooh, thank you for the tip. I'll check that out.

solar whale
#

What is PyCamera hardware? Something AdaFruit is making?

midnight ember
#

or maybe it was alpenglow... can't remember 😣

thorny jay
#

What is a dot clock display?

idle owl
#

@onyx hinge Gah! You can absolutely still opt out. πŸ˜‚

thorny jay
midnight ember
onyx hinge
#

@solar whale it's a board LadyAda's working on with an OVxxxx camera and an ESP32-S3. It's called "esp32s3-camera" in the board definition

midnight ember
#

Kattni always so busy 🐝

onyx hinge
#

the display controller, which in this case would be an ESP32-S3, has to continually refresh it with data, it's not a smart display like an SPI or I2C display

midnight ember
#

32-bit bitmaps is a thing? since working with circuit python i've started forgetting anything other than 8-bit indexed exists. πŸ™‚

#

Hug to Scott for the deep dive on USB host too. It was very informative. πŸ€—

gilded cradle
main furnace
#

Not enjoying another "Year Without an AdaBox" :sigh:

midnight ember
#

year isn't over yet

slender iron
#

chip shortage is hard πŸ™‚

main furnace
#

no audio (sorry)

#

thanks

slender iron
#

and they are moving the adabox assembly internally too

main furnace
#

Yeah, let's build something together!

midnight ember
#

I like that idea, aimed at beginners perhaps, stream it so everyone builds it together?

thorny jay
#

You can make a learn guide.

midnight ember
#

Where you have like streamyard with 20 different windows open people building the same project. Seems like a neat idea for circuit python day or hacktoberfest.

main furnace
#

Thanks, let's talk about it more on CPDay!

thorny jay
#

There could be a channel on discord, or meeting in the audio.

main furnace
#

Thanks, I'll send in a proposal.

onyx hinge
#

take care & have a good week

random junco
#

Thanks for hosting danh

lone axle
#

Thanks for hosting Dan πŸŽ‰ Have a great week everyone!

midnight ember
#

Thank you Danh for hosting.

idle owl
#

@lone axle I'll take a few minutes to stretch; I've been in meetings since 1ET. πŸ˜„ Are you good to chat in, say, 10 minutes?

cobalt grail
#

No stream today @lone axle ?

lone axle
manic glacierBOT
manic glacierBOT
idle owl
#

@slender iron FYI, for CircuitPython Day, I'll have you start your Deep Dive at 2:30 Pacific.

slender iron
#

kk, I'll let folks know this week

idle owl
#

Thanks

manic glacierBOT
warm fractal
#

Hi, looking for some help around best practices (and etiquette) about creating a CPy library. I found a MicroPython library for a chip (RV3028-C7) and I'd like to port it to CircuitPython (and include it in the Community Bundle). I see an guide to create a brand new CPY library (using cookiecutter), but I don't see a guide if I want to fork and then modify a library. I guess I could use Cookiecutter and make a note in the documentation that it's a fork... but it feels like it's better to explicitly make a fork in Github. Any thoughts or suggestions?

warm fractal
tulip sleet
grim egret
#

Hey, guys and gals. So I'm trying to find a script that I can use. To basically turn a pieco into a game controller That uses 2 thumb sticks, 8 to 12 buttons and a D pad.
I Have never used the circuit python before today and I was wondering if this file. So how does it already exist somewhere? And if someone could point me in the right direction, thank you.

ebon pollen
#

πŸ‘‹ Hi y'all. I'm working on a HomeKit implementation on a Pico W and was working on adding mDNS TXT record support to CircuitPython (https://github.com/adafruit/circuitpython/pull/8262). There's essentially two implementations of the mdns module, and I'm currently only implementing one of them (raspberrypi) because I have the boards to test with. I don't have an ESP board to test out changes under the espressif implementation.

How do the CircuitPython maintainers prefer to manage a situation like this? I'm happy to write some code that looks right and work with someone who has access to some relevant boards to do testing, but I'm just not equipped myself to do that right now.

lone sandalBOT
manic glacierBOT
#

A limitation of circuitpython's I2C target functionality is the slow response to I2C requests due to the lack of interrupt handling, garbage collection, etc. This can bog down an I2C host if it has a number of such I2C targets connected.

Thus I would like to propose an additional version of the I2C target functionality strictly based on a read-from- and write-to-registers paradigm (like it is found in many I2C devices). This would require the instantiation of registers object per I2C addr...

manic glacierBOT
#

You [asked in discord](#circuitpython-dev message):

There's essentially two implementations of the mdns module, and I'm currently only implementing one of them (raspberrypi) because I have the boards to test with. I don't have an ESP board to test out changes under the espressif implementation.

How do the CircuitPython maintainers prefer to manage a situation like this? I'm happy to write some code that looks right and work wit...

tulip sleet
midnight ember
#

Great newsletter this week. Really enjoyed Dan's blog post about the debugging adventure on the SAMD boards.

paper sandal
#

does any keyboard exist for i2c or featherwing? preferably i2c. its for a project i have been working on

manic glacierBOT
#

It's fine to just have one implementation. Create a stub for the Espressif implementation that raises NotImplementedError, and add a **Limitations**: note in the documentation in shared-bindings noting that it's only implemented on RP2040 Pico W. There are other "Limitations" notes you can crib from for style.

Makes sense! I'll check out some "Limitations" examples.

If you can, take a brief look at the relevant API in the ESP-IDF, even if you are not going to implement to see ...

manic glacierBOT
slender iron
#

@tulip sleet want to pair program/handoff today?

tulip sleet
#

i am still being productive, but I would like to talk about how long-lived is clashing with some stuff, and maybe a modification of how it works that would also fix the import problems like https://github.com/adafruit/circuitpython/issues/2687. That is what I am looking at, at this very moment. Could video with you shortly.

manic glacierBOT
tulip sleet
#

that'd be good

slender iron
#

I'm in Amelia Earhart

grim egret
#

How do I get started learning micropython

#

I posted a questing yesterday I would like to solve

onyx hinge
grim egret
#

Thanks

#

I didn't think this project would be this complex

slender iron
grim egret
#

I will look thanks

spare jacinth
#

If someone has time and is willing to, i would love some feedback on my TOML lib, hoping to get it as a replacement for current getenv or at least pack it in the comm bundle πŸ€“
(#show-and-tell message)

tulip sleet
#

@slender iron I have removed the long-lived implementation, and am wondering whether to keep https://github.com/adafruit/circuitpython/pull/2614. This is what I was thinking of when I mistakenly said there were qstr pool changes. It was ATB tracking changes. The code in this PR was written after ll, so I tried taking out the ll stuff but not sure about what remains. I'm not sure if this is less of an issue without ll. If I remove it there will be less difference in the core heap algorithms (we still do more checking and have more instrumentation, but that is mostly add-ons).

slender iron
manic glacierBOT
#

This PR updates the alphablend function and adds some useful features. It allows skipping a color mask in either source file as well as updating the blending algorithm to use the same one the SVG alpha compositing spec uses. I only added a couple, but this change allows for adding additional blending methods in the future. The result of changing the algorithm is that it handles blending the darker colors much better than the existing code.

plush citrus
#

@proven garnet I hope I'm not being a bother, just wanted to see if this may have been buried a couple days ago

manic glacierBOT
woven wagon
#

I am using rp2040 qtpy , I want to communicate my microcontroller(circuit python) over usb within my pc (python). When i try it via usb protocol, I get PermissionError(13, 'Access is denied.', None, 5).

manic glacierBOT
#

I don't know how durable your "serial number in flash" concept will be, but it doesn't mean it's not worth trying. For instance, we advise folks that in extreme circumstances they can run a program that erases all flash content: https://learn.adafruit.com/adafruit-feather-rp2040-pico/circuitpython#flash-resetting-uf2-3091244 (this is nuke.c from pico-examples, I think)

at a guess you'll at least need to revise these two in raspberrypi/supervisor/internal_flash.c

Probably fix by defining...

#

The RP2040, as you know, doesn't have a unique serial number. However, some or all of the external flash chips do:
https://stackoverflow.com/questions/72594333/arduino-rp2040-pico-unique-id
https://forums.raspberrypi.com/viewtopic.php?t=331910
etc.

So you can use that instead, and other people have done so. And it won't be erased by the nuke UF2. (And you won't need the extra settings above.)

onyx hinge
#

huh, I wonder how that works. the way I read this schematic, IO10 is NOT connected TO SD_CS (R34 is "NC") and CS is pulled up. That means nothing can pull CS down and the card will never be selected.

#

maybe it's permanent 1-bit sdio mode

manic glacierBOT
#

CircuitPython version

Version:  adafruit-circuitpython-challenger_rp2040_lte-en_GB-8.2.2.uf2

Code/REPL

import board
dir(board)

Behavior

Adafruit CircuitPython 8.2.2 on 2023-08-01; Challenger RP2040 LTE with rp2040

import board
dir(board)
['class', 'name', 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'D0', 'D1', 'D10', 'D11', 'D12', 'D13', 'D5', 'D6', 'D9', 'GP0', 'GP1', 'GP10', 'GP11', 'GP12', 'GP15', 'GP16', 'GP17', 'GP19', 'GP2', 'GP...

idle owl
#

@lone axle Do you use the builtin terminal in PyCharm? If yes, do you run into the situation that you can't scroll up when you're connected to the serial console / REPL? There's a user complaining about this, and I remember running into it as well. Your PyCharm and CircuitPython guide page mentiions using the terminal, but nothing about the scrolling thing. Can you add a note about this? If there's a setting, note that, if it's a limitation, note that, etc. Thanks!

lone axle
# idle owl <@382939733107408897> Do you use the builtin terminal in PyCharm? If yes, do you...

I do use the built-in terminal extensively, but don't recall ever having any issues scrolling within it. I run tio inside of that built-in terminal and am able to scroll upwards through lots of the history of commands and serial outputs from before, I'm not sure of the limit, but I have scrolled pretty far successfully at least back through 4 or 5 cycles of ctrl+c / ctrl+d restarting a program to find some output that was printed by prior versions.

idle owl
#

I distinctly recall the same problem, so I don't think they're wrong about what they're experiencing.

lone axle
#

I can add a warning to the guide page, but I'm not sure what to tell them to try other than an external terminal. I don't think I did anything specifically configuration wise on my end around scrolling but I'll poke around my settings some and see if there is anything I forgot about that looks relavent.

Yeah you can link me I'll take a look later today and try to replicate.

idle owl
manic glacierBOT
#

Because one of the PyCamera modes ("onion skin") is doing this operation in a tight loop, I wanted to check on the performance difference this change makes.

Because the LCD is 240x240 I tested like this (though the actual images are smaller, 240x192 or something)

import time
import displayio
import bitmaptools

b0 = displayio.Bitmap(240, 240, 65535)
b1 = displayio.Bitmap(240, 240, 65535)
b2 = displayio.Bitmap(240, 240, 65535)

t0 = time.monotonic_ns()
for _ in range(50):
  ...
manic glacierBOT
manic glacierBOT
#

Here is the circuit from iLabs for the Challenger RP2040 LTE:
https://gitlab.com/invectorlabs/hw/challenger-rp2040-lte/-/blob/main/V0.2/challenger-rp2040-lte.pdf?ref_type=heads

On the circuit, the connection labelled SDI on header JP2 goes to the RP2040 pin shown as GPIO20.
I see that this pin ihas no assignment in the microcontroller.pin mapping table.
microcontroller.pin.GPIO20 has no assignment

#

I suspect there may be other errors in the pinout diagram shown in https://ilabs.se/challenger-rp2040-lte-datasheet/
I tried raising this matter with Pontus Odberg of ILabs, but he hasn't yet replied to an email I sent him with a detailed explanation of why I think the labelling of one of the other pins is wrong. I haven't had time to check through the details of every single pin, but I suppose that various issues will be apparent if you consult the circuit diagram for all the pins on JP1 a...

manic glacierBOT
#

The scheamtic is indeed wrong.

>>> led = digitalio.DigitalInOut(microcontroller.pin.GPIO20)
>>> led.direction = digitalio.Direction.OUTPUT
>>> 
>>> led.value = True
>>> led.value = False
>>> 
>>> led = digitalio.DigitalInOut(microcontroller.pin.GPIO24)
>>> led.direction = digitalio.Direction.OUTPUT
>>> 
>>> led.value = True
>>> led.value = False

The second set of code, using pin 24, toggles an external LED connected to the SDI pin.

slender iron
manic glacierBOT
#

Thanks for the tips. I had assumed that the circuit schematic was the gold-standard for what was actually connected to what. Since the schematic showed the JP1 SDI pin connected to RP2040 GPIO20 and GP20 was not in the list of board.* assignments you gave, I figured that was why my simple test program couldn't get that pin to work as an input using board.*. I will have a crack at what you suggest tomorrow. Clearly something is amiss in either the schematic, the Challenger LTE pinout dia...

thorny jay
spare jacinth
#

i guess that's the lang with most non-ascii chars (accented vowels) in their translated texts, which take more space (2/3 bytes?) than a "basic" char (1 byte)

thorny jay
#

Non ascii? Do you mean "non ascii 7 bit"?
French is not the language you are looking for, I think every character fit in a byte.
But in French you have longer sentences and you need more words to say the same thing than in English. πŸ™‚

spare jacinth
#

Oh wait, there's "extended ASCII" using the 8th bit, is that actually used anywhere? lol
(also, aren't there several non-standarized extensions of ASCII using that 8thE)

onyx hinge
#

CircuitPython uses UTF-8 as the internal coding for str objects. translated messages undergo a complicated encoding, dictionary & huffman compression system at build time. There's also the inclusion of characters in the terminal font for the language, if that's enabled. Over time the translation that uses the most flash space has varied, and it can even vary from board to board.

thorny jay
#

I was hoping for answer like "Melissa learn French." or "All the Adafruit paid developer use CP in a different language assigned to them as a way to detect problem early, Melissa was lucky to get French." πŸ˜‰

manic glacierBOT
#
  • Remember the fan out! Many panels do not manage the clock line. (These use serial wiring on the clocks. Lowering clock speed will improve this. Use scope to verify performance.)
  • Many panels do not use termination as it is likely not required unless the cable is long.
  • Many panels do not manage the upper and lower capacitance, which can create ghosting if the refresh is too high. (Some have MBI5124 which manages the lower. I do not know if they have the RUC7258 which manages upper.)
    *...
manic glacierBOT
#

Having updated my test program as you suggested, I can now confirm that the pin labelled SDI on the Challener RP2040 LTE is indeed microcontroller.pin.GPIO20. I suppose this proves that the schematic is correct and that the pinout diagram has at least one error.
According to the schematic RP2040 GPIO24 is unconnected. I presume then that the mapping should be something like

microcontroller.pin.GPIO20 board.SDI board.GP20

manic glacierBOT
manic glacierBOT
onyx hinge
#

It's a longshot but does anyone know why we settled on this style instead of ifeq (...,1)? ```make
ifneq ($(CIRCUITPY_USB),0)
SRC_C += lib/tinyusb/src/portable/espressif/esp32sx/dcd_esp32sx.c
endif

manic glacierBOT
tidal kiln
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

I'm still very much of a beginner with CircuitPython, so your handy tip about how to use microcontroller.pin.GPIOx instead of board.* was a big help.

Since you are clearly some rungs higher up than me on the Challenger LTE, CircuitPython and github ladders, I am wondering whether you might like to discuss a project I'm working on that uses Challenger LTE to run a Blynk client. I presume that this isn't the place to have such a discussion. If you are interested, my email is psturgeon@ag...

manic glacierBOT
manic glacierBOT
tulip sleet
manic glacierBOT
slender iron
tulip sleet
#

@slender iron merge progress report: long-lived is removed. Trinket M0 and Metro M4 were building fine (not tested). Tried CPX build and it failed. Turns out it is some missing dependencies related to genhdr files in the makefiles: make -j1 and make -j12 give different results on various boards (!), so the success/failure is timing-dependent. Debugging this now.

#

Mpy introduced some new semi-fake targets for the qstr phase, and this may have soemthing to do with that.

slender iron
#

sounds good @tulip sleet let me know if you need me to talk something over or pick something up

#

I'm having trouble getting my submodules back: ```
BUG: config.c:129: kvi should not be set while parsing a config source
error: path='ports/espressif/esp-idf'; git fetch --tags --depth 1 died of signal 6
fatal: run_command returned non-zero status for ports/espressif/esp-idf

#

deleted it and it worked the second time

#

@devout jolt do you have synthio code that takes in midi from a usb keyboard?

slender iron
#

πŸ™‚ time to get it working where you plug the midi keyboard into cp directly

devout jolt
tidal kiln
#

Q - what all triggers the CP firmware to create the boiler plate code.py with print("hello world") ?

buoyant lagoon
devout jolt
buoyant lagoon
devout jolt
#

FAT file structs are pretty consistent across the universe I guess

buoyant lagoon
#

ah yep, same library

#

CP has 0.13, while the rpi firmware i forked was 0.12

devout jolt
#

neat! it's always cool seeing a bit of code that's been maintained for decades

buoyant lagoon
#

and it looks like CP is using the MP fork of the lib

tidal kiln
devout jolt
tidal kiln
#

and code.py showed up without any other user interaction?

#

like doing storage.erase_filesystem() ?

devout jolt
#

yeah I think somehow it's doing that

manic glacierBOT
spring perch
#

How can we use Bluetooth with pi pico w using circuit python?

small mantle
#

Where in the source code is the connection between the python commands and the c++ functions?

jaunty juniper
manic glacierBOT
random junco
onyx hinge
#

@devout jolt I haven't tried combining synthio & displayio yet, but from my experience with mp3 decoding & displayio the best thing I found to do was:

  • disable auto_refresh, and only use manual refresh
  • ensure that only small portions of the screen were updated at a time

Background tasks can't interrupt other background tasks, so a background screen update blocks audio calculations.

On the other hand, it appears that for both rp2040 and atmel-samd (but possibly not for mimxrt10xx) lengthy (DMA) SPI transactions DO allow background tasks, so I think with the above suggestion it is possible for the audio background task to run during an explicit foreground displayio refresh.

#

using the audiomixer as a way to get a bigger buffer is a good trick, I like it. I'm surprised you need to use it to control overall volume level though. Right now in synthio the LFO & envelope update rate and the buffer size are tied together but it might make sense to un-tie them so that a bigger audio buffer can be used without introducing a separate mixer.

manic glacierBOT
#
[adafruit/circuitpython] New tag created: 8.2.3
tulip sleet
#

@slender iron merge progress: fixed some things with qstr and translation processing in makeqstr*.py and makefiles. Took a deep breath and loaded a build on Trinket M0. It's working, but the wrong translated messages are showing up. qstr names are fine. gc seems to be working

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.2.2 on 2023-07-31; S2Mini with ESP32S2-S2FN4R2
Board ID:lolin_s2_mini
UID:84722ED59B67

Code/REPL

import time

while True:
    print("Hello World!")
    time.sleep(0.5)

Behavior

Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
main.py output:
Hello World!
Hello World!
Hello World!
Hello World!

Description

I am trying to use the web workflow as explai...

onyx hinge
#

TIL that the online compiler explorer can build for xtensa mcus. I was curious which implementation of "reset pins according to a bitmask" would be the smallest, though they're all pretty small compared to esp32-s3 flash size πŸ™‚ and you can find out right in your browser. https://godbolt.org/z/c5nG36r13

#

which was a total distraction from what I need to do, which is get the code running. not size-optimize it. πŸ˜…

slender iron
orchid basinBOT
digital shoreBOT
#
adafruit
Owner

.adafruit#0

Members

37,699

Roles

38

Category Channels

8

Text Channels

63

Voice Channels

7

Threads

29

Boost Count

26 Boosts (Tier 3)

manic glacierBOT
slender iron
#

@tulip sleet you ok if I pick up the idf update?

tulip sleet
#

i fixed the mixed-up messages, now looking at build failures when modules are frozen

#

I don't think there is overlap between ESP-IDF update and the merge

#

This release is only to fix RGBMatrix timing issues with certain panels on SAMD51 (e.g. MatrixPortal M4). No need to update otherwise. https://blog.adafruit.com/2023/08/11/circuitpython-8-2-3-released/

Adafruit Industries - Makers, hackers, artists, designers and engineers!

From the GitHub release page: This is CircuitPython 8.2.3, the latest bugfix revision of CircuitPython, and is a new stable release. WARNING for nRF52 boards only: If your board has an nRF52 UF2 bo…

devout jolt
# onyx hinge <@352910176736772096> I haven't tried combining synthio & displayio yet, but fro...

I would love it if displayio refreshes would happen in the background on RP2040 but in my experience that's not the case. Most of my time spent in CircuitPython projects seems to be figuring out strategies to minimize displayio bus traffic to minimize glitches or timing skew πŸ˜€ (Not that this is unique to CircuitPython. In Arduino, especially if using a seesaw board, one has timing issues too, which is why I generally put all the UI on core1 and audio/midi on core0.

As far as audiomixer, I recommend it universally. It's one of the fastest ways to reduce audio glitches (for both audiocore.WaveFile or synthio.Synthesizer playing) when doing anything else: especially displayio & i2c/seesaw. For anything beyond buffer_size=4096, the latency is too great (at ~22kHz sample rate) to be usable musically. Even 4096 isn't good enough for drum stuff, but not too bad. The fact AudioMixer has global level controls is also very nice when balancing, say, WAV-based drums and synthio-based synths.

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.2.0 on 2023-07-05; PCA10059 nRF52840 Dongle with nRF52840

Code/REPL

import os, gc
import time
import board
import busio
import _bleio
import pwmio
import storage
import analogio
import microcontroller
from adafruit_ble import BLERadio
from digitalio import DigitalInOut, Direction
from adafruit_mcp230xx.mcp23017 import MCP23017
from adafruit_ble.services.nordic import UARTService
from adafruit_ble.a...
small cypress
#

Is anyone on the team running a macOS Sonoma beta build with their boards? Seeing some weird behaviour with a CP board since I updated and am wondering if it could be why.

midnight ember
#

Weird behavior as in having slow response on code.py file save. Walked with him through the issue in circuit python help. Needs investigation and possible bug report.

small cypress
#

It's that if I edit code.py and hit save, it autoreloads but then (in almost all cases) gives me ```code.py output:

Code done running.``` or

OSError: [Errno 5] Input/output error

Code done running.```
If I leave it long enough (10-15 seconds) it'll often reload itself again and then work, but forcibly trying to reload via Ctrl+D doesn't work. Autoreloads due to non-code file changes work fine. I'd post my lengthy code and original device info, but testing showed that the same thing occurs with just `print("hello there")`.
CP 8.2.3 on a ESP32S2 TFT, tried a full wipe/reload with the web-based ESPtool as well, tried with VSCode and Sublime text, viewing serial output via tio.
midnight ember
#

blank code.py with print("hello there") not showing the print and instead only showing code done running. seems like a bug to me.

manic glacierBOT
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.2.3 on 2023-08-11; Adafruit Feather ESP32-S3 TFT with ESP32S3

Code/REPL

import board
a = board.SPI()
a.deinit()

Behavior

[16:33:14.473] Disconnected
[16:33:15.474] Warning: Could not open tty device (No such file or directory)
[16:33:15.474] Waiting for tty device..
[16:33:17.477] Connected

Auto-reload is off.
Running in safe mode! Not running saved code.

Description

No response

###...

manic glacierBOT
#

I am using native modules for ML algorithms in https://github.com/emlearn/emlearn-micropython
Glad to see that this is being thought of for CircuitPython, as I would like to bring these modules there as well.
Regarding naming convention, I have for now resorted to producing folders with the ARCH name and MPYABI (6.1 for MicroPython 1.20+). This means that the filename is standard and can be imported normally.

I also use CI to produce the .mpy files across the architectures. It's not the...

lone sandalBOT
manic glacierBOT
manic glacierBOT
#

All credit to @lynt-smitka for adding the support for PicoPad to main, but the release of 9.0 might be very far, and waiting for that it is confusing end-user to get the right firmware, having to pick one in the S3. The board is targetted at education, so making this as smooth as possible is important.

PicoPad support was not picked up in the recent 8.2.3 release.
This is an attempt at cherry-picking the thing (my first backporting, so I hope this preserve the credit) and could be include...

manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

@lynt-smitka if you could give a try to the artefact and confirm it also works for you, it will be easier for reviewers without the hardware to accept this PR.

PS: I believe Adafruit will want to make an 8.2.4 release soon that makes the new Metro ESP32S3 more accessible. Both PicoPad and that metro are the only recent board I could find without an easy download. I don't see the backport, but I have identified the four PR needed, I even feel like proposing one myself, but I don't have the ha...

manic glacierBOT
#

This is a totally untested backport of metro esp32s3 from main to 8.2.x by applying the 4 PR (that touch the file for that board) from @makermelissa in the same order as they were originally applied.
I don't have the hardware to test, but since I did work on the backport for the PicoPad, I felt I could try again to apply my new cherry-picking skill.

PS: Here is what I did in my branch before submitting this PR...

git checkout -b 8.2.x-backport-metro-esp32s3
git ch...
thorny jay
#

It seems to be missing a new google doc and new pinned message for the meeting of the 14th August 2023.

manic glacierBOT
#

Merging MicroPython v1.19.1

Just before this PR was pushed, my manuals tests showed that the silabs port fails when compiling, and some tests fail when make test is done in port/unix. The other ports are compiling. I did some smoke tests on a CPX: a program that played Jingle Bells and made NeoPixel animations happened to be on that CPX, so that tested a bunch of things including frozen modules and generators. Also I did some simple gc testing by creating large bytearrays.

More...

manic glacierBOT
random junco
#

Here is the notes document for 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/16vLRTp2Bu2ILsgFtmQZ764mjPu3NpBfqv24BjlpqNjs/edit?usp=sharing

manic glacierBOT
onyx hinge
tulip sleet
#

make test worked for me locally, except that tests failed

onyx hinge
#

@tulip sleet a 'variant' is used during CI ``` - name: Build unix port
run: make -C ports/unix VARIANT=coverage -j2

tulip sleet
#

maybe the unix port was already broken before that -- we just didn't try to build it?

#

The ringbuf updates I made are from months ago

onyx hinge
#

CI always builds and tests unix VARIANT=coverage

tulip sleet
#

The additions you made for the math constants around line 83 are also at line 146 already. ? confused

#

in obj.h

onyx hinge
#

I'll re-check that. There are similar blocks in that file that pertain to each object representation A through D.

tulip sleet
#

I think that is an upstream bug, then, or maybe the merge put them in the wrong place (sounds like they could be factored out across representations)?

onyx hinge
#

as for the failing silabs build, this appears to be enough to let the build ALMOST complete but then I get a weird linker error: ```diff --git a/ports/silabs/Makefile b/ports/silabs/Makefile
index 8fd43067f1..71092afcbf 100644
--- a/ports/silabs/Makefile
+++ b/ports/silabs/Makefile
@@ -138,7 +138,7 @@ $(OUTPUT_DIR)/firmware.bin: $(SILABS_BUILD)/$(PROJECTNAME).Makefile $(OUTPUT_DIR
@echo 'Done.'
endif

-$(SILABS_BUILD)/$(PROJECTNAME).Makefile:
+$(SILABS_BUILD)/$(PROJECTNAME).Makefile: | $(HEADER_BUILD)/mpversion.h
+@$(MAKE) --no-print-directory slc-generate

$(OUTPUT_DIR)/firmware.out: $(SILABS_BUILD)/pin_functions.h $(SILABS_BUILD)/pins.c $(OBJ) $(OBJS) $(LIB_FILES)
arm-none-eabi-gcc -mcpu=cortex-m33 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -T"build-devkit_xg24_brd2601b/autogen/linkerfile.ld" --specs=nano.specs -Xlinker -Map=build-devkit_xg24_brd2601b/circuitpython_efr32.map -Wl,--gc-sections @build-devkit_xg24_brd2601b/linker_objs -Wl,--start-group -lgcc -lc -lm -lnosys /home/jepler/src/circuitpython/ports/silabs/gecko_sdk/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth.a /home/jepler/src/circuitpython/ports/silabs/gecko_sdk/platform/emdrv/nvm3/lib/libnvm3_CM33_gcc.a /home/jepler/src/circuitpython/ports/silabs/gecko_sdk/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg24_gcc_release.a -Wl,--end-group -o build-devkit_xg24_brd2601b/firmware.out
/home/jepler/.local/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld:/home/jepler/src/circuitpython/ports/silabs/gecko_sdk/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth.a: file format not recognized; treating as linker script
/home/jepler/.local/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld:/home/jepler/src/circuitpython/ports/silabs/gecko_sdk/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth.a:1: syntax error

tulip sleet
#

try the silabs build with -j1. I think it will fail earlier

onyx hinge
#

oh the content in libbluetooth.a is wrong, because I have not done anything to make git-lfs work. ```version https://git-lfs.github.com/spec/v1
oid sha256:0fbcb4da6bc0118f5e61747fc870f6bc66a98a395ae9e14408ebd3a0e5142c4e
size 2706166

tulip sleet
#

aha cursed git-lfs

#

back in 15 minutes or so

onyx hinge
#

the original error was mpversion.h not existing when building some file within the generated Makefile, and the patch fixes that

#

I'll go have breakfast and a walk and we can talk later. I'll re-check whether there's a duplicated block in obj.h that should be deleted/moved instead of my addition.

#

@tulip sleet the lines at 146 (152 after my edits) are for MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_B and both copies should be there afaict.

#

and with git-lfs installed my change to silabs is enough to let my build succeed locally. with -j12; re-checking with -j1 after I go actually have breakfast

tulip sleet
#

what version are you building for ports/unix locally? (I.e. what is the command line you are using to build?)

onyx hinge
#
      run: make -C ports/unix VARIANT=coverage -j2
tulip sleet
#

is that the coverage build for tests? that is building locally (make test).

#

I am manually putting in these changes and will repush

#

does the mp_type_stest_fileio extended fields need the extended fields flag also, I would think?

#

.flags = MP_TYPE_FLAG_EXTENDED,

#

ok, ports/unix/coverage.c was a bad merge in several respects; fixing that up. May have been an auto-merge

#

I had already fixed the ringbuf stuff months ago, but it got undone

idle owl
#

Oops.

#

Are there any changes to synthio in latest from 8.2.3? @tulip sleet

tulip sleet
#

not at all

idle owl
#

Keen, thanks

tulip sleet
#

@onyx hinge pushed new changes; float consts incorporated and the traceback fix. Other fixes done in a somewhat different way by redoing some merges

onyx hinge
#

@tulip sleet great.

#

did you try the change for the silabs build? ```diff
diff --git a/ports/silabs/Makefile b/ports/silabs/Makefile
index 8fd43067f1..71092afcbf 100644
--- a/ports/silabs/Makefile
+++ b/ports/silabs/Makefile
@@ -138,7 +138,7 @@ $(OUTPUT_DIR)/firmware.bin: $(SILABS_BUILD)/$(PROJECTNAME).Makefile $(OUTPUT_DIR
@echo 'Done.'
endif

-$(SILABS_BUILD)/$(PROJECTNAME).Makefile:
+$(SILABS_BUILD)/$(PROJECTNAME).Makefile: | $(HEADER_BUILD)/mpversion.h
+@$(MAKE) --no-print-directory slc-generate

$(OUTPUT_DIR)/firmware.out: $(SILABS_BUILD)/pin_functions.h $(SILABS_BUILD)/pins.c $(OBJ) $(OBJS) $(LIB_FILES)

idle owl
#

I have some code that I evidently wrote in 2019, and I'm not sure how it ever worked. And it's certainly not working now.

onyx hinge
#

@idle owl that's not uncommon πŸ™‚

idle owl
#

I can't understand what how it was supposed to work to begin with. So I'm not certain how to fix it.

#

It's to make a rainbow on a 3W RGB LED, not addressable, but using pwmio on the red, green, and blue signals.

#
import pwmio
import board
from rainbowio import colorwheel
import digitalio

enable = digitalio.DigitalInOut(board.D10)
enable.direction = digitalio.Direction.OUTPUT
enable.value = True

red = pwmio.PWMOut(board.D11, duty_cycle=0, frequency=20000)
green = pwmio.PWMOut(board.D12, duty_cycle=0, frequency=20000)
blue = pwmio.PWMOut(board.D13, duty_cycle=0, frequency=20000)

while True:
    for i in range(255):
        r, g, b = colorwheel(i)
        red.duty_cycle = int(r * 65536 / 256)
        green.duty_cycle = int(g * 65536 / 256)
        blue.duty_cycle = int(b * 65536 / 256)```
tulip sleet
idle owl
#
for i in range(255):
   r, g, b = colorwheel(i)```
#

What the heck?

#

That's where it's failing, int not iterable.

#

But I don't get how that was ever supposed to work.

onyx hinge
#

@idle owl I bet before the rainbowio version it returned a color tuple

idle owl
#

Ohhhhhhhhh

#

Ok ok ok ok

onyx hinge
#

like there used to be def colorwheel: ... return red_calculation, green_calculation, blue_calculation

idle owl
#

Got it.

#

I don't even get why it made sense to use colorwheel here.

onyx hinge
#

for the purposes of this demo you could either (A) find the old one that returns a tuple, paste it in, and explain WHY it's used here (so that the color is split out into red, green and blue) or (B) do some bit arithmetic to get R, G, and B values out of the 24-bit color number

idle owl
#

Oh.

#

That oh was to me realising how this works.

#

Yeah, I would think this should be math.

#

Not colorwheel.

#

That said.... while I am kind of grasping how it should work, I have no idea how to make it do the thing.

orchid basinBOT
idle owl
#

Oh fair enough.

onyx hinge
#

you can go find this person and berate her for not testing 😜

idle owl
#

Blame @autumn kiln .

onyx hinge
#

yeah must have been

#

My gut tells me to just undo that change to that file and add a comment explaining that rainbowio's function isn't used because hte separate r, g, b values are needed

#

because otherwise you'll have g = (color_number >> 8) & 0xff and nobody wants to explain that

#

nobody wants to learn what that is

idle owl
#

So I swapped it to the wheel function. And it runs, but it's a strobe enough to trigger a seizure. It needed a time.sleep(). So, yet again, I have no idea how it worked to begin with.

#

Maybe the microcontroller was so slow that it didn't matter

onyx hinge
#

ok yikes!

idle owl
#

Ok, thank you. I'll swap it back in and update the guide page.

tulip sleet
#

with -j12

onyx hinge
#

can you paste the full error for me?

#

feel free to DM if long

#

or we could start a thread about this

tulip sleet
#
... [compiling /home/halbert/repos/circuitpython/ports/silabs/gecko_sdk/hardware/board/src/sl_board_control_gpio.c]
In file included from ../../supervisor/shared/safe_mode.h:30,
                 from ../../supervisor/board.h:32,
                 from /home/halbert/repos/circuitpython/ports/silabs/gecko_sdk/../boards/devkit_xg24_brd2601b/board.c:27:
../../py/mpconfig.h:31:10: fatal error: genhdr/mpversion.h: No such file or directory
   31 | #include "genhdr/mpversion.h"
      |          ^~~~~~~~~~~~~~~~~~~~

I also tried to get the silabs build not to print out the command lines so much -- it's a bit painful

#

mpversion.h is wanted when compiling some early stuff from the sdk

#

did you try that same board?

onyx hinge
#

the line I'm actually interested in is still not one you showed me. The line I am interested in will look similar to make[1]: *** [build-devkit_xg24_brd2601b/circuitpython_efr32.project.mak:202: build-devkit_xg24_brd2601b/sdk/_/boards/devkit_xg24_brd2601b/board.o] Error 1

#

it shows the actual name of the failing target

tulip sleet
#
make[1]: *** [build-devkit_xg24_brd2601b/circuitpython_efr32.project.mak:202: build-devkit_xg24_brd2601b/sdk/_/boards/devkit_xg24_brd2601b/board.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:137: build-devkit_xg24_brd2601b/firmware.bin] Error 2
onyx hinge
#

can you try again after a make clean if you didn't already?

tulip sleet
#

i did

#

Iif I do -j1 I see the "No such file or directory" many more times. I cleaned before each build trial

onyx hinge
#

what that change is SUPPOSED to do is force mpversion.h to be generated before Makefile is generated by slc-generate, and that particular target can only be built after that Makefile exists. Clearly that's not what it's accomplishing for you

tulip sleet
#

does it work for you with -j1?

#

i think our build environments are very close

#

this is what i meant by "non-deterministic" in the OP in the PR πŸ™‚

onyx hinge
#

I'm on debian stable with gnu make 4.3.

tulip sleet
#

also gnu make 4.3

#

-j1 should remove the non-determinism

#

i had cases a few days ago where -j12 worked and -j1 failed, so I used that as a test. I originally started using -j1 to get more reliable V=rules logging

onyx hinge
#

here's something I've found is pretty effective: once you've FOUND the failing target, deterministic or not, make -j1 clean; make -j1 target is pretty effective at reproducing the problem

#

because it won't be doing the other dependencies of firmware.elf in possibly other orders / parallel combinations

tulip sleet
#

yes, it's reproducible, but with your changes to the silabs Makefile, I am still getting the same error with -j1 and you are not, which is confusing

onyx hinge
tulip sleet
#

wait, typo I need to fix...

tulip sleet
#

@onyx hinge hmm

--- a/ports/silabs/Makefile
+++ b/ports/silabs/Makefile
@@ -138,7 +138,7 @@ $(OUTPUT_DIR)/firmware.bin: $(SILABS_BUILD)/$(PROJECTNAME).Makefile $(OUTPUT_DIR
        @echo 'Done.'
 endif
 
-$(SILABS_BUILD)/$(PROJECTNAME).Makefile:
+$(SILABS_BUILD)/$(PROJECTNAME).Makefile: | $(HEADER_BUILD)/mpversion.h:
        +@$(MAKE) --no-print-directory slc-generate

but now I get

$ make BOARD=devkit_xg24_brd2601b clean
- Verbosity options: any combination of "steps commands rules", as `make V=...` or env var BUILD_VERBOSE
Makefile:141: *** multiple target patterns.  Stop.
onyx hinge
#

I can't make sense of that message

#

oh the ":" at the end should not be there

tulip sleet
#

ugh, thanks, I had the whle mpversion thing before the first colon, which was just ... wrong

#

I would like to bundle up all these non qstr/translation related genhdr things together into a dependency. Right now each one seems to be its own special case. But that can be left for later, and it diverges from upstream.

#

build is fine now! I will push that.

onyx hinge
#

OK cool. curse Makefile punctuation!

#

do you want me to look at the mpy-cross windows failure?

tulip sleet
#

fer sure, I did not work on that at all

#

I had a weird pre-commit experience last night. I am using the same uncrustify version as the CI. I did pre-commit run --all-files. It prettified a bunch of C source files, but it missed a bunch. It added a lot of spaces after commas (that's fine), but for some reason in the CI run, that run found a bunch of additional fixes in nearby files. E.g. mine did pins.c in a board dir, and the CI also found things in board.c. I downloaded and applied the patch that the CI pre-commit generated, and all was well. But I did not understand why the CI found more when my seemingly identical local command did not. I even copied the CI pre-commit command exactly

onyx hinge
#
diff --git a/extmod/moduasyncio.c b/extmod/moduasyncio.c
index 014de0db27..27d25ac31b 100644
--- a/extmod/moduasyncio.c
+++ b/extmod/moduasyncio.c
@@ -29,13 +29,13 @@
 #include "py/pairheap.h"
 #include "py/mphal.h"
 
+#if MICROPY_PY_UASYNCIO
 #if CIRCUITPY && !(defined(__unix__) || defined(__APPLE__))
 #include "shared-bindings/supervisor/__init__.h"
 #endif
 
 #include "supervisor/shared/translate/translate.h"
 
-#if MICROPY_PY_UASYNCIO
 
 // Used when task cannot be guaranteed to be non-NULL.
 #define TASK_PAIRHEAP(task) ((task) ? &(task)->pairheap : NULL)
```speculative fix for the failure here: https://github.com/adafruit/circuitpython/actions/runs/5852002423/job/15863643807?pr=8281 by preventing `supervisor/__init__.h` being included if UASYNCIO isn't turned on, as it should not be in mpy-cross.
#

otherwise, the conditional should be extended , maybe || defined(_WIN32), I would have to refresh my memory as to what the "standard win32 define" is.

tulip sleet
#

I will try that.

#

first locally on a non-windows build, or did you do that already?

#

i was thinking maybe we should put #include "supervisor/shared/translate/translate.h" into something like py/runtime.h. It is a change that appears everywhere, sometimes the only change in what otherwise would be the same upstream file

#

tested on metro m4 build and pushed

onyx hinge
#

or misc.h? that's where MP_ERROR_TEXT is in micropython

tulip sleet
#

yes, that makes more sense; I was thinking about where the mp_raise* routines were

manic glacierBOT
onyx hinge
#

first doc build problem may be a missing space? ``` Encode binary data in base64 format, as in RFC 3548 <https://tools.ietf.org/html/rfc3548.html>_. Returns the encoded data

  • followed by a newline character if newlineis true, as a bytes object.
  • followed by a newline character if newline is true, as a bytes object.
#

there are additional doc building errors that occur after that one

tulip sleet
#

i did not run a doc build locally. I can work on that.

#

hmm listing git files failed - pretending there aren't any

onyx hinge
#
/home/jepler/src/circuitpython/docs/library/framebuf.rst: WARNING: document isn't included in any toctree
/home/jepler/src/circuitpython/docs/library/micropython.rst: WARNING: document isn't included in any toctree
/home/jepler/src/circuitpython/docs/reference/mpyfiles.rst: WARNING: document isn't included in any toctree
docs/library/builtins.rst|36| WARNING: 'any' reference target not found: python:bytes                           docs/library/builtins.rst|227| WARNING: 'any' reference target not found: python:SystemExit
docs/library/builtins.rst|233| WARNING: 'any' reference target not found: python:TypeError
```the other "warnings" I get, which I think are all treated as fatal errors by the build process
onyx hinge
tulip sleet
#

tnx

onyx hinge
#

or at least don't worry about it right now. I think it has to do with how the typing package is a bunch of generated files, not git files

tulip sleet
#

also the older jobserver warning

#

my goodness, I've be reading that as "j-observer" instead of "job-server" forever, due to -j -j + observer

#

we had

    |see_cpython| `bytes`.

upstream has

    |see_cpython| `python:bytes`.

which does not seem to work for us

onyx hinge
#

oh we probably need to list it in our .. something in the doc config

#

intersphinx?

#

intersphinx_mapping = {"cpython": ('https://docs.python.org/3/', None), we have this mapping, so it'd have to be cpython:bytes?

tulip sleet
#

yes, that's what I am thinking. I think we might have cpython instead of python. I seem to remember dropping the c.... yes, exactly. I would rather drop the c so upstream is unchanged

onyx hinge
#

OK, makes sense to me

#

@idle owl oh and fwiw I looked through learn but didn't see any other cases that looked like r, g, b = colorwheel...

misty garnet
#

trying Blinka with the adafruit FT232H board:
AttributeError: module 'adafruit_platformdetect.constants.boards' has no attribute 'ORANGE_PI_4'

misty garnet
#

this is with Blinka 8.2

tulip sleet
misty garnet
#

ok, thought I did, but I'll move it there

onyx hinge
#

pip3 install --upgrade Adafruit-PlatformDetect

misty garnet
#

yeah, thanks, that did it. I had an old blinka installation and that must not have been updated recently

midnight ember
#

@idle owl I have an example using colorwheel that Ventrue helped write but it does use red_fade=(full_range>>16)&255 that Jepler mentioned. It works... but I don't know why that works.

idle owl
#

I'm not concerned.

#

This was a fine solution.

midnight ember
#

If you just need a working example, I have one.

idle owl
#

Thank you though!

midnight ember
onyx hinge
#

@midnight ember the hand wavy explanation is "it's like taking 2 digits out of the middle of a 6-digit number, but in binary"

midnight ember
#

I understand every single line and why everything works except that one line added by Ventrue. No clue what that syntax is doing.

#

Yes that syntax looks like πŸͺ„ to me. If it works it works.

onyx hinge
#

the decimal equivalent is (x // 1_00_00) % 100 but for the sake of a tiny bit of efficiency in binary arithmetic it's written with >> instead of // and & instead of % (and the values are different)

midnight ember
#

had no idea it was breaking it down into binary. i guess everything becomes binary at some point.

onyx hinge
#

well and it's taking the left 2 digits not the middle 2 digits

midnight ember
#

ohhh because 8+8= 16 = 2 digits. now it makes sense.

#

that is some super efficient snazzy code.

candid sun
#

<@&356864093652516868> We'll have our weekly meeting in about 95 minutes from now in this text channel and in the circuitpython voice channel. Please take the time to add your notes in advance to the document: https://docs.google.com/document/d/16vLRTp2Bu2ILsgFtmQZ764mjPu3NpBfqv24BjlpqNjs/edit -- I look forward to everyone's updates!

onyx hinge
#
>>> hex((f >> 16) & 255)
'0x12'
>>> hex((f >> 8) & 255)
'0x34'
#

shifting 16 bits = shifting 4 hex digits

midnight ember
#

that's a little higher level for me to understand, thank you. πŸ€—

onyx hinge
#

@midnight ember just looking at your status update, I dunno if you're aware that the "serpentine" argument is intended for 'stacked, but each successive display is rotated 180 degrees' layouts. This doesn't require as long of a cable. It looks like some documentation is missing so I am not surprised that you didn't guess this.

manic glacierBOT
turbid radish
#

sorry about that

onyx hinge
#

cpython is a version of circuitpython designed to run on huge computers called "servers"

midnight ember
#

and esp32 linux distros?

thorny jay
onyx hinge
#

@thorny jay from what I understood in an internal meeting, the linux kernel, or maybe the micropython port for it, does not have gpio support. it'd be cool if someone added it though

#

no idea if that's simple or tragically complex though

lone axle
turbid radish
#

No one has seemed to use that hashtag yet 😦

lone axle
tulip sleet
#

i can post on the @circuitpython Mastodon account

turbid radish
#

awww

tulip sleet
#

we can change the order of that in the meeting template

midnight ember
#

harder to include some media in an email vs a mastodon post, it's easier for me to tag circuitpython on mastodon.

cunning orchid
onyx hinge
#

@midnight ember post where you want and then follow up with an e-mail for more reliable attention?

midnight ember
#

can do that sure, i have some upcoming projects hoping to tag.

tulip sleet
#

@turbid radish could you send me a link of a social media post I could crib from? Thanks

thorny jay
#

Those git guide are actually great. I always return to them.

midnight ember
#

figured inverting a row would make things more difficult. thank you.

onyx hinge
#

live and learn πŸ™‚

#

and thank phil b for implementing the feature, I think it was a bit brain-melting to write.

manic glacierBOT
slender iron
#

❀️

midnight ember
#

this community is so amazing. if i could give hugs to everyone for everything they do every week it would take about 5 minutes.

thorny jay
#

@onyx hinge I backported a second board, the metro-esp32s3... but I don't have the hardware, so I guess @gilded cradle will need to have a look.

gilded cradle
#

@thorny jay I don't have the hardware either. Ladyada tested for me.

onyx hinge
#

ooh I can't wait for that guide. who'll be jamming out for the project video?

slender iron
#

I have a metro s3

turbid radish
#

Thanks @candid sun - lots of retro folks want to tinker with the joystick guide

thorny jay
gilded cradle
#

πŸ™‚

gilded cradle
cunning orchid
onyx hinge
#

based on the state of the documentation I am not surprised you overlooked the option, don't be harsh on yourself πŸ™‚

midnight ember
#

looking forward to all the activities for CP day. i'll definitely be there foamyguy to learn stuff from the game jam.

#

not sure what message board is but sounds interesting

slender iron
#

πŸ–οΈ

onyx hinge
#

we should see how many synthio voices can be accommodated on the 1060 .. 48? 96? 😜

#

though in MHz it's not much faster than the 1010 is it?

midnight ember
#

My brain still needs πŸ–οΈ just fromwatching your deep dive on the IDF merge.

slender iron
#

600 mhz vs 500

onyx hinge
#

and on Friday!

slender iron
#

1 MB SRAM πŸ™‚

thorny jay
#

Thank you for hosting.

onyx hinge
#

ttyl, thanks all

turbid radish
#

Thanks Liz!

random junco
#

thanks Liz!

gilded cradle
#

thanks everyone

lone axle
#

Thanks for hosting Liz! Have a good week everyone!

midnight ember
#

Thank you for hosting Liz. Have a great week everyone!

cunning orchid
#

Thanks!

ember iris
#

Thanks all! Have a good one!

candid sun
#

thanks folks!

manic glacierBOT
midnight ember
#

@onyx hinge No idea how I missed that guide. Also read that my 10A PSU likely won't be enough. doh.

buoyant lagoon
#

i need to get back to trying to build circuitpython on my system.... let me see what was missing

midnight ember
#

thank you for that link, saved me from a lot of questions. ❀️

manic glacierBOT
tulip sleet
#

@gilded cradle <#circuitpython-dev message> user had an old version of platformdetect and FT232H did not work. The requirements.txt says Adafruit-PlatformDetect>=3.13.0, which is pretty old. jepler suggested an upgrade, which worked. Should the requirements.txt be bumped?

#

tnx

slender iron
buoyant lagoon
#
root@1eadd933a805:/circuitpython/ports/raspberrypi# make BOARD=raspberry_pi_pico V=2
GEN build-raspberry_pi_pico/genhdr/mpversion.h
python3 ../../py/makeversionhdr.py build-raspberry_pi_pico/genhdr/mpversion.h
Cannot determine version.

CircuitPython must be built from a git clone with tags.
If you cloned from a fork, fetch the tags from adafruit/circuitpython as follows:

    make fetch-tags
make: *** [../../py/py.mk:242: build-raspberry_pi_pico/genhdr/mpversion.h] Error 1
root@1eadd933a805:/circuitpython/ports/raspberrypi# python3 ../../py/makeversionhdr.py build-raspberry_pi_pico/genhdr/mpversion.h
Cannot determine version.

CircuitPython must be built from a git clone with tags.
If you cloned from a fork, fetch the tags from adafruit/circuitpython as follows:

    make fetch-tags
#

looks like python is upset for some reason

#
root@1eadd933a805:/circuitpython# make fetch-tags
git fetch --tags --recurse-submodules=no --shallow-since="2023-02-01" https://github.com/adafruit/circuitpython HEAD
fatal: detected dubious ownership in repository at '/circuitpython'
To add an exception for this directory, call:

        git config --global --add safe.directory /circuitpython
make: *** [Makefile:339: fetch-tags] Error 128
#

ah, docker is confusing git

manic glacierBOT
slender iron
#

I don't know if anyone builds in docker

#

I know a few folks use WSL

buoyant lagoon
#

docker seemed the simplest option for my distro

#

got past the git issue, and now i'm missing the gcc, grabbing one linked from the above guide

#
LINK build-raspberry_pi_pico/firmware.elf
Memory region         Used Size  Region Size  %age Used
  FLASH_FIRMWARE:      804512 B      1020 KB     77.03%
             RAM:       52348 B       256 KB     19.97%
       SCRATCH_Y:          0 GB         4 KB      0.00%
       SCRATCH_X:        3248 B         4 KB     79.30%
Create build-raspberry_pi_pico/firmware.bin
Create build-raspberry_pi_pico/firmware.uf2
Converted to uf2, output size: 1609216, start address: 0x10000000
Wrote 1609216 bytes to build-raspberry_pi_pico/firmware.uf2
root@1eadd933a805:/circuitpython/ports/raspberrypi# make BOARD=raspberry_pi_pico V=1 -j32
#

that looks like it worked?

#
      iInterface              4 CircuitPython CDC control
      iInterface              5 CircuitPython CDC data
      iInterface              6 CircuitPython Mass Storage
      iInterface              7 CircuitPython HID
      iInterface              9 CircuitPython Audio
      iInterface              8 CircuitPython MIDI
#

yep, that looks like progress

#

ttyACM0, and sdc

#
0;�🐍Done | 8.2.0-45-g75ba17e84-dirtyAuto-reload is on. Simply save files over USB to run them or enter REPL to disable.

Press any key to enter the REPL. Use CTRL-D to reload.
0;�🐍REPL | 8.2.0-45-g75ba17e84-dirty
Adafruit CircuitPython 8.2.0-45-g75ba17e84-dirty on 2023-08-14; Raspberry Pi Pico with rp2040
>>> 
>>> 
#

next step then, would be to find that usb cable i cut with a 12v SLA battery, lol

#

a few years back, i dropped that battery, and it sliced a usb cable clean in 2, like i had used scissors

#

and i cant throw anything out, lol

#

better to use a cable i already cut up (by accident) then to cut another one up for PIO-usb

slender iron
#

adafruit has cables that break out the wires too

buoyant lagoon
#

ah, that could work too, but id need to wait on shipping

#

i suppose i could just solder that 2nd cable to a pair of 1x4 headers, and use a breadboard to turn it into a Y for the sniffer

#

and i can always not plug in half, to reduce the stub when using it for PIO-USB

slender iron
#

let me know how that sniffer works. I was thinking it'd be cool to pipe it into wireshark

buoyant lagoon
#

after getting the PID toggling wrong with MSD, i can see how much value a proper analyzer adds

#

something that just dumps packets wont flag things like getting DATA0/DATA1 backwards

#

but then again, wireshark seems to operate at a higher level, and wont show that either

#

i also just had a crazy idea....
HS usb, identifies itself by giving short chirps after reset, after first identifying itself as FS

#

if i slap some low-pass filters on the usb lines, and mess up those chirps, could i cause something to fail to identify as HS, but still function as FS?

slender iron
#

screenshot there shows a USBLL analyzer

buoyant lagoon
#

which screenshot?

slender iron
buoyant lagoon
slender iron
#

yup, two different projects (non-lite does high speed)

#

but is an fpga + fx2

buoyant lagoon
#

but in theory, there is no reason the lite cant talk to wireshark as well

#

it just cant capture HS

slender iron
#

ya, that's my thinking too. I briefly looked for wireshark "read from serial file" but didn't see anything

#

may need a small shim to capture pcapng packets from serial

buoyant lagoon
#

in the past, ive made a wireshark plugin for decrypting and disection packets from the tox protocol

#

so i have some experience with wireshark internals

#

the biggest problem, is that while wireshark allows out-of-tree plugins
it doesnt expose headers for building them

#

so you have to build wireshark from source, and then reuse that left-over source tree

slender iron
#

lunchtime for me. usb talks should probably move to #tinyusb

buoyant lagoon
#

and it tends to break on every version update

manic glacierBOT
#

I thought I update this now that I appear to have a work around. By increasing the bytearray to 65507 (maximum udp payload size) for holding the udp payload I no longer get the hardware failure fault. But instead I get a Internal watchdog timer expired fault anywhere between 17 and 31 hours. I can work around that by using the safemode.py file to reset the esp32. Now that number maybe arbitrary. e.g maybe less would work also, but I just stuck with it since I can around the hardwar...

candid sun
#

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/1DMsb91O4e6KFiV7sn0TroXW4g6Dr9yukYOOC_vaCMto/edit

onyx hinge
#

@tulip sleet speaking of tests we'll want to tend to the fact that more tests are skipped, after dealing with the failed tests. The skip count went from 30 to 92 according to a quick check locally

tulip sleet
#

I am diffing the test output, yes.

onyx hinge
#

I can look at the viper ones if you like

#

I dunno what you have started on wrt the tests

tulip sleet
#

I just started looking at the tests a few minutes ago. I ran make test on the tip of adafruit/circuitpython main, and there are failures, including your new synthio tests. I am confused by this -- I thought I would see all pass and skip. Maybe I am running the tests wrong

onyx hinge
#

make VARIANT=coverage test

tulip sleet
#

aha. my next step was to look at the yml πŸ™‚

#

i'd be happy for you to look at the failures, starting with viper. I did 3 or 4 12-hours days on the merge, and am a bit fried. I could look at some of the skips

#

i already tried to turn off the viper tests, so new eyes on that would be good. That's the (!CIRCUITPY) stuff I added in mpconfigport, I think (it was late last night)

mental nexus
#

Jepler - looking forward to see how you get over the dot clock display hurdles on the ESP32-S3 especially the DMA and PSRAM constraints, hope I will be able to understand. Also, I’m interested how portable you expect it to be for new chips (eg ESP32-P4 and beyond).

onyx hinge
tulip sleet
#

getenv test is failing

onyx hinge
#

I can look at that next

#

+ImportError: no module named 'os' huh

tulip sleet
#

:raised eyebrows:

#

note that I removed btree and framebuf, so those tests will be skipped

#

out for a walk

#

i started to look it up, but I think you know already: how do you run a single test?

onyx hinge
#

yes

#

make VARIANT=coverage TEST_EXTRA=micropython/viper_addr.py test

#

from ports/unix

onyx hinge
#

I'm stopping for now πŸ™‚ we can talk tomorrow if I decide to work.

manic glacierBOT
manic glacierBOT
#

oops did "fix 18 tests" make something worse? If you let me know what I'll get it fixed when I am working.

No, I applied the patch wrong (I was in the wrong directory), so it only patched some of the files, not all of them. I wasn't sure I wanted to do a force push, so I reverted, reapplied the patch, and just pushed again. I hadn't pushed since earlier this evening because I was working on the async tests.

#

FYI, since this issue was raised we (MicroPython) have added a "sub version" along with the main "mpy version". (@jonnor refers to this above, i.e. the current version is 6.1).

So now both the runtime and .mpy files have a version and sub version. As long as the main version matches, a bytecode .mpy file will work. To load a .mpy with native code (i.e. it has an arch set in its header) then the sub version must also match. cc @jepler @dhalbert this might be relevant when you're merging v1....

unreal wadi
#

I'm a little bit further with my usb_host test on RPi Pico. But I'm getting an exception usb.core.USBError: No configuration set now.

Maybe @slender iron has an idea why?

manic glacierBOT
#

CircuitPython version

adafruit-circuitpython-adafruit_proxlight_trinkey_m0-en_US-8.2.3.uf2 with proximity trinkey 5022

Code/REPL

# Copied and pasted the code form here 
# https://learn.adafruit.com/adafruit-proximity-trinkey/proximity-spacebar-game

# and here:
# https://learn.adafruit.com/adafruit-proximity-trinkey/proximity-midi-controller

# The last one to worked for a bit, but not all the time. It didn't run in Thonny though. 
# I had to rename ...
manic glacierBOT
onyx hinge
manic glacierBOT
brazen hatch
#

Hadn't made a core PR is so long, so decided to fix it myself. It's a tiny one, but works. Enjoy.
Let's hope this one doesn't leave longstanding bugs that haunt my very existence for years to come.

tulip sleet
brazen hatch
#

kk, thanks for letting me know!
btw, is the esp stuff in need of testing?

tulip sleet
#

not yet, Scott has just started working on ti

#

microdev did a lot of the work a long time ago and we are picking up where that left off

brazen hatch
#

I took a good read, my brain imploded, and never touched it since.

#

I can only do small stuff really. Not that comfortable with core just yet.

manic glacierBOT
#

Thanks for working on fixing this issue!

Unfortunately, I don't think the fix is correct / complete.

In testing with this PR, I was able to get two different kinds of misbehavior, apparently depending on whether I had a code.py or not.

In one case, after I did board.SPI().deinit() and exiting the REPL, my code.py restarted and the ValueError was raised from an arbitrary spot:

Adafruit CircuitPython 8.2.0-77-g8534daeb87 on 2023-08-15; Adafruit Camera with ESP32S3
>>> board.DI...
tulip sleet
manic glacierBOT
#

In one case, after I did board.SPI().deinit() and exiting the REPL, my code.py restarted and the ValueError was raised from an arbitrary spot

The way I implemented it, it should only be raised on the next screen write. Aka, the next full line.
It may be that the data is still written while the display is not refreshing, causing the behaviour you saw.
I didn't read the whole displayio source.

In the other case, I got a Safe Mode reset

Here, it seems like the error was raised out...

tulip sleet
#

@onyx hinge Getting the asyncio tests to work involves paying some technical debt. generators used to be function bytecode objects wrapped in a generator object. The person who added async/await built on that (PR #3540 [EDIT], Oct 202), and added a boolean flag. that the generator was a coroutine. But about five years ago MicroPython removed the wrapper object, and just changed the type. Our merging did not ever pick up that change.

There is no room in the function bytecode object to add a flag, so I am thinking about adding a new type that is a coroutine, like the generator type, but different identity to distinguish between the two. I think this is the easiest way to bring this up to date. Did you work on the generator stuff in the past?

onyx hinge
#

@tulip sleet that rings some vague bells. I know we did coroutines "differently" because __await__ vs __next__ as an attribute name was important to us. And that our difference also led us to have a different bytecode format for mpy files (oof) and is why we have a different bycode magic number than micropython

tulip sleet
#

your last sentence: do you mean we are behind, or we diverged in mpy format? We can talk on audio if you are up to it

onyx hinge
#

we diverged

#

I'm trying to find the relevant PR. but sure we can voice or video in a bit.

tulip sleet
#

sure, ping me after your research

onyx hinge
#

oh that's the PR you intended to cite, but had a transposition error

#

I'm thining of MP_SCOPE_FLAG_ASYNC

tulip sleet
#

i did not track down MP_SCOPE_FLAG_ASYNC yet, I was assuming it was MicroPython, but maybe not

#

hmm, not in their repo

onyx hinge
#

no, it's ours

#

OK I'll make tea and then we can get on a chat

manic glacierBOT
onyx hinge
#

@tulip sleet whenever you're ready πŸ™‚

manic glacierBOT
#

Two options come to mind:

(1) Create wifi.radio.ap for all of the AP-specific functions, and since this is breaking for AP, we could also use the opportunity to simplify those function names (remove _ap). Leave station functions at the wifi.radio level.

(2) Create wifi.radio.ap. and wifi.radio.station.. Functions common to both (e.g., wifi.radio.enabled) stay at the wifi.radio. level. This may be more intuitive, but breaks everything (user code, examples, guides, etc.).

onyx hinge
#

@danh I'll work on exception_chain and vfs_abc tests

manic glacierBOT
#

Now if the spi bus is deinit'ed the display is not reset.
The ValueError was removed. Having a surprise ValueError on a print() is not a good idea.
I suggest we put there a new serial message instead (I am not going to decide the content of said message).

Now doing:

import board
board.DISPLAY.auto_refresh = False
board.SPI().deinit()
^D

Results in a hang. I have no clue where. No jtag on S3.

I should note that properly solving this edge case will take up a lot of code...

dull blade
#

anyone around?

spare jacinth
#
  1. this is a development channel, i guess you are looking for help and any #help... channel would better suit
  2. just ask the thing (https://dontasktoask.com/)
#

oh, crossposted on help-cp too πŸ™ƒ 🀦

slender iron
unreal wadi
onyx hinge
#

@tulip sleet looking at the basics_sys_tracebacklimit failure now. probably we need to be checking that value but aren't yet

tulip sleet
onyx hinge
#

actually it looks like the limit is imposed when grabbing the traceback, not when printing it. interesting.

slender iron
#

@half sedge it may be worth getting you a debug build for usb host testing

onyx hinge
#

It looks like 1.19 changed the exception object representation extensively, but the merge 1.19 branch seems to have kept the prior layout. Just looking at mp_obj_exception_t in objecxcept.h in 1.19 and in your branch @tulip sleet

#

was that deliberate or an oversight?

tulip sleet
#

if it's safe to switch to their new format, that would be fine. We had a lot of our own code

onyx hinge
#

yes

tulip sleet
#

i think I did not realize they had changed the format in v1.19.1, but thought that the changes were due to new traceback.

onyx hinge
#

they are quite different aren't they πŸ˜•

#

OK adding traceback limiting was not too tough

#

my newest gist has 5 patches in it; let me know how you would like to handle that. If we coordinate I can push them to your branch. now at: ```895 tests performed (37610 individual testcases)
877 tests passed
39 tests skipped: [snipped]
18 tests failed: async_await extra_coverage import_mpy_invalid import_mpy_native import_mpy_native_gc native_gen uasyncio_await_return uasyncio_basic uasyncio_event uasyncio_event_fair uasyncio_gather uasyncio_gather_notimpl uasyncio_lock uasyncio_lock_cancel uasyncio_task_exception uasyncio_wait_for uasyncio_wait_for_fwd ubinascii_b2a_base64

This contrasts to 56 tests skipped in today's main branch so we're in good shape there.
#

the mpy tests probably need to be updated because we use different magic numbers than upstream.

thorny jay
tulip sleet
#

i am not done with the async changes yet

onyx hinge
#

OK if you are comfortable with that I can do it.

manic glacierBOT
onyx hinge
#

probably less terrible than you getting acquainted with git am as long as we're coordinated

tulip sleet
#

saves me time!

onyx hinge
#

OK done

#

I'm going to take a break. later or tomorrow I'm going to start with one of these: extra_coverage import_mpy_invalid

slender iron
#

I think it goes out serial though

idle owl
#

@tulip sleet I see that fetch-submodules isn't there anymore, and now it is fetch-all-submodules. Is that what I should be running to prepare a change to CP? That said, I did a pull and my working tree is clean according to git and usually I was running the submod thing to clean that up before making changes. Do I not need to do it anymore or something?

tulip sleet
idle owl
#

Oh rad ok.

#

Thanks.

#

@tulip sleet Should I be getting permission denied trying to run ./esp-idf/export.sh? I installed the IDF just now. Does it require sudo?

#

Wait, should I be running that or source it?

#

source did something. Trying it with that.

tulip sleet
#

Right, you need to do β€˜source’ because it sets environment variables

idle owl
#

@tulip sleet FYI, if you're running Python 3.11, and you do the ESP-IDF set up, it will repeatedly fail with dependency issues. This is not noted anywhere in the documentation that I can find, unless there is something somewhere more broad saying you have to use <= 3.10 to do anything with building CP in general.

tulip sleet
#

I just heard about this a day or two ago. I will add a warning. I think other builds are ok

idle owl
#

Ok. Thanks.

#

In other news, I can build for ESP for the first time ever, and this is not the first time I've tried.

#

I need to update the board def for the Metro ESP32-S3.

#

So there's a reason.

thorny jay
# idle owl I need to update the board def for the Metro ESP32-S3.

So tannewt was right... I was too fast in proposing a backport to 8.2.x. Any change you do against main will have to be done against 8.2.x.
I am no expert in git, and mostly used your guide (except for git cherry-pick that is maybe not discussed there) but in the PR, I documented the steps I used to do that PR against 8.2.x: https://github.com/adafruit/circuitpython/pull/8280

GitHub

This is a totally untested backport of metro esp32s3 from main to 8.2.x by applying the 4 PR (that touch the file for that board) from @makermelissa in the same order as they were originally applie...

idle owl
thorny jay
#

Backporting with cherry-pick make sense for me beause I am not the author of those board support, so I wanted to maintain the original credit. But you can also do two PR and just push your version of the files you will change to both branch.

idle owl
#

Oh fair enough. Good call.

#

I would have tried to make it more difficult, but I believe you are correct.

thorny jay
#

Both option are easy, my solution only require to have the sha1 hash of the change you want to reapply to another branch, and you can copy that from the github UI.

idle owl
#

I think I can instigate it locally ok. It's such a simple change. I could pretty easily "redo" it for the 8.x.x branch.

#

I would prefer to level up my git skills.

#

But unfortunately, my priorities are elsewhere. So the simplest option is the one I have to use.

#

So... yeah.

#

@candid sun Greetings. Question! I am trying to use the example you wrote for the SD Card BFF. As long as I have the proper pins, it should work on a microcontroller with a built-in SD Card, yes?

idle owl
#

Ok, then something else is going on here.

#

Thanks for verifying.

#

Well maybe not.

#

It's dumping me into safe mode.

#

I commented out the function and prints at the end, and it is working. So... set up isn't borking it. Something in the function is.

#

Wait...

#

No, it erased the entire drive and renamed it to NO NAME.

#

@slender iron Have the mpy changes been added to main yet?

slender iron
#

nope

idle owl
#

I'm getting safe mode because Internal watchdog timer expired.

#

I haven't seen that one before, and have no idea what might cause it.

#

Metro ESP32-S3

#

Running an SD card example. Fresh build from main with a new pin in it.

slender iron
#

it's a pretty nasty error. I'm not sure what would be causing it

idle owl
#

Oof.

#

Ok.

slender iron
#

basically some code is hanging that shouldn't

idle owl
#

I added a new pin, I verified it with dir(board) and dir(microcontroller.pin). Is that sufficient to PR it? Or should I file an issue about this first and hold off on the PR?

#

Ooh, let me see if I can toggle it with digitalio.

slender iron
#

I think it's fine to PR a pin change. That wouldn't cause the problem. Filing an issue for the watchdog would be good

idle owl
#

Yeah I knew to file the issue for sure.

#

Thanks.

idle owl
#

Got it toggling! Had to try all the pins on the SD card slot with the Saleae running to find it, but it's working. Also, haven't used the Saleae in ages. So that was nice.

manic glacierBOT
idle owl
#

@slender iron I built from 8.2.x to verify, and if I check the REPL, it says Adafruit CircuitPython 8.1.0-beta.0-255-g7567f7170-dirty. The hash is correct, but not the version. Is that right?

#

As in it matches the last commit on GitHub

slender iron
#

that can be right if your local git doesn't have the tag

idle owl
#

Hmm ok

#

It doesn't.

#

Thanks.

#

Wait

#

Can I commit from the proper previous commit without the tag and PR it and have it work?

slender iron
#

git fetch --tags

idle owl
#

Thank you

slender iron
#

yup, you don't need to have the tag locally

idle owl
#

Ok got it

#

Wow dealing with ESP boards is a pain.

idle owl
#

Whew. I think I got it right.

#

Now the question is how badly did I hose my circuitpython clone πŸ˜‚

manic glacierBOT
idle owl
#

@slender iron If it says it can automatically merge to the 8.2.x branch, is it likely I got it right?

slender iron
#

yup, seems right

idle owl
#

Rad. Thanks.

manic glacierBOT
idle owl
idle owl
#

Hmm. Running code from the REPL can still cause safe mode, correct?

#

Because running these lines of code in the REPL seems to be fine.

#

Nevermind.

#

I guess I hadn't run that exact iteration yet.

#

Safe mode from the REPL. Got it.

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.2.0-75-gc75640eb0-dirty on 2023-08-15; Adafruit Metro ESP32S3 with ESP32S3 (built from main with SD_CS pin added)

Adafruit CircuitPython 8.1.0-beta.0-255-g7567f7170-dirty on 2023-08-15; Adafruit Metro ESP32S3 with ESP32S3 (built from 8.2.x with SD_CS pin added)

Code/REPL

import busio
import digitalio
import board

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
cs = digitalio.DigitalInOut(board.SD_CS...
idle owl
#

Oh snap. TIL you can put formatted code in an issue title on GitHub.

#

I did it simply to differentiate it. I didn't expect it to render.

mental nexus
unreal wadi
slender iron
#

you'll have to save, eject and restart for now

unreal wadi
slender iron
#

I may have a change somewhere that adds slightly better error messages

tulip sleet
#

@onyx hinge I fixed the basic asyncio stuff by adding a new type, as we described yesterday. The only difference between the types was __await__(). it did still need the iter operations to act like a coroutine. I will work on the uasyncio failures in a little while; hope that's just a naming issue.

onyx hinge
#

@tulip sleet excellent! Let me know when you've pushed that, the "extra_coverage" test depends on the list of built in modules so its .exp file will change again depending on whether the module name is really _uasyncio or _asyncio.

onyx hinge
#

@tulip sleet I'm going to just mark the "native module" test as known not-working. maybe someone else will fix it.

#

so I've got a suite of changes locally: 7f1b946a3c (HEAD -> merge-micropython-v1.19.1) Skip the import_mpy_native_gc test, it is known to be broken a55e6fe55e Allow natmods to build again (they don't work, however) 9d7754842b update test result e8476f0a66 update invalid-mpy test and result fffe5fd53e Re-add usercmodule sources & endorse new extra_coverage output and these tests still fail async_await native_gen uasyncio_await_return uasyncio_basic uasyncio_event uasyncio_event_fair uasyncio_gather uasyncio_gather_notimpl uasyncio_lock uasyncio_lock_cancel uasyncio_task_exception uasyncio_wait_for uasyncio_wait_for_fwdIf you would like me to look at something more, let me know. Otherwise I'll just rebase this once you're done with uasyncio, update the extra_coverage test result again, and push when it's OK

#

and I'm fine with making native_gen also SKIP

tulip sleet
#

@onyx hinge I am getting different results with the uasyncio tests; it's not just a naming problem, so still investigating

onyx hinge
#

oof OK. let me know if you want to get more in detail, though I'm having a long lunch with friends today (about 12 to 2 my time / 1 to 3 yours) so I'll be gone for a chunk of time

tulip sleet
#

i am donating blood 1:30pm on so similar

hidden rain
#

About a year ago, I proposed and contributed analogbufio. I'm not sure how many use this feature, yet I use it a great deal. I have noticed an issue, but not sure if its the implementation, or RP2040 ADC, or CPy. I i try to use the feature multiple times, the wait period between uses is important. If the wait period is too short, the buffer is filled with noise. Any ideas?

tulip sleet
tulip sleet
hidden rain
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

This PR exists solely for the purpose of fixing the hardfault.
As a matter of fact, deiniting a board.SPI bus breaks it completely, even across reloads.

So.. we are not fixing something broken into something working.
We are fixing something very broken, into something less broken.

A complete "fix", would be outright denying the deinit from going through.
A board bus property should perhaps not be "deinit-able" at all.
Or any SPI bus would require no displays to be attached to it to ...

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.2.3 on 2023-08-11; Raspberry Pi Pico with rp2040

Code/REPL

import usb_hid

REPORT_DESCRIPTOR = bytes((
    0x06, 0x00, 0xFF,  # Usage Page (Vendor Defined 0xFF00)
    0x09, 0x01,        # Usage (0x01)
    0xA1, 0x01,        # Collection (Application)
    0x06, 0x00, 0xFF,  #   Usage Page (Vendor Defined 0xFF00)
    0x09, 0x01,        #   Usage (0x01)
    0x75, 0x10,        #   Report Size (16)
    0x95...
#

Tried that. This is my code in code.py
'''
import usb_hid

REPORT_DESCRIPTOR = bytes((
0x06, 0x00, 0xFF, # Usage Page (Vendor Defined 0xFF00)
0x09, 0x01, # Usage (0x01)
0xA1, 0x01, # Collection (Application)
0x06, 0x00, 0xFF, # Usage Page (Vendor Defined 0xFF00)
0x09, 0x01, # Usage (0x01)
0x75, 0x10, # Report Size (16)
0x95, 0x01, # Report Count (1)
0x91, 0x02, # Output (Data,Var,Abs,No Wrap,Line...

manic glacierBOT
#
#

So currently my boot.py reads
`import usb_hid

REPORT_DESCRIPTOR = bytes((
0x06, 0x00, 0xFF, # Usage Page (Vendor Defined 0xFF00)
0x09, 0x01, # Usage (0x01)
0xA1, 0x01, # Collection (Application)
0x06, 0x00, 0xFF, # Usage Page (Vendor Defined 0xFF00)
0x09, 0x01, # Usage (0x01)
0x75, 0x10, # Report Size (16)
0x95, 0x01, # Report Count (1)
0x91, 0x02, # Output (Data,Var,Abs,No Wrap,Linear,Preferred ...

manic glacierBOT
manic glacierBOT
#

A few notes:

The report descriptor you have above has 232 bytes total of "input" report and 232 bytes of "output" report. ((IN and OUT are with respect to the host.) Your screenshot in the previous post shows that. The usage-page and usage values used in find_device() refer to the top-level device, and don't selectively choose what is inside the Collection. But your IN report length is given as 230, not 232, and the OUT report length is given as 0, not 232.

My understanding is that fo...

manic glacierBOT
#

How did you get the report descriptor? I'm assuming you used some tool for that. Is there documentation for it from the manufacturer? I don't have an explanation for why it seems to be 232 bytes and normally would be restricted to 64 bytes, since the PDF you linked says it's a Full Speed device.

Do you have an understanding of the device protocol, or are you trying to reverse-engineer it?

I do note that the datasheet says:

USB HID (works with native drivers included in Windows, Mac, ...

manic glacierBOT
#

With support for ESP32 and M5Stack devices added, I'd love to see the M5Paper (and its v1.1 and COMM variants) getting some love as well.

Info:

https://docs.m5stack.com/en/core/m5paper
https://docs.m5stack.com/en/core/m5paper_v1.1
https://docs.m5stack.com/en/core/m5paper_comm

The three variants have slight differences in the build (mainly the display being used), but that doesn't make a difference in code.

The base seems to be that of the M5Stack Fire, with some key differences:...

spare jacinth
#

@onyx hinge sorry for the ping, iirc you are working/about to start doing so, on a driver for 24-line screens, let me know if you need some testers, i would also offer help with writing it, but im probably under qualified

#

I have a waveshare display, and a couple of dev boards (not sure how many have 24 pins tho πŸ˜¬πŸ˜†)

manic glacierBOT
onyx hinge
#

@spare jacinth I have been doing some preliminary work on that, if I understand what a "24-line screen" is. Nothing's usable about it yet, though. You can keep an eye out for a PR when it gets ot the stage where I think it's worth others' time to test it. no ETA πŸ“†

spare jacinth
#

I meant those "non smart" displays which are controlled over 24 (well, some more control signals too) parallel lines

#

I recently bought one hoping to write a driver myself, using STM's LTDC peripheral

#

I will also try and PR support for STM32H750, but i probably wont get too far πŸ˜‚

manic glacierBOT
slender iron
#

seems like synth.release() isn't working for me

hidden rain
manic glacierBOT
#

I suspected so - this FR is more for tracking necessities :) I've already pushed a branch on my fork which covers most of the baseline hardware, however since the environment is still somewhat alien to me (not to mention my C-fu being weak AF), I'd love to have some oversight and recommendations. I'll be opening a draft PR soon - would you mind to take a look and point out any obvious issues @tannewt?

hidden rain
slender iron
#

Ah, I'm still passing in the midi number to press but releasing with the note object

manic glacierBOT
onyx hinge
slender iron
#

ya, it is nice for simple testing

onyx hinge
#

and yeah it's not an error to release a note that's not playing, so it would silently do something if the object isn't the same one that was initially pressed

slender iron
#

it holds all the notes creating a huge mish mash

manic glacierBOT
manic glacierBOT
#

I'm not super familiar with mclk. Does its frequency need to be set, or can it be automatically derived? Wikipedia (not the best source I know) says "Master clock [is] typically 256 x LRCLK" while one random datasheet I found shows it varying over specific values from 128fs to 1152fs (https://www.digikey.com/htmldatasheets/production/755129/0/0/1/ak4430.html)

In the iMX case, the audio code derives a reasonable value to generate the bitclock that the WM8960 is ok with. I think it should ...

tulip sleet
#

@onyx hinge just fyi, still debugging the asyncio test failures. I updated the library but I am still getting different results (internal confusion still between generators and coroutines).

#

not stymied yet, just have to figure it out

stuck elbow
#

@lone axle so there is a game jam tomorrow?

lone axle
stuck elbow
#

I have a game I wanted to finish

manic glacierBOT
#

Current status:

  1. Brought over initial state from M5Stack-Fire (which is the same approach used by M5Stack in their sources published for the M5Paper)
  2. Assigned pins manually, without any A/D/GPIO pin naming assignment, purely just functions (this will most likely need to be expanded)
  3. Named and grouped pins based on function, and (mostly) in incremental order, except for where the grouping didn't make it possible (PORT A and PORT B definitions)
  4. Added (commented out) display i...
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.2.3 on 2023-08-11; Adafruit MatrixPortal S3 with ESP32S3
Board ID:adafruit_matrixportal_s3
Library Bundle: adafruit-circuitpython-bundle-8.x-mpy-20230815

Code/REPL

import displayio
import board
import rgbmatrix
import framebufferio

bit_depth = 1
base_width = 64
base_height = 32
chain_across = 2
tile_down = 0
serpentine = True

width = base_width * chain_across
height = base_height * tile_down

...
manic glacierBOT
manic glacierBOT
manic glacierBOT
buoyant lagoon
#
root@d235fe3c2fdb:/circuitpython/ports/broadcom# make BOARD=raspberrypi_zero
firmware/bootcode.bin: No such file or directory
#

how do i trigger a shallow clone, or let it reuse my existing .git like worktrees?

#

ah wait, there is a shallow in .gitmodules ...

#

Receiving objects: 20% (359882/1799407), 2.72 GiB | 62.68 MiB/s

#

ah, found the magic flag, --depth 1

manic glacierBOT
buoyant lagoon
#

and i now have circuitpy running on a pi-zero, without an uSD card!

#
root@d235fe3c2fdb:/circuitpython/ports/broadcom# make BOARD=raspberrypi_zero rpiboot
[clever@amd-nixos:~/apps/rpi/usbboot]$ sudo ./rpiboot -d ../circuitpython/ports/broadcom/build-raspberrypi_zero/rpiboot/
#

with a minor change the makefiles, i can boot it over usb, from another host

buoyant lagoon
#

this will work on the zeros, pi4, and pi400

#

pi4/pi400 has some special differences

slender iron
buoyant lagoon
#

[clever@amd-nixos:~/apps/rpi/usbboot]$ sudo ./rpiboot -l -d ../circuitpython/ports/broadcom/build-raspberrypi_zero/rpiboot/

#

if you run rpiboot with -l, it will loop (not exit when done)

#

slap a button on the RUN header, and whack reset every time you compile

#

and you have the perfect dev cycle

#
[Fri Aug 18 12:17:38 2023] usb 1-9: new full-speed USB device number 34 using xhci_hcd
[Fri Aug 18 12:17:38 2023] usb 1-9: New USB device found, idVendor=0a5c, idProduct=2763, bcdDevice= 0.00
[Fri Aug 18 12:17:38 2023] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[Fri Aug 18 12:17:38 2023] usb 1-9: Product: BCM2708 Boot
[Fri Aug 18 12:17:38 2023] usb 1-9: Manufacturer: Broadcom
[Fri Aug 18 12:17:40 2023] usb 1-9: USB disconnect, device number 34
#

when you connect a zero to your usb port, it will show up as this

#

rpiboot then sends all of the files over, and lets it boot

#

@slender iron so, if i wanted to properly integrate 2d sprite accel into this, where would i edit circuitpython?

slender iron
#

probably shared-modules/displayio

buoyant lagoon
#

and how would i bake some python into it, to run on boot:
CIRCUITPY drive could not be found or created

#

without a uSD card, it has nowhere to store the .py files

slender iron
#

we've never really done that

buoyant lagoon
#

this might still work, if the card is present, but missing bootcode.bin ....

slender iron
#

ya, I think so

#

you may want to replace shared-modules/displayio with a ports/broadcom/common-hal/displayio

#

we have a couple cases where we do that. have a generic version and a port specific one

buoyant lagoon
#

makes sense

#

2 .c files, with a shared .h

#

and then just call whichever implementation knows how the board works

#

same as HCD's in tinyusb

slender iron
#

ya, the .h for the api is usually in shared-bindings

buoyant lagoon
#

it still boots, but it fails to find CIRCUITPY drive

#

how should it be partitioned?

#

supervisor/shared/safe_mode.c ...

#
    // Check whether CIRCUITPY is available. No need to reset to get safe mode
    // since we haven't run user code yet.
    if (!filesystem_init(get_safe_mode() == SAFE_MODE_NONE, false)) {
        set_safe_mode(SAFE_MODE_NO_CIRCUITPY);
    }
buoyant lagoon
#

reading

#

ok, i see the SD interface pins

#

i see it parsing and modifying the MBR

#

@slender iron but its not clear what partition its expecting things to be on

slender iron
#

I don't remember

buoyant lagoon
#

at a glance, i think its expecting the fat to be 256mb? and then it uses "unused" space after that partition!!

#
        // If the second partition exists, then use it (possibly after reformatting it.)
        if (i == 1 && part_sector_count > 0 && part_first_lba > 0) {
            sector_count = part_sector_count;
            first_lba = part_first_lba;
        } else if (i > 1 && part_sector_count > 0) {
            sector_count = 0;
        }
#

ah, thats better

stuck elbow
#

are any of you using os.chdir() in your programs? it seems that the current dir seems to be surviving at least some time after a reload, because if you chdir to a directory that contains a code.py file, and do a reload, it will run that file, instead of the one in /

#

I'm trying to figure out if this is a bug or intentional behavior?

buoyant lagoon
tulip sleet
buoyant lagoon
#
[Fri Aug 18 12:42:19 2023] scsi 8:0:0:0: Direct-Access     Raspberr Zero             1.0  PQ: 0 ANSI: 2
[Fri Aug 18 12:42:19 2023] sd 8:0:0:0: [sdc] 1 512-byte logical blocks: (512 B/512 B)
[Fri Aug 18 12:42:19 2023] sd 8:0:0:0: [sdc] Write Protect is off
[Fri Aug 18 12:42:19 2023] sd 8:0:0:0: [sdc] Mode Sense: 03 00 00 00
[Fri Aug 18 12:42:19 2023] sd 8:0:0:0: [sdc] No Caching mode page found
[Fri Aug 18 12:42:19 2023] sd 8:0:0:0: [sdc] Assuming drive cache: write through
[Fri Aug 18 12:42:19 2023]  sdc:
[Fri Aug 18 12:42:19 2023] sd 8:0:0:0: [sdc] Attached SCSI removable disk


[root@amd-nixos:~]# 

[root@amd-nixos:~]# mount -v /dev/sdc /mnt/
mount: /mnt: mount(2) system call failed: Cannot allocate memory.
       dmesg(1) may have more information after failed mount system call.
[Fri Aug 18 12:45:01 2023] EXT4-fs (sdc): unable to read superblock
#

@slender iron circuitpy does advertise itself as MSD after booting, but i cant mount it, and it lacks a partition table

tulip sleet
#

@onyx hinge I was confused that the uasyncio_task_exception.py test did not exist upstream.

buoyant lagoon
#

weird, i tried to eval board in the REPL, and the screen just blanked, and its not responding

#

import board does the same

#

help as well

#

makes it hard to try to do anything, when everything hangs the system

slender iron
#

it's been a while since I used the broadcom port. it could be broken

buoyant lagoon
#

where could i add more print statements to try and debug it?

#

the CDC uart is at least working

#

if i run anything in the repl (over the cdc uart), the screen clears (but the top line stays)

#

in the uart, it also clears, and doesnt print anything or respond to anything

#

opened the wrong minicom and accidentally discovered, the hw uart also works

#

ok, so it seems to be running pyexec_friendly_repl()

slender iron
#

to print to cdc do mp_printf(&mp_plat_print, <format string>, <args>)

buoyant lagoon
#
        mp_hal_stdout_tx_str("parsing and compiling\r\n");
        ret = parse_compile_execute(&line, parse_input_kind, EXEC_FLAG_ALLOW_DEBUGGING | EXEC_FLAG_IS_REPL | EXEC_FLAG_SOURCE_IS_VSTR, NULL);
        if (ret & PYEXEC_FORCED_EXIT) {
            return ret;
        }   
#

this does print that msg out, and then hangs

#
0000cbe0  20 0a 3e 3e 3e 20 66 6f  6f 0a 70 61 72 73 69 6e  | .>>> foo.parsin|
0000cbf0  67 20 61 6e 64 20 63 6f  6d 70 69 6c 69 6e 67 0a  |g and compiling.|
0000cc00  0a 0a 0a 0a 0a 0a 0a 0a  0a 0a 0a 0a 0a 0a 0a 0a  |................|
*
0000e090  0a 0a 0a 0a 0a 0a 0a 0a  0a 0a 0a 0a 0a 30 3b f0  |.............0;.|
0000e0a0  9f 90 8d 44 6f 6e 65 20  7c 20 38 2e 32 2e 30 2d  |...Done | 8.2.0-|
#

ah, its not clearing the screen

#

its printing over 5kb worth of \n's

tulip sleet
buoyant lagoon
#

i have gotten past the submodule part

tulip sleet
#

just filling in for next time

buoyant lagoon
#

i'm now at the point where it just spams \n's if i try to run anything in the REPL

#
        mp_hal_stdout_tx_str("g\r\n");
        if (exec_flags & EXEC_FLAG_SOURCE_IS_ATEXIT) {
            mp_hal_stdout_tx_str("c\r\n");
            atexit_callback_t *callback = (atexit_callback_t *)source;
            mp_call_function_n_kw(callback->func, callback->n_pos, callback->n_kw, callback->args);
        } else
        #endif
        {   
            mp_hal_stdout_tx_str("e\r\n");
            mp_call_function_0(module_fun);
        }
        mp_hal_stdout_tx_str("f\r\n");
#

only prings g, and e

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.2.3 on 2023-08-11; Fluff M0 with samd21e18

Code/REPL

# /code.py

import supervisor
import os

print("changing directory to /test")
os.chdir('/test')
supervisor.reload()


```python
# /test/code.py

import supervisor
import os

print("inside /test")
print("__file__=", __file__)
print("cwd=", os.getcwd())


### Behavior

Auto-reload is on. Simply save files over USB to run them or ...

#

@makermelissa Yes same, during the process it would hard fault occasionally and reset would help. At some point hard reset happened more and more frequently until it hard faults every single time and cannot be used... at least not with matrix panel related code. I have not tried to go back and do a basic hello world or non-matrix panel related code.

I think Windows itself was detecting the continual hard resets and at some point refused to allow CIRCUITPY to even connect. No Com port in...

tulip sleet
#

@onyx hinge I pushed asyncio fixes. I have a draft PR to the library, and that PR's latest commit is checked out as the submodule. we might leave it that way until the v1.20 merge before updating the library, though anyone using the build would need the PR branch. would need to test the asyncio library against 8.2.3 before merging.

Remaining failing tests are: extra_coverage import_mpy_invalid import_mpy_native import_mpy_native_gc. I think this is all the ones you fixed already but are awaiting my latest push before you rebase?

onyx hinge
#

@tulip sleet OK, I'll rebase my local code and see what's left.

tulip sleet
#

maybe wait until at least the tests run on CI

#

silly pre-commit failure, hold on

onyx hinge
#

and I need to remember to have lunch before we stream again. hangry streaming == nono

tulip sleet
#

yeah, I just ate

onyx hinge
#

locally I have this from make test: ```894 tests performed (37612 individual testcases)
894 tests passed
41 tests skipped: atexit_test btree1 btree_error btree_gc ffi_callback ffi_float ffi_float2 framebuf1 framebuf16 framebuf2 framebuf4 framebuf8 framebuf_palette framebuf_subclass import_mpy_native_gc nanbox_smallint nvm_not_present nvm_present sys_settrace_features sys_settrace_generator sys_settrace_loop uasyncio_micropython uasyncio_threadsafeflag ucryptolib_aes128_cbc ucryptolib_aes128_ctr ucryptolib_aes128_ecb ucryptolib_aes128_ecb_enc ucryptolib_aes128_ecb_inpl ucryptolib_aes128_ecb_into ucryptolib_aes256_cbc ucryptolib_aes256_ecb uctypes_sizeof_od uhashlib_md5 uhashlib_sha1 umsgpack_pack uselect_poll_basic uselect_poll_udp usocket_tcp_basic usocket_udp_nonblock ussl_basic ussl_keycert

#

these are expected skips? uasyncio_micropython uasyncio_threadsafeflag

tulip sleet
#

i don't have those at all. I removed framebuf completely, etc

onyx hinge
#

OK, wonder why I'm not picking that up. I'll run a git clean in tests/

tulip sleet
#

I put back uasyncio_threadsafeflag,

#

i'm having this pre-commit skew again. uncrustify wants to add a space after a comma in a file whose changes I don't have locally. (Kattni added SD_CS pin to Metro ESP32-S3). I don't know why pre-commit in her PR didn't catch that before.

#

i could merge again from upstream, hmm

onyx hinge
#

"pre-commit run --all" picked up changes in a number of files for me, not just one.

tulip sleet
#

i did that too

#

it only changed one file

onyx hinge
#
+            LL_GPIO_SetPinPull(pin_port(self->pin->port), pin_mask(self->pin->number), LL_GPIO_PULL_UP);
#

I agree that space should be there!

tulip sleet
#

yeah, same

#

I will make that change. I just merged from main

onyx hinge
#

OK I'm holding off pushing anything

tulip sleet
#

πŸ˜΅β€πŸ’« was dealing with four different versions of asyncio Python code

#

@onyx hinge many fewer tests are being skipped locally than in CI, hmm...

#

uasyncio are not being skipped locally

#

for example

#

i cleared the CI caches, faintly possible it was the submodule caches??

#

re-running pre-commit and build

onyx hinge
#

I was wondering if the frozen submodule was populated

tulip sleet
#

that would do it too: asyncio import failed

#

so it would SKIP

#

since asyncio commit is on a branch, maybe it's not pulling the branch??

#

will wait for test runs again

manic glacierBOT
onyx hinge
#

Run python tools/ci_fetch_deps.py tests
Target: tests
Submodule tags[Y]: []
Submodule tags[N]: ['extmod/ulab', 'lib/', 'tools/']

#

ci_fetch_deps for tests needs to include some additional submodules

digital shoreBOT
#
adafruit
Owner

.adafruit#0

Members

37,718

Roles

38

Category Channels

8

Text Channels

63

Voice Channels

7

Threads

33

Boost Count

26 Boosts (Tier 3)

tulip sleet
#

ehhh

tulip sleet
onyx hinge
#

yes that may be the minimum set to let the async tests run

tulip sleet
#

go ahead if you feel so inclined

onyx hinge
#

OK, pushed. There will probably still be failures with "native" module tests, we'll need to decide whether to fix or punt but I want to see what happens in CI first

tulip sleet
#

there is definitely unsupported native stuff. objgenerator is not complete w/r/t native

serene token
#

I think I need help compiling CircuitPython for the Rotary Trinkey, with analogio included (and maybe excluding rotaryio). I've compiled before for the QT Py RP2040, but that was around a year ago, and I've forgotten...most of it... I've got the most recent CircuitPython off Github.

So questions:

  • What are my options for controlling what modules are built in?
  • How do I compile for a specific platform (the Rotary Trinkey specifically) and then find the uf2 file for it?
onyx hinge
#

if you're building locally then the uf2 file is in build-<boardname>/firmware.uf2

manic glacierBOT
serene token
#

Awesome! Do I just need to make or do I need to specify which board to build for?

onyx hinge
serene token
#

That helps. I think that covers everything I need. Do you know if the board will have room for analogio if I remove rotaryio, or will I need to exclude more?

onyx hinge
#

I don't know, I'd have to find out by trial and error