void task_resNotifReceive() { OpenQueueEntry_t* msg; // get received packet from openqueue msg = openqueue_resGetReceivedPacket(); if (msg==NULL) { // log the error openserial_printError(COMPONENT_RES,ERR_NO_RECEIVED_PACKET, (errorparameter_t)0, (errorparameter_t)0); // abort return; } // declare it as mine msg->owner = COMPONENT_RES; // indicate reception (to update statistics) neighbors_indicateRx(&(msg->l2_nextORpreviousHop), msg->l1_rssi, &msg->l2_asn); // send the packet up the stack, if it qualifies switch (msg->l2_frameType) { case IEEE154_TYPE_BEACON: case IEEE154_TYPE_DATA: case IEEE154_TYPE_CMD: if (msg->length>0) { // send to upper layer iphc_receive(msg); } else { // free up the RAM openqueue_freePacketBuffer(msg); } break; case IEEE154_TYPE_ACK: default: // free the packet's RAM memory openqueue_freePacketBuffer(msg); // log the error openserial_printError(COMPONENT_RES,ERR_MSG_UNKNOWN_TYPE, (errorparameter_t)msg->l2_frameType, (errorparameter_t)0); break; } }
void task_sixtopNotifReceive() { OpenQueueEntry_t* msg; uint16_t lenIE; // get received packet from openqueue msg = openqueue_sixtopGetReceivedPacket(); if (msg==NULL) { openserial_printCritical( COMPONENT_SIXTOP, ERR_NO_RECEIVED_PACKET, (errorparameter_t)0, (errorparameter_t)0 ); return; } // take ownership msg->owner = COMPONENT_SIXTOP; // process the header IEs lenIE=0; if( msg->l2_frameType==IEEE154_TYPE_DATA && msg->l2_IEListPresent==IEEE154_IELIST_YES && sixtop_processIEs(msg, &lenIE) == FALSE ) { // free the packet's RAM memory openqueue_freePacketBuffer(msg); //log error return; } // toss the header IEs packetfunctions_tossHeader(msg,lenIE); // update neighbor statistics neighbors_indicateRx( &(msg->l2_nextORpreviousHop), msg->l1_rssi, &msg->l2_asn, msg->l2_joinPriorityPresent, msg->l2_joinPriority ); // reset it to avoid race conditions with this var. msg->l2_joinPriorityPresent = FALSE; // send the packet up the stack, if it qualifies switch (msg->l2_frameType) { case IEEE154_TYPE_BEACON: case IEEE154_TYPE_DATA: case IEEE154_TYPE_CMD: if (msg->length>0) { // send to upper layer iphc_receive(msg); } else { // free up the RAM openqueue_freePacketBuffer(msg); } break; case IEEE154_TYPE_ACK: default: // free the packet's RAM memory openqueue_freePacketBuffer(msg); // log the error openserial_printError( COMPONENT_SIXTOP, ERR_MSG_UNKNOWN_TYPE, (errorparameter_t)msg->l2_frameType, (errorparameter_t)0 ); break; } }