Sonicare UART

The seal on my toothbrush failed and the driver isn’t working well anymore. I took it apart to see if I could fix it, but the driver is all corroded and is a model that’s not serviceable. Boo.

I figured I’d scavenge the battery. While I was looking at it, I noticed that there are UART and I2C pads. Interesting. I soldered on some wires on and tried the Flipper Zero UART console. Sadly, nothing lit up.

I wonder what a toothbrush has to say…
Maybe the dorkiest thing I did over break?

I hooked up my little oscilloscope and checked all the pins. The UART pins seem to be pulled high and the I2C pins seemed to float. There was no clock or anything that looked like signal. Strangely, the UART pin voltage was 4.7v.

I could mess around with it some more, but I think it’s probably just there for programming the chip though the board at the factory.

Dirty-PocketChip-wave M8

Before I decided to buy the M8, I tried it “headless” with a Teensy for a while to see if I could figure it out. It worked well enough, but the whole point of the M8 is that it’s portable and fun. I thought I’d try to get it running on my PocketChip. It worked and it wasn’t even that bad to use. If I really wanted to I could have stuffed the Teensy into the Chip’s case and had a pretty decent portable experience. I even made a song on it.

I wrote a short readme and have the source on my GitHub. There’s also a pre-built binary if you have a Teensy and a PocketChip and want to give it a try.

Setting a Person field in SharePoint

This shouldn’t be this hard. The SharePoint team really needs to work on the programming model. This web API is bad bad.

For “reasons” I found myself needing to update a SharePoint list item to set the value of a Person field. It turns out that this is insanely annoying because what the ListItem API expects is the resolved User Id (it’s some rando number that’s assigned to the user when they access the site for the first time.) I’m working in a PowerAutomate flow and unfortunately that’s not a value that comes along with a user’s object. That would be too helpful.

If you try to use the Claims string to set the PersonFieldStringId field in a MERGE, it just doesn’t work. You get some terrible error message like Bad Gateway or something equally useless. Also, if you try to set through the navigation property like PersonField: { "Claims": ... }, that will succeed, but not actually work.

After being very frustrated and increasingly annoyed, I finally found someone who said to use the validateUpdateListItem method on the item. It worked. Apparently, this method “Validates and sets the values of the specified collection of fields for the list item.”

In case you find yourself on this site, wondering how this can all be so unnecessarily complicated, here’s the request you want to make.

URI: https://tenant.sharepoint.com/sites/MySite/_api/web/lists/GetByTitle('My List Name')/items(1234)/validateUpdateListItem
Method: POST
Headers: Content-Type=application/json;odata=verbose
Body:
{
"formValues": [
{
"FieldName": "Your_x0020_Field_x0020_Name",
"FieldValue": "[{'Key':'i:0#.f|membership|user@domain.com'}]"
}
]
}

Radio Adventures

After my year of music I got a Flipper Zero kind of on a whim. I didn’t know much about it but it was kind of fun trying to catch signals. The biggest problem was that it was limited to digital signals inherently and the SubGHz bands it supports are kind of uninteresting unless you’re into hacking. I liked the portability and the slick case, but generally it doesn’t really fit into any use case. I wrote a little IR scope that lets you visualize an IR signal. That was kind of fun.

Working on the PortaPack firmware

Then I was introduced to SDR and more precisely the PortaPack built on HackRF. That’s the flexibility of a fairly powerful, half-duplex SDR, in a portable device. Even better is that it has a great open source community. The Mayhem project was a lot of fun to work on. Lots of interesting problems to solve, bugs to fix. The community has some great people too. It’s all C++ so it was nice to have a place to continue to practice my coding.

I spent hours and hours and days and weeks working on the project, but then, as all my interests do, I found something else to focus on. In this case it was the Dirtywave M8. Does that mean it’s back to making music? Maybe. That and a renewed focus on home improvement projects…