#circuitpython-dev

1 messages · Page 4 of 1

manic glacierBOT
slender iron
#

thanks for the testing @wraith crow

manic glacierBOT
onyx hinge
#

It turns out that a fisheye camera is NOT good for trying to scan a QR code with, qrio doesn't correct for optical distortion at all. that's part of why it was being so moody when I tried today

stuck elbow
#

I thought qr codes were designed for that?

onyx hinge
#

there are probably better libraries out there? but this one is good for a microcontroller

stuck elbow
#

I dream of one day porting the apriltags code from openmv

onyx hinge
#

Would love to see you do it!

stuck elbow
#

it's way over my head currently, but who knows

onyx hinge
stuck elbow
#

well, it's Intel, they have decades of experience with making broken things

manic glacierBOT
#

While playing with the serial terminal I stumbled on a reliable way to reproduce the disconnect. I don't really understand what's going on with the STR variables here, but if you read a single character from the attached file it reads a string of length 4 into that single character. If you then print that character the serial terminal disconnects and you get the following message in the developer console:

 WebSocket connection to 'ws://10.0.0.206/cp/serial/' failed: Could not decode a ...
manic glacierBOT
#

I believe the issue is that the disconnect.txt file doesn't contain utf-8. When you are opening the file, you are asserting that the file is text in utf-8. CP isn't catching it is invalid. Instead it is giving you a four byte character which websocket faithfully writes out. The browser is the first to notice that it is invalid utf8. (bytes 2-4 should be 10xxxxxx).

Here is what CPython gives:

>>> f = open("/home/tannewt/Downloads/disconnect.txt")
>>> c = f.read(1)
Traceback (most ...
tidal kiln
#

is there a good pin out or other ref somewhere that shows what pins on the RPI pico are PWM channel A vs B?

#
Adafruit CircuitPython 7.3.2 on 2022-07-20; Raspberry Pi Pico with rp2040
>>> import board
>>> import countio
>>> counter = countio.Counter(board.GP8, edge=countio.Edge.RISE)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: Pin must be on PWM Channel B
>>> 
idle owl
blissful pollen
tidal kiln
#

thanks. looking for something less low level, to point forum user to.

idle owl
tidal kiln
#

no prettypins for pico 😦 its reusing the pi's graphic i think.

idle owl
#

It would involve updating PP to support it.

tulip sleet
#

PP for this board would be great

jaunty juniper
tulip sleet
#

yeah, the graphic in guide is their graphic but I moved the legend around a bit to make it narrower

jaunty juniper
tidal kiln
#

^^ neat!

tulip sleet
#

I would put that in the guide instead

#

if it's not copyrighted

idle owl
#

Nice find!

tulip sleet
#

or at the very least put a link in

tidal kiln
#

@jaunty juniper thanks. i can just give that url and say "click advanced".

jaunty juniper
manic glacierBOT
tidal kiln
#

@blissful pollen also thanks. that's a nice summary table.

manic glacierBOT
manic glacierBOT
manic glacierBOT
#

Re: #3192, #3069

Reading through the above two reports, I can see that it was decided that the F1 has too little RAM and/or flash storage for circuitpython. I appear to have a variant which may have enough storage and RAM, though - the STM32F103RGT6, on board the M24SR-DISCOVERY. According to the docs for this board, it has 1M of storage, and specs for the STM32F103RGT6 indicate 96k RAM. While these aren't phenomenal specs, ...

manic glacierBOT
#

While testing this on the ESP32-C3 and ESP32-S3 I noticed a possible issue. When I run the following code:

 from supervisor import runtime
 i=0
 print("Press any key to stop output")
 while runtime.serial_bytes_available == 0:
     i+=1
     print(str(i)+"012345678"*5+"abcdefghijklmpqrstuvwxyz")

in the Web Workflow serial terminal it will run for a short time (how long varies from run to run and depends on the particular ESP chip) and then stop. The code wil...

hidden rain
#

Preliminary working analogio AnalogFastIn.

#

User code.py under latkinso42/adcdma.

manic glacierBOT
#

As you can see from #3192 and #3069, there was still a lot of work to do with the F1's, because there are idiosyncratic differences between F1 and F4. 96kB is marginal for a good CircuitPython experience, and with RP2040 and other chips available with much more RAM, it's not clear it's worth it for someone to spend time on this. Cheaper, more capable, and more readily available chips are available. Certainly don't do it just because you have the dev board; it's far less trouble to just buy a ...

manic glacierBOT
kind meadow
#

Hey...question. I just flashed my MagTag with the CircuitPython bin file on Mac OS and it won't show up as a drive afterwards. Even after pressing reset. Does this not work on Mac or something?

jaunty juniper
#

hi, what bin did you flash and how ?

kind meadow
#

I used esptool to install it.

#
michaelmain@MacBook-Pro Downloads % ~/Library/Python/3.8/bin/esptool.py --port /dev/cu.usbmodem01 --after=no_reset write_flash 0x0 adafruit-circuitpython-adafruit_magtag_2.9_grayscale-en_US-7.3.2.bin
esptool.py v4.2.1
Serial port /dev/cu.usbmodem01
Connecting...
Detecting chip type... Unsupported detection protocol, switching and trying again...
Detecting chip type... ESP32-S2
Chip is ESP32-S2
Features: WiFi, No Embedded Flash, No Embedded PSRAM, ADC and temperature sensor calibration in BLK2 of efuse V1
Crystal is 40MHz
MAC: 7c:df:a1:1a:e3:12
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00167fff...
Compressed 1471216 bytes to 957917...
Wrote 1471216 bytes (957917 compressed) at 0x00000000 in 16.9 seconds (effective 698.4 kbit/s)...
Hash of data verified.

Leaving...
Staying in bootloader.
jaunty juniper
#

ok, I'm almost sure it's not supposed to go at address 0, but I use the UF2 (or I flash the UF2 bootloader)

kind meadow
#

My MagTag sadly doesn't have UF2 on it. How do I go about installing the UF2 bootloader?

#

Or do we know what address we are supposed to start at?

jaunty juniper
#

there's a "factory reset" part in the guide, or you can grab the tinyuf2 from the bottom on the page, and flash the combined.bin from the zip (at address 0 this one)

kind meadow
#

Okay. Got uf2 bootloader flashed. I think we are in business now.

jaunty juniper
#

👍

kind meadow
#

Thank you very much! I was pulling my hair out XD.

manic glacierBOT
#

I removed the extra call to port_idle_until_interrupt and added an ESP_LOGE print just before the original call to port_idle_until_interrupt.

The output of the program stops after the second call to port_idle_until_interrupt. The number of lines that print varies from a few hundred to a few thousand but there are always two calls to the idle function and the program appears to stops just after the second call is made.

kind meadow
#

Question. Is there a way once you have your code the way you like it in circuit Python to make it permanent so to speak? Like basically make it so that it can’t mount the circuit Python storage device anymore. Like essentially could I compile and link my code and Circuit Python into a uf2 or something?

#

Also, is there a way to store data on the a RP2040 or an ESP32 without it being mounted on a PC’s file system?

manic glacierBOT
spiral elk
manic glacierBOT
proven garnet
kind meadow
manic glacierBOT
manic glacierBOT
#

Would it be enough for the board C code implement this? Or do you want control from CircuitPython of it?

I imagine there will certainly be a board.c component, but the user still needs to be able to set/clear the flag from their python code. Plus I would think there also needs to be a lower-level hook that appropriately checks and exempts pins from being reset while still allowing the user to claim pins during normal use.

manic glacierBOT
#

When the output has stopped on the serial terminal, any Web Workflow activity on another open browser window (i.e. clicking on a link in the Web Workflow file manager) will restart the output until two more idle calls are made.

Ah, I have an idea. The idle call causes FreeRTOS to yield. The socket select task should wake CP but I don't think I have it set to do that when a socket is writable. I'll look into it.

devout jolt
#

Is there anything that precludes me from making a C-based library that emits USB- and/or UART- MIDI at regular rates? Something similar in concept to WAV playing, but instead of samples, it's MIDI messages?

blissful pollen
devout jolt
#

afaik, no access to reliable timing in Pythonland

#

(at least in my several years of trying to do it in CircuitPython)

slender iron
#

@devout jolt I think you could do it from C

blissful pollen
#

Figured may be that. I don’t see why it wouldn’t work in C but you would have to find a free timer. If it was interrupt driven should be reliable and avoid the GC delaying things

jaunty juniper
#

yeah, GC and all, though to be fair the USB poll rate is 8ms, so CP might be able to hold that

spiral elk
#

Is the inaccuracy so much that it would make an audible difference in the delivery of midi messages?

devout jolt
#

perhaps my question is: is there a timer subsystem I can hook into that is common_hal

slender iron
#

not really

#

common_hal mirrors the python apis

#

(mostly)

devout jolt
spiral elk
#

not being difficult, I just know very little about midi

devout jolt
#

MIDI is basically robot fingers for playing other synths, so think in terms of how fast your fingers can move. But humans are very sensitive to timing changes

spiral elk
#

would pio on rp2040 also be a potential option?

devout jolt
blissful pollen
#

Pulseio I think has code that basically sets a timer if you wanted one every 1/64bpm or something. Adafruit_bus_device shows calling passed python objects from C

devout jolt
blissful pollen
#

(Pulseio may tie to a pin though trying to think of something that doesn’t but just on my phone right now).

devout jolt
#

thank you all, this is good food for thought

idle owl
blissful pollen
#

When I’m home I’ll try to glance at the rp2040 data sheet (have it open from something else). It doesn’t sound too hard to build

manic glacierBOT
proven garnet
#

New MAX1704x driver is ready for the bundle if anyone gets a chance to review the PR!

slender iron
tulip sleet
slender iron
#

@tulip sleet it was something I saw too. I think I caused it when I added the timeout-ability

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-alpha.1-127-gf1053fb96 on 2022-08-11; Adafruit QT Py ESP32C3 with ESP32-C3FN4

Code/REPL

file = open('disconnect.txt')
badchar = file.read(1)

Behavior

The attached disconnect.txt contains a mangled character created through a network error. I haven't been able to figure out how to recreate it programmatically but perhaps someone with a better understanding of character sets and CP string formats ...

manic glacierBOT
idle owl
#

So.... I'm trying to copy a UF2 to a BOOT drive, and it's consistently copying the UF2 file to the BOOT drive.

blissful pollen
idle owl
#

It's technically not the right file for this board, but the boards are nearly identical, so it should work. But either way, it's a UF2, so it should load even if it's not going to work, right?

devout jolt
idle owl
#

Oh hmm ok.

jaunty juniper
#

yeah if the file appears "in the drive" that means it refused it

idle owl
#

Bugger.

jaunty juniper
#

oh S3 and S2 are not considered the same chip

idle owl
#

I think I remember being told to recompile it and then load it and pull off the UF2.

#

That makes sense.

#

But I don't think I have the code. So.....

idle owl
idle owl
#

Ooh wait.

jaunty juniper
idle owl
#

(Found the code.)

jaunty juniper
#

and I don't know all the differences, but I'm pretty sure that there is no way a binary for S2 runs on S3

idle owl
#

After doing the pinouts page, I'm inclined to agree.

jaunty juniper
#

pinout or not, they might share an Extensa core (although not even the same number), but I'm assuming that even basic setup for ram and clocks, etc. is probably different

idle owl
#

There is a section on that page that talks about the chip itself.

#

And it was definitely different than S2

#

(brb, need to check on food in the oven)

manic glacierBOT
idle owl
#

Actually bbiab. Food is ready. :)

jaunty juniper
#

enjoy your meal!

idle owl
#

Thanks. It was meant to be a quick one.

hidden rain
#

I managed to create an extension of analogio by adding an interface AnalogFastin. It creates an objects which setup the ADC and DMA with a user supplied pin, buffer and sample_rate. I have been able to get ADC conversions in CPy at 2 microseconds.

#

It needs some polish and a good review.

manic glacierBOT
#

I grabbed the latest bits for the Feather Huzzah32 from the S3 server and got this as output:

 Doing work from now=53.316 until target=58.316
 Light sleeping from now=53.316 until target=73.316
 time_alarm=<TimeAlarm>
 <TimeAlarm>
 after=73.318, OK

I modified your loop slightly to suppress the printing of the "sum(range(100))" value.

The output you referenced seems to be from a slightly different loop though.

idle owl
#

Hmm. No idea how to generate the factory-reset-and-bootloader.bin file.

#

Thanks for the help with sorting out the UF2!

manic glacierBOT
manic glacierBOT
#

I took a look at the differences documents but I'm afraid a lot of it's over my head. Regardless, you're correct, I tested the file out on micropython 1.19.1 and it behaved exactly the same. I'm fine with this falling back as a MP issue,

it's probably not even that big an issue, my only interest in it was that the chrome browser disconnects the web workflow serial terminal when it gets one of these characters but I think most of the ways the web workflow was creating them are being shut d...

manic glacierBOT
manic glacierBOT
#

@waiweng83 Is this available yet? I think there may be an error in the status LED pin definition. GPIO13 should be MICROPY_HW_LED_STATUS not CIRCUITPY_STATUS_LED_POWER.

May I know what's the different between two of them?
I actually copied this from other feather board such as "unexpectedmaker_feathers3" and "adafruit_feather_esp32s2".

FYI, this board is not launched yet as Ai-Thinker discontinues all their ESP32 modules. We have to redesign it using Espressif WROOM module and we...

crimson ferry
#

A sampling of absolute latest from 8/11 and 8/10 don't mount CIRCUITPY after installing (QT Py ESP32-S2). The last one from 8/9 works fine. 7.3.2 works fine. Is this a known thing?

#

also noticed that if there is a pre-web-workflow mDNS circuitpython.local device on the network, it may answer first and preclude web workflow on the desired device

wraith crow
#

I just flashed adafruit-circuitpython-adafruit_qtpy_esp32s2-en_US-20220811-f9b9f55.uf2 and it mounted CIRCUITPY for me

#

@crimson ferry I don't know how mDNS works but I assume the old curictpython.local entry will fall off after some time? Either way you should be able to access the web workflow by IP address. Determining the address can be tricky if you don't have a display and can't connect to the REPL via USB serial. If you can the REPL should display the IP address in terminal header.

#

I'm not on a mDNS network so I'm stuck using IP address. I've taken to leaving a QT Py C3 online next to my router. I've got it's IP address bookmarked and when I bring it up, it lists any other CP boards I've plugged in.

crimson ferry
#

Yeah, I guess it would be expected that anything answering to circuitpython.local could grab the browser's attention. Just a note to be aware of, it becomes obvious what happened pretty quickly. This was a case where there were pre-web-workflow and post-web-workflow CP devices on the network simultaneously - the good news is that the web workflow GUI shows all of them. Luckily, in my local set-up, all CP devices have DHCP reservations so the IP addresses are predictable.

thorny jay
#

I remember that @idle owl wanted the yearly CircuitPython review of what users wanted for the future to be more frequent. So maybe the CircuitPython Day could be an opportunity to ask again to the community for input. Of course that is a late through. But if you don't do it on CircuitPython Day, then the next opportunity will be #CircuitPython2023 in December/January.

random junco
thorny jay
# random junco That's a good idea. I know for the panel discussion, I reviewed those posts to ...

Then you missed my contribution to #CircuitPython2022 because I was lazy and forgot to do one, but I have a 2020 and a 2021 one. 🙂 I don't remember if a "decision" was taken, but that idea from Kattni was at least discussed "in the Weed", she would know the status or if a decision was taken. Since I guess she is working on the planning of CircuitPythonDay too, the above message would be sufficient. The problem I see is doing one in August... then that make the #CircuitPython2023 too close. Also how would you name that thing??? The #CircuitPythonDay2022WishList ? And it take a lot of time to read and analyze and compile all the contribution (if there are many).

random junco
#

Good questions, I liked the idea of a mid-year checkin

hidden rain
#

Good Morning! I have a new interface for the Pico, AnalogFastIn, which allows for a DMA read of the ADC. It might be useful for other platforms too! What is the normal process to request a little feedback. Is a formal Pull Request required first?

manic glacierBOT
#

Hi, this second issue (printing a string created in an unusual way in the repl causes a disconnect) seems like it's worth considering in its own right.

For background, CircuitPython and micropython assume that any file opened in text mode (the default opening mode) is actually a valid text file in the utf-8 encoding. Of course, it's easy to create a file in byte mode that is not valid utf-8 encoding, and there are lots of examples of this -- .mpy files are one that would exist on a huge fr...

blissful pollen
hidden rain
#

ok... PR Draft..Thanks

manic glacierBOT
#

I also want to add that I wish I had not written my first comment in this issue discussion the way I did, because it reads as being dismissive of the issue you reported (excuse: I was a passenger in a car and bored but also armed with just an onscreen keyboard and no circuitpython/micropython)

Instead, I should have taken the time with my comment and have made it clearer that I wanted to discover more about where it would be most valuable to address the problem, as a circuitpython problem,...

solar whale
#

HAs anyone tried the current main on a FunHouse -- I am just getting into a boot loop. 7.3.0 is OK

tulip sleet
#

An issue would be welcome so we can track it, thanks. anecdata also has S2 issues, but then tried again and it worked ?!

solar whale
#

OK -- I'll open an issue

manic glacierBOT
#

Please don't worry about your comment, I been reading electronic messaging from the literal beginning of electronic messaging and have long since learned not to place any subtle emotional tone on someone else's message :).

I really do appreciate your detailed explanation here, it has increased my understanding of the situation greatly. These unicode characters get stuck in my head probably because the idea of a character being 8 bits is almost as core an idea for me as that everything on c...

proven garnet
#

Nothing cleans your computer files better than having a partition resize fail and having to reformat...

#

Eternal thanks to all the guide authors for the intro to dev guides, I got reinstalled and running in no time at all

manic glacierBOT
proven garnet
#

Maybe there was another way, but hey, I've got twice the space and it's all shiny clean

jaunty juniper
manic glacierBOT
#

CircuitPython version

using https://adafruit-circuit-python.s3.amazonaws.com/bin/adafruit_funhouse/en_US/adafruit-circuitpython-adafruit_funhouse-en_US-20220811-f9b9f55.uf2

Cannot get to boot_out.txt

Code/REPL

Cannot get to REPL

Behavior

After loafing the .uf2, the board continually boots and reboots -- I can read the screen fast enough to get any information. Not CIRCUITPY drive and the USP bot keeps resetting.

Description

No response...

jaunty juniper
#

(or like download from S3, but I'm too lazy for that when I have the terminal opened to build)

solar whale
jaunty juniper
#

(I lied, it takes so long to build ESP)

#

CIRCUITPY mounts

tulip sleet
#

f9b9f55 also works for me on a funhouse. I'm using the UF2

solar whale
#

hmm -- I even tried erasing the flash ...

tulip sleet
#

is anything connected to the funhouse?

solar whale
#

PIR

tulip sleet
#

take that off and see what happens; there was some pin initialization stuff that changed

solar whale
#

same without it

tulip sleet
#

which combined.bin or factory reset did you use, the guide one?

solar whale
#

none -- I used the UF2 or flashed from the build

tulip sleet
#

but you said you erased the flash

solar whale
#

yes, then just did a make BOARD=adafruit_funhouse flash /dev/tty.usbmode01

#

do I need to do something else?

tulip sleet
#

ok, now I'm getting a boot loop, after erasing the flash

solar whale
#

ah? sorry about that

manic glacierBOT
#

Reproduced this by:

esptool.py -p /dev/ttyACM0 -b 460800 erase_flash
esptool.py -p /dev/ttyACM0 -b 460800 --before=default_reset --after=no_reset write_flash 0x0000 adafruit-funhouse-factory-reset-and-bootloader.bin
cp adafruit-circuitpython-adafruit_funhouse-en_US-20220811-f9b9f55.uf2 /media/halbert/HOUSEBOOT/

the "factory reset" file is the one from the guide

tulip sleet
solar whale
#

I installed the uf2 boot loader by loading an arduino sketch (blink)

tulip sleet
#

Note that in the issue, to show it's multiple ways to get the bootloader

solar whale
#

OK

tulip sleet
#

it's weird that @crimson ferry had this problem, and then it mysteriously went away

manic glacierBOT
solar whale
#

That does not work for me either -- still loops.

tulip sleet
#

right, I used to do that all the time.

#

Sounds like we need a bisect.

solar whale
#

I'll see If I can find the culprit...may not be until later today...

#

Dog needs a walk now...

tulip sleet
#

you can leave it for us 🙂

solar whale
#

Thanks -- you know better what you are looking for. It's not a crisis for me -- I was just doing some board updating and thought I 'd try web workflow to a FunHouse. I have several other things to keep me busy...

manic glacierBOT
#

Hey @jepler should this actually apply to the esp32-c3 as well?

I'm experiencing something similar on my Wemos C3 Mini. First run after reset - this script works:


print(dir())
print(f"connected with address {wifi.radio.ipv4_address=}?")

print("networks:")
for n in wifi.radio.start_scanning_networks():
    print(f"{n.ssid:24} {n.rssi: 3}")

wifi.radio.stop_scanning_networks()

print("connecting...")
wifi.radio.tx_power=8.5
wifi.radio.connect('ssid_here', 'pass...
orchid basinBOT
idle owl
orchid basinBOT
#

This is really odd, there are other MCU/boards that are very beta, far from totally supported, and have their page present since day 1.

If you want people not to be deceived and have a bad user experience while using alpha/beta version or early support, you could work reversely on CircuitPython.org. Rather than to display everything by default, only show the 250 or 300 solid build, but have a filter that say "Show every board including very alpha".
By the number you will be able to claim ...

idle owl
#

@tulip sleet When you're around, let me know please. I noticed weirdness with the S3 AREF, and asked Limor about it, and she said they're all weird, but that you can help me with the S3. It's for the Analog In template. I think mostly what I need is if you could do an analog read and tell me the max value on an S3 on your end, that would be greatly appreciated. I need to find the average maximum for the S3 to fill in this template. I'm doing the guide for the S3 TFT, if you have one of those, checking would be appreciated.

#

No rush on this, I have plenty of other guide to do.

#

OK, redirect. Anyone with a potentiometer and an Adafruit ESP32-S3 board, ideally the TFT Feather, please let me know if you can test some analog read code for me. Thanks!

#

Really, you can do it with a wire, I'm mostly concerned about max raw analog value. Not so much with the rest of the values.

#

Ping or reply if you can help, thank you!

#

Woops. This is why you test your code kids.... Turns out CPU temp is not implemented on this board. Don't need to do the template in the guide then. But, already did the bulk of it. 🙄

crimson ferry
idle owl
#

Thanks for digging into that! That's about what I found with mine.

crimson ferry
#

nice when the real world matches the specs 😉

idle owl
#

Right?!

manic glacierBOT
#

CircuitPython version

Issue occurring using absolute build Adafruit CircuitPython 8.0.0-alpha1 using:
adafruit-circuitpython-adafruit_feather_esp32s2_tft-en_US-20220811-f9b9f55.uf2

to build:
adafruit-circuitpython-adafruit_feather_esp32s2_tft-en_US-20220810-a1d48e9.uf2

This build works:
adafruit-circuitpython-adafruit_feather_esp32s2_tft-en_US-20220810-08e3133.uf2

Code/REPL

There was no code added to the code.py. Also, unable to check REPL because ...
idle owl
manic glacierBOT
#

Introduces analogFastIn, an extension of analoio. The user supplies buffer which is filled by the capture method. The object created performs the setup and the capture can be called multiple times against the object. The user should call deinit to clear resources.

The current version converts at the sampling_rate; tested against a 3000 H sized (16bit) array. The resulting buffer has values between 0 and 4095 (12 bit ADC).

Other enhancements or generaliztino for other platforms are possi...

hidden rain
#

🤓 Hope it can be used across many platforms. Really need some feedback from Scott and Dan, Cheers!

idle owl
hidden rain
#

NP. If there is anything I can or should do while waiting, please instruct. I figured it may take a while; good thigs do!

#

things

idle owl
manic glacierBOT
blissful pollen
hidden rain
#

Thank You! I appreciate the review1

manic glacierBOT
manic glacierBOT
#

This does now print an error when I attempt to read in the file containing an invalid utf character.

But this also does enforce a new higher level of code compliance when dealing with files. For better or worse I have sometimes simply used a standard open(filename) statement to open files that contain binary data and this update will break that code.

I am not overly concerned with enforcing a stricter code compliance, the fix to the code is obvious and simple. While there's no doubt ...

manic glacierBOT
manic glacierBOT
warm stump
#

...might have to save this one for a future revision of circuitpython...and maybe a future revision of desktop and mobile python...all I wanted to do was (-12345.678)[-8:8]...

jaunty juniper
#

what is that supposed to do ?

warm stump
#

"get me bits 1 to 4 inclusive" from e.g. 255
but for more cases where the range is negative and decimal

jaunty juniper
#

bits of what ? the mantissa ?

#

there is not bit array in CP, I think python has libraries to read ints as bit arrays

warm stump
#

in general, both at the same time or something that can be used on both parts separately
then there was the version for pico-dvi which does [0:7] but on an int

jaunty juniper
#

so, a float is a mantissa and an exponent, what it means to read a "bit" might not be what you think it is

#

it's not a part before the coma and after the coma

warm stump
#

that's in 32 bit float right? this is something slightly different where bit1 is bit0, bit0 is the sign bit and bit-1 is the first decimal place

jaunty juniper
#

as far as I know, bits don't match decimal places unless it's BCD

warm stump
#

which this does by unfortunately having to convert it to a string and then reversing it with non-builtin rev, treating it as a normal int and reversing it back again
on hardware this is all done ideally in one step, my thing is preliminary and might have some shifting errors somewhere while trying to stay on the same line

jaunty juniper
#

like 10.0 and 100.0 should have the same mantissa, but 10 and 100 don't have the same bits

warm stump
#

Ah I see, from the python side I mean the bits from the perspective from a mathematical binary representation of the number,
there is a different one for getting a raw memory view of the bits stored in IEEE format. maybe the mathematical one will also help decode the IEEE one

#

the other slightly confusing thing is that the number line goes backwards. the furthest left is positive and the furthest right is negative...on arm this is the right way round maybe 😄

jaunty juniper
#

I'm not aware of the formula to convert a number after the comma into binary

#

is there even a single way to do that or multiple representations ?

warm stump
#

0b1.1, or in french 0b1,1 - removing the 0b has complicated things slightly

jaunty juniper
#

no but how to convert

warm stump
#

idk that's why I wrote that

jaunty juniper
#

something like this:

def get_bits(num, pos):
    x = s - int(s)
    bits = []
    for i in range(pos):
    # while x > 0:
        x = x * 2
        bits.append(int(x))
        print(x, int(x))
        x = x - int(x)
    return bits
#

for example 0.2 converts to the infinite development: 0b0.0011001100110011...

#

and the limit of floating point numbers shows up in C python with the debug print:

0.4 0
0.8 0
1.6 1
1.2000000000000002 1
0.40000000000000036 0
0.8000000000000007 0
1.6000000000000014 1
tame creek
#

there's a hexadecimal format for binary floating point numbers. it might be supported in newer versions of Python (and is (mostly?) compatible with the one in C99)

warm stump
#

I saw the hex property while subclassing it just now to add subscript, could also add the def get_bits(num, pos): to it along with getting/setting a bit and masking a binary decimal
used all the time in assembly using very weird convoluted methods for e.g. setting GPIO pin direction and drive strength, or idk, pretty much anything that uses the class
some hardware acceleration for this would also be good

tame creek
#

@warm stump rev might be more easily implemented as string[::-1]

jaunty juniper
#

reversed() is a thing

tame creek
#

@warm stump you might also want to look at math.frexp if you want to portably and directly inspect the mantissa and exponent as stored by the machine

jaunty juniper
#

note that negative steps are not implemented in CP:

>>> "123456"[::-1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported
tame creek
jaunty juniper
#

don't ask me

#

but usually yeah limits are caused by things taking space and having alternatives

#

it is implemented for lists, I don't see a reference to string slices steps in the issues, but it's just a quick search

manic glacierBOT
#

The reason the builds are failing is this functionality only exists on one port. You will have to include #ifdefs to turn it off on boards that it is not implemented on (or may not be due to space concerns). You will see many places with #ifdef CIRCUITPY_FEATURE. For example CIRCUITPY_ZLIB (something I did). If you search you will see the places you may need a #ifdef CIRCUITPY_ANALOGFASTIN

Then you will have to define it as off by default and in ports/raspberrypi/mpconfigport.mk have...

#

Good start! I think having AnalogFastIn in the same module as all the AnalogIO makes sense but I will leave a final decision on that up to the others.

I noticed a couple submodule changes that do not look related to this change that may have snuck their way in. Other then that the big one is to turn off the feature on ports where it is not implemented.

I did not test it on h/w yet but wanted to give some feedback to start.

jaunty juniper
#

ok now I get a hard crash when I ctrl-C/ctrl-D on the FunHouse

solar whale
#

control-c/d works in web workflow serial terminal

#

also OK for me via screen on my MAC

#

running Adafruit CircuitPython 8.0.0-alpha.1-135-gfa3e265bf

jaunty juniper
#

hmmm I'l look into that another time, might be linked to code.py, see if older versions do it and try a flash erase...

solar whale
#

Good luck! Try standing on one foot 😉

#

I just have the default "hello world" as code.py

manic glacierBOT
lone axle
#

https://github.com/FoamyGuy/Adafruit_CircuitPython_SI1145/runs/7820800078?check_suite_focus=true#step:5:9
It's a baby step, but exciting as a proof of concept 🎉

This actions task was executed on a "self hosted" runner that lives on my Raspberry Pi. The printed output is the size of RAM consumed by importing the library that was built in the existing build.yml tasks, measured by subtracting the values returned by gc.mem_alloc()

So we were able to run a test against a physical hardware device automatically as part of an actions workflow. Right now it's just measuring memory size, but eventually maybe it could execute other test cases and pass / fail based on assertions on the device itself.

warm stump
manic glacierBOT
#

Mark,

Thanks for looking over the code, etc.

I have made some changes on my local repo and branch.

There may be more, like the get_reference_voltage...

Would it be OK to promote to my remote while having a draft pull request?

I'm still rather a GIt Noobie and new to the whole PR and extending CP
process.

Thanks for your help!

-Lee

On Sat, Aug 13, 2022 at 10:33 AM Mark @.***> wrote:

@.**** commented on this pull request.

Good start! I think having AnalogFastIn in th...

manic glacierBOT
#

Would it be OK to promote to my remote while having a draft pull request? I'm still rather a GIt Noobie and new to the whole PR and extending CP process. Thanks for your help!

Yup for sure promote changes while you are working on the draft pull request. It does trigger the automatic build so I try to wait until I have a bit of substance to promote, but that isn't even a big deal. If need be people can stop the automatic runs.

I update my changes all the time if I'm fixing things.

manic glacierBOT
manic glacierBOT
manic glacierBOT
#

For #4536 adding support for I2C Target for the RP2040 based on work by @kstillson and @im-redactd.

Test code from my KB2040

import board
from i2ctarget import I2CTarget

target = I2Ctarget(board.D7, board.D6, [0x41])

while True:
    request = target.request()
    if request is not None:
        if request.is_read:
            print("Write request ")
            request.write(b'B')
        else:
            r = request.read()
            if r == "T":
            ...
manic glacierBOT
manic glacierBOT
orchid basinBOT
#

Seeed Studio

If SEEED was their old name and Seeed Studio the new name, so yes that make sense.
But I don't know how to do that (it is used in the filter) and it also affect the Wio Terminal, so 5 boards in total.

PS:
I am not working for SEEED/Seeed Studio. Maybe those that contribued those board in the first place can propose a fix. :-)
This can be a separate PR, I only noticed the XIAO naming issue and that is what I tried to fix here.

manic glacierBOT
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-alpha.1-31-gc1b00442a on 2022-07-02; stm32f411ce-blackpill with STM32F411CE

Code/REPL

CIRCUITPY_BLEIO = 0

Behavior

When I add CIRCUITPY_BLEIO = 0 to mkconfigboard.mk (and similar lines for other libraries, in order to save space) and run make, I get:

GEN build-myboard/genhdr/moduledefs.h
QSTR updated
../../main.c: In function 'reset_devices':
../../main.c:127:5: error: implicit dec...
manic glacierBOT
jaunty juniper
#

uh oh that sucks, any solution ?

❯ pip install -e .
ERROR: File "setup.py" or "setup.cfg" not found. Directory cannot be installed in editable mode: /Users/*****/Desktop/temp/Adafruit_CircuitPython_NeoPixel
(A "pyproject.toml" file was found, but editable mode currently requires a setuptools-based build.)
#

the answer is: update pip, but...

#
      ValueError: invalid pyproject.toml config: `project.version`.
      configuration error: `project.version` must be pep440
      [end of output]
stuck elbow
#

just symlink it to the site-packages?

jaunty juniper
#

we could switch from using 0.0.0-auto.0 to something pep440 ? Like 0.0.0+auto.0 as it turns out

#

(it's the placeholder for updating the version by the bundle tools)

#

or maybe we don't need the version in the file ? some libraries seem not to have it, this is the neopixel library

#

ah wait, they do, I wasn't looking at the right version

manic glacierBOT
#

Adding ifdef to py/circuitpy_defns.mk failed on line 394. I understand the intent, but do not see other examples of this, so I guess this was not the way to exclude per port. Please advise.

If you look around line 475 where there is an #ifdef about BLE I would try to follow what it does. If it still fails I can try to pull the PR and take a look.

manic glacierBOT
manic glacierBOT
hidden rain
#

I have new files in shared-bindings/analogio ... AnalogFastIn[.h and .c]. However, its only implemented for the RaspberryPi Pico. It fails on SAMD21, etc. How do I exclude in shared-baindings?

manic glacierBOT
blissful pollen
hidden rain
#

@blissful pollen It seems the shared-bindings portion is failing because there is no filter for just Raspberry Pi Pico. Perhaps I don't understand the model here. Shared-Binding seems to imply across platforms while the module defined in shared-bindings appear to define the CPy interface and ports/<platform>/common-hal/<feature> the implementation algorithm. Is that NOT the model?

blissful pollen
manic glacierBOT
blissful pollen
manic glacierBOT
manic glacierBOT
#

Thank you, CIRCUITPY_BLEIO_HCI = 0 solved the problem.

Many invalid configurations are possible and in general no effort is made to detect them.

Do I understand correctly that no effort should be made is some cases? For example, if a user explicitly says

CIRCUITPY_BLEIO = 0
CIRCUITPY_BLEIO_HCI = 1

then it isn't clear whether they want

CIRCUITPY_BLEIO = 1
CIRCUITPY_BLEIO_HCI = 1

or

CIRCUITPY_BLEIO = 0
CIRCUITPY_BLEIO_HCI = 0

On the other ...

lone axle
jaunty juniper
manic glacierBOT
#

Noticed this while dropping by - I spent a bit of work on this because F1s are so highly valued by some dev circles (especially in China), but ultimately abandoned it because the ecosystem of F1 boards at the specs Circuitpython needs is very meagre. I was in a situation where the only dev boards I could find were not real F1s at all but rather unauthorized clones - and when I had problems setting them up, it felt like there was no certainty whether it was my code or some knockoff quirk.

T...

hidden rain
#

Can I use nested #ifdef to exclude code, even another #include?

manic glacierBOT
#

Nomenclature: I would not call this "fast" necessarily, but would instead call it "bulk" or some synonym of that. The point is that it's collecting multiple values at a certain sampling rate. It might be doing that slowly or quickly. Also, DMA is an implementation detail. On some other port, it might not be DMA, so I don't think you need to mention that.

blissful pollen
hidden rain
blissful pollen
#

Will do. I'll try to pull it to my machine too and see if I can get it going. Just haven't had a chance. I think it must be close!

hidden rain
# manic glacier

Thanks Dan. I guess I was rather self-centered on the purpose (for me). You are correct, that 'Bulk' makes more sense than 'Fast'. I am connected to some that may want to help continue the interface for other platforms, so yes the DMA is merely an implementation detail as is the sampling rate. The user should only be aware that it is 'bulk' at some rate. I will change the name and omit reference in example to DMA.

manic glacierBOT
#

Thanks Dan. I guess I was rather self-centered on the purpose (for me). You
are correct, that 'Bulk' makes more sense than 'Fast'. I am connected to
some that may want to help continue the interface for other platforms, so
yes the DMA is merely an implementation detail as is the sampling rate. The
user should only be aware that it is 'bulk' at some rate. I will change the
name and omit references to DMA in the example code. I will make the other
changes too! What we really need to decide on ...

lone axle
#

@proven garnet do you know if changing py-modules to packages inside of pyproject.toml is the only thing needed when a library would be changing from a single file to a folder? I'm familiar with that step in the setup.py way, and think I found the same thing in pyproject.toml but wanted to deck if there is anything else needed.

onyx hinge
#

Missing the meeting today, no notes.

hidden rain
#

Is there a way to listen to the meeting live?

tame creek
hidden rain
#

at 2:00pm ET right?

random junco
#

Yup, join the CircuitPython voice channel at 2pm ET

proven garnet
lone axle
#

Thank you

orchid basinBOT
#

Hi, no worries. I wasn't assuming you worked for them.

To change the name, just find the boards: https://circuitpython.org/downloads?manufacturers=SEEED (and it looks like you already located them), then in the board file, change manufacturer to "Seeed Studio". As long as you update all of the boards and they have the exact same spelling, the filter will update automatically (otherwise there will be a filter for every variation).

idle owl
solar whale
#

Lurking today 👋

proven garnet
#

@idle owl if you have time after the meeting (or honestly whenever, not critical), I want to check/set the secrets in the adabot repo which might help my PR pass CI.

idle owl
proven garnet
#

Sounds good!

blissful pollen
#

Oops thanks, had my mic unmuted from earlier this week and normally never have it like that

gilded cradle
#

Same. It's usually the first thing I check.

lone axle
#

😺 👋

turbid radish
#

Hi kitty!

ember iris
#

😺

lone axle
orchid basinBOT
lone axle
lone axle
lone axle
turbid radish
#

Paul - Charlyn would be a great guest

#

@random junco

random junco
#

I'll definitely reach out, thank you!

slender iron
#

@hidden rain the cp meeting is going now

#

brb

#

back

#

👻

manic glacierBOT
#

There is a library to read sd cards but there is no library to "become" sd card to other hardware
(via small pcb adapter inserted into sd card slot of other hardware and connected to circuitpython device).

The goal would be to for, example, expose fs of hardware running circuitpython as sd card in a way so both,
circuitpython and other hardware could access it.

Some other projects for reference:
https://github.com/ZipCPU/sdspi/blob/master/bench/cpp/sdspisim.cpp
https://github....

slender iron
#

hee - mel, I've said it wrong for a long time

solar whale
#

@mental nexus -- Do you have a link to the FreeRTOS video?

mental nexus
slender iron
#

😄

candid sun
#

thanks for doing that @tulip sleet

lone axle
slender iron
#

separate

#

looks

lone axle
#

Thank you

orchid basinBOT
silver tapir
proven garnet
#

Can we have those workflows be by approval only? Saves sending jobs that don't affect memory size (e.g., documentation fixes)

#

Adafruit IO does that, I saw

thorny jay
#

One other question is if you want member of the community to offer a runner by "dedicating" a "Pi" to this, or have only Adafruit to host such an infrastructure? If you want "contribution", they you have to deal with onboarding, saying what is connected to the runner, ...

#

(My idea was also to do that on container, on Pi4. While foamyboy was testing "native" on a Pi3.)

silver tapir
#

And yeah, it will work on arm, riscv, whatever...

ember iris
#

What about a different approach. Pull request workflow works as is right now, but then once a week a job runs over everything and raises an issue if a recent pull request expands the memory beyond a threshold. This would alleviate the need to have a job always ready to run hosted on a third party machine. But it's an entirely different idea so maybe this is more a detraction of an idea than it is helpful

silver tapir
#

But you'd have to wait a week to merge the pr's.

thorny jay
#

It might be "too late" to stop a pull request, but at least it gets detected at one point.

blissful pollen
#

I think it's important to at least keep in mind, future use beyond just memory usage. In a dream world a full regression, on hardware, test would be ideal on a PR run.

#

(but that's a big "dream" state)

thorny jay
#

The on device size vs mpy size difference is not very clear...

#

You think that "Static" analysis on the MPY file is possible and sufficient?

#

Also interesting is that you want to know and remember the previous size and the new size... so you have to compare the new artifact to "existing" file. Not sure how to do that.

lone axle
ember iris
#

I personally am on board with looking into it, the notion of receiving a score that you work to improve rather than a pass/fail label seems like a good way to slowly, gently way to be mindful and build good practices

silver tapir
proven garnet
#

Thanks!

mental nexus
#

Thanks all!

gilded cradle
#

Thanks everyone

ember iris
#

Thanks all!

manic glacierBOT
#

I wish I had seen this before I bought 5 of the UM FeatherS3 boards; I need deep sleep for an IoT project, to conserve battery power. I know my code works on an Adafruit QtPy ESP32-S2, which suffers from another issue that brought me to the FeatherS3.

The issue with the QtPy system is that it hangs up in what seems to be the SAFE_MODE, which I think is caused by voltage spikes in the supply when they are run off of a battery. I can't filter the spikes adequately, and a QtPy will run for h...

manic glacierBOT
slender iron
#

I don't see any network traffic to the cp device

gilded cradle
slender iron
#

ah, does more in chrome

#

(was in ff originally)

manic glacierBOT
gilded cradle
#

Firefox shouldn't work

#

Only Chrome and Edge

slender iron
#

why?

gilded cradle
#

Maybe it's just web bluetooth that wasn't supported. I can add firefox support to the phase 3 part of the project.

#

I mostly hadn't been tested

slender iron
#

I've done the local html and js from ff

gilded cradle
#

Ok, it's likely something simple. For now can you test with chrome and I'll try and see if I can get FF working before oyu're out?

slender iron
#

yup, totally

#

the websocket fails on chrome so I'm taking a look from the device side now

gilded cradle
#

Thanks

slender iron
#

np, to make it easy for myself 🙂

gilded cradle
#

It looks like it's forwarding from http to https and failing

#

Can we disable that? I don't think it's the Javascript doing the forwarding.

slender iron
#

I don't think I'm seeing what you are

#

what exactly is being forwarded?

gilded cradle
slender iron
#

I was able to open it in http in chrome

#

and in firefox

#

try copy and pasting the link

gilded cradle
#

Hmm, that isn't working for me. Then it fails an error due to the mixed content.

slender iron
#

in what browser?

gilded cradle
#

chrome

slender iron
#

do you have an extension that forces https?

#

I have it open and chrome is warning it isn't secure

gilded cradle
#

Let me check

slender iron
gilded cradle
#

I turned off all extensions, restarted, and it's still doing it.

slender iron
#

I'm on linux

gilded cradle
#

I'm on mac and running chrome 104.0.5112.79.

slender iron
#

ah, it just did it for me

gilded cradle
#

Yeah, that's a bit of a problem.

#

It wasn't doing that when loading via localhost

slender iron
#

ok, with curl I don't get redirected

#

so it isn't the server doing it

gilded cradle
#

Here' the redirect.

#

Could be a browser thing

#

Looks like it's seeing "strict-origin-when-cross-origin" and that prompts it to redirect.

slender iron
#

ok, I cleared my cache and it didn't redirect

manic glacierBOT
gilded cradle
#

Ok, I'll try the same.

slender iron
#

may be because we used to set it for https

gilded cradle
#

Ok, that worked for me too.

#

Probably adding a popup with some fix ideas might be worth it.

#

Automatic redirects could result in an annoying loop

slender iron
#

or disable web under https

gilded cradle
slender iron
#

ya, I think that's what we're going

gilded cradle
#

Probably not, but possibly.

slender iron
#

doesn't look like we enforce http on cp.org

#
  • https
gilded cradle
#

We may need to do that and then disable https on code

#

Or I'm thinking maybe there was some issue and we turned it off for a reason

slender iron
#

ah, my websocket is failing because I don't have the auth credentials

#

I turned https off for code.

gilded cradle
#

Oh, ok. I may need to attempt to listDir first

slender iron
#

which is why we had it cached

#

the websocket error object isn't helpful

gilded cradle
#

Yeah. it's strange because I'm pretty sure I got the websocket going before I even tried to tackle the auth stuff.

slender iron
#

its possible your browser cached it

gilded cradle
#

Yeah

#

I'll give it a work through using code tomorrow morning and see if I can get it functioning.

slender iron
#

👍

#

are you done for the day?

gilded cradle
slender iron
#

k. I'm doing move now

#

I'm out thursday so I've got two more full days after today

gilded cradle
#

Ok, we can focus on this more tomorrow.

idle owl
tulip sleet
#

but you can point out it's CircuitPython 8

idle owl
#

So, this would simply be info, not so much tied to CP specifically.

tulip sleet
#

if guides don't mention I2CPeripheral, then yes,

idle owl
#

My template certainly doesn't. I'm not sure I was even aware of it.

tulip sleet
idle owl
#

Ok. Wanted to make sure it extended to general terminology and wasn't specific to CircuitPython code

#

Perfect thank you.

tulip sleet
#

second page of that pdf describes the change

idle owl
#

Yep found it.

#

Thank you.

manic glacierBOT
proven garnet
#

@tulip sleet, @slender iron, @jaunty juniper I used sed to fix the version strings, I can push all of those to main if you think 0.0.0+auto.0 is good (and PEP 440 compliant, just double checking)

slender iron
#

has the tooling been updated to work with both?

#

so that new releases are correct

proven garnet
#

Yeah, I had sed change the workflow files too. The workflow files themselves use sed to do this at release time, so it should have gotten everything

jaunty juniper
#

and build tools and cookiecutter ?

proven garnet
#

Ah right, it was already 0.0.0-auto.0 when I did the pyproject.toml stuff, so I forgot I'd need to touch up a few other places

#

I can PR those

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-alpha.1-139-g3fbddfde5 on 2022-08-15; Adafruit Feather ESP32-S3 TFT with ESP32S3

Code/REPL

>>> import microcontroller
>>> microcontroller.on_next_reset(microcontroller.RunMode.BOOTLOADER)
>>> microcontroller.reset()

Behavior

The board reset due to the microcontroller.reset() but does not go into UF2 mode.

Description

Expectation is for the board to go in UF2 mode where you can drag and ...

pure swallow
#

I think there's a bug in dotenv. When you have a # in a quoted value (KEY='a#bc') it stops working after that line.

jaunty juniper
#

oh nice find, can you open an issue ?

#

(make sure you're on latest)

manic glacierBOT
#

Documentation states that get_last_received_report() function should
return None if there was no report received previously, otherwise it
should return report. Moreover, same report should be returned only
once. That makes it possible to reliably process incoming OUT/Feature
reports.

This patch adds a bitfield that stores flag if report with particular
ID was received and updates get_last_received_report() to match its
documentation.

Fixes #6764

proven garnet
#

Alright, submitted the fix for the build-tools, and wrapped the changes for the cookiecutter into the existing PR I had out for it.

#

I had stepped away from the meeting today, thanks for the hug report on the ghost user. It was a fun little "Easter Egg" (ish) to find: https://github.com/ghost

manic glacierBOT
#

Documentation states that get_last_received_report() function should
return None if there was no report received previously, otherwise it
should return report. Moreover, same report should be returned only
once. That makes it possible to reliably process incoming OUT/Feature
reports.

This patch adds a bitfield that stores flag if report with particular
ID was received and updates get_last_received_report() to match its
documentation.

Fixes #676

manic glacierBOT
#

Hi, thank you for the PR. However I don't know if that is only a bug fix.

Moreover, same report should be returned only once.

I don't think that's the intention. The documentation implies that it always returns the last received report, not just once. Like a buffer that keeps the last value in it. It's supposed to return None only "if nothing received".

This implementation suits the current use in the default HID devices (caps-lock and num-lock LED's state can be read at any time a...

manic glacierBOT
#

I have done some research and some HID descriptors do actually use reports as events (with different values), so it is definitely a thing. Looks like indeed the get_last_received_report() method was introduced to replace last_received_report field which definitely had this non-consumable "just a buffer" functionality.
However, that approach severely limits flexibility of the whole API. How about introducing a new method like "get_next_report()" that would act as is implemented in this PR (th...

kind meadow
#

Does anyone know if there is a way to make the Magtag stay connected to Wifi? I am using my phone’s hot spot for Wifi and it disconnects from the Wifi between fetch calls.

random junco
manic glacierBOT
shut musk
#

People, is there a special design pattern here? I'm looking at usb_hid module. It consists of two parts: shared-module/usb_hid and shared-bindings/usb_hid. shared-module/usb_hid/Device.c defines some functions with names starting with "common_hal_usb_hid_device_" which are used in shared-bindings/usb_hid/Device.c. However, shared-module/usb_hid/Device.h does not contain those functions. Instead, they are declared in shared-bindings/usb_hid/Device.h. Huh?

tulip sleet
# shut musk People, is there a special design pattern here? I'm looking at usb_hid module. I...

There are potentially multiple implementations of the common_hal_ routines. They are declared in shared-bindings/usb_hid/Device.h because the API is the same across all implementations (all impls must provide the same API).

In most cases they would be in port/<portname>/common-hal. However, when the API can implemented in a non-port-specific way, which is true for USB stuff (because we use TinyUSB), then the common_hal_ implementations are in shared_module.

shut musk
tulip sleet
#

it doesn't hurt to add extern, I believe. We had to add extern for non-function declarations at some point. The idea is that there is a single place where the declarations are written, so that the identical list of declarations does not need to be duplicated in multiple places.

#

yes, it's unusual, and I was confused the first term I saw it, but now I see the reasoning.

#

extern for functions vs non-functions is a bit different, I think.

shut musk
tulip sleet
#

right, and for non-functions that used to work (I think), but at some point it didn't

#

there are a few shared-bindings .h file where they are declared extern

#

we haven't gone back to make them all consistent in that way

shut musk
#

oh, right. I see functions declared extern in some header files in shared-bindings/

tame creek
#

objects (not functions) declared at file scope without initializers or extern can end up in a "common block", which has some annoying implementation-defined behaviors

shut musk
manic glacierBOT
#

Please note that on esp32-s2 and esp32-s3, RunMode.BOOTLOADER should enter the kind of bootloader that works with esptool and arduino, while RunMode.UF2 is for accessing the UF2 bootloader. On many other boards that have just a single bootloader, the two behave identically.

I only have an ESP32-S3-EYE on hand so I tested with it. For me, RunMode.UF2 worked. RunMode.BOOTLOADER seems to just crash the device until it's re-plugged or the reset button is pressed.

#

@Neradoc thanks for pointing out the intended semantics. Originally .last_received_report was used only for keyboard LED status, so it didn't need to be very fancy. When I added user-created HID report descriptors, I did add the capability for "feature" reports, which are bidirectional, as you (@maximkulkin) mention, but I didn't make a full-fledged report queue mechanism for OUT reports (reports coming from the host).

tame creek
#

i think using extern as a convention to flag function declarations that might be in a differently-named .c file isn't necessarily obvious, and the practice should be documented if you choose to use it as such

shut musk
tame creek
tulip sleet
kind meadow
gilded cradle
#

@slender iron when you're online, where did you get the hterm_all.js file? This is a file I've not touched at all since you had made the original code editor. It doesn't seem to be in the Code Mirror docs and I'm wondering if there's an updated way of loading the terminal that doesn't require such a huge file.

slender iron
#

if you want to switch to a different terminal that's fine

gilded cradle
#

I'll see if I can get hterm working first since I have the colors already customized, but if not I may look at switching.

slender iron
#

👍

#

@gilded cradle ok, I'm at my desk. are you working on getting code.cp.org triggering the basic auth before doing the websocket?

gilded cradle
slender iron
#

kk

manic glacierBOT
gilded cradle
#

@slender iron I think switching over to xterm would be a good move so we can use firefox too. However, since that may take some time, I'm going to just use chrome for the moment and concentrate on the web socket issue. I need to head over to my office though, so I'll probably be offline for like 20 minutes or so.

slender iron
#

ok, sounds good

#

chrome-only is fine

#

better to ensure it works with the device for now

gilded cradle
#

yeah

proven garnet
#

@slender iron I think I understood your review, resubmitted

slender iron
#

👍 just approved

proven garnet
#

Thanks!

slender iron
#

good to decouple changes like that

manic glacierBOT
proven garnet
#

@idle owl I want to run sed on the bundle libraries to change 0.0.0-auto.0 to 0.0.0+auto.0 and push everything to main

#

Just wanted to run that by you

#

It's probably more reliable than an adabot patch

manic glacierBOT
proven garnet
#

Yup!

#

I'll run it tonight when I get back to my dev laptop

#

The cookiecutter update got wrapped into my outstanding pr

idle owl
#

Ok, perfect.

#

@proven garnet Will this require a new release on everything?

#

Or is it internal only

proven garnet
#

I think internal only. Editable installs only make sense if you clone the repo, so a release isn't needed to enact it.

manic glacierBOT
idle owl
manic glacierBOT
#

So it is not a bug... it just that I am used to RunMode.BOOTLOADER on other board and did not notice the difference.

With RunMode.UF2 it works perfectly on my Feather S3+TFT. => Problem solved, we can close this ticket.

Very long in the weed side note...

It still fail on my ESP32-S3-USB-OTG-N8 but I am not even sure that board accept UF2 or how to get it into that mode "manually" by double clicking. All my upgrade on that board have been done with esptool (AFAIR).

If I compare a f...

idle owl
#

@candid sun Hey, do you happen to have a RPi Pico (original), a MAX98357A amp, and a little speaker? And a few minutes to test something for me?

candid sun
#

@idle owl let me do some part digging. i allegedly have the amp

candid sun
idle owl
# candid sun okay yes

Sweet. Can you wire it up as shown on this page, and then test the different examples? All files needed should be in the bundle downloads.

#

I had to update the template to use a non-discontinued part, and I need to make sure it actually works. :/

candid sun
#

gotcha! yeah i will get that tested, just got to solder some headers

idle owl
#

Frankly, as long as one example works, they all should. But the bundle makes it easy to test multiple things at least.

gilded cradle
#

@slender iron I think the auth issue is fixed. I just pushed the change, so it should be updated now.

#

Though it's back to its behavior of forwarding me to https again

slender iron
#

ok, lemme try it

candid sun
# idle owl Thank you so much!

so...i'm not getting anything out of my amp/speaker combo. tried cp 7and 8 with an original pico and then an rp2040 feather. not sure where the issue is

gilded cradle
candid sun
slender iron
#

the tool bar says it isn't secure

gilded cradle
#

yeah, even the error says the same.

#

Weird

idle owl
#

Thank you for trying! I really appreciate it.

gilded cradle
candid sun
gilded cradle
#

@slender iron can you check the flag chrome://flags/#block-insecure-private-network-requests

gilded cradle
#

Ok, I think that's blocking it. It's one way to get around the problem, but I'll see if I can find a better way.

gilded cradle
#

oof

slender iron
#

I think reverse embedding is the way to go

gilded cradle
#

One possible solution recommended there is WebTransport which I hadn't heard of before.

slender iron
#

webtransport still does a bunch of security stuff I think

jaunty juniper
#

ugh that's why we can't have nice things !

slender iron
#

which will take lots of code on the device side

#

MP just had to do the reverse embedding technique

gilded cradle
#

Ok, basically the way we're trying to do it now is a dead end, so we have to figure out the next best thing

slender iron
#

ya, I think so

jaunty juniper
#

I have been testing running my web UI (and a USB workflow) in an electron app

gilded cradle
#

So does the reverse embedding technique pull in code externally?

slender iron
#

unless a cors preflight can get us around it

#

ya, it does

#

but that code is pulled over https

gilded cradle
#

Hmm

gilded cradle
slender iron
#

I think the preflight thing requires an https fetch

gilded cradle
#

Hmm, ok

slender iron
#

MP just did the host in reverse thing

gilded cradle
#

Yeah, it's an option, but would still require quite a rewrite.

slender iron
#

yup

gilded cradle
#

Assuming we can get a self signed SSL cert somehow for the device, how much would need to be added to support https on the device?

slender iron
#

I have no idea

gilded cradle
#

Ok, no worries.

slender iron
#

espruino loads the https site in an iframe and then calls out somehow

gilded cradle
#

Hmm, ok.

#

I'll think about that. Even a hidden iframe to mask the calls might work.

#

Perhaps some kind of proxy might be another idea, but also might be a big security hole.

slender iron
#

postmessage

#

was how they talk from iframe out

gilded cradle
#

I'm not sure how it will work with websockets, but it may be enough to get around the issue.

slender iron
#

ya, that's a bummer

gilded cradle
#

Well, I'll try a bit of experimentation. As a base I'll set localhost to https and load the local circuitpython web server in a hidden iframe. That should be close enough to live to simulate the issues.

slender iron
#

espruino does the opposite

#

loads the https editor in the iframe of an http page

gilded cradle
#

I'll think about that too, but that approach would likely have other issues we aren't seeing.

slender iron
#

ya, definitely aren't great options

gilded cradle
#

I think I might at least be able to get the file ops working with the iframe. I'm not as sure with the web sockets.

#

Unless maybe I can proxy through the device's serial terminal app.

slender iron
#

post message looks pretty straight forward

idle owl
#

@candid sun Uff. I'm not getting anything either...........

#

Speaker clicks as though it's getting a signal.

#

But no tone or wav.

gilded cradle
manic glacierBOT
#

@tannewt I'm pretty sure there are tons of them, but the one I have in mind is similar to LampMultiUpdateReport (see Section 25.11.1 at https://usb.org/sites/default/files/hut1_3_0.pdf). I am developing a custom HID for Adafruit RP2040 MacroPad that would allow me to control colors of keys RGB LEDs: each report is a command to set color of particular LED.

slender iron
#

secure websockets requires ssl afaik

gilded cradle
candid sun
idle owl
#

Audio playing.

slender iron
#

I think our two options are: 1. have a skeleton served by CP that loads js from cp.org that fleshes everything out. 2. have a host page served by CP that listens for postmessage from an iframe of cp.org

idle owl
#

So maybe those pins on the Pico aren't supported anymore?

idle owl
#

Time to dig!

gilded cradle
slender iron
#

kk

candid sun
idle owl
#

I didn't think it did though...

#

@candid sun Pico works for me. As shown in the guide. So it must be your speaker situation. 🙂

#

Super crunchy sound, but I guess to be expected with small speakers.

#

lol I think this is the Pico I tested this with last time. Because it asked to replace the WAV and the MP3 files. 😄

idle owl
#

For sure! I was about to be baffled. Still baffled why the same pins didn't work on Feather, but you know what? Not my problem right now. This is a future-me problem.

proven garnet
idle owl
manic glacierBOT
manic glacierBOT
proven garnet
#

@idle owl @jaunty juniper Alright, everything is changed over to 0.0.0+auto.0

manic glacierBOT
idle owl
#

@proven garnet Please send me an email to deal with the release tomorrow. Thank you!

proven garnet
#

If we do I can email you

manic glacierBOT
slender iron
#

oops

manic glacierBOT
#

If you clear the "rename to" field and then press cancel the file is renamed to null.

Haha, oops. Thanks for the testing!

I'm a little disappointed that the edit option has gone away for unknown file types. I know editing a .mpy file didn't make much sense but it didn't crash anything and it was useful to be able to edit files like "menu.bat" or ".env"

This is just the link. You can create the link yourself and the edit page won't be wiser. I did add .env support now.

Was th...

manic glacierBOT
#

I like that subfolders being uploaded briefly show up in the Create Directory field, gives you a progress indication of sorts :).

I added a progress bar now for the number of files that are done out of the total.

I manually merged this PR so perhaps I missed something but it looks like both the file selection and directory selection are both labeled "Choose Files".

Ya, Firefox labels them differently. I added emoji labels to distinguish them.

Thanks again for testing!

#

Fixes #6606.

  • Use ESP32 touch API properly. Note that the values returned by touch_pad_read() are lower rather than higher when the pin is touched.
  • Use TOUCH_FSM_MODE_SW instead of TOUCH_FSM_MODE_TIMER for all Espressif. It seems to work fine.
  • Refactor some code into espressif/peripherals/touch.c.

Tested on Feather Huzzah32 (ESP32), Feather ESP32 V2, Feather ESP32-S2, Feather ESP32-S3. (C3 does not have native touch.). I'd welcome other hands-on testing.

manic glacierBOT
#

Rebuilding your latest updates now, I didn't see any issue with recursive deletes in this version, I guess I was lucky.

I'll confirm once my poor little raspberry finishes the new build but on this version I just noticed that the directory "Choose Files" button is still active even when the !editable state is active (CIRCUITPY mounted). The interface goes through the motions but doesn't actually perform the upload.

proven garnet
#

It's keeping a handful of libraries from passing CI (and from downloading correctly, in general)

#

Might be keeping itself from installing correctly, hence the concern 😅

#

Ah, I saw the issue you responded to @jaunty juniper

jaunty juniper
proven garnet
#

Can you tag me in them?

jaunty juniper
#

well I only took a sample of 2, so I don't know if it's just those

proven garnet
#

ticks looks like it has it, unless you mean changes like those

proven garnet
#

huh, I'll double check

#

I think I missed some on the sed command, thanks for catch! I'll push the workflow file changes.

#

I think I forgot to add *.yml

jaunty juniper
#

that would do it !

proven garnet
#

Pushing now, thank you so much for catching!

manic glacierBOT
small cypress
#

Hey, does anyone know what the status of possible ULP support for the ESP32-Sx chips is? I've been able to find some messages from a couple of years ago about it, but nothing more recent.

manic glacierBOT
jaunty juniper
small cypress
#

I thought the purpose of ULP was to actually let you run code during deep sleep?

blissful pollen
#

Just taking a quick look at it and while I can see some great uses for it, I'm not sure how you could have python libraries to read sensors via i2c without the sensor driver being written in C

manic glacierBOT
manic glacierBOT
#

So I've been working this pretty hard for several hours and overall I think it's really solid. The things I've found this evening could easily be dealt with as issues after a merge.

The only troubling issue I've found so far is the occasional ERR_CONNECTION_RESET messages that usually correspond with the web workflow crashing. I haven't been able to reliable reproduce it yet but it really doesn't happen that often and I've been exercising the upload far harder than I think it will see in n...

manic glacierBOT
small cypress
blissful pollen
small cypress
#

Indeed, I wasn't imagining it'd be super easy to implement, especially as I'd imagine it'd require changes in terms of the usual CP workflow to compile + put the code on there, though it really would be super useful/cool, even if you couldn't pass sensor data etc. between the ULP and CP world.

spiral elk
#

Well, I built an image for the Ai-Thinker ESP32-CAM but have to wait until I get home to actually flash it to hardware

spiral elk
#

Have a working image on the ESP32-CAM, lot of pin issues to work out though but serial REPL and web workflow is up and running

manic glacierBOT
manic glacierBOT
tidal kiln
#

is there a current Learn page that shows installing CP on ESP32? like with esptool etc?

tulip sleet
#

@slender iron @onyx hinge fyi ja is now the largest build by a lot (not ru), in case you are testing whether something fits

tulip sleet
#

but lack of instructions adds a load to you in other ways

#

the instructions are really the same for loading a .bin on ESP32-S2

#

etc

tidal kiln
#

is there page for that? this is for a new guide. would rather link to something than re-write. looking around....

tidal kiln
#

thanks. yah, that's the best one i could find too.

tulip sleet
#

does wippersnapper describe using esptool to load?

#

I don't see that it does

slender iron
#

@tulip sleet what changed to make it more?

slender iron
tulip sleet
slender iron
#

@gilded cradle I'm at my desk. How's it going?

gilded cradle
tulip sleet
tidal kiln
#

@tulip sleet yah, wipper just says follow webpage instructions

tulip sleet
#

which webpage?!

tidal kiln
#

AIO

#

you select board, then "follow instrucitons"

#

could login and run thru it i guess. see what it says.

tulip sleet
#

oh, wippersnapper is a UF2, ok, never mind

#

somehow I thought it was .bin

tidal kiln
#

it's got non-native usb boards also though

tulip sleet
#

it uses webserail

tidal kiln
#

ok. so has a browser restriction

#

guess i should start using opera

tulip sleet
#

what r you using, firefox?

tidal kiln
#

yah

tulip sleet
#

any chromium-based browser

#

i gues

slender iron
tulip sleet
#

the cyrillic font is too big; this is only on SAMD21. Same reason we turned the font off for ja, ko, etc., on SAMD21

#

I just mentioned this now because I was looking at flash consumption on matrxiportal and wanted to test with the largest build

slender iron
#

ja and ko don't have glyph coverage

#

turning off ru is a regression

tulip sleet
#

I did that a month ago

#

yes, it is, I feel it was necessary

#

or maybe I didn't turn it off, lemme check, maybe I just reported it. I was trying to figure out why the ru builds were so big

slender iron
#

can we turn it back on with the -Os change?

tidal kiln
#

@slender iron what's your suggestion for getting/loading the esp32 firmware (for web workflow)? i just grabbed from s3 and used esptool.

slender iron
#

I don't have a good answer. I think the future is a chrome browser and web serial but I don't know the current state

#

I use make to do it

tidal kiln
#

thanks. i'll point to the web serial info. but i guess also quickly show s3/esptool.

tulip sleet
tidal kiln
tulip sleet
#

we have had other regressions before. the ru font is very large

#

I would turn onewireio or even pulseio back on first if we had the space

tulip sleet
#

SAMD21 display support is a niche, like gizmo

#

or even turn longint on, if possible, since that would fix some library longint blocks

stuck elbow
tulip sleet
#

text russian vs images

#

hallowing is fine, just russian won't have terminal on it

#

same is already true for ja

stuck elbow
#

ah, I see what you mean

tulip sleet
#

if we had space on samd21, what would you add back for your boards?

#

this is all theoretical, I'm not sure there's enough new space to add anything back

#

longint??

stuck elbow
#

well, for my boards I always have my own custom list anyways, depending on what the board is using

tulip sleet
#

but you do omit things that are just too big. onewireio is not important to you, but other things might be nice if you could have them

slender iron
#

I'd add whatever we see folks missing the most

#

we can also leave that space empty

stuck elbow
#

I usually remove everything that is not strictly necessary on a given board

tulip sleet
#

limor i think is keen on pulseio or onewireio being back

stuck elbow
tulip sleet
#

i have to go afk for a while, but interesting convo

slender iron
#

I didn't realize pulseio was disabled

tulip sleet
#

yeah, it's been a while, she would like to have it back

#

onewireio you can substitute i2c sensors, but pulseio has no substitute

slender iron
#

pulseio is off for non-full builds and some other select samd21 builds

manic glacierBOT
#

It still fail on my ESP32-S3-USB-OTG-N8 but I am not even sure that board accept UF2 or how to get it into that mode "manually" by double clicking. All my upgrade on that board have been done with esptool (AFAIR).

Double clicking reset requires the board to have a capacitor to hold one bit of state because reset actually wipes all mcu memory. The espressif boards probably don't have it. Instead, clicking reset and then boot is usually done to avoid actually resetting the device.

It ...

#

Awesome work all... I am about a week or two away from finishing 3d printing and wiring up eight RP2040's to a single Pi4 over the i2c bus. Look forward to testing this code. Cheers.

Beware that (I think) this CP API uses I2C clock stretching and that Pi's are notorious for not supporting clock stretching. Clock stretching is used while waiting for python to respond.

tidal kiln
#

@slender iron looks like thonny does not handle the additional escape sequences in the banner text

slender iron
#

Next beta will

tidal kiln
#

ok. yah. i've managed to get it connected a few times. but only with multiple tries. and not sure how/why it finally was ok.

manic glacierBOT
#

@tannewt I'm pretty sure there are tons of them, but the one I have in mind is similar to LampMultiUpdateReport (see Section 25.11.1 at https://usb.org/sites/default/files/hut1_3_0.pdf). I am developing a custom HID for Adafruit RP2040 MacroPad that would allow me to control colors of keys RGB LEDs: each report is a command to set color of particular LED.

Very cool! Thanks for the link!

slender iron
tulip sleet
slender iron
#

k, I'm running out of time to pick anything else up

#

would you mind doing a beta.0 release tomorrow too?

tulip sleet
#

sure, for CPy day

#

so, the S3 sleep problems are ESP-IDF related?

#

@slender iron also did you see the report of a bug with a # inside a .env value? I don't see an issue for it.

#

it was in discord

#

also 6609 looks like it might be simple

slender iron
slender iron
#

I'm not sure what to do about 6609

#

because we'd need to implement insert by deleting characters and re-sending them

tulip sleet
#

if there were a better terminal impl in the browser, would it help?

slender iron
#

ya, and that's what melissa is working on

#

that is the "offline" serial experience

tulip sleet
#

maybe arrow keys should just do nothing (but it would be frustrating)

slender iron
#

I'm not sure we can fully prevent moving the cursor

tulip sleet
#

suppose you didn't send the line until you got an EOL

#

so the type-in box would be browser-local only. kind of like Arduino serial window

#

then the arrows would work, as handled by the browser

slender iron
#

ya, that could work too

jaunty juniper
#

we might as well do that, unless it handles tab completion

slender iron
#

I don't feel like the best person to refine that html/js

tulip sleet
#

i can comment in the issue

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-alpha.1 on 2022-06-09; Adafruit Feather ESP32-S3 TFT with ESP32S3

Code/REPL

import microcontroller

while True:
    print(microcontroller.cpu.temperature)

Behavior

This code throws the following error:

code.py output:
Traceback (most recent call last):
  File "code.py", line 4, in 
NotImplementedError:

Code done running.

Description

No response

Additional informat...

small cypress
# slender iron It isn't used afaik. We do use the power domain for some sleep things.

Yeah, it's that I found some stuff from 2020 on here and Github but I'm not sure what, if anything, came of it:

https://github.com/adafruit/circuitpython/pull/3816

#circuitpython-dev message

GitHub

Added alarm.sleep_memory, which is a bytearray-like object (similar to microcontroller.nvm) that can store state between deep sleeps. Implemented only on ESP32-S2, in the RTC slow memory.
Added set...

slender iron
#

the ULP is also tricky because it isn't xtensa

#

I was hoping to treat it more like PIO

manic glacierBOT
#

This is no longer an issue. You can easily convert Unix epoch timestamps and timezone offset manually with something like this:

` def _format_datetime(datetime):
return "{:02}/{:02}/{} {:02}:{:02}:{:02}".format(
datetime.tm_mon,
datetime.tm_mday,
datetime.tm_year,
datetime.tm_hour,
datetime.tm_min,
datetime.tm_sec,
)

unix_time = 1660761378
tz_offset_seconds = -14400 # NY Timezone

get_timestamp = int(unix_time + tz...

tidal kiln
#

what's that one pin quirk about using pico uf2 on picow?

jaunty juniper
#

it's one of the communication lines with the module, the real LED being controlled by the module it can't be used in Circuitpython

tidal kiln
#

thanks. so basically. just ignore that pin?

jaunty juniper
#

yeah, don't use it, treat the board as having no LED

manic glacierBOT
#

We could probably freeze adafruit_portalbase if we turned off ulab. This may be a reasonable tradeoff. I found one use of ulab in an RGB Matrix project (which was done on the Feather M4, not the MatrixPortal): https://learn.adafruit.com/ocean-epoxy-resin-lightbox-with-rgb-led-matrix-image-scroller/code-explanation, but that could be recoded.

@makermelissa Do you have an opinion about what to refreeze, or other ways to save space?

I have some changes to adafruit_esp32spi that wil...

tidal kiln
#

@jaunty juniper thanks!

manic glacierBOT
idle owl
#

How do I redo this using with? ```py
import audiocore
import board
import audiobusio

audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)

wave_file = open("StreetChicken.wav", "rb")
wav = audiocore.WaveFile(wave_file)

print("Playing wav file!")
audio.play(wav)
while audio.playing:
pass
print("Done!")```

#

I've not done it myself without something to work from before. I thought there was usually more code involved than is here. Pylint is complaining.

#

About 6 files, but I think if I get one, I'll be able to do the others.

jaunty juniper
#

for the open ? We want to keep the file open forever, so that means putting the whole rest of the code in the with clause

idle owl
#

Pylint says, "Consider using 'with' for resource-allocating operation".

slender iron
#

we've been meaning to have WaveFile take in the filename

jaunty juniper
#

yeah like OnDiskBitmap

manic glacierBOT
#

The RAM saved would be roughly the size of the .mpy file, which is only 788 bytes. adafruit_esp32spi_wsgiserver is about 2.4k, and I was planning to delete that. But adafruit_portalbase is much bigger.

I do see that BLEIO HCI support for the ESP32 is enabled. We could turn that off and that frees a lot of space, more than enough to freeze adafruit_portalbase again. I will ask about this.

idle owl
#

Ok I think I figured it out

#

Now to try to extrapolate to five other files.

tidal kiln
#

# pylint: disable=consider-using-with

#

tell pylint you considered, and thank you very much 🙂

idle owl
#

I really dislike adding that to short code in templates. 😕

#

But yeah, agreed.

#

Short code means I should explain why I'm disabling.

#

Long code? There's so much going on, I can gloss.

stuck elbow
#

I find myself writing more pylint directives in my code than the actual code

idle owl
#

Um.... Ok this one has me baffled. ```py
decoder = audiomp3.MP3Decoder(open("slow.mp3", "rb"))

audio.play(decoder)
while audio.playing:
pass

print("Done playing!")```

#

Not sure how to do with here.

stuck elbow
#
with open("slow.mp3", "rb") as f:
    decoder = audiomp3.MP3Decoder(f)

    audio.play(decoder)
    while audio.playing:
        pass

print("Done playing!")
idle owl
#

Ahhhh.

#

Ok, thank you!

manic glacierBOT
#

Looks good, the folder with just folders uploads now, "Choose files" is not active either when CIRCUITPY is mounted or an upload is in progress and clicking the Upload button on the pop-up now starts the upload :)

The folder I've been uploading contains about 40 sub-folders and 70 data files and the microcontroller has about 70 files and 2 folders already in the root directory and another 40 files and a few more subfolders in the two root folders. During my test folder upload I typically ...

stuck elbow
#

Is that what you call "linterate programming"?

idle owl
#

hah. I suppose?

#

Whee Pylint is happy and can bugger off.

slender iron
#

@tulip sleet looking at 6756 already? otherwise I'll take a quick peek. I could also start beta.0 release notes

tulip sleet
#

no, I didn't start on 6756 yet

#

I can do release notes, np, I have a technique

slender iron
#

kk

#

I want to get back to releasing but makes no sense to do it now

tulip sleet
#

i need your specialized skills now 🙂

slender iron
#

😄

#

k, will look at the bootloop

small cypress
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 8.0.0-alpha.1-143-g2f0e209ec on 2022-08-17; FeatherS2 with ESP32S2

Code/REPL

import board
import displayio
from adafruit_featherwing.tft_featherwing_35 import TFTFeatherWing35

if "feathers2" in board.board_id:
    wing = TFTFeatherWing35(cs=board.D5, dc=board.D6, ts_cs=board.D21, sd_cs=board.D20)
    display = wing.display
    display.rotation=180
    ts = wing.touchscreen
else:
    raise NotImplemente...
slender iron
small cypress
#

Guess that assumption was a bit puts on shades RISCy on my part (I am so sorry)

manic glacierBOT
slender iron
#

ya, I'd target the risc-v part if anything

jaunty juniper
#

would that make it easier on the C3 ?

slender iron
#

@jaunty juniper does the C3 have a ULP?

small cypress
#

I figured they meant that the C3 is RISC-V itself?

jaunty juniper
#

ah I don't know

#

yeah the C3 is Risc-V, don't know about the ULP

small cypress
manic glacierBOT
small cypress
#

though there is MicroPython for the C3 itself

slender iron
#

cool! I didn't realize the ulp was a picorv32

#

we have CP for the C3 too