📄 macs.lst
字号:
1 .file "macs.c"
2 .arch atmega128
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
222 .data
223 .LC0:
224 0000 0A2D 2D2D .string "\n-------it is in scan confirm---------"
224 2D2D 2D2D
224 6974 2069
224 7320 696E
224 2073 6361
225 .text
228 .global mlmeScanConfirm
230 mlmeScanConfirm:
1:macs.c **** #include "mac.h"
2:macs.c **** extern MAC_STATE_TYPE mac_current_state;
3:macs.c **** extern MAC_PIB mac_pib_data;
4:macs.c **** extern uint8_t current_pending_num;
5:macs.c **** extern SHORT_ADDR default_short_addr;
6:macs.c ****
7:macs.c **** void mlmeScanConfirm(MLME_SCAN_CONFIRM scan_result_info)
8:macs.c **** {
232 .LM1:
233 /* prologue: frame size=0 */
234 0000 CF93 push r28
235 0002 DF93 push r29
236 0004 CDB7 in r28,__SP_L__
237 0006 DEB7 in r29,__SP_H__
238 /* prologue end (size=4) */
9:macs.c **** //根据scan_result_info来修改对应的mac层和PHY层的pib信息
10:macs.c **** //本来有个复杂的选择算法,这里简单处理第一个
11:macs.c **** //printf("\n-------it is in scan confirm---------\n");
12:macs.c **** if((scan_result_info.status==SUCCESS)&&(scan_result_info.scanType==ORPHAN_SCAN))
240 .LM2:
241 0008 8D81 ldd r24,Y+5
242 000a 8823 tst r24
243 000c 09F0 breq .+2
244 000e 45C0 rjmp .L8
246 .LM3:
247 0010 8E81 ldd r24,Y+6
248 0012 8330 cpi r24,lo8(3)
249 0014 11F4 brne .L10
13:macs.c **** {
14:macs.c **** //printf("\n----SUCCESSFULL ORPHAN SCAN----\n");
15:macs.c **** mac_current_state=MAC_STATE_IDLE;
251 .LM4:
252 0016 80E1 ldi r24,lo8(16)
253 0018 41C0 rjmp .L11
254 .L10:
16:macs.c **** return;
17:macs.c **** }
18:macs.c **** if((scan_result_info.status==SUCCESS)&&(scan_result_info.scanType==ACTIVE_PASSIVE_SCAN))
256 .LM5:
257 001a 8130 cpi r24,lo8(1)
258 001c F1F5 brne .L8
19:macs.c **** {
20:macs.c **** printf("\n-------it is in scan confirm---------\n");
260 .LM6:
261 001e 80E0 ldi r24,lo8(.LC0)
262 0020 90E0 ldi r25,hi8(.LC0)
263 0022 0E94 0000 call puts
21:macs.c **** mac_current_state=MAC_STATE_ACTIVE_PASSIVE_SCAN_FINISHED;
265 .LM7:
266 0026 8AE0 ldi r24,lo8(10)
267 0028 8093 0000 sts mac_current_state,r24
22:macs.c **** //printf("\n-----the macbeacon is %02x\n",scan_result_info.pPANDescriptorList[0].superfr
23:macs.c **** mac_pib_data.macBeaconOrder=((scan_result_info.pPANDescriptorList[0].superframeSpec.SF.bytes.L
269 .LM8:
270 002c 8A8D ldd r24,Y+26
271 002e 982F mov r25,r24
272 0030 9F70 andi r25,lo8(15)
273 0032 9093 0000 sts mac_pib_data+8,r25
24:macs.c **** mac_pib_data.macSuperframeOrder=((scan_result_info.pPANDescriptorList[0].superframeSpec.SF.byt
275 .LM9:
276 0036 8295 swap r24
277 0038 8F70 andi r24,0x0f
278 003a 8093 0000 sts mac_pib_data+42,r24
25:macs.c **** mac_pib_data.macPANId.Val=scan_result_info.pPANDescriptorList[0].coordinator.panID.Val;
280 .LM10:
281 003e 888D ldd r24,Y+24
282 0040 998D ldd r25,Y+25
283 0042 9093 0000 sts (mac_pib_data+28)+1,r25
284 0046 8093 0000 sts mac_pib_data+28,r24
26:macs.c **** if(scan_result_info.pPANDescriptorList[0].coordinator.addrMode==0x02)
286 .LM11:
287 004a 8D85 ldd r24,Y+13
288 004c 8230 cpi r24,lo8(2)
289 004e 39F4 brne .L4
27:macs.c **** {
28:macs.c **** mac_pib_data.macCoordShortAddress.Val=scan_result_info.pPANDescriptorList[0].coordinato
291 .LM12:
292 0050 8E89 ldd r24,Y+22
293 0052 9F89 ldd r25,Y+23
294 0054 9093 0000 sts (mac_pib_data+22)+1,r25
295 0058 8093 0000 sts mac_pib_data+22,r24
296 005c 1AC0 rjmp .L5
297 .L4:
29:macs.c **** }
30:macs.c **** else if(scan_result_info.pPANDescriptorList[0].coordinator.addrMode==0x03)
299 .LM13:
300 005e 8330 cpi r24,lo8(3)
301 0060 C1F4 brne .L5
31:macs.c **** {
32:macs.c **** mac_pib_data.macCoordExtendedAddress.longaddr=scan_result_info.pPANDescriptorList[0].coor
303 .LM14:
304 0062 2E85 ldd r18,Y+14
305 0064 3F85 ldd r19,Y+15
306 0066 4889 ldd r20,Y+16
307 0068 5989 ldd r21,Y+17
308 006a 6A89 ldd r22,Y+18
309 006c 7B89 ldd r23,Y+19
310 006e 8C89 ldd r24,Y+20
311 0070 9D89 ldd r25,Y+21
312 0072 2093 0000 sts mac_pib_data+14,r18
313 0076 3093 0000 sts mac_pib_data+15,r19
314 007a 4093 0000 sts mac_pib_data+16,r20
315 007e 5093 0000 sts mac_pib_data+17,r21
316 0082 6093 0000 sts mac_pib_data+18,r22
317 0086 7093 0000 sts mac_pib_data+19,r23
318 008a 8093 0000 sts mac_pib_data+20,r24
319 008e 9093 0000 sts mac_pib_data+21,r25
320 .L5:
33:macs.c **** }
34:macs.c **** ppib.phyCurrentChanel=scan_result_info.pPANDescriptorList[0].logicalChannel;
322 .LM15:
323 0092 8C85 ldd r24,Y+12
324 0094 8093 0000 sts ppib,r24
325 0098 03C0 rjmp .L1
326 .L8:
35:macs.c **** //PLME_SET_request(phyCurrentChanel_id, ppib.phyCurrentChanel);
36:macs.c **** //OS_post(synrequest_task);
37:macs.c **** }
38:macs.c **** else
39:macs.c **** {
40:macs.c **** if(!IS_COORDINATOR)
41:macs.c **** {
42:macs.c **** mac_current_state=MAC_STATE_UNSTARTED;
43:macs.c **** //printf("\n--PASSIVE SCAN FAILURE-----\n");
44:macs.c **** }
45:macs.c **** else
46:macs.c **** {
47:macs.c **** mac_current_state=MAC_STATE_ACTIVE_PASSIVE_SCAN_FINISHED;
328 .LM16:
329 009a 8AE0 ldi r24,lo8(10)
330 .L11:
331 009c 8093 0000 sts mac_current_state,r24
332 .L1:
333 /* epilogue: frame size=0 */
334 00a0 DF91 pop r29
335 00a2 CF91 pop r28
336 00a4 0895 ret
337 /* epilogue end (size=3) */
338 /* function mlmeScanConfirm size 83 (76) */
341 .global mlmeStartConfirm
343 mlmeStartConfirm:
48:macs.c **** //printf("\n---doesn't exist any 802.15.4 network ----\n");
49:macs.c **** //printf("---I will be the coordinator----");
50:macs.c **** }
51:macs.c **** //OS_post(scan_task);
52:macs.c **** }
53:macs.c ****
54:macs.c **** }
55:macs.c ****
56:macs.c **** void mlmeStartConfirm(void)
57:macs.c **** {
345 .LM17:
346 /* prologue: frame size=0 */
347 /* prologue end (size=0) */
348 /* epilogue: frame size=0 */
349 00a6 0895 ret
350 /* epilogue end (size=1) */
351 /* function mlmeStartConfirm size 1 (0) */
353 .data
354 .LC1:
355 0027 0A2D 2D2D .string "\n----the association request frame is no acked-----"
355 2D74 6865
355 2061 7373
355 6F63 6961
355 7469 6F6E
356 .LC2:
357 005b 0A2D 2D2D .string "\n---didn't received the association response frame---"
357 6469 646E
357 2774 2072
357 6563 6569
357 7665 6420
358 .text
362 .global mlmeAssociateConfirm
364 mlmeAssociateConfirm:
58:macs.c **** //通知高层发送完毕。
59:macs.c **** //可以通过post高层任务来完成高层的函数任务
60:macs.c **** //空函数,高层实现
61:macs.c **** }
62:macs.c ****
63:macs.c ****
64:macs.c **** void mlmeAssociateConfirm(SHORT_ADDR AssocShortAddress, BYTE status)
65:macs.c **** {
366 .LM18:
367 /* prologue: frame size=0 */
368 00a8 CF93 push r28
369 00aa DF93 push r29
370 /* prologue end (size=2) */
371 00ac EC01 movw r28,r24
66:macs.c **** //printf("\n------success associate------ %d\n",status);
67:macs.c **** //printf("\nthe allocated short address is %04x\n",AssocShortAddress.Val);
68:macs.c **** if(status==NO_ACK)
373 .LM19:
374 00ae 693E cpi r22,lo8(-23)
375 00b0 19F4 brne .L14
69:macs.c **** {
70:macs.c ****
71:macs.c **** printf("\n----the association request frame is no acked-----\n");
377 .LM20:
378 00b2 80E0 ldi r24,lo8(.LC1)
379 00b4 90E0 ldi r25,hi8(.LC1)
380 00b6 04C0 rjmp .L18
381 .L14:
72:macs.c ****
73:macs.c **** //mac_current_state=MAC
74:macs.c **** }
75:macs.c **** //两种情况为NO_DATA
76:macs.c **** if(status==NO_DATA)
383 .LM21:
384 00b8 6B3E cpi r22,lo8(-21)
385 00ba 29F4 brne .L15
77:macs.c **** printf("\n---didn't received the association response frame---\n");
387 .LM22:
388 00bc 80E0 ldi r24,lo8(.LC2)
389 00be 90E0 ldi r25,hi8(.LC2)
390 .L18:
391 00c0 0E94 0000 call puts
392 00c4 18C0 rjmp .L16
393 .L15:
78:macs.c ****
79:macs.c **** if(status==SUCCESS)
395 .LM23:
396 00c6 6623 tst r22
397 00c8 B1F4 brne .L16
80:macs.c **** {
81:macs.c **** mac_current_state=MAC_STATE_ASSOC_FINISHED;
399 .LM24:
400 00ca 84E0 ldi r24,lo8(4)
401 00cc 8093 0000 sts mac_current_state,r24
82:macs.c **** //mac_current_state=MAC_STATE_IDLE;
83:macs.c **** //mac_current_state_saved=MAC_STATE_IDLE;
84:macs.c **** phy_channel_state=PHY_IDLE;
403 .LM25:
404 00d0 6093 0000 sts phy_channel_state,r22
85:macs.c **** PLME_SET_TRX_STATE_request(RX_ON);
406 .LM26:
407 00d4 86E0 ldi r24,lo8(6)
408 00d6 0E94 0000 call PLME_SET_TRX_STATE_request
86:macs.c **** mac_pib_data.macShortAddress=AssocShortAddress;
410 .LM27:
411 00da D093 0000 sts (mac_pib_data+32)+1,r29
412 00de C093 0000 sts mac_pib_data+32,r28
87:macs.c **** cc2420_setshortaddress((uint16_t)mac_pib_data.macShortAddress.Val);
414 .LM28:
415 00e2 CE01 movw r24,r28
416 00e4 0E94 0000 call cc2420_setshortaddress
88:macs.c **** cc2420_setpanid((uint16_t)mac_pib_data.macPANId.Val);
418 .LM29:
419 00e8 8091 0000 lds r24,mac_pib_data+28
420 00ec 9091 0000 lds r25,(mac_pib_data+28)+1
421 00f0 0E94 0000 call cc2420_setpanid
422 00f4 03C0 rjmp .L13
423 .L16:
89:macs.c **** }
90:macs.c **** else
91:macs.c **** {
92:macs.c **** //主要工作由网络层决定
93:macs.c **** mac_current_state=MAC_STATE_ACTIVE_PASSIVE_SCAN_FINISHED;
425 .LM30:
426 00f6 8AE0 ldi r24,lo8(10)
427 00f8 8093 0000 sts mac_current_state,r24
428 .L13:
429 /* epilogue: frame size=0 */
430 00fc DF91 pop r29
431 00fe CF91 pop r28
432 0100 0895 ret
433 /* epilogue end (size=3) */
434 /* function mlmeAssociateConfirm size 45 (40) */
441 .global mlmeAssociateResponse
443 mlmeAssociateResponse:
94:macs.c **** }
95:macs.c **** }
96:macs.c ****
97:macs.c **** //**************************//
98:macs.c **** void mlmeAssociateIndication(MLME_ASSOCIATE_INDICATION mlme_associate_indication_info)
99:macs.c **** {
100:macs.c **** //协调者在收到associate request帧后通知高层
101:macs.c **** //可以post高层任务
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -