github musithang/sdrtop v0.6.1
v0.6.1 - A second look

latest releases: v0.7.1, v0.7.0, v0.6.9...
one month ago

The day after 0.6.0 I did the least glamorous thing you can do with a new instrument: I sat in front of it, live, with a HackRF and a notepad, and wrote down everything that looked wrong. Most of the list was taste. Two items were not.


The two numbers that were simply false

Every BLE device in the room had a crystal about 205 ppm off. That would make them the worst oscillators ever put in a product, and they were not. The survey tunes half a megahertz beside an advertising channel, and the receiver was quietly reading that half megahertz as each transmitter's own error, then averaging it into the census, where it looked very precise and very wrong. The receiver now brings the channel to its own centre first. The same devices now read a couple of ppm, which is what a crystal does.

The survey heard advertising about a tenth of the time, and channel 37 never. It only decoded the channel sitting dead centre of each survey stop, and the stops are laid out for the band, not for Bluetooth. It now takes the advertising channel wherever it is in view, and the Census rotates the three advertising channels on its own, so it fills up without the BLE list open beside it.

Also in the "measured the wrong thing" drawer: the df2 max row compared a maximum of noisy readings against a minimum allowed by the specification. Noise only ever pushed it further from the line, so it could not fail, and a check that cannot fail is decoration. It is df2 avg now, with its uncertainty.


Classic Bluetooth, more honest about what it hears

  • The LAP everyone sends is the general inquiry code, a device looking for others, and it is now called that instead of the busiest piconet in the room.
  • A device being paged is recognised by the rhythm of its packets (no header ever follows, and they land on odd half slots, which a piconet never does) and only named when both signs are there. The first method I tried failed its own calibration, so I threw it away and found a better one. That is how it is supposed to go.
  • A piconet's clock error falls out of its slot timing, relative to our own oscillator until a reference corrects it.

Masked means masked

The masked address mode used to hide the address and nothing else, so a perfectly anonymous #17 could sit next to "Viktor's AirPods". It now hides names, payload bytes, and the classic address parts too, on screen and in every export.


And the rest

A footer per section that shows the keys you can actually press there, gain stages from any layout, ← → to step a locked radio across channels, a header that shows what the radio can see, every BLE limit read from the Core Specification instead of remembered, and several panels that finally use the space they are given. Ctrl+C now quits without saving, as the manual had been claiming all along. The full list is in the changelog.

One key is gone on purpose: P, for LE 2M. It could only listen for something that, on the channels it listens to, is never sent. LE 2M comes back when sdrtop can follow a connection, and it will switch by itself.


Upgrading

No config change. The , . gain-stage keys work from every layout now, not only the Command Rail's focus mode, and two export columns changed (df2_max_khz became df2_avg_khz with its sigma; the classic export gained lap_kind and clock_ppm).

cargo install sdrtop --locked

Or the installer, same as before.

As ever: if something looks broken, it is either a bug or an undocumented feature. Flip a coin, then open an issue. ❤️

Full Changelog: v0.6.0...v0.6.1

Don't miss a new sdrtop release

NewReleases is sending notifications on new releases.