📄 mt_mac.c
字号:
*msg++ = param->DisassociateReason;
/* Security */
MT_MacSpi2Sec ((ZMacSec_t *)msg, (uint8 *)¶m->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, ¶m->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 *)¶m->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 *)¶m->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, ¶m->SrcAddress );
msg += Z_EXTADDR_LEN;
/* Destination address */
*msg++ = param->DstAddress.addrMode;
MT_MacAddr2Spi( msg, ¶m->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 *)¶m->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, ¶m->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 *)¶m->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 + -