在SensorDemo,想知道到底在哪调用了static int8 readTemp(void)来读取CC2530上的温度?
Zigbee网络中的三种设备是怎样组网的?组网概念?
#define SERIALAPP_MSG_RTRY_EVT 0x0001 //重发数据
#define SERIALAPP_RSP_RTRY_EVT 0x0002//重发响应信息
#define SERIALAPP_MSG_SEND_EVT 0x0004 //发送数据
网络设备启动:
这句有重大关系,什么是HOLD_AUTO_START ??
#if defined( HOLD_AUTO_START )
devStates_t devState = DEV_HOLD;
#else
devStates_t devState = DEV_INIT;
#endif
HOLD_AUTO_START 的定义将会影响到
HOLD_AUTO_START在IAR ->Project->Option->C/C++ Compile->Preprocess->Defined symbols中定义。
// ZDOInitDevice return values
// Use the following to macros to make device type decisions
#define ZG_BUILD_COORDINATOR_TYPE (ZSTACK_DEVICE_BUILD & DEVICE_BUILD_COORDINATOR)
#define ZG_BUILD_RTR_TYPE (ZSTACK_DEVICE_BUILD & (DEVICE_BUILD_COORDINATOR | DEVICE_BUILD_ROUTER))
#define ZG_BUILD_ENDDEVICE_TYPE (ZSTACK_DEVICE_BUILD & DEVICE_BUILD_ENDDEVICE)
#define ZG_BUILD_RTRONLY_TYPE (ZSTACK_DEVICE_BUILD == DEVICE_BUILD_ROUTER)
#define ZG_BUILD_JOINING_TYPE (ZSTACK_DEVICE_BUILD & (DEVICE_BUILD_ROUTER | DEVICE_BUILD_ENDDEVICE))
ZigBee设备的启动,最终是要调用ZDO_StartDevice()函数来实现的。下面看一下是怎么启动这个函数的。在ZDOInitDevice()函数的最后,调用了下面的ZDApp_NetworkInit()函数,在这个函数中,启动了ZDO_NETWORK_INIT事件,这个事件是在ZDApp_event_loop()事件处理函数中进行处理的。在这个事件中调用了启动设备的函数ZDO_StartDevice()。
什么是ZCL?
zigbee cluster library(ZCL) zigbee 簇库
在ZCL规范中详细介绍了每个簇的用法,并列出特定簇能够传送的属性,还提供了传送各种属性值改变的一种机制、配置传送参数的命令。
关于ZStack-CC2530-2.3.0-1.4.0中simpleApp例子的组网
http://blog.sina.com.cn/s/blog_933b730f01013o3x.html
Zigbee 的端口0是指的??
sapi_bindInProgress = 0xffff;绑定标志位,默认不允许绑定。
// Initialize leave control logic
ZDApp_LeaveCtrlInit(); //离开控制初始化
什么叫离开控制初始化??
什么是节点描述符??
// Node Descriptor format structure
typedef struct
{
uint8 LogicalType:3;
uint8 ComplexDescAvail:1; /* AF_V1_SUPPORT - reserved bit. */
uint8 UserDescAvail:1; /* AF_V1_SUPPORT - reserved bit. */
uint8 Reserved:3;
uint8 APSFlags:3;
uint8 FrequencyBand:5;
uint8 CapabilityFlags;
uint8 ManufacturerCode[2];
uint8 MaxBufferSize;
uint8 MaxInTransferSize[2];
uint16 ServerMask;
uint8 MaxOutTransferSize[2];
uint8 DescriptorCapability;
} NodeDescriptorFormat_t;
现在想知道路由器设备在组网中的作用???
/*********************************************************************
* @fn ZDApp_Init
*
* @brief ZDApp Initialization function.
*
* @param task_id - ZDApp Task ID
*
* @return None
*/
void ZDApp_Init( uint8 task_id )
{
// Save the task ID
ZDAppTaskID = task_id;
// Initialize the ZDO global device short address storage
ZDAppNwkAddr.addrMode = Addr16Bit;
ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;
(void)NLME_GetExtAddr(); // Load the saveExtAddr pointer.
// Check for manual "Hold Auto Start"
/ /打开电源时,检测到有手工设置SW_1则会设置devState = DEV_HOLD
ZDAppCheckForHoldKey();
// Initialize ZDO items and setup the device - type of device to create.
ZDO_Init();
// Register the endpoint description with the AF
// This task doesn't have a Simple description, but we still need
// to register the endpoint.
afRegister( (endPointDesc_t *)&ZDApp_epDesc );
#if defined( ZDO_USERDESC_RESPONSE )
ZDApp_InitUserDesc();
#endif // ZDO_USERDESC_RESPONSE
// Start the device?能否自启动,无论怎样下面都进行了设备的初始化
if ( devState != DEV_HOLD )
{
ZDOInitDevice( 0 );
}
else
{
ZDOInitDevice( ZDO_INIT_HOLD_NWK_START );
// Blink LED to indicate HOLD_START
HalLedBlink ( HAL_LED_4, 0, 50, 500 );
}
// Initialize the ZDO callback function pointers zdoCBFunc[]
ZDApp_InitZdoCBFunc();
ZDApp_RegisterCBs();
} /* ZDApp_Init() */
// Init ZDO, but hold and wait for application to start the joining or
// forming network
#define ZDO_INIT_HOLD_NWK_START 0xFFFF
/*********************************************************************
* @fn ZDO_Init
*
* @brief ZDObject and ZDProfile initialization.
*
* @param none
*
* @return none
*/
void ZDO_Init( void )
{
// Initialize ZD items
#if defined ( REFLECTOR )
ZDO_EDBind = NULL;
#endif
// Initialize default ZDO_UseExtendedPANID to the APS one.
osal_cpyExtAddr( ZDO_UseExtendedPANID, AIB_apsUseExtendedPANID );
// Setup the device - type of device to create.
ZDODeviceSetup();
}
static void ZDODeviceSetup( void )
{
if ( ZG_BUILD_COORDINATOR_TYPE )
{
NLME_CoordinatorInit();
}
#if defined ( REFLECTOR )
APS_ReflectorInit( (ZG_DEVICE_COORDINATOR_TYPE) ? APS_REFLECTOR_PUBLIC : APS_REFLECTOR_PRIVATE );
#endif
if ( ZG_BUILD_JOINING_TYPE )
{
NLME_DeviceJoiningInit();
}
}
协调器、路由器和终端设备到底什么关系?
树群这种网络模式和多跳路由?
注意:在Z-Stack 1.4.1中一个设备的类型通常在编译的时候通过编译选项(ZDO_COORDINATOR 和RTR_NWK)确定。所有的应用例子都提供独立的项目文件来编译每一种设备类型。