Hi everyone,

I'm using a queue to buffer received packets and send the head of queue
periodically. But some packets from the queue are different from what they
were when entering the queue. For instance, if you put packet with sequence
number 1 into the queue and pop it out later, you may find its sequence
number changes to 2! Carefully I list my related code below:

 typedef nx_struct queueElement{
     nx_uint8_t seqNum;
     nx_uint8_t repID;
 }queueElement;


  uses interface Queue<queueElement*>;
  uses interface Pool<queueElement> as heapPool;

  event message_t* Receive.receive(message_t* bufPtr, void* payload, uint8_t
len)
{
    radioPkt = (RadioMsg*)(call Packet.getPayload(bufPtr,
sizeof(RadioMsg)));

    cache_seqNum = radioPkt -> seqNum;
    cache_repID = radioPkt->repID;
..........................................
            queueEle = call heapPool.get();
            if (queueEle == NULL)                //no space available
            {        return bufPtr;     }

           //enqueue
           queueEle->seqNum = cache_seqNum;
           queueEle->repID = cache_repID;
           if(call Queue.enqueue(queueEle)==SUCCESS)
           {
                dbg("DEBUG", "enqueue successful,%d,%d \n ",call
Queue.size(),QUEUE_SIZE);
           }
.....
 }

  event void ForwardRepTimer.fired()
{
        if(call Queue.empty()==FALSE)       //queue is not empty
        {
            //dequeue
            queueEle = call Queue.head();
            qeIn = call heapPool.get();
            while (qeIn == NULL)                //no space available,
recycle oldest cache elements
            {
                qeOut = call Cache.dequeue();
                if (call heapPool.put(qeOut) != SUCCESS)
                    dbg("DEBUG", "Put pool error");
                qeIn = call heapPool.get();
            }


            radioPkt = (RadioMsg*)(call Packet.getPayload(&forwardMsg,
sizeof(RadioMsg)));
            radioPkt->nodeID = TOS_NODE_ID;
            radioPkt->seqNum = queueEle->seqNum;
            radioPkt->repID = queueEle->repID;
}


-- 
Xiaohui Liu
Ph. D. Candidate
Wayne State University
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to