Zstack杂乱笔记4

在SensorDemo,想知道到底在哪调用了static int8 readTemp(void)来读取CC2530上的温度?
Zigbee网络中的三种设备是怎样组网的?组网概念?
#define SERIALAPP_MSG_RTRY_EVT0x0001 //重发数据
#define SERIALAPP_RSP_RTRY_EVT0x0002//重发响应信息
#define SERIALAPP_MSG_SEND_EVT0x0004 //发送数据

网络设备启动:
这句有重大关系,什么是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
#define ZDO_INITDEV_RESTORED_NETWORK_STATE0x00
#define ZDO_INITDEV_NEW_NETWORK_STATE0x01
#define ZDO_INITDEV_LEAVE_NOT_STARTED0x02


// 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规范中详细介绍了每个簇的用法,并列出特定簇能够传送的属性,还提供了传送各种属性值改变的一种机制、配置传送参数的命令。



// Device types definitions ( from ZGlobals.h file )
#define ZG_DEVICETYPE_COORDINATOR0x00
#define ZG_DEVICETYPE_ROUTER0x01
#define ZG_DEVICETYPE_ENDDEVICE0x02

关于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;

现在想知道路由器设备在组网中的作用???

/********************************************************************* * @fnZDApp_Init * * @briefZDApp Initialization function. * * @paramtask_id - ZDApp Task ID * * @returnNone */ 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_START0xFFFF/********************************************************************* * @fnZDO_Init * * @briefZDObject and ZDProfile initialization. * * @paramnone * * @returnnone */ 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 ); #endifif ( ZG_BUILD_JOINING_TYPE ) { NLME_DeviceJoiningInit(); } }





协调器、路由器和终端设备到底什么关系?
树群这种网络模式和多跳路由?



【Zstack杂乱笔记4】 注意:在Z-Stack 1.4.1中一个设备的类型通常在编译的时候通过编译选项(ZDO_COORDINATOR 和RTR_NWK)确定。所有的应用例子都提供独立的项目文件来编译每一种设备类型。

    推荐阅读