radiocli Home Blog GitHub

All posts

The First Round

I spent two weeks taking a Uniden SDS150 apart over its serial port and writing up what fell out: Ask the Screen, Not ASCII, Show Yourself, Off the Map, Say Your Name, Return Prevous Mode. Somewhere in there I caught myself starting to grade the thing, the menus are clunky, the protocol hides half its commands, that kind of talk. Then I remembered the obvious. None of this was built for me. Grading a scanner’s design by how well it serves my reverse-engineering project is like panning a commercial fishing boat for being a lousy daysailer. So, corrected for that, my take turns out to be mostly gratitude.

It was built for the person holding it

The SDS150 is serious gear for a demanding hobby. It trunk-tracks Motorola, P25, DMR and NXDN systems, filters a nationwide RadioReference database down to wherever you happen to be standing, sorts everything by service type, watches for a nearby transmitter with Close Call, throws SAME weather alerts, and runs a live spectrum waterfall, all of it worked in the field by a thumb, a knob and a handful of keys. The menus are deep because the hobby is deep.

When a list shows nine rows at a time and wraps around at the end, that’s a small screen doing a big job for somebody standing trackside, not a design mistake. When Off the Map found a dozen screens the serial protocol won’t describe, those weren’t holes in their work, they were the edge of a map that ran out right where the operator’s world ends and mine begins. Nobody at Uniden was picturing a guy scripting the menus from a laptop when they laid them out.

The seams I snagged on are all like that. Menu titles that don’t match the entry that opened them, a listing that reports twenty of fifty areas over the wire, a color you can only change by turning the knob one click at a time: none of it shows if you’re holding the radio the way it was built to be held, and all of it surfaces only when you pry it open from outside. Calling those flaws would be me gripping the tool by the wrong end and blaming it for the handle. For the person it was actually made for, this is a capable, dense, well-built scanner, and my inconvenience is not a review of it.

They owed me nothing, and left the door open anyway

A consumer scanner built entirely for field operators still exposes, over a plain serial port, two commands that together let a total outsider rebuild anything.

The first is KEY. It presses a key, any key, including the rotary knob as left, right and push, and the three soft keys. Not high-level convenience calls, the physical inputs a thumb would use. The second is STS, and its newer twin GST, which return the whole screen the way the radio draws it: the text of every line, a parallel string marking which cells are reverse video or underlined, and a field naming the font on each row. The framebuffer, in text. Anything the operator can do, a program can do, because it can press any key. Anything the screen shows, a program can read, because it gets the screen as drawn, down to the highlight bars. Those two commands are wicked cool, and every last thing I documented came out of them: the screen map from stepping the knob through an editor and reading which cells lit up, the colors from walking pickers and reading the values off the glass, the font and the menu tree the same way.

None of that was owed to me. Uniden could have sealed the radio, shipped a locked companion app, and satisfied every customer they actually have, because their customers don’t care whether a laptop can drive the thing. They left the primitives exposed anyway.

Mechanism, not policy

There’s an old name for the instinct on display. The X Window System, designed at MIT in the mid-1980s, was built on the rule to provide mechanism, not policy: hand people the primitives and let them build the interface, rather than bless one way of doing things. It boils down to this. A curated API only lets you do what the vendor imagined; raw primitives let you do what the vendor never thought of. These engineers didn’t have to leave that door open, and that they did is the whole reason a stranger could turn up years later and map the entire machine.

The same open-handedness runs past those two commands. The command space is self-describing: send a name the radio knows and it echoes the name back, so you can enumerate its whole vocabulary just by asking. One undocumented command lets you tag a request and get the tag handed back in the reply. The settings live on the memory card as plain, readable text. These are the marks of people who assumed somebody would come poking around someday and chose to make that possible.

So no, I won’t grade their homework

They weren’t doing my assignment. The right response to bumping into a rough edge in a serial protocol that was a gift in the first place is not to review the product, it’s to notice the port was open at all. Every bit of friction I met was me pushing the radio sideways into a use it was never shaped for, and it gave anyway.

The people who built this owed me nothing and handed me everything. The first round is on me.