Commit b1dbfcb7 authored by hanxu's avatar hanxu

2022.4.1 泰凌微临时版本1.1.0备份。

parent 4f207db8
...@@ -329,7 +329,7 @@ const af_simple_descriptor_t sampleTestDesc = ...@@ -329,7 +329,7 @@ const af_simple_descriptor_t sampleTestDesc =
zcl_basicAttr_t g_zcl_basicAttrs = zcl_basicAttr_t g_zcl_basicAttrs =
{ {
.zclVersion = 0x03, .zclVersion = 0x03,
.appVersion = 0x28, .appVersion = 0x29,
.stackVersion = 0x02, .stackVersion = 0x02,
.hwVersion = 0x20, .hwVersion = 0x20,
.manuName = ZCL_BASIC_MFG_NAME, .manuName = ZCL_BASIC_MFG_NAME,
......
...@@ -2,20 +2,61 @@ ...@@ -2,20 +2,61 @@
#define __IKONKE_ENDPOINT_CONFIG_H___ #define __IKONKE_ENDPOINT_CONFIG_H___
#include "types.h" #include "types.h"
/** /**
* @brief Defined for basic cluster attributes * @brief Defined for basic cluster attributes
*/ */
//#define SINGLE_LIGHT_PANEL
//#define DUAL_LIGHT_PANEL
#define THREE_LIGHT_PANEL
//#define FOUR_LIGHT_PANEL
#ifdef SINGLE_LIGHT_PANEL
#define SUPPORT_MAX_EP 6
#define Support_Endpoint_Array { 1 }
#define Support_Endpoint_Num 1
// Array of profile ids
#define FIXED_PROFILE_IDS { 260 }
// Array of device ids
#define FIXED_DEVICE_IDS { HA_DEV_ONOFF_LIGHT_SWITCH }
#endif
#ifdef DUAL_LIGHT_PANEL
#define SUPPORT_MAX_EP 6 #define SUPPORT_MAX_EP 6
#define Support_Endpoint_Array {1 ,2 ,3 ,4 } #define Support_Endpoint_Array { 1, 2 }
#define Support_Endpoint_Num 2
// Array of profile ids
#define FIXED_PROFILE_IDS { 260, 260 }
// Array of device ids
#define FIXED_DEVICE_IDS { HA_DEV_ONOFF_LIGHT_SWITCH, HA_DEV_ONOFF_LIGHT_SWITCH }
#endif
#ifdef THREE_LIGHT_PANEL
#define SUPPORT_MAX_EP 6
#define Support_Endpoint_Array { 1, 2, 3 }
#define Support_Endpoint_Num 3
// Array of profile ids
#define FIXED_PROFILE_IDS { 260, 260, 260 }
// Array of device ids
#define FIXED_DEVICE_IDS { HA_DEV_ONOFF_LIGHT_SWITCH, HA_DEV_ONOFF_LIGHT_SWITCH, HA_DEV_ONOFF_LIGHT_SWITCH }
#endif
#ifdef FOUR_LIGHT_PANEL
#define SUPPORT_MAX_EP 6
#define Support_Endpoint_Array { 1, 2, 3, 4 }
#define Support_Endpoint_Num 4 #define Support_Endpoint_Num 4
// Array of profile ids // Array of profile ids
#define FIXED_PROFILE_IDS { 260, 260, 260, 260 } #define FIXED_PROFILE_IDS { 260, 260, 260, 260 }
// Array of device ids // Array of device ids
#define FIXED_DEVICE_IDS { HA_DEV_ONOFF_LIGHT_SWITCH, HA_DEV_ONOFF_LIGHT_SWITCH, HA_DEV_ONOFF_LIGHT_SWITCH, HA_DEV_ONOFF_LIGHT_SWITCH } #define FIXED_DEVICE_IDS { HA_DEV_ONOFF_LIGHT_SWITCH, HA_DEV_ONOFF_LIGHT_SWITCH, HA_DEV_ONOFF_LIGHT_SWITCH, HA_DEV_ONOFF_LIGHT_SWITCH }
#endif
typedef struct{ typedef struct{
u8 zclVersion; u8 zclVersion;
......
...@@ -101,7 +101,7 @@ extern "C" { ...@@ -101,7 +101,7 @@ extern "C" {
#endif #endif
#define ZCL_GROUP_SUPPORT 1 #define ZCL_GROUP_SUPPORT 1
#define ZCL_SCENE_SUPPORT 1 #define ZCL_SCENE_SUPPORT 1
#define ZCL_OTA_SUPPORT 1 #define ZCL_OTA_SUPPORT 0
#define ZCL_PRIVATE_CLUSTER_FCC0_SUPPORT 1 #define ZCL_PRIVATE_CLUSTER_FCC0_SUPPORT 1
#if TOUCHLINK_SUPPORT #if TOUCHLINK_SUPPORT
#define ZCL_ZLL_COMMISSIONING_SUPPORT 1 #define ZCL_ZLL_COMMISSIONING_SUPPORT 1
......
...@@ -2,12 +2,133 @@ ...@@ -2,12 +2,133 @@
#define __IKONKE_CONFIG_H___ #define __IKONKE_CONFIG_H___
#include "types.h" #include "types.h"
//#define SINGLE_LIGHT_PANEL
//#define DUAL_LIGHT_PANEL
#define THREE_LIGHT_PANEL
//#define FOUR_LIGHT_PANEL
#ifdef SINGLE_LIGHT_PANEL
/*Dsp: product model id */
#define PRODUCT_MODEL "KK-LP-D81X"
/*Dsp: APP Version */
#define FIRMWARE_VER 0x29
/*Dsp: Stack Version */
#define STACK_VER 0x11
/*Dsp: HARDWARE_VER */
#define HARDWARE_VERSION 0x20
/*Dsp: MANUFATURE NAME */
#define MANUFATURE_NAME "Konke"
/*Dsp: MODEL_ID */
#define MODEL_ID 0x00068621
/*Dsp: OTA_IMAGE_TYPE */
#define OTA_IMAGE_TYPE 65001
/*Dsp: OTA_FIRMVERSION */
#define OTA_FIRMVERSION 0x29
/*Dsp: MANUFATURE_CODE */
#define MANUFATURE_CODE 0x1268
/*Dsp: OTA_HARDWARE_VER */
#define OTA_HARDWARE_VER 0x20
#define MANUFACTURER_CODE_TELINK 0x1268
#define IMAGE_TYPE 65001
#define FILE_VERSION 0x10
#endif
#ifdef DUAL_LIGHT_PANEL
/*Dsp: product model id */
#define PRODUCT_MODEL "KK-LP-D82X"
/*Dsp: APP Version */
#define FIRMWARE_VER 0x29
/*Dsp: Stack Version */
#define STACK_VER 0x11
/*Dsp: HARDWARE_VER */
#define HARDWARE_VERSION 0x20
/*Dsp: MANUFATURE NAME */
#define MANUFATURE_NAME "Konke"
/*Dsp: MODEL_ID */
#define MODEL_ID 0x00068622
/*Dsp: OTA_IMAGE_TYPE */
#define OTA_IMAGE_TYPE 65002
/*Dsp: OTA_FIRMVERSION */
#define OTA_FIRMVERSION 0x29
/*Dsp: MANUFATURE_CODE */
#define MANUFATURE_CODE 0x1268
/*Dsp: OTA_HARDWARE_VER */
#define OTA_HARDWARE_VER 0x20
#define MANUFACTURER_CODE_TELINK 0x1268
#define IMAGE_TYPE 65002
#define FILE_VERSION 0x10
#endif
#ifdef THREE_LIGHT_PANEL
/*Dsp: product model id */
#define PRODUCT_MODEL "KK-LP-D83X"
/*Dsp: APP Version */
#define FIRMWARE_VER 0x29
/*Dsp: Stack Version */
#define STACK_VER 0x11
/*Dsp: HARDWARE_VER */
#define HARDWARE_VERSION 0x20
/*Dsp: MANUFATURE NAME */
#define MANUFATURE_NAME "Konke"
/*Dsp: MODEL_ID */
#define MODEL_ID 0x00068623
/*Dsp: OTA_IMAGE_TYPE */
#define OTA_IMAGE_TYPE 65003
/*Dsp: OTA_FIRMVERSION */
#define OTA_FIRMVERSION 0x29
/*Dsp: MANUFATURE_CODE */
#define MANUFATURE_CODE 0x1268
/*Dsp: OTA_HARDWARE_VER */
#define OTA_HARDWARE_VER 0x20
#define MANUFACTURER_CODE_TELINK 0x1268
#define IMAGE_TYPE 65003
#define FILE_VERSION 0x10
#endif
#ifdef FOUR_LIGHT_PANEL
/*Dsp: product model id */ /*Dsp: product model id */
#define PRODUCT_MODEL "KK-PA-M10X" #define PRODUCT_MODEL "KK-LP-D84X"
/*Dsp: APP Version */ /*Dsp: APP Version */
#define FIRMWARE_VER 0x20 #define FIRMWARE_VER 0x29
/*Dsp: Stack Version */ /*Dsp: Stack Version */
#define STACK_VER 0x11 #define STACK_VER 0x11
...@@ -22,10 +143,10 @@ ...@@ -22,10 +143,10 @@
#define MODEL_ID 0x00068624 #define MODEL_ID 0x00068624
/*Dsp: OTA_IMAGE_TYPE */ /*Dsp: OTA_IMAGE_TYPE */
#define OTA_IMAGE_TYPE 65000 #define OTA_IMAGE_TYPE 65004
/*Dsp: OTA_FIRMVERSION */ /*Dsp: OTA_FIRMVERSION */
#define OTA_FIRMVERSION 0x20 #define OTA_FIRMVERSION 0x29
/*Dsp: MANUFATURE_CODE */ /*Dsp: MANUFATURE_CODE */
#define MANUFATURE_CODE 0x1268 #define MANUFATURE_CODE 0x1268
...@@ -36,9 +157,10 @@ ...@@ -36,9 +157,10 @@
#define MANUFACTURER_CODE_TELINK 0x1268 #define MANUFACTURER_CODE_TELINK 0x1268
#define IMAGE_TYPE 65000 #define IMAGE_TYPE 65004
#define FILE_VERSION 0x10 #define FILE_VERSION 0x10
#endif
#include "../common/comm_cfg.h" #include "../common/comm_cfg.h"
......
This diff is collapsed.
...@@ -7,7 +7,9 @@ ...@@ -7,7 +7,9 @@
#include "ikk-led.h" #include "ikk-led.h"
#include "ikk-network.h" #include "ikk-network.h"
#define ZCL_ATTRID_NoDisturbMode 0x100C
void App_Init(void); void App_Init(void);
void kZclClusterRecallSceneCallback(uint8_t endpoint, uint16_t cluster, uint8_t command_id
, bool reportEnable, bool sceneRecallFlg, bool reportGatewayEnable, bool reportChildDeviceEnable,void *param);
#endif #endif
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
#include "bdb.h" #include "bdb.h"
#include "ota.h" #include "ota.h"
#include PROJECT_H #include PROJECT_H
#include "ikk-ota.h"
#include "ikk-debug.h" #include "ikk-debug.h"
#include "ikk-network.h" #include "ikk-network.h"
/********************************************************************** /**********************************************************************
...@@ -258,31 +259,34 @@ void zbdemo_bdbIdentifyCb(u8 endpoint, u16 srcAddr, u16 identifyTime){ ...@@ -258,31 +259,34 @@ void zbdemo_bdbIdentifyCb(u8 endpoint, u16 srcAddr, u16 identifyTime){
#endif #endif
} }
#ifdef ZCL_OTA #ifdef ZCL_OTA
void sampleLight_otaProcessMsgHandler(u8 evt, u8 status) void sampleLight_otaProcessMsgHandler(u8 evt, u8 status)
{ {
Tl_printf("sampleLight_otaProcessMsgHandler111111, evt = %d, status = %d\r\n", evt, status);
if(evt == OTA_EVT_START){ if(evt == OTA_EVT_START){
if(status == ZCL_STA_SUCCESS){ if(status == ZCL_STA_SUCCESS){
kOTAMoudleCallback(OTA_START);
}else{ }else{
kOTAMoudleCallback(OTA_FAILED);
}
}else if(evt == OTA_EVT_COMPLETE){
if(status == ZCL_STA_SUCCESS){
kOTAMoudleCallback(OTA_DOWNLOAD_DONE);
}else{
kOTAMoudleCallback(OTA_FAILED);
} }
}else if(evt == OTA_EVT_COMPLETE){ }else if(evt == OTA_EVT_COMPLETE){
if(status == ZCL_STA_SUCCESS){ if(status == ZCL_STA_SUCCESS){
ota_mcuReboot(); ota_mcuReboot();
kOTAMoudleCallback(OTA_VERITY_SUCCEED);
}else{ }else{
ota_queryStart(30); ota_queryStart(30);
kOTAMoudleCallback(OTA_FAILED);
} }
} }
} }
#endif #endif
/********************************************************************* /*********************************************************************
* @fn sampleLight_leaveIndHandler * @fn sampleLight_leaveIndHandler
* *
......
...@@ -53,6 +53,9 @@ ...@@ -53,6 +53,9 @@
#include "zcl_include.h" #include "zcl_include.h"
#include PROJECT_H #include PROJECT_H
#include "zcl.h" #include "zcl.h"
#include "ikk-debug.h"
#include "ikk-sequence.h"
#include "ikk-cluster.h"
/********************************************************************** /**********************************************************************
* LOCAL CONSTANTS * LOCAL CONSTANTS
*/ */
...@@ -259,35 +262,117 @@ static void sampleLight_onoff_onWithRecallGlobalSceneProcess(void) ...@@ -259,35 +262,117 @@ static void sampleLight_onoff_onWithRecallGlobalSceneProcess(void)
} }
typedef struct{
u16 clusterId[5];
u16 attrID[5];
}ClusterAttrID;
ClusterAttrID clusterattrid;
extern void ON_OFF_Cmd_Handler(uint8_t endpoint,bool onoff); static ev_timer_event_t *kSrcEp1Multieport = NULL;
void zclReportCmdHandler(uint8_t ep,uint16_t cluster,zclReportCmd_t *reportInfo) static ev_timer_event_t *kSrcEp2Multieport = NULL;
static ev_timer_event_t *kSrcEp3Multieport = NULL;
static ev_timer_event_t *kSrcEp4Multieport = NULL;
static s32 kSrcEp1MultieportEventHandler(void *arg)
{
Tl_printf("######kSrcEp1MultieportEventHandler\r\n");
kZclClusterSetPermitReportInfo(1,ZCL_CLUSTER_GEN_ON_OFF, true, false, true, true,NULL,RESET_ENDPOINT);
kOptTunnelReportingStatus(1, clusterattrid.clusterId[1], clusterattrid.attrID[1]);
return -1;
}
static s32 kSrcEp2MultieportEventHandler(void *arg)
{
Tl_printf("######kSrcEp2MultieportEventHandler\r\n");
kZclClusterSetPermitReportInfo(2,ZCL_CLUSTER_GEN_ON_OFF, true, false, true, true,NULL,RESET_ENDPOINT);
kOptTunnelReportingStatus(2, clusterattrid.clusterId[2], clusterattrid.attrID[2]);
return -1;
}
static s32 kSrcEp3MultieportEventHandler(void *arg)
{ {
//iKonkeAfSelfPrint("######sampleLight_zclReportCmd,attr = %d,data type=%d,data = %d\r\n",reportInfo->attrList[0].attrID,reportInfo->attrList[0].dataType,reportInfo->attrList[0].attrData[0]); Tl_printf("######kSrcEp3MultieportEventHandler\r\n");
kZclClusterSetPermitReportInfo(3,ZCL_CLUSTER_GEN_ON_OFF, true, false, true, true,NULL,RESET_ENDPOINT);
kOptTunnelReportingStatus(3, clusterattrid.clusterId[3], clusterattrid.attrID[3]);
return -1;
}
static s32 kSrcEp4MultieportEventHandler(void *arg)
{
Tl_printf("######kSrcEp4MultieportEventHandler\r\n");
kZclClusterSetPermitReportInfo(4,ZCL_CLUSTER_GEN_ON_OFF, true, false, true, true,NULL,RESET_ENDPOINT);
kOptTunnelReportingStatus(4, clusterattrid.clusterId[4], clusterattrid.attrID[4]);
return -1;
}
extern void ON_OFF_Cmd_Handler(uint8_t endpoint,bool onoff);
void zclReportCmdHandler(uint8_t ep,uint16_t cluster,zclReportCmd_t *reportInfo,zclIncoming_t *pInHdlrMsg)
{
iKonkeAfSelfPrint("######sampleLight_zclReportCmd,attr = %d,data type=%d,data = %d\r\n",reportInfo->attrList[0].attrID,reportInfo->attrList[0].dataType,reportInfo->attrList[0].attrData[0]);
switch(cluster) switch(cluster)
{ {
//当report的是子设备时进行过滤
case ZCL_CLUSTER_GEN_ON_OFF: case ZCL_CLUSTER_GEN_ON_OFF:
{ {
for(uint8_t i = 0;i<(reportInfo->numAttr);i++) uint16_t sender = pInHdlrMsg->msg->indInfo.src_short_addr;
for(uint8_t i = 0;i<(reportInfo->numAttr);i++){
uint8_t dataType = reportInfo->attrList[i].dataType;
if(reportInfo->attrList[i].attrID == ZCL_ATTRID_ONOFF && dataType == ZCL_DATA_TYPE_BOOLEAN){
bool on_off_ctr = reportInfo->attrList[0].attrData[i];
if (sender != 0x0000){//sender是芯科SDK里的参数
uint8_t index = 0;
uint8_t storedSequence = kSequenceFindByNodeidAndEp(sender, pInHdlrMsg->msg->indInfo.dst_ep, &index);
iKonkeAfSelfPrint("######zclReportCmdHandler111111,sender = %d,directed endpoint = %d,seqNum = %d,storedSequence = %d\r\n", \
sender,pInHdlrMsg->msg->indInfo.dst_ep,pInHdlrMsg->hdr.seqNum,storedSequence);
//过滤seq,以免早的seq改变后来的seq状态
if (pInHdlrMsg->hdr.seqNum <= storedSequence && storedSequence - pInHdlrMsg->hdr.seqNum <= 60) {
//直接不执行当前操作
iKonkeAfSelfPrint("######zclReportCmdHandler222222\r\n");
return;
}else {
iKonkeAfSelfPrint("######zclReportCmdHandler333333\r\n");
kSequenceAdd(sender, pInHdlrMsg->msg->indInfo.dst_ep, pInHdlrMsg->hdr.seqNum);
}
}
ZclOnOffControlInfoSt ZclOnOffControlInfo;
iKonkeAfSelfPrint("Multi-ContorlWrite Attribute ep(%d) value(%d)\r\n", pInHdlrMsg->msg->indInfo.dst_ep, on_off_ctr);
switch (on_off_ctr)
{ {
if(reportInfo->attrList[i].attrID == ZCL_ATTRID_ONOFF) case 0x00:
case 0x01:
{ {
bool on_off_ctr = reportInfo->attrList[0].attrData[i]; iKonkeAfSelfPrint("!!!!!!!!!!!!!OnOffValue111111 = %d!!!!!!!!!\r\n",on_off_ctr);
ON_OFF_Cmd_Handler(ep,on_off_ctr); ON_OFF_Cmd_Handler(ep,on_off_ctr);
addrExt_t senderEui64 = {0};
for(uint8_t i = 0;i<8;i++){
senderEui64[i] = pInHdlrMsg->msg->indInfo.src_ext_addr[i];
}
memcpy(ZclOnOffControlInfo.maskEui64Addr, senderEui64, 8);
ZclOnOffControlInfo.dest_endpoint = pInHdlrMsg->msg->indInfo.src_ep;
//采用单播上报的方式,实现多控时的单向控制
kZclClusterSetPermitReportInfo(ep, ZCL_CLUSTER_GEN_ON_OFF, true, false, false, false, ZclOnOffControlInfo.maskEui64Addr, ZclOnOffControlInfo.dest_endpoint);
clusterattrid.clusterId[ep] = ZCL_CLUSTER_GEN_ON_OFF;
clusterattrid.attrID[ep] = ZCL_ATTRID_ONOFF;
if (ep == 1){
kSrcEp1Multieport = TL_ZB_TIMER_SCHEDULE(kSrcEp1MultieportEventHandler, NULL, 50);
}else if (ep == 2){
kSrcEp2Multieport = TL_ZB_TIMER_SCHEDULE(kSrcEp2MultieportEventHandler, NULL, 50);
}else if (ep == 3){
kSrcEp3Multieport = TL_ZB_TIMER_SCHEDULE(kSrcEp3MultieportEventHandler, NULL, 50);
}else if (ep == 4){
kSrcEp4Multieport = TL_ZB_TIMER_SCHEDULE(kSrcEp4MultieportEventHandler, NULL, 50);
}
}
break;
case 0x02:
break;
default:
break;
}
} }
} }
break; break;
} }
default: default:
break; break;
} }
} }
status_t sampleLight_onOffCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload) status_t sampleLight_onOffCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
......
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
#include "ota.h" #include "ota.h"
#include PROJECT_H #include PROJECT_H
#include "ikk-debug.h" #include "ikk-debug.h"
#include "ikk-ota.h"
#include "ikk-opt-tunnel.h" #include "ikk-opt-tunnel.h"
/********************************************************************** /**********************************************************************
* LOCAL CONSTANTS * LOCAL CONSTANTS
...@@ -110,7 +111,7 @@ static ev_timer_event_t *identifyTimerEvt = NULL; ...@@ -110,7 +111,7 @@ static ev_timer_event_t *identifyTimerEvt = NULL;
* @return None * @return None
*/ */
extern kk_err_t kOptTunnelMessageIncoming(OptMethodEm method,zclIncoming_t *pCmd); extern kk_err_t kOptTunnelMessageIncoming(OptMethodEm method,zclIncoming_t *pCmd);
extern void zclReportCmdHandler(uint8_t ep,uint16_t cluster,zclReportCmd_t *reportInfo); extern void zclReportCmdHandler(uint8_t ep,uint16_t cluster,zclReportCmd_t *reportInfo,zclIncoming_t *pCmd);
void sampleLight_zclProcessIncomingMsg(zclIncoming_t *pInHdlrMsg) void sampleLight_zclProcessIncomingMsg(zclIncoming_t *pInHdlrMsg)
{ {
iKonkeAfSelfPrint("######sampleLight_zclProcessIncomingMsg,cmd = %d,len=%d,\n",pInHdlrMsg->hdr.cmd,pInHdlrMsg->dataLen); iKonkeAfSelfPrint("######sampleLight_zclProcessIncomingMsg,cmd = %d,len=%d,\n",pInHdlrMsg->hdr.cmd,pInHdlrMsg->dataLen);
...@@ -147,7 +148,7 @@ void sampleLight_zclProcessIncomingMsg(zclIncoming_t *pInHdlrMsg) ...@@ -147,7 +148,7 @@ void sampleLight_zclProcessIncomingMsg(zclIncoming_t *pInHdlrMsg)
sampleLight_zclCfgReportRspCmd(pInHdlrMsg->attrCmd); sampleLight_zclCfgReportRspCmd(pInHdlrMsg->attrCmd);
break; break;
case ZCL_CMD_REPORT: case ZCL_CMD_REPORT:
zclReportCmdHandler(ep,cluster,pInHdlrMsg->attrCmd); zclReportCmdHandler(ep,cluster,pInHdlrMsg->attrCmd,pInHdlrMsg);
break; break;
#endif #endif
case ZCL_CMD_DEFAULT_RSP: case ZCL_CMD_DEFAULT_RSP:
...@@ -325,19 +326,25 @@ void sampleLight_zclIdentifyTimerStop(void) ...@@ -325,19 +326,25 @@ void sampleLight_zclIdentifyTimerStop(void)
* *
* @return None * @return None
*/ */
typedef enum {LED_RADAR_ID = 1,LED1_ID, LED2_ID, LED3_ID, LED4_ID, LED_ALL_ID}LED_ID_ENUM;
typedef enum { LED_OFF = 0, LED_ON = 1, LED_TOGGLE, LED_IGNORE = 2 }LedOptEnum;
#define LED_SLOW_BLINK_ON_TIME_MS 800
#define LED_SLOW_BLINK_OFF_TIME_MS 800
extern void kSetLedStatus(LED_ID_ENUM id);
extern void kLedOptTrigger(uint8_t id, uint32_t duration_on_ms, uint32_t duration_off_ms, uint32_t times, LedOptEnum start, LedOptEnum end );
void sampleLight_zclIdentifyCmdHandler(u8 endpoint, u16 srcAddr, u16 identifyTime) void sampleLight_zclIdentifyCmdHandler(u8 endpoint, u16 srcAddr, u16 identifyTime)
{ {
// g_zcl_identifyAttrs.identifyTime = identifyTime; g_zcl_identifyAttrs->identifyTime = identifyTime;
// /*if(kGetOTAStatus() == OTA_NORMAL){*/
// if(identifyTime == 0){ if(identifyTime == 0){
// sampleLight_zclIdentifyTimerStop(); kSetLedStatus(LED_ALL_ID);
// //light_blink_stop(); }else{
// }else{ kLedOptTrigger(LED_ALL_ID, LED_SLOW_BLINK_ON_TIME_MS, LED_SLOW_BLINK_OFF_TIME_MS,
// if(!identifyTimerEvt){ identifyTime * 1000/(LED_SLOW_BLINK_ON_TIME_MS + LED_SLOW_BLINK_OFF_TIME_MS), LED_ON, LED_OFF);
// //light_blink_start(identifyTime, 500, 500); }
// identifyTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_zclIdentifyTimerCb, NULL, 1000); /* }*/
// }
// }
} }
/********************************************************************* /*********************************************************************
......
...@@ -146,6 +146,7 @@ static void sampleLight_sceneStoreReqHandler(uint8_t ep ,zcl_sceneEntry_t *pScen ...@@ -146,6 +146,7 @@ static void sampleLight_sceneStoreReqHandler(uint8_t ep ,zcl_sceneEntry_t *pScen
pScene->extField[extLen++] = HI_UINT16(ZCL_CLUSTER_GEN_ON_OFF); pScene->extField[extLen++] = HI_UINT16(ZCL_CLUSTER_GEN_ON_OFF);
pScene->extField[extLen++] = 1; pScene->extField[extLen++] = 1;
pScene->extField[extLen++] = pOnOff->onOff; pScene->extField[extLen++] = pOnOff->onOff;
Tl_printf("\r\nkZclClusterRecallSceneCallback###111111\r\n");
kZclClusterRecallSceneCallback(ep,ZCL_CLUSTER_GEN_ON_OFF,ZCL_CMD_SCENE_STORE_SCENE,true,false); kZclClusterRecallSceneCallback(ep,ZCL_CLUSTER_GEN_ON_OFF,ZCL_CMD_SCENE_STORE_SCENE,true,false);
#endif #endif
...@@ -189,6 +190,7 @@ static void sampleLight_sceneStoreReqHandler(uint8_t ep ,zcl_sceneEntry_t *pScen ...@@ -189,6 +190,7 @@ static void sampleLight_sceneStoreReqHandler(uint8_t ep ,zcl_sceneEntry_t *pScen
status_t sampleLight_sceneCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload) status_t sampleLight_sceneCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
{ {
uint8_t ep = pAddrInfo->dstEp ; uint8_t ep = pAddrInfo->dstEp ;
Tl_printf("\r\n###sampleLight_sceneCb111111 dirCluster = %d, cmdId = %d\r\n", pAddrInfo->dirCluster, cmdId);
if(pAddrInfo->dirCluster == ZCL_FRAME_CLIENT_SERVER_DIR){ if(pAddrInfo->dirCluster == ZCL_FRAME_CLIENT_SERVER_DIR){
switch(cmdId){ switch(cmdId){
case ZCL_CMD_SCENE_STORE_SCENE: case ZCL_CMD_SCENE_STORE_SCENE:
......
...@@ -298,13 +298,17 @@ void kLedOptTrigger(uint8_t id, uint32_t duration_on_ms, uint32_t duration_off_m ...@@ -298,13 +298,17 @@ void kLedOptTrigger(uint8_t id, uint32_t duration_on_ms, uint32_t duration_off_m
return ; return ;
} }
// iKonkeAfSelfPrint("LED_TRIGGER[%d]: id(%d), d_on(%d), d_off(%d), times(%d), start(%d), end(%d)\r\n", if(id != 1)
// led_index, id, duration_on_ms, duration_off_ms, times, start, end); iKonkeAfSelfPrint("LED_TRIGGER[%d]: id(%d), d_on(%d), d_off(%d), times(%d), start(%d), end(%d)\r\n",
led_index, id, duration_on_ms, duration_off_ms, times, start, end);
g_stLedCtrller[led_index].onDuration = duration_on_ms / TICK_LOOP_NMS; g_stLedCtrller[led_index].onDuration = duration_on_ms / TICK_LOOP_NMS;
g_stLedCtrller[led_index].offDuration = duration_off_ms/ TICK_LOOP_NMS; g_stLedCtrller[led_index].offDuration = duration_off_ms/ TICK_LOOP_NMS;
g_stLedCtrller[led_index].start = start; g_stLedCtrller[led_index].start = start;
if(end == LED_IGNORE)
g_stLedCtrller[led_index].end = LED_OFF;
else
g_stLedCtrller[led_index].end = end; g_stLedCtrller[led_index].end = end;
if( g_stLedCtrller[led_index].start == LED_ON ) { if( g_stLedCtrller[led_index].start == LED_ON ) {
...@@ -321,6 +325,7 @@ void kLedOptTrigger(uint8_t id, uint32_t duration_on_ms, uint32_t duration_off_m ...@@ -321,6 +325,7 @@ void kLedOptTrigger(uint8_t id, uint32_t duration_on_ms, uint32_t duration_off_m
if (g_pLedBlinkDoneCallback[led_index] && !bFlg[led_index]){ if (g_pLedBlinkDoneCallback[led_index] && !bFlg[led_index]){
bFlg[led_index] = true; bFlg[led_index] = true;
g_pLedBlinkDoneCallback[led_index](id); g_pLedBlinkDoneCallback[led_index](id);
} }
}else { }else {
bFlg[led_index] = false; bFlg[led_index] = false;
......
...@@ -24,7 +24,7 @@ static uint8_t g_u8PwmChannelNum = 0; ...@@ -24,7 +24,7 @@ static uint8_t g_u8PwmChannelNum = 0;
pPwmActionDoneCallback g_pPwmActionDoneCallback = NULL; pPwmActionDoneCallback g_pPwmActionDoneCallback = NULL;
static bool Pwm_Tick_Detect_Running_Flag = false; static bool Pwm_Tick_Detect_Running_Flag[PWM_OBJS_SUPPORT_MAXN] = {0};
static ev_timer_event_t *Tick_Pwm_TimerEvt = NULL; static ev_timer_event_t *Tick_Pwm_TimerEvt = NULL;
...@@ -80,7 +80,7 @@ uint8_t kPwmGetIndexByID(uint8_t pwm_id ) ...@@ -80,7 +80,7 @@ uint8_t kPwmGetIndexByID(uint8_t pwm_id )
*/ */
void kPwmDriverhandler(uint8_t pwm_index, PwmGradientDirectionEnum st, uint16_t value) void kPwmDriverhandler(uint8_t pwm_index, PwmGradientDirectionEnum st, uint16_t value)
{ {
Pwm_Tick_Detect_Running_Flag = false; Pwm_Tick_Detect_Running_Flag[pwm_index] = false;
if (pwm_index >= g_u8PwmChannelNum){ if (pwm_index >= g_u8PwmChannelNum){
iKonkeAfSelfPrint("####kPwmDriverhandler index is too large\r\n"); iKonkeAfSelfPrint("####kPwmDriverhandler index is too large\r\n");
...@@ -174,8 +174,8 @@ void kPwmOptTrigger(uint8_t id, uint32_t start_value, uint32_t end_value, uint32 ...@@ -174,8 +174,8 @@ void kPwmOptTrigger(uint8_t id, uint32_t start_value, uint32_t end_value, uint32
iKonkeAfSelfPrint("action (%d) , interval[%d]\r\n",g_stPwmCtrller[pwm_index].actionCounter,g_stPwmCtrller[pwm_index].intervalDutyCycle); iKonkeAfSelfPrint("action (%d) , interval[%d]\r\n",g_stPwmCtrller[pwm_index].actionCounter,g_stPwmCtrller[pwm_index].intervalDutyCycle);
pwmSetDuty(g_stPwmConfList[pwm_index].gpioInfo.pwmChannel,start_value); pwmSetDuty(g_stPwmConfList[pwm_index].gpioInfo.pwmChannel,start_value);
if(!Pwm_Tick_Detect_Running_Flag) { if(!Pwm_Tick_Detect_Running_Flag[pwm_index]) {
Pwm_Tick_Detect_Running_Flag = true; Pwm_Tick_Detect_Running_Flag[pwm_index] = true;
} }
} }
/* DESP: single LED instance register interface. /* DESP: single LED instance register interface.
...@@ -253,15 +253,18 @@ kk_err_t kPwmModuleInit(PwmConfSt pwmlist[], unsigned char pwm_number, pPwmActio ...@@ -253,15 +253,18 @@ kk_err_t kPwmModuleInit(PwmConfSt pwmlist[], unsigned char pwm_number, pPwmActio
} }
static s32 kPwmGradientChangeEventHandler(void *data) static s32 kPwmGradientChangeEventHandler(void *data)
{ {
if(!Pwm_Tick_Detect_Running_Flag)
return 0;
for (uint8_t i = 0; i < g_u8PwmChannelNum; i++){ for (uint8_t i = 0; i < g_u8PwmChannelNum; i++){
//iKonkeAfSelfPrint("PwmChange,flag = %d,Counter = %d,i = %d\r\n",Pwm_Tick_Detect_Running_Flag[i],g_stPwmCtrller[i].actionCounter,i);
if(!Pwm_Tick_Detect_Running_Flag[i]){
continue;
}
if (g_stPwmCtrller[i].actionCounter > 0){ if (g_stPwmCtrller[i].actionCounter > 0){
if (g_stPwmCtrller[i].startDutyCycle > g_stPwmCtrller[i].endDutyCycle){ if (g_stPwmCtrller[i].startDutyCycle > g_stPwmCtrller[i].endDutyCycle){
g_stPwmCtrller[i].actionCounter--; g_stPwmCtrller[i].actionCounter--;
g_stPwmCtrller[i].startDutyCycleValue -= g_stPwmCtrller[i].intervalDutyCycle; g_stPwmCtrller[i].startDutyCycleValue -= g_stPwmCtrller[i].intervalDutyCycle;
pwmSetDuty(g_stPwmCtrller[i].gpioInfo.pwmChannel,g_stPwmCtrller[i].startDutyCycleValue); pwmSetDuty(g_stPwmCtrller[i].gpioInfo.pwmChannel,g_stPwmCtrller[i].startDutyCycleValue);
//iKonkeAfSelfPrint("PwmChange,Counter = %d\r\n",g_stPwmCtrller[i].actionCounter);
} else if (g_stPwmCtrller[i].startDutyCycle < g_stPwmCtrller[i].endDutyCycle){ } else if (g_stPwmCtrller[i].startDutyCycle < g_stPwmCtrller[i].endDutyCycle){
g_stPwmCtrller[i].actionCounter--; g_stPwmCtrller[i].actionCounter--;
g_stPwmCtrller[i].startDutyCycleValue += g_stPwmCtrller[i].intervalDutyCycle; g_stPwmCtrller[i].startDutyCycleValue += g_stPwmCtrller[i].intervalDutyCycle;
...@@ -272,7 +275,6 @@ static s32 kPwmGradientChangeEventHandler(void *data) ...@@ -272,7 +275,6 @@ static s32 kPwmGradientChangeEventHandler(void *data)
if (g_stPwmCtrller[i].actionCounter == 0){ if (g_stPwmCtrller[i].actionCounter == 0){
//may be end duty cycle not equal, restore end duty cycle //may be end duty cycle not equal, restore end duty cycle
pwmSetDuty(g_stPwmCtrller[i].gpioInfo.pwmChannel,g_stPwmCtrller[i].endDutyCycle); pwmSetDuty(g_stPwmCtrller[i].gpioInfo.pwmChannel,g_stPwmCtrller[i].endDutyCycle);
if (g_pPwmActionDoneCallback){ if (g_pPwmActionDoneCallback){
PwmGradientDirectionEnum opt = ELP_OPT_DEFAULT; PwmGradientDirectionEnum opt = ELP_OPT_DEFAULT;
if (g_stPwmCtrller[i].startDutyCycle > g_stPwmCtrller[i].endDutyCycle){ if (g_stPwmCtrller[i].startDutyCycle > g_stPwmCtrller[i].endDutyCycle){
......
...@@ -23,7 +23,6 @@ static pClusterAttributeChangeCallback pOnOffClusterCallback = NULL; ...@@ -23,7 +23,6 @@ static pClusterAttributeChangeCallback pOnOffClusterCallback = NULL;
//static pClusterAttributeChangeCallback pLevelClusterCallback = NULL; //static pClusterAttributeChangeCallback pLevelClusterCallback = NULL;
//static pClusterAttributeChangeCallback pColorClusterCallback = NULL; //static pClusterAttributeChangeCallback pColorClusterCallback = NULL;
static status_t WriteServerAttribute(u8 endpoint, u16 clusterId,uint8_t attributeID,uint8_t* dataPtr, uint8_t data_type); static status_t WriteServerAttribute(u8 endpoint, u16 clusterId,uint8_t attributeID,uint8_t* dataPtr, uint8_t data_type);
typedef struct { typedef struct {
ZclReportTableSt g_stZclReportPermitList[ENDPOINT_MAXN * CLUSTER_MAXN]; ZclReportTableSt g_stZclReportPermitList[ENDPOINT_MAXN * CLUSTER_MAXN];
...@@ -202,11 +201,6 @@ void Update_Local_Attribute_Info(void) ...@@ -202,11 +201,6 @@ void Update_Local_Attribute_Info(void)
Rewrite_ManufactureName(); Rewrite_ManufactureName();
} }
typedef struct{ typedef struct{
zcl_basicAttr_t basicAttrs_temp; zcl_basicAttr_t basicAttrs_temp;
zcl_identifyAttr_t identifyAttrs_temp; zcl_identifyAttr_t identifyAttrs_temp;
...@@ -295,6 +289,8 @@ void kZclClusterPermitReportTableInit(BindObjSt clusterBindList[], uint8_t size) ...@@ -295,6 +289,8 @@ void kZclClusterPermitReportTableInit(BindObjSt clusterBindList[], uint8_t size)
g_stZclClusterReportPermitTable.g_stZclReportPermitList[i].cluster = clusterBindList[i].cluster; g_stZclClusterReportPermitTable.g_stZclReportPermitList[i].cluster = clusterBindList[i].cluster;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[i].reportEnable = false; g_stZclClusterReportPermitTable.g_stZclReportPermitList[i].reportEnable = false;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[i].sceneRecallFlg = false; g_stZclClusterReportPermitTable.g_stZclReportPermitList[i].sceneRecallFlg = false;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[i].reportGatewayEnable = false;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[i].reportChildDeviceEnable = false;
} }
g_stZclClusterReportPermitTable.size = size; g_stZclClusterReportPermitTable.size = size;
} }
...@@ -326,13 +322,15 @@ bool kZclClusterGetPermitReportInfo(uint8_t endpoint, uint16_t cluster, ZclRepor ...@@ -326,13 +322,15 @@ bool kZclClusterGetPermitReportInfo(uint8_t endpoint, uint16_t cluster, ZclRepor
zclReportPermit->cluster = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].cluster; zclReportPermit->cluster = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].cluster;
zclReportPermit->reportEnable = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportEnable; zclReportPermit->reportEnable = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportEnable;
zclReportPermit->sceneRecallFlg = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg; zclReportPermit->sceneRecallFlg = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg;
zclReportPermit->reportGatewayEnable = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable;
zclReportPermit->reportChildDeviceEnable = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportChildDeviceEnable;
return true; return true;
} }
return false; return false;
} }
//permit info set //permit info set
bool kZclClusterSetPermitReportInfo(uint8_t endpoint, uint16_t cluster, bool reportEnable, bool sceneRecallFlg) bool kZclClusterSetPermitReportInfo(uint8_t endpoint, uint16_t cluster, bool reportEnable, bool sceneRecallFlg, bool reportGatewayEnable, bool reportChildDeviceEnable, uint8_t *maskEui64Addr,uint8_t dest_endpoint)
{ {
bool ret = false; bool ret = false;
...@@ -347,6 +345,14 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, uint16_t cluster, bool rep ...@@ -347,6 +345,14 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, uint16_t cluster, bool rep
if (index != 0xFF){ if (index != 0xFF){
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportEnable = reportEnable; g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportEnable = reportEnable;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg = sceneRecallFlg; g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg = sceneRecallFlg;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable = reportGatewayEnable;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportChildDeviceEnable = reportChildDeviceEnable;
if (maskEui64Addr != NULL){
memcpy(g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].maskEui64Addr, maskEui64Addr, 8);
} else {
memset(g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].maskEui64Addr, 0xFF, 8);
}
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].dest_endpoint = dest_endpoint;
ret = true; ret = true;
} }
}else { //㲥 }else { //㲥
...@@ -356,6 +362,14 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, uint16_t cluster, bool rep ...@@ -356,6 +362,14 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, uint16_t cluster, bool rep
if (index != 0xFF){ if (index != 0xFF){
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportEnable = reportEnable; g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportEnable = reportEnable;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg = sceneRecallFlg; g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg = sceneRecallFlg;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable = reportGatewayEnable;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportChildDeviceEnable = reportChildDeviceEnable;
if (maskEui64Addr != NULL){
memcpy(g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].maskEui64Addr, maskEui64Addr, 8);
} else {
memset(g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].maskEui64Addr, 0xFF, 8);
}
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].dest_endpoint = dest_endpoint;
ret = true; ret = true;
} }
} }
...@@ -377,9 +391,10 @@ kk_err_t kZclOnOffClusterServerInit(pOnOffClusterOnOffStatusCallback pOnOffStatu ...@@ -377,9 +391,10 @@ kk_err_t kZclOnOffClusterServerInit(pOnOffClusterOnOffStatusCallback pOnOffStatu
void ON_OFF_Cmd_Handler(uint8_t endpoint,bool onoff) void ON_OFF_Cmd_Handler(uint8_t endpoint,bool onoff)
{ {
OnOffStatusEnum on_off_ctr = (OnOffStatusEnum)onoff; OnOffStatusEnum on_off_ctr = (OnOffStatusEnum)onoff;
kZclClusterSetPermitReportInfo(endpoint,ZCL_CLUSTER_GEN_ON_OFF,true,false); kZclClusterSetPermitReportInfo(endpoint,ZCL_CLUSTER_GEN_ON_OFF,true,false,true,true,NULL,RESET_ENDPOINT);
kZclOnOffClusterServerOnOffControl(endpoint, on_off_ctr); kZclOnOffClusterServerOnOffControl(endpoint, on_off_ctr);
} }
/* DESP: Modified attribute reporting interface, reference from SDK callback[emberAfReportingAttributeChangeCallback]. /* DESP: Modified attribute reporting interface, reference from SDK callback[emberAfReportingAttributeChangeCallback].
* Auth: dingmz_frc.20190701. * Auth: dingmz_frc.20190701.
* */ * */
...@@ -388,6 +403,7 @@ void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId, ...@@ -388,6 +403,7 @@ void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId,
if(!zb_bindingTblSearched(clusterId,endpoint)){ if(!zb_bindingTblSearched(clusterId,endpoint)){
return; return;
} }
iKonkeAfSelfPrint("######kOptTunnelReportingPlagiarizeOriginal111111\r\n");
for(u8 i = 0; i < ZCL_REPORTING_TABLE_NUM; i++){ for(u8 i = 0; i < ZCL_REPORTING_TABLE_NUM; i++){
reportCfgInfo_t *pEntry = &reportingTab.reportCfgInfo[i]; reportCfgInfo_t *pEntry = &reportingTab.reportCfgInfo[i];
if( pEntry->endPoint == endpoint if( pEntry->endPoint == endpoint
...@@ -404,6 +420,7 @@ void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId, ...@@ -404,6 +420,7 @@ void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId,
ZB_EXCEPTION_POST(SYS_EXCEPTTION_ZB_ZCL_ENTRY); ZB_EXCEPTION_POST(SYS_EXCEPTTION_ZB_ZCL_ENTRY);
return; return;
} }
u16 len = zcl_getAttrSize(pAttrEntry->type, pAttrEntry->data); u16 len = zcl_getAttrSize(pAttrEntry->type, pAttrEntry->data);
len = (len>8) ? (8):(len); len = (len>8) ? (8):(len);
...@@ -415,5 +432,43 @@ void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId, ...@@ -415,5 +432,43 @@ void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId,
pEntry->clusterID, pAttrEntry->id, pAttrEntry->type, pAttrEntry->data); pEntry->clusterID, pAttrEntry->id, pAttrEntry->type, pAttrEntry->data);
} }
} }
}
void kOptTunnelReportingStatus(uint8_t endpoint, uint16_t clusterId, uint16_t attributeId )
{
if(!zb_bindingTblSearched(clusterId,endpoint)){
return;
}
iKonkeAfSelfPrint("######kOptTunnelReportingStatus111111\r\n");
for(u8 i = 0; i < ZCL_REPORTING_TABLE_NUM; i++){
reportCfgInfo_t *pEntry = &reportingTab.reportCfgInfo[i];
if( pEntry->endPoint == endpoint
&& pEntry->clusterID == clusterId
&& pEntry->attrID == attributeId) {
epInfo_t dstEpInfo;
TL_SETSTRUCTCONTENT(dstEpInfo, 0);
dstEpInfo.dstAddrMode = APS_SHORT_DSTADDR_WITHEP;
dstEpInfo.dstEp = 0x01;
dstEpInfo.dstAddr.shortAddr = 0x0000;
dstEpInfo.profileId = pEntry->profileID;
dstEpInfo.txOptions = 0;
dstEpInfo.radius = 0;
zclAttrInfo_t *pAttrEntry = zcl_findAttribute(pEntry->endPoint, pEntry->clusterID, pEntry->attrID);
if(!pAttrEntry){
//should not happen.
ZB_EXCEPTION_POST(SYS_EXCEPTTION_ZB_ZCL_ENTRY);
return;
}
u16 len = zcl_getAttrSize(pAttrEntry->type, pAttrEntry->data);
len = (len>8) ? (8):(len);
//store for next compare
memcpy(pEntry->prevData, pAttrEntry->data, len);
zcl_sendReportCmd(pEntry->endPoint, &dstEpInfo, TRUE, ZCL_FRAME_SERVER_CLIENT_DIR,
pEntry->clusterID, pAttrEntry->id, pAttrEntry->type, pAttrEntry->data);
}
}
} }
...@@ -9,9 +9,20 @@ ...@@ -9,9 +9,20 @@
#include "zcl.h" #include "zcl.h"
#include "ikk-network.h" #include "ikk-network.h"
typedef struct {
uint8_t endpoint;
uint8_t onOffValue;
bool isMultiContorl; //whether multi-control, used to judge whether send response or multi-control
bool isSendResponse;
addrExt_t maskEui64Addr;
uint8_t dest_endpoint;
}ZclOnOffControlInfoSt;
typedef enum{ EOOS_OFF = 0, EOOS_ON, EOOS_UNKNOW }OnOffStatusEnum; typedef enum{ EOOS_OFF = 0, EOOS_ON, EOOS_UNKNOW }OnOffStatusEnum;
typedef enum{ EOOC_OFF = 0, EOOC_ON, EOOC_TOGGLE, EOOC_UNKNOW }OnOffCtrlEnum; typedef enum{ EOOC_OFF = 0, EOOC_ON, EOOC_TOGGLE, EOOC_UNKNOW }OnOffCtrlEnum;
#define RESET_ENDPOINT 0xFE
#define ZCL_CMD_ONOFF_OFF 0x00 #define ZCL_CMD_ONOFF_OFF 0x00
#define ZCL_CMD_ONOFF_ON 0x01 #define ZCL_CMD_ONOFF_ON 0x01
#define ZCL_CMD_ONOFF_TOGGLE 0x02 #define ZCL_CMD_ONOFF_TOGGLE 0x02
...@@ -19,12 +30,15 @@ typedef enum{ EOOC_OFF = 0, EOOC_ON, EOOC_TOGGLE, EOOC_UNKNOW }OnOffCtrlEnum; ...@@ -19,12 +30,15 @@ typedef enum{ EOOC_OFF = 0, EOOC_ON, EOOC_TOGGLE, EOOC_UNKNOW }OnOffCtrlEnum;
#define ZCL_ONOFF_STATUS_OFF 0x00 #define ZCL_ONOFF_STATUS_OFF 0x00
#define ZCL_ONOFF_STATUS_ON 0x01 #define ZCL_ONOFF_STATUS_ON 0x01
typedef struct tag_zcl_report_table{ typedef struct tag_zcl_report_table{
uint8_t endpoint; uint8_t endpoint;
uint16_t cluster; uint16_t cluster;
bool reportEnable; bool reportEnable;
bool sceneRecallFlg; bool sceneRecallFlg;
bool reportGatewayEnable;
bool reportChildDeviceEnable;
addrExt_t maskEui64Addr;
uint8_t dest_endpoint;
}ZclReportTableSt; }ZclReportTableSt;
#define MAX_ATTR_CHANGE_SUPPORT_NUMS 8 #define MAX_ATTR_CHANGE_SUPPORT_NUMS 8
...@@ -61,7 +75,9 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl ...@@ -61,7 +75,9 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl
bool Get_Model_ID(uint8_t *ModeID); bool Get_Model_ID(uint8_t *ModeID);
bool kkClusterGetReportingPeriod(uint8_t endpoint, uint16_t cluster_id, uint16_t attribute_id,uint16_t *min_interval, uint16_t *max_interval ); bool kkClusterGetReportingPeriod(uint8_t endpoint, uint16_t cluster_id, uint16_t attribute_id,uint16_t *min_interval, uint16_t *max_interval );
void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId, uint16_t attributeId ); void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId, uint16_t attributeId );
void kOptTunnelReportingStatus(uint8_t endpoint, uint16_t clusterId, uint16_t attributeId );
void kZclClusterPermitReportTableInit(BindObjSt clusterBindList[], uint8_t size); void kZclClusterPermitReportTableInit(BindObjSt clusterBindList[], uint8_t size);
bool kZclClusterGetPermitReportInfo(uint8_t endpoint, uint16_t cluster, ZclReportTableSt *zclReportPermit); bool kZclClusterGetPermitReportInfo(uint8_t endpoint, uint16_t cluster, ZclReportTableSt *zclReportPermit);
bool kZclClusterSetPermitReportInfo(uint8_t endpoint, uint16_t cluster, bool reportEnable, bool sceneRecallFlg); bool kZclClusterSetPermitReportInfo(uint8_t endpoint, uint16_t cluster, bool reportEnable, bool sceneRecallFlg
, bool reportGatewayEnable, bool reportChildDeviceEnable, uint8_t *maskEui64Addr, uint8_t dest_endpoint);
#endif /* _SAMPLE_LIGHT_H_ */ #endif /* _SAMPLE_LIGHT_H_ */
...@@ -56,7 +56,7 @@ uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len) ...@@ -56,7 +56,7 @@ uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len)
/* DESP: remap opcode, arg direction 0: FCC0->AA55 1:AA55->FCC0 /* DESP: remap opcode, arg direction 0: FCC0->AA55 1:AA55->FCC0
* Auth: * Auth:
* */ * */
uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction) static uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction)
{ {
for (uint8_t i = 0; i < (sizeof(opcodeReampTable)/(2*sizeof(uint16_t))); i++ ) { for (uint8_t i = 0; i < (sizeof(opcodeReampTable)/(2*sizeof(uint16_t))); i++ ) {
if (opcodeReampTable[i][0] == Opcode) { if (opcodeReampTable[i][0] == Opcode) {
...@@ -66,7 +66,6 @@ uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction) ...@@ -66,7 +66,6 @@ uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction)
return 0xFFFF; return 0xFFFF;
} }
kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut) kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut)
{ {
//UMsgNodeSt uMsgNode = {0}; //UMsgNodeSt uMsgNode = {0};
...@@ -144,7 +143,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st ...@@ -144,7 +143,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
//check install code length 20200725 //check install code length 20200725
uint8_t length = data.u8ARG[0]; uint8_t length = data.u8ARG[0];
if (length != 16) { if (length != 16) {//如果不是16位的数据就不做任何改变,只回复
send_buf.u8ARG[0] = ERR_FORMAT; send_buf.u8ARG[0] = ERR_FORMAT;
send_buf.u8ARG[1] = data.u8ARG[0]; send_buf.u8ARG[1] = data.u8ARG[0];
memcpy(&send_buf.u8ARG[2], &data.u8ARG[1], length); memcpy(&send_buf.u8ARG[2], &data.u8ARG[1], length);
...@@ -247,9 +246,9 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st ...@@ -247,9 +246,9 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
memset(buffer, 0, 33); memset(buffer, 0, 33);
uint8_t *data = ISN_TOKEN_GET(); uint8_t *data = ISN_TOKEN_GET();
iKonkeAfSelfPrint("len %x\r\n",data[0]);
iKonkeAfSelfPrintBuffer(data+1,32);
length = data[0]; length = data[0];
iKonkeAfSelfPrint("read ISN len %x\r\n",data[0]);
iKonkeAfSelfPrintBuffer(data+1,32);
memcpy(buffer,data,length +1); memcpy(buffer,data,length +1);
if(length > 32) { if(length > 32) {
...@@ -268,7 +267,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st ...@@ -268,7 +267,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
{ {
uint8_t mac_length = 0x00; uint8_t mac_length = 0x00;
addrExt_t addr,local_addr; addrExt_t addr,local_addr;
flash_read(CFG_MAC_ADDRESS,8,(uint8_t*)local_addr); zb_getLocalExtAddr(local_addr);
mac_length = data.u8ARG[0]; mac_length = data.u8ARG[0];
if (mac_length != 8) { if (mac_length != 8) {
...@@ -293,8 +292,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st ...@@ -293,8 +292,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
case (UART_MSG_READ_MAC_CODE_OPCODE)://ok case (UART_MSG_READ_MAC_CODE_OPCODE)://ok
{ {
addrExt_t addr; addrExt_t addr;
flash_read(CFG_MAC_ADDRESS,8,(uint8_t*)addr); zb_getLocalExtAddr(addr);
// zb_getLocalExtAddr(addr);
send_buf.u8ARG[0] = 0x00; send_buf.u8ARG[0] = 0x00;
send_buf.u8ARG[1] = 0x08; send_buf.u8ARG[1] = 0x08;
...@@ -403,82 +401,48 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st ...@@ -403,82 +401,48 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
} }
case (UART_MSG_WRITE_INTERPAN_PARA_OPCODE): case (UART_MSG_WRITE_INTERPAN_PARA_OPCODE):
{ {
extern void GetInterpanPara(uint8_t *enable, uint8_t *channel, uint16_t *panId);
uint8_t enable = 0; uint8_t enable = 0;
uint16_t panId = 0;
uint8_t channel = 0; uint8_t channel = 0;
int8_t radioTxPower = 0; uint16_t panId = 0;
enable = data.u8ARG[0]; enable = data.u8ARG[0];
channel = data.u8ARG[1]; channel = data.u8ARG[1];
panId = UINT16_HL(data.u8ARG[2], data.u8ARG[3]); panId = UINT16_HL(data.u8ARG[2], data.u8ARG[3]);
radioTxPower = data.u8ARG[4];
if (enable == 1) SetInterpanPara(channel,panId);
zb_factoryReset(); GetInterpanPara(&enable, &channel, &panId);
SetInterpanPara(channel,panId,enable);
send_buf.u8ARG[0] = ERR_OK; send_buf.u8ARG[0] = ERR_OK;
memcpy(&send_buf.u8ARG[1], &data.u8ARG[0], data.u8ArgLen); send_buf.u8ARG[1] = 0xff;
send_buf.u8ARG[2] = channel;
send_buf.u8ARG[3] = HI_UINT16(panId);
send_buf.u8ARG[4] = LO_UINT16(panId);
send_buf.u8ArgLen = 5;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
send_buf.u8ArgLen = data.u8ArgLen + 1; case (UART_MSG_READ_INTERPAN_PARA_OPCODE):
{
extern void GetInterpanPara(uint8_t *enable, uint8_t *channel, uint16_t *panId);
uint8_t enable = 0;
uint8_t channel = 0;
uint16_t panId = 0;
GetInterpanPara(&enable, &channel, &panId);
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ARG[1] = enable;
send_buf.u8ARG[2] = channel;
send_buf.u8ARG[3] = HI_UINT16(panId);
send_buf.u8ARG[4] = LO_UINT16(panId);
send_buf.u8ArgLen = 5;
reply_control_field = Z_TO_H_NO_ACK; reply_control_field = Z_TO_H_NO_ACK;
break; break;
} }
// case (UART_MSG_READ_DEVICE_SNAP_OPCODE):
// {
// uint8_t tmp_value = 0;
// uint8_t send_length = 0;
//
// send_buf.u8ARG[send_length++] = ERR_OK;
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_STACK_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
//
// EmberEUI64 localEui64;
// EmberNodeType nodeTypeResult = 0xFF;
// EmberNetworkParameters networkParams;
// emberAfGetEui64(localEui64);
// SWAP_EUI64((uint8_t *)&localEui64);
//
// if(emberAfNetworkState() == EMBER_JOINED_NETWORK) {
// emberAfGetNetworkParameters(&nodeTypeResult, &networkParams);
// send_buf.u8ARG[send_length++] = HI_UINT16(networkParams.panId);
// send_buf.u8ARG[send_length++] = LO_UINT16(networkParams.panId);
// send_buf.u8ARG[send_length++] = HI_UINT16(emberAfGetNodeId());
// send_buf.u8ARG[send_length++] = LO_UINT16(emberAfGetNodeId());
// memcpy(&send_buf.u8ARG[send_length], localEui64, 8);
// send_length = send_length + 8;
// send_buf.u8ARG[send_length++] = networkParams.radioChannel;
// send_buf.u8ARG[send_length++] = networkParams.radioTxPower;
// } else {
// emberAfGetNetworkParameters(&nodeTypeResult, &networkParams);
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// memcpy(&send_buf.u8ARG[send_length], localEui64, 8);
// send_length = send_length + 8;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// }
// //SV
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_APPLICATION_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
// //HV
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_HW_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
// memset(&send_buf.u8ARG[send_length], 0xff, 4);
// send_length = send_length + 4;
// send_buf.u8ARG[send_length++] = emberAfNetworkState();
//
// send_buf.u8ArgLen = send_length;
// //send_buf.u8Datalen = send_length + 3;
// reply_control_field = Z_TO_H_NO_ACK;
//
// break;
// }
//nwk operation request //nwk operation request
case (UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE)://ok case (UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE)://ok
{ {
......
...@@ -34,7 +34,6 @@ typedef struct{ ...@@ -34,7 +34,6 @@ typedef struct{
}MsgFrameworkFormat_st; }MsgFrameworkFormat_st;
kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut); kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut);
uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction);
uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len); uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len);
uint8_t kCmdMsgDataSentByPort(uint8_t u8Control_Field, DataField_st data, bool isGetResult, ComPortEm port); uint8_t kCmdMsgDataSentByPort(uint8_t u8Control_Field, DataField_st data, bool isGetResult, ComPortEm port);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#define __IKONKE_MODULE_DEBUG_H______________________________ #define __IKONKE_MODULE_DEBUG_H______________________________
#define IKONKE_DEBUG_LOG_ENABLE (0) // ENABLE #define IKONKE_DEBUG_LOG_ENABLE (1) // ENABLE
#define PROMPT_DSR "" #define PROMPT_DSR ""
......
...@@ -19,14 +19,14 @@ ...@@ -19,14 +19,14 @@
#define TOUCH_KEY_LONG_PRESS_TIME_MS (5 * 1000) #define TOUCH_KEY_LONG_PRESS_TIME_MS (5 * 1000)
#define MECHANICAL_KEY_LONG_PRESS_TIME_MS (20 * 1000) #define MECHANICAL_KEY_LONG_PRESS_TIME_MS (20 * 1000)
#define FIRST_BTN_LONG_PRESSED_VALIED_TIME_MS (15 * 1000) #define FIRST_BTN_LONG_PRESSED_VALIED_TIME_MS (10 * 1000)
#define FACTORY_TEST_POLL_TTME_1S (1 * 1000) #define FACTORY_TEST_POLL_TTME_1S (1 * 1000)
#define FACTORY_TEST_POLL_TTME_10S (10 * 1000) #define FACTORY_TEST_POLL_TTME_10S (10 * 1000)
#define FACTORY_TEST_POLL_TIMES (FACTORY_TEST_POLL_TTME_10S / FACTORY_TEST_POLL_TTME_1S) #define FACTORY_TEST_POLL_TIMES (FACTORY_TEST_POLL_TTME_10S / FACTORY_TEST_POLL_TTME_1S)
#if AGING_DEBUG #if AGING_DEBUG
#define FACTORY_TEST_15MIN_MS (2 * 60 * 1000) #define FACTORY_TEST_15MIN_MS (2 * 60 * 1000)
#define FACTORY_TEST_4HOU_MS (5 * 1 * 60 * 1000) #define FACTORY_TEST_4HOU_MS (1 * 15 * 60 * 1000)
#else #else
#define FACTORY_TEST_15MIN_MS (15 * 60 * 1000) #define FACTORY_TEST_15MIN_MS (15 * 60 * 1000)
#define FACTORY_TEST_4HOU_MS (4 * 60 * 60 * 1000) #define FACTORY_TEST_4HOU_MS (4 * 60 * 60 * 1000)
...@@ -42,11 +42,15 @@ typedef enum{ ...@@ -42,11 +42,15 @@ typedef enum{
FTS_AGING_4HOU_START, FTS_AGING_4HOU_START,
FTS_AGING_4HOU, FTS_AGING_4HOU,
FTS_AGING_DONE, FTS_AGING_DONE,
FTS_AGING_FORCE_EXIT, FTS_FORCE_EXIT,
FTS_AGING_WAITING, FTS_WAITING_RELEASED,//waiting key released
FTS_AGING_FORCE_REBOOT, FTS_FORCE_REBOOT,
FTS_AGING_FIRST_LONG_PRESSED, FTS_FIRST_LONG_PRESSED,
FTS_AGING_WAITING_SECOND_PRESS FTS_WAITING_SECOND_PRESS,
FTS_SINGLE_BOARD_TEST,
FTS_FULL_DEVICE_TEST,
FTS_SINGLE_BOARD_TEST_DONE,
FTS_FULL_DEVICE_TEST_DONE,
}FactoryTestStatusEnum; }FactoryTestStatusEnum;
typedef struct{ typedef struct{
...@@ -74,7 +78,12 @@ void kSetAgingMaxTime(uint16_t value); ...@@ -74,7 +78,12 @@ void kSetAgingMaxTime(uint16_t value);
//获取当前产测状态 //获取当前产测状态
FactoryTestStatusEnum kGetFactoryTestStatus(void); FactoryTestStatusEnum kGetFactoryTestStatus(void);
//void kGetFactoryTestBtnAction(uint8_t btn_id, BtnActionEnum action); //void kGetFactoryTestBtnAction(uint8_t btn_id, BtnActionEnum action);
void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num); void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num,uint8_t led_id);
void kSetNetworkSteeringInfo(uint8_t channel, uint16_t PanId);
//Auth: han_frc.20220105.
void kSetAgingTestDone(void);
kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut); kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut);
#endif #endif
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "ikk-debug.h" #include "ikk-debug.h"
#include "ikk-token.h" #include "ikk-token.h"
#include "ikk-network.h" #include "ikk-network.h"
#include "ikk-factory-test.h"
static bool gInterPanEnabled; // 1:enable static bool gInterPanEnabled; // 1:enable
static uint16_t gInterPanID = 0x1111; // 1:enable static uint16_t gInterPanID = 0x1111; // 1:enable
...@@ -16,12 +16,10 @@ static uint8_t g_interpanChannel = 20; ...@@ -16,12 +16,10 @@ static uint8_t g_interpanChannel = 20;
pInterPanMsgIncomingCallback gInterPanMsgIncomingCallback; pInterPanMsgIncomingCallback gInterPanMsgIncomingCallback;
static ev_timer_event_t *Interpan_timerEvt = NULL;
static ev_timer_event_t *Interpan_DelaySendEvt = NULL; static ev_timer_event_t *Interpan_DelaySendEvt = NULL;
static INCOM_MESSAGE_INFO sIncomingMessageInfo = {0}; static INCOM_MESSAGE_INFO sIncomingMessageInfo = {0};
static s32 kInterPanEventHandler(void);
static s32 kInterPanDelaySendTestDataEventHandler(void ); static s32 kInterPanDelaySendTestDataEventHandler(void );
/** /**
* @brief Definition for Incoming cluster / Sever Cluster * @brief Definition for Incoming cluster / Sever Cluster
...@@ -99,18 +97,16 @@ void afInterpan_dataSendConfirm(void *arg) ...@@ -99,18 +97,16 @@ void afInterpan_dataSendConfirm(void *arg)
} }
bool interpanleaveflg = false;
void kInterPanEnable(uint8_t channel) void kInterPanEnable(uint8_t channel)
{ {
rf_setChannel(channel); rf_setChannel(channel);
printf("kInterPanEnable enable,Regesiter Interpan Func,network = %d\r\n!!\r\n",kNwkGetCurrentStatus()); printf("kInterPanEnable enable,Regesiter Interpan Func,network = %d\r\n!!\r\n",kNwkGetCurrentStatus());
if (kNwkGetCurrentStatus() == ENS_LEAVED) { if (zb_isDeviceJoinedNwk()){
zb_factoryReset();
af_endpointRegister(INTERPAN_ENDPOINT, (af_simple_descriptor_t *)&kInterpanSimpleDesc, afInterpan_rx_handler, afInterpan_dataSendConfirm); interpanleaveflg = true;
}
else{
kNwkFactoryReset(false);
} }
af_endpointRegister(INTERPAN_ENDPOINT, (af_simple_descriptor_t *)&kInterpanSimpleDesc, afInterpan_rx_handler, afInterpan_dataSendConfirm);
} }
void kInterpanDisable(void) void kInterpanDisable(void)
...@@ -128,19 +124,17 @@ void kInterpanDisable(void) ...@@ -128,19 +124,17 @@ void kInterpanDisable(void)
void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming) void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming)
{ {
if (kGetFactoryTestStatus() == FTS_NORMAL) {
bool interPanEnabledFlg = kGetInterpanEnableFlg(); gInterPanEnabled = false;
if (interPanEnabledFlg) { af_endpointUnregister(INTERPAN_ENDPOINT);
gInterPanEnabled = true; printf("kInterPanEnable disable\r\n!!\r\n");
} }
if (gInterPanEnabled == true) { else{
gInterPanEnabled = true;
printf("kInterPanEnable enable\r\n!!\r\n");
kInterPanEnable(INTERPAN_CHANNEL); kInterPanEnable(INTERPAN_CHANNEL);
if(Interpan_timerEvt){ if (!zb_isDeviceJoinedNwk()) {
TL_ZB_TIMER_CANCEL(&Interpan_timerEvt);
}
Interpan_timerEvt = TL_ZB_TIMER_SCHEDULE(kInterPanEventHandler, NULL, INTERPAN_AUTO_OFF_TIME);
if (kNwkGetCurrentStatus() == ENS_LEAVED) {
if(Interpan_DelaySendEvt) if(Interpan_DelaySendEvt)
TL_ZB_TIMER_CANCEL(&Interpan_DelaySendEvt); TL_ZB_TIMER_CANCEL(&Interpan_DelaySendEvt);
...@@ -184,21 +178,21 @@ bool kInterPanSetEnableStatus(uint8_t enable) ...@@ -184,21 +178,21 @@ bool kInterPanSetEnableStatus(uint8_t enable)
kSetInterpanEnableFlg(!gInterPanEnabled); kSetInterpanEnableFlg(!gInterPanEnabled);
} }
void SetInterpanPara(uint8_t channel,uint16_t panid,bool is_enable) void SetInterpanPara(uint8_t channel,uint16_t panid)
{ {
if(panid != 0xffff)
gInterPanID = panid;
if((channel != 0xff)&&(channel>=11)&&(channel<=26)) if((channel != 0xff)&&(channel>=11)&&(channel<=26))
g_interpanChannel = channel; g_interpanChannel = channel;
if(is_enable) if(panid != 0xffff)
{ gInterPanID = panid;
gInterPanEnabled = TRUE; }
kSetInterpanEnableFlg(gInterPanEnabled);
} void GetInterpanPara(uint8_t *enable, uint8_t *channel, uint16_t *panId)
else {
kInterpanDisable(); *enable = (gInterPanEnabled == false) ? 0x00 : 0x01;
*channel = g_interpanChannel;
*panId = gInterPanID;
} }
static uint8_t sSend_Count = 0; static uint8_t sSend_Count = 0;
static s32 kInterPanDelaySendTestDataEventHandler(void ) static s32 kInterPanDelaySendTestDataEventHandler(void )
{ {
...@@ -211,17 +205,6 @@ static s32 kInterPanDelaySendTestDataEventHandler(void ) ...@@ -211,17 +205,6 @@ static s32 kInterPanDelaySendTestDataEventHandler(void )
sSend_Count = 0; sSend_Count = 0;
return -1; return -1;
} }
static s32 kInterPanEventHandler(void)
{
iKonkeAfSelfPrint("kInterPanEventHandler\r\n");
if (gInterPanEnabled ==true) {
af_endpointUnregister(INTERPAN_ENDPOINT);
kInterPanSetEnableStatus(false);
}
return -1;
}
kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode) kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode)
{ {
......
...@@ -12,7 +12,6 @@ extern const af_simple_descriptor_t kInterpanSimpleDesc; ...@@ -12,7 +12,6 @@ extern const af_simple_descriptor_t kInterpanSimpleDesc;
#define INTERPAN_EVENT_INIT 0x00 // interPan Event #define INTERPAN_EVENT_INIT 0x00 // interPan Event
#define INTERPAN_EVENT_OFF 0x01 // #define INTERPAN_EVENT_OFF 0x01 //
#define INTERPAN_AUTO_OFF_TIME (10 * 60 * 1000)
#define INTERPAN_DELAY_SEND_INTERVAL (3 * 1000) #define INTERPAN_DELAY_SEND_INTERVAL (3 * 1000)
#define INTERPAN_DELAY_SEND_TIMES (2) #define INTERPAN_DELAY_SEND_TIMES (2)
#define INTERPAN_CHANNEL 20 #define INTERPAN_CHANNEL 20
...@@ -30,7 +29,8 @@ typedef struct{ ...@@ -30,7 +29,8 @@ typedef struct{
uint8_t reserved[8]; uint8_t reserved[8];
}INCOM_MESSAGE_INFO; }INCOM_MESSAGE_INFO;
void SetInterpanPara(uint8_t channel,uint16_t panid,bool is_enable); void SetInterpanPara(uint8_t channel,uint16_t panid);
void GetInterpanPara(uint8_t *enable, uint8_t *channel, uint16_t *panId);
void afInterpan_dataSendConfirm(void *arg); void afInterpan_dataSendConfirm(void *arg);
void afInterpan_rx_handler(void *arg); void afInterpan_rx_handler(void *arg);
void kInterpanDisable(void); void kInterpanDisable(void);
...@@ -38,5 +38,7 @@ kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode); ...@@ -38,5 +38,7 @@ kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode);
void kInterpan_Init(void); void kInterpan_Init(void);
bool kInterPanSetEnableStatus(uint8_t enable); bool kInterPanSetEnableStatus(uint8_t enable);
bool kInterPanGetEnableStatus(void);
void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming); void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming);
#endif /* _SAMPLE_LIGHT_H_ */ #endif /* _SAMPLE_LIGHT_H_ */
...@@ -86,6 +86,8 @@ ...@@ -86,6 +86,8 @@
#define UART_MSG_QUERY_SWITCH_ONOFF_OPCODE 0xED06 #define UART_MSG_QUERY_SWITCH_ONOFF_OPCODE 0xED06
#define UART_MSG_ENTER_FACTORY_TEST_OPCODE 0xED14 #define UART_MSG_ENTER_FACTORY_TEST_OPCODE 0xED14
#define UART_MSG_ONOFF_SWITCH_OPCODE 0xED15 #define UART_MSG_ONOFF_SWITCH_OPCODE 0xED15
#define UART_MSG_QUERY_FACTORY_STATE_OPCODE 0xED16
#define UART_MSG_LED_GROUP_CONTROL_OPCODE 0xED17
#define UART_MSG_GPIO_TEST_OPCODE 0xED10 #define UART_MSG_GPIO_TEST_OPCODE 0xED10
#define UART_MSG_READ_RSSI_REQUEST_OPCODE 0xED12 #define UART_MSG_READ_RSSI_REQUEST_OPCODE 0xED12
...@@ -172,6 +174,7 @@ typedef enum { ...@@ -172,6 +174,7 @@ typedef enum {
ERR_WRITE_FAILED=0x04, ERR_WRITE_FAILED=0x04,
ERR_READ_WRITE_TIMEOUT=0x05, ERR_READ_WRITE_TIMEOUT=0x05,
ERR_NOT_EXIST=0x06, ERR_NOT_EXIST=0x06,
ERR_EXEC_FAILED=0xe0,
ERR_UNKNOW=0xFF, ERR_UNKNOW=0xFF,
}ERR_RET_E; }ERR_RET_E;
typedef enum { Z3D_COORDINATOR = 0, Z3D_ROUTER, Z3D_ENDDEVICE }Z3DevTypeEm; typedef enum { Z3D_COORDINATOR = 0, Z3D_ROUTER, Z3D_ENDDEVICE }Z3DevTypeEm;
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "ikk-cluster.h" #include "ikk-cluster.h"
#include "ikk-interpan.h" #include "ikk-interpan.h"
#include "ikk-factory-test.h" #include "ikk-factory-test.h"
#include "ikk-ota.h"
#include "../../../../zigbee/aps/aps_api.h" #include "../../../../zigbee/aps/aps_api.h"
#include "../../../../zigbee/common/includes/zb_common.h" #include "../../../../zigbee/common/includes/zb_common.h"
/********************************************************************** /**********************************************************************
...@@ -24,6 +25,18 @@ addrExt_t g_Eui64GatewayAddr = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; ...@@ -24,6 +25,18 @@ addrExt_t g_Eui64GatewayAddr = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
BindObjSt g_lstBindingClusterConf[BINDING_CLUSTER_MAXN] = { {0},{0},{0},{0},{0},{0},{0},{0} }; BindObjSt g_lstBindingClusterConf[BINDING_CLUSTER_MAXN] = { {0},{0},{0},{0},{0},{0},{0},{0} };
// Automatic execution procedure after joined successed.
#define JOINED_PROCEDURE_NONE (0)
#define JOINED_PROCEDURE_REP_SNAPSHOT (1)
#define JOINED_PROCEDURE_REP_CMEI (2) //CMEI
#define JOINED_PROCEDURE_REP_ISN (3) //ISN
#define JOINED_PROCEDURE_END (0XFF)
uint8_t u8ActionIndexAfterJoined = JOINED_PROCEDURE_NONE;
static ev_timer_event_t *kUserJoinSucceedProcedureEvent = NULL;
s32 kUserJoinSucceedProcedureEventHandler(void *arg);
void kNwkjoinSucceedProcedureTrigger(uint32_t u32StartDelayNms );
static bool g_bJoiningReportFlg = false;
//static value //static value
static bool g_bIsNwkJoiningFlg = false; static bool g_bIsNwkJoiningFlg = false;
...@@ -75,7 +88,11 @@ bool IsSteeringNwkTimeout(void) ...@@ -75,7 +88,11 @@ bool IsSteeringNwkTimeout(void)
void Set_Nwk_Steering_Status(NwkSteeringStatusEnum Status) void Set_Nwk_Steering_Status(NwkSteeringStatusEnum Status)
{ {
NetworkSteeringState = Status; NetworkSteeringState = Status;
iKonkeAfSelfPrint(" set NetworkSteeringState = %d\r\n", NetworkSteeringState); if(zb_isDeviceJoinedNwk() && g_u32NwkJoiningCountdownCounter > 0){
g_bJoiningReportFlg = true;
}else
g_bJoiningReportFlg = false;
iKonkeAfSelfPrint(" set NetworkSteeringState = %d,g_bJoiningReportFlg = %d\r\n", NetworkSteeringState, g_bJoiningReportFlg);
} }
/* DESP: 高精度随机值接口,取值[minNum, maxNum]. /* DESP: 高精度随机值接口,取值[minNum, maxNum].
Auth: dingmz_frc.20190701. Auth: dingmz_frc.20190701.
...@@ -225,8 +242,17 @@ void kNwkGetGateWayEui64(addrExt_t eui64) ...@@ -225,8 +242,17 @@ void kNwkGetGateWayEui64(addrExt_t eui64)
* */ * */
void kNwkNetworkStatusNotifyCall(NwkStatusEnum nwkst ) void kNwkNetworkStatusNotifyCall(NwkStatusEnum nwkst )
{ {
extern bool interpanleaveflg;
if(interpanleaveflg)
{
interpanleaveflg = false;
return;
}
g_eCurrentNetworkStatus = nwkst; g_eCurrentNetworkStatus = nwkst;
iKonkeAfSelfPrint("!!!g_eCurrentNetworkStatus = %d, g_eLastNetworkStatus = %d\r\n",g_eCurrentNetworkStatus, g_eLastNetworkStatus);
if( g_eCurrentNetworkStatus != g_eLastNetworkStatus ) { if( g_eCurrentNetworkStatus != g_eLastNetworkStatus ) {
g_eLastNetworkStatus = g_eCurrentNetworkStatus; g_eLastNetworkStatus = g_eCurrentNetworkStatus;
...@@ -241,6 +267,14 @@ void kNwkNetworkStatusNotifyCall(NwkStatusEnum nwkst ) ...@@ -241,6 +267,14 @@ void kNwkNetworkStatusNotifyCall(NwkStatusEnum nwkst )
Gateway_IEEE_Addr_Save(addr); Gateway_IEEE_Addr_Save(addr);
iKonkeAfSelfPrint("#####kNwkNetworkStatusNotifyCall,Join Network addr=%x%x%x%x-%x%x%x%x!\r\n", iKonkeAfSelfPrint("#####kNwkNetworkStatusNotifyCall,Join Network addr=%x%x%x%x-%x%x%x%x!\r\n",
addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],addr[6],addr[7]); addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],addr[6],addr[7]);
if (kIsKonkeRemoteGateway() == true){
uint32_t randTimeMS = NWK_MIN_DELAY_TIME_MS_AFTER_POWER_ON * 2;
if(g_bJoiningReportFlg == false){
iKonkeAfSelfPrint("g_u32NwkJoiningCountdownCounter = %d,zb_isDeviceJoinedNwk = %d 222222222222\r\n",g_u32NwkJoiningCountdownCounter,zb_isDeviceJoinedNwk());
randTimeMS = kGetRandNum(RAND_MIN_NUM, RAND_MAX_NUM);
}
kNwkjoinSucceedProcedureTrigger(randTimeMS);
}
} }
} }
/* DESP: Network module tick loop handler interface. /* DESP: Network module tick loop handler interface.
...@@ -250,7 +284,7 @@ void kNwkModuleActionDetectCallback(void ) ...@@ -250,7 +284,7 @@ void kNwkModuleActionDetectCallback(void )
{ {
//static EmberNetworkStatus s_old_network_st = EMBER_NO_NETWORK; //static EmberNetworkStatus s_old_network_st = EMBER_NO_NETWORK;
static uint16_t ucRestoreSteeringCount = 0; static uint16_t ucRestoreSteeringCount = 0;
//iKonkeAfSelfPrint("g_u32NwkJoiningCountdownCounter = %d,zb_isDeviceJoinedNwk = %d 111111111111\r\n",g_u32NwkJoiningCountdownCounter,zb_isDeviceJoinedNwk());
// joining procedure // joining procedure
if( g_u32NwkJoiningCountdownCounter > 0 ) { if( g_u32NwkJoiningCountdownCounter > 0 ) {
--g_u32NwkJoiningCountdownCounter; --g_u32NwkJoiningCountdownCounter;
...@@ -380,17 +414,18 @@ bool kNwkIsExiting(void) ...@@ -380,17 +414,18 @@ bool kNwkIsExiting(void)
* */ * */
void kNwkFactoryReset(bool is_nwk_indicator) void kNwkFactoryReset(bool is_nwk_indicator)
{ {
iKonkeAfSelfPrint("######kNwkFactoryReset is_nwk_indicator1111111111111111111111111(%d)\r\n", is_nwk_indicator);
kNwkJoiningStart(0, NULL); kNwkJoiningStart(0, NULL);
memset(g_Eui64GatewayAddr, 0xFF, sizeof(g_Eui64GatewayAddr)); memset(g_Eui64GatewayAddr, 0xFF, sizeof(g_Eui64GatewayAddr));
Gateway_IEEE_Addr_Save(g_Eui64GatewayAddr); Gateway_IEEE_Addr_Save(g_Eui64GatewayAddr);
// //add by maozj 20200320 // //add by maozj 20200320
//#if Z30_DEVICE_OTA_ENABLE #if Z30_DEVICE_OTA_ENABLE
// kSetOTAStatus(OTA_NORMAL); kSetOTAStatus(OTA_NORMAL);
//#endif #endif
// EmberNodeId node = 0xFFFF; uint16_t node = 0xFFFF;
// kNwksaveNodeIdToFlash(node); kNwksaveNodeIdToFlash(node);
g_u32NwkJoiningCountdownCounter = 0; g_u32NwkJoiningCountdownCounter = 0;
// g_u32EnrollResultCheckCounter = 0; // g_u32EnrollResultCheckCounter = 0;
...@@ -400,6 +435,7 @@ void kNwkFactoryReset(bool is_nwk_indicator) ...@@ -400,6 +435,7 @@ void kNwkFactoryReset(bool is_nwk_indicator)
//led can blink when network leaved //led can blink when network leaved
if (is_nwk_indicator == true){ if (is_nwk_indicator == true){
if(zb_isDeviceJoinedNwk())//true status
zb_factoryReset(); zb_factoryReset();
g_KeyPressCauasLeave = true; g_KeyPressCauasLeave = true;
//add by maozj 20200407 for reset count down after network leaved //add by maozj 20200407 for reset count down after network leaved
...@@ -444,7 +480,7 @@ void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf) ...@@ -444,7 +480,7 @@ void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf)
NwkStatusEnum kNwkGetCurrentStatus(void ) NwkStatusEnum kNwkGetCurrentStatus(void )
{ {
NwkStatusEnum status; NwkStatusEnum status;
if(zb_isDeviceJoinedNwk()){ if(zb_isDeviceJoinedNwk() ||(kInterPanGetEnableStatus())){
status = ENS_ONLINE; status = ENS_ONLINE;
g_bIsNwkJoiningFlg = false; g_bIsNwkJoiningFlg = false;
} }
...@@ -486,15 +522,16 @@ void kNwkJoiningStart(uint32_t u32JoiningDuration, pJoinCompleteCallback callbac ...@@ -486,15 +522,16 @@ void kNwkJoiningStart(uint32_t u32JoiningDuration, pJoinCompleteCallback callbac
if( u32JoiningDuration > 0 ) if( u32JoiningDuration > 0 )
{ {
#if Z30_DEVICE_AGING_ENABLE #if Z30_DEVICE_AGING_ENABLE
if (kGetFactoryTestStatus() != FTS_NORMAL /*&& kGetFactoryTestStatus() != FTS_AGING_15MIN*/){ if (kGetFactoryTestStatus() != FTS_NORMAL && kGetFactoryTestStatus() != FTS_AGING_15MIN \
&& kGetFactoryTestStatus() != FTS_FULL_DEVICE_TEST){
return; return;
} }
#endif #endif
if(!zb_isDeviceJoinedNwk()) if(!zb_isDeviceJoinedNwk())
{ {
//disable interpan //disable interpan
if(kInterPanGetEnableStatus())
kInterpanDisable(); kInterpanDisable();
iKonkeAfSelfPrint("#####Set Steering Counter\r\n"); iKonkeAfSelfPrint("#####Set Steering Counter\r\n");
g_u32NwkJoiningCountdownCounter= MS2COUNT(u32JoiningDuration); g_u32NwkJoiningCountdownCounter= MS2COUNT(u32JoiningDuration);
g_pJoinCompleteCallback = callback; g_pJoinCompleteCallback = callback;
...@@ -502,6 +539,10 @@ void kNwkJoiningStart(uint32_t u32JoiningDuration, pJoinCompleteCallback callbac ...@@ -502,6 +539,10 @@ void kNwkJoiningStart(uint32_t u32JoiningDuration, pJoinCompleteCallback callbac
//add by maozj 20191206 //add by maozj 20191206
g_bNwkSteeringCompleteFlg = true; g_bNwkSteeringCompleteFlg = true;
g_eLastNetworkStatus = ENS_UNKNOW;
//add by Han. 20220210
g_bJoiningReportFlg = true;
} }
} }
else else
...@@ -518,6 +559,7 @@ status_t General_Report(uint8_t src_ep,uint8_t des_ep,uint16_t cluster,uint16_t ...@@ -518,6 +559,7 @@ status_t General_Report(uint8_t src_ep,uint8_t des_ep,uint16_t cluster,uint16_t
static ReportAttrData_ST reportInfo; static ReportAttrData_ST reportInfo;
uint8_t paload_len = 0; uint8_t paload_len = 0;
TL_SETSTRUCTCONTENT(dstEpInfo, 0); TL_SETSTRUCTCONTENT(dstEpInfo, 0);
iKonkeAfSelfPrint("General_Report111111\r\n");
dstEpInfo.dstAddrMode = APS_SHORT_DSTADDR_WITHEP; dstEpInfo.dstAddrMode = APS_SHORT_DSTADDR_WITHEP;
dstEpInfo.dstEp = des_ep; dstEpInfo.dstEp = des_ep;
...@@ -542,3 +584,58 @@ status_t General_Report(uint8_t src_ep,uint8_t des_ep,uint16_t cluster,uint16_t ...@@ -542,3 +584,58 @@ status_t General_Report(uint8_t src_ep,uint8_t des_ep,uint16_t cluster,uint16_t
ZCL_FRAME_SERVER_CLIENT_DIR, true, 0, ZCL_SEQ_NUM, (uint16_t )paload_len, (uint8_t *)&reportInfo); ZCL_FRAME_SERVER_CLIENT_DIR, true, 0, ZCL_SEQ_NUM, (uint16_t )paload_len, (uint8_t *)&reportInfo);
} }
/*Auth: Han_frc.20220125.*/
void kNwkjoinSucceedProcedureTrigger(uint32_t u32StartDelayNms)
{
u8ActionIndexAfterJoined = JOINED_PROCEDURE_REP_SNAPSHOT;
if(!ev_timer_exist(kUserJoinSucceedProcedureEvent)){
kUserJoinSucceedProcedureEvent = TL_ZB_TIMER_SCHEDULE(kUserJoinSucceedProcedureEventHandler, NULL, u32StartDelayNms);
}
}
extern kk_err_t kOptTunnelCommonReport(uint16_t attribute_id );
s32 kUserJoinSucceedProcedureEventHandler(void *arg)
{
iKonkeAfSelfPrint("\r\n6666Join Succeed procedure here(step: %d)\r\n", u8ActionIndexAfterJoined);
OPTTUNEL_TOKEN_ST sOptunnel_Token_temp;
flash_read(TOKEN_USER_LOCATION,USER_SIZE,(uint8_t*)&sOptunnel_Token_temp);
switch(u8ActionIndexAfterJoined) {
case (JOINED_PROCEDURE_REP_SNAPSHOT):
{
// report the device snap info,don't change the order.
iKonkeAfSelfPrint("++++++++++++== report OPTDATA\r\n");
u8ActionIndexAfterJoined = JOINED_PROCEDURE_REP_CMEI;//step 1
kOptTunnelCommonReport(ECA_OPTDATA);//step 2
return 500;
}
case (JOINED_PROCEDURE_REP_CMEI):
{
// report the device snap info.
iKonkeAfSelfPrint("++++++++++++== report CMEI\r\n");
u8ActionIndexAfterJoined = JOINED_PROCEDURE_REP_ISN;
if(!All_Same_Data((uint8_t*)&sOptunnel_Token_temp.cmei,0xff,32)){
kOptTunnelCommonReport(ECA_CMEI);
}
return 500;
}
case (JOINED_PROCEDURE_REP_ISN):
{
// report the device snap info.
iKonkeAfSelfPrint("++++++++++++== report ISN\r\n");
u8ActionIndexAfterJoined = JOINED_PROCEDURE_END;
if(!All_Same_Data((uint8_t*)&sOptunnel_Token_temp.isn,0xff,32)){
kOptTunnelCommonReport(ECA_ISN);
}
return 200;
}
case (JOINED_PROCEDURE_END):
{
// report the device snap info.
iKonkeAfSelfPrint("++++++++++++== JSP ended!\r\n");
u8ActionIndexAfterJoined = JOINED_PROCEDURE_NONE;
return -1;
}
default: break;
}
return 0;
}
#ifndef _IKK_NETWORK_H_ #ifndef _IKK_NETWORK_H_
#define _IKK_NETWORK_H_ #define _IKK_NETWORK_H_
#include "ikk-module-def.h" #include "ikk-module-def.h"
#include "ikk-opt-tunnel.h"
#include "ikk-debug.h" #include "ikk-debug.h"
#include "tl_common.h" #include "tl_common.h"
#include "zb_api.h" #include "zb_api.h"
...@@ -12,6 +13,9 @@ ...@@ -12,6 +13,9 @@
#define BINDING_CLUSTER_MAXN 8 #define BINDING_CLUSTER_MAXN 8
#define BINDING_EP_DEF 1 // default endpoint for binding #define BINDING_EP_DEF 1 // default endpoint for binding
#define NWK_MIN_DELAY_TIME_MS_AFTER_POWER_ON (500)
#define RAND_MIN_NUM (10 * 1000) //最小随机数,单位MS
#define RAND_MAX_NUM (40 * 1000 - RAND_MIN_NUM) //最大随机数
#define MAX_PALOAD_LEN 128 #define MAX_PALOAD_LEN 128
typedef struct tag_bind_objector_st { typedef struct tag_bind_objector_st {
......
...@@ -71,8 +71,10 @@ void Set2NwkJoiningCountdownCounter(u32 time_ms); ...@@ -71,8 +71,10 @@ void Set2NwkJoiningCountdownCounter(u32 time_ms);
* */ * */
kk_err_t kOptTunnelModuleInit(pFUNC_OPTDATA_MESSAGE_CALLBACK pOptdataIncomingCallback ); kk_err_t kOptTunnelModuleInit(pFUNC_OPTDATA_MESSAGE_CALLBACK pOptdataIncomingCallback );
/*Auth: han_frc.20220119.*/
uint8_t HexToASCII(uint8_t hex);
bool kOptTunnelTrytoWriteInstallCode(void);
kk_err_t kOptTunnelCommonReport(uint16_t attribute_id);
kk_err_t kOptTunnelOODReport(uint8_t channel, uint8_t opcode, uint8_t *arg, uint8_t length ); kk_err_t kOptTunnelOODReport(uint8_t channel, uint8_t opcode, uint8_t *arg, uint8_t length );
......
/*
//#include "app/framework/plugin/network-steering/network-steering.h" //#include "app/framework/plugin/network-steering/network-steering.h"
//#include "app/framework/plugin/network-steering/network-steering-internal.h" //#include "app/framework/plugin/network-steering/network-steering-internal.h"
#include "ikk-ota.h" #include "ikk-ota.h"
...@@ -21,11 +22,6 @@ pOTACallback g_pOTACallback = NULL; ...@@ -21,11 +22,6 @@ pOTACallback g_pOTACallback = NULL;
static void kOTAMoudleOptCallback(OTAStatusEnum status); static void kOTAMoudleOptCallback(OTAStatusEnum status);
//__no_init OTAGpioStatusST g_stOTAGpioStatus @ 0x2000FFF0;
static OTAGpioStatusST g_stOTAGpioStatus;
OTAStatusEnum kGetOTAStatus(void) OTAStatusEnum kGetOTAStatus(void)
{ {
return g_eOTAStatus; return g_eOTAStatus;
...@@ -76,7 +72,6 @@ static void kOTAMoudleOptCallback(OTAStatusEnum status) ...@@ -76,7 +72,6 @@ static void kOTAMoudleOptCallback(OTAStatusEnum status)
break; break;
case OTA_DOWNLOAD_DONE: case OTA_DOWNLOAD_DONE:
{ {
g_eOTAStatus = OTA_DOWNLOAD_DONE; g_eOTAStatus = OTA_DOWNLOAD_DONE;
break; break;
} }
...@@ -99,3 +94,4 @@ static void kOTAMoudleOptCallback(OTAStatusEnum status) ...@@ -99,3 +94,4 @@ static void kOTAMoudleOptCallback(OTAStatusEnum status)
break; break;
} }
} }
*/
/*
#ifndef __IKONKE_MODULE_OTA_H_______________________ #ifndef __IKONKE_MODULE_OTA_H_______________________
#define __IKONKE_MODULE_OTA_H_______________________ #define __IKONKE_MODULE_OTA_H_______________________
#include "tl_common.h" #include "tl_common.h"
...@@ -9,7 +10,6 @@ ...@@ -9,7 +10,6 @@
typedef enum{OTA_NORMAL=0, OTA_START,OTA_DOWNLOAD_DONE, OTA_VERITY_SUCCEED, OTA_FAILED}OTAStatusEnum; typedef enum{OTA_NORMAL=0, OTA_START,OTA_DOWNLOAD_DONE, OTA_VERITY_SUCCEED, OTA_FAILED}OTAStatusEnum;
typedef enum{OTA_GPIO_OFF=0, OAT_GPIO_ON}OTAGpioEnum;
#pragma pack(1) //按1字节对齐 #pragma pack(1) //按1字节对齐
typedef struct { typedef struct {
...@@ -40,3 +40,4 @@ void kOTAMoudleCallback(OTAStatusEnum status); ...@@ -40,3 +40,4 @@ void kOTAMoudleCallback(OTAStatusEnum status);
#endif #endif
*/
...@@ -111,12 +111,13 @@ bool kGetIndicatorNotDisturbModeFlg(void) ...@@ -111,12 +111,13 @@ bool kGetIndicatorNotDisturbModeFlg(void)
st = nv_flashReadNew(1, NV_MODULE_APP, NV_NO_DISTURB_MODE, sizeof(temp), (u8*)&temp); st = nv_flashReadNew(1, NV_MODULE_APP, NV_NO_DISTURB_MODE, sizeof(temp), (u8*)&temp);
if(st != NV_SUCC){ if(st != NV_SUCC){
temp = 0; temp = 0;
iKonkeAfSelfPrint("kGetIndicatorNotDisturbModeFlg failed!!\r\n"); //iKonkeAfSelfPrint("kGetIndicatorNotDisturbModeFlg failed!!\r\n");
} }
iKonkeAfSelfPrint("Read st =%d,data=%d\r\n",st,temp); //iKonkeAfSelfPrint("Read st =%d,data=%d\r\n",st,temp);
return (temp == 1) ;
return (temp == 1) ;
} }
nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value) nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value)
{ {
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
...@@ -132,6 +133,7 @@ nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value) ...@@ -132,6 +133,7 @@ nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value)
{ {
iKonkeAfSelfPrint("kSetIndicatorNotDisturbModeFlg failed!!\r\n"); iKonkeAfSelfPrint("kSetIndicatorNotDisturbModeFlg failed!!\r\n");
} }
return st; return st;
} }
...@@ -144,9 +146,10 @@ bool kGetInterpanEnableFlg(void) ...@@ -144,9 +146,10 @@ bool kGetInterpanEnableFlg(void)
temp = 1; temp = 1;
iKonkeAfSelfPrint("kGetInterpanEnableFlg failed!!\r\n"); iKonkeAfSelfPrint("kGetInterpanEnableFlg failed!!\r\n");
} }
return (temp == 1) ;
return (temp == 1) ;
} }
nv_sts_t kSetInterpanEnableFlg(uint8_t value) nv_sts_t kSetInterpanEnableFlg(uint8_t value)
{ {
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
...@@ -156,6 +159,35 @@ nv_sts_t kSetInterpanEnableFlg(uint8_t value) ...@@ -156,6 +159,35 @@ nv_sts_t kSetInterpanEnableFlg(uint8_t value)
{ {
iKonkeAfSelfPrint("kSetIndicatorNotDisturbModeFlg failed!!\r\n"); iKonkeAfSelfPrint("kSetIndicatorNotDisturbModeFlg failed!!\r\n");
} }
return st;
}
uint16_t kNwkgetNodeIdFromFlash(void)
{
nv_sts_t st = NV_SUCC;
uint16_t temp;
st = nv_flashReadNew(1, NV_MODULE_APP, NV_NODE_ID_FLG, sizeof(temp), (u8*)&temp);
if(st != NV_SUCC){
temp = 0xFFFF;
}
return temp ;
}
nv_sts_t kNwksaveNodeIdToFlash(uint16_t node_id)
{
nv_sts_t st = NV_SUCC;
uint16_t temp;
st = nv_flashReadNew(1, NV_MODULE_APP, NV_NODE_ID_FLG, sizeof(temp), (u8*)&temp);
if(st == NV_SUCC){
if(temp != node_id){
st = nv_flashWriteNew(1, NV_MODULE_APP, NV_NODE_ID_FLG, sizeof(uint16_t), (u8*)&node_id);
iKonkeAfSelfPrint("NodeId_Save result = %d\r\n",st);
}
}else if(st == NV_ITEM_NOT_FOUND){
st = nv_flashWriteNew(1, NV_MODULE_APP, NV_NODE_ID_FLG, sizeof(uint16_t), (u8*)&node_id);
}
return st; return st;
} }
...@@ -288,7 +320,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len) ...@@ -288,7 +320,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len)
//same data ,not need rewrite! //same data ,not need rewrite!
return 0; return 0;
}else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.modeid,0xff,32)){ }else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.modeid,0xff,32)){
flash_write(TOKEN_USER_LOCATION+MODEL_ID_LOC_OFFSET,len,buff); //Auth: han_frc.20220105.
u8 modelid_buff[35]={0};
modelid_buff[0] = len;
memcpy(modelid_buff+1,buff,len);
flash_write(TOKEN_USER_LOCATION+MODEL_ID_LOC_OFFSET,len+1,modelid_buff);
return 0; return 0;
}else{ }else{
sOptunnel_Token_temp.modeid.modeid_len = len; sOptunnel_Token_temp.modeid.modeid_len = len;
...@@ -309,7 +345,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len) ...@@ -309,7 +345,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len)
//same data ,not need rewrite! //same data ,not need rewrite!
return 0; return 0;
}else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.cmei,0xff,32)){ }else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.cmei,0xff,32)){
flash_write(TOKEN_USER_LOCATION+CMEI_LOC_OFFSET,len,buff); //Auth: han_frc.20220105.
u8 cmei_buff[35]={0};
cmei_buff[0] = len;
memcpy(cmei_buff+1,buff,len);
flash_write(TOKEN_USER_LOCATION+CMEI_LOC_OFFSET,len+1,cmei_buff);
return 0; return 0;
}else{ }else{
sOptunnel_Token_temp.cmei.cmei_len = len; sOptunnel_Token_temp.cmei.cmei_len = len;
...@@ -330,7 +370,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len) ...@@ -330,7 +370,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len)
//same data ,not need rewrite! //same data ,not need rewrite!
return 0; return 0;
}else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.isn,0xff,32)){ }else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.isn,0xff,32)){
flash_write(TOKEN_USER_LOCATION+ISN_LOC_OFFSET,len,buff); //Auth: han_frc.20220105.
u8 isn_buff[35]={0};
isn_buff[0] = len;
memcpy(isn_buff+1,buff,len);
flash_write(TOKEN_USER_LOCATION+ISN_LOC_OFFSET,len+1,isn_buff);
return 0; return 0;
}else{ }else{
sOptunnel_Token_temp.isn.isn_len = len; sOptunnel_Token_temp.isn.isn_len = len;
......
...@@ -82,6 +82,10 @@ nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value); ...@@ -82,6 +82,10 @@ nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value);
nv_sts_t kSetInterpanEnableFlg(uint8_t value); nv_sts_t kSetInterpanEnableFlg(uint8_t value);
bool kGetInterpanEnableFlg(void); bool kGetInterpanEnableFlg(void);
uint16_t kNwkgetNodeIdFromFlash(void);
nv_sts_t kNwksaveNodeIdToFlash(uint16_t node_id);
#if 1 #if 1
void falsh_test(uint8_t count); void falsh_test(uint8_t count);
#endif #endif
......
This diff is collapsed.
...@@ -216,5 +216,15 @@ ...@@ -216,5 +216,15 @@
<type>1</type> <type>1</type>
<locationURI>PARENT-2-PROJECT_LOC/platform/services/b85m/irq_handler.c</locationURI> <locationURI>PARENT-2-PROJECT_LOC/platform/services/b85m/irq_handler.c</locationURI>
</link> </link>
<link>
<name>apps/common/00ikonke_app/general/ikk-sequence.c</name>
<type>1</type>
<location>E:/telin_zigbee_sdk/tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-sequence.c</location>
</link>
<link>
<name>apps/common/00ikonke_app/general/ikk-sequence.h</name>
<type>1</type>
<location>E:/telin_zigbee_sdk/tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-sequence.h</location>
</link>
</linkedResources> </linkedResources>
</projectDescription> </projectDescription>
...@@ -360,6 +360,7 @@ typedef enum{ ...@@ -360,6 +360,7 @@ typedef enum{
NV_NO_DISTURB_MODE, //lmm add NV_NO_DISTURB_MODE, //lmm add
NV_AGING_TEST_TIME, //lmm add NV_AGING_TEST_TIME, //lmm add
NV_INTERPAN_ENABLE_FLG, //lmm add NV_INTERPAN_ENABLE_FLG, //lmm add
NV_NODE_ID_FLG, //han add
NV_ITEM_ID_MAX = 0xFF,/* Item id 0xFF should not be used. */ NV_ITEM_ID_MAX = 0xFF,/* Item id 0xFF should not be used. */
}nv_item_t; }nv_item_t;
......
...@@ -228,6 +228,7 @@ buf_sts_t ev_buf_free(u8 *pBuf) ...@@ -228,6 +228,7 @@ buf_sts_t ev_buf_free(u8 *pBuf)
#endif #endif
ZB_EXCEPTION_POST(SYS_EXCEPTTION_EV_BUFFER_EXCEPTION_FREE_OVERFLON); ZB_EXCEPTION_POST(SYS_EXCEPTTION_EV_BUFFER_EXCEPTION_FREE_OVERFLON);
} }
ev_bufItem_t *pDelBuf = ev_buf_getHead(pBuf); ev_bufItem_t *pDelBuf = ev_buf_getHead(pBuf);
...@@ -249,6 +250,8 @@ buf_sts_t ev_buf_free(u8 *pBuf) ...@@ -249,6 +250,8 @@ buf_sts_t ev_buf_free(u8 *pBuf)
mempool_free(ev_buf_v->bufGroups[pDelBuf->groupIndex].qHead, ev_buf_retriveMempoolHeader(pBuf)); mempool_free(ev_buf_v->bufGroups[pDelBuf->groupIndex].qHead, ev_buf_retriveMempoolHeader(pBuf));
ev_buf_v->bufGroups[pDelBuf->groupIndex].availBufNum++; ev_buf_v->bufGroups[pDelBuf->groupIndex].availBufNum++;
//Tl_printf("ev_buf_free pBuf = %d 11111111111111111\r\n",pBuf);
#if EV_BUFFER_DEBUG #if EV_BUFFER_DEBUG
pDelBuf->line = line; pDelBuf->line = line;
pDelBuf->flag = 0xff; pDelBuf->flag = 0xff;
......
...@@ -47,8 +47,7 @@ ...@@ -47,8 +47,7 @@
* INCLUDES * INCLUDES
*/ */
#include "zcl_include.h" #include "zcl_include.h"
#include "../common/00ikonke_app/general/ikk-cluster.h"
/********************************************************************** /**********************************************************************
* LOCAL CONSTANTS * LOCAL CONSTANTS
*/ */
...@@ -643,6 +642,7 @@ _CODE_ZCL_ static u8 zcl_buildHdr(u8 *buf, u8 clusterSpec, u8 dir, u8 disDefRsp, ...@@ -643,6 +642,7 @@ _CODE_ZCL_ static u8 zcl_buildHdr(u8 *buf, u8 clusterSpec, u8 dir, u8 disDefRsp,
_CODE_ZCL_ status_t zcl_sendCmd(u8 srcEp, epInfo_t *pDstEpInfo, u16 clusterId, u8 cmd, u8 specific, _CODE_ZCL_ status_t zcl_sendCmd(u8 srcEp, epInfo_t *pDstEpInfo, u16 clusterId, u8 cmd, u8 specific,
u8 direction, u8 disableDefaultRsp, u16 manuCode, u8 seqNo, u16 cmdPldLen, u8 *cmdPld) u8 direction, u8 disableDefaultRsp, u16 manuCode, u8 seqNo, u16 cmdPldLen, u8 *cmdPld)
{ {
Tl_printf("\r\n###zcl_sendCmd111111 srcEp = %d, direction = %d\r\n", srcEp, direction);
u8 *asdu = (u8 *)ev_buf_allocate(sizeof(zclHdr_t) + cmdPldLen); u8 *asdu = (u8 *)ev_buf_allocate(sizeof(zclHdr_t) + cmdPldLen);
if(!asdu){ if(!asdu){
return ZCL_STA_INSUFFICIENT_SPACE; return ZCL_STA_INSUFFICIENT_SPACE;
...@@ -1063,8 +1063,8 @@ _CODE_ZCL_ status_t zcl_readRspHandler(zclIncoming_t *pCmd) ...@@ -1063,8 +1063,8 @@ _CODE_ZCL_ status_t zcl_readRspHandler(zclIncoming_t *pCmd)
_CODE_ZCL_ zclReadCmd_t *zcl_parseInReadCmd(zclIncoming_t *pCmd) _CODE_ZCL_ zclReadCmd_t *zcl_parseInReadCmd(zclIncoming_t *pCmd)
{ {
u8 *pBuf = pCmd->pData; u8 *pBuf = pCmd->pData;
zclReadCmd_t *p = (zclReadCmd_t *)ev_buf_allocate(sizeof(zclReadCmd_t) + pCmd->dataLen); zclReadCmd_t *p = (zclReadCmd_t *)ev_buf_allocate(sizeof(zclReadCmd_t) + pCmd->dataLen);
if(p != NULL){ if(p != NULL){
p->numAttr = pCmd->dataLen / 2; //attr ID p->numAttr = pCmd->dataLen / 2; //attr ID
for(u8 i = 0; i < p->numAttr; i++){ for(u8 i = 0; i < p->numAttr; i++){
...@@ -1656,7 +1656,42 @@ _CODE_ZCL_ status_t zcl_report(u8 srcEp, epInfo_t *pDstEpInfo, u8 disableDefault ...@@ -1656,7 +1656,42 @@ _CODE_ZCL_ status_t zcl_report(u8 srcEp, epInfo_t *pDstEpInfo, u8 disableDefault
*pBuf++ = dataType; *pBuf++ = dataType;
memcpy(pBuf, pData, attrSize); memcpy(pBuf, pData, attrSize);
//modify
ZclReportTableSt zclReportInfo;
addrExt_t g_Eui64GatewayAddr;
extern void kNwkGetGateWayEui64(addrExt_t eui64);
kNwkGetGateWayEui64(g_Eui64GatewayAddr);
zdo_bind_req_t req;
memset(&req, 0, sizeof(zdo_bind_req_t));
bool permitStatus = kZclClusterGetPermitReportInfo(srcEp, clusterId, &zclReportInfo);
if (permitStatus && (!zclReportInfo.reportGatewayEnable || !zclReportInfo.reportChildDeviceEnable)){
if ((zclReportInfo.reportGatewayEnable && !memcmp(g_Eui64GatewayAddr, req.dst_ext_addr, 8)) \
|| (zclReportInfo.reportChildDeviceEnable && memcmp(g_Eui64GatewayAddr, req.dst_ext_addr, 8))){
Tl_printf("\r\n###111111 ep(%d),cluster(%d),Send child(%d),gateway(%d),permitStatus(%d)\r\n",srcEp, clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable, permitStatus);
}else {
Tl_printf("\r\n###222222 ep(%d),cluster(%d),Send child(%d),gateway(%d),permitStatus(%d)\r\n",srcEp, clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable, permitStatus);
ev_buf_free(buf);
return 0;
}
}else if (!permitStatus){
Tl_printf("\r\n###333333 ep(%d),cluster(%d),Send child(%d),gateway(%d),permitStatus(%d)\r\n",srcEp, clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable, permitStatus);
ev_buf_free(buf);
return 0;
}
if (!memcmp(zclReportInfo.maskEui64Addr, req.dst_ext_addr, 8) && (zclReportInfo.dest_endpoint == req.dst_endpoint) && (zclReportInfo.endpoint == srcEp) ){
memset(zclReportInfo.maskEui64Addr, 0xff, 8);
zclReportInfo.endpoint = RESET_ENDPOINT;
zclReportInfo.dest_endpoint = RESET_ENDPOINT;
//KKK clear addr
Tl_printf("\r\n###444444 ep(%d),cluster(%d),Send child(%d),gateway(%d),permitStatus(%d)\r\n",srcEp, clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable, permitStatus);
kZclClusterSetPermitReportInfo(srcEp, zclReportInfo.cluster, zclReportInfo.reportEnable, zclReportInfo.sceneRecallFlg, zclReportInfo.reportGatewayEnable, zclReportInfo.reportChildDeviceEnable, NULL, RESET_ENDPOINT);
ev_buf_free(buf);
return 0;
}
u8 status = zcl_sendCmd(srcEp, pDstEpInfo, clusterId, ZCL_CMD_REPORT, FALSE, direction, disableDefaultRsp, manuCode, seqNo, len, buf); u8 status = zcl_sendCmd(srcEp, pDstEpInfo, clusterId, ZCL_CMD_REPORT, FALSE, direction, disableDefaultRsp, manuCode, seqNo, len, buf);
Tl_printf("\r\n###555555 ep(%d),cluster(%d),Send child(%d),gateway(%d),permitStatus(%d)\r\n",srcEp, clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable, permitStatus);
ev_buf_free(buf); ev_buf_free(buf);
......
...@@ -562,7 +562,7 @@ typedef struct { ...@@ -562,7 +562,7 @@ typedef struct {
* @brief Definition for ZCL layer sequence number. * @brief Definition for ZCL layer sequence number.
*/ */
extern u8 zcl_seqNum; extern u8 zcl_seqNum;
#define ZCL_SEQ_NUM (zcl_seqNum++) #define ZCL_SEQ_NUM (zcl_seqNum < 127?(++zcl_seqNum):((zcl_seqNum = 0?(++zcl_seqNum):0)))
extern const u16 zcl_attr_global_clusterRevision; extern const u16 zcl_attr_global_clusterRevision;
......
...@@ -465,6 +465,10 @@ _CODE_ZCL_ void reportNoMinLimit(void) ...@@ -465,6 +465,10 @@ _CODE_ZCL_ void reportNoMinLimit(void)
|| ((zcl_analogDataType(pAttrEntry->type) || ((zcl_analogDataType(pAttrEntry->type)
&& reportableChangeValueChk(pAttrEntry->type, pAttrEntry->data, pEntry->prevData, pEntry->reportableChange))) && reportableChangeValueChk(pAttrEntry->type, pAttrEntry->data, pEntry->prevData, pEntry->reportableChange)))
){ ){
Tl_printf("ReportAttrTimerCb!!!!!!(%d),(%d)\r\n", \
(!zcl_analogDataType(pAttrEntry->type) && (memcmp(pEntry->prevData, pAttrEntry->data, len) != SUCCESS)),\
((zcl_analogDataType(pAttrEntry->type) && reportableChangeValueChk(pAttrEntry->type, pAttrEntry->data, pEntry->prevData, pEntry->reportableChange))));
//lmm add for report control //lmm add for report control
extern bool kZclClusterReportChangeCallback(uint8_t endpoint, uint16_t clusterId, uint16_t attributeId); extern bool kZclClusterReportChangeCallback(uint8_t endpoint, uint16_t clusterId, uint16_t attributeId);
if (!kZclClusterReportChangeCallback(pEntry->endPoint, pEntry->clusterID, pEntry->attrID)){ if (!kZclClusterReportChangeCallback(pEntry->endPoint, pEntry->clusterID, pEntry->attrID)){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment