A Compact Game Controller For Your Phone

[Gil Yankovitch] noted that playing games on a touchscreen phone gave up a certain something in terms of the tactile feedback one gets from real buttons. To that end, he was inspired to build a controller specifically for phones that solved this very problem.

The result was JoyFon. It’s a small gamepad built around the Raspberry Pi Pico, and can be put together around an RP2040 or an RP2350 as desired. It has four face buttons, a directional pad, and start and select buttons, as well as additional shoulder buttons up top in later revisions.

The JoyFon enumerates as a standard USB HID gamepad, so you could use it to play games on just about any PC, laptop, or tablet. However, the JoyFon is specifically designed for use with smartphones in the vertical orientation. This guided the design of the 3D printed enclosure, which positions the USB-C port to plug into the base of a phone, such that the buttons sit neatly beneath it. It does cover some of the phone screen, but that’s not always a problem when playing emulated games with a 4:3 or similar aspect ratio. The result is a button and screen layout not dissimilar to that of the original Game Boy handhelds.

We’ve seen some other great custom controller builds over the years, like this fantastic design using keyswitches.

Continue reading “A Compact Game Controller For Your Phone”

Behold The Most Beautifully Ambitious Starship Simulator Yet

[Kevin Kelm] created something wondrous: Halcyon Dawn, an utterly unique and desperately challenging game that is equal parts intricate starship simulator, imposing hardware console, video game, and love letter to John Scalzi’s Old Man’s War book series. Grab a beverage for this one, because it’s chock-full of detail.

First, how is it played? The simulator represents the ship Halcyon Dawn, a stolen and renamed vessel, and the player representing its sole crew member. The ship’s new mission is to establish a home for its payload of genetically-engineered unfortunates, escaping a cruel sort of indentured military servitude. The former masters of course have a very different view of the whole situation, throwing around terms like “treason” and “theft” and in general preferring the version of the desperate protagonist they had the most control over.

Aluminum extrusion, laser-cut panels, and custom PCBs for interfacing physical controls and displays make up the bulk of the build.

As the player is meant to be operating the ship on their own, the cockpit is imposing. All 152 controls and six screens are meaningful and will be needed to pilot the Halcyon Dawn, survive hostile actions, repel boarding attempts, mine and refine vast amounts of raw materials, and in general keep the ship running and intact until an autofactory can be deployed in orbit of a suitable planet to create a new home.

All easier said than done. It’s one thing to pilot and tweak a temperamental ship, but doing so while also performing damage control and thwarting a boarding attempt by manipulating life support is quite another. Want more details? Gameplay is documented here and the physical controls have their own library.

The product of a year of focused work, [Kevin] – now retired – pointed his decades of hardware and software experience at Halcyon Dawn after realizing one night that everything he needed to create it already existed. How this whole project came to be is also a tribute to the amazing tools and equipment that hobbyists and hackers of all kinds now have to turn an idea into something that actually exists in the world. Even so, it was a load of work he is not keen to repeat. Don’t miss the technical deep-dive and photo gallery of the build.

While the game itself — being a fan-made derivative of Scalzi’s work (and useless without the custom-made hardware console) — isn’t being released, [Kevin] has shared the underlying hardware framework it is built on. Enigma is an ESP32-based set of input and output PCBs made for integrating switches, knobs, displays, relays, and more with a Python library to make them easy to work with.

Starship simulators are a wonderful subset of projects, and every one is different from the last. Something about physical builds really works for them, and while we’ve seen a camper trailer converted to starship simulator [Kevin]’s project focuses the whole experience beautifully into the single-person console you see here. Watch a video of Halcyon Dawn running in an arcade-like “attract” mode embedded just below.

Continue reading “Behold The Most Beautifully Ambitious Starship Simulator Yet”

IPhone Becomes A Bluetooth Keyboard And Mouse

Sometimes you need to use a computer and you don’t have a spare keyboard and mouse on hand. [KoStard] figured an iPhone could serve as a passable replacement interface device. To that end, he built an adapter to let the phone act as a wireless keyboard and mouse on just about any modern machine.

To achieve this, [KoStard] grabbed an ESP32-S3 development board, and programmed it to act as a USB HID device to any machine attached over USB. It then listens out for Bluetooth LE communications from an iPhone equipped with the companion app. The app provides an on-screen keyboard on the iPhone that covers everything including special keys, symbols, and punctuation. You can also take advantage of the iPhone’s quality capacitive touchscreen, which emulates a nicely-responsive  trackpad, with two-finger taps used for right clicking and two-finger drags for scroll. Latency is nice and low courtesy of the direct Bluetooth LE connection.

It’s a nifty build that is particularly useful in oddball situations where you might want a keyboard and mouse. For example, [KoStard] notes it’s a great way to control a Smart TV without having to do ugly slow “typing” on an infrared remote. We’ve seen his work before, too—previously building an adapter to provide Bluetooth capability to any old USB keyboard. Video after the break.

Continue reading “IPhone Becomes A Bluetooth Keyboard And Mouse”

Stream Deck Plus Reverse Engineered

[Den Delimarsky] had a Stream Deck and wanted to be free of the proprietary software, so he reverse-engineered it. Now, he has a Stream Deck Plus, and with the same desire, he reverse-engineered it as well.

The device has eight buttons, a narrow screen, and four encoder dials. The device looks like a generic HID device to the host machine, and once it has been configured, doesn’t need any special software to function. By configuring the device using the official software in a virtual machine under the watchful eye of Wireshark, it was possible to figure out how that initial setup worked and recreate it using a different software stack.

If you’ve never done this kind of thing before, there is a lot of information about how to find USB data and draw inferences from it. The buttons send messages when pressed, of course. But they also accept a message that tells them what to display on their tiny screen. The device screen itself isn’t very big at 800×100.

[Den] packages everything up in the DeckSurf SDK, an open source project that lets you control Stream Decks. So if you just want to control the Deck, you don’t need to know all these details. But, for us, that’s where the fun is.

Way back in 2015, we covered some guy who had sniffed out a USB signal generator. That was easy since it was a serial port. However, you can go pretty far down the rabbit hole.

the Logitech receiver in question next to the mouse it's paired to

Uncovering Secrets Of Logitech M185’s Dongle

[endes0] has been hacking with USB HID recently, and a Logitech M185 mouse’s USB receiver has fallen into their hands. Unlike many Logitech mice, this one doesn’t include a Unifying receiver, though it’s capable of pairing to one. Instead, it comes with a pre-paired CU0019 receiver that, it turns out, is based on a fairly obscure TC32 chipset by Telink, the kind we’ve seen in cheap smart wristbands. If you’re dealing with a similarly obscure MCU, how do you even proceed?

In this case, GitHub had a good few tools developed by other hackers earlier — a Ghidra integration, and a tool for working with the MCU using a USB-UART and a single resistor. Unfortunately, dumping memory through the MCU’s interface was unreliable and frustrating. So it was time to celebrate when fuzzing the HID endpoints uncovered a memory dump exploit, with the memory dumper code helpfully shared in the blog post.

From a memory dump, the exploration truly began — [endes0] uncovers a fair bit of dongle’s inner workings, including a guess on which project it was based on, and even a command putting the dongle into a debug mode where a TC32-compatible debugger puts this dongle fully under your control.

Yet another hands-on course on Ghidra, and a wonderful primer on mouse dongle hacking – after all, if you treat your mouse’s dongle as a development platform, you can easily do things like controlling a small quadcopter, or pair the dongle with a SNES gamepad, or build a nifty wearable.

We thank [adistuder] for sharing this with us!

ATtiny85 Mouse Jiggler Lets You Take A Break

The good news is that more and more people are working from home these days. The bad news is that some of the more draconian employers out there aren’t too happy about it, to the point of using spyware software to keep tabs on their workers. Better make that bathroom break quick — Big Brother is watching!

One simple way to combat such efforts is a mouse jiggler, which does…well it does exactly what it sounds like. If you find yourself in need of such a device, the WorkerMouse from [Zane Bauman] is a simple open source design that can be put together with just a handful of components.

The WorkerMouse is designed to be assembled using through-hole parts on a scrap of perfboard, but you could certainly swap them out for their SMD variants if that’s what you have on hand. The circuit is largely made up out of passive components anyway, except for the ATtiny85 that’s running the show.

[Zane] decided to embrace modernity and couple the circuit with a USB-C breakout board, but naturally you could outfit it with whatever USB flavor you want so long as you’ve got a cable that will let you plug it into your computer.

The project’s C source code uses V-USB to connect to the computer and act as a USB Human Interface Device (HID). From there, it generates random speed and position data for a virtual mouse, and dumps it out every few seconds. The end result is a cursor that leaps around the screen whenever the WorkerMouse is plugged in, which should be enough to show you online while you step away from the computer. As an added bonus, [Zane] has put together a nice looking 3D printable enclosure for the board. After all, the thing is likely going to be sitting on your desk, might as well have it look professional.

If you’ve got the time to get a PCB made, you might also be interested in the MAUS we covered last year, which also keeps the ATtiny85 working so you don’t have to.

A screenshot of the release page, showing the headline and a crop of the release notes

MicroPython 1.23 Brings Custom USB Devices, OpenAMP, Much More

MicroPython is a wonderful Python interpreter that runs on many higher-end microcontrollers, from ESP8266 to STM32 to the RP2040. MicroPython lets you build devices quickly, and its latest release, 1.23, brings a number of improvements you should be aware of.

The first one is custom USB device support, and it’s a big one. Do you want to build HID devices, or play with MIDI, or do multiple serial streams with help of PIO? Now MicroPython lets you easily create USB devices on a variety of levels, from friendly wrappers for creating HID or MIDI devices, to low-level hooks to let you define your own USB descriptors, with user-friendly libraries to help all the way through. Currently, SAMD and RP2040 ports are supported in this part of code, but you can expect more in the future.

Hooray to 10 years of MicroPython!

There’s more – support for OpenAMP, an inter-core communication protocol, has received a ton of improvements for systems where MicroPython reigns supreme on some of the CPU cores but also communicates with different systems on other cores. A number of improvements have made their way through the codebase, highlighting things we didn’t know MicroPython could do – for instance, did you know that there’s a WebAssembly port in the interpreter, letting you run MicroPython in your browser?

Well, it’s got a significant overhaul in this release, so there’s no better time to check it out than now! Library structure has been refactored to improve CPython compatibility, the RP2040 port receives a 10% performance boost thanks to core improvements, and touches upon areas like PIO and SPI interfaces.

We applaud all contributors involved on this release. MicroPython is now a decade old as of May 3rd, and it keeps trucking on, having firmly earned its place in the hacker ecosystem. If you’ve been playing with MicroPython, remember that there are multiple IDEs, graphics libraries, and you can bring your C code with you!