wxl_sampleapp.lst
来自「TI的基于ZIGBEE2006的协议栈」· LST 代码 · 共 1,078 行 · 第 1/4 页
LST
1,078 行
\ 000000 DS 1
67
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
68 afAddrType_t WXL_SampleApp_All_DstAddr; //广播的方式
\ WXL_SampleApp_All_DstAddr:
\ 000000 DS 4
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
69 afAddrType_t WXL_SampleApp_Single_DstAddr; //短地址单播的方式
\ WXL_SampleApp_Single_DstAddr:
\ 000000 DS 4
70 /************************************end***************************************/
71
72 /******************************** 函数申明*************************************/
73
74 void WXL_SampleApp_HandleKeys( uint8 keys );
75 void WXL_SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pckt );
76 void WXL_SampleApp_SendPeriodicMessage( void );
77 void WXL_SampleApp_SendFlashMessage( uint8 *buffer );
78 void WXL_SampleApp_SendData(uint8 *buf, uint16 addr, uint8 Leng);
79
80 /************************************end***************************************/
81
82 /*********************************************************************
83 * @函数名 SampleApp_Init
84 *
85 * 函数功能: 任务初始化函数的功能是将该任务需要完成的功能的功能部件初始化,
86 * 在每一个任务的初始化函数中,必须完成的功能是要得到设置任务的任
87 * 务ID。
88 *
89 * @参 数: task_id - OS分配的任务ID. 这个ID将用于发送数据和设置时间片.
90 *
91 * @return none
92 */
\ In segment BANKED_CODE, align 1, keep-with-next
93 void WXL_SampleApp_Init( uint8 task_id )
\ WXL_SampleApp_Init:
94 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
95 WXL_SampleApp_TaskID = task_id; //任务ID
\ 000004 E9 MOV A,R1
\ 000005 90.... MOV DPTR,#WXL_SampleApp_TaskID
\ 000008 F0 MOVX @DPTR,A
96 /**********************************************************/
97 /* 通讯需要的参数 */
98 /**********************************************************/
99 WXL_SampleApp_NwkState = DEV_INIT; //网络类型
\ 000009 7401 MOV A,#0x1
\ 00000B 90.... MOV DPTR,#WXL_SampleApp_NwkState
\ 00000E F0 MOVX @DPTR,A
100 WXL_SampleApp_TransID = 0; //唯一的一个消息ID(计数器)
\ 00000F E4 CLR A
\ 000010 90.... MOV DPTR,#WXL_SampleApp_TransID
\ 000013 F0 MOVX @DPTR,A
101
102 // 设置发送数据的方式和目的地址
103 // 广播到所有的设备
104
105 WXL_SampleApp_All_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;//广播的方式
\ 000014 740F MOV A,#0xf
\ 000016 90.... MOV DPTR,#(WXL_SampleApp_All_DstAddr + 2)
\ 000019 F0 MOVX @DPTR,A
106 WXL_SampleApp_All_DstAddr.endPoint = WXL_SAMPLEAPP_ENDPOINT;
\ 00001A 7414 MOV A,#0x14
\ 00001C 90.... MOV DPTR,#(WXL_SampleApp_All_DstAddr + 3)
\ 00001F F0 MOVX @DPTR,A
107 WXL_SampleApp_All_DstAddr.addr.shortAddr = 0xFFFF;
\ 000020 90.... MOV DPTR,#WXL_SampleApp_All_DstAddr
\ 000023 74FF MOV A,#-0x1
\ 000025 F0 MOVX @DPTR,A
\ 000026 A3 INC DPTR
\ 000027 F0 MOVX @DPTR,A
108
109 // 单播到一个设备
110 WXL_SampleApp_Single_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;;
\ 000028 7402 MOV A,#0x2
\ 00002A 90.... MOV DPTR,#(WXL_SampleApp_Single_DstAddr + 2)
\ 00002D F0 MOVX @DPTR,A
111 WXL_SampleApp_Single_DstAddr.endPoint = WXL_SAMPLEAPP_ENDPOINT;
\ 00002E 7414 MOV A,#0x14
\ 000030 90.... MOV DPTR,#(WXL_SampleApp_Single_DstAddr + 3)
\ 000033 F0 MOVX @DPTR,A
112
113 // 设置 endpoint description.
114 WXL_SampleApp_epDesc.endPoint = WXL_SAMPLEAPP_ENDPOINT;
\ 000034 90.... MOV DPTR,#WXL_SampleApp_epDesc
\ 000037 F0 MOVX @DPTR,A
115 WXL_SampleApp_epDesc.task_id = &WXL_SampleApp_TaskID;
\ 000038 90.... MOV DPTR,#(WXL_SampleApp_epDesc + 1)
\ 00003B 74.. MOV A,#(WXL_SampleApp_TaskID & 0xff)
\ 00003D F0 MOVX @DPTR,A
\ 00003E A3 INC DPTR
\ 00003F 74.. MOV A,#((WXL_SampleApp_TaskID >> 8) & 0xff)
\ 000041 F0 MOVX @DPTR,A
116 WXL_SampleApp_epDesc.simpleDesc
117 = (SimpleDescriptionFormat_t *)&WXL_SampleApp_SimpleDesc;
\ 000042 90.... MOV DPTR,#(WXL_SampleApp_epDesc + 3)
\ 000045 74.. MOV A,#(WXL_SampleApp_SimpleDesc & 0xff)
\ 000047 F0 MOVX @DPTR,A
\ 000048 A3 INC DPTR
\ 000049 74.. MOV A,#((WXL_SampleApp_SimpleDesc >> 8) & 0xff)
\ 00004B F0 MOVX @DPTR,A
118 WXL_SampleApp_epDesc.latencyReq = noLatencyReqs;
\ 00004C E4 CLR A
\ 00004D 90.... MOV DPTR,#(WXL_SampleApp_epDesc + 5)
\ 000050 F0 MOVX @DPTR,A
119
120 // 登记endpoint description 到 AF
121 afRegister( &WXL_SampleApp_epDesc );
\ 000051 ; Setup parameters for call to function afRegister
\ 000051 7A.. MOV R2,#(WXL_SampleApp_epDesc & 0xff)
\ 000053 7B.. MOV R3,#((WXL_SampleApp_epDesc >> 8) & 0xff)
\ 000055 90.... MOV DPTR,#(afRegister & 0xffff)
\ 000058 74.. MOV A,#((afRegister >> 16) & 0xff)
\ 00005A 12.... LCALL ?BCALL ; Banked call to: DPTR()
122
123 // 登记所有的按键时间
124 RegisterForKeys( WXL_SampleApp_TaskID );
\ 00005D ; Setup parameters for call to function RegisterForKeys
\ 00005D 90.... MOV DPTR,#WXL_SampleApp_TaskID
\ 000060 E0 MOVX A,@DPTR
\ 000061 F9 MOV R1,A
\ 000062 90.... MOV DPTR,#(RegisterForKeys & 0xffff)
\ 000065 74.. MOV A,#((RegisterForKeys >> 16) & 0xff)
\ 000067 12.... LCALL ?BCALL ; Banked call to: DPTR()
125 }
\ 00006A REQUIRE ?Subroutine1
\ 00006A ; // Fall through to label ?Subroutine1
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 D083 POP DPH
\ 000002 D082 POP DPL
\ 000004 02.... LJMP ?BRET
126
127 /*********************************************************************
128 * @函数名 WXL_SampleApp_ProcessEvent
129 *
130 * 函数功能: 一般应用任务事件处理,这个函数是处理所有的事件到任务,事件包括
131 * 时间片、消息和所有其他使用者定义过的时间。
132 *
133 * @参 数: task_id - OS分配的任务ID. 这个ID将用于发送数据和设置时间片.
134 * events - 处理的事件
135 *
136 * @return none
137 */
\ In segment BANKED_CODE, align 1, keep-with-next
138 uint16 WXL_SampleApp_ProcessEvent( uint8 task_id, uint16 events )
\ WXL_SampleApp_ProcessEvent:
139 {
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
\ 000005 8A.. MOV ?V0 + 0,R2
\ 000007 8B.. MOV ?V0 + 1,R3
140 afIncomingMSGPacket_t *MSGpkt;
141
142 if ( events & SYS_EVENT_MSG ) //系统信息,
\ 000009 7480 MOV A,#-0x80
\ 00000B 55.. ANL A,?V0 + 1
\ 00000D F9 MOV R1,A
\ 00000E E4 CLR A
\ 00000F 7001 JNZ ??WXL_SampleApp_ProcessEvent_0
\ 000011 E9 MOV A,R1
\ ??WXL_SampleApp_ProcessEvent_0:
\ 000012 606F JZ ??WXL_SampleApp_ProcessEvent_1
143 {
144 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( WXL_SampleApp_TaskID ); //OS发送过来的信息
\ 000014 ; Setup parameters for call to function osal_msg_receive
\ 000014 8016 SJMP ??WXL_SampleApp_ProcessEvent_2
145 while ( MSGpkt )
146 {
147 switch ( MSGpkt->hdr.event )
148 {
149 // 按键事件
150 case KEY_CHANGE:
151 //按键处理函数
152 WXL_SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->keys );
153 break;
154
155 // 接收数据事件
156 case AF_INCOMING_MSG_CMD:
157 //接收数据的处理函数
158 WXL_SampleApp_MessageMSGCB( MSGpkt );
159 break;
160
161 // 网络状态发生变化时间
162 case ZDO_STATE_CHANGE:
163 WXL_SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status); //获取网络状态
\ ??WXL_SampleApp_ProcessEvent_3:
\ 000016 8E82 MOV DPL,R6
\ 000018 8F83 MOV DPH,R7
\ 00001A A3 INC DPTR
\ 00001B E0 MOVX A,@DPTR
\ 00001C 90.... MOV DPTR,#WXL_SampleApp_NwkState
\ 00001F F0 MOVX @DPTR,A
164 if ( (WXL_SampleApp_NwkState == DEV_ZB_COORD) //判断网络类型
165 || (WXL_SampleApp_NwkState == DEV_ROUTER)
166 || (WXL_SampleApp_NwkState == DEV_END_DEVICE) )
167 {
168
169 }
170 else
171 {
172 // 设备不属于这个网络
173 }
174 break;
175
176 default:
177 break;
178 }
179
180 // 释放存储器
181 osal_msg_deallocate( (uint8 *)MSGpkt );
\ ??WXL_SampleApp_ProcessEvent_4:
\ 000020 ; Setup parameters for call to function osal_msg_deallocate
\ 000020 EE MOV A,R6
\ 000021 FA MOV R2,A
\ 000022 EF MOV A,R7
\ 000023 FB MOV R3,A
\ 000024 90.... MOV DPTR,#(osal_msg_deallocate & 0xffff)
\ 000027 74.. MOV A,#((osal_msg_deallocate >> 16) & 0xff)
\ 000029 12.... LCALL ?BCALL ; Banked call to: DPTR()
182
183 // Next - 如果有一个空闲的任务
184 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( WXL_SampleApp_TaskID );
\ 00002C ; Setup parameters for call to function osal_msg_receive
\ ??WXL_SampleApp_ProcessEvent_2:
\ 00002C 90.... MOV DPTR,#WXL_SampleApp_TaskID
\ 00002F E0 MOVX A,@DPTR
\ 000030 F9 MOV R1,A
\ 000031 90.... MOV DPTR,#(osal_msg_receive & 0xffff)
\ 000034 74.. MOV A,#((osal_msg_receive >> 16) & 0xff)
\ 000036 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000039 8A.. MOV ?V0 + 2,R2
\ 00003B 8B.. MOV ?V0 + 3,R3
\ 00003D AE.. MOV R6,?V0 + 2
\ 00003F AF.. MOV R7,?V0 + 3
\ 000041 EE MOV A,R6
\ 000042 7001 JNZ ??WXL_SampleApp_ProcessEvent_5
\ 000044 EF MOV A,R7
\ ??WXL_SampleApp_ProcessEvent_5:
\ 000045 6033 JZ ??WXL_SampleApp_ProcessEvent_6
\ 000047 8E82 MOV DPL,R6
\ 000049 8F83 MOV DPH,R7
\ 00004B E0 MOVX A,@DPTR
\ 00004C 12.... LCALL ?UC_SWITCH_SPARSE
\ `?<Jumptable for WXL_SampleApp_ProcessEvent>_0`:
\ 00004F 00 DB 0
\ 000050 03 DB 3
\ 000051 1A DB 26
\ 000052 .... DW ??WXL_SampleApp_ProcessEvent_7
\ 000054 C0 DB 192
\ 000055 .... DW ??WXL_SampleApp_ProcessEvent_8
\ 000057 D1 DB 209
\ 000058 .... DW ??WXL_SampleApp_ProcessEvent_3
\ 00005A .... DW ??WXL_SampleApp_ProcessEvent_4
\ ??WXL_SampleApp_ProcessEvent_8:
\ 00005C ; Setup parameters for call to function WXL_SampleApp_HandleKeys
\ 00005C 8E82 MOV DPL,R6
\ 00005E 8F83 MOV DPH,R7
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?