1.AF地址类型结构体位于AF.h
地址模式:
typedef enum
{
afAddrNotPresent = AddrNotPresent,
afAddr16Bit = Addr16Bit,
afAddr64Bit = Addr64Bit,
afAddrGroup = AddrGroup,
afAddrBroadcast = AddrBroadcast
} afAddrMode_t; //地址模式
typedef struct
{
union
{
uint16 shortAddr;
ZLongAddr_t extAddr;
} addr;
afAddrMode_t addrMode;
uint8 endPoint;
uint16 panId; // used for the INTER_PAN feature
} afAddrType_t; //地址类型
2.用户层zclgenericapp.c中常用函数
用户初始化函数:
void zclGenericApp_Init( byte task_id )
3.任务处理函数:
uint16 zclGenericApp_event_loop( uint8 task_id, uint16 events )
任务处理函数中的重要代码
接收消息事件:
if ( events & SYS_EVENT_MSG )
{
while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( zclGenericApp_TaskID )) ) //判断消息类型
{
switch ( MSGpkt->hdr.event )
{
case ZCL_INCOMING_MSG: //接收消息事件
// Incoming ZCL Foundation command/response messages
zclGenericApp_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt );
break;
case KEY_CHANGE: //按键触发事件
zclGenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
break;
case ZDO_STATE_CHANGE: //网络中设备状态发生改变发生的事件
zclGenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status); //获得当前的状态
// now on the network
if ( (zclGenericApp_NwkState == DEV_ZB_COORD) ||
(zclGenericApp_NwkState == DEV_ROUTER) ||
(zclGenericApp_NwkState == DEV_END_DEVICE) )
{
giGenAppScreenMode = GENERIC_MAINMODE;
zclGenericApp_LcdDisplayUpdate();
}
break;
default:
break;
}
// Release the memory
osal_msg_deallocate( (uint8 *)MSGpkt );
}
// return unprocessed events
return (events ^ SYS_EVENT_MSG);
}
4.按键处理函数
static void zclGenericApp_HandleKeys( byte shift, byte keys )
5.接收信息处理函数
static void zclGenericApp_ProcessIncomingMsg( zclIncomingMsg_t *pInMsg )
接收信息处理函数重要代码:
switch ( pInMsg->zclHdr.commandID ) //判断消息类型
{
#ifdef ZCL_READ
case ZCL_CMD_READ_RSP:
zclGenericApp_ProcessInReadRspCmd( pInMsg );
break;
#endif
#ifdef ZCL_WRITE
case ZCL_CMD_WRITE_RSP:
zclGenericApp_ProcessInWriteRspCmd( pInMsg );
break;
#endif
case ZCL_CMD_CONFIG_REPORT:
case ZCL_CMD_CONFIG_REPORT_RSP:
case ZCL_CMD_READ_REPORT_CFG:
case ZCL_CMD_READ_REPORT_CFG_RSP:
case ZCL_CMD_REPORT:
//bdb_ProcessIncomingReportingMsg( pInMsg );
break;
case ZCL_CMD_DEFAULT_RSP:
zclGenericApp_ProcessInDefaultRspCmd( pInMsg );
break;
#ifdef ZCL_DISCOVER
case ZCL_CMD_DISCOVER_CMDS_RECEIVED_RSP:
zclGenericApp_ProcessInDiscCmdsRspCmd( pInMsg );
break;
case ZCL_CMD_DISCOVER_CMDS_GEN_RSP:
zclGenericApp_ProcessInDiscCmdsRspCmd( pInMsg );
break;
case ZCL_CMD_DISCOVER_ATTRS_RSP:
zclGenericApp_ProcessInDiscAttrsRspCmd( pInMsg );
break;
case ZCL_CMD_DISCOVER_ATTRS_EXT_RSP:
zclGenericApp_ProcessInDiscAttrsExtRspCmd( pInMsg );
break;
#endif
default:
break;
}
if ( pInMsg->attrCmd )
osal_mem_free( pInMsg->attrCmd );
}
6.处理“Profile”读响应命令
static uint8 zclGenericApp_ProcessInReadRspCmd( zclIncomingMsg_t *pInMsg )
7.处理“Profile”写响应命令
static uint8 zclGenericApp_ProcessInWriteRspCmd( zclIncomingMsg_t *pInMsg )
8.处理“Profile”默认响应命令
static uint8 zclGenericApp_ProcessInDefaultRspCmd( zclIncomingMsg_t *pInMsg )
9.处理Discover命令响应命令
static uint8 zclGenericApp_ProcessInDiscCmdsRspCmd( zclIncomingMsg_t *pInMsg )
10.处理“Profile”Discover Attributes响应命令
static uint8 zclGenericApp_ProcessInDiscAttrsRspCmd( zclIncomingMsg_t *pInMsg )
11.处理“Profile”Discover Attributes扩展响应命令
static uint8 zclGenericApp_ProcessInDiscAttrsExtRspCmd( zclIncomingMsg_t *pInMsg )
12.更新LCD
void zclGenericApp_LcdDisplayUpdate( void )
13.在LCD上显示主屏幕
static void zclGenericApp_LcdDisplayMainMode( void )
14.在LCD上显示操作提示
static void zclGenericApp_LcdDisplayHelpMode( void )
15.报告调试过程的状态
static void zclGenericApp_ProcessCommissioningStatus(bdbCommissioningModeMsg_t *bdbCommissioningModeMsg)
16.处理对IdentifyTime属性的任何更改
static void zclGenericApp_ProcessIdentifyTimeChange( uint8 endpoint )
17.当添加新的绑定时调用
static void zclGenericApp_BindNotification( bdbBindNotificationData_t *data )
18.当touchlink功能使能或者禁用时调用
static void zclGenericApp_ProcessTouchlinkTargetEnable( uint8 enable )
19.从ZCL通用群集库进行回调,以将所有“基本群集属性”设置为默认值。
static void zclGenericApp_BasicResetCB( void )
20.电池电量低报警
void zclSampleApp_BatteryWarningCB( uint8 voltLevel )