📄 simplecontroller.s51
字号:
// 23 #include "ZComDef.h"
// 24 #include "OSAL.h"
// 25 #include "sapi.h"
// 26 #include "hal_key.h"
// 27 #include "hal_led.h"
// 28
// 29 #include "SimpleApp.h"
// 30
// 31 /*********************************************************************
// 32 * CONSTANTS
// 33 */
// 34
// 35 // Application States
// 36 #define APP_INIT 0
// 37 #define APP_START 1
// 38
// 39 // Application osal event identifiers
// 40 #define MY_START_EVT 0x0001
// 41 /*********************************************************************
// 42 * TYPEDEFS
// 43 */
// 44
// 45 /*********************************************************************
// 46 * LOCAL VARIABLES
// 47 */
// 48
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 49 static uint8 myAppState = APP_INIT;
??myAppState:
DS 1
RSEG XDATA_I:XDATA:NOROOT(0)
// 50 static uint8 myStartRetryDelay = 10;
??myStartRetryDelay:
DS 1
REQUIRE `?<Initializer for myStartRetryDelay>`
REQUIRE __INIT_XDATA_I
RSEG XDATA_I:XDATA:NOROOT(0)
// 51 static uint8 myAllowBindTimeout = 10;
??myAllowBindTimeout:
DS 1
REQUIRE `?<Initializer for myAllowBindTimeout>`
REQUIRE __INIT_XDATA_I
// 52
// 53 /*********************************************************************
// 54 * GLOBAL VARIABLES
// 55 */
// 56
// 57 // Inputs and Outputs for Switch device
// 58 #define NUM_OUT_CMD_CONTROLLER 0
// 59 #define NUM_IN_CMD_CONTROLLER 1
// 60
// 61 // List of output and input commands for Switch device
RSEG XDATA_I:XDATA:NOROOT(0)
// 62 const cId_t zb_InCmdList[NUM_IN_CMD_CONTROLLER] =
zb_InCmdList:
DS 2
REQUIRE `?<Initializer for zb_InCmdList>`
REQUIRE __INIT_XDATA_I
// 63 {
// 64 TOGGLE_LIGHT_CMD_ID
// 65 };
// 66
// 67 // Define SimpleDescriptor for Switch device
RSEG XDATA_I:XDATA:NOROOT(0)
// 68 const SimpleDescriptionFormat_t zb_SimpleDesc =
zb_SimpleDesc:
DS 12
REQUIRE `?<Initializer for zb_SimpleDesc>`
REQUIRE __INIT_XDATA_I
// 69 {
// 70 MY_ENDPOINT_ID, // Endpoint
// 71 MY_PROFILE_ID, // Profile ID
// 72 DEV_ID_CONTROLLER, // Device ID
// 73 DEVICE_VERSION_CONTROLLER, // Device Version
// 74 0, // Reserved
// 75 NUM_IN_CMD_CONTROLLER, // Number of Input Commands
// 76 (cId_t *) zb_InCmdList, // Input Command List
// 77 NUM_OUT_CMD_CONTROLLER, // Number of Output Commands
// 78 (cId_t *) NULL // Output Command List
// 79 };
// 80
// 81 /******************************************************************************
// 82 * @fn zb_HandleOsalEvent
// 83 *
// 84 * @brief The zb_HandleOsalEvent function is called by the operating
// 85 * system when a task event is set
// 86 *
// 87 * @param event - Bitmask containing the events that have been set
// 88 *
// 89 * @return none
// 90 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 91 void zb_HandleOsalEvent( uint16 event )
zb_HandleOsalEvent:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function zb_HandleOsalEvent
// 92 {
; Saved register size: 0
; Auto size: 0
// 93
// 94 }
LJMP ?BRET
CFI EndBlock cfiBlock0
// 95 /*********************************************************************
// 96 * @fn zb_HandleKeys
// 97 *
// 98 * @brief Handles all key events for this device.
// 99 *
// 100 * @param shift - true if in shift/alt.
// 101 * @param keys - bit field for key events. Valid entries:
// 102 * EVAL_SW4
// 103 * EVAL_SW3
// 104 * EVAL_SW2
// 105 * EVAL_SW1
// 106 *
// 107 * @return none
// 108 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 109 void zb_HandleKeys( uint8 shift, uint8 keys )
zb_HandleKeys:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function zb_HandleKeys
// 110 {
FUNCALL zb_HandleKeys, zb_ReadConfiguration
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL zb_HandleKeys, zb_WriteConfiguration
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL zb_HandleKeys, zb_ReadConfiguration
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL zb_HandleKeys, zb_WriteConfiguration
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL zb_HandleKeys, zb_SystemReset
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL zb_HandleKeys, zb_AllowBind
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL zb_HandleKeys, zb_ReadConfiguration
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL zb_HandleKeys, zb_WriteConfiguration
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL zb_HandleKeys, zb_ReadConfiguration
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL zb_HandleKeys, zb_WriteConfiguration
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL zb_HandleKeys, zb_SystemReset
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, 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: 2
MOV A,#-0x2
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 11)
MOV A,R2
MOV R6,A
// 111 uint8 startOptions;
// 112 uint8 logicalType;
// 113
// 114 // Shift is used to make each button/switch dual purpose.
// 115 if ( shift )
MOV A,R1
JZ $+5
LJMP ??zb_HandleKeys_0 & 0xFFFF
// 116 {
// 117 if ( keys & HAL_KEY_SW_1 )
// 118 {
// 119 }
// 120 if ( keys & HAL_KEY_SW_2 )
// 121 {
// 122 }
// 123 if ( keys & HAL_KEY_SW_3 )
// 124 {
// 125 }
// 126 if ( keys & HAL_KEY_SW_4 )
// 127 {
// 128 }
// 129 }
// 130 else
// 131 {
// 132 if ( keys & HAL_KEY_SW_1 )
MOV A,R6
MOV C,0xE0 /* A */.0
JNC ??zb_HandleKeys_1
// 133 {
// 134 if ( myAppState == APP_INIT )
MOV DPTR,#??myAppState
MOVX A,@DPTR
JNZ ??zb_HandleKeys_2
// 135 {
// 136 // In the init state, keys are used to indicate the logical mode.
// 137 // Key 1 starts device as a coordinator
// 138
// 139 zb_ReadConfiguration( ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType );
; Setup parameters for call to function zb_ReadConfiguration
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R4,DPL
MOV R5,DPH
MOV R2,#0x1
MOV R1,#-0x79
MOV DPTR,#(zb_ReadConfiguration & 0xffff)
MOV A,#((zb_ReadConfiguration >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 140 if ( logicalType != ZG_DEVICETYPE_ENDDEVICE )
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
XRL A,#0x2
JZ ??zb_HandleKeys_3
// 141 {
// 142 logicalType = ZG_DEVICETYPE_COORDINATOR;
CLR A
MOVX @DPTR,A
// 143 zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType);
; Setup parameters for call to function zb_WriteConfiguration
MOV R4,DPL
MOV R5,DPH
MOV R2,#0x1
MOV R1,#-0x79
MOV DPTR,#(zb_WriteConfiguration & 0xffff)
MOV A,#((zb_WriteConfiguration >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 144 }
// 145
// 146 // Do more configuration if necessary and then restart device with auto-start bit set
// 147 // write endpoint to simple desc...dont pass it in start req..then reset
// 148
// 149
// 150 zb_ReadConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );
??zb_HandleKeys_3:
; Setup parameters for call to function zb_ReadConfiguration
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV R2,#0x1
MOV R1,#0x3
MOV DPTR,#(zb_ReadConfiguration & 0xffff)
MOV A,#((zb_ReadConfiguration >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 151 startOptions = ZCD_STARTOPT_AUTO_START;
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine0 & 0xFFFF
// 152 zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );
??CrossCallReturnLabel_0:
LCALL ?BCALL ; Banked call to: DPTR()
// 153 zb_SystemReset();
; Setup parameters for call to function zb_SystemReset
MOV DPTR,#(zb_SystemReset & 0xffff)
MOV A,#((zb_SystemReset >> 16) & 0xff)
SJMP ??zb_HandleKeys_4
// 154
// 155 }
// 156 else
// 157 {
// 158 // Initiate a binding
// 159 zb_AllowBind( myAllowBindTimeout );
??zb_HandleKeys_2:
; Setup parameters for call to function zb_AllowBind
MOV DPTR,#??myAllowBindTimeout
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(zb_AllowBind & 0xffff)
MOV A,#((zb_AllowBind >> 16) & 0xff)
??zb_HandleKeys_4:
LCALL ?BCALL ; Banked call to: DPTR()
// 160 }
// 161 }
// 162 if ( keys & HAL_KEY_SW_2 )
??zb_HandleKeys_1:
MOV A,R6
MOV C,0xE0 /* A */.1
JNC ??zb_HandleKeys_0
// 163 {
// 164 if ( myAppState == APP_INIT )
MOV DPTR,#??myAppState
MOVX A,@DPTR
JNZ ??zb_HandleKeys_0
// 165 {
// 166 // In the init state, keys are used to indicate the logical mode.
// 167 // Key 2 starts device as a router
// 168
// 169 zb_ReadConfiguration( ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType );
; Setup parameters for call to function zb_ReadConfiguration
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R4,DPL
MOV R5,DPH
MOV R2,#0x1
MOV R1,#-0x79
MOV DPTR,#(zb_ReadConfiguration & 0xffff)
MOV A,#((zb_ReadConfiguration >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 170 if ( logicalType != ZG_DEVICETYPE_ENDDEVICE )
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
XRL A,#0x2
JZ ??zb_HandleKeys_5
// 171 {
// 172 logicalType = ZG_DEVICETYPE_ROUTER;
MOV A,#0x1
MOVX @DPTR,A
// 173 zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType);
; Setup parameters for call to function zb_WriteConfiguration
MOV R4,DPL
MOV R5,DPH
MOV R2,A
MOV R1,#-0x79
MOV DPTR,#(zb_WriteConfiguration & 0xffff)
MOV A,#((zb_WriteConfiguration >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 174 }
// 175
// 176 zb_ReadConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );
??zb_HandleKeys_5:
; Setup parameters for call to function zb_ReadConfiguration
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV R2,#0x1
MOV R1,#0x3
MOV DPTR,#(zb_ReadConfiguration & 0xffff)
MOV A,#((zb_ReadConfiguration >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 177 startOptions = ZCD_STARTOPT_AUTO_START;
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine0 & 0xFFFF
// 178 zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );
??CrossCallReturnLabel_1:
LCALL ?BCALL ; Banked call to: DPTR()
// 179 zb_SystemReset();
; Setup parameters for call to function zb_SystemReset
MOV DPTR,#(zb_SystemReset & 0xffff)
MOV A,#((zb_SystemReset >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 180 }
// 181 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -