What steps will reproduce the problem?
1. To see the issue add this LED toggle line (for TelosB) to the startRadio
task in PowerCycleP.nc
uint8_t startRadioCount=0;
task void startRadio() {
if (startRadioCount++ == 0) P5OUT ^= BIT5; // toggle green LED every 256 calls
...
}
2. At this point, load apps/tests/TestNetworkLpl onto a TelosB mote. Note that
the green LED toggles rapidly for 512ms (one sleep interval) at boot up. The
next steps show how it can be put into a permanent spin by turning off low
power listening during this interval.
3. Change the TestNetworkLplC timer to start between 100 and 600 ms.
In TestNetworkLplC.nc line 78.
//call Timer.startOneShot(call Random.rand32() % SEND_INTERVAL);
call Timer.startOneShot(100);
4. Set the local wakeup interval to 0 when the timer fires.
In TestNetworkLplC.nc line 121
event void Timer.fired() {
uint32_t nextInt;
call LowPowerListening.setLocalWakeupInterval(0);
...
}
What is the expected output? What do you see instead?
The green LED, indicating repeated calls to the startRadio task, should not
toggle repeatedly. After step 2 it rapidly toggles for 512ms. After step 4, it
rapidly toggles permanently.
What version of the product are you using? On what operating system?
2.1.1 and svn
Please provide any additional information below.
startRadio re-posts itself under the following condition:
if(call SubControl.start() != SUCCESS) {
post startRadio();
}
However, between about 100 and 600 ms SubControl.start() returns EALREADY,
because the radio has already been started. Setting the sleep interval to 0
causes the radio to always be on, so SubControl.start() will always return
EALREADY or EBUSY.
Original issue reported on code.google.com by matthew....@gmail.com on 9 Aug 2011 at 11:58
Original issue reported on code.google.com by
matthew....@gmail.com
on 9 Aug 2011 at 11:58