]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/lib/mac/tkn154/AssociateP.nc
- moved promiscuous mode into separate component
[tinyos-2.x.git] / tos / lib / mac / tkn154 / AssociateP.nc
index fd8f34455cc1285880974019154ea3384fbf5df7..c420f3201700c61f53f21b63018705e22e5a9d54 100644 (file)
@@ -42,7 +42,6 @@ module AssociateP
   {
     interface Init;
     interface MLME_ASSOCIATE;
-    interface MLME_DISASSOCIATE;
     interface MLME_COMM_STATUS;
   }
   uses
@@ -52,14 +51,6 @@ module AssociateP
     interface FrameExtracted as AssociationResponseExtracted;
     interface FrameTx as AssociationResponseTx;
 
-    interface FrameTx as DisassociationIndirectTx;
-    interface FrameTx as DisassociationDirectTx;
-    interface FrameTx as DisassociationToCoord;
-
-    interface FrameRx as DisassociationDirectRxFromCoord;
-    interface FrameExtracted as DisassociationExtractedFromCoord;
-    interface FrameRx as DisassociationRxFromDevice;
-
     interface DataRequest;
     interface Timer<TSymbolIEEE802154> as ResponseTimeout;
     interface Pool<ieee154_txframe_t> as TxFramePool;
@@ -68,7 +59,6 @@ module AssociateP
     interface MLME_SET;
     interface FrameUtility;
     interface IEEE154Frame as Frame;
-    interface Leds;
     interface Get<uint64_t> as LocalExtendedAddress;
     interface Ieee802154Debug as Debug;
   }
@@ -79,23 +69,19 @@ implementation
     S_IDLE = 0xFF,
   };
   uint8_t m_payloadAssocRequest[2];
-  uint8_t m_payloadDisassocRequest[2];
   uint8_t m_payloadAssocResponse[MAX_PENDING_ASSOC_RESPONSES][4];
   uint8_t m_coordAddrMode;
   uint8_t m_assocRespStatus;
   uint16_t m_shortAddress;
   bool m_associationOngoing;
-  bool m_disAssociationOngoing;
 
   command error_t Init.init()
   {
     uint8_t i;
     call ResponseTimeout.stop();
     m_payloadAssocRequest[0] = S_IDLE;
-    m_payloadDisassocRequest[0] = S_IDLE;
     m_coordAddrMode = 0;
     m_associationOngoing = FALSE;
-    m_disAssociationOngoing = FALSE;
     for (i=0; i<MAX_PENDING_ASSOC_RESPONSES; i++)
       m_payloadAssocResponse[i][0] = S_IDLE;
     return SUCCESS;
@@ -302,154 +288,8 @@ implementation
                           status, 0);
   }
 
-
-/* ------------------- MLME_DISASSOCIATE (initiating) ------------------- */
-
-  command ieee154_status_t MLME_DISASSOCIATE.request  (
-                          uint8_t DeviceAddrMode,
-                          uint16_t DevicePANID,
-                          ieee154_address_t DeviceAddress,
-                          ieee154_disassociation_reason_t DisassociateReason,
-                          bool TxIndirect,
-                          ieee154_security_t *security
-                        )
-  {
-    ieee154_status_t status = IEEE154_SUCCESS;
-    ieee154_txframe_t *txFrame=0;
-    ieee154_txcontrol_t *txControl=0;
-    ieee154_address_t srcAddress;
-
-    if (security && security->SecurityLevel)
-      status = IEEE154_UNSUPPORTED_SECURITY;
-    else if (call MLME_GET.macPANId() != DevicePANID || 
-        (DeviceAddrMode != ADDR_MODE_SHORT_ADDRESS && DeviceAddrMode != ADDR_MODE_EXTENDED_ADDRESS))
-      status = IEEE154_INVALID_PARAMETER;
-    else if (m_disAssociationOngoing || !(txFrame = call TxFramePool.get()))
-      status = IEEE154_TRANSACTION_OVERFLOW;
-    else if (!(txControl = call TxControlPool.get())){
-      call TxFramePool.put(txFrame);
-      status = IEEE154_TRANSACTION_OVERFLOW;
-    } 
-    if (status == IEEE154_SUCCESS){
-      txFrame->header = &txControl->header;
-      txFrame->metadata = &txControl->metadata;
-      srcAddress.extendedAddress = call LocalExtendedAddress.get();
-      txFrame->headerLen = call FrameUtility.writeHeader(
-          txFrame->header->mhr,
-          DeviceAddrMode,
-          call MLME_GET.macPANId(),
-          &DeviceAddress,
-          ADDR_MODE_EXTENDED_ADDRESS,
-          call MLME_GET.macPANId(),
-          &srcAddress,
-          TRUE);
-      txFrame->header->mhr[MHR_INDEX_FC1] = FC1_ACK_REQUEST | FC1_FRAMETYPE_CMD | FC1_PAN_ID_COMPRESSION;
-      txFrame->header->mhr[MHR_INDEX_FC2] = FC2_SRC_MODE_EXTENDED |
-        (DeviceAddrMode == ADDR_MODE_SHORT_ADDRESS ? FC2_DEST_MODE_SHORT : FC2_DEST_MODE_EXTENDED);
-      m_payloadDisassocRequest[0] = CMD_FRAME_DISASSOCIATION_NOTIFICATION;
-      m_payloadDisassocRequest[1] = DisassociateReason;
-      txFrame->payload = m_payloadDisassocRequest;
-      txFrame->payloadLen = 2;
-      m_disAssociationOngoing = TRUE;
-      if ((DeviceAddrMode == ADDR_MODE_SHORT_ADDRESS &&
-            DeviceAddress.shortAddress == call MLME_GET.macCoordShortAddress()) ||
-          (DeviceAddrMode == ADDR_MODE_EXTENDED_ADDRESS &&
-           DeviceAddress.extendedAddress == call MLME_GET.macCoordExtendedAddress())){
-        status = call DisassociationToCoord.transmit(txFrame);
-      } else if (TxIndirect) {
-        status = call DisassociationIndirectTx.transmit(txFrame);
-      } else {
-        status = call DisassociationDirectTx.transmit(txFrame);
-      }
-      if (status != IEEE154_SUCCESS){
-        m_disAssociationOngoing = FALSE;
-        call TxFramePool.put(txFrame);
-        call TxControlPool.put(txControl);
-      }
-    }
-    call Debug.log(LEVEL_INFO, DISSASSOCIATE_REQUEST, status, 0, 0);
-    return status;
-  }
-
-  event void DisassociationToCoord.transmitDone(ieee154_txframe_t *data, ieee154_status_t status) 
-  { 
-    // transmitted a disassociation notification to our coordinator
-    uint8_t *mhr = MHR(data), srcAddrOffset = 7;
-    uint8_t DeviceAddrMode = (mhr[MHR_INDEX_FC2] & FC2_SRC_MODE_MASK) >> FC2_SRC_MODE_OFFSET;
-    uint16_t DevicePANID = *((nxle_uint16_t*) (&(mhr[MHR_INDEX_ADDRESS])));
-    ieee154_address_t DeviceAddress;
-    if ((mhr[MHR_INDEX_FC2] & FC2_DEST_MODE_MASK) == FC2_DEST_MODE_EXTENDED)
-      srcAddrOffset += 6;
-    call FrameUtility.convertToNative(&DeviceAddress.extendedAddress, &mhr[srcAddrOffset]);
-    call TxControlPool.put((ieee154_txcontrol_t*) ((uint8_t*) data->header - offsetof(ieee154_txcontrol_t, header)));
-    call TxFramePool.put(data);
-    call Debug.log(LEVEL_INFO, DISSASSOCIATE_TXDONE, status, 2, 0);
-    m_disAssociationOngoing = FALSE;
-    signal MLME_DISASSOCIATE.confirm(status, DeviceAddrMode, DevicePANID, DeviceAddress);
-  }
-
-  event void DisassociationIndirectTx.transmitDone(ieee154_txframe_t *data, ieee154_status_t status) 
-  {
-    signal DisassociationDirectTx.transmitDone(data, status);
-  }
-
-  event void DisassociationDirectTx.transmitDone(ieee154_txframe_t *data, ieee154_status_t status) 
-  { 
-    // transmitted a disassociation notification to a device
-    uint8_t *mhr = MHR(data), dstAddrOffset = 5;
-    uint8_t DeviceAddrMode = (mhr[1] & FC2_DEST_MODE_MASK) >> FC2_DEST_MODE_OFFSET;
-    uint16_t DevicePANID = *((nxle_uint16_t*) (&(mhr[MHR_INDEX_ADDRESS])));
-    ieee154_address_t DeviceAddress;
-    call FrameUtility.convertToNative(&DeviceAddress.extendedAddress, &mhr[dstAddrOffset]);
-    call Debug.log(LEVEL_INFO, DISSASSOCIATE_TXDONE, status, 1, 0);
-    call TxControlPool.put((ieee154_txcontrol_t*) ((uint8_t*) data->header - offsetof(ieee154_txcontrol_t, header)));
-    call TxFramePool.put(data);
-    call Debug.log(LEVEL_INFO, DISSASSOCIATE_TXDONE, status, 2, 0);
-    m_disAssociationOngoing = FALSE;
-    signal MLME_DISASSOCIATE.confirm(status, DeviceAddrMode, DevicePANID, DeviceAddress);
-  }
-
-/* ------------------- MLME_DISASSOCIATE (receiving) ------------------- */
-
-  event message_t* DisassociationDirectRxFromCoord.received(message_t* frame)
-  {
-    // received a disassociation notification from the coordinator (direct tx)
-    ieee154_address_t address;
-    address.extendedAddress = call LocalExtendedAddress.get();
-    signal MLME_DISASSOCIATE.indication(address.extendedAddress, frame->data[1], NULL);
-    return frame;
-  }
-
-  event message_t* DisassociationExtractedFromCoord.received(message_t* frame, ieee154_txframe_t *txFrame)
-  {
-    // received a disassociation notification from the coordinator (indirect transmission)
-    return signal DisassociationDirectRxFromCoord.received(frame);
-  }
-
-  event message_t* DisassociationRxFromDevice.received(message_t* frame)
-  {
-    // received a disassociation notification from the device
-    ieee154_address_t address;
-    call Debug.log(LEVEL_INFO, DISSASSOCIATE_RX, 0, 0, 0);
-    if (call Frame.getSrcAddrMode(frame) == ADDR_MODE_EXTENDED_ADDRESS && 
-        call Frame.getSrcAddr(frame, &address) == SUCCESS)
-      signal MLME_DISASSOCIATE.indication(address.extendedAddress, frame->data[1], NULL);
-    return frame;
-  }
-
 /* ------------------- Defaults ------------------- */
 
-  default event void MLME_DISASSOCIATE.indication (
-                          uint64_t DeviceAddress,
-                          ieee154_disassociation_reason_t DisassociateReason,
-                          ieee154_security_t *security
-                        ){}
-  default event void MLME_DISASSOCIATE.confirm    (
-                          ieee154_status_t status,
-                          uint8_t DeviceAddrMode,
-                          uint16_t DevicePANID,
-                          ieee154_address_t DeviceAddress
-                        ){}
   default event void MLME_ASSOCIATE.indication (
                           uint64_t DeviceAddress,
                           ieee154_CapabilityInformation_t CapabilityInformation,