📄 genericapp.s51
字号:
// 301 /*********************************************************************
// 302 * @fn GenericApp_HandleKeys
// 303 *
// 304 * @brief Handles all key events for this device.
// 305 *
// 306 * @param shift - true if in shift/alt.
// 307 * @param keys - bit field for key events. Valid entries:
// 308 * HAL_KEY_SW_4
// 309 * HAL_KEY_SW_3
// 310 * HAL_KEY_SW_2
// 311 * HAL_KEY_SW_1
// 312 *
// 313 * @return none
// 314 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 315 void GenericApp_HandleKeys( byte shift, byte keys )
GenericApp_HandleKeys:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function GenericApp_HandleKeys
// 316 {
FUNCALL GenericApp_HandleKeys, ZDApp_SendEndDeviceBindReq
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL GenericApp_HandleKeys, ZDApp_AutoFindDestinationEx
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,R2
MOV R6,A
// 317 // Shift is used to make each button/switch dual purpose.
// 318 if ( shift )
MOV A,R1
JNZ ??GenericApp_HandleKeys_0
// 319 {
// 320 if ( keys & HAL_KEY_SW_1 )
// 321 {
// 322 }
// 323 if ( keys & HAL_KEY_SW_2 )
// 324 {
// 325 }
// 326 if ( keys & HAL_KEY_SW_3 )
// 327 {
// 328 }
// 329 if ( keys & HAL_KEY_SW_4 )
// 330 {
// 331 }
// 332 }
// 333 else
// 334 {
// 335 if ( keys & HAL_KEY_SW_1 )
// 336 {
// 337 }
// 338
// 339 if ( keys & HAL_KEY_SW_2 )
MOV A,R6
MOV C,0xE0 /* A */.1
JNC ??GenericApp_HandleKeys_1
// 340 {
// 341 // Initiate an End Device Bind Request for the mandatory endpoint
// 342 ZDApp_SendEndDeviceBindReq( GenericApp_epDesc.endPoint );
; Setup parameters for call to function ZDApp_SendEndDeviceBindReq
MOV DPTR,#GenericApp_epDesc
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(ZDApp_SendEndDeviceBindReq & 0xffff)
MOV A,#((ZDApp_SendEndDeviceBindReq >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 343 }
// 344
// 345 if ( keys & HAL_KEY_SW_3 )
// 346 {
// 347 }
// 348
// 349 if ( keys & HAL_KEY_SW_4 )
??GenericApp_HandleKeys_1:
MOV A,R6
MOV C,0xE0 /* A */.3
JNC ??GenericApp_HandleKeys_0
// 350 {
// 351 // Initiate a Match Description Request (Service Discovery)
// 352 // for the mandatory endpoint
// 353 ZDApp_AutoFindDestination( GenericApp_epDesc.endPoint );
; Setup parameters for call to function ZDApp_AutoFindDestinationEx
MOV R2,#0x0
MOV R3,#0x0
MOV DPTR,#GenericApp_epDesc
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(ZDApp_AutoFindDestinationEx & 0xffff)
MOV A,#((ZDApp_AutoFindDestinationEx >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 354 }
// 355 }
// 356 }
??GenericApp_HandleKeys_0:
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 357
// 358 /*********************************************************************
// 359 * LOCAL FUNCTIONS
// 360 */
// 361
// 362 /*********************************************************************
// 363 * @fn GenericApp_MessageMSGCB
// 364 *
// 365 * @brief Data message processor callback. This function processes
// 366 * any incoming data - probably from other devices. So, based
// 367 * on cluster ID, perform the intended action.
// 368 *
// 369 * @param none
// 370 *
// 371 * @return none
// 372 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 373 void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
GenericApp_MessageMSGCB:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function GenericApp_MessageMSGCB
// 374 {
; Saved register size: 0
; Auto size: 0
// 375 switch ( pkt->clusterId )
// 376 {
// 377 case GENERICAPP_CLUSTERID:
// 378 // "the" message
// 379 #if defined( LCD_SUPPORTED )
// 380 HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );
// 381 #elif defined( WIN32 )
// 382 WPRINTSTR( pkt->cmd.Data );
// 383 #endif
// 384 break;
// 385 }
// 386 }
LJMP ?BRET
CFI EndBlock cfiBlock3
// 387
// 388 /*********************************************************************
// 389 * @fn GenericApp_SendTheMessage
// 390 *
// 391 * @brief Send "the" message.
// 392 *
// 393 * @param none
// 394 *
// 395 * @return none
// 396 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 397 void GenericApp_SendTheMessage( void )
GenericApp_SendTheMessage:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function GenericApp_SendTheMessage
// 398 {
FUNCALL GenericApp_SendTheMessage, osal_strlen
LOCFRAME XSTACK, 27, STACK
ARGFRAME XSTACK, 27, STACK
FUNCALL GenericApp_SendTheMessage, AF_DataRequest
LOCFRAME XSTACK, 31, STACK
ARGFRAME XSTACK, 31, STACK
MOV A,#-0xa
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 V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 12
MOV A,#-0xc
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 22)
// 399 char theMessageData[] = "Hello World";
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R4,DPL
MOV R5,DPH
MOV DPH,#((`?<Constant "Hello World">` >> 8) & 0xff)
MOV DPL,#(`?<Constant "Hello World">` & 0xff)
MOV A,#0xc
LCALL ?MOVE_LONG8_XDATA_XDATA
// 400
// 401 if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,
// 402 GENERICAPP_CLUSTERID,
// 403 (byte)osal_strlen( theMessageData ) + 1,
// 404 (byte *)&theMessageData,
// 405 &GenericApp_TransID,
// 406 AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
; Setup parameters for call to function AF_DataRequest
MOV ?V0 + 0,#0xa
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_ONE
CFI CFA_XSP16 add(XSP16, 23)
MOV ?V0 + 0,#(GenericApp_TransID & 0xff)
MOV ?V0 + 1,#((GenericApp_TransID >> 8) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 25)
MOV A,#0x3
LCALL ?XSTACK_DISP0_8
MOV ?V0 + 0,DPL
MOV ?V0 + 1,DPH
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 27)
; Setup parameters for call to function osal_strlen
MOV A,#0x5
LCALL ?XSTACK_DISP0_8
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(osal_strlen & 0xffff)
MOV A,#((osal_strlen >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R2
MOV R0,A
MOV A,#0x1
ADD A,R0
MOV ?V0 + 0,A
CLR A
ADDC A,#0x0
MOV ?V0 + 1,A
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 29)
MOV ?V0 + 0,#0x1
MOV ?V0 + 1,#0x0
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 31)
MOV R1,#0x20
MOV R4,#(GenericApp_epDesc & 0xff)
MOV R5,#((GenericApp_epDesc >> 8) & 0xff)
MOV R2,#(GenericApp_DstAddr & 0xff)
MOV R3,#((GenericApp_DstAddr >> 8) & 0xff)
MOV DPTR,#(AF_DataRequest & 0xffff)
MOV A,#((AF_DataRequest >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x9
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 22)
// 407 {
// 408 // Successfully requested to be sent.
// 409 }
// 410 else
// 411 {
// 412 // Error occurred in request to send.
// 413 }
// 414 }
MOV A,#0xc
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 10)
MOV R7,#0x2
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock4
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for <Constant "Hello World">>`:
DB "Hello World"
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for GenericApp_ClusterList>`:
DW 1
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for GenericApp_SimpleDesc>`:
DB 10
DW 3844, 1
DB 0, 1
DW GenericApp_ClusterList
DB 1
DW GenericApp_ClusterList
END
// 415
// 416 /*********************************************************************
// 417 *********************************************************************/
//
// 568 bytes in segment BANKED_CODE
// 26 bytes in segment XDATA_I
// 26 bytes in segment XDATA_ID
// 13 bytes in segment XDATA_Z
//
// 594 bytes of CODE memory
// 39 bytes of XDATA memory
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -