Hi:
I've come across a strange missing *startDone()* problem after I receive *
SUCCESS* after calling *CC2420ActiveMessageC.SplitControl.start()* to start
the radio. This contradicts the documentation which states that the system
MUST signal a *startDone() *if it returns *SUCCESS* in *start(). *Then I
looked into CC2420CsmaP.nc which is the implementation of CC2420 control and
found the following code snippet:
/***************** SplitControl Commands ****************/
command error_t SplitControl.start() {
if(call SplitControlState.requestState(S_STARTING) == SUCCESS) {
call CC2420Power.startVReg();
return SUCCESS;
} else if(call SplitControlState.isState(S_STARTED)) {
return EALREADY;
} else if(call SplitControlState.isState(S_STARTING)) {
return SUCCESS;
}
return EBUSY;
}
If the control flow falls into the first if statement, a
*startDone_task() *will
be posted later on. However, if the radio is somehow already in the state of
S_STARTING, as in the third if statement, the system will return SUCCESS
without posting the task *startDone_task() *which will signal the *
startDone()* event. I guess the assumption here is that someone else's
earlier call to *start()* must have triggered *startDone_task()* to be
posted and as a result the callee will still receive *startDone()*. I guess
this assumption is somehow INCORRECT.
Has anyone run into such problems before? Thank you.
Best regards,
-- Wenjie Zeng
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help