Hi Guys,
It’s time for a development blog post to give you an inside look at what I’ve been working on.
Mostly I have been writing code. Lots and lots of code. That means there’s some new firmware for the OSR2 on the way, and an upgrade to the new, expanded TCode version 0.3.
So, first, OSR2:
As a prelude to releasing some new Virt-a-Mate plugins I have re-visited the OSR firmware. I want to release a definitive version, in the same way that the OSR2.1 design is the definitive version of the OSR2 hardware.
Every OSR2 and SR6 out in the wild right now has at its core my original ToyComms code. This is the code that reads the TCode commands from your computer and tells the Arduino microcontroller, usually a Romeo BLE mini, what to do with each axis.
ToyComms dates back to March 2019, a time when I had very little experience writing Arduino code and it shows. It’s very arcane, longwinded and clunky. Even I don’t have a clue how it works now! I barely understood it when I modified it to make the jump from TCode v0.1 to v0.2 in early 2020. Let’s just say it works so I haven’t fixed it!
Now, however, I want to make some improvements to TCode and add some extra features. That means I have had to finally tackle this issue and, rather than try to get my head around my old code, I have simply re-written the OSR2 firmware from scratch. Phew!
TCode:
TCode is the open source protocol that we use to allow computer apps to communicate with the OSR2/SR6. I devised v0.1 back in 2019, and since January 2020 we have been using TCode v0.2. The improvements in the current version owe a lot to Raser1 and his script player JFP.
Now it’s time to make the upgrade to v0.3. v0.2 was not backwards compatible with v0.1, but v0.3 will be backward compatible. The plan is to add some new features, not to change anything in the protocol that already exists. There are some new features that I have wanted to include for a while, and there are other features that users have requested.
In v0.3 it will be possible to identify what firmware an OSR2 is currently running. This is useful, especially if it isn’t you that built your device.
It will also be possible to identify by name what axes are available on a connected device.
Another feature I want to add is the ability to store the user’s axis limit preferences on the device. This means that if you set up your limits on a particular setup they will be carried automatically to any other setup. So for example you could set your limits using the sliders on MOSA, and you then wouldn’t have to play with the range limit sliders in the Virt-a-Mate plugin.
I also want to add in some kind of stop function, which players will be able to issue if the pause button is hit, as well as a timeout feature for the vibration channels. At the moment the vibe channels do not shut down automatically if the connection is lost.
What about SR6?
My plan going forward is that I am going to stop supporting the Romeo BLE mini for the SR6 and switch to using an ESP32 instead. The Romeo is a great plug-and-play option for OSR2 but it is right on the edge of its capability with the reverse kinematics calculations needed for SR6.
The SR6 already needs a power bus, so the ESP32’s pin setup should not be a problem. At the same time the ESP32 offers enormously more computing power, so adopting it is pretty much a no brainer. This means smoother, faster operation.
Using the ESP32 for SR6 (and as an optional upgrade for OSR2) also opens the door to officially adopting the wifi connection capability that Khrull has pioneered over the last few months. I don’t ever plan to drop the USB option, but wireless is often requested by content distributors because it enables the use of mobile platforms.
I plan to get the new OSR2 firmware out at the beginning of next month, and it will be open source. The ESP32 firmware and the random stroker software will follow and these will be for patrons only.
I want to say a big thanks guys. It’s absolutely awesome being able to sit down and devote a serious number of hours into working on this tech, and it’s you that make that possible for me!
All the best,
Tempest.