Hi everyone,

I tried to understand how Tossim 2.x determines whether a node receives
a packet and therefore tried to understand the code in
tos/lib/tossim/CpmModelC.nc. I need to understand it in order to compare
our theoretical assumptions and models to the "reality" in Tossim.
I think I do understand the code in general but I have some questions
regarding the meaning of certain variables and the way some things are
accomplished. I realize that Hyungjune Lee, Philip Levis are the authors
of CpmModel nevertheless the discussion might be of interest to more
people.

I was primarily interested in how a message sent by a node A is received
by another node B and what might happen to it on the way. 
First I will describe what I think happens, then I will pose my
questions:

The method 
command void Model.putOnAirTo(int dest, message_t* msg, bool ack,
sim_time_t endTime, double power, double reversePower) is used by a node
to send packets over the air. putOnAirTo itself calls sim_put_gain for
every node, for which a link gain has been defined via python oder the C
++ interface.
sim_put_gain creates a reception event via
enqueue_receive_event(prevNode, endTime, msg, receive, power,
reversePower); 


enqueue_receive_event does the following:
1. Check whether the receiving node is off
2. Check whether the power of the message in question, reduced by the
link gain is still loud enough in relation to the noise of all other
messages received at the respective node and the calculated CPM value.
3. Check whether the receiving node is already receiving a message

if either of 1/2/3 is true the current message is marked as lost.

Then, independently of 1/2/3, all messages received so far are marked as
lost if the current message drowns their signal strength. 

In the end (of enqueue_receive_event) the message is inserted on top of
the list of received messages and a reception event is generated and
inserted for this message and the receiving node. Note that this is
again done independently of the message being lost or not.

In the end,the simulator calls the sim_gain_receive_handle method with
the previously generated reception event as argument.

sim_gain_receive_handle removes the corresponding message from the list
of received messages, checks again whether the message could have been
understood through the noise of CPM and other incoming messages and
marks it as lost if it cannot.

Finally if the message has not been marked as lost it is handed up to
the next network layer via "signal Model.receive(mine->msg)" and the
message memory is freed.


Ok, when I started to write this mail I had 3 questions that I could
answer myself, so here is the remaining one:

In sim_gain_receive_handle every message strength is again checked
against the noise generated by all other messages because the message
has to be loud and clear through all the time it takes to receive it.
But is this necessary if the handled message is already marked as lost ?



Marek Jawurek





_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to