The previous tutorial introduces PicoScenes and exemplify the simple injector and logger modes. In this tutorial, we move forward to an advanced feature of PicoScenes: Injection with ACK, or chronos-initiator and chronos-responder modes. For a simple description, these two modes working together enable BI-DIRECTIONAL CSI measurement with ms grade round-trip delay (RTD).

This tutorial is an extended topic on PicoScenes. You should refer the previous tutorial for basic usage of PicoScenes.


For better understanding, we describe chronos-responder first. A NIC tuned into chronos-responder mode is more like an injection-enabled logger. Once receiving an packet with acknowledgment request, chronos-responder forges a reply packet and injects it into the air immediately (or with scheduled delay). The reply packet can be as short as a several-byte long header with ACK signal on, or a normal packet containing rich hardware information, or even a huge packet encapsulating the entire CSI measurement for the received packet. Even more, in the last scenario, the huge reply packet, which may exceed the maximum allowed length of Wi-Fi packet, is repackaged into smaller ones and injected into the air.

Since chronos-responder is essentially a passive replyer, it is very simple to put NIC into this mode. Tuning NIC phy0 into chronos-responder mode is as simple as the following argument:

--interface phy0 --mode chronos-responder


chronos-initiator, on the other hand, is basically a logging-enabled injector, yet with ACK control. chronos-initiator maintains the injection-ACK protocol using a robust retry mechanism. chronos-initiator has a wide range of transmission control, including injection arguments for both initiator itself and responder side.

The following sample argument activates NIC phy0 into chornos-initiator mode, sending 500 ACK request frames with 1000us interval using the first 2 antennas and MCS=2. The argument also specifies responder-side injection argument, e.g., reply with 1000us delay in 40MHz BW and MCS=3.

--interface phy0 --mode chronos-initiator inj-freq-repeat 500 --inj-delay 1000 --inj-mcs 2 --txchainmask 3 --ack-bw 40 --ack-mcs 3 --ack-delay 1000

A detailed and complete argument description table will come in another post.