github musithang/sdrtop v0.6.4
v0.6.4 - The long way round

latest releases: v0.6.6, v0.6.5
7 days ago

BLE's long-range mode, LE Coded, and the extended advertising that carries it. sdrtop now receives LE Coded with a receiver of its own, and follows an extended advertisement from the packet that announces it to the packet that says who sent it, on LE Coded and LE 1M alike. Every pointer it follows ends with an account of what happened to it.


LE Coded: a section of its own

LE Coded sends every bit as eight symbols (S=8) or two (S=2), behind aconvolutional code, which buys range at the cost of time. The LE 1M receiver cannot hear it at all, and a first attempt built on top of it needed about 17 dB to decode, which gave the range away. So it has its own receive chain (a whole-preamble detector, symbol means and a soft-decision Viterbi) and its own menu section:

  • a list and a detail, with the coding scheme and how many symbols the FEC had to repair for each packet;
  • on S=8, the transmitter measured as the LE Coded RF tests define it: the preamble's f0, the deviation (225 to 275 kHz) and the drift through the payload. S=2 has no such tests, and the detail says so;
  • its own export file, net-coded, in the BLE file's columns.

Following the AuxPtr

Extended advertising is a two-step affair. The ADV_EXT_IND on the advertising channel carries no address and no data, only a pointer (the AuxPtr) to an AUX_ADV_IND on a data channel a few milliseconds later, which has the address and the name. sdrtop listens on that channel at the promised time and reports what became of each pointer: heard, missed, out of the radio's view, or not followed, with the reason.

This works on the LE views too, for ordinary LE 1M extended advertising. A phone set up in nRF Connect with both PHYs, each advertising its name at
250 ms:

and on LE 2, its auxiliary packets on data channels 7 to 13, named, each bound to the ADV_EXT_IND that pointed at it and measured like any other packet:

An extended advertiser is now counted in the Census from its auxiliary packet, and the Advertising list shows ADV_EXT_IND as read instead of "(not decoded)". The auxiliary link reads the full 255-octet extended payload; on the air that turned up a second device in the room sending 100-octet auxiliary packets.


🔧 Fixed

  • A retune left the held samples in place, so a connection event or a measurement right after it could be read from samples mixed for the old centre frequency. They are dropped at the retune now.
  • A followed connection that moved to LE 2M at 20 Msps reported its events as feed lost. There is no LE 2M receiver at that rate (it needs a multiple of 8 Msps); the events now say "no receiver".
  • SoapyRemote's AMP is a switch again, and the whole-chain gain no longer turns it on. Thanks, @kajoty. ❤️

Known limits

  • At 20 Msps the LE Coded receiver costs more than real time on a small machine. The header's decode figure shows it, and pointers it could not follow say "its samples were not held".
  • LE Coded's SNR reads low on the air (13 to 31 dB for packets measured directly at about 40 dB over the noise). The HackRF's DC offset is ruled out; the investigation continues.

Upgrading

The config is unchanged. The NET export writes one more file (net-coded), and the BLE CSV gains three columns at the end (fec_repairs, sid, aux); anything that reads it by column name keeps working. The full list is in the
changelog.

cargo install sdrtop --locked

Or the installer, same as before.

What's Changed

  • fix(soapy): the AMP is a switch, even when the transport drops the step by @kajoty in #23

Full Changelog: v0.6.3...v0.6.4

Don't miss a new sdrtop release

NewReleases is sending notifications on new releases.