Two Computers, One Engine: The Part of the ECU I Didn’t Know I Was Deleting

There is a specific kind of bug that only shows up when you remove something. Not when you break it, not when you misconfigure it, but when you take it out entirely and discover that it had a second job nobody wrote down.

I spent a few months this year replacing the engine computer in a 2001 Dodge Stratus with a Speeduino DropBear v2, an open-source standalone ECU. I planned it carefully. I mapped every pin. I wrote a note titled “Confirmed so far.” Then I turned the key and got nothing at all.

The answer was three sentences further down in my own notes, in a warning I had written to myself and then argued my way out of.

Continue reading Two Computers, One Engine: The Part of the ECU I Didn’t Know I Was Deleting

Five Taps and a Zip File: Running My Own Code on a Denon DJ Player

A Denon Prime GO is a $1,000 standalone DJ controller. No laptop, no phone; you put music on a USB stick, plug it in, and play. It has a touchscreen, two decks, a battery, and absolutely no reason to let you run your own software on it.

It does anyway. You tap the version number five times, put a zip file on a flash drive, and it runs whatever you gave it.

I’ve been documenting inMusic’s firmware for a couple of years now. Denon DJ, Numark, Akai, HeadRush, Rane all share a codebase, so work on one device tends to apply to a dozen. Everything in this post lives in my documentation site. But the way into the device is my favorite thing I’ve found in it, partly because of how it works and partly because of a bug I found in inMusic’s own version of it.

Let me walk you through it.

Continue reading Five Taps and a Zip File: Running My Own Code on a Denon DJ Player

Undocumented APIs

Because I always love to push the envelope, and love learning how different services work in the background, I find myself running into undocumented APIs fairly regularly. Through writing many random bots, I’ve come up with a pretty nice workflow for handling, and documenting these APIs.

This article is going to cover how I typically go about the endeavor of documenting unknown APIs.

Continue reading Undocumented APIs