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 =
zcl_basicAttr_t g_zcl_basicAttrs =
{
.zclVersion = 0x03,
.appVersion = 0x28,
.appVersion = 0x29,
.stackVersion = 0x02,
.hwVersion = 0x20,
.manuName = ZCL_BASIC_MFG_NAME,
......
......@@ -2,20 +2,61 @@
#define __IKONKE_ENDPOINT_CONFIG_H___
#include "types.h"
/**
* @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_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
// Array of profile ids
#define FIXED_PROFILE_IDS { 260, 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, HA_DEV_ONOFF_LIGHT_SWITCH }
#endif
typedef struct{
u8 zclVersion;
......
......@@ -101,7 +101,7 @@ extern "C" {
#endif
#define ZCL_GROUP_SUPPORT 1
#define ZCL_SCENE_SUPPORT 1
#define ZCL_OTA_SUPPORT 1
#define ZCL_OTA_SUPPORT 0
#define ZCL_PRIVATE_CLUSTER_FCC0_SUPPORT 1
#if TOUCHLINK_SUPPORT
#define ZCL_ZLL_COMMISSIONING_SUPPORT 1
......
......@@ -2,12 +2,133 @@
#define __IKONKE_CONFIG_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 */
#define PRODUCT_MODEL "KK-PA-M10X"
#define PRODUCT_MODEL "KK-LP-D84X"
/*Dsp: APP Version */
#define FIRMWARE_VER 0x20
#define FIRMWARE_VER 0x29
/*Dsp: Stack Version */
#define STACK_VER 0x11
......@@ -22,10 +143,10 @@
#define MODEL_ID 0x00068624
/*Dsp: OTA_IMAGE_TYPE */
#define OTA_IMAGE_TYPE 65000
#define OTA_IMAGE_TYPE 65004
/*Dsp: OTA_FIRMVERSION */
#define OTA_FIRMVERSION 0x20
#define OTA_FIRMVERSION 0x29
/*Dsp: MANUFATURE_CODE */
#define MANUFATURE_CODE 0x1268
......@@ -36,9 +157,10 @@
#define MANUFACTURER_CODE_TELINK 0x1268
#define IMAGE_TYPE 65000
#define IMAGE_TYPE 65004
#define FILE_VERSION 0x10
#endif
#include "../common/comm_cfg.h"
......
This diff is collapsed.
......@@ -7,7 +7,9 @@
#include "ikk-led.h"
#include "ikk-network.h"
#define ZCL_ATTRID_NoDisturbMode 0x100C
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
......@@ -54,6 +54,7 @@
#include "bdb.h"
#include "ota.h"
#include PROJECT_H
#include "ikk-ota.h"
#include "ikk-debug.h"
#include "ikk-network.h"
/**********************************************************************
......@@ -258,31 +259,34 @@ void zbdemo_bdbIdentifyCb(u8 endpoint, u16 srcAddr, u16 identifyTime){
#endif
}
#ifdef ZCL_OTA
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(status == ZCL_STA_SUCCESS){
kOTAMoudleCallback(OTA_START);
}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){
if(status == ZCL_STA_SUCCESS){
ota_mcuReboot();
kOTAMoudleCallback(OTA_VERITY_SUCCEED);
}else{
ota_queryStart(30);
kOTAMoudleCallback(OTA_FAILED);
}
}
}
#endif
/*********************************************************************
* @fn sampleLight_leaveIndHandler
*
......
......@@ -53,6 +53,9 @@
#include "zcl_include.h"
#include PROJECT_H
#include "zcl.h"
#include "ikk-debug.h"
#include "ikk-sequence.h"
#include "ikk-cluster.h"
/**********************************************************************
* LOCAL CONSTANTS
*/
......@@ -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);
void zclReportCmdHandler(uint8_t ep,uint16_t cluster,zclReportCmd_t *reportInfo)
static ev_timer_event_t *kSrcEp1Multieport = NULL;
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)
{
//当report的是子设备时进行过滤
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);
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;
}
default:
break;
}
}
status_t sampleLight_onOffCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
......
......@@ -54,6 +54,7 @@
#include "ota.h"
#include PROJECT_H
#include "ikk-debug.h"
#include "ikk-ota.h"
#include "ikk-opt-tunnel.h"
/**********************************************************************
* LOCAL CONSTANTS
......@@ -110,7 +111,7 @@ static ev_timer_event_t *identifyTimerEvt = NULL;
* @return None
*/
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)
{
iKonkeAfSelfPrint("######sampleLight_zclProcessIncomingMsg,cmd = %d,len=%d,\n",pInHdlrMsg->hdr.cmd,pInHdlrMsg->dataLen);
......@@ -147,7 +148,7 @@ void sampleLight_zclProcessIncomingMsg(zclIncoming_t *pInHdlrMsg)
sampleLight_zclCfgReportRspCmd(pInHdlrMsg->attrCmd);
break;
case ZCL_CMD_REPORT:
zclReportCmdHandler(ep,cluster,pInHdlrMsg->attrCmd);
zclReportCmdHandler(ep,cluster,pInHdlrMsg->attrCmd,pInHdlrMsg);
break;
#endif
case ZCL_CMD_DEFAULT_RSP:
......@@ -325,19 +326,25 @@ void sampleLight_zclIdentifyTimerStop(void)
*
* @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)
{
// g_zcl_identifyAttrs.identifyTime = identifyTime;
//
// if(identifyTime == 0){
// sampleLight_zclIdentifyTimerStop();
// //light_blink_stop();
// }else{
// if(!identifyTimerEvt){
// //light_blink_start(identifyTime, 500, 500);
// identifyTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_zclIdentifyTimerCb, NULL, 1000);
// }
// }
g_zcl_identifyAttrs->identifyTime = identifyTime;
/*if(kGetOTAStatus() == OTA_NORMAL){*/
if(identifyTime == 0){
kSetLedStatus(LED_ALL_ID);
}else{
kLedOptTrigger(LED_ALL_ID, LED_SLOW_BLINK_ON_TIME_MS, LED_SLOW_BLINK_OFF_TIME_MS,
identifyTime * 1000/(LED_SLOW_BLINK_ON_TIME_MS + LED_SLOW_BLINK_OFF_TIME_MS), LED_ON, LED_OFF);
}
/* }*/
}
/*********************************************************************
......
......@@ -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++] = 1;
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);
#endif
......@@ -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)
{
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){
switch(cmdId){
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
return ;
}
// 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);
if(id != 1)
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].offDuration = duration_off_ms/ TICK_LOOP_NMS;
g_stLedCtrller[led_index].start = start;
if(end == LED_IGNORE)
g_stLedCtrller[led_index].end = LED_OFF;
else
g_stLedCtrller[led_index].end = end;
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
if (g_pLedBlinkDoneCallback[led_index] && !bFlg[led_index]){
bFlg[led_index] = true;
g_pLedBlinkDoneCallback[led_index](id);
}
}else {
bFlg[led_index] = false;
......
......@@ -24,7 +24,7 @@ static uint8_t g_u8PwmChannelNum = 0;
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;
......@@ -80,7 +80,7 @@ uint8_t kPwmGetIndexByID(uint8_t pwm_id )
*/
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){
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
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);
if(!Pwm_Tick_Detect_Running_Flag) {
Pwm_Tick_Detect_Running_Flag = true;
if(!Pwm_Tick_Detect_Running_Flag[pwm_index]) {
Pwm_Tick_Detect_Running_Flag[pwm_index] = true;
}
}
/* DESP: single LED instance register interface.
......@@ -253,15 +253,18 @@ kk_err_t kPwmModuleInit(PwmConfSt pwmlist[], unsigned char pwm_number, pPwmActio
}
static s32 kPwmGradientChangeEventHandler(void *data)
{
if(!Pwm_Tick_Detect_Running_Flag)
return 0;
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].startDutyCycle > g_stPwmCtrller[i].endDutyCycle){
g_stPwmCtrller[i].actionCounter--;
g_stPwmCtrller[i].startDutyCycleValue -= g_stPwmCtrller[i].intervalDutyCycle;
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){
g_stPwmCtrller[i].actionCounter--;
g_stPwmCtrller[i].startDutyCycleValue += g_stPwmCtrller[i].intervalDutyCycle;
......@@ -272,7 +275,6 @@ static s32 kPwmGradientChangeEventHandler(void *data)
if (g_stPwmCtrller[i].actionCounter == 0){
//may be end duty cycle not equal, restore end duty cycle
pwmSetDuty(g_stPwmCtrller[i].gpioInfo.pwmChannel,g_stPwmCtrller[i].endDutyCycle);
if (g_pPwmActionDoneCallback){
PwmGradientDirectionEnum opt = ELP_OPT_DEFAULT;
if (g_stPwmCtrller[i].startDutyCycle > g_stPwmCtrller[i].endDutyCycle){
......
......@@ -23,7 +23,6 @@ static pClusterAttributeChangeCallback pOnOffClusterCallback = NULL;
//static pClusterAttributeChangeCallback pLevelClusterCallback = NULL;
//static pClusterAttributeChangeCallback pColorClusterCallback = NULL;
static status_t WriteServerAttribute(u8 endpoint, u16 clusterId,uint8_t attributeID,uint8_t* dataPtr, uint8_t data_type);
typedef struct {
ZclReportTableSt g_stZclReportPermitList[ENDPOINT_MAXN * CLUSTER_MAXN];
......@@ -202,11 +201,6 @@ void Update_Local_Attribute_Info(void)
Rewrite_ManufactureName();
}
typedef struct{
zcl_basicAttr_t basicAttrs_temp;
zcl_identifyAttr_t identifyAttrs_temp;
......@@ -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].reportEnable = 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;
}
......@@ -326,13 +322,15 @@ bool kZclClusterGetPermitReportInfo(uint8_t endpoint, uint16_t cluster, ZclRepor
zclReportPermit->cluster = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].cluster;
zclReportPermit->reportEnable = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportEnable;
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 false;
}
//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;
......@@ -347,6 +345,14 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, uint16_t cluster, bool rep
if (index != 0xFF){
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportEnable = reportEnable;
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;
}
}else { //㲥
......@@ -356,6 +362,14 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, uint16_t cluster, bool rep
if (index != 0xFF){
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportEnable = reportEnable;
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;
}
}
......@@ -377,9 +391,10 @@ kk_err_t kZclOnOffClusterServerInit(pOnOffClusterOnOffStatusCallback pOnOffStatu
void ON_OFF_Cmd_Handler(uint8_t endpoint,bool 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);
}
/* DESP: Modified attribute reporting interface, reference from SDK callback[emberAfReportingAttributeChangeCallback].
* Auth: dingmz_frc.20190701.
* */
......@@ -388,6 +403,7 @@ void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId,
if(!zb_bindingTblSearched(clusterId,endpoint)){
return;
}
iKonkeAfSelfPrint("######kOptTunnelReportingPlagiarizeOriginal111111\r\n");
for(u8 i = 0; i < ZCL_REPORTING_TABLE_NUM; i++){
reportCfgInfo_t *pEntry = &reportingTab.reportCfgInfo[i];
if( pEntry->endPoint == endpoint
......@@ -404,6 +420,7 @@ void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId,
ZB_EXCEPTION_POST(SYS_EXCEPTTION_ZB_ZCL_ENTRY);
return;
}
u16 len = zcl_getAttrSize(pAttrEntry->type, pAttrEntry->data);
len = (len>8) ? (8):(len);
......@@ -415,5 +432,43 @@ void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId,
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 @@
#include "zcl.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{ EOOC_OFF = 0, EOOC_ON, EOOC_TOGGLE, EOOC_UNKNOW }OnOffCtrlEnum;
#define RESET_ENDPOINT 0xFE
#define ZCL_CMD_ONOFF_OFF 0x00
#define ZCL_CMD_ONOFF_ON 0x01
#define ZCL_CMD_ONOFF_TOGGLE 0x02
......@@ -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_ON 0x01
typedef struct tag_zcl_report_table{
uint8_t endpoint;
uint16_t cluster;
bool reportEnable;
bool sceneRecallFlg;
bool reportGatewayEnable;
bool reportChildDeviceEnable;
addrExt_t maskEui64Addr;
uint8_t dest_endpoint;
}ZclReportTableSt;
#define MAX_ATTR_CHANGE_SUPPORT_NUMS 8
......@@ -61,7 +75,9 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl
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 );
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);
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_ */
......@@ -56,7 +56,7 @@ uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len)
/* DESP: remap opcode, arg direction 0: FCC0->AA55 1:AA55->FCC0
* 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++ ) {
if (opcodeReampTable[i][0] == Opcode) {
......@@ -66,7 +66,6 @@ uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction)
return 0xFFFF;
}
kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut)
{
//UMsgNodeSt uMsgNode = {0};
......@@ -144,7 +143,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
//check install code length 20200725
uint8_t length = data.u8ARG[0];
if (length != 16) {
if (length != 16) {//如果不是16位的数据就不做任何改变,只回复
send_buf.u8ARG[0] = ERR_FORMAT;
send_buf.u8ARG[1] = data.u8ARG[0];
memcpy(&send_buf.u8ARG[2], &data.u8ARG[1], length);
......@@ -247,9 +246,9 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
memset(buffer, 0, 33);
uint8_t *data = ISN_TOKEN_GET();
iKonkeAfSelfPrint("len %x\r\n",data[0]);
iKonkeAfSelfPrintBuffer(data+1,32);
length = data[0];
iKonkeAfSelfPrint("read ISN len %x\r\n",data[0]);
iKonkeAfSelfPrintBuffer(data+1,32);
memcpy(buffer,data,length +1);
if(length > 32) {
......@@ -268,7 +267,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
{
uint8_t mac_length = 0x00;
addrExt_t addr,local_addr;
flash_read(CFG_MAC_ADDRESS,8,(uint8_t*)local_addr);
zb_getLocalExtAddr(local_addr);
mac_length = data.u8ARG[0];
if (mac_length != 8) {
......@@ -293,8 +292,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
case (UART_MSG_READ_MAC_CODE_OPCODE)://ok
{
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[1] = 0x08;
......@@ -403,82 +401,48 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
}
case (UART_MSG_WRITE_INTERPAN_PARA_OPCODE):
{
extern void GetInterpanPara(uint8_t *enable, uint8_t *channel, uint16_t *panId);
uint8_t enable = 0;
uint16_t panId = 0;
uint8_t channel = 0;
int8_t radioTxPower = 0;
uint16_t panId = 0;
enable = data.u8ARG[0];
channel = data.u8ARG[1];
panId = UINT16_HL(data.u8ARG[2], data.u8ARG[3]);
radioTxPower = data.u8ARG[4];
if (enable == 1)
zb_factoryReset();
SetInterpanPara(channel,panId);
GetInterpanPara(&enable, &channel, &panId);
SetInterpanPara(channel,panId,enable);
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;
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
case (UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE)://ok
{
......
......@@ -34,7 +34,6 @@ typedef struct{
}MsgFrameworkFormat_st;
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);
uint8_t kCmdMsgDataSentByPort(uint8_t u8Control_Field, DataField_st data, bool isGetResult, ComPortEm port);
......
......@@ -2,7 +2,7 @@
#define __IKONKE_MODULE_DEBUG_H______________________________
#define IKONKE_DEBUG_LOG_ENABLE (0) // ENABLE
#define IKONKE_DEBUG_LOG_ENABLE (1) // ENABLE
#define PROMPT_DSR ""
......
......@@ -19,14 +19,14 @@
#define TOUCH_KEY_LONG_PRESS_TIME_MS (5 * 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_10S (10 * 1000)
#define FACTORY_TEST_POLL_TIMES (FACTORY_TEST_POLL_TTME_10S / FACTORY_TEST_POLL_TTME_1S)
#if AGING_DEBUG
#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
#define FACTORY_TEST_15MIN_MS (15 * 60 * 1000)
#define FACTORY_TEST_4HOU_MS (4 * 60 * 60 * 1000)
......@@ -42,11 +42,15 @@ typedef enum{
FTS_AGING_4HOU_START,
FTS_AGING_4HOU,
FTS_AGING_DONE,
FTS_AGING_FORCE_EXIT,
FTS_AGING_WAITING,
FTS_AGING_FORCE_REBOOT,
FTS_AGING_FIRST_LONG_PRESSED,
FTS_AGING_WAITING_SECOND_PRESS
FTS_FORCE_EXIT,
FTS_WAITING_RELEASED,//waiting key released
FTS_FORCE_REBOOT,
FTS_FIRST_LONG_PRESSED,
FTS_WAITING_SECOND_PRESS,
FTS_SINGLE_BOARD_TEST,
FTS_FULL_DEVICE_TEST,
FTS_SINGLE_BOARD_TEST_DONE,
FTS_FULL_DEVICE_TEST_DONE,
}FactoryTestStatusEnum;
typedef struct{
......@@ -74,7 +78,12 @@ void kSetAgingMaxTime(uint16_t value);
//获取当前产测状态
FactoryTestStatusEnum kGetFactoryTestStatus(void);
//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);
#endif
......
......@@ -8,7 +8,7 @@
#include "ikk-debug.h"
#include "ikk-token.h"
#include "ikk-network.h"
#include "ikk-factory-test.h"
static bool gInterPanEnabled; // 1:enable
static uint16_t gInterPanID = 0x1111; // 1:enable
......@@ -16,12 +16,10 @@ static uint8_t g_interpanChannel = 20;
pInterPanMsgIncomingCallback gInterPanMsgIncomingCallback;
static ev_timer_event_t *Interpan_timerEvt = NULL;
static ev_timer_event_t *Interpan_DelaySendEvt = NULL;
static INCOM_MESSAGE_INFO sIncomingMessageInfo = {0};
static s32 kInterPanEventHandler(void);
static s32 kInterPanDelaySendTestDataEventHandler(void );
/**
* @brief Definition for Incoming cluster / Sever Cluster
......@@ -99,18 +97,16 @@ void afInterpan_dataSendConfirm(void *arg)
}
bool interpanleaveflg = false;
void kInterPanEnable(uint8_t channel)
{
rf_setChannel(channel);
printf("kInterPanEnable enable,Regesiter Interpan Func,network = %d\r\n!!\r\n",kNwkGetCurrentStatus());
if (kNwkGetCurrentStatus() == ENS_LEAVED) {
af_endpointRegister(INTERPAN_ENDPOINT, (af_simple_descriptor_t *)&kInterpanSimpleDesc, afInterpan_rx_handler, afInterpan_dataSendConfirm);
}
else{
kNwkFactoryReset(false);
if (zb_isDeviceJoinedNwk()){
zb_factoryReset();
interpanleaveflg = true;
}
af_endpointRegister(INTERPAN_ENDPOINT, (af_simple_descriptor_t *)&kInterpanSimpleDesc, afInterpan_rx_handler, afInterpan_dataSendConfirm);
}
void kInterpanDisable(void)
......@@ -128,19 +124,17 @@ void kInterpanDisable(void)
void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming)
{
bool interPanEnabledFlg = kGetInterpanEnableFlg();
if (interPanEnabledFlg) {
gInterPanEnabled = true;
if (kGetFactoryTestStatus() == FTS_NORMAL) {
gInterPanEnabled = false;
af_endpointUnregister(INTERPAN_ENDPOINT);
printf("kInterPanEnable disable\r\n!!\r\n");
}
if (gInterPanEnabled == true) {
else{
gInterPanEnabled = true;
printf("kInterPanEnable enable\r\n!!\r\n");
kInterPanEnable(INTERPAN_CHANNEL);
if(Interpan_timerEvt){
TL_ZB_TIMER_CANCEL(&Interpan_timerEvt);
}
Interpan_timerEvt = TL_ZB_TIMER_SCHEDULE(kInterPanEventHandler, NULL, INTERPAN_AUTO_OFF_TIME);
if (kNwkGetCurrentStatus() == ENS_LEAVED) {
if (!zb_isDeviceJoinedNwk()) {
if(Interpan_DelaySendEvt)
TL_ZB_TIMER_CANCEL(&Interpan_DelaySendEvt);
......@@ -184,21 +178,21 @@ bool kInterPanSetEnableStatus(uint8_t enable)
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))
g_interpanChannel = channel;
if(is_enable)
{
gInterPanEnabled = TRUE;
kSetInterpanEnableFlg(gInterPanEnabled);
}
else
kInterpanDisable();
if(panid != 0xffff)
gInterPanID = panid;
}
void GetInterpanPara(uint8_t *enable, uint8_t *channel, uint16_t *panId)
{
*enable = (gInterPanEnabled == false) ? 0x00 : 0x01;
*channel = g_interpanChannel;
*panId = gInterPanID;
}
static uint8_t sSend_Count = 0;
static s32 kInterPanDelaySendTestDataEventHandler(void )
{
......@@ -211,17 +205,6 @@ static s32 kInterPanDelaySendTestDataEventHandler(void )
sSend_Count = 0;
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)
{
......
......@@ -12,7 +12,6 @@ extern const af_simple_descriptor_t kInterpanSimpleDesc;
#define INTERPAN_EVENT_INIT 0x00 // interPan Event
#define INTERPAN_EVENT_OFF 0x01 //
#define INTERPAN_AUTO_OFF_TIME (10 * 60 * 1000)
#define INTERPAN_DELAY_SEND_INTERVAL (3 * 1000)
#define INTERPAN_DELAY_SEND_TIMES (2)
#define INTERPAN_CHANNEL 20
......@@ -30,7 +29,8 @@ typedef struct{
uint8_t reserved[8];
}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_rx_handler(void *arg);
void kInterpanDisable(void);
......@@ -38,5 +38,7 @@ kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode);
void kInterpan_Init(void);
bool kInterPanSetEnableStatus(uint8_t enable);
bool kInterPanGetEnableStatus(void);
void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming);
#endif /* _SAMPLE_LIGHT_H_ */
......@@ -86,6 +86,8 @@
#define UART_MSG_QUERY_SWITCH_ONOFF_OPCODE 0xED06
#define UART_MSG_ENTER_FACTORY_TEST_OPCODE 0xED14
#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_READ_RSSI_REQUEST_OPCODE 0xED12
......@@ -172,6 +174,7 @@ typedef enum {
ERR_WRITE_FAILED=0x04,
ERR_READ_WRITE_TIMEOUT=0x05,
ERR_NOT_EXIST=0x06,
ERR_EXEC_FAILED=0xe0,
ERR_UNKNOW=0xFF,
}ERR_RET_E;
typedef enum { Z3D_COORDINATOR = 0, Z3D_ROUTER, Z3D_ENDDEVICE }Z3DevTypeEm;
......
......@@ -7,6 +7,7 @@
#include "ikk-cluster.h"
#include "ikk-interpan.h"
#include "ikk-factory-test.h"
#include "ikk-ota.h"
#include "../../../../zigbee/aps/aps_api.h"
#include "../../../../zigbee/common/includes/zb_common.h"
/**********************************************************************
......@@ -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} };
// 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 bool g_bIsNwkJoiningFlg = false;
......@@ -75,7 +88,11 @@ bool IsSteeringNwkTimeout(void)
void Set_Nwk_Steering_Status(NwkSteeringStatusEnum 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].
Auth: dingmz_frc.20190701.
......@@ -225,8 +242,17 @@ void kNwkGetGateWayEui64(addrExt_t eui64)
* */
void kNwkNetworkStatusNotifyCall(NwkStatusEnum nwkst )
{
extern bool interpanleaveflg;
if(interpanleaveflg)
{
interpanleaveflg = false;
return;
}
g_eCurrentNetworkStatus = nwkst;
iKonkeAfSelfPrint("!!!g_eCurrentNetworkStatus = %d, g_eLastNetworkStatus = %d\r\n",g_eCurrentNetworkStatus, g_eLastNetworkStatus);
if( g_eCurrentNetworkStatus != g_eLastNetworkStatus ) {
g_eLastNetworkStatus = g_eCurrentNetworkStatus;
......@@ -241,6 +267,14 @@ void kNwkNetworkStatusNotifyCall(NwkStatusEnum nwkst )
Gateway_IEEE_Addr_Save(addr);
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]);
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.
......@@ -250,7 +284,7 @@ void kNwkModuleActionDetectCallback(void )
{
//static EmberNetworkStatus s_old_network_st = EMBER_NO_NETWORK;
static uint16_t ucRestoreSteeringCount = 0;
//iKonkeAfSelfPrint("g_u32NwkJoiningCountdownCounter = %d,zb_isDeviceJoinedNwk = %d 111111111111\r\n",g_u32NwkJoiningCountdownCounter,zb_isDeviceJoinedNwk());
// joining procedure
if( g_u32NwkJoiningCountdownCounter > 0 ) {
--g_u32NwkJoiningCountdownCounter;
......@@ -380,17 +414,18 @@ bool kNwkIsExiting(void)
* */
void kNwkFactoryReset(bool is_nwk_indicator)
{
iKonkeAfSelfPrint("######kNwkFactoryReset is_nwk_indicator1111111111111111111111111(%d)\r\n", is_nwk_indicator);
kNwkJoiningStart(0, NULL);
memset(g_Eui64GatewayAddr, 0xFF, sizeof(g_Eui64GatewayAddr));
Gateway_IEEE_Addr_Save(g_Eui64GatewayAddr);
// //add by maozj 20200320
//#if Z30_DEVICE_OTA_ENABLE
// kSetOTAStatus(OTA_NORMAL);
//#endif
// EmberNodeId node = 0xFFFF;
// kNwksaveNodeIdToFlash(node);
#if Z30_DEVICE_OTA_ENABLE
kSetOTAStatus(OTA_NORMAL);
#endif
uint16_t node = 0xFFFF;
kNwksaveNodeIdToFlash(node);
g_u32NwkJoiningCountdownCounter = 0;
// g_u32EnrollResultCheckCounter = 0;
......@@ -400,6 +435,7 @@ void kNwkFactoryReset(bool is_nwk_indicator)
//led can blink when network leaved
if (is_nwk_indicator == true){
if(zb_isDeviceJoinedNwk())//true status
zb_factoryReset();
g_KeyPressCauasLeave = true;
//add by maozj 20200407 for reset count down after network leaved
......@@ -444,7 +480,7 @@ void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf)
NwkStatusEnum kNwkGetCurrentStatus(void )
{
NwkStatusEnum status;
if(zb_isDeviceJoinedNwk()){
if(zb_isDeviceJoinedNwk() ||(kInterPanGetEnableStatus())){
status = ENS_ONLINE;
g_bIsNwkJoiningFlg = false;
}
......@@ -486,15 +522,16 @@ void kNwkJoiningStart(uint32_t u32JoiningDuration, pJoinCompleteCallback callbac
if( u32JoiningDuration > 0 )
{
#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;
}
#endif
if(!zb_isDeviceJoinedNwk())
{
//disable interpan
if(kInterPanGetEnableStatus())
kInterpanDisable();
iKonkeAfSelfPrint("#####Set Steering Counter\r\n");
g_u32NwkJoiningCountdownCounter= MS2COUNT(u32JoiningDuration);
g_pJoinCompleteCallback = callback;
......@@ -502,6 +539,10 @@ void kNwkJoiningStart(uint32_t u32JoiningDuration, pJoinCompleteCallback callbac
//add by maozj 20191206
g_bNwkSteeringCompleteFlg = true;
g_eLastNetworkStatus = ENS_UNKNOW;
//add by Han. 20220210
g_bJoiningReportFlg = true;
}
}
else
......@@ -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;
uint8_t paload_len = 0;
TL_SETSTRUCTCONTENT(dstEpInfo, 0);
iKonkeAfSelfPrint("General_Report111111\r\n");
dstEpInfo.dstAddrMode = APS_SHORT_DSTADDR_WITHEP;
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
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_
#define _IKK_NETWORK_H_
#include "ikk-module-def.h"
#include "ikk-opt-tunnel.h"
#include "ikk-debug.h"
#include "tl_common.h"
#include "zb_api.h"
......@@ -12,6 +13,9 @@
#define BINDING_CLUSTER_MAXN 8
#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
typedef struct tag_bind_objector_st {
......
......@@ -71,8 +71,10 @@ void Set2NwkJoiningCountdownCounter(u32 time_ms);
* */
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 );
......
/*
//#include "app/framework/plugin/network-steering/network-steering.h"
//#include "app/framework/plugin/network-steering/network-steering-internal.h"
#include "ikk-ota.h"
......@@ -21,11 +22,6 @@ pOTACallback g_pOTACallback = NULL;
static void kOTAMoudleOptCallback(OTAStatusEnum status);
//__no_init OTAGpioStatusST g_stOTAGpioStatus @ 0x2000FFF0;
static OTAGpioStatusST g_stOTAGpioStatus;
OTAStatusEnum kGetOTAStatus(void)
{
return g_eOTAStatus;
......@@ -76,7 +72,6 @@ static void kOTAMoudleOptCallback(OTAStatusEnum status)
break;
case OTA_DOWNLOAD_DONE:
{
g_eOTAStatus = OTA_DOWNLOAD_DONE;
break;
}
......@@ -99,3 +94,4 @@ static void kOTAMoudleOptCallback(OTAStatusEnum status)
break;
}
}
*/
/*
#ifndef __IKONKE_MODULE_OTA_H_______________________
#define __IKONKE_MODULE_OTA_H_______________________
#include "tl_common.h"
......@@ -9,7 +10,6 @@
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字节对齐
typedef struct {
......@@ -40,3 +40,4 @@ void kOTAMoudleCallback(OTAStatusEnum status);
#endif
*/
......@@ -111,12 +111,13 @@ bool kGetIndicatorNotDisturbModeFlg(void)
st = nv_flashReadNew(1, NV_MODULE_APP, NV_NO_DISTURB_MODE, sizeof(temp), (u8*)&temp);
if(st != NV_SUCC){
temp = 0;
iKonkeAfSelfPrint("kGetIndicatorNotDisturbModeFlg failed!!\r\n");
//iKonkeAfSelfPrint("kGetIndicatorNotDisturbModeFlg failed!!\r\n");
}
iKonkeAfSelfPrint("Read st =%d,data=%d\r\n",st,temp);
return (temp == 1) ;
//iKonkeAfSelfPrint("Read st =%d,data=%d\r\n",st,temp);
return (temp == 1) ;
}
nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value)
{
nv_sts_t st = NV_SUCC;
......@@ -132,6 +133,7 @@ nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value)
{
iKonkeAfSelfPrint("kSetIndicatorNotDisturbModeFlg failed!!\r\n");
}
return st;
}
......@@ -144,9 +146,10 @@ bool kGetInterpanEnableFlg(void)
temp = 1;
iKonkeAfSelfPrint("kGetInterpanEnableFlg failed!!\r\n");
}
return (temp == 1) ;
return (temp == 1) ;
}
nv_sts_t kSetInterpanEnableFlg(uint8_t value)
{
nv_sts_t st = NV_SUCC;
......@@ -156,6 +159,35 @@ nv_sts_t kSetInterpanEnableFlg(uint8_t value)
{
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;
}
......@@ -288,7 +320,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len)
//same data ,not need rewrite!
return 0;
}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;
}else{
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)
//same data ,not need rewrite!
return 0;
}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;
}else{
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)
//same data ,not need rewrite!
return 0;
}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;
}else{
sOptunnel_Token_temp.isn.isn_len = len;
......
......@@ -82,6 +82,10 @@ nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value);
nv_sts_t kSetInterpanEnableFlg(uint8_t value);
bool kGetInterpanEnableFlg(void);
uint16_t kNwkgetNodeIdFromFlash(void);
nv_sts_t kNwksaveNodeIdToFlash(uint16_t node_id);
#if 1
void falsh_test(uint8_t count);
#endif
......
This diff is collapsed.
......@@ -216,5 +216,15 @@
<type>1</type>
<locationURI>PARENT-2-PROJECT_LOC/platform/services/b85m/irq_handler.c</locationURI>
</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>
</projectDescription>
......@@ -360,6 +360,7 @@ typedef enum{
NV_NO_DISTURB_MODE, //lmm add
NV_AGING_TEST_TIME, //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_t;
......
......@@ -228,6 +228,7 @@ buf_sts_t ev_buf_free(u8 *pBuf)
#endif
ZB_EXCEPTION_POST(SYS_EXCEPTTION_EV_BUFFER_EXCEPTION_FREE_OVERFLON);
}
ev_bufItem_t *pDelBuf = ev_buf_getHead(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));
ev_buf_v->bufGroups[pDelBuf->groupIndex].availBufNum++;
//Tl_printf("ev_buf_free pBuf = %d 11111111111111111\r\n",pBuf);
#if EV_BUFFER_DEBUG
pDelBuf->line = line;
pDelBuf->flag = 0xff;
......
......@@ -47,8 +47,7 @@
* INCLUDES
*/
#include "zcl_include.h"
#include "../common/00ikonke_app/general/ikk-cluster.h"
/**********************************************************************
* LOCAL CONSTANTS
*/
......@@ -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,
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);
if(!asdu){
return ZCL_STA_INSUFFICIENT_SPACE;
......@@ -1063,8 +1063,8 @@ _CODE_ZCL_ status_t zcl_readRspHandler(zclIncoming_t *pCmd)
_CODE_ZCL_ zclReadCmd_t *zcl_parseInReadCmd(zclIncoming_t *pCmd)
{
u8 *pBuf = pCmd->pData;
zclReadCmd_t *p = (zclReadCmd_t *)ev_buf_allocate(sizeof(zclReadCmd_t) + pCmd->dataLen);
if(p != NULL){
p->numAttr = pCmd->dataLen / 2; //attr ID
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
*pBuf++ = dataType;
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);
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);
......
......@@ -562,7 +562,7 @@ typedef struct {
* @brief Definition for ZCL layer sequence number.
*/
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;
......
......@@ -465,6 +465,10 @@ _CODE_ZCL_ void reportNoMinLimit(void)
|| ((zcl_analogDataType(pAttrEntry->type)
&& 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
extern bool kZclClusterReportChangeCallback(uint8_t endpoint, uint16_t clusterId, uint16_t attributeId);
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