zdprofile.s51
来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 1,509 行 · 第 1/5 页
S51
1,509 行
// 181 *
// 182 * @brief This builds and send a request message that has
// 183 * NWKAddrOfInterest as its only parameter.
// 184 *
// 185 * @param dstAddr - destination address
// 186 * @param nwkAddr - 16 bit address
// 187 * @param SecurityEnable - Security Options
// 188 *
// 189 * @return afStatus_t
// 190 */
// 191 afStatus_t ZDP_NWKAddrOfInterestReq( zAddrType_t *dstAddr, uint16 nwkAddr,
// 192 byte cmd, byte SecurityEnable )
// 193 {
// 194 ZDP_TmpBuf[0] = LO_UINT16( nwkAddr );
// 195 ZDP_TmpBuf[1] = HI_UINT16( nwkAddr );
// 196
// 197 return fillAndSend( &ZDP_TransID, dstAddr, cmd, 2 );
// 198 }
// 199 #endif // ZDO_NODEDESC_REQUEST ZDO_POWERDESC_REQUEST ZDO_ACTIVEEP_REQUEST ZDO_COMPLEXDESC_REQUEST ZDO_USERDESC_REQUEST
// 200
// 201 /*********************************************************************
// 202 * Address Requests
// 203 */
// 204
// 205 #if defined ( ZDO_NWKADDR_REQUEST )
// 206 /*********************************************************************
// 207 * @fn ZDP_NwkAddrReq
// 208 *
// 209 * @brief This builds and send a NWK_addr_req message. This
// 210 * function sends a broadcast message looking for a 16
// 211 * bit address with a 64 bit address as bait.
// 212 *
// 213 * @param IEEEAddress - looking for this device
// 214 * @param SecurityEnable - Security Options
// 215 *
// 216 * @return afStatus_t
// 217 */
// 218 afStatus_t ZDP_NwkAddrReq( byte *IEEEAddress, byte ReqType,
// 219 byte StartIndex, byte SecurityEnable )
// 220 {
// 221 byte *pBuf = ZDP_TmpBuf;
// 222 byte len = Z_EXTADDR_LEN + 1 + 1; // IEEEAddress + ReqType + StartIndex.
// 223 zAddrType_t dstAddr;
// 224
// 225 if ( osal_ExtAddrEqual( saveExtAddr, IEEEAddress ) == FALSE )
// 226 {
// 227 dstAddr.addrMode = AddrBroadcast;
// 228 dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR;
// 229 }
// 230 else
// 231 {
// 232 dstAddr.addrMode = Addr16Bit;
// 233 dstAddr.addr.shortAddr = ZDAppNwkAddr.addr.shortAddr;
// 234 }
// 235
// 236 pBuf = osal_cpyExtAddr( pBuf, IEEEAddress );
// 237
// 238 *pBuf++ = ReqType;
// 239 *pBuf++ = StartIndex;
// 240
// 241 return fillAndSend( &ZDP_TransID, &dstAddr, NWK_addr_req, len );
// 242 }
// 243 #endif
// 244
// 245 #if defined ( ZDO_IEEEADDR_REQUEST )
// 246 /*********************************************************************
// 247 * @fn ZDP_IEEEAddrReq
// 248 *
// 249 * @brief This builds and send a IEEE_addr_req message. This
// 250 * function sends a unicast message looking for a 64
// 251 * bit IEEE address with a 16 bit address as bait.
// 252 *
// 253 * @param ReqType - ZDP_IEEEADDR_REQTYPE_SINGLE or
// 254 * ZDP_IEEEADDR_REQTYPE_EXTENDED
// 255 * @param SecurityEnable - Security Options
// 256 *
// 257 * @return afStatus_t
// 258 */
// 259 afStatus_t ZDP_IEEEAddrReq( uint16 shortAddr, byte ReqType,
// 260 byte StartIndex, byte SecurityEnable )
// 261 {
// 262 byte *pBuf = ZDP_TmpBuf;
// 263 byte len = 2 + 1 + 1; // shortAddr + ReqType + StartIndex.
// 264 zAddrType_t dstAddr;
// 265
// 266 dstAddr.addrMode = (afAddrMode_t)Addr16Bit;
// 267 dstAddr.addr.shortAddr = shortAddr;
// 268
// 269 *pBuf++ = LO_UINT16( shortAddr );
// 270 *pBuf++ = HI_UINT16( shortAddr );
// 271
// 272 *pBuf++ = ReqType;
// 273 *pBuf++ = StartIndex;
// 274
// 275 return fillAndSend( &ZDP_TransID, &dstAddr, IEEE_addr_req, len );
// 276 }
// 277 #endif
// 278
// 279 #if defined ( ZDO_MATCH_REQUEST )
// 280 /*********************************************************************
// 281 * @fn ZDP_MatchDescReq
// 282 *
// 283 * @brief This builds and send a Match_Desc_req message. This
// 284 * function sends a broadcast or unicast message
// 285 * requesting the list of endpoint/interfaces that
// 286 * match profile ID and cluster IDs.
// 287 *
// 288 * @param dstAddr - destination address
// 289 * @param ProfileID - Profile ID
// 290 * @param NumInClusters - number of input clusters
// 291 * @param InClusterList - input cluster ID list
// 292 * @param NumOutClusters - number of output clusters
// 293 * @param OutClusterList - output cluster ID list
// 294 * @param SecurityEnable - Security Options
// 295 *
// 296 * @return afStatus_t
// 297 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 298 afStatus_t ZDP_MatchDescReq( zAddrType_t *dstAddr, uint16 nwkAddr,
ZDP_MatchDescReq:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function ZDP_MatchDescReq
// 299 uint16 ProfileID,
// 300 byte NumInClusters, cId_t *InClusterList,
// 301 byte NumOutClusters, cId_t *OutClusterList,
// 302 byte SecurityEnable )
// 303 {
FUNCALL ZDP_MatchDescReq, NLME_GetProtocolVersion
LOCFRAME XSTACK, 18, STACK
ARGFRAME XSTACK, 18, STACK
FUNCALL ZDP_MatchDescReq, ??fillAndSend
LOCFRAME XSTACK, 20, STACK
ARGFRAME XSTACK, 20, STACK
MOV A,#-0x10
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 V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 16)
; Saved register size: 16
; Auto size: 2
MOV A,#-0x2
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 18)
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R3
MOVX @DPTR,A
MOV A,R4
MOV R6,A
MOV A,R5
MOV R7,A
MOV ?V0 + 6,R1
MOV A,#0x12
LCALL ?XSTACK_DISP0_8
LCALL ??Subroutine16_0 & 0xFFFF
??CrossCallReturnLabel_41:
MOV A,#0x16
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV ?V0 + 7,A
MOV A,#0x17
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine19 & 0xFFFF
// 304 byte *pBuf = ZDP_TmpBuf;
??CrossCallReturnLabel_45:
LCALL ?Subroutine17 & 0xFFFF
// 305 // nwkAddr+ProfileID+NumInClusters+NumOutClusters.
// 306 byte i, len = 2 + 2 + 1 + 1; // nwkAddr+ProfileID+NumInClusters+NumOutClusters.
// 307 uint8 protoVer = NLME_GetProtocolVersion();
??CrossCallReturnLabel_128:
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
MOV R3,A
// 308
// 309 len += (NumInClusters + NumOutClusters)*((protoVer != ZB_PROT_V1_0) ? sizeof ( uint16 ) : sizeof( uint8 ));
MOV A,#0x1
XRL A,R3
JZ ??ZDP_MatchDescReq_0
MOV R0,#0x2
SJMP ??ZDP_MatchDescReq_1
??ZDP_MatchDescReq_0:
MOV R0,#0x1
??ZDP_MatchDescReq_1:
MOV A,?V0 + 7
ADD A,?V0 + 6
MOV B,A
MOV A,R0
MUL AB
ADD A,#0x6
MOV R2,A
// 310
// 311 if ( len >= ZDP_BUF_SZ-1 )
CLR C
SUBB A,#0x4f
JC ??ZDP_MatchDescReq_2
// 312 {
// 313 return afStatus_MEM_FAIL;
MOV R1,#-0x7f
LJMP ??ZDP_MatchDescReq_3 & 0xFFFF
// 314 }
// 315
// 316 *pBuf++ = LO_UINT16( nwkAddr ); // NWKAddrOfInterest
??ZDP_MatchDescReq_2:
MOV A,R6
MOV DPL,?V0 + 2
MOV DPH,?V0 + 3
MOVX @DPTR,A
INC DPTR
// 317 *pBuf++ = HI_UINT16( nwkAddr );
MOV A,R7
LCALL ?Subroutine28 & 0xFFFF
// 318
// 319 *pBuf++ = LO_UINT16( ProfileID ); // Profile ID
// 320 *pBuf++ = HI_UINT16( ProfileID );
// 321
// 322 *pBuf++ = NumInClusters; // Input cluster list
??CrossCallReturnLabel_63:
MOV A,?V0 + 6
LCALL ?Subroutine30 & 0xFFFF
// 323 if ( NumInClusters )
??CrossCallReturnLabel_67:
JZ ??ZDP_MatchDescReq_4
// 324 {
// 325 for (i=0; i<NumInClusters; ++i) {
MOV R4,#0x0
// 326 *pBuf++ = LO_UINT16( InClusterList[i] );
??ZDP_MatchDescReq_5:
MOV A,R4
CLR C
RLC A
MOV R0,A
CLR A
RLC A
MOV R1,A
MOV A,#0x14
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine25 & 0xFFFF
??CrossCallReturnLabel_57:
LCALL ?Subroutine9 & 0xFFFF
// 327 if (protoVer != ZB_PROT_V1_0) {
??CrossCallReturnLabel_20:
JZ ??CrossCallReturnLabel_34
// 328 *pBuf++ = HI_UINT16( InClusterList[i] );
MOV A,#0x14
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine25 & 0xFFFF
??CrossCallReturnLabel_58:
LCALL ?Subroutine13 & 0xFFFF
// 329 }
// 330 }
??CrossCallReturnLabel_34:
INC R4
MOV A,R4
CLR C
SUBB A,?V0 + 6
JC ??ZDP_MatchDescReq_5
// 331 }
// 332
// 333 *pBuf++ = NumOutClusters; // Output cluster list
??ZDP_MatchDescReq_4:
MOV DPL,?V0 + 2
MOV DPH,?V0 + 3
MOV A,?V0 + 7
LCALL ?Subroutine30 & 0xFFFF
// 334 if ( NumOutClusters )
??CrossCallReturnLabel_68:
JZ ??ZDP_MatchDescReq_6
// 335 {
// 336 for (i=0; i<NumOutClusters; ++i) {
MOV R4,#0x0
// 337 *pBuf++ = LO_UINT16( OutClusterList[i] );
??ZDP_MatchDescReq_7:
MOV A,R4
CLR C
RLC A
MOV R0,A
CLR A
RLC A
MOV R1,A
MOV A,?V0 + 4
ADD A,R0
MOV DPL,A
MOV A,?V0 + 5
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?