#circuitpython-dev

1 messages ยท Page 21 of 1

tidal kiln
#

@tulip sleet it looks like latest version of thonny handles the escape stuff OK now? ip addr shows up in window banner, etc

tulip sleet
#

which is latest version? 4.0.0 handled it at least to the extend of discarding it; I can' tremember if it showed up in the window banner

tidal kiln
#

just updated to 4.0.1

tulip sleet
#

I did say that it works ok in one or more guides or the release notes.

#

so new screenshots is better anyway, for that reason too.

#

sounds good

tidal kiln
#

current guide is for old version. output ended up in window text, not banner

#

yep. also changing guide text.

tidal kiln
#

fyi - the snake emoji is a potential source of grief. getting some Tk related dumps

tulip sleet
#

crashes, you mean?

tidal kiln
#
X Error of failed request:  BadLength (poly request too large or internal Xlib length error)
#

yep

#

don't have time to go down that rabbit hole

tulip sleet
#

ugh, which tool is throwing that?

tidal kiln
#

working around it for now

#

happens when launching thonny

#

with board running web workflow connected

#

disable web work and it launches ok

#

some googling error points to color emoji support issue in Tk

onyx hinge
tulip sleet
#

i didn't know thonny used tk

onyx hinge
#

@tidal kiln what are the details of your linux distribution (ubuntu version etc)

tidal kiln
#

@onyx hinge 20.04.5 LTS

#

found that same nominal solution. but also some two comments later that say "did not work for me"etc.

#

i'm getting thonny running enough for screen caps

#

so just punching thru for now

onyx hinge
#

with any luck it doesn't affect win/mac users

tulip sleet
#

did you try thonny on windows?

tidal kiln
#

nope. would have to dig out the windows tester box.

tulip sleet
#

ah, I thought your putty screenshots were windows

tidal kiln
#

i think limor contributed the windows stuff

tulip sleet
#

i did not see those crashes on 22.04 Ubuntu

#

i think

tidal kiln
#

yah - it could just be me. most likely is.

#

and probably fixable. but just don't want blindly start sudo apt installing stuff. for now.

tulip sleet
#

whenever you get around to upgrading...

onyx hinge
#

on debian stable I get a black & white snake in a simple test program, don't have thonny and a board handy to test with.

tidal kiln
#

yah. i'm weird. i generally don't upgrade. instead i'll do a clean install with latest. and work forward from there.

#

very much not efficient. but upgrades always seem to only 90% work.

onyx hinge
#

I just buy a new computer and put it next to all the old computers. less downtime.

tulip sleet
#

i did too. backed up my homedir, clean install, and put back homedir. I think I removed .gconf and redid all the desktop customizations

tidal kiln
#

yep. or that.

onyx hinge
#

in thonny I get a rectangle instead of a snake

#

on debian stable

#

but I don't really care/mind

manic glacierBOT
tidal kiln
#

@tulip sleet screenshots updated. please take a look.

tulip sleet
#

thankyouverymuch

manic glacierBOT
#

Just thinking out load here. Could it be that we are only using SPI and not QSPI that allows the block to work on our boards....

It is possible, we're not at all sure why we don't see SPI SCK on SPIM3 when VBUS is not powered. But I'm not sure the other folks in DevZone were using QSPI at the time.

Did you choose SPI instead of QSPI so you would have more pins for other uses?

manic glacierBOT
manic glacierBOT
tidal kiln
jaunty juniper
brazen hatch
#

or.. just do it from the repl..

#

far quicker honestly
unplugging stuff abruptly in windows is a recipe for disaster

tidal kiln
#

i doubt they'll be able to figure out accessing repl in their situation

jaunty juniper
#

it should still work by pressing "Serial"

brazen hatch
#

nuke.uf2 ?

tidal kiln
#

so just ignore the "cant find" pop up in Mu?

jaunty juniper
#

there should be an erase for the Feather M0 Express

#

I always get the message that Mu can't find the board because I never name my drives "CIRCUITPY"

#

but the Serial button works

#

(I don't use Mu for editing, only for testing Mu stuff)

tidal kiln
#

ok. easy enough to try that. i also dont use mu.

#

thanks

jaunty juniper
#

by the way, I have not been on the forums since september because I discovered my company registration situation was wrong, and it took that long to figure out the problem, I should be back soon

brazen hatch
#

used mu for transferring stuff to micropy
the reason I stopped using micropy

tidal kiln
#

the nukes are good too. just that theyre specific and there never seems to be the exact one you need for a given situation. or a decoder for what alts work for what boards etc.

manic glacierBOT
brazen hatch
#

the toml library is coming out nicely, reading (with subtables) is done
I just need to test it lots

manic glacierBOT
#

CircuitPython version

New bug on ESP32-S3 related to deep sleep fix on 8.0.0 Beta 6. When I run the code shown below with the ESP32-S3 Feather NO PSRAM, connected to the USB for Power using MU, all works fine. Light Sleep and Deep Sleep perform as expected. When I run off of Battery Alone, then the feather goes into Light Sleep, followed by Deep Sleep (Both work fine on First Pass). On second and following passes then Light Sleep awakens after about 0.005 seconds and Deep Sleep...
lone sandalBOT
orchid basinBOT
#

We hope 8.0.0 will be out sometime in January. Using this is the most useful for boards without USB MSC support. So I see no reason to spend time on support for 7.x.

Instead of supporting only .bin on UF2-capable boards, how about also (or instead!) adding support to erase everything and install the UF2 bootloader (i.e., do a "factory reset")? Once the bootloader is installed, then regular UF2 uploads will work.

orchid basinBOT
#

Ok, good input. By the time this is completed, 8 might be out, so the 7.x question is probably moot.

Instead of supporting only .bin on UF2-capable boards, how about also (or instead!) adding support to erase everything and install the UF2 bootloader (i.e., do a "factory reset")? Once the bootloader is installed, then regular UF2 uploads will work.

Ok, makes sense. I'm not sure if copying the uf2 file itself is very easy at this point (it probably is doable somehow), but I'll just all...

tidal kiln
jaunty juniper
#

yeah that dialog means it didn't find CIRCUITPY. There is a tentative PR to find the drives with other names by looking for boot_out.txt, though i'm afraid I killed it by noting that reading boot_out.txt can cause autoreload (if that causes the "access time" to be updated, which can happen)

#

(discotool can find the drives but they find it has too heavy dependencies)

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.2.0 on 2022-02-24; Raspberry Pi Pico with rp2040

Code/REPL

from ulab import numpy as np

new_poses = np.array([
   [924.881, 311.124, 241.301],
   [1386.19, 520.113, 338.311],
   [40.5783, 94.9179, 193.41],
   [8.8905, 1079.85, 251.301],
   [1171.92, 619.98, 74.1977],
   [629.102, 1447.75, 127.651],
   [575.871, 719.038, 225.301],
   [525.669, 501.781, 42.1525],
   [699.721, 1331.84, 33.3177],
   [1...
manic glacierBOT
#

Testing on Grand Central M4. CircuitPython crashes quickly, after only a few seconds. It looks like it's due to a CIRCUITPY read request via USB. Backtrace, showing a memory error causing a hard fault when trying to read QSPI data.

#0  reset_into_safe_mode (reason=HARD_CRASH) at ../../supervisor/shared/safe_mode.c:122
#1  0x000077b4 in HardFault_Handler () at supervisor/port.c:723
#2  <signal handler called>
#3  memcpy (dst=0x20001968 <_mscd_buf.lto_priv.0>, src=src@entry=0x23fefe0...
manic glacierBOT
#

I have seen many people asking how to find out whether a wifi.Radio connection is up or not. The method usually described is to try to fetch the current IP address. If that fails, the connection is not up.

I think more straightforward boolean properties would be helpful in the API, even if they are bit redundant.

Station mode

Existing API

  • wifi.Radio.connect(): connects to a specified network as a Station.
  • wifi.Radio.start_station(): start running as a Station.
    -...
#

@v923z I can verify there's something odd going on. I built current ulab for micropython with the built.sh script then ran this simplified reproducer:

from ulab import numpy as np

new_poses = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
], dtype=np.float)

identity = np.vectorize(lambda n: n)
intermediate = new_poses[:,2]
output = identity(intermediate)
output2 = np.array([n for n in intermediate])
print("With vectorize:", repr(output.tolist()))
print("With ...
manic glacierBOT
#

I've built this PR and run my basic testing suite and everything seems fine. The additional flash storage is available so I'd say all is good.

However... there are two variants of this board, a 4MB and 16MB. I don't have the 16MB to test but I suspect replacing the EXTERNAL_FLASH_DEVICES parameter in mpconfigboard.mk with a value of "W25Q128JVxQ" would make this PR work for the 16MB version instead.

My question is how do we handle the different flash size variants?

orchid basinBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

@anecdata thanks for the comments. If we were starting from scratch, the API might be more symmetric, but I would not be inclined to change that now.

Maybe started for AP since start() is the verb?

It looks to me like the CYW43 can be in an intermediate state where the AP has "started to start" but there is no IP yet. I'm thinking ap_started() may not mean "ap ready right now". So I think "ap active" or "ap up" might make it clearer that it's up and ready to use.

manic glacierBOT
spark umbra
#

I just saw circuitpython:main branch is 16762 commits ahead, 1401 commits behind micropython:master.
Is CircuitPython periodically updated/rebased with upstream MicroPython? Or has it changed too much for it to become viable and just some fixes are cherry-picked as needed?

jaunty juniper
#

we mostly share the core language implementation, and the process of updating does involve some cherry picking

brazen hatch
#

Honestly it will be pretty hard to top off 8.x in terms of features

spark umbra
manic glacierBOT
languid whale
jaunty juniper
#

that could be in CP 8.x

manic glacierBOT
manic glacierBOT
manic glacierBOT
#

Hi, countio is not technically an interrupt module, it counts edges. On RP2040 it uses PWM for that, and due to hardware limitations it requires a pin on a PWM channel B. Unfortunately the pico Learn Guide doesn't list which pins are valid for that, which could be a good addition. (The information can be found in the RP2040 datasheet section 4.5.2).
As it turns out it's odd number pins.

To monitor a pin, I would rather advise using the keypad module, which regularly scans pins in the ...

lavish saffron
#

Hi, I've just raised a PR on Adafruit_CircuitPython_Wiznet5k to match Wiznet sockets to CPython sockets. There's lots more to do, but it would be helpful to merge some of the outstanding open PRs before continuing. All reviews gratefully received ruby Thank you!

manic glacierBOT
#

I changed Circuitpython version as below.
Adafruit CircuitPython 8.0.0-beta.6-4-g0d3b7770d on 2022-12-25; M5Stack Atom Lite with ESP32

Max pulse length 65535usec. Works for what I use.
But, Pulse counts are too few.
Pulse count is same as last time (128) .
pulses sum: 150552 pulse count: 128 Max: 65535
pulses:
[3486, 1716, 465, 408, 465, 408, 468, 1275, 468, 1278, 465, 408, 465, 1278, 468, 405, 465, 408, 465, 408, 465, 1278, 468, 408, 462, 408, 465, 1278, 465, 408, 465, 1278, 46...

manic glacierBOT
main furnace
#

@craggy plume Re: trying to build Circuitpython in a Ubuntu VM.
Which board are you trying to build? At which point does the build fail?

manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-beta.6 on 2022-12-21; ProS3 with ESP32S3
(Using latest U2F version with latest bootloader)

Code/REPL

`settings.toml`

CIRCUITPY_WIFI_SSID="GBD-TPLINK-Ext-2.4GHz"
CIRCUITPY_WIFI_PASSWORD="secretpassword"
CIRCUITPY_WEB_API_PASSWORD="password"
CIRCUITPY_WEB_API_PORT=3000


### Behavior

It looks as if CIRCUITPY_WEB_API_PORT is being ignored.
The webapi works but it just defaults to port 80 ever...
manic glacierBOT
manic glacierBOT
#

The settings.toml parser did not handle a file that ended without a trailing newline. When such a file was encountered, retrieving the value on the last line would result in the error Invalid byte 'EOF'. For values fetched automatically e.g., by web workflow this message could not be shown.

However, such files are (A) frequently produced by text editors that folks actually use and (B) are specifically permitted by the TOML spec. (so my pedantic objection that (C) such files are not valid...

onyx hinge
#

Just a reminder, there's no meeting today or this week. We'll get together with all <@&356864093652516868> next year on January 3 (Tuesday) at the usual time.

manic glacierBOT
brazen hatch
#

Is there a guide on how to use the updated adafruit_httpserver?
The api has severly changed and I need to reimplement my stuff with it.

tulip sleet
brazen hatch
#

Alright I will refer the examples, thanks!
As to if I will manage to improve the docs, idk, but I will try.

jaunty juniper
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

CircuitPython version

Both
Adafruit CircuitPython 7.3.3 on 2022-08-29; ProS3 with ESP32S3
Adafruit CircuitPython 8.0.0-beta.6 on 2022-12-21; ProS3 with ESP32S3

Code/REPL

Hi,
I'm not sure if this is a circuitpython issue or something related to the esp-idf that circuitpython is using
But I recently ran into a problem similar to this one

  * https://github.com/adafruit/circuitpython/issues/4373

From what I can tell if there's multiple stations avail...
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-beta.6
Adafruit Matrix Portal M4
Nina FW 1.7.4
Adafruit Protomatter v1.5.2

Code/REPL

#include 

#include 

// It is enough to include the Protomatter library for things to
// go south.
#include 

char ssid[] = "INSERT_YOUR_SSID_HERE";
char pass[] = "INSERT_YOUR_PASSWORD_HERE";

WiFiServer* server;

int clientCount = 0;

void attachToWifi() {
    uint8_t status = WiFi.status();
    while ...
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-beta.6 on 2022-12-21; Waveshare ESP32-S2-Pico with ESP32S2

Code/REPL

import wifi

# at this point, the ESP32-S2 is running as a station (init default), and if desired can connect to any AP
wifi.radio.enabled = False  # turns wifi off, mode is retained or can be changed while not enabled

print("Stopping the (default) station...")
wifi.radio.stop_station()  # now the device is in NONE mode, neither Sta...
manic glacierBOT
manic glacierBOT
#

CircuitPython version

Adafruit circuitpython 7.3.3 on Feather M4 express

Code/REPL

import carrierboardv2 as cb
import time
import rtc
import board
import busio
from adafruit_esp32spi import adafruit_esp32spi
from adafruit_esp32spi import adafruit_esp32spi_wifimanager
import adafruit_esp32spi.adafruit_esp32spi_socket as socket

# Get wifi details and more from a secrets.py file
try:
    from secrets import secrets
except ImportError:
    print("...
cobalt grail
#

Hey guys. Got this string to translate: "%S". ๐Ÿ™‚

onyx hinge
#

@cobalt grail yeah I'm sorry about that

#

I realize it's nonsense to present to a translator, but because of the C API inside CircuitPython, it had to be marked as a translated string. I would love if someone could show me a way around it in this case.

cobalt grail
#

Also, shouldn't it be %s?

onyx hinge
#

no

#

%S is an extension to printf formatting in circuitpython, which means that the associated argument is a translated/compressed string rather than a regular string

#

mp_printf(&mp_plat_print, "%S", translate("I have regrets about my decisions"));

cobalt grail
#

Ah! Ok then. Maybe there is a way in weblate to mark it "ignore".

onyx hinge
#

I could go translate it in all the languages before anyone else does

cobalt grail
#

Well, swedish is already done.

manic glacierBOT
#

Your wifi scan doesn't show it, but are there a lot of other wifi devices in the vicinity that could be causing interference? Are the routers choosing their channels, or are those manually selected? Channels 2 and 3 are adjacent, and also have frequency overlap with channels1 and 6. Channels 1, 6, and 11 are the only combination that have no overlap.

There was a comment on another issue that the ESP32-S3 has a hardware bug that reduces the signal strength on the lower channel numbers:
htt...

onyx hinge
#

@cobalt grail I think I've marked it as "read only"

cobalt grail
#

Not sure what that implies though.

manic glacierBOT
#

I tested with an S3-based feather and still didn't reproduce the problem. I tried 70, 81, 3000, and 8080 as alternate port numbers. I tested with the CIRCUITPY_WEB_API_PORT line being first, middle, and last.

Let's eliminate the possibility of strange control codes in your settings.toml. Can you please run this in the repl, and then redact the wifi password in the printed string before pasting it into a comment with ```backticks```?

>>> open("/settings.toml", "rb").read()
b'...
#

CircuitPython version

7.3.0-beta.1-4-g7be66a573-dirtyAdafruit CircuitPython 7.3.0-beta.1-4-g7be66a573-dirty on 2022-04-15; PyCubedMini with samd51j19

Code/REPL

>>> msgpack.pack([1672099392], BytesIO())

Behavior

Traceback (most recent call last):
File "", line 1, in
ValueError: no default packer

Description

This behavior is seen when passing ints greater than 2^30, which seems very strange.

I suspect it has something to do with the c...

manic glacierBOT
#

Just tried adafruit-circuitpython-unexpectedmaker_pros3-en_GB-20221227-785ebe1.uf2 which was released at 2022-12-27T19:18:42.000Z
Not sure if it picked up the recent pull request

Used the following settings
settings.toml

CIRCUITPY_WIFI_SSID="GBD-TPLINK3-Ext-2.4GHz"
CIRCUITPY_WIFI_PASSWORD="****"
CIRCUITPY_WEB_API_PORT=3000
CIRCUITPY_WEB_API_PASSWORD="password"
#
#

Reset the device
Looking at the IP address assigned

import wifi
print("my IP addr:", wifi.ra...
manic glacierBOT
#

just as a follow up

  • my main wifi router is a Asus GT-AX11000
    latest firmware 3.0.0.4.386_49599-g8352df7
  • the wifi boosters are all the same, TPLink RE650 V1, latest firmware 20201112

Tried disabling 5Ghz on one of the boosters I couldn't connect to but made no difference
What I think I'm seeing at the moment is that if a connection is made via ESP -> Booster -> Booster -> Router, then I think it works for some reason.

Next point of call is to try altering some of the w...

manic glacierBOT
#

I think I've managed to solve this one
Going to close it down since if this is an issue and not wifi interference (which it could be) it's probably more of a hardware / esp-idf issue
that being said it maybe useful for others to know

Fix - set "Channel bandwidth" to "40Mhz"

The short answer is that in my wifi router settings
changing the "Channel bandwidth" setting from "20/40Mhz" to "40Mhz" seems to allow the esp32-s3 to connect on the lower channel numbers without issue

Re...

#

It's been quite a while since this was brought up so sorry to dredge it up but are there any plans to build a library for this sensor and circuit python? If not, I am going to give it a go but it is definitely going to be an uphill battle for me so didn't want to duplicate efforts if it was already planned/underway. Thanks for all the awesome hardware!

manic glacierBOT
#

CircuitPython version

adafruit-circuitpython-teensy41-en_US-8.0.0-beta.6.hex
AND
adafruit CircuitPython 8.0.0-beta.6-6-g785ebe1f4 on 2022-12-27
# 
I apologize for posting here, couldn't find a way to post in the 'beta' section.

Code/REPL

# Just a sstart....
import time
import microcontroller
import adafruit_ticks  # import time
import board
import busio
# from analogio import AnalogIn
import digitalio
# import displayio
# import adafruit_ili934...
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.3.3 on 2022-08-29; Adafruit Feather RP2040 with rp2040

Code/REPL

# Write your code here :-)
import board
import busio
import sys
# import asyncio
import select

uart = busio.UART(board.TX, board.RX, baudrate=31250)
p = select.poll()
p.register(uart, select.POLLIN)
p.register(sys.stdin, select.POLLIN)

while True:
    res = p.poll()

Behavior

Traceback (most recent call last):
  File...
manic glacierBOT
manic glacierBOT
crimson ferry
#

os.getenv() seems to read the file each time, so presumably the best strategy is to put more frequently-used items at the top. Is there a practical limit to settings.toml file size?

#

Are there any other optimizations in Python code, or a way to read all of the values at once?

onyx hinge
#

That's right, each call to os.getenv reads the whole file. No, there's no way to get all values or to get a list of keys either. There may be a missing optimization to stop reading after the desired key is found and its value is read out.

manic glacierBOT
lone sandalBOT
tulip sleet
#

i don't think reading the whole file is all that expensive

#

also not sure what the semantics is of TOML and repeated values, whether the last one is the one that sticks. That was true for .env, so we had to read the whole file

crimson ferry
#

Thanks, jepler and danh, jus trying to strategize a little. I'm leaning towards keeping "standard" settings in setings.toml, along with a filename of a python settings file

tulip sleet
#

I'm trying to type bill88t; he's the one who was working on a TOML lib

#

the only strong reason to use settings.toml instead of a .py file is that the values could be read without starting up a Python VM

#

that was the motivation, really

crimson ferry
#

I don't understand what that means in the context of CircuitPython

#

oh, so core code could use it

tulip sleet
#

so the web workflow could get started up really early

#

or we could set a memory value that the VM needed to start

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-beta.6 on 2022-12-21; Adafruit QT Py ESP32S2 with ESP32S2

Code/REPL

Placeholder issue: no minimal example at this time. Only happens on some URLs.

Behavior

# using latest release adafruit_wiznet5k v1.12.18
Traceback (most recent call last):
  File "code.py", line 111, in get_http
  File "adafruit_requests.py", line 823, in get
  File "adafruit_requests.py", line 662, in request
  File...
devout jolt
#

Is anyone else getting Github errors trying to download the CircuitPython Library Bundles? In doing a circup --verbose install [somepackage] I am getting "ERROR: 503 Server Error: Egress is over the account limit", e.g.:

12/28/2022 09:34:37 INFO: Downloading bundle: https://github.com/adafruit/CircuitPython_Community_Bundle/releases/download/20221222/circuitpython-community-bundle-7.x-mpy-20221222.zip
12/28/2022 09:34:43 WARNING: Unable to connect to https://github.com/adafruit/CircuitPython_Community_Bundle/releases/download/20221222/circuitpython-community-bundle-7.x-mpy-20221222.zip
There was a problem downloading the bundle. Please try again in a moment.
12/28/2022 09:34:43 ERROR: 503 Server Error: Egress is over the account limit. for url: https://objects.githubusercontent.com/github-production-release-asset-2e65be/98363921/76c8368a-6960-4dd2-8aac-e2d41d7b35e3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221228%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221228T173438Z&X-Amz-Expires=300&X-Amz-Signature=f40fabc5348c03f89661bec8fae374e4d13598bcd0e80874180c6b4a5bb0a01d&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=98363921&response-content-disposition=attachment%3B%20filename%3Dcircuitpython-community-bundle-7.x-mpy-20221222.zip&response-content-type=application%2Foctet-stream
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-beta.6-7-g81e9f5013 on 2022-12-28; FeatherS2 with ESP32S2

Code/REPL

# empty code.py

Behavior

An error occurred while retrieving 'CIRCUITPY_WEB_API_PORT':
Invalid byte '\r'

Description

Seems to be a problem parsing the port number if the number is followed by '\r\n'.

CIRCUITPY_WIFI_SSID="SAVETHEPLANET"
CIRCUITPY_WIFI_PASSWORD="secret-password"
CIRCUITPY_WEB_API_PASSWORD="web-api-p...
manic glacierBOT
#

I think I figured out the cause
I noticed the following on the serial console if I could capture it early enough after a reset

An error occurred while retrieving 'CIRCUITPY_WEB_API_PORT':
Invalid byte '\r'

and I was like aha it's windows line feeds.
Switched my editor to save unix '\n' instead of windows '\r\n' line feeds and it works
Doesn't seem to impact the other settings just that one CIRCUITPY_WEB_API_PORT
so I'm guessing the other settings are filtering out the windo...

manic glacierBOT
#

Currently all boards, excluding espressif/TG-Watch, have the exact same pystack size, defined by:
py/circuitpy_mpconfig.h:453: #define CIRCUITPY_PYSTACK_SIZE 1536

However, at least for me, this is a bottleneck.
My project has at this point, been optimised as much as it goes,
but I am still hitting the pystack limit with some of the latest changes.
(RuntimeError: pystack exhausted)

This pr intends to find a better value than the global 1536 that is currently applied.
As an i...

manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

For anyone that wants to optimize memory/stack size, I stole this bit of code from a posted Micropython (I think) issue a year or so ago:

def calcRecursionDepth(wldCLen,recursiveFail):
    wldCLen += 1
    if not recursiveFail and wldCLen < 90:
        try:
            (wldCLen,recursiveFail) = calcRecursionDepth(wldCLen,recursiveFail)
        except:
            recursiveFail = True

    return (wldCLen,recursiveFail)

w = 0
rf = False
print(calcRecursionDepth(w,rf)...
brazen hatch
#

all the pystack talk got me thinking about swap storage
imagine if we could swap to an sdcard. that would be great

#

I dont wanna imagine booting off of a spi-mode sdcard though

orchid basinBOT
manic glacierBOT
manic glacierBOT
#

Now all the boards with MB's of ram, are set to have 5k of pystack. There is no reason not to.
nrf got a boost of 512b, and rp2 got a boost of 1kb.

The rp2 board with the least available ram is the picow and it still has more than 10kb more than nrf52840.
nrf on the other hand, has very little to begin with, so I only increased it by 512b.

I will now build a stackless build on picow and test my ljinux + webserver + ssh to see how it performs.

manic glacierBOT
#

CircuitPython Version: Adafruit CircuitPython 8.0.0-beta.6 on 2022-12-21; Raspberry Pi Pico W with rp2040
code.py
`import os
import wifi

ap_ssid = "picow"
ap_password = "picow123"

print()
print("Creating a new Access Point")

create access point

wifi.radio.start_ap(ap_ssid, ap_password)
output

from code import *

Creating a new Access Point
Traceback (most recent call last):
File "", line 1, in
File "code.py", line 15, in
RuntimeError: Wifi is in sta...

manic glacierBOT
brazen hatch
#

I am having quite a lot of trouble creating the stackless builds..

../../py/compile.c: In function 'do_import_name':
../../py/compile.c:1095:27: error: 'q_ptr' may be used uninitialized [-Werror=maybe-uninitialized]
 1095 |             qstr q_full = qstr_from_strn(q_ptr, len);
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../py/obj.h:33,
                 from ../../py/parse.h:32,
                 from ../../py/scope.h:29,
                 from ../../py/compile.c:33:
../../py/qstr.h:84:6: note: by argument 1 of type 'const char *' to 'qstr_from_strn' declared here
   84 | qstr qstr_from_strn(const char *str, size_t len);
      |      ^~~~~~~~~~~~~~

@wraith crow sorry to ping you, but could you please tell me how you compile your stackless builds?

tulip sleet
brazen hatch
#

Remember the aliases you gave me?
I have modified them and put em on all my machines.
I always picow-cleanmake now.

tulip sleet
#

i will try a build

brazen hatch
#

I set MICROPY_STACKLESS to (1) and CIRCUITPY_PYSTACK_SIZE to (0)
It fails ~20s in.

tulip sleet
#

I did a build for pico that compiled

brazen hatch
#

Could be incorrect placement though.

tulip sleet
#

where did you set those?

brazen hatch
#

in ports/raspberrypi/boards/raspberry_pi_pico_w/mpconfigboard.h

#

I have git restore'd already so I may have forgotten something.

tulip sleet
#

what does arm-none-eabi-gcc --version say?

brazen hatch
#

arm-none-eabi-gcc (Arch Repository) 12.2.0

#

Yea, I use Arch BTW.
I can try on my Pi400

tulip sleet
#

we aren't using 12 yet; we're using 10.3

brazen hatch
#

arch moment

tulip sleet
#

it may well indicate a possible issue, since it's a compiler warning

brazen hatch
#

it builds with normal settings though

tulip sleet
#

builds fine with your placement on 10.3

brazen hatch
#

imma jump on my pi and brb

tulip sleet
#

actually 10.2.1

#

not 10.3

manic glacierBOT
tulip sleet
#

@brazen hatch instead of setting CIRCUITPY_PYSTACK_SIZE to 0, set MICROPY_ENABLE_PYSTACK to 0

brazen hatch
#

oh alright, I am updating my local repo
It will take a while.
iowait is my life now

tulip sleet
#

the interlocking between these settings is not necessarily perfect

#

i think the warning is if a malloc fails and doesn't return anything, or something like that

brazen hatch
#

I can actively test the result once we build.
It should be no problem verifying it's limits.

#

It would take very little intentional bad code to send it to 10 bytes left.

#

It built just fine, onto testing now.

#

The issue is that I can't build esp on my pi400 cause I have made the unfortunate decision of compiling and installing by hanv python3.11 which doesn't work with esp-idf.
I will only test stackless on rp2 for now.

#

To make it clear, my changes are:

diff --git a/ports/raspberrypi/boards/raspberry_pi_pico_w/mpconfigboard.h b/ports/raspberrypi/boards/raspberry_pi_pico_w/mpconfigboard.h
index a31ee7327c..c2df2858df 100644
--- a/ports/raspberrypi/boards/raspberry_pi_pico_w/mpconfigboard.h
+++ b/ports/raspberrypi/boards/raspberry_pi_pico_w/mpconfigboard.h
@@ -1,6 +1,16 @@
 #define MICROPY_HW_BOARD_NAME "Raspberry Pi Pico W"
 #define MICROPY_HW_MCU_NAME "rp2040"
 
+#ifdef MICROPY_ENABLE_PYSTACK
+#undef MICROPY_ENABLE_PYSTACK
+#define MICROPY_ENABLE_PYSTACK (0)
+#endif
+
+#ifdef MICROPY_STACKLESS
+#undef MICROPY_STACKLESS
+#define MICROPY_STACKLESS (1)
+#endif
+
 #define CIRCUITPY_DIGITALIO_HAVE_INVALID_PULL (1)
 #define CIRCUITPY_DIGITALIO_HAVE_INVALID_DRIVE_MODE (1)
brazen hatch
#

All I have to say is, stackless is the way to go.

#

At least on rp2, it's a clear win.

tulip sleet
#

Why don't you add some comments to the stackless issue, and i'll move it to 8.x.x?

#

i appreciate your experimentation

brazen hatch
#

I want to test this a bit more before declaring it stable, after that, I will write all my finding onto the issue.

#

Also, I feel like it should be tested extensively on EVERY port
It may work fine on rp2 but fail on a espressif

#

I can only do rp2, nrf and esp, the rest I cannot get my hands on.

tulip sleet
brazen hatch
#

And I managed to crash everything (including my usb ports) with a simple

def test():
  test()
#

Recursion limit where

#
import time
def test(num):
  print(str(num))
  time.sleep(0.01)
  test(num+1)
test(0)
#

made it to 1.9k before hanging

#

Along with stackless there has to be a recursion limit implemented

crimson ferry
#

Is there a resource (besides the code) that describes the CircuitPython memory architecture... heap, stack, long-lived, C stack, pystack, espidf memory, differences across ports, what happens when PSRAM is involved, etc.? Scott did a deep dive long ago, but I'm not sure it covers all of the angles from a high level (and may be a little out of date).

manic glacierBOT
tulip sleet
brazen hatch
#

I will include everything dw

manic glacierBOT
#

After a heavy amount of testing, I have come to the conclusion that at least for rp2, stackless is stable and offers quite a lot of benefits in comparisson to the current pystack.

Building with

#ifdef CIRCUITPY_PYSTACK_SIZE
#undef CIRCUITPY_PYSTACK_SIZE
#endif
#define CIRCUITPY_PYSTACK_SIZE 0

#ifdef MICROPY_ENABLE_PYSTACK
#undef MICROPY_ENABLE_PYSTACK
#endif
#define MICROPY_ENABLE_PYSTACK (0)

#ifdef MICROPY_STACKLESS
#undef MICROPY_STACKLESS
#endif
#define MICROPY_STAC...
brazen hatch
#

I am done for the day, see ya all tomorrow.

blissful pollen
#

@onyx hinge were you still looking for a scorpio example project? Still winter related but the Icicle project I did based on PaintYourDragon's original Arduino one may work well. Needs lots of strands, it runs pretty decently. Code would need some tweaking/cleanup

wraith crow
#

@brazen hatch We seem to be on inverse schedules today ๐Ÿ™‚ sorry I missed your ping but glad you got it worked out ๐Ÿ˜

manic glacierBOT
#

I'll add that I've been running PyDOS "stackless" on both Circuitpython and Micropython for about a year and a half and haven't seen any issues. That being said, other than running neopixels, SPI SD cards/displays and various I2C devices I'm not really stressing the high speed timing of the microcontrollers or GPIO outputs and I'd classify both PyDOS and ljinux as not being core usage cases for Circuitpython :grin:

I have built and tested on multiple development boards using the ESP32 fami...

manic glacierBOT
#
#ifdef CIRCUITPY_PYSTACK_SIZE
#undef CIRCUITPY_PYSTACK_SIZE
#endif
#define CIRCUITPY_PYSTACK_SIZE 0

Just looking forward to a PR (someday post 8.0.0 :grin:) to implement this and I'm thinking if you define MICROPY_ENABLE_PYSTACK (0) then I would think CIRCUITPY_PYSTACK_SIZE shouldn't be allocated. If that's true, it probably doesn't hurt to leave the parameter set in case someone wants to override the setting and re-enable PYSTACK.

For all of my testing I wo...

#

This ultimately appears to be due to not telling gcc to do a software memory barrier after turning off the SAMD cache. In -O2 code, inlining some routines made this necessary. PR soon. I am seeing whether I also need to do hardware memory barrier instructions also, and what the situation on other ports is.

I found out one interesting thing: you can adjust gccoptimization levels per function inside a source file:
https://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html#F...

crimson ferry
#

when there is no pystack, where does stuff go that would have gone on pystack? I tried reading the code, but it gets really deep really fast

#

I'm guessing not the heap, so that leaves the C stack... size of which is determined by CIRCUITPY_DEFAULT_STACK_SIZE?

wraith crow
#

I started looking a while back until my head started to hurt, but I think there's two different things going on. The pystack and stackless operation. I could be totally off base but my impression was that when pystack was turned off, the functionality was moved to a different stack or perhaps the heap? this is all a bit beyond me... However, there's also a CPYTHON stackless version/option (https://en.wikipedia.org/wiki/Stackless_Python) which perhaps is what gets triggered when the stackless option is enabled????

Stackless Python, or Stackless, is a Python programming language interpreter, so named because it avoids depending on the C call stack for its own stack. In practice, Stackless Python uses the C stack, but the stack is cleared between function calls. The most prominent feature of Stackless is microthreads, which avoid much of the overhead associ...

crimson ferry
#

there could be some simplistic version of Stackless Python implemented, many of the features seem too rich and os-based for us

#

but if not, if stackless uses the heap we'll need to test for fragmentation, and if it's c-stack we'll need to test for stack size and C & Python not clobbering each other in odd scenarios

jaunty juniper
#

my understanding:

  • MICROPY_STACKLESS causes all allocations to take place on the heap, meaning that even functions that are originally designed to avoid heap allocation can trigger a garbage collection, or contribute to memory fragmentation.
// Avoid using C stack when making Python function calls. C stack still
// may be used if there's no free heap.
  • MICROPY_ENABLE_PYSTACK enables a separate "stack" from the C stack to handle python local allocations. It's called "scoped allocation" in some of the related discussions on microptyhon.
// Whether to enable a separate allocator for the Python stack.
// If enabled then the code must call mp_pystack_init before mp_init.

How they interact with each other is unclear. At first I thought that the pystack requires explicit allocation on it, but that doesn't seem to be the case (or it would be very niche).

crimson ferry
#

MICROPY_STACKLESS causes all allocations to take place on the heap
seems to have large implications for fragmentation

jaunty juniper
#

I might have gotten all of that wrong though

crimson ferry
#

When I read that comment in code, I didn't know if the 0 was what the comment was refering to, or the MICROPY_STACKLESS

jaunty juniper
#

ah I don't know

crimson ferry
#

we really need some docs (with graphics!) of the CP architecture, particularly about memory

jaunty juniper
#

we can ask in the MP discord, they certainly can clarify or point to more info. Jimmo is active over there

crimson ferry
#

I'll give it a go

jaunty juniper
crimson ferry
#

Discord so much easier ๐Ÿ˜‰

onyx hinge
#

it looks like a label that starts with a space ends up different than one without, or maybe generally different depending on where the first pixel of the first glyph is at?

lone axle
#

Interesting. I don't know the cause off the top of my head, best guess is maybe space is "special" and handled by the code by moving some pixels in X direction. If that is the case maybe it's not using the correct value to move when it finds the space.

#

Is space one of the glyphs generally contained within a font file? Somehow the font file must be able to convey how wide the space should be, it could just have a glyph for it with no pixels, or perhaps it's just a number somewhere in the metadata.

orchid basinBOT
lone axle
manic glacierBOT
#

To document a little of the discord discussion by @anecdata and @Neradoc:

  • MICROPY_STACKLESS causes all allocations to take place on the heap, meaning that even functions that are originally designed to avoid heap allocation can trigger a garbage collection, or contribute to memory fragmentation.
    // Avoid using C stack when making Python function calls. C stack still
    // may be used if there's no free heap.

  • MICROPY_ENABLE_PYSTACK enables a separate "stack" from the C stack...

manic glacierBOT
#

Fixes #7279.

Disabling the cache on SAMx5x caused problems when compiling with -O2, apparently due to inlining the microcontroller cache control routines.. Access to the external flash chip did not work.

Fixes:

  • https://github.com/adafruit/samd-peripherals/pull/43 adds a memory fence before and after disabling the cache.
  • external_flash.c tries a little harder to make sure the flash chip is ready, by retrying fetching the JEDEC ID if necessary. Without this, if the chip was not ac...
crimson ferry
#

With CIRCUITPY_RESERVED_PSRAM in settings.toml as a model, is it conceivable that other low-level build features could be deferred until runtime, so that very different kinds of applications could be written without a custom build? At the moment, I'm thinking mainly of other memory configuration options (pystack, etc).

brazen hatch
#

If I manage to build it that is

#

my archbtw has incompatible gcc
and my pi400 has python3.11 which doesnt play well with idf

#

I may spin something in docker

manic glacierBOT
manic glacierBOT
crimson ferry
#

@brazen hatch my question was a little more general, could involve other aspects of memory config, even whether Blinka shows up on displayio terminals

brazen hatch
#

well usability would greatly improve if everything was set via settings.toml

#

no need for any custom builds ever

#

Also, my toml library is coming out soon, so it be very easy for code to save/load settings to it too

#

turns out though, accounting for all edge cases was quite a lot more code that I would like

#

hopefully I didnt miss any

crimson ferry
#

plenty of time for people to try out all. the. things.

brazen hatch
#

also fyi, building with arm-none-eabi-gcc 12.2.0, only requires a single #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"

#

I read the code, not sure why it thinks of this

#

it complains about py/compile.c:1095

tulip sleet
#

try to fix the issue

#

i think it is beccause the called routine might not always set the value

brazen hatch
#

Other than that there are no other warnings or issues.
I will give a more throughout look at the func and try to pr a fix.

manic glacierBOT
#

It is a single warning. If it is fixed, circuitpython can be built with latest gcc.

../../py/compile.c: In function 'do_import_name':
../../py/compile.c:1095:27: error: 'q_ptr' may be used uninitialized [-Werror=maybe-uninitialized]
 1095 |             qstr q_full = qstr_from_strn(q_ptr, len);
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../py/obj.h:33,
                 from ../../py/parse.h:32,
                 from ../../py/scope.h:29,
 ...
left steeple
#

hello, I think I found a discrepancy on the circuitpython download page and I'd like to know who to take it to. Could anyone direct me where to go?

jaunty juniper
#

here is fine

left steeple
#

on the download page for the ESP32-C3-DevKitC-1-N4 the text on the page references the "DevKitC" but the download file and url reference the "DevKitM"

onyx hinge
#

and if not, reply to this and tag me and I'll open the issue for you

jaunty juniper
#

yeah that's a good client for an issue, those devkits are weird in their names

#

I think they can use the same build, I have both but no time

manic glacierBOT
#

What did I do? In Micropython there is method called "duty()" about like in Ciruitpyton but they also have "duty_ns(pulse_len)" where pulse_len is an integer in nanoseconds. So I used Micropython. This is the only solution that avoids round off errors.

Their library code, then converts the nanoseconds into "timer counts". There is are numeric issues like we are stuck with here.

What is not understood by Circuitpython authors is PWM is many times used to transmit numeric data, whe...

manic glacierBOT
#

Might this be solved by refactoring Wiznet5k? At the moment, wiznet5k_socket.gethostbyname calls wiznet5k.get_host_by_name which instantiates an instance of wiznet5k-dns.DNS and calls DNS.gethostbyname which instantiates a wiznet5k_socket.socket and makes calls to socket.send and socket.recv which calls WIZNET5k.socket_write.
This could be refactored into wiznet5k_socket.gethostbyname with a couple of functions to build and parse DNS messages and calls to the `WIZNET5K inst...

lavish saffron
# manic glacier

Might this be solved by refactoring Wiznet5k? At the moment, wiznet5k_socket.gethostbyname calls wiznet5k.get_host_by_name which instantiates an instance of wiznet5k-dns.DNS and calls DNS.gethostbyname which instantiates a wiznet5k_socket.socket and makes calls to socket.send and socket.recv which calls WIZNET5k.socket_write.
This could be refactored into wiznet5k_socket.gethostbyname with a couple of functions to build and parse DNS messages and calls to the WIZNET5K instance that is already linked to the sockets module. The Wiznet5k DNS module could be removed completely.

manic glacierBOT
#

I was Googling to find out how to run a task on the second CPU and found this is still unimplemented in Circuitpython. I'm shocked. Having dual cores is one of the "top three" features of the RP2 and the reason for the "2" in "RP2". Excuse the pun but this is a core feature of the chip.

What is the use case?
task 1 - reading data from a bunch of sensors and we can't stop looking
task 2 - interacting with another computer via serial link and running commands that come over the ...

orchid basinBOT
#

Update the Lolin C3 Mini page to reflect https://github.com/adafruit/circuitpython/pull/7392 changing the targeted hardware version to v2.1.

Status LED removed, replaced by WS2812B.
PCB antenna removed, replaced by ceramic antenna.

Is the language describing the RGB LED correct for a non-Adafruit (and presumably not licensed to use the term NeoPixel) WS2812B correct?

manic glacierBOT
manic glacierBOT
manic glacierBOT
#

I wonder what is the behaviour change on the V1 / V2.1 board.
I guess it is mostly the boot blinking vs colour that is affected.

So we have LED and NEOPIXEL alias, but if the goal is to focus on V2.1 then maybe LED can be removed.
That would make it perfect for V2.1 and V1 user just need to know that they can use NEOPIXEL to talk to their LED.

PS: I acquired both, but I will use the v1 for a non wifi and Arduino usage.

manic glacierBOT
#

CircuitPython version

8.0.0-beta.6

Code/REPL

import board
import sdioio
import storage
import time
import displayio
import adafruit_displayio_sh1107

i2c = board.I2C()
displayio.release_displays()
display_bus = displayio.I2CDisplay(i2c, device_address=0x3C)
display = adafruit_displayio_sh1107.SH1107(display_bus, width=128, height=64)

sdcard = sdioio.SDCard(
    clock=board.SDIO_CLOCK,
    command=board.SDIO_COMMAND,
    data=board.SDIO_DATA,...
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.3.3 on 2022-08-29; FeatherS3 with ESP32S3

Code/REPL

# ------------------------------------------------------------------------------------
# First Module
"""
BMP280 -> Sensor Data> Temperature, pressure, and altitude
"""
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT

"""Simpletest Example that shows how to get temperature,
   pressure, and altitude readin...
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.3.3 on 2022-08-29; Adafruit Feather RP2040 with rp2040

In my experience the minimum alarm period seems to be 1 second. The code below should produce 10 x 100mS sleep periods for a total of 1 second. I need to sample user buttons 10 times a second but also want to make use of light-sleep to reduce power. 
Output:
mtime=8519.37
wake =8520.26
mtime=8520.27
wake =8521.26
mtime=8521.26
wake =8522.26   alarm returns after 1 sec...
manic glacierBOT
manic glacierBOT
#

I did a litltle research to see what's happening in the core C code.

In the rp2040 microcontroller, we rely on the pico-sdk routine rtc_set_alarm to set an alarm. It has a granularity of 1 second, because it uses a datetime_t which has no sub-second resolution. If you want more info about this routine: https://raspberrypi.github.io/pico-sdk-doxygen/group__hardware__rtc.html#gad0018e9069fee8d65c3a01f7bd7ae2f4

If you need shorter sleeps, consider just using time.sleep.

#

As for the exception, I think it's operating as intended but the documentation could be better.

constructing a time alarm for a time already in the past gets you an exception when you create it.

constructing a time alarm for a time in the future but actually sleeping on that alarm later, after the deadline is past is supposed to return immediately if its deadline is in the past.

For instance, if you

 time_alarm = TimeAlarm(monotonic_time = time.monotonic() + 1)
 ...
craggy plume
# manic glacier

@ jepler- Thanks for the conformation about the minimum 1 second alarm delay. I figured the exception was in the creation of time_alarm. I was hoping I could trick the alarm into a short delay. I think I should call this a feature request instead of a bug. The bug is that alarm.time uses a datetime_t and is limited to 1 second sleeps. ๐Ÿ˜ฃ

digital ibex
#

Hi, when do I know if the CircuitPython port for my OSHW board is ready to be merged into the official repo? Right now, the firmware runs beautifully but I'm still working out the userspace code that runs within CircuitPython. Should I wait until that's done, or can I open a PR?

jaunty juniper
#

I would say that deep sleep is not really intended for short sleeps, it's followed by a reset, so there's a lot of wasted time (and energy) in sleeping a short amount of time compared to time.sleep()

#

specifically one second I would say

#

or was it light sleep ?

#

ah sorry, I misunderstood the thing ๐Ÿ˜›

#

I should go to deep sleep, it's late ๐Ÿ˜“

craggy plume
#

I am looking for serious ways to reduce power in the RP2040. I am suprised there is not more intrest in power reduction. Light_sleep is disappointing if the whole app has to shut down for a second to use it. I also found that light_sleep shuts down the PWM logic. I see in the C source the bit mask
RP_LIGHTSLEEP_EN0_MASK which shuts down clocks. I can rebuild circuitpython after commenting out CLK_SYS_PWM_BITS but want to understand more about power reduction. I am still looking for the routine that uses RP_LIGHTSLEEP_EN0_MASK.

ornate breach
#

Those things are not really as big of a priority in my own view of the RP2040 usage as it tends to be viewed as a tool for learning embedded vs optimizing for end products.

#

Itโ€™s also been discussed at length that the trouble of reducing low power consumption in a few cases isnโ€™t worth the potential headaches of managing peripheral state. That said, definitely open an issue if you are curious if your suggestions are worth trying out

#

Maybe try them out and test them too, if they work submit a PR

#

Iโ€™d certainly be interested if you get more working. I do a lot with the RP2040, including a little watch Iโ€™m working on.

craggy plume
#

@ornate breach- I am on a journy to learn how to make optimizations to circuitpython for my needs. I have circuitpython building on a Ubuntu VM but I have not tried refactoring or adding C calls yet. I am an embedded engineer but mostly code C for PICs. Rp2040 and circuitpython displayio gave me a big headstart on my "watch" project. Now I am running into the limitations and looking for ways to get around them.

#

What is the pick sdk? where is it?

ornate breach
#

Itโ€™s C so right up your alley Iโ€™d bet

#

CircuitPythonโ€™s RP2040 builds use the Pico SDK so any optimizations you make could potentially cross over

tulip sleet
# digital ibex Hi, when do I know if the CircuitPython port for my OSHW board is ready to be me...

if you board presents as USB we need a valid USB VID/PID. There are multiple ways to get them: pid.codes, Raspberry Pi folks (if RP2040), Espressif folks (if Espressif-based), or your own VID (expensive). You can make a PR now and mark it as draft if you're not quite ready. You will also be making a PR to adafruit/circuitpython-org with a board description as well after it's merged to adafruit/circuitpython (you could make a draft there too if you want).

digital ibex
manic glacierBOT
manic glacierBOT
manic glacierBOT
onyx hinge
#

@tulip sleet ^

tulip sleet
lavish saffron
#

Hi, which is preferred for minimising memory use bytearray.extend(b"abcde") or bytearray += b"abcde"?

tulip sleet
lavish saffron
random junco
#

Happy New Year <@&356864093652516868>! This is just a reminder there is no meeting today - we will meet tomorrow at 2pm EST due to the holiday. See you then!

manic glacierBOT
manic glacierBOT
manic glacierBOT
brazen hatch
#

Created an updated set of aliases for building CP based on Dan's:

alias espload='source ~/git/esp-idf-4.4.3/export.sh'
alias cpmload='source ~/.pyenvs/circuitpy/bin/activate'
alias espunload='export PATH=$(echo "$PATH" | sed -E "s#:?${IDF_PATH}/?##g" \
| sed -E "s#:?${IDF_PATH}/tools/xtensa-esp32-elf/esp-2020r2-8.2.0/xtensa-esp32-elf/bin/?##g" \
| sed -E "s#:?${IDF_PATH}/components/esptool_py/esptool/?##g" | sed -E "s#:?${IDF_PATH}/components/espcoredump/?##g" \
| sed -E "s#:?${IDF_PATH}/components/partition_table/?##g" | sed -E "s#:?${IDF_PATH}/components/app_update/?##g" \
| sed -E "s#:?${HOME}/.espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/?##g" \
| sed -E "s#:?${HOME}/.espressif/tools/xtensa-esp32s2-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32s2-elf/bin/?##g" \
| sed -E "s#:?${HOME}/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32s3-elf/bin/?##g" \
| sed -E "s#:?${HOME}/.espressif/tools/riscv32-esp-elf/esp-2021r2-patch5-8.4.0/riscv32-esp-elf/bin/?##g" \
| sed -E "s#:?${HOME}/.espressif/tools/esp32ulp-elf/2.35_20220830/esp32ulp-elf/bin/?##g" \
| sed -E "s#:?${HOME}/.espressif/tools/openocd-esp32/v0.11.0-esp32-20220706/openocd-esp32/bin/?##g" \
| sed -E "s#:?${HOME}/.espressif/python_env/idf4.4_py3.9_env/bin/?##g" | sed -E "s#:?${IDF_PATH}/tools/?##g" \
| sed -E "s#:?${IDF_PATH}/components/esp32/tools/sdk/include/?##g" \
| sed -E "s#components/esptool_py/esptoolcomponents/espcoredumpcomponents/partition_tablecomponents/app_updatetools:?##g") && \
unset IDF_PATH \
unset IDF_PYTHON_ENV_PATH \
unset IDF_TOOLS_INSTALL_CMD \
unset IDF_TOOLS_EXPORT_CMD'
#
alias lstty='/bin/ls /dev/ttyACM* /dev/ttyUSB*'
alias atio='tio /dev/ttyACM0'
NUM_CPUS=`getconf _NPROCESSORS_ONLN`
make-aliases () {
    alias ${1}-make="(${BASH_ALIASES[$4]}; make -j$NUM_CPUS V=1 BOARD=${2})"
    alias ${1}-clean="(${BASH_ALIASES[$4]}; make V=0 BOARD=${2} clean)"
    alias ${1}-cleanmake="(${BASH_ALIASES[$4]}; make -j$NUM_CPUS V=1 BOARD=${2} clean; make -j$NUM_CPUS V=1 BOARD=${2})"
    alias ${1}-dmake="(${BASH_ALIASES[$4]}; make -j$NUM_CPUS V=1 BOARD=${2} DEBUG=1)"
    alias ${1}-dcleanmake="(${BASH_ALIASES[$4]}; make -j$NUM_CPUS V=1 BOARD=${2} clean; make -j$NUM_CPUS V=1 BOARD=${2} DEBUG=1)"
    alias ${1}-load="(${BASH_ALIASES[$4]}; cp build-${2}/firmware.uf2 /media/${USER}/${3}/)"
    alias ${1}-gdb="(${BASH_ALIASES[$4]}; gdb build-${2}/firmware.elf)"
}
make-aliases pico raspberry_pi_pico "RPI-RP2" cpmload
make-aliases picow raspberry_pi_pico_w "RPI-RP2" cpmload
make-aliases wannabe_lolins2mini wannabe_lolin_s2_mini S2MINIBOOT espload
make-aliases wspico waveshare_esp32s2_pico ESP32S2PICO espload
make-aliases combact Seeed_XIAO_nRF52840_Sense "XIAO-SENSE" cpmload
unset make-aliases
unset NUM_CPUS
#

the secondary env is specifically so that all circuitpython stuff are either using esp-idf env, or that.

#

Esp-idf removal from path was such a pain.

#

Hope these help.

onyx hinge
#

Use a subshell to confine the esp-idf environment changes? ```sh
$ X=1; (X=2; echo $X); echo $X
2
1

brazen hatch
#

Oh.

#

Oh well..
Thanks.

#

Imma update it and edit the message above.

#

Literally spent 3hrs making espunload.

onyx hinge
#

oof

#

learned something in the process, I imagine!

brazen hatch
#

It's bash, I will have forgotten by tomorrow

#

Updated it to use subshells.

#

It's cleaner this way. Leaving espunload in the aliases, in case someone wants to use it manually for flashing or something.

deft jay
manic glacierBOT
#

CircuitPython version

CircuitPython version doesn't seem to matter. Mostly I've tested with 8.0.0-beta.6 and 7.3.3, but I've added devices with versions all the way back to 5.3.1.


### Code/REPL

```python
No code needed.

Behavior

I've tested Pico W, QT Py ESP32-S2, Feather M4, and RP2040. In each case, the first one or two will mount, then subsequent similar devices won't mount at all or won't mount properly: They don't show up in Finder. They may not show...

lone sandalBOT
onyx hinge
stuck elbow
tame creek
#

i think itโ€™s the known displayio persistence across soft restarts

stuck elbow
#

it wouldn't matter if you used the spi singleton from board

#

(maybe)

jaunty juniper
ornate breach
#

Whatโ€™s weird is the learn guide for the st7789 displays released the display before setting up SPI

jaunty juniper
#

we could remove that

stuck elbow
#

it does nothing, as the fourwire will set its own baudrate anyways

jaunty juniper
#

it's not in any of the simpletest examples either, which the README code often is a copy of

onyx hinge
#

it's true, if the spi constructor was anything else but board.SPI() it wouldn't work. I was just wondering if there was a bug with board.SPI() being deinitialized by release_displays().

manic glacierBOT
tulip sleet
#

@slender iron: @onyx hinge and I were going to over the 8.0.0 list this morning maybe 11:30am ET. But if you are available, we should include you. Could also be after the 2pm, but Limor mentioned meeting sometime after then as well.

#

i have a non-work mtg starting in 10 mins for an hour or less

slender iron
#

@tulip sleet later is better for me. we have a niece here to watch ari but I'm helping her as needed. later becca will be back and I can definitely get away

midnight ember
#

i'm not going to make the meeting today, read the notes in there so far.

#

@slender iron I did submit an email last night and linked to a mastodon post.

#

should be at least 1 entry so far? ๐Ÿคทโ€โ™‚๏ธ

slender iron
#

kk, will get it sorted out. thanks!

midnight ember
#

also i know someone else used the circuitpython2023 hashtag on mastodon to submit theirs but no idea if they submitted an email along with it

#

i apologize for my long notes this week. there's been a lot of movement on the tr-cowbell in the past 2 weeks and very excited.

#

also wanted to share a video of the modular enclosure i'm designing. still new to fusion 360 and quite proud of the progress. i can't code very well... but i can design.

random junco
#

<@&356864093652516868> In just over 2 hours at 2pm EST is our weekly meeting. I look forward to seeing your hug reports and status updates. See you then!

manic glacierBOT
#

I have performed A LOT more testing on esp and nrf, everything works a-ok.
The only things that need to be taken care of is the recursion limit and the exception chain.

On esp with 8mb psram I reached recursion level 128k before crashing.
Do keep in mind though, after around 1k even if you press Ctrl + C, it will hard crash.
This is because of the exception chain being massive.

Should the recursion limit be implemented, and the exception chain being trimmed, we are good.
I wil...

brazen hatch
#

128k recursion level on circuitpy

#

this has to be a record

slender iron
manic glacierBOT
random junco
#

@slender iron Are you available to read the core section today?

slender iron
#

yup! I can switch off reading status updates and hug reports too if you like

random junco
#

great, thanks! By switch off, do you mean read for the folks who aren't able to attend?

slender iron
#

ya, you and I could share it

#

if you don't want to read them all yourself

manic glacierBOT
random junco
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

CircuitPython devices leave a trace in System Settings --> Network, but they can be cleared out (Neradoc has a script to do that more easily), and I did that to no avail. There may be other traces.

Testing across two Macs gives similar behavior. And it doesn't matter which of several boards are plugged in first, it's the later ones that don't mount properly. But once they have been "fixed", I can even put them on their own hub and plug the hub in and they'll all mount fine simultaneously...

onyx hinge
#

If I'm not mistaken Dan made almost all "can't set that property" errors better.

errant grail
#

PaletteSlice demo video. The image is expecting a 255-element palette but the slices are randomized and produce palettes of variable lengths. https://youtu.be/EwtSjBfnhWY

This is a test of the CircuitPython PaletteSlice wrapper class for displayio.Palette objects. PaletteSlice supports full slice and extended slice objects for trimming and reorganizing palettes. The test randomly creates sliced palettes of a reference orchid photograph and displays the results. The frame rate in code was slowed slightly for image...

โ–ถ Play video
errant grail
onyx hinge
#

I should have mentioned my #circuitpython2023 post: https://octodon.social/@stylus/109615118316334203

slender iron
#

thanks for hosting @random junco !

errant grail
#

Thanks!

slender iron
#

I'm back

onyx hinge
#

me too.

tulip sleet
#

me 3

#

are we in Amelia?

onyx hinge
#

That's where I went

random junco
#

@turbid radish Since the newsletter is already out, is there anything I need to do from the meeting? Just wanted to double check

mental nexus
manic glacierBOT
random junco
#

Here is the notes document for the next CircuitPython Weekly meeting. It is on Monday January 9, 2023 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! https://docs.google.com/document/d/1CCaNlkBSC3KGohT2RsjaM-RgqQzSwrRbdAABbg3NdPg/edit?usp=sharing

manic glacierBOT
#

@RetiredWizard I think the best approach is following the Pimoroni PicoLipo method, by having a separate 4mb and 16mb model:

https://github.com/adafruit/circuitpython/tree/main/ports/raspberrypi/boards/pimoroni_picolipo_4mb

https://github.com/adafruit/circuitpython/tree/main/ports/raspberrypi/boards/pimoroni_picolipo_16mb

@tannewt I haven't been able to test this myself so far (busy schedule), but since according to @RetiredWizard everything seems to work, I think we can do a preli...

tulip sleet
#

@onyx hinge @slender iron the baudrate setting for SPI flash is less complicated than we thought. THere is a max() done, but only once, and the speed is limited to be at or below SPI_FLASH_MAX_BAUDRATE. The speed is set on each read/write, but I'm guessing that is in case the SPI bus is shared with other devices.

manic glacierBOT
slender iron
#

so its just the jedec read that doesn't respect it?

tulip sleet
#

right, so their fix makes sense

#

the limiting is done in spi_flash_init_device() which is called later

manic glacierBOT
#

It doesn't seem to be a FAT12 vs. FAT 16 issue. Using (4) Adafruit Feather RP2040, no other storage devices connected to the Mac (just the display), processed each as follows.

One at a time:

  • flash-nuke
  • install 8.0.0-beta.6
>>> os.statvfs("/")
(1024, 1024, 7137, 7133, 7133, 0, 0, 0, 0, 255)

(OK)

% ls -l /Volumes
drwx------   1 a     staff  16384 Dec 31  1969 CIRCUITPY

(OK)

Disk Utility & Finder:
7.3MB FAT16
(OK)

  • REBOOT Mac (macOS 13.1)

Plug i...

manic glacierBOT
manic glacierBOT
#

This is a speculative fix for #7409 if the underlying cause is the deterministic volume ID. However, not all boards have working urandom (samd21 at least does not) so a couple of fallbacks are attempted when it fails. Note that the final fallback to the monotonic time is not great but probably has at least a few bits of randomness in it so it's better than nothing.

I verified that on a pico_w, each storage.erase_filesystem() gives a distinct 32-bit volume ID (pico_w's urandom can never f...

#

I notice on Linux that all CIRCUITPY drives end up with the same "volume serial number", 5021-0000, indicating the date of 2020-1-1. This means that when operating on drives "by uuid", there is confusion when two circuitpython devices are plugged in. (Tested with two pico Ws I had handy)

It looks like oofatfs tries to use the current timestamp to generate a serial number, which is obviously not working out for us:

            st_dword(buf + BS_VolID, GET_FATTIME());    /* VSN */
``...
onyx hinge
#

@crimson ferry I think my question was unclear. I meant to ask whether you un-plugged the earlier device before plugging in the next device. Not how long you waited.

crimson ferry
#

ah, yes, ultimately trying to have more than one mounted simultaneously

onyx hinge
#

I hope you can try with #7410. It's a total guess, but it can't be good that every device's "unique identifier" is actually the same ๐Ÿคฏ

crimson ferry
#

right, I'll try the artifacts later

#

i don't know about other linux flavors, but I can have multiples mounted simultaneously on Raspberry Pi OS

#

e.g., 4 Pico Ws will mount on Rasp Pi OS, but not macOS 13.1

jaunty juniper
#

it's a new issue in MacOS 13 too (which I don't have), except we have seen in previous versions the Finder open a file on the wrong board when mutiple ones were plugged in, even with different names

#

(but only the Finder)

crimson ferry
#

these 'bad' mounts are more fundamentally broken... they look wrong in shell

onyx hinge
#

I don't have a mac to do testing for myself

#

what I'm familiar with from linux/unix experience is that mounting a filesystem has two steps: creating an empty directory to serve as the mount point, then "actually mounting" the filesystem.

So I am speculating that the first step succeeds and the second step fails, because the second step is working by UUID and unintentially refers to the first (already mounted) block device.

But it's all speculation, I want to stress that like 5 times.

crimson ferry
#

@jaunty juniper you don't have macOS 13, or you don't have this issue?

jaunty juniper
#

I keep my macos version a few months/a year behind (or more if I don't like what they did like hiding the proxy icons)

#

I have a sacrificial laptop but it's too old for Ventura

tame creek
#

did Apple finally relent and let people install a newer macOS virtualized in an older host yet?

crimson ferry
#

gotcha, yeah I "fell victim one of the classic blunders" ...updating both Macs within a short time (once the UF2 issue was fixed)

manic glacierBOT
midnight ember
#

@slender iron sent it to adafuit, resending ๐Ÿ˜

manic glacierBOT
#

Hi, the E-Fidget is a board I've been working on for a while. It's a haptic feedback fidget designed with CircuitPython in mind. The userspace code is a work-in-progress, but the firmware side of things seems pretty reliable. I got a PID from pid.codes, and that's the one I'm using here. I've removed unexposed pins and changed the names to be hardware-specific in pins.c (hope that's normal). Here is the design source. ...

manic glacierBOT
#

One thing to test might be if you see the same issue if you plug in several USB sticks formatted with the same volume name.

The smallest matched set of USB sticks I could conjure up was (4) new / unused, ostensibly identical, 4GB FAT32 drives, no problem mounting them all on either Mac, even through a hub, even when other storage devices are already mounted.

manic glacierBOT
#

Build from #7410, while probably a Good Thing, doesn't help the non-mounting issue. I loaded it up on (4) Pico W, and as usual only the first board plugged in mounted properly:

d--x--x--x   2 root  wheel     64 Jan  3 20:30 CP198PICOW
drwx------   1 a     staff  16384 Jan  3 20:24 CP199PICOW
d--x--x--x   2 root  wheel     64 Jan  3 20:30 CP200PICOW
d--x--x--x   2 root  wheel     64 Jan  3 20:30 CP201PICOW

I wonder if it could be something like a bad pointer or buffer boundary i...

#

For the above, I simply installed the PR build and tried to successively plug them in. I can try other sequences if you think it might help.

BTW, I do have two other Pico W running 8.0.0-beta.6 that can both be mounted simultaneously. I'm hesitant to mess with those since they are very useful to me that way, but I can if needed. If my previous hypothesis is correct, there would be some difference of flash contents over time that let these work but not others with different history. Of co...

manic glacierBOT
#

Another fairly changeable number I looked at (by experiment) is microcontroller.cpu.temperature, if available, and microcontroller.cpu.voltage (if actually measured). The degree of precision on these varies: on SAMD21, temperature has only a few digits, but voltage has more. On RP2040, temperature has more, but there is no dynamic voltage measurement. However, both of these have a true UID so the point for them is moot.

#

OK, I gotcha. The volume_uuid are the same previously. Performed storage.erase_filesystem on each, verified the new IDs are different from the old and unique from each other. After a few unplug-all then replug-all, they all four mounted properly. w00t!

The two I mentioned that do mount are standard 8.0.0-beta.6: one has the default volume_uuid, the other is different (not sure how that happened).

manic glacierBOT
#

reading the source, it looks (previous to #4710) like the device's RTC time when you storage.erase_filesystem() will influence the resulting VolID. For instance, at apparently 16 seconds after boot, I ran erase_filesystem and got 5021-0008 instead of -0000. But when the device is blank (for instance, because it was nuked) the amount of time until it reaches the filesystem creation step will I guess be consistently under 2 seconds, and if so it'll be 5021-0000 consistently.

jaunty juniper
#

I am curious to see if 7410 solves the issues with the Finder opening a file on the wrong board. I rarely encounter it these days, though sometimes I am caught off guard by it. I would have to find a reproducible scenario, maybe check the volume IDs as curiosity, and test with this PR. (let's say tomorrow)

crimson ferry
#

You've gotten me in the good habit of opening the file from the bottom BBEdit selection. I think you can reproduce by resetting a board under edit and having another board with same filename.

manic glacierBOT
jaunty juniper
#

note that tinyuf2 uses get_fattime() for the VSN too, would it cause issues if multiple BOOT drives are mounted ?

jaunty juniper
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-beta.6 on 2022-12-21; Raspberry Pi Pico with rp2040

Code/REPL

try:
    raise Exception("Uh oh")
except Exception as ex:
    raise ex

Behavior

code.py output:
Traceback (most recent call last):
  File "code.py", line 4, in 
  File "code.py", line 2, in 
Exception: Uh oh

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ...
manic glacierBOT
lone sandalBOT
manic glacierBOT
#

Dear Dan

Perfect, now it works as expected:

A wake up and a measurement every 2 minutes.

Thanks a lot for your help!

Beat

Von: Dan Halbert @.>
Gesendet: Dienstag, 3. Januar 2023 21:12
An: adafruit/circuitpython @.
>
Cc: Beat Arnet @.>; Mention @.>
Betreff: Re: [adafruit/circuitpython] busio.I2C issues on ESP32-S3: LC709203F (Issue #6311)

Moved to 8.0.0 to test the patch mentioned in the previous comment.

โ€”
Reply to this email directl...

#

I only installed the latest 8.0.0-beta.6 without changes to my code and without the latest LC709203F library. I shall test that later.

Von: Dan Halbert @.>
Gesendet: Mittwoch, 4. Januar 2023 15:55
An: adafruit/circuitpython @.
>
Cc: Beat Arnet @.>; Mention @.>
Betreff: Re: [adafruit/circuitpython] busio.I2C issues on ESP32-S3: LC709203F (Issue #6311)

@BeatArnet https://github.com/BeatArnet I haven't yet put the C patch into the 8.0.0 (main) line. Co...

manic glacierBOT
jaunty juniper
#

(that's BLE coming for picow SDK soon)

slender iron
#

yup, I just asked on the issue if they are using nimble

tulip sleet
#

Either this one or another one, I changed the presentation order.

#

"Creating Your settings.toml" file is mirrored.

orchid basinBOT
orchid basinBOT
manic glacierBOT
orchid basinBOT
orchid basinBOT
manic glacierBOT
onyx hinge
#

@slender iron now that web workflow is good, what if we add RNDIS to do web workflow over usb? Is it too crazy?

stuck elbow
#

and replace the circuitpy drive with a samba share

slender iron
#

@onyx hinge I donโ€™t know what rndis is

onyx hinge
#

Networking over USB

crimson ferry
#

macOS 13.1 does seem to keep some stored state that can affect mounting. A couple of times as I've finished updating devices for the USB uuid, they wouldn't remount even after unplugging and delay. But if I took them to another Mac and renamed them (they weren't conflicting on the original Mac, but there were prior devices named CIRCUITPY), then they mounted on the original

#

the OS usually handles multiple same-name devices fine

manic glacierBOT
manic glacierBOT
#

Looking (and a bit of selective code commenting) in common-hal/socketpool/Socket.c I believe

981 err = tcp_connect(socket->pcb.tcp, &dest, port, _lwip_tcp_connected);

is the line that causes the issue. I took a look at the tcp_connect function in tcp.c and compared it to the same function in esp_tls.c hoping that the comments would suggest a clue. The only thing I noticed (understood) was that the ESP module sets the socket to "non-blocking" before connecting. That sounds ...

manic glacierBOT
#

A couple more observations during testing:

The first power up after flashing CircuitPython Web Workflow doesn't start (device isn't listed on other board pages, title bar doesn't show IP until web.radio.connect and hosted web page isn't available). Ctrl-D soft reboots don't bring it up. The network stack seems to be working, Once it's connected to an access point via wifi.radio the device can be pinged and it can access the network but none of the Web Workflow services are available.

Th...

manic glacierBOT
#

On Tuesday, January 3, 2023 at 07:53:58 PM PST, Dan Halbert @.***> wrote:

Could you test with 8.0.0-beta.6 from here: https://circuitpython.org/board/unexpectedmaker_feathers3/ ? Thanks. It could easily still not be fixed, but worth trying the latest. (We know of I2C problems on S3.)

โ€”
Reply to this email directly, view it on GitHub, or unsubscribe.

You are receiving this because you authored the thread.
I loadedย uf2 circuit python from unexpected maker 8.0-beta.6, and ...

manic glacierBOT
manic glacierBOT
thorny jay
storm minnow
#

It has Bluetooth?!?!

jaunty juniper
#

yeah the module does bluetooth, but it was not implemented yet

stuck elbow
#

more blobs

storm minnow
#

I had no idea the hardware was there!

thorny jay
#

I am not under NDA or anything... but I have strange feeling about Pico and the Raspberry Pi Foundation.
They made the RP2040 where 2=#ofCore 0=Type(M0+) 4=floor(log2(ram/16k)) 0=floor(log2(nonvolatile/16k))... so we can hope some other RP#### one day.
But when the Pico was out, they already knew the PicoW was coming (it the PicoW sacrifice some of the PIO for doing the SPI to the wifi chip).
Then they announced the W and the WH (but for the WH with header we have to wait).
Now they might announce the BLE upgrade...
But at the end of the day, it is still the same chip, that the hype again and again, but it is still the same "product".
And the SBC is not evolving either (but it is not a good time to evolve since they have already trouble to get stock of the current).
They don't really have any new product (except very specific not for mortal CM4 into CM3 package) and they are just keeping us entertained with variation of what they have.
It is very likely that this has an impact on reseller, because who need a Pi HAT if there are no available Pi SBC.
And the "W" of the "Pico W" is not available separately, so company like Pimoroni are just making board with a Pico W soldered on it (and not sure if the antenna location is optimale... and there are no external antenna option!!!).
I don't know what is going on or if we have to expect anything, but Adafruit is making PiCow addon board... I just wait Lady Ada to do an Ask an Engineer dressed with her Raspberry Pi T-Shirt... hoping it mean there will be a new product announcement at 10AM UK time.

stuck elbow
#

you can't churn them out every year

#

it also takes time for the ecosystem to catch up

#

esp32-s2 was released like 2 years ago and still has no full ble support, for example

#

end there is zero support for espnow

thorny jay
# stuck elbow you can't churn them out every year

Yeah, I understand that, however... making the same with a variation is not new development, but sure a cost and why would they do that if the current is selling well. It is just that they just sell the same product again and again somehow, I am just a bit disappointed.

stuck elbow
#

each time you change anything in a chip design, you have to go through the whole costly process

#

personally, I'm happy for "unlocking" extra features (like the usb host), especially if I already have the hardware

#

or remember that time when CircuitPython got a 5x speedup for free?

ornate breach
#

Iโ€™m more disappointed in what feels like a cultural shift by RPi and what feels like a shift away from the maker community.

#

Like yeah, we have the RP2040 and itโ€™s new variations.. and I understand business is still business, you have to prioritize business that keeps you afloat

stuck elbow
#

well, they incorporated, that's always a change for the worse

storm minnow
#

RP4080 when

stuck elbow
#

suddenly you don't just need to stay afloat, but you have to report inflated growth numbers

brazen hatch
storm minnow
#

Imagine if Adafruit made an RPi-type SBC ecosystem

ornate breach
#

But at the same time theyโ€™re alienating the people who made them who they are and itโ€™s sad..

#

I would buy 10 AdaPuters

storm minnow
#

I would buy hundreds

brazen hatch
stuck elbow
#

there are feathers running linux out there

storm minnow
#

Has Lady Ada done any CPU design?

ornate breach
#

Open source silicon moves definitely could open the possibility of Ada Silicon

ornate breach
stuck elbow
#

it's a whole different world

ornate breach
ornate breach
#

VLSI is very large scale integrated circuits

#

VLSI design basically

storm minnow
#

Ahh

stuck elbow
#

you can build a 4-bit cpu on a breadboard, but it's a long way from something like rp2040, not to mention the chips in sbcs

ornate breach
stuck elbow
#

and I'm not even talking about silicon design here, just the design of the processor itself

storm minnow
#

Well, even if Lady Ada herself hasn't done CPU design, and if it's beyond what she's interested in doing herself, she could probably find folks to do it

#

I think even small CPUs are done by teams tho

ornate breach
#

Iโ€™d do it

ornate breach
stuck elbow
#

I think you greatly underrate the difference in size between raspberry pi foundation and adafruit

ornate breach
#

RPi is huge, an order of 10 larger than Adafruit

storm minnow
#

I know RPi is biiiiiiiig, but they didn't start off that big

stuck elbow
ornate breach
#

$60m vs like.. 600m in revenue

stuck elbow
storm minnow
#

oh...

stuck elbow
#

as a part of broadcom

storm minnow
#

Government, fund Adafruit

ornate breach
#

Basic computer architecture and digital logic + HDL knowledge is all you really need these days. A little persistence to use the caravel user project template. But thatโ€™s it

stuck elbow
ornate breach
#

Heck, you can develop a chip in Wokwi.

#

Iโ€™m saying the barriers to get started are very low anymore

storm minnow
#

Y'all should just make a chip

ornate breach
#

I am

#

Iโ€™m doing my masters in electrical engineering focused on semiconductor development

stuck elbow
#

making a game in Scratch is not the same as developing an AAA title, and though it is helpful in teaching, the tool doesn't help you in the end

#

I agree the tools are improving greatly and making it more accessible, like Scratch does for simple games

ornate breach
#

Sure, but you have to start somewhere. And these tools lower that first step.

stuck elbow
#

but that still won't let you design something like the rp2040

ornate breach
#

Well no, arm IP is expensive

#

But developing an 8Bit CPU? Doable in a weekend.

stuck elbow
#

a practical one? I have my doubts

ornate breach
#

I mean, I did. It wasnโ€™t Turing complete because I forgot a not instruction

stuck elbow
#

ah, like that, then sure

ornate breach
#

These days, many fabless companies develop their ICs in HDLs and then use HDL translation tools to layout. They still have dozens of engineers working on it of course..

#

But developing a circuitpython ready MCU? If someone worked at it for a year they could probably do it. Even with only a working knowledge of digital design

stuck elbow
#

but that's a very bright person not working on circuitpython instead

ornate breach
#

And this is because the tools exist that remove many of the tedious steps in chip design.

ornate breach
storm minnow
#

What makes a design "practical" that can't be done with the tools?

manic glacierBOT
ornate breach
#

The most difficult part youโ€™ll find is having a good enough understanding of computer architecture and how to translate that into tools that can program the device. If youโ€™re doing open source, youโ€™ll have to use COTS open source IP cores. You donโ€™t get SWD, you have to use standard JTAG, you have to reduce memory complexity, etc..

storm minnow
ornate breach
storm minnow
#

Does memory complexity matter much for an MCU?

ornate breach
#

It can if youโ€™re trying to squeeze performance out of small die areas.

storm minnow
#

Ah...

ornate breach
#

My argument is that you can design something that could run circuitpython in a year, Iโ€™m not saying it will run amazingly; but you could do it if you put in the sufficient amount of effort.

storm minnow
#

And that's the first step to eventually getting to amazing

ornate breach
#

It would probably not be very optimized or particularly powerful. But it could be done.

storm minnow
#

It's kinda like Intel with their Arc GPUs right now -- they're not really impressive compared to AMD or NVidia's offerings, but they're in the ring, and have a trajectory for improvement

ornate breach
#

It gives them a starting point

storm minnow
#

Exactly. Gotta start somewhere

ornate breach
#

For Adafruit, they wouldnโ€™t necessarily have to even start with designing a chip. Develop IP that can run on an Adafruit fpga dev board, that IP can then be iterated on and improved, then translated into test silicon.

#

It would take like, 4-5 years to fully get through

storm minnow
#

I wish I had the spoons to jump in on that

ornate breach
storm minnow
#

Maybe next year? I'm trying to clear my project plate before adding more things... I already added things this year >~>

ornate breach
storm minnow
#

Yeah, there's no way I'm gonna make that DX I currently know nothing about that sort of design and have way, way too much on my plate to be able to learn any time soon

ornate breach
#

Lol, anyway drifting off topic and I have a meeting ๐Ÿ˜ฌ

storm minnow
#

Oop.... ttyl

slender iron
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
crimson ferry
#

Is it intentional for the error to persist in the terminal title bar after a reload? (PyPortal)

manic glacierBOT
hollow gazelle
#

the Scorpio page mentions ". It's also possible to flip the direction of the level shifter to make the 8 I/O pins inputs - say for making a logic analyzer - with a directional jumper selection also on the bottom of the PCB."
is any one looking at ways to collect logic analyzer data and present it to existing GUI applications?

blissful pollen
#

There was some work on hooking the RP2040 to sigrok / PulseView. I had a very rough implementation that basically dumped data out that you can load in. kmatch I think got more working

mental nexus
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.3.3-1-gac1e66051-dirty on 2023-01-03; Adafruit MagTag with ESP32S2

Code/REPL

import alarm
import board
import time

pin_alarm = alarm.pin.PinAlarm(pin=board.BUTTON_A, value=False)

if isinstance(alarm.wake_alarm, alarm.pin.PinAlarm):
    print("Woke from button press!")
    toggle_wifi_enable(display)

# Do some stuff

# Go to deep sleep
time_alarm = alarm.time.TimeAlarm(monotonic_time=time.monoton...
ornate breach
manic glacierBOT
tulip sleet
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-beta.6-25-gbb3a1c0a2 on 2023-01-04; Adafruit PyPortal with samd51j20

Code/REPL

# Exception

Behavior

I'm able to reproduce this. With the following sequence of events, an Exception printed in the terminal title bar persists after a restart:

  File "code.py", line 1159, in 
IndexError: index out of range

Code done running.

Press any key to enter the ...
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

After installing the latest version of adafruit_lc709203f I got sporadic errors (about every 4th to 8th time). Therefore, I continue to work with the hack, which works wonderfully for days.

Hi - The library change was meant to imitate the hack you mentioned. It scans for the device multiple times to wake it up. Could you post the code you are using that is running for days, and the code you tried with the latest library that is _not_working consistently. I am interested in what is differ...

manic glacierBOT
hollow gazelle
hollow gazelle
blissful pollen
#

I think auto_push is just if the PIO buffer gets pushed out or the PIO program has to explicitly call for that (been a while so I could be wrong). push_threadshold is where some of that takes place.

blissful pollen
#

A lot are just passthrus from the actual PIO SDK so you can probably find information there as well if needed

manic glacierBOT
hollow gazelle
orchid basinBOT
sharp jacinth
#

What do folks think of the new P4 chip? From a cursory glance I think it's CP compatible

tulip sleet
sharp jacinth
#

Ah ok cool

#

Well I feel like I could justify a good bit higher price for something like that on a feather or smaller

brazen hatch
#

P4 who dis?

#

who made it?

jaunty juniper
#

"high performance" "50 GPIO"

#

*more than

brazen hatch
#

sign me up

#

almost a meg of sram

#

What kind of form factor though can have 50 pins..

jaunty juniper
#

a big one !

brazen hatch
#

I can only think of something like the PGA 2040

jaunty juniper
#

I don't know package names, but when I look at the Grand Central it's big

#

(that's a SAMD*51 and 70 pins)

brazen hatch
sharp jacinth
#

So inside the qt py samd21, is the silicon the same as the samd21 on the grand central?

#

Just not as exposed?

brazen hatch
#

if it were to be pico form factor it would be loooong boi

jaunty juniper
#

since it's Espressif there's gonna be 20 different modules with confusing names is all I know ๐Ÿ˜‰

brazen hatch
#

That's the best part.

manic glacierBOT
#

Build artifacts are here: https://github.com/adafruit/circuitpython/actions/runs/2032460774. Click on the lilygo "Details" link above, then click on "Summary", and then scroll down.

These have expired and are no longer downloadable, is there anyway to get this? It appears LilyGo won't provide a PID, @raspberrypi said LilyGo is the only one that can request it from them but they'd look into it. In the interim, I'm trying some way to flash circuitpython, even if unsupported, to this device...

manic glacierBOT
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.3.3 on 2022-08-29; Adafruit MagTag with ESP32S2
Board ID:adafruit_magtag_2.9_grayscale

Code/REPL

import time
import wifi
import socketpool
import ssl
import adafruit_requests
from secrets import secrets
wifi.radio.connect(ssid=secrets['ssid'],password=secrets['password'])
print("my IP addr:", wifi.radio.ipv4_address)
pool = socketpool.SocketPool(wifi.radio)
session = adafruit_requests.Session(pool, ss...
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

Thanks @anecdata; here is the output of curl:

  • Trying 91.237.139.103...
  • TCP_NODELAY set
  • Connected to api.um.warszawa.pl (91.237.139.103) port 443 (#0)
  • ALPN, offering h2
  • ALPN, offering http/1.1
  • successfully set certificate verify locations:
  • CAfile: /etc/ssl/cert.pem
    CApath: none
  • TLSv1.2 (OUT), TLS handshake, Client hello (1):
  • TLSv1.2 (IN), TLS handshake, Server hello (2):
  • TLSv1.2 (IN), TLS handshake, Certificate (11):
  • TLSv1.2 (IN), TLS handshake, Server...
manic glacierBOT
#
void common_hal_mcu_processor_set_frequency(mcu_processor_obj_t *self, uint32_t frequency) {
    if (!set_sys_clock_khz(frequency / 1000, false)) {
        mp_arg_error_invalid(MP_QSTR_frequency);
    }
}

Not related to your changes but if you are at it, can you please change the signature of the function:

- uint32_t common_hal_mcu_processor_set_frequency
+ void common_hal_mcu_processor_set_frequency

The changes need to be made at the following 3 pla...

manic glacierBOT
#

One thing to check is if any code is assuming 125000000 as the clock frequency. I searched for 125:

I think this could be fixed:
https://github.com/adafruit/circuitpython/blob/037bfb39e37af04b74a6f77d8a5eb0eb8cbce271/ports/raspberrypi/common-hal/rgbmatrix/RGBMatrix.c#L42

Another issue is code that has timing derived from assuming 125MHz. This may also be fixable, at least within a certain range:
https://github.com/adafruit/circuitpython/blob/037bfb39e37af04b74a6f77d8a5eb0eb8cbce27...

#

I have found, that adafruit_requests is frozen, so I have replaced it with my version.

I have added prints at certain moments of the file (as I don't know how to debug life on the MagTag), I wanted to check, what is actually going on.
I found that function _get_socket is having problems with connecting. To be exact, this is where is the problem:
sock.connect((connect_host, port))
As my Python capabilities are limited, I am asking for help. Comparing 2 different addresses (Adafruit ...

manic glacierBOT
#

Thank you for working on this PR! A number of people would like functionality like this. However, I have some remarks about problems that seem likely to occur when this functionality is made available and would like to see the documentation improved to anticipate them.

Say that I create an object like PWMOut that has an associated frequency (1MHz), then change the CPU frequency from the default (125MHz) to 20MHz. As I understand it, the frequency of the PWMOut will also change, because it...

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-beta.6 on 2022-12-21; Adafruit Feather ESP32S3 4MB Flash 2MB PSRAM with ESP32-S3
Also tested and replicated on ESP32-S2 board

Code/REPL

from adafruit_httpserver.mime_type import MIMEType
from adafruit_httpserver.request import HTTPRequest
from adafruit_httpserver.response import HTTPResponse
from adafruit_httpserver.server import HTTPServer

pool = socketpool.SocketPool(wifi.radio)
server = HTTPServe...
#

The 301 redirect shouldn't be a problem, but you could try putting the final location URL in as your initial URL in Requests.

Here's what I have in that section of Requests for debugging. It's likely to be an OSError, which one could give clues.

            try:
                sock.connect((connect_host, port))
                print(f"#### DEBUG sock.connect success")
            except MemoryError as e:
                traceback.print_exception(e, e, e.__traceback__)
     ...
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

When I upload a uf2, the device restarts with the reason being

>>> microcontroller.cpu.reset_reason
microcontroller.ResetReason.WATCHDOG

the web workflow may skip being started depending on reset reason:

    // Skip starting the workflow if we're not starting from power on or reset.
    const mcu_reset_reason_t reset_reason = common_hal_mcu_processor_get_reset_reason();
    if (reset_reason != RESET_REASON_POWER_ON &&
        reset_reason != RESET_REASON_RESET_PIN &&
...
manic glacierBOT
manic glacierBOT
#

@anecdata I have taken the certificate from the page, and added as in your example - same results.
I thought that adding this cert will not turn off others, but it did and with such settings, sites that were working like adafruit quotes, stopped.
Waiting for @dhalbert or @support to come and check.
Thanks!

W.

tulip sleet
lone axle
#

<@&356864093652516868> See above about meeting today ^ (this didn't ping, I think due to missing t in the role tag)

tulip sleet
lone axle
#

Does anyone happen to know if / how we instruct RTD on what version of the theme to use for building the docs for the pages that get hosted in their infrastructure?

#

Ahh, maybe it's just based on the date the project was created:

#

Ahhhh, yeah that does seem to be the crux of the issue. Any of our libraries created before that date use an older version of the theme that doesn't handle copying example code correctly (it includes line numbers which then have to be manually removed) :/

tulip sleet
lone axle
#

I'll make a note to discuss it in the weeds.

tulip sleet
#

@lone axle I'm not sure if this helps any but here is the "Advanced Settings" for a typical library. Note the "ignored" stuff at the top, so it may be irrelevant.

lone axle
#

interesting. Yeah I'm thinking our config file is taking precedent. We specify python 3 in there and I believe it uses that when it makes the builds. Not certain though.

brazen hatch
#

I presume the sus stdin on C3 is known right?

#

If you send characters during boot, it breaks down entirely and it occasionally desyncs and requires double presses.

tulip sleet
brazen hatch
#

I'm talking about beetle c3 but fine
When I find time I will go write a detailed report / issue.

#

Its just seems so frequent ppl should be complaining about it like all the time
this is the reason I havent spoken about it

#

I have been fighting it since beta 0

#

though beetle c3 is a board I only use to specifically test c3
I hate it

#

I just had to test stackless

wraith crow
#

The c3 had issues with the serial repl for a long time and only recently became usable at all. There's probably not a lot of people using it yet.

brazen hatch
#

Oh, so its documented then?

wraith crow
#

I don't think the issue you're seeing, there was a serial timing issue

#

it would drop characters randomly

brazen hatch
#

Ljinux has a full 'curses' library
It can break pretty badly on c3

#

special character input is a 70% success rate

#

like arrow keys and things are 3 bytes

#

once one fails to go through, it progressively breaks down further

wraith crow
#

I'm thinking you should definitely submit an issue when you get a chance. The last time I was using the c3, I was so happy it worked at all that I would have expected some minor problems

brazen hatch
#

alright will do, thanks for the info!

onyx hinge
#

if there's not an open issue we typically don't know it exists; and even if we knew and forgot to file the issue, that doesn't help the community. So, filing bugs is almost always a fine idea (searching for closed ones first doesn't hurt though)

manic glacierBOT
idle owl
#

@plucky tulip In the notes document for the meeting - please put your updates in alphabetical order, ignoring the host. ๐Ÿ™‚ It basically doesn't matter anymore because we simply read the notes, but still, it can help.

#

If that makes sense anyway.

tulip sleet
#

@plucky tulip if you would like to speak, we can add you to the right discord role for that

idle owl
#

Their update says text only. But good call, Dan.

#

We can add you to the role regardless, if you'd like weekly meeting updates. ๐Ÿ™‚

tulip sleet
#

i was just seeing who was in the chat already

plucky tulip
#

Oh, sorry, didn't know about alphabetical thing. If you could add a role, I would apprecieate the updates ๐Ÿ™‚

onyx hinge
#

You may have to leave and re-join the voice chat before you can send audio in there

#

not sure if that discord limitation still exists or not

plucky tulip
idle owl
#

Oh yeah! I forgot I added the Blinka heart emojis! ๐Ÿ˜‚

#

Back!

lone axle
gilded cradle
#

Is the CircuitPython forum the same as the Adafruit forum?

lone axle
lone axle
midnight ember
#

yey nice one 2231puppy! gotta be the haptic fidget spinner.

gilded cradle
#

๐Ÿ‘

midnight ember
#

Congrats on the board 2231puppy!

digital ibex
#

Thanks!

midnight ember
#

Welcome back Kattni

idle owl
#

Thanks!

midnight ember
#

Where are you selling them and what program are you using to design the enclosure?

digital ibex
midnight ember
#

looking forward to seeing the new pedal restoration, the ibanaz stuff was neat to see.

thorny jay
onyx hinge
#

you may need to explain the johnny 5 reference .. I think I get it but that movie was a looong time ago ๐Ÿ™‚

midnight ember
onyx hinge
#

classic

storm minnow
#

Itโ€™s onlyโ€ฆ checks notes 36 years old?!?!

midnight ember
#

I'm old, checks out.

#

The lego fooseball table is really cool

idle owl
#

"for real this week" ๐Ÿ˜‚

storm minnow
#

How did we get old

thorny jay
lone axle
#

there are manual little pegs for keeping score, but I've heard they are tough to use. Plus I can't skip out on a chance to embed circuitpython device into something else!

#

If I get everything working I'll publish the steps to "retrofit" the stock set with the bits needed to add sensors into it.

idle owl
#

"buglet" ๐Ÿคฃ

midnight ember
#

keyboard guru

digital shoreBOT
idle owl
#

I love it.

lone axle
#

Open source hacking vacation sounds awesome. Fascinating project with the display emulation as well, interested to see where that leads

midnight ember
#

๐Ÿ†• spudgers

onyx hinge
#

spudging videos are the new unboxing videos

midnight ember
#

the right to repair stuff is really taking off, ifixit is getting a lot of stuff in like that

#

installer wizard? what is this. interesting.

idle owl
onyx hinge
idle owl
#

I had a few left from being there, but no idea where they are. It was a long time ago. ๐Ÿ˜„

digital ibex
#

I think I'm gonna go text only, it's getting a little busy where I am

midnight ember
#

never underestimate the usefulness of a quality spudger

#

the line numbers are an issue for beginners who intend to copy code

digital ibex
#

Actually I've gotta go, bye all!

thorny jay
midnight ember
#

there are some examples in learn guides that contain repl >>> and it's kinda the same issue too. we do see beginners occasionally in help with that have unknowingly copied repl characters into their code.py

onyx hinge
#

well that makes my list of libraries by creation date less useful ๐Ÿ™‚

#

testrepo is old enough but kattni's other points stand

#

maybe irremote added 2018-01-26

thorny jay
#

Thanks.

errant grail
#

Thank you!

onyx hinge
#

@lone axle happy for the chance to work on my web API skills, they are still rudimentary!

midnight ember
#

Thank you for hosting Dan

ember iris
#

Thanks all, have a good one!

gilded cradle
#

Thanks

orchid basinBOT
lone axle
#

I wonder if it would be possible or worthwhile to try to include a clarification message on the page for boards that don't have a stable release yet. It's ideally a short window of time and devices, but I have seen it come up a few times. A message explaining that it is normal and expected for those device to have no stable release at this time might help re-assure people they have the right thing.

midnight ember
#

List for batch 2 of TR-Cowbells is now full. Cannot accept anymore inquiries.

lavish saffron
#

@lone axle Thanks for all your hard work with the reviews of the Wiznet driver. I've updated the other pull requests to include the changes that you just merged. Hope that makes life easier for you.

idle owl
lone axle
midnight ember
#

@idle owl 16 switch linear macropad. eventually i intend on using it with OBS to switch cameras while recording youtube videos. basically like any macropad.

idle owl
tulip sleet
#

Here is the notes document for next Tuesdayโ€™s CircuitPython Weekly meeting. The meeting is Tuesday due to a US holiday on Monday. 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/1aNx4nRN0TXR7JaEv5dAu139IgZDz8aMCPL-wS6WICZI/edit?usp=sharing

midnight ember
#

yes the hardware format is designed primarily for that but with mode switching you can make it a macropad. sequencers were originally video broadcasting devices for switching cameras, then someone started using it exclusively for music buttons. history of sequencers are rooted in broadcast video.

#

so they are naturally great for someone like JP or streamers who have multiple cameras.

idle owl
midnight ember
#

is that a real episode? i'd totally watch it.

idle owl
#

(I'm actually lol'ing over here)

onyx hinge
#

there are certainly youtube channels of taking electronics to bits, big clive comes to mind. it can get a bit repetitive, mind you.

idle owl
#

Yeah, that's why I picked something super small for my apparently-not-so-silly example.

#

Because with something like that, if you combine too much into one, you'll run out.

midnight ember
#

spudgers seem silly until you need to replace the battery in your car's key fob, those suckers are precision tight and almost always with a waterproof gasket.

ornate breach
lone axle
#

So far I've hit a bit of a snag with the shinx-rtd-theme issue. I added sphinx-rtd-theme to docs/requirements.txt inside the irremote library to test. But the problem is inside of RTD it executes pip install on it's own default hardcoded version first, then afterwards it executes pip install on our requirements file.
When ours runs it gets "requirement already satisfied" for the library since it was installed in the previous step at that hardcoded default version.

If there were some flag or way inside requirements.txt to specify that you want to force it to get the newest one, that could be a fix. But as far as I can tell that doesn't seem to be a thing that exists.

We can specify a version in the file i.e. sphinx-rtd-theme==1.1.1 and that does make it get the stated version and then does indeed fix the example copying issue. But that means our version is now pinned and we won't use newer ones as they become available. We currently have sphinx>=4.0.0 in the requirements, so maybe the crux of this issue was discovered before? Or maybe we were just more keen on a pinned version for sphinx.

So far though it's looking not possible for us to force RTD to always use the latest version. We can force a specific version (or greater or lessthan with pip syntax), but not force the latest version. Hopefully I am missing some part of the puzzle and there is actually a way. I've created an issue here to ask the RTD folks: https://github.com/readthedocs/readthedocs.org/issues/9876

stuck elbow
idle owl
#

Oh hmm.

#

Didn't finish reading before responding apparently.

#

Wait, isn't "greater than x.x.x" going to get latest? Or is it a freeforall at that point.

stuck elbow
lone axle
#

If I am wrong and that does actually get the newest ones, that would solve it for us though I think.

stuck elbow
idle owl
#

@lone axle Please tag me on that RTD issue. We have an odd situation with our account because we wanted to move it to a business account, but that would have broken everything we already have, so they enabled the features on our account, but we're still "community" or whatever it's called. Anyway, point being, if there's something that they can do on their end, it's possible I can make that happen.

#

They didn't have a migration tool or anything yet for going from a massive community account to a business account.

#

Thanks!

lone axle
#

I can see upsides of both pinning, and always taking the latest. I don't have a strong opinion either way. In this case RTD has chosen to use latest version for that library by default on projects created after a certain date, so I'm hoping it's at least possible to make the same behavior for ones created before.

idle owl
#

But fair enough.

lone axle
#

I will try with the Greather than and see what version it lands on. right now for that library 1.1.1 is latest "real version" but they do have some 1.2 rc's

idle owl
#

I understand both sides of that camp though.

lone axle
#

yep, different libraries are better or worse at breaking change releases as well so it all depends on so many things

idle owl
#

Indeed.

lone axle
#

tagged you in a comment on there. Heading outside to spray off some things while it's not quite so cold. back in a bit.

lone axle
#

Ah, I do think Deshipu is right about the greater than taking newest, rather than "lowest that is newer than"

Looking at sphinx for reference it looks like it gets a much newer version when it installs that one.

So maybe this is actually easy fix of just adding the greater to whatever version is "new enough" to have the fix, or really any new-ish version.

#
Collecting sphinx>=4.0.0
  Downloading Sphinx-6.1.2.tar.gz (6.7 MB)
idle owl
lone axle
#

yeah definitely. I hope it is the latest because it would be so weird of one to land on if not.

idle owl
#

Exactly.

#

@lone axle It's latest.

tulip sleet
lone axle
#

Yep I think that is true, I saw some with a range and a few other combinations. Apparently you can use commas to make arbitrary multiple logic rules for it.