A cautionary tale about concurrent programming in C (and really most languages), and why it's difficult.
In my last post, I discussed some of the process of building a mod for Valheim that adds support for Mumble Positional Audio. During the process of helping some users troubleshoot, it became clear that it's not a terribly well understood system, and Mumble itself doesn't offer much feedback on what's actually going on. Where each bit of data is available and processed isn't obvious, and can lead to misconceptions about how things work.
I'm taking a detour from my usual Rust side projects to dabble in something
new: Unity modding! I, like many others, have found myself addicted
obsessed highly invested in Valheim, a multiplayer viking
survival game that recently entered Steam Early Access. Lacking any built-in
voice capabilities, players use other platforms to communicate. Mumble, an
open-source voice chat program, has a cool feature where it can use in-game
position data to make it sound like your friends' voices actually come from
their characters. The trick is getting that data into Mumble.
This is going to be somewhat reminscent of that owl meme. I had plans for some more posts about a new codec abstraction, my async STM32 IO crate, and maybe the overall architecture, but one thing led to another, and now I have a complete project to talk about. I'll give an overview of the main points of interest so that the other rust/embedded posts aren't required reading. I'm also kind of writing to two audiences here, so if you're a Rust person, but not a keeb person, feel free to skip stuff and vice-versa.
Part 2 of my embedded executor journey!
Part 1 ended up getting a little long, so I cut it short while still missing some key features like more flexible task spawning and putting the executor to sleep when there's nothing needing to be polled. This time, we'll fill in those gaps!
Custom keyboard development part 3!
After discovering that the embedded-hal
ecosystem wasn't quite what I
wanted it to be, I set out to build the abstractions that I
wanted to use, namely: async-first and core::future compatible. The first
thing on the list? A way to run the Future
s of course!
Side note: My project's landing page has got some more content these days!
Part 2 of my custom keyboard project!
I didn't mean for this to become its own post, but it kind of got away from me. I've had a blast getting my feet wet in embedded dev so far with Rust, but it hasn't been without its share of headaches. I'm sure most of my problems can be attributed to my lack of experience in this realm, but hopefully I'll be able to turn my frustrations into something interesting by parts 3 and 4!
Part 1 can be found here: Bootstrapping My Embedded Rust Development Environment
After watching James Munns' Something for Nothing talk at RustConf about all of the cool things in the embedded Rust world that have been going on, I decided to take a crack at some embedded work. I built an ErgoDox a while back and already had some basic understanding of how its keyboard controller operates, so I thought "why not design my own keyboard?"