sapi.s51
来自「CC2430上开关控制灯和温度传感器采集两个例子」· S51 代码 · 共 805 行 · 第 1/3 页
S51
805 行
// unsigned char volatile __sfr WDCTL
WDCTL:
DS 1
// 29 #include "nwk_util.h"
// 30 #include "ZDApp.h"
// 31 #include "ZDProfile.h"
// 32 #include "ZDObject.h"
// 33 #include "hal_drivers.h"
// 34 #include "hal_led.h"
// 35 #include "hal_key.h"
// 36 #include "sapi.h"
// 37 #include "MT_SAPI.h"
// 38
// 39 extern uint8 zgStartDelay;
// 40 extern uint8 zgSapiEndpoint;
// 41 /*********************************************************************
// 42 * CONSTANTS
// 43 */
// 44
// 45 // Message ID's for application user messages must be in 0xE0-0xEF range
// 46 #define ZB_USER_MSG 0xE0
// 47 #define SAPICB_DATA_CNF 0xE0
// 48 #define SAPICB_BIND_CNF 0xE1
// 49 #define SAPICB_START_CNF 0xE2
// 50
// 51 /*********************************************************************
// 52 * TYPEDEFS
// 53 */
// 54
// 55
// 56 /*********************************************************************
// 57 * GLOBAL VARIABLES
// 58 */
// 59
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 60 endPointDesc_t sapi_epDesc;
sapi_epDesc:
DS 6
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 61 static uint8 sapi_TaskID;
??sapi_TaskID:
DS 1
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 62 static uint16 sapi_bindInProgress;
??sapi_bindInProgress:
DS 2
// 63 /*********************************************************************
// 64 * LOCAL FUNCTIONS
// 65 */
// 66
// 67 static void SAPI_SendCback( uint8 event, uint8 status, uint16 data );
// 68
// 69 static void SAPI_StartConfirm( uint8 status );
// 70 static void SAPI_SendDataConfirm( uint8 handle, uint8 status );
// 71 static void SAPI_BindConfirm( uint16 commandId, uint8 status );
// 72 static void SAPI_FindDeviceConfirm( uint8 searchType,
// 73 uint8 *searchKey, uint8 *result );
// 74 static void SAPI_ReceiveDataIndication( uint16 source,
// 75 uint16 command, uint16 len, uint8 *pData );
// 76 static void SAPI_AllowBindConfirm( uint16 source );
// 77
// 78 /******************************************************************************
// 79 * @fn zb_SystemReset
// 80 *
// 81 * @brief The zb_SystemReset function reboots the ZigBee device. The
// 82 * zb_SystemReset function can be called after a call to
// 83 * zb_WriteConfiguration to restart Z-Stack with the updated
// 84 * configuration.
// 85 *
// 86 * @param none
// 87 *
// 88 * @return none
// 89 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 90 void zb_SystemReset ( void )
zb_SystemReset:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function zb_SystemReset
// 91 {
; Saved register size: 0
; Auto size: 0
// 92 SystemReset();
CLR 0xa8.7
MOV 0xc9,#-0x55
MOV 0xc9,#0x5b
??zb_SystemReset_0:
NOP
SJMP ??zb_SystemReset_0
CFI EndBlock cfiBlock0
// 93 }
// 94
// 95 /******************************************************************************
// 96 * @fn zb_StartRequest
// 97 *
// 98 * @brief The zb_StartRequest function starts the ZigBee stack. When the
// 99 * ZigBee stack starts, the device reads configuration parameters
// 100 * from Nonvolatile memory and the device joins its network. The
// 101 * ZigBee stack calls the zb_StartConrifm callback function when
// 102 * the startup process completes.
// 103 *
// 104 * @param none
// 105 *
// 106 * @return none
// 107 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 108 void zb_StartRequest()
zb_StartRequest:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function zb_StartRequest
// 109 {
FUNCALL zb_StartRequest, zb_ReadConfiguration
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL zb_StartRequest, ??SAPI_SendCback
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL zb_StartRequest, ZDOInitDevice
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, 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: 1
MOV A,#-0x1
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 10)
// 110 uint8 logicalType;
// 111
// 112 // Start the device
// 113 // start delay = min(NWK_START_DELAY, zgStartDelay) + rand() - only for fresh start, not restore
// 114 if ( zgStartDelay < NWK_START_DELAY )
MOV DPTR,#zgStartDelay
MOVX A,@DPTR
CLR C
SUBB A,#0x64
JNC ??zb_StartRequest_0
// 115 zgStartDelay = 0;
CLR A
SJMP ??zb_StartRequest_1
// 116 else
// 117 zgStartDelay -= NWK_START_DELAY;
??zb_StartRequest_0:
MOVX A,@DPTR
ADD A,#-0x64
??zb_StartRequest_1:
MOVX @DPTR,A
// 118
// 119 // check that bad combinations of compile flag definitions and device type
// 120 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()
// 121 if ( ( logicalType > ZG_DEVICETYPE_ENDDEVICE ) ||
// 122 #if defined( RTR_NWK )
// 123 #if defined( ZDO_COORDINATOR )
// 124 // Only RTR or Coord possible
// 125 ( logicalType == ZG_DEVICETYPE_ENDDEVICE ) ||
// 126 #else
// 127 // Only RTR possible
// 128 ( logicalType != ZG_DEVICETYPE_ROUTER ) ||
// 129 #endif
// 130 #else
// 131 #if defined( ZDO_COORDINATOR )
// 132 // Error
// 133 ( 1 ) ||
// 134 #else
// 135 // only ED possible
// 136 ( logicalType != ZG_DEVICETYPE_ENDDEVICE ) ||
// 137 #endif
// 138 #endif
// 139 ( 0 ) )
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
CLR C
SUBB A,#0x3
JNC ??zb_StartRequest_2
MOVX A,@DPTR
XRL A,#0x2
JNZ ??zb_StartRequest_3
// 140 {
// 141 // error configuration
// 142 SAPI_SendCback( SAPICB_START_CNF, ZInvalidParameter, 0 );
??zb_StartRequest_2:
; Setup parameters for call to function SAPI_SendCback
MOV R4,#0x0
MOV R5,#0x0
MOV R2,#0x2
MOV R1,#-0x1e
MOV DPTR,#(??SAPI_SendCback & 0xffff)
MOV A,#((??SAPI_SendCback >> 16) & 0xff)
SJMP ??zb_StartRequest_4
// 143 }
// 144 else
// 145 {
// 146 ZDOInitDevice(zgStartDelay);
??zb_StartRequest_3:
; Setup parameters for call to function ZDOInitDevice
MOV DPTR,#zgStartDelay
MOVX A,@DPTR
MOV R2,A
MOV R3,#0x0
MOV DPTR,#(ZDOInitDevice & 0xffff)
MOV A,#((ZDOInitDevice >> 16) & 0xff)
CFI EndBlock cfiBlock1
??zb_StartRequest_4:
REQUIRE ?Subroutine13
; // Fall through to label ?Subroutine13
// 147 }
// 148
// 149 return;
// 150 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine13:
CFI Block cfiBlock2 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
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)))
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x1
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 9)
??Subroutine13_0:
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 151
// 152 /******************************************************************************
// 153 * @fn zb_BindDevice
// 154 *
// 155 * @brief The zb_BindDevice function establishes or removes a 慴inding
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?