📄 af.lst
字号:
115
116 /*********************************************************************
117 * LOCAL FUNCTIONS
118 */
119
120 #if ( AF_KVP_SUPPORT )
121 static void afBuildKVPIncoming( aps_FrameFormat_t *aff, endPointDesc_t *epDesc,
122 zAddrType_t *SrcAddress, uint8 LinkQuality, byte SecurityUse );
123 #endif
124
125 static void afBuildMSGIncoming( aps_FrameFormat_t *aff, endPointDesc_t *epDesc,
126 zAddrType_t *SrcAddress, uint8 LinkQuality, byte SecurityUse,
127 uint32 timestamp );
128
129 #if ( AF_KVP_SUPPORT )
130 static afMultiHdr_t *multiInit( afAddrType_t *dstAddr,
131 byte srcEndPoint, uint16 clusterID, byte FrameType,
132 byte txOptions, bool DiscoverRoute, byte RadiusCounter );
133
134 static bool multiAppend( afMultiHdr_t *hdr, byte bufLen, byte *buf,
135 byte CommandType, byte AttribDataType, uint16 AttribId, byte ErrorCode );
136
137 static afStatus_t multiSend( afMultiHdr_t *hdr, byte *seqNum, byte radius );
138 #endif
139
140 #if ( AF_V1_SUPPORT )
141 static afStatus_t afDataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,
142 uint16 cID, uint16 len, uint8 *buf, uint8 *transID,
143 uint8 options, uint8 radius );
144 #endif
145
146 static epList_t *afFindEndPointDescList( byte EndPoint );
147
148 static pDescCB afGetDescCB( endPointDesc_t *epDesc );
149
150 /*********************************************************************
151 * NETWORK LAYER CALLBACKS
152 */
153
154 /*********************************************************************
155 * PUBLIC FUNCTIONS
156 */
157
158 /*********************************************************************
159 * @fn afInit
160 *
161 * @brief Initialization function for the AF.
162 *
163 * @param none
164 *
165 * @return none
166 */
\ In segment BANKED_CODE, align 1, keep-with-next
167 void afInit( void )
\ afInit:
168 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
169 // Start with no endpoint defined
170 epList = NULL;
\ 000004 90.... MOV DPTR,#epList
\ 000007 E4 CLR A
\ 000008 F0 MOVX @DPTR,A
\ 000009 A3 INC DPTR
\ 00000A F0 MOVX @DPTR,A
171 }
\ 00000B 02.... LJMP ?Subroutine30 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine30:
\ 000000 D083 POP DPH
\ 000002 D082 POP DPL
\ 000004 02.... LJMP ?BRET
172
173 /*********************************************************************
174 * @fn afRegisterExtended
175 *
176 * @brief Register an Application's EndPoint description.
177 *
178 * @param epDesc - pointer to the Application's endpoint descriptor.
179 * @param descFn - pointer to descriptor callback function
180 *
181 * NOTE: The memory that epDesc is pointing to must exist after this call.
182 *
183 * @return Pointer to epList_t on success, NULL otherwise.
184 */
\ In segment BANKED_CODE, align 1, keep-with-next
185 epList_t *afRegisterExtended( endPointDesc_t *epDesc, pDescCB descFn )
\ afRegisterExtended:
186 {
\ 000000 74F2 MOV A,#-0xe
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 14
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
\ 000009 740E MOV A,#0xe
\ 00000B 12.... LCALL ?XSTACK_DISP0_8
\ 00000E E0 MOVX A,@DPTR
\ 00000F F5.. MOV ?V0 + 0,A
\ 000011 A3 INC DPTR
\ 000012 E0 MOVX A,@DPTR
\ 000013 F5.. MOV ?V0 + 1,A
\ 000015 A3 INC DPTR
\ 000016 E0 MOVX A,@DPTR
\ 000017 F5.. MOV ?V0 + 2,A
187 epList_t *ep;
188 epList_t *epSearch;
189
190 ep = osal_mem_alloc( sizeof ( epList_t ) );
\ 000019 ; Setup parameters for call to function osal_mem_alloc
\ 000019 7A0A MOV R2,#0xa
\ 00001B 7B00 MOV R3,#0x0
\ 00001D 90.... MOV DPTR,#(osal_mem_alloc & 0xffff)
\ 000020 74.. MOV A,#((osal_mem_alloc >> 16) & 0xff)
\ 000022 12.... LCALL ?BCALL ; Banked call to: DPTR()
191 if ( ep )
\ 000025 EA MOV A,R2
\ 000026 7001 JNZ ??afRegisterExtended_0
\ 000028 EB MOV A,R3
\ ??afRegisterExtended_0:
\ 000029 6063 JZ ??afRegisterExtended_1
192 {
193 // Fill in the new list entry
194 ep->epDesc = epDesc;
\ 00002B 8A82 MOV DPL,R2
\ 00002D 8B83 MOV DPH,R3
\ 00002F EE MOV A,R6
\ 000030 F0 MOVX @DPTR,A
\ 000031 A3 INC DPTR
\ 000032 EF MOV A,R7
\ 000033 12.... LCALL ?Subroutine2 & 0xFFFF
195 #if !defined ( REFLECTOR )
196 ep->reflectorAddr = NWK_PAN_COORD_ADDR;
197 #else
198 ep->reflectorAddr = INVALID_NODE_ADDR;
\ ??CrossCallReturnLabel_2:
\ 000036 74FE MOV A,#-0x2
\ 000038 F0 MOVX @DPTR,A
\ 000039 A3 INC DPTR
\ 00003A 74FF MOV A,#-0x1
\ 00003C F0 MOVX @DPTR,A
199 #endif
200 // Default to allow Match Descriptor.
201 ep->flags = eEP_AllowMatch;
\ 00003D 7401 MOV A,#0x1
\ 00003F 8A82 MOV DPL,R2
\ 000041 8B83 MOV DPH,R3
\ 000043 A3 INC DPTR
\ 000044 A3 INC DPTR
\ 000045 A3 INC DPTR
\ 000046 A3 INC DPTR
\ 000047 12.... LCALL ?Subroutine1 & 0xFFFF
202 #if ( AF_KVP_SUPPORT )
203 ep->flags |= ((epDesc->endPoint == ZDO_EP) ? 0 : eEP_UsesKVP);
204 #endif
205 ep->pfnDescCB = descFn;
\ ??CrossCallReturnLabel_101:
\ 00004A E5.. MOV A,?V0 + 0
\ 00004C F0 MOVX @DPTR,A
\ 00004D A3 INC DPTR
\ 00004E E5.. MOV A,?V0 + 1
\ 000050 F0 MOVX @DPTR,A
\ 000051 A3 INC DPTR
\ 000052 E5.. MOV A,?V0 + 2
\ 000054 12.... LCALL ?Subroutine1 & 0xFFFF
206 ep->nextDesc = NULL;
\ ??CrossCallReturnLabel_102:
\ 000057 A3 INC DPTR
\ 000058 A3 INC DPTR
\ 000059 A3 INC DPTR
\ 00005A E4 CLR A
\ 00005B F0 MOVX @DPTR,A
\ 00005C A3 INC DPTR
\ 00005D F0 MOVX @DPTR,A
207
208 // Does a list exist?
209 if ( epList == NULL )
\ 00005E 90.... MOV DPTR,#epList
\ 000061 E0 MOVX A,@DPTR
\ 000062 7002 JNZ ??afRegisterExtended_2
\ 000064 A3 INC DPTR
\ 000065 E0 MOVX A,@DPTR
\ ??afRegisterExtended_2:
\ 000066 90.... MOV DPTR,#epList
\ 000069 601E JZ ??afRegisterExtended_3
210 epList = ep; // Make this the first entry
211 else
212 {
213 // Look for the end of the list
214 epSearch = epList;
215 while( epSearch->nextDesc != NULL )
216 epSearch = epSearch->nextDesc;
\ ??afRegisterExtended_4:
\ 00006B 12.... LCALL ?Subroutine19 & 0xFFFF
\ ??CrossCallReturnLabel_54:
\ 00006E A3 INC DPTR
\ 00006F A3 INC DPTR
\ 000070 A3 INC DPTR
\ 000071 A3 INC DPTR
\ 000072 A3 INC DPTR
\ 000073 A3 INC DPTR
\ 000074 A3 INC DPTR
\ 000075 A3 INC DPTR
\ 000076 E0 MOVX A,@DPTR
\ 000077 7002 JNZ ??afRegisterExtended_5
\ 000079 A3 INC DPTR
\ 00007A E0 MOVX A,@DPTR
\ ??afRegisterExtended_5:
\ 00007B 8882 MOV DPL,R0
\ 00007D 8983 MOV DPH,R1
\ 00007F A3 INC DPTR
\ 000080 A3 INC DPTR
\ 000081 A3 INC DPTR
\ 000082 A3 INC DPTR
\ 000083 A3 INC DPTR
\ 000084 A3 INC DPTR
\ 000085 A3 INC DPTR
\ 000086 A3 INC DPTR
\ 000087 70E2 JNZ ??afRegisterExtended_4
217
218 // Add new entry to end of list
219 epSearch->nextDesc = ep;
\ ??afRegisterExtended_3:
\ 000089 EA MOV A,R2
\ 00008A F0 MOVX @DPTR,A
\ 00008B A3 INC DPTR
\ 00008C EB MOV A,R3
\ 00008D F0 MOVX @DPTR,A
220 }
221 }
222
223 return ep;
\ ??afRegisterExtended_1:
\ 00008E REQUIRE ?Subroutine31
\ 00008E ; // Fall through to label ?Subroutine31
224 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine31:
\ 000000 7F06 MOV R7,#0x6
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 F0 MOVX @DPTR,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -