# HG changeset patch # User Merten Sach # Date 1331573710 -3600 # Node ID b6dd31dbab8ce315c2755214dd3c3a07161b9a99 # Parent 826448e34e80a5396d5e98bc336219c291d2618a Receiving only messages for the current endpoint diff -r 826448e34e80 -r b6dd31dbab8c LossyCom.c --- a/LossyCom.c Thu Mar 08 20:06:00 2012 +0100 +++ b/LossyCom.c Mon Mar 12 18:35:10 2012 +0100 @@ -84,12 +84,14 @@ msgDraft; localEndpoint->centralExchange->triggerCounter = triggerCopy; + //printf("send updated trigger to %d\n", triggerCopy); } void inline lossyCom__receiveMsg(lossyCom__endpoint_t* localEndpoint) { uint16_t currentTriggerCopy; lossyCom__endpointID_t senderEndpointID; + lossyCom__endpointID_t receiverID; lossyCom__msg_t msgCopy; uint16_t msgTrigger; lossyCom__msgBody_t msgBody; @@ -98,26 +100,36 @@ currentTriggerCopy = localEndpoint->centralExchange->triggerCounter; //new message arrived if trigger counter is higher than the last time read - while(senderEndpointID < localEndpoint->centralExchange->numEndpoints) + if(currentTriggerCopy > localEndpoint->localTriggerCopy) { - if(senderEndpointID != localEndpoint->endpointID) + while(senderEndpointID < localEndpoint->centralExchange->numEndpoints) { - msgCopy = localEndpoint->centralExchange->outboxArray[senderEndpointID]; - msgTrigger = 0xFFFF & (msgCopy >> TRIGGER_SHIFT); - // check if the message is new (msg trigger > archived trigger) - // and already valid (msgTrigger <= currentTriggerCopy) - if(msgTrigger > localEndpoint->localTriggerCopy && - msgTrigger <= currentTriggerCopy) + if(senderEndpointID != localEndpoint->endpointID) { - //let the message handler parse the message - msgBody = 0xFFFFFFFF & msgCopy; - (*(localEndpoint->msgHandler))(senderEndpointID, - msgBody, - localEndpoint->msgHandlerData); + msgCopy = localEndpoint->centralExchange->outboxArray[senderEndpointID]; + msgTrigger = 0xFFFF & (msgCopy >> TRIGGER_SHIFT); + // check if the message is new (msg trigger > archived trigger) + // and already valid (msgTrigger <= currentTriggerCopy) + if(msgTrigger > localEndpoint->localTriggerCopy && + msgTrigger <= currentTriggerCopy) + { + //printf("receive search until %d \n", currentTriggerCopy); + //let the message handler parse the message + msgBody = 0xFFFFFFFF & msgCopy; + receiverID = 0xFFFF & (msgCopy >> ENDPOINT_ID_SHIFT); + //only receive broadcast and p2p for own receiverID + if(receiverID == BROADCAST_ID || + receiverID == localEndpoint->endpointID) + { + (*(localEndpoint->msgHandler))(senderEndpointID, + msgBody, + localEndpoint->msgHandlerData); + } + } } + senderEndpointID++; } - senderEndpointID++; } - //save last parsed msg + //save last TriggerCounter of last parsed Msg localEndpoint->localTriggerCopy = currentTriggerCopy; } \ No newline at end of file diff -r 826448e34e80 -r b6dd31dbab8c LossyCom.h --- a/LossyCom.h Thu Mar 08 20:06:00 2012 +0100 +++ b/LossyCom.h Mon Mar 12 18:35:10 2012 +0100 @@ -57,7 +57,7 @@ * Central communication structure. */ typedef struct{ - uint16_t triggerCounter; + volatile uint16_t triggerCounter; uint16_t numEndpoints; lossyCom__msg_t* outboxArray; }lossyCom__exchange_t;