#circuitpython-dev
1 messages Β· Page 155 of 1
who is going to teach us? and context is quite important in german...
i understand more than i speak...which, sounds like more than it really is. π
ok..now i'm leaving. reaches for sleep buu
hi guys, I'm new in circuit python. I tried run sample program HID Keyboard and had an error:
File "main.py", line 4 in <module>
ImportError: no module named 'touchio'
I don't have this library because in bundle it's not exist. Any ideas?
I used 3.0.0 version python and lib
solved I install older library π
Built BOARD=itsybitsy_m0 (old name) from commit 9c5a9e34118532bd54d92c9f968534ad9f9409ae
This version fails - no FS mounted - dotstar turns green for a few seconds then turns off - repeats.
Restored current master - working fine.
A wild CircuitPython board appears! https://hackaday.io/project/85516-pybox-circuitpython-compatible-board
SAMD21 board for universal case https://hackaday.io/project/28581-universal-fr4-case-template- 8 digit charlieplexed 3014 led display- speaker with amplifier- 3 buttons- SPI flash- LION chargingI am working on display driver a SPI flash configuration
@pastel panther @raven canopy @marble hornet Nice work last night getting the build system working on MacOS -- Just capture the log and we have a new tutorial π Sorry I missed the fun. When I do use my MacOS system (usually use Linux), I also prefer the native install over the VM. It is a bit daunting to set up especiall if you have never used brew, but worth the effort. Nice to have a new member of the club!
thanks @solar whale , glad to join the club. irreparably hooked. I already have some more questions and things to try! I would like to thank @solar whale, @pastel panther, and @raven canopy again.
@solar whale We got through it, eventually. We could definitely spruce up the firmware build guides, but that's most likely a back-burner kind of thing.
How's your weather? Power lines intact?
So far - only a few inches so far and not much wind so the trees are staying up.. Fingers crossed.
has anyone used guislice / considered wrapping it to use with cir-py : here: https://www.impulseadventure.com/elec/guislice-gui.html
i was browsing the cir-py repo and I think I found an inconsistency in a comment. it is located in circuitpython/ports/atmel-samd/external_flash/devices.h the comment of line 172 says that the W25Q32BV is a 2MB flash chip but the datasheet says it is 4MB
@jerryneedell thats weird! I expected 9c5a9e3 to work and current master to not work. Going heads down on usb shortly to see what I find.
@weary patrol we haven't added touchio support to 3.0.0 yet
@marble hornet please ask questions as you have them! Yeah, its a typo. Feel free to practice your PR skills by submitting a fix
the python2 thing is because mac/brew changed the naming recently
python2 doesn't exist for me now either. its called python2.7 now
@stuck elbow that universal case is nearly the size of a trellis (which is 60 mm square) and what I was gonna target for the synth stuff
case?
Aah, that's a separate project of the same person.
That guy has some very cool projects, by the way, including a lot of SAMD stuff.
π need to get all of the samd21 folks into circuitpython
I just reached out to some folks wanting to get rust going on it
yeah, rust has an embedded working group now
I still have the stm32 rust article in my bookmarks, have to try it one day
but if they really get avr and samd support in there, then I will need to seriously learn rust
where can you find the "report" button on git
@marble hornet not sure what you mean? git is a command-line tool, it has no buttons, but there is a "log" command if you want to see the report of las commits?
@marble hornet what are you trying to do?
sorry github, i'm trying to report an error in adafruit/circuitpython
@marble hornet the "issues" tab
thanks
if it's a typo or something else you can fix, you can also just hit "edit", fix it, and submit a pull request
i was browsing the cir-py repo and I think I found an inconsistency in a comment. it is located in circuitpython/ports/atmel-samd/external_flash/devices.h the comment of line 172 says that the W25Q32BV is a 2MB flash chip but the datasheet says it is 4MB
I think that is actually my fault
@slender iron do you know anything about adding support for other flash modules? i have found a module with 16MB and i want to try using it, for kicks and datalogging.
yup!
it is made by winbond
you found the right file for it!
reaally, could you give me some advice?
add a define for it and then list it in the board list
checking...
hmmm i'm new to flash modules i looked for "10011111" and "9g" but i'm find finding any responses. that i can comprehend. suggestions?
page 25
JEDEC ID?
page 24 has the device id and instruction set
ah 17!!
the first byte will be manufacturer 0xef
and the next two will be 0x70 and 0x18
(the second column with the 9Fh)
seems like my pdf viewer counts the pages differently
I go by the page numbers in the doc
okay... so i'm looking as the row labled jedec id
do you put mf7-mf0 together ? to get 70?
okay, i see winbond ID and 7018h as the type then capacity, is that correct?
b/c 7018 is the response,? why is it separated in devices.h?
Having the active_read = false in the background function left
a chance that a new_write occurs before active_read is set to false.
In that case, we'll read the appropriate data rather than write it
and never clear the active write.
Hopefully fixes #655.
@tulip sleet is there anything else you need from ASF? I don't think we should update it anymore on the 3.x branch
@slender iron no - all set. Was that a bug or a change in their API functionality?
I think it might have been there all along
and the timing just changed a bit with the update
going forward I'd rather not have it as a variable until 4.0
I agree. And the more we step away from ASF4 the better
something is still a bit fishy to me so we'll need to keep an eye on the mass storage stuff
i am working on the python usb descriptor stuff. One diff from 2.x is that the wMaxPacketSize for the CDC ACM part was 8 instead of 64 bytes. Not sure if that made any difference. I think maybe it was a typo.
line 64 in gen_usb_descriptor.py
I believe I was comparing against the asf4 descriptors
so maybe thats where I got 8
I will look and make sure there's not only an 8-byte buffer for that somewhere; else looks very similar to 2.x.
k cool
π¦ LTO breaks pulseio
mebbe
@slender iron does it just crash? maybe similar to issues I ran into with compilation
nope, it just doesn't turn the pwm on
@slender iron an unrelated q:
standard.InterfaceDescriptor(
bInterfaceClass=cdc.CDC_CLASS_DATA,
subdescriptors=[
standard.EndpointDescriptor(
bEndpointAddress=0x0 | standard.EndpointDescriptor.DIRECTION_IN,
bmAttributes=standard.EndpointDescriptor.TYPE_BULK),
standard.EndpointDescriptor(
bEndpointAddress=0x0 | standard.EndpointDescriptor.DIRECTION_OUT,
bmAttributes=standard.EndpointDescriptor.TYPE_BULK)
]
both IN and OUT have bEndPointAddress=0x0. In 2.x these are 0 and 1.
That's the CDC DATA descriptor
its ored with the direction bit though I think
π
DIRECTION_IN and DIRECTION_OUT are 0x80 and 0x00.
ah hrm
i'm looking at the 2.x descriptors with Beagle, just making sure they match up more or less
good idea
I'll change that too, and retest. don't know if an endpoint can be bidi.
it works now
yeah, but maybe the overlap is doing weird things. Usually don't have simultaneous input and output on the serial line? It would be good to save an endpoint. Will read about it.
kk
crazy, found the pulseio bug I think
our no timer value in the pin mapping was wrong
@slender iron looks like bidirectional endpoints are ok: The USB device mode supports 8 endpoint addresses. All endpoint addresses have one input and one
output endpoint, for a total of 16 endpoints. Each endpoint is fully configurable in any of the four transfer types: control, interrupt, bulk or isochronous. The USB host mode supports up to 8 pipes. The maximum data payload size is selectable up to 1023 bytes.
So we could maybe just use one endpoint address for MSC also, and free up an endpoint (for MIDI, etc.)
good catch on pin stuff
π
(thanks for doing this in the main channel)
I'll try that later. 32u4 bidirectional is not so clear -- a number of people asked if so, and it might depend on the endpoint
We check validity by ensuring it's lower than the total number of
timers. 0 is a terrible number for the NO_TIMER value because its
valid even though it shouldn't be.
Fixes https://github.com/adafruit/Adafruit_CircuitPython_SimpleIO/issues/29
no problem @pastel panther
@stuck elbow alt shift 6
β§?
The unshifted key produces ΒΆ
I do @ eshipu and select from the list π
it doesn't bother me
I don't do a whole lot of @atting, anyway.
k, I'm going to look at the bme680 issue. will do an alpha release before the shows tomorrow
(after I eat some lunch)
@stuck elbow ΓΎ is a "thorn", right? I thought it was pronounced "th"
@tulip sleet correct, originally my nick was "the sheep", but that was too common, so I switched to japanese spelling "deshipu", and recently decided to make the d a bit closer to truth...
I could have used Γ°, at least looks more like d
I think 'a sheep' is correct in English. "Three sheep" is also correct. Unusual, in English, for the noun to have no number (plural).
@timber mango yeah, "the sheep" might mean a specific sheep, or all the sheep in the world
@timber mango haha. << that's not you.
In some other environments they let you reserve other nicknames along with your primary.
My primary (long ago) was nishiki. I shortened it to nis for typing purposes.
ι¦?
It's a bicycle brand. I don't read kanji or anything similar.
@timber mango I thought it was NIS, as in Sun Microsystems yellow pages.
@timber mango looks like it eaither means "bride" or "daughter-in-law"
Yeah you always take a risk when you use a nickname you yourself do not understand. ;)
no, sorry, it means a fine material
Well... NO_SERCOM isn't used except as a placeholder. No other code checks for those values.
The system I was on had tab-completion, and nis[TAB] was the shortest possible way to complete nishiki. I eventually just used nis by itself. ;) People universally say it exactly how you guys do in discord chat. First time I heard it in person was at a user meet (again, long ago).
It was a strange feeling to be addressed solely by my nick.
a lot of friends call me by my nick, that's probably weird
It now (and forever) means "come home in triumph" hahaha.
that sentence is probably something like "come home wearing fine clothes"
We have a song like that called 500 miles. It's a USA 'folk' song but fairly modern.
yeah, by proclaimers
Except it's a lament for not being able to go home in one's present raiment (among other problems).
If that description of that song hasn't been used at some point in an esoteric review, existence has done a disservice to all of us. π
I was thinking https://www.youtube.com/watch?v=tbNlMtqrYS0
Official video of The Proclaimers performing I'm Gonna Be (500 Miles) from the album Sunshine on Leith. I'm Gonna Be (500 Miles) is available on βThe Very Be...
As was I.
I should get tinwhistle tabs for that
best way to avoid nick collision is to make up words, hence siddacious
started off as sidd which didn't work for long, then a friend writing a personal mythology named my character siddacious
@stuck elbow A bunch of my friends call me sid/sidd because I met the initial group thorough IRC and everyone I met through them met me as sidd including my wife. It's strange at times having to explain but π€·
@pastel panther and then the Ice Age came out...
@stuck elbow funny you mention that; my wife and I have decided that one of our dogs has the voice of sid from that movie π
@pastel panther It also sounds a lot like seditious. π
but for me sid is the sound chip on the c64
I also have some of those
I had neighbors in a 80-apartment complex who said they thought I was a dentist before they met me and got to know me. ;) @stuck elbow your new spelling defaults not the impostor (unless perhaps you were not active recently).
I think the impostor is actually me from before I created an account
Hahaha.
@slender iron you broke itsybitsy again...
This version does not work for me - itsybitys just goes to a solid blues dotstar - no FS mount
as before:
[443568.884692] sd 7:0:0:0: [sdc] Attached SCSI removable disk
[443591.740704] usb 3-3.2: USB disconnect, device number 47
[443591.823432] FAT-fs (sdc): unable to read boot sector to mark fs as dirty
do you want to reopen this one or should I create a new issue.
This PR causes my itsybitys_m0_express to now fail again. It was working before this cahnge.
No problems wiht current CP3.0 master on metro_m4_express_revb or Metro_m0_express
@solar whale sounds like it could be an alignment issue
@slender iron confined to itsybitsy? Does it work on some versions?
you said it worked on a previous commit ok
I'm building it locally now to test on my itsybitsy
yes - it worked on the previous commit
right, but I doubt my change actually impacted it then
it could have just changed the alignment of something so its basically random which builds will work ok
fun
yup yup
I remember seeing one removed in asf4 iirc
you built locally right @solar whale ?
OK - hust tested current master on feather_m0_express - seems ok there as well.
yes - built locally
this match?54656 bytes free in flash out of 253440 bytes ( 247.5 kb ). 4820 bytes free in ram for stack out of 32768 bytes ( 32.0 kb ).
jerryneedell@Ubuntu-Macmini:~/projects/adafruit_github/circuitpython_master/ports/atmel-samd$ make BOARD=itsybitsy_m0_express
Use make V=1, make V=2 or set BUILD_VERBOSE similarly in your environment to increase build verbosity.
install -d build-itsybitsy_m0_express
python3 tools/gen_usb_descriptor.py \
--manufacturer "Adafruit Industries LLC"\
--product "Itsy Bitsy M0 Express"\
--vid 0x239A\
--pid 0x8012\
build-itsybitsy_m0_express/autogen_usb_descriptor.c
Generating build-itsybitsy_m0_express/genhdr/mpversion.h
GEN build-itsybitsy_m0_express/genhdr/qstr.i.last
QSTR updated
GEN build-itsybitsy_m0_express/genhdr/qstrdefs.generated.h
54664 bytes free in flash out of 253440 bytes ( 247.5 kb ).
4820 bytes free in ram for stack out of 32768 bytes ( 32.0 kb ).
Create build-itsybitsy_m0_express/firmware.bin
Create build-itsybitsy_m0_express/firmware.uf2
python2 ../../tools/uf2/utils/uf2conv.py -b 0x2000 -c -o build-itsybitsy_m0_express/firmware.uf2 build-itsybitsy_m0_express/firmware.bin
Converting to uf2, output size: 397824, start address: 0x2000
Wrote 397824 bytes to build-itsybitsy_m0_express/firmware.uf2.
what gcc version? /V/E/c/p/atmel-samd (master|β1) $ arm-none-eabi-gcc --version arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
yes - last time it failed - there was nothing in dmesg and a green led --- now ger error reading boot sector and green led
hrm, mine worked to the degree the drive was found but reading it led to a solid blue led and usb loss
jerryneedell@Ubuntu-Macmini:~/projects/adafruit_github/circuitpython_master/ports/atmel-samd$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
hrm, same except our binary was slightly different size
I have framebuf enabled for nrf52
when I load itsybitsy I get blue led and ```[445513.519255] usb 3-3.2: USB disconnect, device number 58
[445513.603394] FAT-fs (sdc): unable to read boot sector to mark fs as dirty
does that happen if you unplug it and plug it back in too?
"you guys breaking stuff without me?" - Mark Watney (adapted for context)
ah - nothing at all when I unplug/replug
hrm, weird
stil get blue led
thats something π
its a pretty blue
thats the upside
maybe it was the comment change in teh previous PR that broke it π
no more or less likely than any other tiny change, it seems π
hmm, are spiders bugs?
arachnids.
No, Spiders are not bugs. They're arachnids. Technically, spiders are not bugs since they are arachnids not insects. Technically only certain insects are bugs, belonging to the insect order Hemiptera.May 24, 2011 shame on me
Oh well - time to go for awhile -- sorry about the bad news @slender iron good luck.
thanks for the testing!
Anytime!
time to solder up the swd lines
nice
@slender iron good luck with the debugging; I hooked up my jlink to the bitsy the other night and could not get it to hit a breakpoint, even in the beginning of main.c
Let me know how it goes for you; perhaps I was doing something different/wrong
grabs more jumpers
@pastel panther do you have a pic of your setup?
my jlink connected ok, building a debug build now
powering through the BAT pin so I don't need usb
my jlink broke at main ok
Is mpy-cross-2.2.0-ubuntu-16.04-x64
.. appropriate for use with the alpha release?
nope, you'll need a 3.0 version
Really cannot find it.
I will look again.
ahh...it isn't there.
sorry @timber mango for pointing to things that don't exist. π
hahaha you have a carte-blanche pass to continue to do so. ;)
thats why I'd love to make a module you can import in the REPL to do it
The Elves in The Shoemaker and the Elves story have nothing on you guys. I keep finding things you've created that I didn't know existed. /hug-reports-as-you-go dotcom
I can build itt.
Come to think of it I remember trying to build mpy-cross in vagrant when I thought it was something completely different from what I think it is now (also completely different from what it objectively is) ;)
(random) this was the step-up from /usr/bin/ack-grep mentioned (again) in the meeting, yesterday:
https://github.com/ggreer/the_silver_searcher
The Silver Surfer was a comic book char in a Richard Gere film (Breathless, iirc).
@slender iron @timber mango I added a 3.x mpy-cross for ubuntu to the 3.0 alpha release: https://github.com/adafruit/circuitpython/releases/tag/3.0.0-alpha.2
nice!
@slender iron I've since unplugged the bitsy, but it generally was bitsy+soldered jumper wires -> breadboard->swd connector->jlink. The gdb server was able to connect to the chip fine as far as I can tell and reported sending/setting breakpoints but they never seemed to get hit. My current theory is that it was getting past where the breakpoints would have been set before the jlink got connected, and then resetting didn't work. Not sure that makes sense but I'm gong to try the approach you mentioned of loading the code through gdb instead of attaching to the already running code
I've don the same previously with and without rst; apparently the reset pin is only used when you do monitor reset 2
I like the header you put on the off axis pins. Looks pretty similar to mine though I soldered the jumper wires directly to the board because I wanted to keep it slim without headers
I'll give it another go tonight and report back
it was the first female header I spotted when digging around. π
That is a slick setup.
are you clipped directly to the flash chip? Sounds like you need one of my handy dandy '51 dev boards with built in SWD and Saleae friendly QSPI flash debug headers ;P
maybbbbbbeeeee π
unless I roll a 20 on my DMA comprehension check and figure it out?
All for the low, low price of SEND ME YOUR ADDRESS
it gets knocked off regularly so I leave it until I know I don't need it
Never count on rolling a 20.
one tip for debugging I use now is to add asm("nop"); in the code so I can break on them
because they're never optimized? or because it's essentially whitespace you can break on?
clever
since i keep losing track of which window has the focus... i'm just going to put this here so my brain can flush its insistence that this be done.
vagrant ssh
π
well, slight progress on REPL. at least another quasi verification of where the problem is.
x = "Testing 128 character pasting into the REPL to see if 3.0 still breaks when you try to do this. Blah blah, bleh bleh and stuff"
would turn into:
x = "Testing 128 character pasting into the REPL to see if 3.0 still breaks when you try to do this. Blah blah, bleh bleh and st"
now:
x uff"
just some tweaking, and we might just get it. another plus: now i know the endpoints are getting everything, so I can stay out of ASF.
protip: if you expect a variable to be true, don't initially set it as false. #wisdom π
I set things I expect to be true to false all the time, I just don't do anything if they're false
I'm gonna need to do some synth work to heal my wounds from fighting usb
One hand for the ship, one hand for the sailor.
Hello, is it normal for trash files to build up in the CPX?
That's an Apple thing, iirc. Not otherwise.
Come to think of it I've deleted such references in Linux, to no known mischief -- seemed fine afterward.
Please choose the full URI that clients will use to connect to the server (for instance:
http://chef.example.com:4000).
This setting will be stored in /etc/chef/client.rb as "chef_server_url".
URL of Chef server: (has a blank space, this is a 'dialog' box)
<Ok>
Doing a routine new installation of the CircuitPython build environment.
This is a very stale environment.
EDIT: 16 March 02:30 UTC: the existing Vagrantfile is correct and current.
Simply do not follow the
New release '16.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
offering. ;) /my_bad
https://learn.adafruit.com/micropython-for-samd21/build-firmware seems okay for what it is, but I think someone else (not us) has got things way out of sync, for bringing up vagrant.
Not nearly as complex to follow last August. Now it has you reinstalling Ubuntu.
getting closer...
xff""Testing 128 character pasting into the REPL to see if 3.0 still breaks when you try to do this. Blah blah, bleh bleh and stuff"
ok. break time. maybe an episode of Versailles can help me see through this buffery madness.
So the vagrant thing just upped and died. I'm not doing the extra upgrades next time around.
What a mess.
@slender iron @solar whale update from yesterday issue I was having using feather m0 express with adalogger featherwing: I switched from a 16 GB, to 8GB didn't change code or version of circuit python yet but it 'just worked' got a hello world to print to a file on the 8gb board
update from yesterday issue I was having using feather m0 express with adalogger featherwing: I switched from a 16 GB, to 8GB didn't change code or version of circuit python yet but it 'just worked' got a hello world to print to a file on the 8gb board
the guide at: https://learn.adafruit.com/adafruit-adalogger-featherwing/using-the-sd-card
states:
"The FeatherWing kit doesn't come with an SD card but we carry one in the shop that is guaranteed to work. Pretty much any SD card should work...
the main issue is the guide says one thing and board operates differently
possible solutions:
- update library or core code to work with larger cards
- update the guide / documentation to reflect the size should be within certain working values.
@stoic gazelle cool. what brand is the card that fails?
SanDisk
k, adding a pick of it to the issue would be helpful. I may hunt one down
Is it possible that one card was formatted differently from the other?
both are SanDisk
both are formatted fat32 with gparted on an ubuntu 16.04 laptop
in attached picture:
- 16 gb on the left did not work,
- 8 gb on the left did work.

@slender iron i added a picture and verified they were formatted with fat32 with the same machine
I did notice there was a 1 meg spot non allocated space before the partition for the 8 gb card and no non allocated space on the 16 gb card
Sweet. The DotStar CircuitPython library works under 3.0 alpha 2 latest build. Is there a place where we are tracking "confirmed works" components, @slender iron ?
@drowsy geyser there is an open issue for validating drivers in 3.0. it doesn't have a full list, per say, but we did have discussion of creating an issue with all of the libraries to check. Also, I imagine we won't start saying definitively things are working until we get past beta...but, that's up to the fine folks with the authority to make that call. :D
https://github.com/adafruit/circuitpython/issues/584
Thanks @raven canopy !
It's kind of a chicken and egg thing. We want to test things to get to a beta release, but that means we have to re-test everything once we get to the release gate.
yeah. but, we all probably hope just a little that something breaks along the way. because then we get to fix it! π
except USB. i'm learning quickly, as tannewt said yesterday, it literally is a fight... you have to channel Rambo and just outlast the issues. (first time i'm dealing with USB on the driver level)
Yes, understood. And as we go, at least we're developing a good collection of unit tests!
Well, time to go pay for my Adafruit habit (work).
Could you completely erase the 8GB card and reformat it so that it doesn't have an odd partition layout and then try again?
use SD formatter if you can - https://www.sdcard.org/downloads/formatter_4/
its the 'official' method of formatting an SD card to FAT filesys
@drowsy geyser I don't think I checked in the pwm thing actually
@slender iron Ok, I'll re-run the tests after the check -in.
Thanks for letting me know.
No worries! I'll just watch for the check-in on GitHub and rebuild and retest the boards. I'm going to check the PWM pin presence for Limor/Kattni and then I'll re-check the piezo functionality (which also uses PWM).
kk, thanks!
Thank you - lots of balls in the air right now, and you're doing a great job!
@slender iron k!
I think I squashed the usb gremlin
awright!
Beagle GUI is annoyingly almost useless for most stuff. Where did you put your python trace analyzers? tnx!
I can't even see the HID report descriptors - only the top-level descriptor
yeah, its annoying
I'll try wireshark
python3 ~/repos/python-pcapng/convert_totalphase_csv.py blue_led_fail_linux.csv
thats a sample command to convert to pcapng
(which wireshark loads)
so it's a converter, not a parser? You can't use wireshark directly on Mac, but I can on Linux, so maybe I'll just go that way. But I'll bookmark that for later - thanks
it converts the beagle capture to pcapng for wireshark
advantage is that the beagle is one device. wireshark is per usb hub, so sometimes I have to filter out other devices on same hub
Waiting to do so risks accidentally queueing another response.
Hopefully fixes #655 but we'll let @jerryneedell confirm.
yup, and its the same workflow across usb host OSes
(was debugging with linux earlier)
@drowsy geyser this is the PR I was thinking of: https://github.com/adafruit/circuitpython/pull/678
yeah. btw, I tried making MSC just use one bidi USB endpoint and it didn't work. Making CDC DATA be two endpoints instead of one bidi works (and doesn't fix the 128-char limit, which I had faint hope it would)
@slender iron Cool, thanks. I'll wait on the merge notification and start rebuilding firmware.
π
@tulip sleet think I should stop storing sercom pointers in the pin data structure? it'll save a bit of code size
and have a sercom_index_to_sercom() lookup routine or table?
sounds ok, since the table lookup is fast. I put that kind of stuff in peripherals.c or samd?1_peripherals.c
since it's generally useful
yeah, asf already gives us a list in a macro
i just looked at the static routines in hpl_sercom.c that do some of this but wasn't sure whether it was the whole list or just the ones that were used in the .atstart file.
510:#define SERCOM_INSTS { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */```
oh perfect
trying it now
vg because there's a lot of duplication in the pins table
yup, its silly to store pointers there
@slender iron Nice! Sounds like a comment from an assembly language project....
π
@slender iron any further thoughts on @raven canopy 's PR supervisor.runtime.serial_connected? I'll test the functionality.
nope! looks good
@tulip sleet I'm headed to the gym. Please take a look at https://github.com/adafruit/circuitpython/pull/678 soon. I'd love to release a new alpha when I'm back.
will do
thanks!
Yep! Thanks @tulip sleet and @slender iron !
I like the naming now. I tested this with a CPX and the following main.py test program:
import board,neopixel, supervisor
pixels = neopixel.NeoPixel(board.NEOPIXEL, 10)
RED=(100,0,0)
BLUE=(0,0,100)
while True:
pixels.fill(BLUE if supervisor.runtime.serial_connected else RED)
I am using a LiPo battery and the USB plug. If USB is connected, then the NeoPixels turn blue. They're red if USB is unconnected when main.py starts. However, if I then unplug USB, the pixels d...
@slender iron Yay! ItsyBitsy_m0_express works with CP3.0 master!!
On atmel, it calls usb_connected which calls cdc_enabled which calls cdcdf_acm_is_enabled. It appears that it should be returning a dynamic value. I can dig into that while working the REPL limit...they're in the same files.
Should we close this, now?
@raven canopy I was going to ask you about that.
I don't see any reason to keep it open. But, there may be more doc changes desired, that have yet to be spoken?
Oh right, we can run Adabot and find out if there's anything left. I will wait for Scott on that one though because I'm only starting to get used to sorting through Adabot's results.
sounds good to me. there are a couple more that are lingering that keep catching my eye each time i scroll through the open list.
If I'm reading this right, there's definitely still some minor fixes needing to be made.
I think it provides a more human readable version of this list of warnings at the end though.
well, if there are some tweaks needed, send me a list and i'll work 'em.
Keen. It's still running π
or put it in the issue. can't deny anyone else the joy of doc work. π
π
Oh... bugger. It does spit out the list but I think I need to run it with different commands to get it to list out the lists over 3 repos, so there's an RTD errors list that has 19 repos, but doesn't list them. So yeah I'll be waiting for Scott. Or the 78 missing readthedocs.yml ...
Oops, my image caption included two lefts. (That's just not right)
I'm glad the cards are labeled.
Is there an official way to format the SD cards for Linux?
In the meantime, I will format both cards with my windows laptop and the official method when I get home from work, then try both sd cards with the Featherwing Adalogger.
Thanks :)
is it checking for "readthdocs.yml" or ".readthedocs.yml"? . is the diff.
There is no . before it but that doesn't mean that's what it's looking for. Scott will know the answer to that. Could be that it doesn't..... wait, no, there's a list for Missing .travis.yml so perhaps the lack of . is significant in the readthedocs.yml
Are you looking for something to do right now?
not necessarily. just that i'm accustomed to working them, and have no problems with cleanup.
Ok keen, no worries. I had a few specifics was all, and if you were looking for something to do, I could point out a few. That's why I asked.
scrolling through adabot's .py. she's still looking for "readthedocs.yml", without the ..
yeah. that was one of the changes. puts its sorted location near travis, and hides the file on (some) local machines.
ok good to know.
no free number? π
@idle owl @raven canopy I have a fix for the .readthedocs.yml I think. go ahead and ignore it for now
Ok will do
yay thanks for testing @solar whale !
k. might not get much done tonight. gotta head out for bday dinner; pre-teen went full-teen today. π±
Congrats! And happy birthday to the full teen π
And no rush. You brought it up so I figured I'd look into it.
For Linux, you could use gparted, fdisk, gnome-disk-utility (aka "Disks" in a Gnome-ish UI). You can delete any existing partitions and then reformat.
if any other mac/brew users are having trouble missing python2 you can run brew link python@2 to add it back
but only until 2020
yeah, then we'll need to update the uf2 generation script
or keep one mac disconnected from network so that it never updates to make the releases
I'd rather update
you never know what will the next macos break
if you keep an old mac, it will always work on the old macs too
thats true for all OSes
for some more than for others
We still have some updates to make. Here's the Adabot report:
Missing license. -
- [ ] Adafruit_CircuitPython_LSM303
- [ ] Adafruit_CircuitPython_TSL2561
- [ ] Adafruit_CircuitPython_APDS9960
- [ ] Adafruit_CircuitPython_DHT
Not in bundle. -
- [ ] Adafruit_CircuitPython_FocalTouch
Missing CODE_OF_CONDUCT.md -
- [ ] Adafruit_CircuitPython_MCP9808
- [ ] Adafruit_CircuitPython_CCS811
- [ ] Adafruit_CircuitPython_DS1307
ReadTheDocs latest build has warnings and/or errors -
...
π€ hmmmm Adafruit_CircuitPython_TSL2561 has a license, what's it missing?
contents / filename seem inline with everything else. pretty sure it came from cookiecutter.
https://github.com/adafruit/Adafruit_CircuitPython_TSL2561/blob/master/LICENSE
Great work folks. Moving things forward well.
@idle owl @raven canopy Awesome work on the docs!
@nocturne wren Thanks so much!
π
Hmmm - tried dotstart test on gemma_m0 - failing like the trinket_m0 used to....
Press any key to enter the REPL. Use CTRL-D to reload.
Adafruit CircuitPython 3.0.0-alpha.3-dirty on 2018-03-14; Adafruit Gemma M0 with samd21e18
>>>
>>>
>>>
>>> from board import *
>>> import time
>>> import adafruit_dotstar as dotstar
>>> pixel = dotstar.DotStar(APA102_SCK, APA102_MOSI, 1, brightness=0.1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "a...
diff'd it against a file that works. maybe github is just this picky:
$> diff LICENSE ../Adafruit_CircuitPython_MCP9808/LICENSE
3c3
< Copyright (c) 2017 Carter Nelson for Adafruit Industries
---
> Copyright (c) 2017 Scott Shawcroft, written for Adafruit Industries
it worked in my local repo - license banner wasn't there, now it is. PR'd the change.
seems to have worked? you seeing same?
Not sure where I'm looking. I got the info from Adabot before.
well. if adabots happy... π
I'll rerun it soon enough and we'll know
my guess is it wil be. github was acting like it wasn't legit for some reason. probably boils down to a bug in this:
https://blog.github.com/2016-09-21-license-now-displayed-on-repository-overview/
ah
thanks @tidal kiln
oooh!
Using Windows version of the SD Card Formatter with the 16 GB card met with success!
the 8 GB formatted with the SD Card Formatter continued to meet with success. (maybe they are friends?)
after formatting in windows, testing on the adalogger, I checked with gparted to see what the partitions look like (they both look different from before) they both have 4 MB not allocated at the beginning of the cards.
.
@idle owl some of the things on that list, as cater pointed out, aren't quite jiving. i'm sure i missed some things, but things like autodocs shouldn't have made it past Travis (he yelled at me enough about it). π
@raven canopy the ft6206 is the touch driver for the capacitive display adafruit has https://www.adafruit.com/product/2090
@raven canopy Yeah it could be a bug, it could also be something tiny like he found with that lib where the copyright line was one word different.
Work though what you can and we'll sort the rest.
is there a tutorial for running c code on cir-py anywhere?
a quick search yielded nothing
there's no casual way to run c code; you can add c-based modules, but it's not easy, and it has to integrate with the rest of the run-time system, allow interrupts, etc.
oh, and thanks @nocturne wren! always an uphill climb with docs, but the summit is sweet! π
@tulip sleet I thought there was, but I may have confused with mircopython (if its even possible there....).
we would love to be able to add binary module loading at run-time, but don't have it yet. I do know there are some issues discussing this in the micropython github issues - will try to find the main one
im guessing tkinter isn't supported in cir-py ππ
@raven canopy @marble hornet https://github.com/micropython/micropython/issues/3311 has a long discussion of loading machine-language modules - still very much a work in progress
or any gui library for circuitpython
@tulip sleet @raven canopy thanks for the quick help
no worries! sorry i dropped off. got pulled in to the vortex of documentation...and now watching AAE that i missed earlier. π
there is framebuf, which is builtin to some versions of CPy... Not exactly the same level: graphics and text drawing
"framebuf" library ?
i will be compilimg my own cir-py.uf2 for my project so including a lib isn't a problem for me
rather: "firmware.uf2"
take a look at shared-bindings/ and shared-module/ directories for integrating C libraries that are not chip-dependent
then draw as bitmap ?
see for instance: https://learn.adafruit.com/micropython-hardware-ssd1306-oled-display
thanks!! ill look into it more tomorrow, i need sleep for school. Thanks @tulip sleet @raven canopy
night!
last though, do you think using a bitmap framebuffer (or the built in hardware one) one could use python to make a page, list, and "widget" system/classes, could be made. w/ buttons for up and down. ? (text, rect, and etc are already supported by framebuf) sleep well!
As you can see by its inclusion in almost all categories, LSM303 needs the Full Monty. It was added after I compiled the task list, and I didn't go back and see what was added during the 2 week docstravaganzo.
Preliminary "check the checker" results for the autodoc failures: all of those RTD builds are over a month old, and aren't for the new doc structure. Also, CharLCD is still giving a 404... I'm working on a full scale report; may take a couple days.
Brilliant, thank you!
its really tough working while watching AAE. π
@marble hornet just came across this during documentation work. library for FocalTouch chips. FT6206 & FT6236 currently supported. It wasn't being included in the bundle, which is probably why we didn't see it. https://github.com/adafruit/Adafruit_CircuitPython_FocalTouch
@idle owl FocalTouch will also need the full monty...
comment updated
Thanks!
@slender iron reading your SAMD debugging guide. seems you were working on ASF4 USB and REPL echo, based on funcs/args used as examples. at least i have literal examples for my debugging. π
"needs the full monty..."??
Good morning, crew!
hello, quick quesstion...can you run circuit python on a Raspberry Pi?
quick answer - no.
thanks, jerryn
but you have python3 on RPi .
if I want to practice and learn with CP, can i get started without buying a feather or Gemma, etc?
I do have P3 on my Pis
CP attempts to stick to cpython so many things are transportable between a python3 script and CircuitPython. Obvioulsy, the hardwares support will not be usable - none of the "libraries" are common. but you can learn python on a Pi and it transfer your knowledge to CP when you do get the hardware. Just be ware that the CP systems don't support all of the modules you find on the Pi .
So it really depends on what you are trying to practice.
I think most people use CircuitPythoin to learn how to use Python to interact with some bits of hardware. LEDs or sensors. For that , you will need a board that supports CP. Of courec you can also do that on an RPI, but it won;t be quite the same code.
then again, CP will work on any samd21 board
With some work
most of them are compatible with arduino zero, so that firmware works without any extra work
@pastel panther when you have a chance, can you look at this - is just uncommenting those two lines all that wasn needed? https://github.com/adafruit/circuitpython/pull/681
@marble hornet by "full monty" I meant it will need the complete process of our recent documentation changes. (It was @ kattni; sorry if it appeared as part of my reply to you.)
I've not been using CircuitPython for long but the last several release pages that I have looked through I click the documentation link and the link from GitHub release page that appears as:
Documentation is available in readthedocs.io.
has a link:
http://circuitpython.readthedocs.io/en/latest/index.html
that does not work it should probably be http://circuitpython.readthedocs.io/en/latest/
Fixed by 04b4026666d8a8ef79a1f2ba14330863424936fc
hi hi @here we'll be adding some more to our python for microcontrollers newsletter, if ya haven't sign up here Adafruit Daily - Python for microcontrollers newsletter! Spam-free, no ads, https://www.adafruitdaily.com/
and cute snake art
cool!
...
wink
π
@river quest Is there a way to view the mailings without any subscription, as in a mailing list archive website?
I am trying to talk to another SPI device on an RFM69 Feather other than the radio...the documentation notes to set pin 8 (the RFM69_CS pin) to HIGH. Does this work is there a better way? ```python
from digitalio import DigitalInOut, Direction, Pull
import board
pin_8 = DigitalInOut(board.RFM69_CS)
pin_8.direction = Direction.INPUT
pin_8.pull = Pull.UP
It'll be an output not an input. (/me reboots machine, be back later)
@bronze geyser SPI works by sharing the data lines and then having a unique "select" (CS for chip select) line for each peripheral. you use that to say "hey, i'm talking to you". in general, you need one for each device, and you only enable the one you want to talk to.
what is the other device you are wanting to talk to?
good info here:
https://learn.adafruit.com/circuitpython-basics-i2c-and-spi/spi-devices
but if what you are trying to use has a CP driver, then a lot of this may be taken care of for you under the hood
Thank you @tidal kiln. I'm ok w/ how SPI works. My challenge is making sure SPI works well when using the RFM69Feather...since the radio uses pin 8 for it's CS pin.... (i.e.: The CS pin (#8) does not have a pullup built in so be sure to set this pin HIGH when not using the radio! )....as noted here: https://learn.adafruit.com/adafruit-feather-m0-radio-with-rfm69-packet-radio/pinouts#rfm-slash-semtech-radio-module
@bronze geyser you could also use another set of pins for MOSI, CLK and MISO and use a different SPI object: you don't have to share with the SPI object used for the radio.
@raven canopy did you see my bme680 PR?
@tulip sleet Thank you. I don't see the need for a different set of MOSI, CLK and MISO pins. Rather, it is making sure pin 8 is HIGH when I wanna communicate with my chip (an atm90e26) over the CS I have chosen. I just wanted to verify the circuit python code i wrote to set pin 8 high is "the best way to do it." Again, thanks.
@slender iron got the email. wasn't sure if you wanted me specifically. i'l get it now. looked like some good stuff you found.
@bronze geyser then as @timber mango was saying, set to output and set high
@raven canopy I have a lint thing to fix on it but wanted you to see it since your change broke the driver. See if you made similar changes in other drivers that may have broken them.
@tidal kiln yah...i thought i tried output and received "can't set pull up...so, i guess i set to output then do a pin_8.value = HIGH...
@slender iron @raven canopy Coincidentally I just tried to test the BME680 on CP 3.0 Alpha 3 and got an "incompatible .mpy file" error, even though I downloaded the latest release....
@tidal kiln i got confused in readTheDocs when it was talking about digitalio pull up and pull down....
can you link to where in the docs?
ohhh! will definitely take a peek then. sorry about that...
@slender iron It's adafruit_bme680.mpy
The latest release I downloaded though was an earlier alpha version.
Yeah, alpha.1
Ok.
@tidal kiln = here is the link to the doc i was looking at: http://circuitpython.readthedocs.io/en/latest/shared-bindings/digitalio/DigitalInOut.html?highlight=digitalio digitalinout
next release should have one for alpha 2
@bronze geyser pull up/downs only apply to inputs. maybe that warning in guide was confusing? made you think you needed to deal with pull/up downs? it's more a warning that since there is no internal pull up, you have to insure that pin 8 is set high to de-assert the CS on the radio, and to do that you have to set it to output and set it high (since there is no pull up resistor internally to do the job for you)
@tidal kiln ....yah, well...um...pullup...set to high...they seemed so the same to me. my stupid bad. THanks for clarification.... so i get pin_8 then do a pin_8.value = True ..yah?
yep. and change to OUTPUT instead of INPUT. that's pretty much it.
@bronze geyser like is being done for the led pin here:
https://learn.adafruit.com/adafruit-circuit-playground-express/circuitpython-digital-in-out
@slender iron that was the only one I remember making code/function changes to (since pylint complained). @idle owl, do you remember any others? DHT kind of pops in my head, but I think that one was simpletest related...
k np
I don't think so because I would have insisted on testing for code changes.
Does anyone know if the circuit python uart is capable for sending data to a pi?
Over the RX and tx pins
ok. i can roll back through the commits in conjunction with adabot reviews.
@feral sage should be fine - it works with a GPS and the idea is the same. Just make sure the baud rates match
I tried that I'll double check maybe I'm missing something
@feral sage rx to tx / tx to rx ?
what os on the pi?
Raspbian
what model pi?
Zero w I disbaled Bluetooth and enabled uart so I could use ttyAMA0 for the pi uart
also disable login console?
Yup
that's wierd, when i plug the trinket usb cable into the pi it works over uart Rx Tx pins
Alright. Looks like I have to both start virtualbox prior to 'vagrant up' and also to edit the Vagrantfile to point to xenial .. or ignore that xenial even exists. Upgrade in place did not work, there. /trying_to_build_circuit_python_3.x.x
$ cd atmel-samd-micropython-vagrant
$ diff ./Vagrantfile ../revised/Vagrantfile
15c15
< config.vm.box = "ubuntu/trusty64"
---
> config.vm.box = "ubuntu/xenial64"
(xenial is newer and has daily builds)
Trying to build circuitpython, getting this error Create build-circuitplayground_express/firmware.bin Create build-circuitplayground_express/firmware.uf2 python2 ../../tools/uf2/utils/uf2conv.py -b 0x2000 -c -o build-circuitplayground_express/firmware.uf2 build-circuitplayground_express/firmware.bin make: python2: No such file or directory make: *** [build-circuitplayground_express/firmware.uf2] Error 1
I initially didn't have python2 installed apparently, so I brew installed it, but no change. I'm assuming there's a directory linking issue somewhere but I don't know how to resolve that.
but brew list now shows python, python@2 and python3, and I initially thought "python" was python2. Evidently not.
@feral sage maybe ground issue?
@slender iron I tried the brew link python@2 and it gives me one error, could not symlink bin/idle and if I do the --dry-run with the brew overwrite command, it shows what's meant to be deleted and it's all things linked to python3.6.4, so I haven't forced it. I can show you the list, it's 9 things. Is that even likely to be the issue?
ok
sorry!
Welp, decided to burn the place to the ground and removed all the pythons, reinstalled all of them, and it worked.
that works!
@solar whale sounds like you got it figured out. yes, it is that simple. I probably should have included the gemma in my commit for the fix
So um... Traceback (most recent call last): File "code.py", line 3, in <module> ImportError: no module named 'touchio'
That's not a very good prize.
its not enabled in 3.0 yet
heres a cool thing I found: https://github.com/tannewt/PyCortexMDebug
allows you to easily print peripheral register values: ```
(gdb) svd/x SERCOM3 I2CM STATUS
Fields in SERCOM3 I2CM STATUS:
BUSERR: 0x0 Bus Error
ARBLOST: 0x0 Arbitration Lost
RXNACK: 0x0 Received Not Acknowledge
BUSSTATE: 0x3 Bus State
LOWTOUT: 0x0 SCL Low Timeout
CLKHOLD: 0x0 Clock Hold
MEXTTOUT: 0x0 Master SCL Low Extend Timeout
SEXTTOUT: 0x0 Slave SCL Low Extend Timeout
LENERR: 0x0 Length Error
nice!
I built it and tested them with digitalio
Are there doc builds that I need to poke? Its possible the webhooks are setup correct and so they are out of date and therefore look like they are failing.
@tannewt CharLCD has been out of commission for some time... It appears that most, if not all, of the ones in the 'autodoc failed' section are older builds (1+ month). I will get a full list together shortly.
new shiny toy is distracting me... π
@raven canopy I can just go through that list now
I don't have time to get into any sort of coding zone tonight
i checked like 5 of them, so i'm fairly confident they're all in need of a new buld.
kk, will do it now
π
Adafruit_CircuitPython_APDS9960 has an unhappy data descriptor
I'm picturing an illustration somehow of a sad data descriptor among all it's happy data descriptor friends...
π
Tested with digitalio in 3.0. Assignments pulled from https://learn.adafruit.com/adafruit-circuit-playground-express/pinouts#each-pin - verified with ladyada that this was accurate.
does adabot care about the html static path?
i saw those errors when i started my 'vestigating. my answer at this point: ??? π
k, let me look
Suddenly, the pool feels VERY deep...
yeah. studio 7 has this nifty feature: open object file for debugging. rolling the dice. good thing i have backup boards...
i'm on "skip programming" for now... hehe
hmm...can't get a terminal.
helps to use correct port...
@pastel panther if the pirkey has a dotstar, may want to look at itβs mpconfigport.h as well.
@raven canopy @idle owl https://github.com/adafruit/adabot/pull/8
adabot improvements
ok. jumping out of studio...quitting on a fairly high note. π
I checked and fixed all the build issues except APDS9960 which is failing due to a data descriptor getting passed a mock object I think.
reading un-parsed JSON makes the eyeballs weary. π΅
Looks to me like I'll succeed here by ignoring this invitation:
New release '16.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
vagrant@vagrant-ubuntu-trusty-64:~$
$ git clone https://github.com/adafruit/atmel-samd-micropython-vagrant.git
$ cd atmel-samd-micropython-vagrant ; $ md5sum ./Vagrantfile
e41a50ab7bdbea1bd748c32154ef64d3 ./Vagrantfile
$ egrep trusty ./Vagrantfile
config.vm.box = "ubuntu/trusty64"
Changing that to xenial did not lead to a success, here.
@timber mango in my experience, it works fine βas is β do not upgrade .
If you want 16.04, install it and then install tools yourself. Donβt use vagrant. But the vagrant install works.
Thanks jerry -- I found I could not upgrade via two paths (by changing the Vagrantfile before provisioning; by upgrading inside the VM).
If 14.x works I'm fine with that. ;)
Iβm not aware of any problems with it for the intended purpose of building CP
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-143-generic x86_64)
$ uname -a
Linux vagrant-ubuntu-trusty-64 3.13.0-143-generic #192-Ubuntu SMP Tue Feb 27 10:45:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
vagrant@vagrant-ubuntu-trusty-64:~$
At some point, the maintainer should probably look into upgrading.
I have not used it for a few months, but I think it still works fine @14.04
I'm building mpy-cross now.
i just ran vagrant box upgrade last week. still hums along just fine. didn't need to upgrade, but i usually do when up echoes that one is available.
Vagrant box update is fine and worth doing. Does not update Ubuntu version.
sommersoft: what's the output of:
$ uname -a
Vagrant box update updates the virtual box not ubuntu
Linux vagrant-ubuntu-trusty-64 3.13.0-139-generic #188-Ubuntu SMP Tue Jan 9 14:43:09 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux```
Trusty is still 14.04
@solar whale i was under the impression that the box updates included any OS updates that have occurred (obviously not large kernel/ver updates).
np!
Yes os updates but still within the major release.
My kernel is newer. trusty is the 'stable' version and xenial is the 'testing' version if Debian development analogies hold.
right. phew. my linux-ness isn't totally gone. π
@raven canopy you may find this useful
https://jsonformatter.curiousconcept.com/
@raven canopy goodnight,
@pastel panther lol. thanks. i googled a few last night, but often URLs look shady to me. I run windows afterall. user == best AV. π
night @solar whale! may your rest be storm-free.
@timber mango I think trusty is old and soon to be retired, like me, 16.04 is stable.
and do not be tempted by the do-release-upgrade. its a trap!
ok..ice cream time (but no chocolate syrup :wahhhh:)
14.04 EOL is April 2019.
Looks like I have a functional 3.x.x alpha built .uf2 for trinket M0. About to try it now. ;)
Adafruit CircuitPython 3.0.0-alpha.3-2-gbf42611 on 2018-03-16; Adafruit Trinket M0 with samd21e18
My 74HC595 driver likes itt. ;)
Well played!
Thanks. I remembered what to do from last summer, once provisioned.
Is the gbf42611 specific to this build?
As itβs been saidβexperience is recognizing your mistakes when you make the again β π
Yeah I like that one -- heard (heh) you say that the other day.
Tony's old guide doesn't tell you to
$ cd ~/source/circuitpython/ports/atmel-samd
It never mentioned 'ports' that path:
https://learn.adafruit.com/micropython-for-samd21/build-firmware
Instead it says:
$ cd ~/source/circuitpython/atmel-samd
I got there using the old one, so it's not too far off. Also it asks you to refer to an ESP-xxx doc that came before, for more generalization (background).
(same page) quote:
For some background information skim the ESP8266 MicroPython firmware build guide to see more details on Vagrant and VirtualBox usage. The SAMD21 MicroPython build VM is very similar to the ESP8266 build VM.
i actually have a combined Vagrantfile, so i don't have to go back and forth.
Hmm.
Esp8266 came first - then samd. @raven canopy is breaking new ground!
$ /bin/pwd ; du -ka | sort -rn | sed 5q
/home/nis/.vagrant.d
436744 .
436692 ./boxes
436688 ./boxes/ubuntu-VAGRANTSLASH-trusty64
436680 ./boxes/ubuntu-VAGRANTSLASH-trusty64/20180308.0.0
436676 ./boxes/ubuntu-VAGRANTSLASH-trusty64/20180308.0.0/virtualbox
That's where the VM disk image lives. I erased ~/.vagrant.d several times tonight. Now it's populated. ergo, that's the location (in Debian Linux). ;)
@timber mango what is your host system?
@solar whale
$ uname -a
Linux xyx 3.16.0-5-amd64 #1 SMP Debian 3.16.51-3+deb8u1 (2018-01-08) x86_64 GNU/Linux
$ cat /etc/debian_version
8.10
yeah, that's how i removed my extras/test while combining the two vagrant files. easy peasy OS reset button. π
@timber mango you can probably install the build system locally without using vagrant.
@slender iron that PyCortexMDebug thing looks great!
@solar whale I thought of that a few times. ;)
Another day! Time for bed here.. 73
73 Jerry. Thanks for your help!
I fixed the scrollback remarks to reflect current info on my issues with the Vagrantfile. :) /my_bad
$ md5sum ./mpy-cross*
7ccad01a1a2f0e00fe9f53cab30f78fa ./mpy-cross_3.0.0-alpha.3-2-gbf42611
e169878816021abd111dbc9da5c5dca3 ./mpy-cross-3.x-ubuntu-16.04-x64
$ ldd ./mpy-cross-3.x-ubuntu-16.04-x64 ./mpy-cross_3.0.0-alpha.3-2-gbf42611
./mpy-cross-3.x-ubuntu-16.04-x64:
linux-vdso.so.1 (0x00007fff9d19f000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f50b918b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f50b8de0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f50b948c000)
./mpy-cross_3.0.0-alpha.3-2-gbf42611:
linux-vdso.so.1 (0x00007ffddd179000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7d318c2000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7d31517000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7d31bc3000)
$
Looks close enough, I think. ;)
@slender iron any idea how to get past that i2c_bit.RWBit.__init__ autodoc fail on apds9960?
ok. that's enough trying to break my board with atmel studio. time for the π€s...
Interesting. I tried to run the simpleio tone example code on CircuitPython 3.0 alpha 3 Latest (as of this afternoon's build) and I get
File "main.py", line 8, in <module>
File "simpleio.py", line 55, in tone
NameError: name 'audioio' is not defined```
Is this a bug (i.e., do we need to do something to make sure auidioio is included) or am I just being obtuse?
@drowsy geyser I think audioio is still βunder development β
Ahhh, ok. Thanks @solar whale
@tidal kiln thank you very much for your kindness.
I am setting up my spi conversation w/ polarity = 1: ```python
import board
import busio
import digitalio
from adafruit_bus_device.spi_device import SPIDevice
spi = busio.SPI(board.SCK, MISO=board.MISO,,MOSI=board.MOSI)
cs = digitalio.DigitalInOut(board.D10)
device = SPIDevice(spi, cs, baudrate=200000, polarity=1, phase=1)
@bronze geyser top to bottom, what are the four traces? (fyi you can give them names in the logic software)
@tulip sleet let me know if you want help setting up the gdb stuff
@raven canopy the easiest way to get rid of that error is to not use const around the variable
@tidal kiln they do have names - I clipped them. my apologies. Top (black) MOSI, second (brown) MISO, 3rd (red) SCKL, 4th (orange) CS.
@stuck elbow - Scott's interview on Amp Hour -> I liked learning why tannewt
@slender iron that's what i was guessing at...
@bronze geyser ha! no worries.
if i'm reading that right, it looks like clock is idling high, at least in the later half of the trace where it's actually clocking out some data on MOSI.
i'm not sure what's up with the first part of that trace
@tidal kiln. Thanks..hmmm.. i see your point.
Does anyone know if the ethernet featherwing offers ipv6?
I don't know, but I doubt it
@analog drift the datasheet for the W5500 doesn't say anything and I didn't see anything in the Ethernet2 library, so it doesn't look like it.
yea. I couldn't see anything in the datasheet. Only a feature to block certain ipv6 messages apparently
PWM, Servo, Cap Touch and RGB LED are all finalised and mirrored into the board guides!
Currently working on NeoPixel and DotStar, and starting UART and I2C. Left are HID Keyboard, CPU Temp and Storage.
- NeoPixel/Dotstar will each have one diagram per, different board each.
- UART will use Flora v. of GPS for CPX/Gemma, breakout for the other boards, with wiring diagrams for every board.
- I2C Scan/Sensor will be combined, and both will use the TSL2561, with Flora v. for CPX/Gemma, br...
Missing .py files in examples folder -
- Adafruit_CircuitPython_FeatherWing
FeatherWing example.py files are nested in subdirectories. Should we figure out a way to have adabot check nested folders, or maybe just put a dummy/general .py in the examples/ folder?
Autodoc failed on ReadTheDocs. (Likely need to automock an import.) -
- Adafruit_CircuitPython_APDS9960
For the APDS9960, do you want me to remove the const on the APDS9960_ENABLE assignment? I just hope it ...
@idle owl "full report" not necessary on the adabot doc findings, since the rebuilds took care of the bulk of it... π
would it make sense to be able to give .value properties a generator and have it infinitely change the value?
I'm assuming I have no idea, but I'll ask questions anyway... with reference to what?
playing audio
ah
digs into pro-speak dictionary...comes up empty lol. i'm there with you kattni...i needed context. π
so python dac = analogio.AnalogOut(board.A0, sample_rate=44100) wave = audioio.Wave(SINE, sample_rate=44100) dac.value = wave
its weird in that play is not explicit but it matches how when you assign a value its immediate
and then use it like:??
if widget:
wave = audioio.Wave(SQUARE, sample_rate=44100)
I remember it being weird
@raven canopy that wouldn't actually play it
if you called it square_wave and then did dac.value = square_wave it would play
ok. i get backwards on that sometimes. obviously. π
I do kinda like that because then you could do: ```python
for i in range(10):
if i % 2 == 0:
dac.value = sine_wave
else:
dac.value = square_wave
time.sleep(0.1)
Nifty
from a user perspective, would it be easy_ish_ to figure out where the problem is when an exception is raised?
more to the point: does the exception trace back to the original definition, or the line where it is called in dac.value = x?
exception for what?
thats good @ruby lake my brain's been chewing on audio api stuff for the last 24 hours
if they used any wrong args in say, defining the auidoio object.
@slender iron ah, tell me later then π
touche... (atmel studio has fried my brain for the day)
@ruby lake there is some discussion in #help-with-audio about it too
I'll have a look
thanks!
ok, talk with you all later! have a good weekend! not sure how much I'll be on
π
@slender iron btw for macro oscillator code regarding CV and pitch. have a look at Olivier's Braids module. It is a much more robust osc implementation than Shruthi. https://github.com/pichenettes/eurorack/tree/master/braids
π time for me as well. later folks! don't break anything without me (please) π
If I want to run a section of my while True: twice, is there a better way then for i in range(2): ?
Looking at https://github.com/adafruit/Adafruit_CircuitPython_RFM9x, how would I wire up one of these modules (Ex: RFM96) to a Raspberry Pi such that I could use CircuitPython with it?
@idle owl that should work. assuming something like this:
for i in range(2):
while True:
if not happy:
break
I was doing it inside the loop, so only part of the loop went twice, but it did work.
I wondered if that was the best way is why I asked. Whether there was a better way.
well, only other way i can think of is to put it in its own function, then enumerate a variable to run it x times. inside the for..loop seems the best to me.
Thanks! π Also I'm not even doing it that way anymore π Ugh. Fighting with DotStars. The timing is totally borked on them with any kind of iteration. Any kind of rainbow_cycle type thing crawls. So I did some animations with slices. And called it good.
Hopefully that's good enough.
(β―Β°β‘Β°οΌβ―οΈ΅ β»ββ»
DotStars are screaming fast on Gemma, but not on Metro M0 Express or Feather M0 Express.
@idle owl which pins did you use on express boards?
ahh phooey...you...n/m . there you are! π
D8 and D11 or something on Metro. And then A1 and A2 so I could make code that worked across all the boards. Didn't matter.
so you didn't use SPI for either? (being lazy and not looking them up)
right. i remember a discussion a while back, and looking at the lib in the __init__, it will try the SPI first, then digitalio if it can't lock the SPI.
which would def explain a difference in speed.
yeah, i was heading to pin defs to see whats up.
MOSI
Ok nope.
hmmm
I tested Trinket and my suspicions were confirmed: it's screaming fast on Trinket too.
I need to test it on Itsy
CPX is also equally slow.
but not using SPI pins on those either.
I'll try SPI on Itsy.
i didn't see anything in the mpconfigs, or the makefile that stood out to me...
Slow on SPI on Itsy.
SAMD21E vs SAMD21G?
I'm turning into a pumpkin. Which might explain the headache. I'll be back at this tomorrow.
G vs E is just physical size (AFAIK). other difference could be DMA/non-DMA, but i can't find the answer to that...
There's some pin differences if you look at the sheet, but that wouldn't matter, it would just mean there's none of x-pin. The pin is the same if it exists.
But why DMA on non-express and no DMA on express?
If that's it, I mean
could have to do with the external flash, which isn't using DMA right now (according to commit messages i'm reading)
meaning, that's why SPI DMA isn't on... like i said, i can't find the answer to the question i posed. π
tomorrow sounds like a good idea. i'm on the cusp of having atmel studio giving me the info i want...but it's put up a fight all day.
@idle owl for the dotstar tests you have been doing, are you using CP2x or 3.0?
@solar whale @idle owl is using 2. I'm replicating with 3 to identify bugs.
@drowsy geyser ok. Good. Just curious. It sounds like you two have it covered. Let me know if you need any help with testing.
Ok! Thank you!
On the schedule today is: pulseio, simpleio, dotstar, and hours of cutting a lace pattern in acrylic for a lamp. π
Sounds like a good day!
Yep. I'm going to eat breakfast, grab my acrylic, and walk over to the maker space and work there all day. Woo hoo!
make ... DEBUG=1 how did i not see that earlier? ugh. atmel studio still spits out some weird numbers, but i can at least see a backtrace with args now... π€Ί
@unique mural CircuitPython libraries don't currently run on Raspberry Pi
Oh π
(we'd love to get there though)
Hi @mlmcnees, Thanks for the report, and I'm sorry some of the links sent you to the ReadtheDocs maze page. The team has been actively improving and refactoring docs.
You may already be aware, but I'll post here for others who may view this issue at a later date:
- Docs can be found at https://circuitpython.readthedocs.io and that will direct you to the version specified as the default.
- Other versions of the documentation can be accessed from the bottom of the sidebar navigation triang...
@unique mural i was peeking at your question last night, and if you aren't wedded to the RFM9x, there is an RPi Python fork for the RFM69 chip.
I was able to find the documentation but just wanted the release to be correct and complete so that it was not a stumbling block for others, I could not find another way of letting someone know.
π Silly programmer. Saving that file as "maiin.py" seems to be related to your problem.... #InsufficientBloodMntDewLevels
lol. "double tap" is not a universal solution. π
@raven canopy Not universal, but it solves a lot of problems. π
Victory! I was able to hack the is31fl3731 library to be able to use my Pimoroni Scroll Phat with Circuitpython. Now I just need to figure out if I have a use for it. The Scroll Phat is designed for use with Raspberry Pi, but is is just an I2C device - it has 17X7 pixels and the mapping took awhile to sort out especially for the use of text via framebuf. I'm not sure if it there is enough interest in it to add it to the library but it was a good challenge.
@solar whale Nice!!
I noticed the FeatherWing issue. If we can update Adabot to check subfolders, that's great, but I think in the case of FeatherWing, it might still be a good idea to have a readme.py in that folder anyway since it's an unusual library. Something explaining that each folder contains examples to go along with the associated FeatherWing.
We'll need to test it if we remove const but I think we should. We need to make sure it gets tested and doesn't sit for ages, though. And, if it's something...
This was an excellent way to let us know! If possible, can you post a link to a couple of the pages where you encountered the incorrect link? As @willingc stated, we're currently updating our documentation, and I want to make sure we're catching everything.
nice one @solar whale!
@idle owl RE: Issue 682 - the links in the release notes include index.html... they shouldn't.
Ah so it's something overall we need to fix?
yeah. i'm guessing at some point 'index.html' became invalid, but copy+paste release notes didn't get updated. (not knocking copy+paste...standard is good, especially when the work is already done)
So add it to the list? π
i almost went ahead and edited the release notes earlier...but i've met my "break stuff" quota for the the week. π
That's totally fair π
So do you think it should be added to 566 then?
Or become its own issue.
Also, is there a check for it? Or is it literally every repo needs an update...
And more questions without letting you answer first? π
it's not really a documentation error. it just the link that's in each of the release notes. could probably use Issue 682, and just rename it. it only affects the circuitpython repo (lol break...waiting for more questions). I can look through the library releases; haven't yet.
Ok. Can you update 682 then and comment on it?
here is what he's talking about. scrolled through to 2.2.1; all the same
Oh.
a redirect might also work...don't know how wide the use of /index.html has been/is.
i'll put that screenshot up on the comment though, just to clear up what the issue is.
actually, grabbed a better one while hovering over the link...
well, nevermind then. hehe. you moved fast on me again... π β©
I'll update and close the issue. I'm not going to update past that.
seems fair enough. as long as we break the copy+past chain, should be good going forward.
nope. you are ahead of me. i was still piddling with "pretty graphics"...to the extent windows can do that.
π Ok. You can still update if you want to
I can wait and close it out when you're done
do you think its needed? just for future clarification?
I think it could be helpful, yes
ok. on it..
Excellent
Just for clarification, this issue was with the CircuitPython Release Notes, for each release. That being said, @willingc excellent recommendations (as always)! And, thank you from me as well @mlmcnees for letting us know.
Here is a screenshot showing the discrepancy:

Thank you @raven canopy! I'm following up and closing.
Thanks to @sommersoft for clarifying where the issue was. I have updated the release notes for 3.0.0a3 and 2.2.4 to reflect the correct Read the Docs links. Thank you again to @mlmcnees for catching this issue! It should be resolved going forward.
almost did that amazing artwork in red...but: β
belated Happy St Patrick's Day everyone!
Ok, merged everything you sent in. I'm rerunning Adabot now.
k
Well it's shorter....
Well I thought Scott said he'd done what he thought needed to be done to fix the webhook issues, and there's still a list there. I don't think that's something you can fix.
So without that section it's ```Missing license.
Adafruit_CircuitPython_LSM303
Not in bundle.
Adafruit_CircuitPython_FocalTouch
ReadTheDocs latest build has warnings and/or errors -
Adafruit_CircuitPython_AVRprog
Adafruit_CircuitPython_VL6180X
Adafruit_CircuitPython_VL53L0X
Adafruit_CircuitPython_Thermal_Printer
Adafruit_CircuitPython_OneWire
Adafruit_CircuitPython_TCS34725
Adafruit_CircuitPython_LSM9DS0
Adafruit_CircuitPython_LSM9DS1
Adafruit_CircuitPython_APDS9960
Missing .py files in examples folder - 2
Adafruit_CircuitPython_FeatherWing
Adafruit_CircuitPython_LSM303```
And taking out the whole readthedocs.yml section too since that's looking for the wrong thing still. I didn't update adabot yet.
hmm. i wonder if she's still grabbing at those html_static_blah warnings. time for some 'vestigatin....
Also feel free to check off anything you fixed but didn't do anything do if it's not on the list anymore
aka you can update the 566 checklist accordingly if you want
after the first two on the 'RTD last build warnings...', it looks like those are all going to need new releases. RTD is building off of releases before the doc updates (brent's automock is the last release on these two). i'll keep going down the list...
Ok
So... connecting it to hardware SPI didn't seem to change the speed at which it wrote to the DotStars. I'm testing Gemma again on what the guide says should be HW SPI to see if it's even faster. Seems about the same. Testing the rainbow cycle since it's the only thing that takes a while.
I had made changes to the rainbow_cycle code but didn't realise it doesn't work right on longer strips, so I had to change that back. Eh.
It works on small things like 16 ring of NeoPixels, but scale it to 120 and it rewrites jumping a bunch of pixels. So if you want a non-smooth fast rainbow, I have you covered. But if you want the smooth one on a long strip, you get to wait.
33 minutes on a strip of 120 NeoPixels in fact. π
It's going to be significantly less on this strip of 72 DotStars. I should change the number to 120 and let it think it has the same number and then time it. Yah I'll do that.
i still can't understand the difference. i did a little more reading last night, and an answer remained elusive. And...33 minutes? that's...4 minutes a pixel? or 4 minutes per color?
255 colors over 120 pixels programmatically. But yes apparently.
Rainbow cycle gets slow on long strips.
Fast on short ones. It has to be the code, that isn't a HW failure.
do the changes occur linearly, or does it take longer for changes the longer it runs?
Linearly as far as I know.
if only we had timeit...
in other news, i think i just cleaned the bootloader off my trinket....
I mean I could do time.monotonic on either end and subtract it.
Oh. That's a thing.
But this stupid and inefficient way using a stopwatch and waiting for lights to start onto the next section of code somehow seems better π (it doesn't, but sunk-cost fallacy... I'm already 8 minutes into it, so obviously I should keep doing it this way...)
yep... Memory4 is all full of ff. now, where did that "put bootload back on" page go. π
Still have to keep remembering that pin assignments are arbitrary magic and the pins themselves are what they are based on the chip. As in it's still an odd concept to me and I have to keep it in mind when dealing with things like this.
Ooh I see some purple. Red's on its way back.
well, that's a fail. i can do this....i can do this...i think i can, i think i can. π
Yes! You can!
So... I really thought this would be faster. It is in fact, certainly not. And may be slower, we'l find out in 4 minutes. This tells me that the rainbow_cycle code has its own built in limiting factors with doing multiple iterations over different sets of large numbers, and write speed/HW SPI/LED type, none of that matters for rainbow_cycle specifically. It's the length of your LED strip that matters.
Interesting find.
I made a note in the NeoPixel CP Essentials guide page, and I will do the same for DotStar.
So when we get the "my rainbow isn't moving" issues, find out how many LEDs they're using. It's probably moving. Incredibly slowly.
This has no bearing on the Express vs non-Express board DotStar speed issue. Which is worth the research to know. Don't use rainbow_cycle for a speed comparison.
38 minutes.
Checking with the actual strip length of 72. (I had it at 120 for direct comparison to the NeoPixel time.)
"And NeoPixel wins the Rally de Blinka!!! The crowd goes wild!!!" well, 38 minutes later they do... π
this little trinket refuses to accept anything. you're sick little buddy....let me help! π€
Aww
13 minutes...that's not "bad". comparatively.
If I fill the entire thing with a single rainbow animation - so all pixels are displaying the same rainbow cycle, not where the cycle goes the length of the strip - takes about 30 seconds. On DotStar. On Gemma.
So.... 13 minutes and 30 seconds respectively. ```python
def rainbow_cycle():
for j in range(255):
for i in range(num_pixels):
idx = int((i * 256 / num_pixels) + j)
pixels[i] = wheel(idx & 255)
def rainbow():
for g in range(255):
pixels.fill(wheel(g))```
I tried the rainbow_cycle using a modulus instead, however, it doesn't scale well. It's faster. But, works on small strips, not on big ones.
While it's a bit of a white whale for me, I'm not doing to deal with figuring that part out right now. Suffice it to say: rainbow_cycle doesn't scale well. Be prepared for it.
if my math is right (not often), rainbow_cycle is iterating 30,600 times for a 120 pixel strip. Which puts each pixels[i] update at an interval of 14 seconds (30600 / (35 minutes * 60 seconds [2100]))
#pointlessmathispointless
I totally get it, I've been at this for 2 days. π
But figuring out that rainbow_cycle is the same across both types of LEDs and different boards is kind of satisfying.
Ok NeoPixel on ItsyBitsy takes about 30 seconds for the rainbow() code above as well. So that's that test complete. Rainbow code is what it is and is apparently hardware agnostic.
I went to all the trouble to get more DotStars out... why.
Oh right, verifying the Trinket wiring diagram.
Time for dinner!
bon apetit!
if anyone wants to hook me up with SAMD21 fuse settings (or point me to them), would be greatly appreciated. lost my bootloader during debugging, and can't get it to program and/or verify....
Tried the am2320 temp/humidity sensor with CP 3.0 today. Worked great. Anybody need some used dht22s π Iβm converted!
back in business!! something happened with atmel studio/windows/who-knows-what, nvm boot protection fuse got changed, and then my solution kept overwriting bootloader after re-programming. endless loop. at least, i think that's what happened...
π
that usb "da ding" never sounded so good.
@idle owl do you have autowrite on? turning it off and doing it manually will speed it up
It's on, yes. I'll see how much of a difference it makes. I tried it off and hadn't seen that much of an improvement, but I'll try it again.
Does not explain the difference of DotStar performance between express and non-express boards though.
we should chat about it monday
Agreed.
lol at language bot
π It's overly careful at times.
You can edit messages. If you hit the up arrow it'll automatically open editing for the most recent message.
mm
Found that accidentally at some point.
On mobile (Android at least) you can also press and hold.
yeah, after i learned the up-arrow, it took me a while to learn the long-press on Android. π
and the easiest way to @ someone, by clicking on their avatar. beats typing...
(i pre-type my meeting updates...which is why @'s don't show up)
Turning off auto_write has not sped up the rainbow_cycle code.
Same speed as with auto_write on.
ok, now that i finally have useable data...i'm ready for veg time. haha. night folks!
This is a minor housekeeping follow up to #682. @sommersoft @kattni @tannewt
RTD Versions page
<img width="995" alt="screen shot 2018-03-18 at 9 17 35 am" src="https://user-images.githubusercontent.com/2680980/37568065-5e05b676-2a8d-11e8-9fd2-c392100acd14.png">
Landing page for 2.2.1, 2.2.0, and 2.1.0
<img width="779" alt="screen shot 2018-03-18 at 9 17 49 am" src="https://user-images.githubusercontent.com/2680980/37568074-7630ad1e-2a8d-11e8-8437-fff02279839a.png">
RTD...
This is as far as I got this weekend following your suggestion (diff):
>>> import rtc
>>> import time
>>> rtc.RTC() == rtc.RTC()
True
>>> rtc.RTC().datetime()
(2018, 3, 17, 23, 58, 10, 0, 0, -1)
>>> time.localtime()
(2018, 3, 17, 23, 58, 10, 0, 0, -1)
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== class RTC(object):
=== def datetime(self):
=== return (2018, 3, 17, 21, 1, 47, 5, 76, 0)
===
...
This is an excellent suggestion. @willingc, thank you for outlining the process! I've disabled 2.2.1, 2.2.0, and 2.1.0 in Read the Docs, leaving latest and 2.x as the active options. So, we should be set for now. Thanks again!
@solar whale @drowsy geyser Did you two catch this? https://github.com/adafruit/Adafruit_CircuitPython_LIS3DH/pull/27#issuecomment-372453830
Yes. High on βtodoβ list! I assume I can use CPX to test.
Sure that would work fine. Making sure it hadn't gotten missed.
Hopefully will get to it tomorrow.
Do you have time to comment on it?
Nothing to say yet.
I meant can you comment that you caught it but haven't gotten to it
Sure
Thanks!
No problem.
@slender iron @opal elk @idle owl Just tried the liss3dh PR27 on a CPX. -- seems to work just fine. spinner.py and simple accel read tests also continue to work with it. Posted note to PR.
That was under CP3.0
Thanks @solar whale
No problem - glad to finally get around to it. CPX was getting dusty π
We needed the named tuple feature tested, that was what was changed. Looks good? @solar whale
It does not break anyhting - still trying to figure out how to use the new feature
Ah π Ok.
how can I test the named tuple?
I'm actually not sure.