From: janhauer Date: Tue, 2 Jun 2009 08:40:12 +0000 (+0000) Subject: Fixed some issues with the orphan scan / coordinator realignment - this was reported... X-Git-Tag: rc_6_tinyos_2_1_1~375 X-Git-Url: https://oss.titaniummirror.com/gitweb/?p=tinyos-2.x.git;a=commitdiff_plain;h=bc0770119bb195f1dc3785bb3b7816b205a1b976 Fixed some issues with the orphan scan / coordinator realignment - this was reported/suggested by Daniel Pineiro. --- diff --git a/tos/lib/mac/tkn154/CoordRealignmentP.nc b/tos/lib/mac/tkn154/CoordRealignmentP.nc index 3287adb6..03563636 100644 --- a/tos/lib/mac/tkn154/CoordRealignmentP.nc +++ b/tos/lib/mac/tkn154/CoordRealignmentP.nc @@ -114,7 +114,7 @@ implementation dstAddress.extendedAddress = OrphanAddress; if (!AssociatedMember) txStatus = IEEE154_SUCCESS; - else if (m_busy || (txFrame = newRealignmentFrame(ORPHAN_RESPONSE, &dstAddress)) != NULL) + else if (m_busy || (txFrame = newRealignmentFrame(ORPHAN_RESPONSE, &dstAddress)) == NULL) txStatus = IEEE154_TRANSACTION_OVERFLOW; else { m_busy = TRUE; diff --git a/tos/lib/mac/tkn154/ScanP.nc b/tos/lib/mac/tkn154/ScanP.nc index 4fb18aca..f8f44f77 100644 --- a/tos/lib/mac/tkn154/ScanP.nc +++ b/tos/lib/mac/tkn154/ScanP.nc @@ -219,14 +219,14 @@ implementation break; case ORPHAN_SCAN: // orphan notification frame - m_scanDuration = call MLME_GET.macResponseWaitTime(); + m_scanDuration = call MLME_GET.macResponseWaitTime() * IEEE154_aBaseSuperframeDuration; m_txFrame->header->mhr[MHR_INDEX_FC1] = FC1_FRAMETYPE_CMD | FC1_PAN_ID_COMPRESSION; m_txFrame->header->mhr[MHR_INDEX_FC2] = FC2_SRC_MODE_EXTENDED | FC2_DEST_MODE_SHORT; m_txFrame->header->mhr[MHR_INDEX_SEQNO] = dsn; call MLME_SET.macDSN(dsn+1); for (i=0; i<4; i++) // broadcast dest PAN ID + broadcast dest addr m_txFrame->header->mhr[MHR_INDEX_ADDRESS + i] = 0xFF; - call FrameUtility.copyLocalExtendedAddressLE((uint8_t*) &(m_txFrame->header[MHR_INDEX_ADDRESS + i])); + call FrameUtility.copyLocalExtendedAddressLE((uint8_t*) &(m_txFrame->header->mhr[MHR_INDEX_ADDRESS + i])); m_txFrame->headerLen = 15; m_payload[0] = CMD_FRAME_ORPHAN_NOTIFICATION; m_txFrame->payloadLen = 1; @@ -347,9 +347,18 @@ implementation return frame; if (m_scanType == ORPHAN_SCAN) { + uint8_t *payload = call Frame.getPayload(frame); if (!m_resultIndex) if ((MHR(frame)[0] & FC1_FRAMETYPE_MASK) == FC1_FRAMETYPE_CMD && - ((uint8_t*)call Frame.getPayload(frame))[0] == CMD_FRAME_COORDINATOR_REALIGNMENT) { + payload[0] == CMD_FRAME_COORDINATOR_REALIGNMENT) { + + // Sect. 7.5.4.3: "the device shall update its MAC PIB with the PAN + // information contained in the coordinator realignment command" + + call MLME_SET.macPANId( *((nxle_uint16_t*) &payload[1]) ); + call MLME_SET.macCoordShortAddress( *((nxle_uint16_t*) &payload[3]) ); + call MLME_SET.phyCurrentChannel( *((nxle_uint16_t*) &payload[5]) ); + call MLME_SET.macShortAddress( *((nxle_uint16_t*) &payload[6]) ); m_resultIndex++; dbg_serial("ScanP", "Received coordinator realignment frame.\n"); m_terminateScan = TRUE;