ZMacInit( );调用ZigBee协议栈中的MAC层API用于初始化MAC层。
uint8 ZMacInit( void )
{
uint8 stat;
#if defined( ZCL_KEY_ESTABLISH )
/* Set the callback function for 16 byte random seed */
&nbsnbsp; MAC_SetRandomSeedCB( SSP_StoreRandomSeedNV);
#endif
MAC_Init( ); //初始化MAC子系统,该函数需要在软件系统开始并且在MAC 的API函数被使用之前进行调用
MAC_InitDevice();//初始化MAC与网络进行连接。该函数用于初始化设备为RFD。需要在数据实体或管理实体API调用之前执行
#if !defined NONWK
if ( ZG_BUILD_RTR_TYPE )
{
MAC_InitCoord( );//初始化MAC,作为协调器进行操作。该函数用于初始化设备为FFD。
}
#endif
// 初始化MAC
stat = ZMacReset( TRUE );
// Turn off interrupts
osal_int_disable( INTS_ALL );
return ( stat );
}
关键在于zMacReset用于复位MAC,实现为:uint8 ZMacReset( bool SetDefaultPIB )
{
byte stat;
byte value;
stat = MAC_MlmeResetReq( SetDefaultPIB );//复位MAC层,函数在系统将setDefaultPib设置为TRUE之前进行调用。
// Don't send PAN ID conflict
value = FALSE;
MAC_MlmeSetReq( MAC_ASSOCIATED_PAN_COORD, &value );//该函数用于设置属性值
MAC_MlmeSetReq( MAC_EXTENDED_ADDRESS, &aExtendedAddress );
if (ZMac_ScanBuf)
{
osal_mem_free(ZMac_ScanBuf);
ZMac_ScanBuf = NULL;
}
return ( stat );
}