I found a difference between the standard definition of Startup Control from the Home Automation Profile and the implementation by the BeeKit-generated-cod. In this code, in files ApplicationConf.h and ZdoApsInterface.h, the 3 Startup Control mode bit can assume values other than the two ones specified by the ZigBee Document 053520r25. I also found that those values do not refer to the same function: "zero" means the device "will not perform any explicit join or rejoin" by the standard but "0x00" means "use association (ZR, ZED only), or form (ZC)" by the Beekit-generate-code; as the same, "three" means the device "will join network by association when join command is indicated by button press sequence" by the standard but "0x03" means silent join by the code.
I'm working to implement the commissioning procedure in my BeeKit Codebase 3.0.2 based application, so I need more info about the existing code and the code that I have to add.
ApplicationConf.h:
/*
Start mode to use if this node receives an over-the-air NLME-LEAVE command. See
ZdoStopMode_t in ApsZdoInterface.h. Note: the restart bit is chosen by the
over-the-air command, but whether to announce or reset tables is chosen by the
application. See also ZDO_StartEx().
DDDx xxxx - Device type
xxxS Sxxx - Startup set
xxxx xCCC - Startup control mode
Default: 0x02 (NVM set, gZdoStartMode_NwkRejoin_c)
*/
#ifndef gZdoStartModeDefault_c
#define gZdoStartModeDefault_c 0x02
#endif
ZdoApsInterface.h:
#define gZdoStartMode_Associate_c 0x00 // (default) use association (ZR, ZED only), or form (ZC)
#define gZdoStartMode_OrphanRejoin_c 0x01 // FS specific: use orphan rejoin (ZR, ZED only)
#define gZdoStartMode_NwkRejoin_c 0x02 // use NWK rejoin (ZR, ZED only)
#define gZdoStartMode_FindAndRejoin_c 0x03 // valid for ZR, ZED only, search for network on this and
// other channels, then silent join
#define gZdoStartMode_SilentStart_c 0x04 // already part of the network (no form/join needed)
#define gZdoStartMode_StartMask_c 0x07 // mask for above fields
// form (ZC) or associate join (if ZR or ZED), using NVM if available
#define gZdoStartMode_Default_c (gZdoStartMode_Associate_c | gZdoStartMode_NvmSet_c)
ZigBee Document 053520r25 (ZIGBEE HOME AUTOMATION PUBLIC APPLICATION PROFILE):
Startup Control:
3 (three) if un-commissioned, so it will join network by association when join
command is indicated by button press sequence.
0 (Zero) if commissioned. Indicates that the device should consider itself a part of
the network indicated by the ExtendedPANId attribute. In this case it will not
perform any explicit join or rejoin operation.
Devitt,
You can not compare the starting primitives with the HA spec directly.
If you e.g use the ZDO_Start(gSilentRejoinWithNVM_c) which most of the demo applications uses you will see the following behavior:
1. if the node has never been on the a network before it will do a discovery and an association join.
2. if the node has valid NVM information (e.g. power cycled while participating in the network) it will silently resume its role in the network.
Start up control mode 0 requires a full commisisoning of a the SAS which normally is done through a commissioning cluster, however this cluster is not used in HA. the test is "generic text based on the SAS.
Br,
Mads