37
RSSI (received signal strength indicator) measures the strength (power) of the signal for the packet.
It ranges from +60 (strong) to -60 (weak). To convert it to decibels relative to 1 mW (= 0 dBm)
subtract 45 from it, e.g. for an RSSI of -20 the RF input power is approximately -65 dBm.
CORR measures the average correlation value of the first 4 bytes of the packet header. A
correlation value of ~110 indicates a maximum quality packet while a value of ~50 is typically the
lowest quality packet detectable by the SPOT’s receiver.
Link Quality Indication (LQI) is a characterization of the quality of a received packet. Its value is
computed from the CORR, correlation value. The LQI ranges from 0 (bad) to 255 (good).
These values are obtained using:
myRadiogram.getRssi();
myRadiogram.getCorr();
myRadiogram.getLinkQuality();
Monitoring radio activity
It is sometimes useful to monitor radio activity, for example when investigating errors. Two sets of
facilities are provided. One allows the last ten radio packets received to be displayed on demand,
along with information about the state of the radio chip at the time the packets were read. The
second facility provides a count of key errors in the MAC layer of the radio stack.
To view the last ten radio packets, do
IProprietaryRadio propRadio = RadioFactory.getIProprietaryRadio();
propRadio.setRecordHistory(true);
… // radio activity including receiving packets
propRadio.dumpHistory(); // prints info to system.out
To see counts of MAC layer errors, do
IProprietaryRadio propRadio = RadioFactory.getIProprietaryRadio();
propRadio.resetErrorCounters(); // set error counters to zero
… // radio activity provoking errors
System.out.println("RX overflows since reset " + propRadio.getRxOverflow());
System.out.println("CRC errors since reset " + propRadio.getCrcError());
System.out.println("Channel busy stopped TX " + propRadio.getTxMissed());
System.out.println("Short packets received " + propRadio.geShortPacket());
Conserving power using deep sleep mode
Shallow Sleep
A thread is idle if it is executing
Thread.sleep()
, blocked on a synchronization primitive or waiting
for an interrupt from the hardware. Whenever all threads are idle the Sun SPOT drops into a power
saving mode (“shallow sleep”) to reduce power consumption and extend battery life. Decisions
about when to shallow sleep are taken by the Java thread scheduler inside the VM. This is
transparent to applications – no special work on the part of the programmer is required to take
advantage of it.
While considerable power can be saved during shallow sleep, it is still necessary to power much of
the Sun SPOT hardware: