comparison LossyCom.c @ 2:b6dd31dbab8c

Receiving only messages for the current endpoint
author Merten Sach <msach@mailbox.tu-berlin.de>
date Mon, 12 Mar 2012 18:35:10 +0100
parents 826448e34e80
children 5c0fb7c519d7
comparison
equal deleted inserted replaced
1:618d1c003877 2:9863abc75bad
82 //write msg to central exchange 82 //write msg to central exchange
83 localEndpoint->centralExchange->outboxArray[localEndpoint->endpointID] = 83 localEndpoint->centralExchange->outboxArray[localEndpoint->endpointID] =
84 msgDraft; 84 msgDraft;
85 85
86 localEndpoint->centralExchange->triggerCounter = triggerCopy; 86 localEndpoint->centralExchange->triggerCounter = triggerCopy;
87 //printf("send updated trigger to %d\n", triggerCopy);
87 } 88 }
88 89
89 void inline lossyCom__receiveMsg(lossyCom__endpoint_t* localEndpoint) 90 void inline lossyCom__receiveMsg(lossyCom__endpoint_t* localEndpoint)
90 { 91 {
91 uint16_t currentTriggerCopy; 92 uint16_t currentTriggerCopy;
92 lossyCom__endpointID_t senderEndpointID; 93 lossyCom__endpointID_t senderEndpointID;
94 lossyCom__endpointID_t receiverID;
93 lossyCom__msg_t msgCopy; 95 lossyCom__msg_t msgCopy;
94 uint16_t msgTrigger; 96 uint16_t msgTrigger;
95 lossyCom__msgBody_t msgBody; 97 lossyCom__msgBody_t msgBody;
96 98
97 senderEndpointID = 0; 99 senderEndpointID = 0;
98 currentTriggerCopy = localEndpoint->centralExchange->triggerCounter; 100 currentTriggerCopy = localEndpoint->centralExchange->triggerCounter;
99 101
100 //new message arrived if trigger counter is higher than the last time read 102 //new message arrived if trigger counter is higher than the last time read
101 while(senderEndpointID < localEndpoint->centralExchange->numEndpoints) 103 if(currentTriggerCopy > localEndpoint->localTriggerCopy)
102 { 104 {
103 if(senderEndpointID != localEndpoint->endpointID) 105 while(senderEndpointID < localEndpoint->centralExchange->numEndpoints)
104 { 106 {
105 msgCopy = localEndpoint->centralExchange->outboxArray[senderEndpointID]; 107 if(senderEndpointID != localEndpoint->endpointID)
106 msgTrigger = 0xFFFF & (msgCopy >> TRIGGER_SHIFT);
107 // check if the message is new (msg trigger > archived trigger)
108 // and already valid (msgTrigger <= currentTriggerCopy)
109 if(msgTrigger > localEndpoint->localTriggerCopy &&
110 msgTrigger <= currentTriggerCopy)
111 { 108 {
112 //let the message handler parse the message 109 msgCopy = localEndpoint->centralExchange->outboxArray[senderEndpointID];
113 msgBody = 0xFFFFFFFF & msgCopy; 110 msgTrigger = 0xFFFF & (msgCopy >> TRIGGER_SHIFT);
114 (*(localEndpoint->msgHandler))(senderEndpointID, 111 // check if the message is new (msg trigger > archived trigger)
115 msgBody, 112 // and already valid (msgTrigger <= currentTriggerCopy)
116 localEndpoint->msgHandlerData); 113 if(msgTrigger > localEndpoint->localTriggerCopy &&
114 msgTrigger <= currentTriggerCopy)
115 {
116 //printf("receive search until %d \n", currentTriggerCopy);
117 //let the message handler parse the message
118 msgBody = 0xFFFFFFFF & msgCopy;
119 receiverID = 0xFFFF & (msgCopy >> ENDPOINT_ID_SHIFT);
120 //only receive broadcast and p2p for own receiverID
121 if(receiverID == BROADCAST_ID ||
122 receiverID == localEndpoint->endpointID)
123 {
124 (*(localEndpoint->msgHandler))(senderEndpointID,
125 msgBody,
126 localEndpoint->msgHandlerData);
127 }
128 }
117 } 129 }
130 senderEndpointID++;
118 } 131 }
119 senderEndpointID++;
120 } 132 }
121 //save last parsed msg 133 //save last TriggerCounter of last parsed Msg
122 localEndpoint->localTriggerCopy = currentTriggerCopy; 134 localEndpoint->localTriggerCopy = currentTriggerCopy;
123 } 135 }