⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mt_mac.c

📁 Zigbee2006入门源代码,包括了Zigbee的入门介绍,和源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    *msg++ = param->DisassociateReason;

    /* Security */
    MT_MacSpi2Sec ((ZMacSec_t *)msg, (uint8 *)&param->Sec);

    if ( osal_msg_send( MT_TaskID, (byte *) msgPtr ) == ZSUCCESS )
      return ZMacSuccess;
    else
      return INVALID_TASK;
    }
    else
      return INVALID_TASK;
}

/*********************************************************************
 * @fn          nwk_MTCallbackSubNwkDisassociateCnf
 *
 * @brief       Process the callback subscription for nwk_disassociate_cnf
 *
 * @param       param
 *
 * @return      SUCCESS if message sent succesfully , else N_FAIL
 *********************************************************************/
byte nwk_MTCallbackSubNwkDisassociateCnf( ZMacDisassociateCnf_t *param )
{
  mtOSALSerialData_t  *msgPtr;
  byte                *msg;

  msgPtr = MT_MacMsgAllocate( SPI_CB_NWK_DISASSOCIATE_CNF, SPI_LEN_NWK_DISASSOCIATE_CNF );

  if ( msgPtr )
  {
    msg = msgPtr->msg + DATA_BEGIN;

    /* Status */
    *msg++ = param->hdr.Status;

    /* DeviceAddress */
    *msg++ = param->DeviceAddress.addrMode;

    /* Copy Address */
    MT_MacAddr2Spi( msg, &param->DeviceAddress );
    msg += Z_EXTADDR_LEN;

    /* Pan ID */
    *msg++ = HI_UINT16( param->panID );
    *msg = LO_UINT16( param->panID );

    if ( osal_msg_send( MT_TaskID, (byte *) msgPtr ) == ZSUCCESS )
      return ZMacSuccess;
    else
      return INVALID_TASK;
  }
  else
    return INVALID_TASK;
}

/*********************************************************************
 * @fn          nwk_MTCallbackSubNwkOrphanInd
 *
 * @brief       Process the callback subscription for nwk_orphan_ind
 *
 * @param       pointer of type macnwk_orphan_ind_t
 *
 * @return      SUCCESS if message sent succesfully , else N_FAIL
 *********************************************************************/
byte nwk_MTCallbackSubNwkOrphanInd( ZMacOrphanInd_t *param )
{
  mtOSALSerialData_t  *msgPtr;
  byte                *msg;

  msgPtr = MT_MacMsgAllocate( SPI_CB_NWK_ORPHAN_IND, SPI_LEN_NWK_ORPHAN_IND );

  if ( msgPtr )
  {
    msg = msgPtr->msg + DATA_BEGIN;

    /* Extended address */
    MT_MacRevExtCpy( msg, param->OrphanAddress );
    msg += Z_EXTADDR_LEN;

    /* Security */
    MT_MacSpi2Sec ((ZMacSec_t *)msg, (uint8 *)&param->Sec);

    if ( osal_msg_send( MT_TaskID, (byte *) msgPtr ) == ZSUCCESS )
      return ZMacSuccess;
    else
      return INVALID_TASK;
  }
  else
    return INVALID_TASK;
}

/*********************************************************************
 * @fn          nwk_MTCallbackSubNwkScanCnf
 *
 * @brief       Process the callback subscription for nwk_scan_cnf
 *
 * @param       pointer of type macnwk_scan_cnf_t
 *
 * @return      SUCCESS if message sent succesfully , else N_FAIL
 */
byte nwk_MTCallbackSubNwkScanCnf( ZMacScanCnf_t *param )
{
  mtOSALSerialData_t  *msgPtr;
  byte                *msg;
  byte                resultLen;

  if ( param->ScanType == ZMAC_ED_SCAN )
    resultLen = MT_MAC_ED_SCAN_MAXCHANNELS;
  else if ( param->ScanType == ZMAC_ACTIVE_SCAN )
    resultLen = (param->ResultListSize * sizeof( ZMacPanDesc_t ));
  else if ( param->ScanType == ZMAC_PASSIVE_SCAN )
    resultLen = (param->ResultListSize * sizeof( ZMacPanDesc_t ));
  else if ( param->ScanType == ZMAC_ORPHAN_SCAN )
    resultLen = 0;
  else
    return INVALID_EVENT_ID;

  resultLen = MIN(resultLen, MT_MAC_SCAN_RESULT_LEN_MAX);

  msgPtr = MT_MacMsgAllocate( SPI_CB_NWK_SCAN_CNF, SPI_LEN_NWK_SCAN_CNF + MT_MAC_SCAN_RESULT_LEN_MAX );

  if ( msgPtr )
  {
    msg = msgPtr->msg + DATA_BEGIN;

    /* Status */
    *msg++ = param->hdr.Status;

    /* ED max energy parameter no longer used */
    *msg++ = 0;

    /* Scan type */
    *msg++ = param->ScanType;

    /* Channel page */
    *msg++ = param->ChannelPage;

    /* Unscanned channel list */
    *msg++ = BREAK_UINT32( param->UnscannedChannels, 3 );
    *msg++ = BREAK_UINT32( param->UnscannedChannels, 2 );
    *msg++ = BREAK_UINT32( param->UnscannedChannels, 1 );
    *msg++ = BREAK_UINT32( param->UnscannedChannels, 0 );

    /* Result count */
    *msg++ = param->ResultListSize;

    /* PAN descriptor information */
    osal_memcpy( msg, param->Result.pPanDescriptor, resultLen );

    /* clear extra buffer space at end, if any */
    osal_memset( msg, 0, (MT_MAC_SCAN_RESULT_LEN_MAX - resultLen));

    if ( osal_msg_send( MT_TaskID, (byte *) msgPtr ) == ZSUCCESS )
      return ZMacSuccess;
    else
      return INVALID_TASK;
  }
  else
    return INVALID_TASK;
}

/*********************************************************************
 * @fn          nwk_MTCallbackSubNwkPollCnf
 *
 * @brief       Process the callback subscription for nwk_poll_cnf
 *
 * @param       byte Status
 *
 * @return      SUCCESS if message sent succesfully , else N_FAIL
 */
byte nwk_MTCallbackSubNwkPollCnf( byte Status )
{
  mtOSALSerialData_t  *msgPtr;
  byte                *msg;

  msgPtr = MT_MacMsgAllocate( SPI_CB_NWK_POLL_CNF, SPI_RESP_LEN_MAC_DEFAULT );

  if ( msgPtr )
  {
    msg = msgPtr->msg + DATA_BEGIN;

    //The only data byte is Status
    *msg = Status;

    if ( osal_msg_send( MT_TaskID, (byte *) msgPtr ) == ZSUCCESS )
      return ZMacSuccess;
    else
      return INVALID_TASK;
  }
  else
    return INVALID_TASK;
}

/*********************************************************************
 * @fn          nwk_MTCallbackSubNwkSyncLossInd
 *
 * @brief       Process the callback subscription for nwk_sync_loss_ind
 *
 * @param       byte LossReason
 *
 * @return      SUCCESS if message sent succesfully , else N_FAIL
 */
byte nwk_MTCallbackSubNwkSyncLossInd( ZMacSyncLossInd_t *param )
{
  mtOSALSerialData_t  *msgPtr;
  byte                *msg;

  msgPtr = MT_MacMsgAllocate( SPI_CB_NWK_SYNC_LOSS_IND, SPI_LEN_NWK_SYNC_LOSS_IND );

  if ( msgPtr )
  {
    msg = msgPtr->msg + DATA_BEGIN;

    /*  Status - loss reason */
    *msg++ = param->hdr.Status;

    /* Pan Id */
    *msg++ = HI_UINT16( param->PANId );
    *msg++ = LO_UINT16( param->PANId );

    /* Logical Channel */
    *msg++ = param->LogicalChannel;

    /* Channel Page */
    *msg++ = param->ChannelPage;

    /* Security */
    MT_MacSpi2Sec ((ZMacSec_t *)msg, (uint8 *)&param->Sec);

    if ( osal_msg_send( MT_TaskID, (byte *) msgPtr ) == ZSUCCESS )
      return ZMacSuccess;
    else
      return INVALID_TASK;
  }
  else
    return INVALID_TASK;
}

/*********************************************************************
 * @fn          nwk_MTCallbackSubNwkRxEnableCnf
 *
 * @brief       Process the callback subscription for nwk_Rx_Enable_cnf
 *
 * @param
 *
 * @return      SUCCESS if message sent succesfully , else N_FAIL
 */
byte nwk_MTCallbackSubNwkRxEnableCnf ( byte Status )
{
  mtOSALSerialData_t  *msgPtr;
  byte                *msg;

  msgPtr = MT_MacMsgAllocate( SPI_CB_NWK_RX_ENABLE_CNF, SPI_RESP_LEN_MAC_DEFAULT );

  if ( msgPtr )
  {
    msg = msgPtr->msg + DATA_BEGIN;

    /* The only data byte is Status */
    *msg = Status;

    if ( osal_msg_send( MT_TaskID, (byte *) msgPtr ) == ZSUCCESS )
      return ZMacSuccess;
    else
      return INVALID_TASK;
  }
  else
    return INVALID_TASK;
}

/*********************************************************************
 * @fn          nwk_MTCallbackSubCommStatusInd
 *
 * @brief       Process the callback subscription for
 *              comm_status_ind.
 *
 * @param
 *
 * @return      SUCCESS if message sent succesfully , else N_FAIL
 */
byte nwk_MTCallbackSubCommStatusInd ( ZMacCommStatusInd_t *param )
{
  mtOSALSerialData_t  *msgPtr;
  byte                *msg;

  msgPtr = MT_MacMsgAllocate( SPI_CB_NWK_COMM_STATUS_IND, SPI_LEN_NWK_COMM_STATUS_IND );

  if ( msgPtr )
  {
    msg = msgPtr->msg + DATA_BEGIN;

    /* Status */
    *msg++ = param->hdr.Status;

    /* Source address */
    *msg++ = param->SrcAddress.addrMode;
    MT_MacAddr2Spi( msg, &param->SrcAddress );
    msg += Z_EXTADDR_LEN;

    /* Destination address */
    *msg++ = param->DstAddress.addrMode;
    MT_MacAddr2Spi( msg, &param->DstAddress );
    msg += Z_EXTADDR_LEN;

    /* PAN ID */
    *msg++ = HI_UINT16( param->PANId );
    *msg++ = LO_UINT16( param->PANId );

    /* Reason */
    *msg++ = param->Reason;

    /* Security */
    MT_MacSpi2Sec ((ZMacSec_t *)msg, (uint8 *)&param->Sec);

    if ( osal_msg_send( MT_TaskID, (byte *) msgPtr ) == ZSUCCESS )
      return ZMacSuccess;
    else
      return INVALID_TASK;
  }
  else
    return INVALID_TASK;
}

/*********************************************************************
 * @fn          nwk_MTCallbackSubNwkPurgeCnf
 *
 * @brief       Process the callback subscription for nwk_purge_cnf
 *
 * @param       pointer of type ZMacPurgeCnf_t
 *
 * @return      SUCCESS if message sent succesfully , else N_FAIL
 */
byte nwk_MTCallbackSubNwkPurgeCnf( ZMacPurgeCnf_t *param )
{
  mtOSALSerialData_t  *msgPtr;
  byte                *msg;

  msgPtr = MT_MacMsgAllocate( SPI_CB_NWK_PURGE_CNF, SPI_LEN_NWK_PURGE_CNF );
  if ( msgPtr )
  {
    msg = msgPtr->msg + DATA_BEGIN;

    /* Status */
    *msg = param->hdr.Status;

    /* Handle */
    *msg++ = param->msduHandle;

    if ( osal_msg_send( MT_TaskID, (byte *) msgPtr ) == ZSUCCESS )
      return ZMacSuccess;
    else
      return INVALID_TASK;
  }
  else
    return INVALID_TASK;
}

/*********************************************************************
 * @fn          nwk_MTCallbackSubNwkBeaconNotifyInd
 *
 * @brief       Process the callback subscription for
 *              beacon_notify_ind.
 *
 * @param
 *
 * @return      SUCCESS if message sent succesfully , else N_FAIL
 */
byte nwk_MTCallbackSubNwkBeaconNotifyInd ( ZMacBeaconNotifyInd_t *param )
{
  mtOSALSerialData_t  *msgPtr;
  byte                *msg;

  msgPtr = MT_MacMsgAllocate( SPI_CB_NWK_BEACON_NOTIFY_IND, SPI_LEN_NWK_BEACON_NOTIFY_IND );
  if ( msgPtr )
  {
    msg = msgPtr->msg + DATA_BEGIN;

    /* BSN */
    *msg++ = param->BSN;

    /* Timestamp */
    *msg++ = BREAK_UINT32( param->pPanDesc->TimeStamp, 3 );
    *msg++ = BREAK_UINT32( param->pPanDesc->TimeStamp, 2 );
    *msg++ = BREAK_UINT32( param->pPanDesc->TimeStamp, 1 );
    *msg++ = BREAK_UINT32( param->pPanDesc->TimeStamp, 0 );

    /* Coordinator address mode */
    *msg++ = param->pPanDesc->CoordAddress.addrMode;

    /* Coordinator address */
    MT_MacAddr2Spi( msg, &param->pPanDesc->CoordAddress );
    msg += Z_EXTADDR_LEN;

    /* PAN ID */
    *msg++ = HI_UINT16( param->pPanDesc->CoordPANId );
    *msg++ = LO_UINT16( param->pPanDesc->CoordPANId );

    /* Superframe spec */
    *msg++ = HI_UINT16( param->pPanDesc->SuperframeSpec );
    *msg++ = LO_UINT16( param->pPanDesc->SuperframeSpec );

    /* LogicalChannel */
    *msg++ = param->pPanDesc->LogicalChannel;

    /* GTSPermit */
    *msg++ = param->pPanDesc->GTSPermit;

    /* LinkQuality */
    *msg++ = param->pPanDesc->LinkQuality;

    /* SecurityFailure */
    *msg++ = param->pPanDesc->SecurityFailure;

    /* Security */
    MT_MacSpi2Sec ((ZMacSec_t *)msg, (uint8 *)&param->pPanDesc->Sec);
    msg += ZTEST_DEFAULT_SEC_LEN;

    /* PendingAddrSpec */
    *msg++ = param->PendAddrSpec;

    /* AddrList */
    osal_memset( msg, 0, MT_MAC_PEND_LEN_MAX );
    osal_memcpy( msg, param->AddrList, MIN(MT_MAC_PEND_LEN_MAX, MT_MAC_PEND_LEN(param->PendAddrSpec)) );
    msg += MT_MAC_PEND_LEN_MAX;

    /* SDULength */
    *msg++ = param->sduLength;

    /* SDU */
    osal_memset( msg, 0, MT_MAC_SDU_LEN_MAX );
    osal_memcpy( msg, param->sdu, MIN(MT_MAC_SDU_LEN_MAX, param->sduLength) );
    //msg += MT_MAC_SDU_LEN_MAX;

    if ( osal_msg_send( MT_TaskID, (byte *) msgPtr ) == ZSUCCESS )
      return ZMacSuccess;
    else
      return INVALID_TASK;
  }
  else
    return INVALID_TASK;
}

#endif // MT_MAC_CB_FUNC

/*********************************************************************
*********************************************************************/
#endif // MT_MAC_FUNC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -