📄 zdobject.s51
字号:
// 158 static uint16 *ZDO_CreateAlignedUINT16List(uint8 num, uint8 *buf);
// 159 #if defined ( MANAGED_SCAN )
// 160 static void ZDOManagedScan_Next( void );
// 161 #endif
// 162 #if defined ( REFLECTOR )
// 163 static void ZDO_RemoveEndDeviceBind( void );
// 164 static void ZDO_SendEDBindRsp( byte TransSeq, zAddrType_t *dstAddr, byte Status, byte secUse );
// 165 #endif
// 166 #if defined ( REFLECTOR ) || defined( ZDO_COORDINATOR )
// 167 static byte ZDO_CompareClusterLists( byte numList1, uint16 *list1,
// 168 byte numList2, uint16 *list2, uint16 *pMatches );
// 169 #endif
// 170 #if defined ( ZDO_COORDINATOR )
// 171 static void ZDO_RemoveMatchMemory( void );
// 172 static uint8 ZDO_CopyMatchInfo( ZDEndDeviceBind_t *destReq, ZDEndDeviceBind_t *srcReq );
// 173 static uint8 ZDMatchSendState( uint8 reason, uint8 status, uint8 TransSeq );
// 174 static void ZDO_EndDeviceBindMatchTimeoutCB( void );
// 175 #endif
// 176
// 177 /*********************************************************************
// 178 * @fn ZDO_Init
// 179 *
// 180 * @brief ZDObject and ZDProfile initialization.
// 181 *
// 182 * @param none
// 183 *
// 184 * @return none
// 185 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 186 void ZDO_Init( void )
ZDO_Init:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function ZDO_Init
// 187 {
FUNCALL ZDO_Init, NLME_CoordinatorInit
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL ZDO_Init, ZDSecMgrInit
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 188 // Initialize ZD items
// 189 #if defined ( REFLECTOR )
// 190 ZDO_EDBind = NULL;
// 191 #endif
// 192
// 193 // Setup the device - type of device to create.
// 194 ZDODeviceSetup();
; Setup parameters for call to function NLME_CoordinatorInit
MOV DPTR,#(NLME_CoordinatorInit & 0xffff)
MOV A,#((NLME_CoordinatorInit >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 195
// 196 // Initialize ZigBee Device Security Manager
// 197 ZDSecMgrInit();
; Setup parameters for call to function ZDSecMgrInit
MOV DPTR,#(ZDSecMgrInit & 0xffff)
MOV A,#((ZDSecMgrInit >> 16) & 0xff)
CFI EndBlock cfiBlock0
REQUIRE ?Subroutine67
; // Fall through to label ?Subroutine67
// 198 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine67:
CFI Block cfiBlock1 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
LCALL ?BCALL ; Banked call to: DPTR()
??Subroutine67_0:
POP DPH
CFI CFA_SP SP+-4
CFI DPH0 SameValue
POP DPL
CFI CFA_SP SP+-3
CFI DPL0 SameValue
LJMP ?BRET
CFI EndBlock cfiBlock1
// 199
// 200 #if defined ( MANAGED_SCAN )
// 201 /*********************************************************************
// 202 * @fn ZDOManagedScan_Next()
// 203 *
// 204 * @brief Setup a managed scan.
// 205 *
// 206 * @param none
// 207 *
// 208 * @return none
// 209 */
// 210 static void ZDOManagedScan_Next( void )
// 211 {
// 212 // Is it the first time
// 213 if ( managedScanNextChannel == 0 && managedScanTimesPerChannel == 0 )
// 214 {
// 215 // Setup the defaults
// 216 managedScanNextChannel = 1;
// 217
// 218 while( managedScanNextChannel && (zgDefaultChannelList & managedScanNextChannel) == 0 )
// 219 managedScanNextChannel <<= 1;
// 220
// 221 managedScanChannelMask = managedScanNextChannel;
// 222 managedScanTimesPerChannel = MANAGEDSCAN_TIMES_PRE_CHANNEL;
// 223 }
// 224 else
// 225 {
// 226 // Do we need to go to the next channel
// 227 if ( managedScanTimesPerChannel == 0 )
// 228 {
// 229 // Find next active channel
// 230 managedScanChannelMask = managedScanNextChannel;
// 231 managedScanTimesPerChannel = MANAGEDSCAN_TIMES_PRE_CHANNEL;
// 232 }
// 233 else
// 234 {
// 235 managedScanTimesPerChannel--;
// 236
// 237 if ( managedScanTimesPerChannel == 0 )
// 238 {
// 239 managedScanNextChannel <<= 1;
// 240 while( managedScanNextChannel && (zgDefaultChannelList & managedScanNextChannel) == 0 )
// 241 managedScanNextChannel <<= 1;
// 242
// 243 if ( managedScanNextChannel == 0 )
// 244 zdoDiscCounter = NUM_DISC_ATTEMPTS + 1; // Stop
// 245 }
// 246 }
// 247 }
// 248 }
// 249 #endif // MANAGED_SCAN
// 250
// 251 /*********************************************************************
// 252 * @fn ZDODeviceSetup()
// 253 *
// 254 * @brief Call set functions depending on the type of device compiled.
// 255 *
// 256 * @param none
// 257 *
// 258 * @return none
// 259 */
// 260 static void ZDODeviceSetup( void )
// 261 {
// 262 #if defined( ZDO_COORDINATOR )
// 263 NLME_CoordinatorInit();
// 264 #endif
// 265
// 266 #if defined ( REFLECTOR )
// 267 #if defined ( ZDO_COORDINATOR )
// 268 APS_ReflectorInit( APS_REFLECTOR_PUBLIC );
// 269 #else
// 270 APS_ReflectorInit( APS_REFLECTOR_PRIVATE );
// 271 #endif
// 272 #endif
// 273
// 274 #if !defined( ZDO_COORDINATOR ) || defined( SOFT_START )
// 275 NLME_DeviceJoiningInit();
// 276 #endif
// 277 }
// 278
// 279 /*********************************************************************
// 280 * @fn ZDO_StartDevice
// 281 *
// 282 * @brief This function starts a device in a network.
// 283 *
// 284 * @param logicalType - Device type to start
// 285 * startMode - indicates mode of device startup
// 286 * beaconOrder - indicates time betwen beacons
// 287 * superframeOrder - indicates length of active superframe
// 288 *
// 289 * @return none
// 290 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 291 void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder )
ZDO_StartDevice:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function ZDO_StartDevice
// 292 {
FUNCALL ZDO_StartDevice, NLME_NetworkFormationRequest
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ZDO_StartDevice, NLME_StartRouterRequest
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL ZDO_StartDevice, ZDSecMgrConfig
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL ZDO_StartDevice, osal_start_timer
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x9
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
MOV A,R1
MOV R5,A
MOV A,R3
MOV R1,A
// 293 ZStatus_t ret;
// 294
// 295 ret = ZUnsupportedMode;
MOV R6,#0x12
// 296
// 297 #if defined(ZDO_COORDINATOR)
// 298 if ( logicalType == NODETYPE_COORDINATOR )
MOV A,R5
JNZ ??ZDO_StartDevice_0
// 299 {
// 300 if ( startMode == MODE_HARD )
MOV A,#0x2
XRL A,R2
JNZ ??ZDO_StartDevice_1
// 301 {
// 302 devState = DEV_COORD_STARTING;
MOV A,#0x8
MOV DPTR,#devState
MOVX @DPTR,A
// 303 ret = NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,
// 304 zgDefaultStartingScanDuration, beaconOrder,
// 305 superframeOrder, false );
; Setup parameters for call to function NLME_NetworkFormationRequest
MOV ?V0 + 0,#0x0
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_ONE
CFI CFA_XSP16 add(XSP16, 10)
MOV DPTR,#zgDefaultChannelList
LCALL ?PUSH_XSTACK8_X_FOUR
CFI CFA_XSP16 add(XSP16, 14)
MOV A,R4
MOV R5,A
MOV A,R1
MOV R4,A
MOV DPTR,#zgDefaultStartingScanDuration
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#zgConfigPANID
LCALL ?Subroutine41 & 0xFFFF
??CrossCallReturnLabel_119:
MOV DPTR,#(NLME_NetworkFormationRequest & 0xffff)
MOV A,#((NLME_NetworkFormationRequest >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x5
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 9)
SJMP ??ZDO_StartDevice_2
// 306 }
// 307 else if ( startMode == MODE_RESUME )
??ZDO_StartDevice_1:
MOV A,#0x1
XRL A,R2
JNZ ??ZDO_StartDevice_0
// 308 {
// 309 // Just start the coordinator
// 310 devState = DEV_COORD_STARTING;
MOV A,#0x8
MOV DPTR,#devState
MOVX @DPTR,A
// 311 ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false );
; Setup parameters for call to function NLME_StartRouterRequest
MOV R3,#0x0
MOV A,R1
MOV R2,A
MOV DPTR,#(NLME_StartRouterRequest & 0xffff)
MOV A,#((NLME_StartRouterRequest >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
??ZDO_StartDevice_2:
MOV A,R1
MOV R6,A
// 312 }
// 313 else
// 314 {
// 315 #if defined( LCD_SUPPORTED )
// 316 HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );
// 317 #endif
// 318 }
// 319 }
// 320 #endif // !ZDO_COORDINATOR
// 321
// 322 #if !defined ( ZDO_COORDINATOR ) || defined( SOFT_START )
// 323 if ( logicalType == NODETYPE_ROUTER || logicalType == NODETYPE_DEVICE )
// 324 {
// 325 if ( (startMode == MODE_JOIN) || (startMode == MODE_REJOIN) )
// 326 {
// 327 devState = DEV_NWK_DISC;
// 328
// 329 #if defined( MANAGED_SCAN )
// 330 ZDOManagedScan_Next();
// 331 ret = NLME_NetworkDiscoveryRequest( managedScanChannelMask, BEACON_ORDER_15_MSEC );
// 332 #else
// 333 ret = NLME_NetworkDiscoveryRequest( zgDefaultChannelList, zgDefaultStartingScanDuration );
// 334 #endif
// 335 }
// 336 else if ( startMode == MODE_RESUME )
// 337 {
// 338 if ( logicalType == NODETYPE_ROUTER )
// 339 {
// 340 ZMacScanCnf_t scanCnf;
// 341 devState = DEV_NWK_ORPHAN;
// 342
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -