Commit 682c75ca authored by limm's avatar limm

V1.0 VERSION

parent 25f1f17b
......@@ -188,6 +188,11 @@ void user_app_init(void)
zcl_register(fixedEndpoints[i], Cluster_Num_List[i], (zcl_specClusterInfo_t *)g_EPClusterAllList[i]);
}
#if AF_TEST_ENABLE
/* Register endPoint */
u8 status = af_endpointRegister(SAMPLE_TEST_ENDPOINT, (af_simple_descriptor_t *)&sampleTestDesc, afTest_rx_handler, afTest_dataSendConfirm);
printf("af_test regester status =%d\r\n",status);
#endif
#ifdef ZCL_GREEN_POWER
/* Initialize GP */
......@@ -272,6 +277,7 @@ void user_init(bool isRetention)
user_app_init();
App_Init();
printf("###########init !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n");
/* Register except handler for test */
sys_exceptHandlerRegister(sampleLightSysException);
......
......@@ -47,12 +47,11 @@
#define _SAMPLE_LIGHT_H_
#include ENDPOINT_CONFIG_H
/**********************************************************************
* CONSTANT
*/
#define SAMPLE_LIGHT_ENDPOINT 0x01
#define SAMPLE_TEST_ENDPOINT 0x02
#define SAMPLE_TEST_ENDPOINT 0x06
/**********************************************************************
* TYPEDEFS
......
......@@ -58,7 +58,7 @@
*/
#define ZCL_BASIC_MFG_NAME {5,'K','o','n','k','e'}
#define ZCL_BASIC_MODEL_ID {16,'3','A','F','E','2','8','2','0','0','0','0','6','8','6','2','1'}
#define ZCL_BASIC_MODEL_ID {16,'3','A','F','E','2','0','2','0','0','0','0','6','8','6','2','4'}
#ifndef ZCL_BASIC_MFG_NAME
#define ZCL_BASIC_MFG_NAME {6,'T','E','L','I','N','K'}
......@@ -120,7 +120,6 @@ const u16 EP1_inClusterList[] =
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0,
#endif
};
/**
......@@ -162,10 +161,6 @@ const u16 EP2_inClusterList[] =
#ifdef ZCL_ZLL_COMMISSIONING
ZCL_CLUSTER_TOUCHLINK_COMMISSIONING,
#endif
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0,
#endif
};
/**
......@@ -208,10 +203,6 @@ const u16 EP3_inClusterList[] =
#ifdef ZCL_ZLL_COMMISSIONING
ZCL_CLUSTER_TOUCHLINK_COMMISSIONING,
#endif
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0,
#endif
};
/**
......@@ -253,10 +244,6 @@ const u16 EP4_inClusterList[] =
#ifdef ZCL_ZLL_COMMISSIONING
ZCL_CLUSTER_TOUCHLINK_COMMISSIONING,
#endif
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0,
#endif
};
/**
......@@ -299,6 +286,7 @@ const u16 sampleTest_inClusterList[] =
ZCL_CLUSTER_TELINK_SDK_TEST_RSP,
ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_REQ,
ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_RSP,
0x0001,
};
......@@ -324,8 +312,8 @@ const u16 sampleTest_outClusterList[] =
*/
const af_simple_descriptor_t sampleTestDesc =
{
HA_PROFILE_ID, /* Application profile identifier */
HA_DEV_DIMMABLE_LIGHT, /* Application device identifier */
ZDO_PROFILE_ID, /* Application profile identifier */
HA_DEV_ONOFF_LIGHT_SWITCH, /* Application device identifier */
SAMPLE_TEST_ENDPOINT, /* Endpoint */
0, /* Application device version */
0, /* Reserved */
......@@ -559,7 +547,7 @@ zcl_onOffAttr_t g_zcl_onOffAttrs[Support_Endpoint_Num] ={ONOFF_DEFAULT1,ONOFF_DE
const zclAttrInfo_t onOff_attrTbl[] =
{
{ ZCL_ATTRID_ONOFF, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ | ACCESS_CONTROL_REPORTABLE, (u8*)&g_zcl_onOffAttrs[0].onOff},
{ ZCL_ATTRID_ONOFF, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_REPORTABLE, (u8*)&g_zcl_onOffAttrs[0].onOff},
{ ZCL_ATTRID_GLOBAL_SCENE_CONTROL, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ, (u8*)&g_zcl_onOffAttrs[0].globalSceneControl},
{ ZCL_ATTRID_ON_TIME, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE, (u8*)&g_zcl_onOffAttrs[0].onTime},
{ ZCL_ATTRID_OFF_WAIT_TIME, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE, (u8*)&g_zcl_onOffAttrs[0].offWaitTime},
......@@ -569,7 +557,7 @@ const zclAttrInfo_t onOff_attrTbl[] =
};
const zclAttrInfo_t onOff_attrTb2[] =
{
{ ZCL_ATTRID_ONOFF, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ | ACCESS_CONTROL_REPORTABLE, (u8*)&g_zcl_onOffAttrs[1].onOff},
{ ZCL_ATTRID_ONOFF, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_REPORTABLE, (u8*)&g_zcl_onOffAttrs[1].onOff},
{ ZCL_ATTRID_GLOBAL_SCENE_CONTROL, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ, (u8*)&g_zcl_onOffAttrs[1].globalSceneControl},
{ ZCL_ATTRID_ON_TIME, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE, (u8*)&g_zcl_onOffAttrs[1].onTime},
{ ZCL_ATTRID_OFF_WAIT_TIME, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE, (u8*)&g_zcl_onOffAttrs[1].offWaitTime},
......@@ -579,7 +567,7 @@ const zclAttrInfo_t onOff_attrTb2[] =
};
const zclAttrInfo_t onOff_attrTb3[] =
{
{ ZCL_ATTRID_ONOFF, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ | ACCESS_CONTROL_REPORTABLE, (u8*)&g_zcl_onOffAttrs[2].onOff},
{ ZCL_ATTRID_ONOFF, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_REPORTABLE, (u8*)&g_zcl_onOffAttrs[2].onOff},
{ ZCL_ATTRID_GLOBAL_SCENE_CONTROL, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ, (u8*)&g_zcl_onOffAttrs[2].globalSceneControl},
{ ZCL_ATTRID_ON_TIME, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE, (u8*)&g_zcl_onOffAttrs[2].onTime},
{ ZCL_ATTRID_OFF_WAIT_TIME, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE, (u8*)&g_zcl_onOffAttrs[2].offWaitTime},
......@@ -589,7 +577,7 @@ const zclAttrInfo_t onOff_attrTb3[] =
};
const zclAttrInfo_t onOff_attrTb4[] =
{
{ ZCL_ATTRID_ONOFF, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ | ACCESS_CONTROL_REPORTABLE, (u8*)&g_zcl_onOffAttrs[3].onOff},
{ ZCL_ATTRID_ONOFF, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_REPORTABLE, (u8*)&g_zcl_onOffAttrs[3].onOff},
{ ZCL_ATTRID_GLOBAL_SCENE_CONTROL, ZCL_DATA_TYPE_BOOLEAN, ACCESS_CONTROL_READ, (u8*)&g_zcl_onOffAttrs[3].globalSceneControl},
{ ZCL_ATTRID_ON_TIME, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE, (u8*)&g_zcl_onOffAttrs[3].onTime},
{ ZCL_ATTRID_OFF_WAIT_TIME, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE, (u8*)&g_zcl_onOffAttrs[3].offWaitTime},
......
......@@ -119,6 +119,8 @@ extern zcl_lightColorCtrlAttr_t g_zcl_colorCtrlAttrs;
#define zcl_sceneAttrGet(ep) &g_zcl_sceneAttrs[ep-1]
#define zcl_onoffAttrGet(ep) &g_zcl_onOffAttrs[ep-1]
#define zcl_BasicAttrGet() &g_zcl_basicAttrs
void SimpleDesc_Init(uint8_t endpint);
nv_sts_t zcl_onOffAttr_get(void);
nv_sts_t zcl_onOffAttr_save(void);
......
......@@ -116,7 +116,7 @@ extern "C" {
// DEBUG
#if UART_PRINTF_MODE
#define DEBUG_INFO_TX_PIN GPIO_PA2//print
#define DEBUG_INFO_TX_PIN GPIO_PA1//print
#endif
/**********************************************************************
* Stack configuration
......@@ -148,7 +148,7 @@ extern "C" {
* @brief ZCL: MAX number of cluster list, in cluster number add + out cluster number
*
*/
#define ZCL_CLUSTER_NUM_MAX 30
#define ZCL_CLUSTER_NUM_MAX 50
/**
* @brief ZCL: maximum number for zcl reporting table
......
......@@ -19,7 +19,7 @@
#define MANUFATURE_NAME "Konke"
/*Dsp: MODEL_ID */
#define MODEL_ID 0x3AFE101000068624
#define MODEL_ID 0x00068624
/*Dsp: OTA_IMAGE_TYPE */
#define OTA_IMAGE_TYPE 65000
......
This diff is collapsed.
......@@ -55,7 +55,7 @@
#if ZBHCI_EN
#include "zbhci.h"
#endif
#include "ikk-debug.h"
#if AF_TEST_ENABLE
/**********************************************************************
* LOCAL CONSTANTS
......@@ -126,17 +126,40 @@ static void afTest_testClearReqPrc(apsdeDataInd_t *pApsdeInd)
dstEp.profileId = pApsdeInd->indInfo.profile_id;
dstEp.dstAddrMode = APS_SHORT_DSTADDR_WITHEP;
dstEp.dstAddr.shortAddr = pApsdeInd->indInfo.src_short_addr;
u8 st = SUCCESS;
u8 apsCnt = 0;
af_dataSend(pApsdeInd->indInfo.dst_ep, &dstEp, ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_RSP, 1, &st, &apsCnt);
}
static void afTest_dataSendDemo(apsdeDataInd_t *pApsdeInd)
{
epInfo_t dstEp;
TL_SETSTRUCTCONTENT(dstEp, 0);
dstEp.dstAddrMode = APS_LONG_DSTADDR_WITHEP;
dstEp.dstEp = pApsdeInd->indInfo.src_ep;
memcpy(dstEp.dstAddr.extAddr,pApsdeInd->indInfo.src_ext_addr,8);
dstEp.profileId = HA_PROFILE_ID;
dstEp.txOptions = APS_TX_OPT_INTRA_PAN;
dstEp.radius = 0;
u8 apsCnt = 0;
u8 asdu[] = {0xAA, 0x55, 0x00, 0x08, 0x10, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0d, 0x00, 0xF3, 0xD0};
u8 asdulength = sizeof(asdu);
//af_dataSend(pApsdeInd->indInfo.dst_ep, &dstEp, 0x0001, asdulength, asdu, &apsCnt);
printf("afTest_Receive--------------ok!!\r\n");
}
void afTest_rx_handler(void *arg)
{
apsdeDataInd_t *pApsdeInd = (apsdeDataInd_t *)arg;
iKonkeAfSelfPrint("interpan data received,data len =%d\r\n",pApsdeInd->indInfo.asduLength);
iKonkeAfSelfPrintBuffer(pApsdeInd->indInfo.asdu,pApsdeInd->indInfo.asduLength);
switch(pApsdeInd->indInfo.cluster_id){
case ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_REQ:
g_afTest_rcvReqCnt = 0;
......@@ -147,8 +170,12 @@ void afTest_rx_handler(void *arg)
afTest_testReqPrc(pApsdeInd);
break;
case ZCL_CLUSTER_TELINK_SDK_TEST_RSP:
break;
// case ZCL_CLUSTER_PRIVATE_FCC0:
// {
// afTest_dataSendDemo(pApsdeInd);
// break;
// }
default:
break;
}
......@@ -159,8 +186,8 @@ void afTest_rx_handler(void *arg)
void afTest_dataSendConfirm(void *arg)
{
// apsdeDataConf_t *pApsDataCnf = (apsdeDataConf_t *)arg;
apsdeDataConf_t *pApsDataCnf = (apsdeDataConf_t *)arg;
printf("afTest_dataSendConfirm,dest ep = %d\r\n!!\r\n",pApsDataCnf->dstEndpoint);
}
#endif /* AF_TEST_ENABLE */
......
......@@ -64,7 +64,7 @@ void pwmSetDuty(u8 ch, u16 dutycycle)
uint8_t kPwmGetIndexByID(uint8_t pwm_id )
{
for(int index = 0; index < g_u8PwmChannelNum; ++index ) {
iKonkeAfSelfPrint("####kPwmGetIndexByID index[%d] pwm_id[%d]\r\n",index, g_stPwmConfList[index].u8PwmId);
//iKonkeAfSelfPrint("####kPwmGetIndexByID index[%d] pwm_id[%d]\r\n",index, g_stPwmConfList[index].u8PwmId);
if( g_stPwmConfList[index].u8PwmId != PWM_UNUSED_ID ) {
if( g_stPwmConfList[index].u8PwmId == pwm_id ) {
return index;
......@@ -86,7 +86,7 @@ void kPwmDriverhandler(uint8_t pwm_index, PwmGradientDirectionEnum st, uint16_t
iKonkeAfSelfPrint("####kPwmDriverhandler index is too large\r\n");
return;
}
iKonkeAfSelfPrint("######kPwmDriverhandler index(%d), direction(%d), value(%d)\r\n", pwm_index, st, value);
//iKonkeAfSelfPrint("######kPwmDriverhandler index(%d), direction(%d), value(%d)\r\n", pwm_index, st, value);
switch(st) {
case (ELP_MIN):
......@@ -170,7 +170,7 @@ void kPwmOptTrigger(uint8_t id, uint32_t start_value, uint32_t end_value, uint32
g_stPwmCtrller[pwm_index].startDutyCycle = start_value;
g_stPwmCtrller[pwm_index].endDutyCycle = end_value;
g_stPwmCtrller[pwm_index].startDutyCycleValue = start_value;
memcpy(&g_stPwmCtrller[pwm_index].gpioInfo, &g_stPwmConfList[pwm_index].gpioInfo, sizeof(PwmGpioListSt));
memcpy(&g_stPwmCtrller[pwm_index].gpioInfo, &g_stPwmConfList[pwm_index].gpioInfo, sizeof(PwmGpioSt));
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);
......@@ -267,7 +267,7 @@ static s32 kPwmGradientChangeEventHandler(void *data)
g_stPwmCtrller[i].startDutyCycleValue += g_stPwmCtrller[i].intervalDutyCycle;
pwmSetDuty(g_stPwmCtrller[i].gpioInfo.pwmChannel,g_stPwmCtrller[i].startDutyCycleValue);
}
iKonkeAfSelfPrint("BREATH index(%d)channel(%d) count(%d),%d\r\n", i,g_stPwmCtrller[i].gpioInfo.pwmChannel, g_stPwmCtrller[i].actionCounter,g_stPwmCtrller[i].startDutyCycleValue);
//iKonkeAfSelfPrint("BREATH index(%d)channel(%d) count(%d),%d\r\n", i,g_stPwmCtrller[i].gpioInfo.pwmChannel, g_stPwmCtrller[i].actionCounter,g_stPwmCtrller[i].startDutyCycleValue);
//PWM_IDص
if (g_stPwmCtrller[i].actionCounter == 0){
//may be end duty cycle not equal, restore end duty cycle
......@@ -291,7 +291,29 @@ static s32 kPwmGradientChangeEventHandler(void *data)
}
return 0;
}
/* DESP: clear pwm gradient counter interface by pwm id.
* Auth: maozj.20200212.
* */
bool kPwmClearGradientCounterById(uint8_t pwm_id)
{
if (pwm_id == PWM_UNUSED_ID){
iKonkeAfSelfPrint("#Err: kPwmClearGradientCounterById pwm id is invalid\r\n");
return false;
}
for (int index = 0; index < PWM_OBJS_SUPPORT_MAXN; ++index ) {
//iKonkeAfSelfPrint("####kPwmGetIndexByID index[%d] pwm_id[%d]\r\n",index, g_stPwmConfList[index].u8PwmId);
if (g_stPwmConfList[index].u8PwmId == pwm_id) {
iKonkeAfSelfPrint("###kPwmClearGradientCounterById success index(%d) id(%d)\r\n", index, pwm_id);
g_stPwmCtrller[index].actionCounter = 0;
return true;
}
}
return false;
}
void PWM_Test(uint8_t data)
{
......
......@@ -89,7 +89,7 @@ kk_err_t kPwmModuleInit(PwmConfSt pwmlist[], unsigned char pwm_number, pPwmActio
*/
void kPwmOptTrigger(uint8_t id, uint32_t start_value, uint32_t end_value, uint32_t duration_time );
bool kPwmClearGradientCounterById(uint8_t pwm_id);
void PWM_Test(uint8_t data);
......
......@@ -265,8 +265,8 @@ static void dma_uartRcvHandler(void)
uint8_t head_index = 0;
uint32_t len = *dma_uartRxBuf;
// iKonkeAfSelfPrint("#############dma_uartRcvHandler,recv data len = %d \r\n",len);
// iKonkeAfSelfPrintBuffer(dma_uartRxBuf+4,len);
iKonkeAfSelfPrint("#############dma_uartRcvHandler,recv data len = %d \r\n",len);
iKonkeAfSelfPrintBuffer(dma_uartRxBuf+4,len);
memset(&MsgNode,0,sizeof(UMsgNodeSt));
for(uint8_t i = 0;i< len;i++)
{
......
......@@ -5,7 +5,7 @@
#include "drv_uart.h"
// MSG BUFFER OF NODE MAXLENGTH
#define UMSG_NODE_SIZE 32
#define UMSG_NODE_SIZE 96
// Maximum number of message nodes in the queue
#define UMSG_NODE_MAX 4
// Maximum Cache Length of Message Receiver
......@@ -17,7 +17,7 @@ typedef enum { EQU_RECV = 0, EQU_SENT }QueueEm;
// uart recv/send buffer node
typedef struct tag_uart_message_node {
unsigned char buffer[UMSG_NODE_SIZE];
unsigned char length;
uint16_t length;
// just for sending, Used to match instruction responses. For example, according to the instruction opcode!
unsigned char matcher[4];
unsigned char matcher_offset;
......@@ -26,6 +26,8 @@ typedef struct tag_uart_message_node {
bool bRspNeedtoDispatch;
// Attempt to send number of times, decreases to 0 when invalid!!!
unsigned char sent_try;
unsigned char *ack;
unsigned char ack_length;
}UMsgNodeSt;
typedef struct tag_uart_message_queue {
......
......@@ -19,7 +19,7 @@ static uint8_t g_tmp_buffer[64] = { 0 };
pOnOffClusterOnOffStatusCallback g_pfOnOffStatusCallback = NULL;
//static pClusterAttributeChangeCallback pOnOffClusterCallback = NULL;
static pClusterAttributeChangeCallback pOnOffClusterCallback = NULL;
//static pClusterAttributeChangeCallback pLevelClusterCallback = NULL;
//static pClusterAttributeChangeCallback pColorClusterCallback = NULL;
......@@ -33,27 +33,12 @@ typedef struct {
static ZclClusterReportTableSt g_stZclClusterReportPermitTable;
//bool kZclOnOffClusterServerOnOffGet(uint8_t endpoint)
//{
// uint8_t status;
// zclAttrInfo_t *onoff = zcl_attrRead(endpoint,ZCL_CLUSTER_GEN_ON_OFF,ZCL_ATTRID_ONOFF,&status);
//
// iKonkeAfSelfPrint("kZclOnOffClusterServerOnOffGet:status(%d), endpoint(%d), status(%d)\r\n",status, endpoint, onoff->data[0]);
// iKonkeAfSelfPrint("kZclOnOffClusterServerOnOffGet:id(%d), type(%d), access(%d)\r\n",onoff->id, onoff->type, onoff->access);
//
// return onoff->data[0];
//}
bool kZclOnOffClusterServerOnOffGet(uint8_t endpoint)
{
zcl_onOffAttr_t *pOnOff = zcl_onoffAttrGet(endpoint);
return pOnOff->onOff;
}
void kZclOnOffClusterServerOnOffSet(uint8_t endpoint,bool onoff)
{
zcl_onOffAttr_t *pOnOff = zcl_onoffAttrGet(endpoint);
pOnOff->onOff = onoff;
WriteServerAttribute(endpoint,CLUSTER_ONOFF_ID,ZCL_ATTRID_ONOFF,(uint8_t*)&onoff,ZCL_DATA_TYPE_BOOLEAN);
// zcl_onOffAttr_t *pOnOff = zcl_onoffAttrGet(endpoint);
//
// pOnOff->onOff = onoff;
zcl_onOffAttr_save();
}
/* DESP: on-off cluster control operate.
......@@ -69,7 +54,6 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl
setValue = 1;
else
setValue = 0;
kZclOnOffClusterServerOnOffSet(endpoint,setValue);
if( kNwkGetCurrentStatus() == ENS_ONLINE ) {
// check binding table
......@@ -81,7 +65,12 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl
return KET_OK;
}
bool kZclOnOffClusterServerOnOffGet(uint8_t endpoint)
{
status_t status ;
zclAttrInfo_t *pOnOff = zcl_attrRead(endpoint,CLUSTER_ONOFF_ID,ZCL_ATTRID_ONOFF,&status);
return (status == ZCL_STA_SUCCESS )? (pOnOff->data[0]): (0);
}
static status_t WriteServerAttribute(u8 endpoint, u16 clusterId,uint8_t attributeID,uint8_t* dataPtr, uint8_t data_type)
......@@ -90,15 +79,41 @@ static status_t WriteServerAttribute(u8 endpoint, u16 clusterId,uint8_t attribut
attr_data.attrID = attributeID;
attr_data.dataType = data_type;
u16 dataLen = zcl_getAttrSize(data_type, dataPtr);
memcpy(attr_data.attrData,dataPtr,dataLen);
attr_data.attrData = dataPtr;
// iKonkeAfSelfPrint("##WriteServerAttribute attr =%x,attr = %x,len=%d :\r\n",clusterId,attr_data.attrID,dataLen);
// iKonkeAfSelfPrint("##DataBuffer len = %d,data=%x-%x:\r\n",dataLen,attr_data.attrData[1],attr_data.attrData[2]);
// iKonkeAfSelfPrintBuffer(attr_data.attrData,attr_data.attrData[0]+1);
return zcl_attrWrite(endpoint,clusterId,&attr_data,false);
iKonkeAfSelfPrint("##WriteServerAttribute cluster =%d,attr = %d,len=%d :\r\n",clusterId,attr_data.attrID,dataLen);
if(dataLen == 1)
iKonkeAfSelfPrint("##data=%d:\r\n",*dataPtr);
else
iKonkeAfSelfPrintBuffer(dataPtr,dataLen);
return zcl_attrWrite(endpoint,clusterId,&attr_data,true);
}
bool Get_Model_ID(uint8_t *ModeID)
{
status_t status ;
zclAttrInfo_t *pAttrInfo = zcl_attrRead(1,ZCL_CLUSTER_GEN_BASIC,ZCL_ATTRID_BASIC_MODEL_ID,&status);
if(status == ZCL_STA_SUCCESS )
{
uint8_t len = pAttrInfo->data[0];
if((ModeID)&&(len >0)&&(pAttrInfo->type == ZCL_DATA_TYPE_CHAR_STR))
{
uint8_t temp[16] = {0};
memcpy(ModeID,&pAttrInfo->data[1],len); //Get ASCII Data
if((len >0)&&(len %2 == 0))
{
kUtilsStr2Hex(ModeID,temp,len);
memcpy(ModeID,temp,len/2);
iKonkeAfSelfPrint("##Trans Data Buffer Len =%d:\r\n",len);
iKonkeAfSelfPrintBuffer(ModeID,8);
return true;
}
}
}
return false;
}
static status_t Rewrite_Modeid(uint8_t *modeid,uint8_t software,uint8_t hardware)
{
uint8_t Modeid_Temp[] = "3AFE101003008611" ;
......@@ -140,6 +155,10 @@ static status_t Rewrite_Modeid(uint8_t *modeid,uint8_t software,uint8_t hardwar
g_tmp_buffer[0] = 16;
g_tmp_buffer[0+ 2+16] = '0';
uint8_t *data = MODEL_ID_TOKEN_GET();
if(!All_Same_Data(&data[1],0xff,32))
memcpy(g_tmp_buffer,data,data[0]+1);
status = WriteServerAttribute(1, ZCL_CLUSTER_GEN_BASIC, ZCL_ATTRID_BASIC_MODEL_ID ,(uint8_t*)g_tmp_buffer,ZCL_DATA_TYPE_CHAR_STR);
if(status != ZCL_STA_SUCCESS)
{
......@@ -188,73 +207,54 @@ void Update_Local_Attribute_Info(void)
//
//static typedef struct{
// zcl_basicAttr_t basicAttrs_temp;
// zcl_identifyAttr_t identifyAttrs_temp
// zcl_onOffAttr_t onOffAttrs_temp;
// zcl_onOffAttr_t levelAttrs_temp;
//}AttrListST;
//static AttrListST Attr_List_Value[MAX_ATTR_CHANGE_SUPPORT_NUMS] ;
//void ClusterAttributeChangeCallbackRegister(AttributeChangeConfSt *ConfSt,unint8_t num)
//{
// for(uint8_t i=0;i<num;i++)
// {
// if(i > MAX_ATTR_CHANGE_SUPPORT_NUMS)
// {
// iKonkeAfSelfPrint("attribute change callback totals number beyond!!\r\n");
// break;
// }
// switch(ConfSt[i]->cluster)
// {
// case ZCL_CLUSTER_GEN_ON_OFF:
// {
// if(ConfSt[i]->attribute == ZCL_ATTRID_ONOFF)
// {
// pOnOffClusterCallback = ConfSt[i]->change_callback;
// }
// }
// break;
typedef struct{
zcl_basicAttr_t basicAttrs_temp;
zcl_identifyAttr_t identifyAttrs_temp;
zcl_onOffAttr_t onOffAttrs_temp;
zcl_levelAttr_t levelAttrs_temp;
}AttrListST;
static AttrListST Attr_List_Value[MAX_ATTR_CHANGE_SUPPORT_NUMS] ;
void ikkAttributeChangeCallbackRegister(AttributeChangeConfSt *ConfSt,uint8_t num)
{
for(uint8_t i=0;i<MAX_ATTR_CHANGE_SUPPORT_NUMS;i++)
{
if(i > MAX_ATTR_CHANGE_SUPPORT_NUMS)
{
iKonkeAfSelfPrint("attribute change callback totals number beyond!!\r\n");
break;
}
switch(ConfSt->cluster)
{
case ZCL_CLUSTER_GEN_ON_OFF:
{
pOnOffClusterCallback = ConfSt->change_callback;
}
break;
// case ZCL_CLUSTER_GEN_LEVEL_CONTROL:
// {
// if(ConfSt[i]->attribute == ZCL_ATTRID_LEVEL_CURRENT_LEVEL)
// pLevelClusterCallback = ConfSt[i]->change_callback;
// pLevelClusterCallback = ConfSt->change_callback;
// }
// break;
// default:
// break;
// }
// }
//// memcpy(&Attr_List_Value.basicAttrs_temp,&g_zcl_basicAttrs,sizeof(zcl_basicAttr_t));
//// memcpy(&Attr_List_Value.identifyAttrs_temp,&g_zcl_identifyAttrs,sizeof(zcl_basicAttr_t));
//// memcpy(&Attr_List_Value.onOffAttrs_temp,&g_zcl_onOffAttrs,sizeof(zcl_basicAttr_t));
//// memcpy(&Attr_List_Value.levelAttrs_temp,&g_zcl_levelAttrs,sizeof(zcl_basicAttr_t));
//}
default:
break;
}
}
}
void AttributeValueCheck(void)
void AttributeValueCheckCallback(void)
{
// if((Attr_List_Value.onOffAttrs_temp.onOff !=g_zcl_onOffAttrs.onOff)&&(pOnOffClusterCallback))
// {
// pOnOffClusterCallback(1,ZCL_CLUSTER_GEN_ON_OFF,ZCL_ATTRID_ONOFF,g_zcl_onOffAttrs.onOff,1,g_zcl_onOffAttrs.onOff);
//
//
// }
for(uint8_t i = 0;i<Support_Endpoint_Num;i++)
{
if(memcmp((uint8_t*)&Attr_List_Value[i].onOffAttrs_temp,(uint8_t*)&g_zcl_onOffAttrs[i],sizeof(zcl_onOffAttr_t)) )
{
if(Attr_List_Value[i].onOffAttrs_temp.onOff != g_zcl_onOffAttrs[i].onOff)
{
if(pOnOffClusterCallback)
pOnOffClusterCallback(i+1,ZCL_CLUSTER_GEN_ON_OFF,ZCL_ATTRID_ONOFF,(uint8_t *)&g_zcl_onOffAttrs[i].onOff,ZCL_DATA_TYPE_BOOLEAN);
}
memcpy((uint8_t*)&Attr_List_Value[i].onOffAttrs_temp,(uint8_t*)&g_zcl_onOffAttrs[i],sizeof(zcl_onOffAttr_t));
}
}
}
......@@ -379,7 +379,6 @@ 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);
kZclOnOffClusterServerOnOffControl(endpoint, on_off_ctr);
g_pfOnOffStatusCallback(endpoint,on_off_ctr);
}
/* DESP: Modified attribute reporting interface, reference from SDK callback[emberAfReportingAttributeChangeCallback].
* Auth: dingmz_frc.20190701.
......
......@@ -28,11 +28,10 @@ typedef struct tag_zcl_report_table{
}ZclReportTableSt;
#define MAX_ATTR_CHANGE_SUPPORT_NUMS 8
typedef void (*pClusterAttributeChangeCallback)(uint8_t endpoint,uint16_t cluster,uint16_t attribute,uint8_t len,uint8_t *data);
typedef void (*pClusterAttributeChangeCallback)(uint8_t endpoint,uint16_t cluster,uint16_t attribute,uint8_t *data,uint8_t data_type);
typedef struct {
uint16_t cluster;
uint16_t attribute;
pClusterAttributeChangeCallback change_callback;
}AttributeChangeConfSt;
......@@ -41,20 +40,25 @@ typedef void (*pOnOffClusterOnOffStatusCallback)(uint8_t endpoint, OnOffStatusEn
void kZclOnOffClusterServerOnOffSet(uint8_t endpoint,bool onoff);
extern status_t zcl_attrWrite(u8 endpoint, u16 clusterId, zclWriteRec_t *pWriteRec, bool enable);
extern zclAttrInfo_t *zcl_attrRead(u8 endpoint, u16 clusterId, u16 attrId, status_t *status);
#define ReadServerAttribute(endpoint,clusterId,attributeID,status) (zcl_attrRead(endpoint,clusterId,attributeID,status))
#define kGetLastRssi() (g_sysDiags.lastMessageRSSI)
#define kGetLastLQI() (g_sysDiags.lastMessageLQI)
void Update_Local_Attribute_Info(void);
bool kIsKonkeRemoteGateway(void);
kk_err_t kZclOnOffClusterServerInit(pOnOffClusterOnOffStatusCallback pOnOffStatusCallback );
void ikkAttributeChangeCallbackRegister(AttributeChangeConfSt *ConfSt,uint8_t num);
void ON_OFF_Cmd_Handler(uint8_t endpoint,uint8_t cmd);
bool kZclOnOffClusterServerOnOffGet(uint8_t endpoint);
kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrlopt );
void ClusterAttributeChangeCallbackRegister(AttributeChangeConfSt *ConfSt,uint8_t num);
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 kZclClusterPermitReportTableInit(BindObjSt clusterBindList[], uint8_t size);
......
#ifndef __IKONKE_COMMAND_H____________________________
#define __IKONKE_COMMAND_H____________________________
#include "ikk-module-def.h"
#include "../driver/ikk-uart.h"
#define CMD_CONTROL_FIELD_HOST_TO_ZIGBEE_NEED_ACK 0x10
#define CMD_CONTROL_FIELD_HOST_TO_ZIGBEE_NO_ACK 0x00
#define CMD_CONTROL_FIELD_ZIGBEE_TO_HOST_NEED_ACK 0x30
#define CMD_CONTROL_FIELD_ZIGBEE_TO_HOST_NO_ACK 0x20
typedef enum {
H_TO_Z_WITH_ACK = CMD_CONTROL_FIELD_HOST_TO_ZIGBEE_NEED_ACK,
H_TO_Z_NO_ACK = CMD_CONTROL_FIELD_HOST_TO_ZIGBEE_NO_ACK,
Z_TO_H_WITH_ACK = CMD_CONTROL_FIELD_ZIGBEE_TO_HOST_NEED_ACK,
Z_TO_H_NO_ACK = CMD_CONTROL_FIELD_ZIGBEE_TO_HOST_NO_ACK,
}CMD_CONTROL_FIELD_E;
typedef struct{
uint16_t seq;
uint8_t u8Datalen;
uint8_t u8ChannelID;
uint16_t u16Opcode;
uint8_t u8ArgLen;
uint8_t u8ARG[128];
}DataField_st;
typedef struct{
uint8_t u8SOFHeaderBuf[2];
uint16_t u16DataLength;
uint8_t u8ControlFied;
//uint16_t u16Seq;
DataField_st stDataField;
}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);
#endif
......@@ -2,7 +2,7 @@
#define __IKONKE_MODULE_DEBUG_H______________________________
#define IKONKE_DEBUG_LOG_ENABLE (1) // ENABLE
#define IKONKE_DEBUG_LOG_ENABLE (0) // ENABLE
#define PROMPT_DSR ""
......
#ifndef __IKONKE_MODULE_FACTORY_TEST_H_______________________
#define __IKONKE_MODULE_FACTORY_TEST_H_______________________
#include "ikk-module-def.h"
#include "ikk-debug.h"
#include "../driver/ikk-uart.h"
#include "ikk-command.h"
// 定义是否需要产测
#define FACTORY_TEST_ENABLE true
//使能debug快速测试老化
......@@ -26,19 +26,21 @@
#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_8HOU_MS (5 * 1 * 60 * 1000)
#define FACTORY_TEST_4HOU_MS (5 * 1 * 60 * 1000)
#else
#define FACTORY_TEST_15MIN_MS (15 * 60 * 1000)
#define FACTORY_TEST_8HOU_MS (8 * 60 * 60 * 1000)
#define FACTORY_TEST_4HOU_MS (4 * 60 * 60 * 1000)
#endif
#define FACTORY_TEST_1S (1000)
//初始值
#define TEST_INIT_VALUE 0xFF
typedef enum{
FTS_NORMAL=0,
FTS_START,
FTS_AGING_15MIN,
FTS_AGING_8HOU_START,
FTS_AGING_8HOU,
FTS_AGING_4HOU_START,
FTS_AGING_4HOU,
FTS_AGING_DONE,
FTS_AGING_FORCE_EXIT,
FTS_AGING_WAITING,
......@@ -55,11 +57,25 @@ typedef struct{
//10S轮询操作函数,可根据不同长供电产品自定义实现
typedef void (*pFactoryTestPollCallback)(FactoryTestStatusEnum status);
nv_sts_t General_Set_Factory_Test(nv_item_t items,uint8_t value);
uint8_t General_Get_Factory_Test(nv_item_t items,uint8_t default_value);
#define kSetSingleBoardValue(value) General_Set_Factory_Test(NV_SINGLE_BOARD_TEST_FLG,value)
#define kSetFullDeviceValue(value) General_Set_Factory_Test(NV_FULL_DEVICE_TEST_FLG,value)
#define kSetAgingTestValue(value) General_Set_Factory_Test(NV_AGE_TEST_STEP,value)
#define kGetSingleBoardValue() General_Get_Factory_Test(NV_SINGLE_BOARD_TEST_FLG,TEST_INIT_VALUE)
#define kGetFullDeviceValue() General_Get_Factory_Test(NV_FULL_DEVICE_TEST_FLG,TEST_INIT_VALUE)
#define kGetAgingTestValue() General_Get_Factory_Test(NV_AGE_TEST_STEP,0)
uint8_t kGetFactoryTestValueStatus(void);
uint32_t kGetAgingMaxTime(void);
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);
kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut);
#endif
......@@ -11,7 +11,12 @@
#define Z30_DEVICE_DTYPE (Z30_DEVICE_ZR)
#define Z30_DEVICE_OTA_ENABLE false
// 定义是否需要老化,目前一般路由设备需要
#define Z30_DEVICE_AGING_ENABLE true
//单板测试,目前一般是休眠设备需要
#define Z30_DEVICE_SINGLE_BOARD_ENABLE true
//整机测试, 目前一般是休眠设备需要
#define Z30_DEVICE_FULL_DEVICE_ENBALE true
// Real time IO operation, no optimization!!!
#define _IO volatile
......@@ -39,6 +44,92 @@
#define PORT_UNKNOW 0xFF
#define PIN_UNKNOW (uint32_t)0XFF
//串口通信协议OPCODE
#define UART_MSG_QUERY_INFO_OPCODE 0x0000
#define UART_MSG_WRITE_INSTALL_CODE_OPCODE 0x0001
#define UART_MSG_READ_INSTALL_CODE_OPCODE 0x0002
#define UART_MSG_WRITE_CMEI_CODE_OPCODE 0x0003
#define UART_MSG_READ_CMEI_CODE_OPCODE 0x0004
#define UART_MSG_WRITE_ISN_CODE_OPCODE 0x0005
#define UART_MSG_READ_ISN_CODE_OPCODE 0x0006
#define UART_MSG_WRITE_MAC_CODE_OPCODE 0x0007
#define UART_MSG_READ_MAC_CODE_OPCODE 0x0008
#define UART_MSG_WRITE_MOUDLE_ID_OPCODE 0x0009
#define UART_MSG_READ_MOUDLE_ID_OPCODE 0x000A
#define UART_MSG_READ_DEV_RSSI_OPCODE 0x000B
#define UART_MSG_WRITE_AGING_TIME_OPCODE 0x000C
#define UART_MSG_READ_AGING_TIME_OPCODE 0x000D
#define UART_MSG_WRITE_INTERPAN_PARA_OPCODE 0x000E
#define UART_MSG_READ_INTERPAN_PARA_OPCODE 0x000F
#define UART_MSG_READ_DEVICE_SNAP_OPCODE 0x0010
#define UART_MSG_JOIN_NWK_REQUEST_OPCODE 0x0100
#define UART_MSG_LEAVE_NWK_REQUEST_OPCODE 0x0101
#define UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE 0x0102
#define UART_MSG_NWK_STATUS_NOTIFY_OPCODE 0x0103
#define UART_MSG_READ_ATTRIBUTE_REQUEST_OPCODE 0x0104
#define UART_MSG_WRITE_ATTRIBUTE_REQUEST_OPCODE 0x0105
#define UART_MSG_ZCL_COMMAND_REQUEST_OPCODE 0x0106
#define UART_MSG_BIND_REQUEST_OPCODE 0x0110
#define UART_MSG_GATEWAY_NWK_CHANNEL_ONOFF_OPCODE 0x00FC
#define UART_MSG_PRIVATE_PROTOCOL_CONTROL_CHILD_DEVICE_START_OPCODE 0xF000
#define UART_MSG_PRIVATE_PROTOCOL_CONTROL_CHILD_DEVICE_END_OPCODE 0xF0FF
#define UART_MSG_TTS_OPCODE 0xF100
//factory test message opcode
#define UART_MSG_QUERY_DEVICE_VERSION_OPCODE 0xED00
#define UART_MSG_QUERY_DEVICE_INFO_OPCODE 0xED01
#define UART_MSG_CONFIG_DEVICE_SLEEP_OPCODE 0xED02
#define UART_MSG_EXIT_FACTORY_TEST_OPCODE 0xED04
#define UART_MSG_QUERY_FACTORY_INFO_OPCODE 0xED05
#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_GPIO_TEST_OPCODE 0xED10
#define UART_MSG_READ_RSSI_REQUEST_OPCODE 0xED12
//offline voice panel
#define UART_MSG_HOST_SNAP_REQUEST_OPCODE 0x1000
#define UART_MSG_CTRL_HOST_ONOFF_OPCODE 0x1001 //zigbee module control panel
#define UART_MSG_HOST_ONOFF_NOTIFY_OPCODE 0x1002 //panel onoff status changed notify zigbee
#define UART_MSG_HOST_TRIGGER_SCENE_NOTIFY_OPCODE 0x1003 //pannel recall scene notify zigbees
#define UART_MSG_KEY_LIGHT_SCENE_TRANSFORM_OPCODE 0x1004
#define UART_MSG_TIME_SET_OPCODE 0x1005
#define UART_MSG_TIME_GET_OPCODE 0x1006
#define UART_MSG_DEVICE_OPERATOR_OPCODE 0x1007
#define UART_MSG_FILE_UPDATE_NOTIFY_OPCODE 0x1008
#define UART_MSG_FILE_DATA_REQUEST_OPCODE 0x1009
#define UART_MSG_FILE_UPDATE_STATUS_NOTIFY 0x100A
//bangde human body sensor
#define UART_MSG_BODY_TRIGGER_START_REPORT_OPCODE 0xED03
//bangde sos button
#define UART_MSG_SOS_REPORT_OPCODE 0xED03
//bangde scene button
#define UART_MSG_BUTTON_SCENE_REPORT_OPCODE 0xED03
//bangde environment sensor
#define UART_MSG_QUERY_TEMP_HUMI_INFO_OPCODE 0xED03
//bangde door sensor
#define UART_MSG_BUTTON_ONOFF_REPORT_OPCODE 0xED03
//offline voice panel
//define opcode for private cluster
#define NWK_CHANNEL_ONOFF (uint8_t)(UART_MSG_GATEWAY_NWK_CHANNEL_ONOFF_OPCODE)
#define SNAP_INFO (uint8_t)(UART_MSG_HOST_SNAP_REQUEST_OPCODE)
//#define ONOFF_CONTROL (uint8_t)(UART_MSG_CTRL_HOST_ONOFF_OPCODE)
#define SCENE_TRGGER (uint8_t)(UART_MSG_HOST_TRIGGER_SCENE_NOTIFY_OPCODE)
#define KEY_FUNCTION (uint8_t)(UART_MSG_KEY_LIGHT_SCENE_TRANSFORM_OPCODE)
#define TIME_SET (uint8_t)(UART_MSG_TIME_SET_OPCODE)
#define TIME_GET (uint8_t)(UART_MSG_TIME_GET_OPCODE)
#define DEVICE_OPT (uint8_t)(UART_MSG_DEVICE_OPERATOR_OPCODE)
#define FILE_UPDATE_NOTIFY (uint8_t)(UART_MSG_FILE_UPDATE_NOTIFY_OPCODE)
#define FILE_DATA_REQUEST (uint8_t)(UART_MSG_FILE_DATA_REQUEST_OPCODE )
#define FILE_STATUS_STATUS (uint8_t)(UART_MSG_FILE_UPDATE_STATUS_NOTIFY)
typedef enum kk_error_type {
KET_OK = 0, // 正常(成功)
......@@ -73,11 +164,23 @@ typedef enum kk_error_type {
KET_ERR_OPRATE_IN_PROGRESS = -908, // 操作进行中
KET_ERR_UNKNOW = -999, // 位置错误
}kk_err_t;
typedef enum {
ERR_OK=0x00,
ERR_EXIST=0x01,
ERR_FORMAT=0x02,
ERR_NOT_EXPECTED=0x03,
ERR_WRITE_FAILED=0x04,
ERR_READ_WRITE_TIMEOUT=0x05,
ERR_NOT_EXIST=0x06,
ERR_UNKNOW=0xFF,
}ERR_RET_E;
typedef enum { Z3D_COORDINATOR = 0, Z3D_ROUTER, Z3D_ENDDEVICE }Z3DevTypeEm;
typedef void (*pFUNC_VOID)(void *);
// 操作
typedef enum { ECOM_PORT_UART = 0, ECOM_PORT_RTT, ECOM_PORT_ZIGBEE, ECOM_PORT_INTERPAN, ECOM_PORT_FCC0}ComPortEm;
typedef struct tag_common_opt_callback_st {
pFUNC_VOID pfunc;
void *param;
......
......@@ -5,15 +5,19 @@
#include "ikk-token.h"
#include "tl_common.h"
#include "ikk-cluster.h"
#include "ikk-interpan.h"
#include "ikk-factory-test.h"
#include "../../../../zigbee/aps/aps_api.h"
#include "../../../../zigbee/common/includes/zb_common.h"
/**********************************************************************
* INCLUDES
*/
#define DELAY_RESTORE_NWK_STEERING_TIME_MS (10 * 1000)
#define DELAY_RESTORE_NWK_STEERING_TIME_MS (6 * 1000)
#define DELAY_NWK_DETECT_POWER_ON_TIME_MS (3 * 1000)
#define LED_SLOW_BLINK_CONTINUE_TIME_MS (60 * 1000)
#define LED_FAST_BLINK_CONTINUE_TIME_MS (5 * 1000)
//global value
addrExt_t g_Eui64GatewayAddr = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
......@@ -30,6 +34,8 @@ static uint32_t g_u32NwkDetectCountDownCounter = 0;
static uint32_t g_u32NwkJoiningCountdownCounter = 0;
static bool g_KeyPressCauasLeave = false;
// copy current network status.
static NwkStatusEnum g_eCurrentNetworkStatus = ENS_UNKNOW;
//add by maozj 20200225
......@@ -378,7 +384,7 @@ void kNwkFactoryReset(bool is_nwk_indicator)
memset(g_Eui64GatewayAddr, 0xFF, sizeof(g_Eui64GatewayAddr));
Gateway_IEEE_Addr_Save(g_Eui64GatewayAddr);
Update_Local_Attribute_Info();
// //add by maozj 20200320
//#if Z30_DEVICE_OTA_ENABLE
// kSetOTAStatus(OTA_NORMAL);
......@@ -395,23 +401,24 @@ void kNwkFactoryReset(bool is_nwk_indicator)
//led can blink when network leaved
if (is_nwk_indicator == true){
zb_factoryReset();
kNwkNetworkStatusNotifyCall(ENS_LEAVED);
g_KeyPressCauasLeave = true;
//add by maozj 20200407 for reset count down after network leaved
g_u32NwkExitCountDownCounter = MS2COUNT(5*1000);
g_u32NwkExitCountDownCounter = MS2COUNT(LED_FAST_BLINK_CONTINUE_TIME_MS);
kNwkNetworkStatusNotifyCall(ENS_LEAVED);
Update_Local_Attribute_Info();
}
Set_Nwk_Steering_Status(NWK_STEERING_STATUS_FAILED);
// kNwkScheduleTaskStop(SCHEDULE_ALLOPT_ID);
//
// //add by maozj 20191213 need identify whether gateway is made by konke
// uint8_t isKonkeGateway = 0;
// halCommonSetToken(TOKEN_IS_KONKE_GATEWAY, &isKonkeGateway);
iKonkeAfSelfPrint("kNwkFactoryReset\r\n");
}
void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf)
{
if(g_KeyPressCauasLeave)
{
g_KeyPressCauasLeave = false;
return;
}
iKonkeAfSelfPrint("Leave Handler,Nwk State = %d\r\n",kNwkGetCurrentStatus());
if((pLeaveCnf->status == 0)&&(kNwkGetCurrentStatus() != ENS_JOINING))
{
//如果正处于离网中状态,则不执行以下函数
......@@ -424,8 +431,8 @@ void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf)
Gateway_IEEE_Addr_Save(g_Eui64GatewayAddr);
kNwkNetworkStatusNotifyCall(ENS_LEAVED);
//add by maozj 20200407 for reset count down after network leaved
g_u32NwkExitCountDownCounter = MS2COUNT(5*1000);
// //add by maozj 20200407 for reset count down after network leaved
//g_u32NwkExitCountDownCounter = MS2COUNT(5*1000);
}
}
}
......@@ -466,12 +473,11 @@ static ev_timer_event_t *kUserScheduleTaskEvt = NULL;
extern s32 kUserScheduleTaskHandler(void *arg);
kk_err_t kNwkScheduleTaskRegister(uint32_t TimeOut)
{
kk_err_t err = KET_FAILED;
if(!ev_timer_exist(kUserScheduleTaskEvt)) {
kUserScheduleTaskEvt = TL_ZB_TIMER_SCHEDULE(kUserScheduleTaskHandler, NULL, TimeOut);
err = KET_OK;
if(kUserScheduleTaskEvt){
TL_ZB_TIMER_CANCEL(&kUserScheduleTaskEvt);
}
return err;
kUserScheduleTaskEvt = TL_ZB_TIMER_SCHEDULE(kUserScheduleTaskHandler, NULL, TimeOut);
return KET_OK;
}
......@@ -479,8 +485,16 @@ void kNwkJoiningStart(uint32_t u32JoiningDuration, pJoinCompleteCallback callbac
{
if( u32JoiningDuration > 0 )
{
#if Z30_DEVICE_AGING_ENABLE
if (kGetFactoryTestStatus() != FTS_NORMAL /*&& kGetFactoryTestStatus() != FTS_AGING_15MIN*/){
return;
}
#endif
if(!zb_isDeviceJoinedNwk())
{
//disable interpan
kInterpanDisable();
iKonkeAfSelfPrint("#####Set Steering Counter\r\n");
g_u32NwkJoiningCountdownCounter= MS2COUNT(u32JoiningDuration);
g_pJoinCompleteCallback = callback;
......
......@@ -4,8 +4,8 @@
#include "ikk-opt-tunnel.h"
#include "ikk-debug.h"
#include "ikk-config.h"
#include "ikk-token.h"
#include "../../../../zigbee/zcl/zcl_include.h"
// FCC0-0000
#pragma pack(1)
typedef struct tag_private_clsFCC0_attr0000_frame_st {
......@@ -24,7 +24,7 @@ uint8_t g_tmp_buffer[OPTTUNNEL_CHUNK_MAXLEN+1] = { 0 }, g_tmp_length = 0;
// private protocol optdata message incoming process callback
pFUNC_OPTDATA_MESSAGE_CALLBACK g_pOptDataIncomingMessageCallback = NULL;
extern bool Get_Model_ID(uint8_t *ModeID);
extern _CODE_ZCL_ zclReadCmd_t *zcl_parseInReadCmd(zclIncoming_t *pCmd);
extern _CODE_ZCL_ status_t zcl_readRsp(u8 srcEp, epInfo_t *pDstEpInfo, u16 clusterId, u16 manuCode, u8 disableDefaultRsp, u8 direction, u8 seqNo, zclReadRspCmd_t *readRspCmd);
//_CODE_ZCL_ static status_t zcl_Private_cmdHandler(zclIncoming_t *pInMsg);
......@@ -76,36 +76,77 @@ extern _CODE_ZCL_ status_t zcl_readRsp(u8 srcEp, epInfo_t *pDstEpInfo, u16 clust
// }
//}
//
///*********************************************************************
// * @fn private_fcc0Cb
// *
// * @brief Handler for ZCL FCC0 command. This function will set attribute first.
// *
// * @param pAddrInfo
// * @param cmdId - onoff cluster command id
// * @param cmdPayload
// *
// * @return status_t
// */
//status_t private_fcc0Cb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
//{
// zcl_privateAttr_t *pFcc0_data = zcl_privateAttrGet();
// iKonkeAfSelfPrint("#############private_fcc0Cb ,command id =%x!!!!!!!\r\n",cmdId);
// if(pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT){
// switch(cmdId){
// case ZCL_CMD_ONOFF_ON:
// case ZCL_CMD_ONOFF_OFF:
// case ZCL_CMD_ONOFF_TOGGLE:
// //sampleLight_onoff(cmdId);
// break;
// default:
// break;
// }
// }
//
// return ZCL_STA_SUCCESS;
//}
uint8_t kOptTunnelChunkRead(uint8_t endpoint,
uint16_t clusterId,
uint16_t attributeId,
uint16_t manufacturerCode,
uint8_t *buffer,
uint8_t *length_out)
{
iKonkeAfSelfPrint("&&&&&&&&&&&&&Token Read cluster(%2X), attr(%2X)\r\n", clusterId, attributeId);
uint8_t length = 0;
if (buffer == NULL){
iKonkeAfSelfPrint("Err: Buffer is null(%d)!!\r\n");
return 0xff;
}
if( clusterId == PRIV_CLUSTER_FCC0 ) {
switch(attributeId) {
case (ZCL_CMEI_ATTRIBUTE_ID):
{
uint8_t *data = CMEI_TOKEN_GET();
length = data[0];
memcpy(buffer, data, length+1);
break;
}
case (ZCL_ISN_ATTRIBUTE_ID):
{
uint8_t *data = ISN_TOKEN_GET();
length = data[0];
memcpy(buffer, data, length+1);
break;
}
case (ZCL_InstallCode_ATTRIBUTE_ID):
{
length = 16;
buffer[0] = length;
memcpy(&buffer[1], INSTALL_CODE_TOKEN_GET(), length);
break;
}
default:
return 0xfe;
}
}
if (buffer[0] <= OPTTUNNEL_CHUNK_MAXLEN){
*length_out = buffer[0];
}else {
*length_out = 0;
}
return 0;
}
/* DESP: Private clsuter attribute read interface, for chunk data.
* Auth: dingmz_frc.20190703.
* */
kk_err_t kOptTunnelAttrChunkLocalRead(uint16_t attribute_id, unsigned char *chunk_buffer, unsigned char *length_in_out )
{
if( NULL == chunk_buffer || NULL == length_in_out ) {
return KET_ERR_INVALID_POINTER;
}
uint8_t status = 0;
kk_err_t err = KET_OK;
status = kOptTunnelChunkRead(1, PRIV_CLUSTER_FCC0, attribute_id, 0x1268, chunk_buffer, length_in_out);
if( status == 0 ) {
*length_in_out = chunk_buffer[0] + 1;
}else {
iKonkeAfSelfPrint("Err: Chunk read err(%d)!!\r\n", status);
*length_in_out = 0;
err = KET_ERR_UNKNOW;
}
return err;
}
status_t kOptTunnelMessageReadResponse(zclIncoming_t *pInHdlrMsg,uint8_t *pData)
{
u8 status = ZCL_STA_SUCCESS;
......@@ -285,15 +326,15 @@ kk_err_t kOptTunnelMessageIncoming(OptMethodEm method,zclIncoming_t *pCmd)
* Auth: dingmz_frc.20191113.
* */
extern status_t General_Report(uint8_t src_ep,uint8_t des_ep,uint16_t cluster,uint16_t Attribute,uint8_t Data_Type,uint8_t *value);
static status_t kOptTunnelOODReport(uint16_t attribute_id,uint8_t channel, uint8_t opcode, uint8_t *arg, uint8_t length )
static status_t kOptTunnelCommonReportSend(uint16_t attribute_id, uint8_t *arg, uint8_t length )
{
uint8_t temp_buffer[64] = {0};
if(length < 64)
if( arg && length > 0 )
memmove(temp_buffer+1, arg, length);
temp_buffer[0] = length;
memmove(g_tmp_buffer,temp_buffer,length+1);
return General_Report(channel,1,PRIV_CLUSTER_FCC0,attribute_id,ZCL_DATA_TYPE_CHAR_STR,g_tmp_buffer);
return General_Report(1,1,PRIV_CLUSTER_FCC0,attribute_id,ZCL_DATA_TYPE_CHAR_STR,g_tmp_buffer);
}
/* DESP: Private protocol common report interface.
* Auth: dingmz_frc.20191113.
......@@ -305,18 +346,22 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
}
kk_err_t err = KET_OK;
uint8_t bufCount = 0;
switch(attribute_id) {
case (ECA_OPTDATA):
{
uint32_t modeid = (uint32_t)MODEL_ID;
iKonkeAfSelfPrint("#######kOptTunnelCommonReport OPTDATA\r\n");
g_tmp_buffer[1] = modeid>>24;
g_tmp_buffer[2] = modeid>>16;
g_tmp_buffer[3] = modeid>>8;
g_tmp_buffer[4] = modeid;
uint8_t modeid[8] = {0};
if(Get_Model_ID(modeid))
{
g_tmp_buffer[bufCount++] = 0;
g_tmp_buffer[bufCount++] = modeid[4];
g_tmp_buffer[bufCount++] = modeid[5];
g_tmp_buffer[bufCount++] = modeid[6];
g_tmp_buffer[bufCount++] = modeid[7];
g_tmp_buffer[5] = 0x00;//channel
g_tmp_buffer[6] = 0x00;//opcode
}
if( g_pOptDataIncomingMessageCallback ) {
g_tmp_length = 0;
g_tmp_buffer[7] = 0x00;//add by maozj 20200511
......@@ -328,6 +373,34 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
}
break;
}
case (ECA_ASSOCIATED_AOUNCE):
{
addrExt_t u64LocalEui64 = { 0 };
uint16_t NodeID = zb_getLocalShortAddr();
uint16_t index;
tl_zbExtAddrByShortAddr(NodeID,u64LocalEui64,&index);
g_tmp_buffer[0] = (NodeID >> 8) & 0xff;
g_tmp_buffer[1] = (NodeID >> 0) & 0xff;
SWAP_EUI64(u64LocalEui64);
memcpy(g_tmp_buffer + 2, u64LocalEui64, 8);
g_tmp_length = 10;
break;
}
case (ECA_CMEI):
case (ECA_ISN ):
{
g_tmp_length = OPTTUNNEL_CHUNK_MAXLEN;
kOptTunnelAttrChunkLocalRead(attribute_id, g_tmp_buffer, &g_tmp_length);
iKonkeAfSelfPrint("####Report CHUNK Read length(0x%x) \r\n", g_tmp_length);
break;
}
case (ECA_INSTALL_CODE):
g_tmp_length = OPTTUNNEL_CHUNK_MAXLEN;
kOptTunnelAttrChunkLocalRead(ZCL_InstallCode_ATTRIBUTE_ID, g_tmp_buffer, &g_tmp_length);
break;
default:
{
err = KET_ERR_OPRATE_ILLEGAL;
......@@ -335,7 +408,7 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
}
}
if( err == KET_OK && g_tmp_length > 1) {
if(kOptTunnelOODReport(attribute_id,g_tmp_buffer[5],g_tmp_buffer[6],g_tmp_buffer,g_tmp_buffer[0]+1)== ZCL_STA_SUCCESS)
if(kOptTunnelCommonReportSend(attribute_id,g_tmp_buffer,g_tmp_buffer[0]+1)== ZCL_STA_SUCCESS)
err = KET_OK;
else
err = KET_FAILED;
......@@ -343,11 +416,38 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
return err;
}
/* DESP: Private protocol message(command) reporting interface
* Auth: dingmz_frc.20191113.
* */
kk_err_t kOptTunnelOODReport(uint8_t channel, uint8_t opcode, uint8_t *arg, uint8_t length )
{
uint8_t bufCount = 0;
uint8_t modeid[8] = {0};
if(Get_Model_ID(modeid))
{
g_tmp_buffer[bufCount++] = 0; // totle length
g_tmp_buffer[bufCount++] = modeid[4];
g_tmp_buffer[bufCount++] = modeid[5];
g_tmp_buffer[bufCount++] = modeid[6];
g_tmp_buffer[bufCount++] = modeid[7];
g_tmp_buffer[bufCount++] = channel;//channel
g_tmp_buffer[bufCount++] = opcode;//opcode
}
if( arg && length > 0 ) {
memcpy(g_tmp_buffer + bufCount, arg, length);
bufCount += length;
}
g_tmp_buffer[0] = bufCount - 1;
return kOptTunnelCommonReportSend(ECA_OPTDATA, g_tmp_buffer, bufCount);
}
kk_err_t kOptTunnelModuleInit(pFUNC_OPTDATA_MESSAGE_CALLBACK pOptdataIncomingCallback )
{
g_pOptDataIncomingMessageCallback = pOptdataIncomingCallback;
return KET_OK;
}
......@@ -10,6 +10,18 @@
#define PRIV_CLUSTER_FCC0 0XFCC0
// Server attributes
#define ZCL_OPT_DATA_ATTRIBUTE_ID 0x0000 // Ver.: always
#define ZCL_TTS_ATTRIBUTE_ID 0x0001 // Ver.: always
#define ZCL_MTO_RR_RspRandom_ATTRIBUTE_ID 0x0002 // Ver.: always
#define ZCL_AssociatedAnnounce_ATTRIBUTE_ID 0x0003 // Ver.: always
#define ZCL_CMEI_ATTRIBUTE_ID 0x0010 // Ver.: always
#define ZCL_ISN_ATTRIBUTE_ID 0x0011 // Ver.: always
#define ZCL_InstallCode_ATTRIBUTE_ID 0x0012 // Ver.: always
#define ZCL_CHUNK_N1_ATTRIBUTE_ID 0x0013 // Ver.: always
#define OPTTUNNEL_OPTDATA_ID 0x0000 // FCC0 Cluster Attribute 0x0000
#define OPTTUNNEL_OPTDATA_MAXLEN 128
......@@ -51,10 +63,6 @@ typedef kk_err_t (*pFUNC_OPTDATA_MESSAGE_CALLBACK)(uint8_t channel, uint8_t opco
void Set2NwkJoiningCountdownCounter(u32 time_ms);
/* DESP: Private protocol common report interface.
* Auth: mengmengli_frc.20210527.
* */
kk_err_t kOptTunnelCommonReport(uint16_t attribute_id );
/* DESP: private clsuter protocol module init interface.
......@@ -66,14 +74,7 @@ kk_err_t kOptTunnelModuleInit(pFUNC_OPTDATA_MESSAGE_CALLBACK pOptdataIncomingCal
kk_err_t kOptTunnelOODReport(uint8_t channel, uint8_t opcode, uint8_t *arg, uint8_t length );
......
#if (__PROJECT_TL_DIMMABLE_LIGHT__)
/**********************************************************************
* INCLUDES
*/
......@@ -17,8 +15,10 @@ extern void kBtnModuleActionDetectCallback(void );
extern void kLedModuleActionDetectCallback(void );
//extern bool kLedModuleActionIsGoing(void );
extern void kNwkModuleActionDetectCallback(void );
//attribute change check callback
extern void kRelayModuleActionDetectCallback(uint8_t poll_time);
//attribute change check callback
extern void AttributeValueCheckCallback(void);
static s32 kTickEventHandler(void *arg)
{
......@@ -26,6 +26,7 @@ static s32 kTickEventHandler(void *arg)
kBtnModuleActionDetectCallback();
kNwkModuleActionDetectCallback();
kRelayModuleActionDetectCallback(TICK_LOOP_NMS);
AttributeValueCheckCallback();
return 0;
}
......@@ -52,5 +53,5 @@ void kTickRunnningTrigger(void )
}
#endif /* __PROJECT_TL_DIMMABLE_LIGHT__ */
......@@ -15,5 +15,4 @@ void Tick_Time_Init(void);
* */
void kTickRunnningTrigger(void );
#endif
......@@ -4,6 +4,70 @@
#include "tl_common.h"
#define TOKEN_USER_LOCATION 0x78000
#define USER_SIZE 256
#define INSTALL_CODE_LOC_OFFSET 0 //16Byte //0
#define MODEL_ID_LOC_OFFSET 64 //33Byte //16+33
#define CMEI_LOC_OFFSET 64+64 //33Byte //16+33+33
#define ISN_LOC_OFFSET 64+64+64 //33Byte //16+33+33+33
enum{
CUSTOM_ITEMS_INSTALL_CODE = 1,
CUSTOM_ITEMS_MODEL_ID ,
CUSTOM_ITEMS_CMEI_CODE ,
CUSTOM_ITEMS_ISN_CODE ,
CUSTOM_ITEMS_RESERVED ,
}CUSTOM_ITEMS;
#define INSTALL_CODE_INDEX 0
#define MODEL_ID_INDEX 1
#define INSTALL_CODE_INDEX 0
#define INSTALL_CODE_INDEX 0
#define INSTALL_CODE_INDEX 0
typedef struct
{
struct{
uint8_t install_code_data[16];
uint8_t res[48];
}install_code;
struct{
uint8_t modeid_len;
uint8_t modeid_data[32];
uint8_t res[31];
}modeid;
struct{
uint8_t cmei_len;
uint8_t cmei_data[32];
uint8_t res[31];
}cmei;
struct{
uint8_t isn_len;
uint8_t isn_data[32];
uint8_t res[31];
}isn;
uint8_t reserved[32];
}OPTTUNEL_TOKEN_ST;
extern OPTTUNEL_TOKEN_ST sOptunnel_Token;
void Flash_Test_Save(uint8_t value);
uint8_t Flash_Test_Get(void);
uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len);
uint8_t *General_Custom_Token_Get(uint8_t item);
#define INSTALL_CODE_TOKEN_GET() (General_Custom_Token_Get(CUSTOM_ITEMS_INSTALL_CODE))
#define MODEL_ID_TOKEN_GET() (General_Custom_Token_Get(CUSTOM_ITEMS_MODEL_ID))
#define CMEI_TOKEN_GET() (General_Custom_Token_Get(CUSTOM_ITEMS_CMEI_CODE))
#define ISN_TOKEN_GET() (General_Custom_Token_Get(CUSTOM_ITEMS_ISN_CODE))
#define INSTALL_CODE_TOKEN_SET(buffer,len) (General_Custom_Token_Save(CUSTOM_ITEMS_INSTALL_CODE,buffer,len))
#define MODEL_ID_TOKEN_SET(buffer,len) (General_Custom_Token_Save(CUSTOM_ITEMS_MODEL_ID,buffer,len))
#define CMEI_TOKEN_SET(buffer,len) (General_Custom_Token_Save(CUSTOM_ITEMS_CMEI_CODE,buffer,len))
#define ISN_TOKEN_SET(buffer,len) (General_Custom_Token_Save(CUSTOM_ITEMS_ISN_CODE,buffer,len))
nv_sts_t Gateway_IEEE_Addr_Save(addrExt_t addr);
......@@ -13,14 +77,12 @@ uint16_t MFG_Code_Get(void);
nv_sts_t MFG_Code_Save(uint16_t mfgcode);
uint8_t kGetAgingTestValue(void);
nv_sts_t kSetAgingTestValue(uint8_t value);
bool kGetIndicatorNotDisturbModeFlg(void);
nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value);
#if 0
void falsh_test(void);
nv_sts_t kSetInterpanEnableFlg(uint8_t value);
bool kGetInterpanEnableFlg(void);
#if 1
void falsh_test(uint8_t count);
#endif
#endif /* _SAMPLE_LIGHT_H_ */
......@@ -22,7 +22,7 @@ uint8_t* Gateway_IEEE_Addr_Get(void)
{
nv_sts_t st = NV_SUCC;
st = nv_flashReadNew(1, NV_MODULE_USER, NV_GATEWAY_ADDR, sizeof(addrExt_t), (u8*)g_Eui64GatewayAddr);
st = nv_flashReadNew(1, NV_MODULE_APP, NV_GATEWAY_ADDR, sizeof(addrExt_t), (u8*)g_Eui64GatewayAddr);
iKonkeAfSelfPrint("flashRead:::\r\n");
DEBUG_ARRAY(1,g_Eui64GatewayAddr,sizeof(addrExt_t));
if(st != NV_SUCC){
......@@ -44,14 +44,14 @@ nv_sts_t Gateway_IEEE_Addr_Save(addrExt_t addr)
nv_sts_t st = NV_SUCC;
addrExt_t temp_addr;
st = nv_flashReadNew(1, NV_MODULE_USER, NV_GATEWAY_ADDR, sizeof(addrExt_t), (u8*)temp_addr);
st = nv_flashReadNew(1, NV_MODULE_APP, NV_GATEWAY_ADDR, sizeof(addrExt_t), (u8*)temp_addr);
iKonkeAfSelfPrint("flashRead:::temp_addr\r\n");
DEBUG_ARRAY(1,temp_addr,sizeof(addrExt_t));
if(st == NV_SUCC){
if(memcmp(temp_addr,addr,sizeof(addrExt_t)))
st = nv_flashWriteNew(1, NV_MODULE_USER, NV_GATEWAY_ADDR, sizeof(addrExt_t), (u8*)addr);
st = nv_flashWriteNew(1, NV_MODULE_APP, NV_GATEWAY_ADDR, sizeof(addrExt_t), (u8*)addr);
}else if(st == NV_ITEM_NOT_FOUND){
st = nv_flashWriteNew(1, NV_MODULE_USER, NV_GATEWAY_ADDR, sizeof(addrExt_t), (u8*)addr);
st = nv_flashWriteNew(1, NV_MODULE_APP, NV_GATEWAY_ADDR, sizeof(addrExt_t), (u8*)addr);
}
iKonkeAfSelfPrint("Gateway_IEEE_Addr_Save result = %d\r\n",st);
return st;
......@@ -69,7 +69,7 @@ uint16_t MFG_Code_Get(void)
{
nv_sts_t st = NV_SUCC;
uint16_t mfg_code_temp;
st = nv_flashReadNew(1, NV_MODULE_USER, NV_MFG_CODE, sizeof(mfg_code_temp), (u8*)&mfg_code_temp);
st = nv_flashReadNew(1, NV_MODULE_APP, NV_MFG_CODE, sizeof(mfg_code_temp), (u8*)&mfg_code_temp);
if(st != NV_SUCC){
mfg_code_temp = 0;
}
......@@ -89,12 +89,12 @@ nv_sts_t MFG_Code_Save(uint16_t mfgcode)
nv_sts_t st = NV_SUCC;
uint16_t mfg_code_temp;
st = nv_flashReadNew(1, NV_MODULE_USER, NV_MFG_CODE, sizeof(mfg_code_temp), (u8*)&mfg_code_temp);
st = nv_flashReadNew(1, NV_MODULE_APP, NV_MFG_CODE, sizeof(mfg_code_temp), (u8*)&mfg_code_temp);
if(st == NV_SUCC){
if(mfg_code_temp != mfgcode)
st = nv_flashWriteNew(1, NV_MODULE_USER, NV_MFG_CODE, sizeof(uint16_t), (u8*)&mfgcode);
st = nv_flashWriteNew(1, NV_MODULE_APP, NV_MFG_CODE, sizeof(uint16_t), (u8*)&mfgcode);
}else if(st == NV_ITEM_NOT_FOUND){
st = nv_flashWriteNew(1, NV_MODULE_USER, NV_MFG_CODE, sizeof(uint16_t), (u8*)&mfgcode);
st = nv_flashWriteNew(1, NV_MODULE_APP, NV_MFG_CODE, sizeof(uint16_t), (u8*)&mfgcode);
}
iKonkeAfSelfPrint("MFG_CODE_Save result = %d\r\n",st);
return st;
......
This diff is collapsed.
......@@ -189,7 +189,7 @@
<link>
<name>apps/common/00ikonke_app</name>
<type>2</type>
<location>E:/TeLin_Zigbee_SDK/tl_zigbee_sdk/apps/common/00ikonke_app</location>
<location>E:/telin_zigbee_sdk/tl_zigbee_sdk/apps/common/00ikonke_app</location>
</link>
<link>
<name>platform/boot/8258</name>
......
......@@ -52,6 +52,7 @@
#if defined(MCU_CORE_826x) || defined(MCU_CORE_8258) || defined(MCU_CORE_8278)
int Tl_printf(const char *format, ...);
#endif
#define SKD_LOG_ENABLE FALSE
#if (UART_PRINTF_MODE || USB_PRINTF_MODE)
......@@ -59,6 +60,7 @@ int Tl_printf(const char *format, ...);
#define printf Tl_printf
#endif
#define TRACE printf
#define DEBUG(compileFlag, ...) do{ \
......@@ -75,6 +77,11 @@ int Tl_printf(const char *format, ...);
TRACE("\n*********************************\n"); \
} \
}while(0)
#if SKD_LOG_ENABLE
#define sdk_printf printf
#else
#define sdk_printf
#endif
#else
#if defined(MCU_CORE_826x) || defined(MCU_CORE_8258) || defined(MCU_CORE_8278)
#define printf
......
......@@ -601,7 +601,7 @@ nv_sts_t nv_resetToFactoryNew(void){
}
foreach(i, NV_MAX_MODULS){
if((i != NV_MODULE_NWK_FRAME_COUNT)&&(i != NV_MODULE_KEYPAIR)){
if((i != NV_MODULE_NWK_FRAME_COUNT)&&(i != NV_MODULE_APP)){
nv_resetModule(i);
}
}
......
......@@ -354,8 +354,12 @@ typedef enum{
NV_GATEWAY_ADDR, //lmm add
NV_MFG_CODE, //lmm add
NV_AGE_TEST_STEP, //lmm add
NV_SINGLE_BOARD_TEST_FLG, //lmm add
NV_FULL_DEVICE_TEST_FLG, //lmm add
NV_MFC_CODE, //lmm add
NV_NO_DISTURB_MODE, //lmm add
NV_AGING_TEST_TIME, //lmm add
NV_INTERPAN_ENABLE_FLG, //lmm add
NV_ITEM_ID_MAX = 0xFF,/* Item id 0xFF should not be used. */
}nv_item_t;
......
......@@ -49,7 +49,7 @@
/**
* @brief Definition for timer event
*/
#define TIMER_EVENT_NUM (40)
#define TIMER_EVENT_NUM (24)
#define TIMER_EVENT_ENOUGH_NUM (TIMER_EVENT_NUM - 4)
/**
......
......@@ -83,3 +83,4 @@
#include "drivers/drv_putchar.h"
#include "drivers/drv_usb.h"
......@@ -854,7 +854,7 @@ _CODE_BDB_ static void bdb_nodeDescRespHandler(void *arg)
//lmm add for getting coo manufacture code
u16 manufactureCode = (u16)(rsp->node_descriptor.mcH8) <<8 | rsp->node_descriptor.mcL8;
MFG_Code_Save(manufactureCode);
Tl_printf("sdk print,nodeDescResp,manufactureCode = %d\r\n",manufactureCode); //just debug for sdk test
sdk_printf("sdk print,nodeDescResp,manufactureCode = %d\r\n",manufactureCode); //just debug for sdk test
if(stackRev >= 21){
ss_apsRequestKeyReq_t requestKey;
TL_SETSTRUCTCONTENT(requestKey, 0);
......@@ -926,6 +926,7 @@ _CODE_BDB_ static s32 bdb_retrieveTcLinkKeyTimeout(void *arg)
*/
_CODE_BDB_ static s32 bdb_retrieveTcLinkKeyStart(void *arg)
{
sdk_printf("bdb_retrieveTcLinkKeyStart, g_bdbAttrs.tcLinkKeyExchangeMethod= %d\n", g_bdbAttrs.tcLinkKeyExchangeMethod);
if(g_bdbAttrs.tcLinkKeyExchangeMethod == TCKEY_EXCHANGE_METHOD_APSRK){
/* send node description */
u8 sn = 0;
......@@ -1108,7 +1109,6 @@ static void bdb_task(void *arg)
g_bdbCtx.bdbAppCb->bdbcommissioningCb(g_bdbAttrs.commissioningStatus, NULL);
}
}
Tl_printf("sdk print,bdb_task,BDB_STATE_IDLE,status = %d\r\n",status); //just debug for sdk test
BDB_STATE_SET(status);
}else if(evt == BDB_STATE_REJOIN_DONE){
bdb_topLevelCommissiongConfirm();
......@@ -1116,6 +1116,7 @@ static void bdb_task(void *arg)
break;
case BDB_STATE_COMMISSIONING_TOUCHLINK:
sdk_printf("sdk printf,touch link ,evt = %d\r\n",evt);
if(evt == BDB_EVT_COMMISSIONING_TOUCHLINK_NO_RESP){
/*
* if no scan response received, start network steer
......@@ -1143,7 +1144,7 @@ static void bdb_task(void *arg)
break;
case BDB_STATE_COMMISSIONING_NETWORK_STEER:
Tl_printf("sdk print,bdb_task,networ steering,evt = %d\r\n",evt); //just debug for sdk test
sdk_printf("sdk printf,start retry tclink_key event,evt = %d\r\n",evt);
if(evt == BDB_EVT_COMMISSIONING_NETWORK_STEER_RETRIEVE_TCLINK_KEY){
TL_ZB_TIMER_SCHEDULE(bdb_retrieveTcLinkKeyStart, NULL, 1000);
}else if(evt == BDB_EVT_COMMISSIONING_NETWORK_STEER_PERMITJOIN){
......@@ -1156,13 +1157,11 @@ static void bdb_task(void *arg)
#if ZB_COORDINATOR_ROLE
ss_securityModeSet(SS_SEMODE_CENTRALIZED);
#else
Tl_printf("sdk print,bdb_task,networ steering,----\r\n");
if((!g_bdbAttrs.nodeIsOnANetwork)||(ZB_IEEE_ADDR_IS_INVAILD(ss_ib.trust_center_address))){
ss_securityModeSet(SS_SEMODE_DISTRIBUTED);
}
#endif
status = bdb_commissioningNetworkFormation();
Tl_printf("sdk print,bdb_task,networ steering,status = %d\r\n",status);
if(status == BDB_STATE_IDLE){
/* confirm to application */
bdb_topLevelCommissiongConfirm();
......@@ -1172,6 +1171,7 @@ static void bdb_task(void *arg)
break;
case BDB_STATE_COMMISSIONING_NETWORK_FORMATION:
sdk_printf("sdk printf,BDB_STATE_COMMISSIONING_NETWORK_FORMATION,evt = %d\r\n",evt);
if( evt == BDB_EVT_COMMISSIONING_NETWORK_FORMATION_PERMITJOIN){
g_bdbAttrs.commissioningMode.networkSteer = 1;
zb_mgmtPermitJoinReq(0xfffc, BDBC_MIN_COMMISSIONING_TIME, 0x01, &sn, NULL);
......@@ -1187,6 +1187,7 @@ static void bdb_task(void *arg)
break;
case BDB_STATE_COMMISSIONING_FINDORBIND:
sdk_printf("sdk printf,FINDORBIND,evt = %d\r\n",evt);
if(evt == BDB_EVT_COMMISSIONING_FINDORBIND_SIMPLE_DESC_REQ){
bdb_commissioningFindBindSimpleDescReq();
}else if(evt == BDB_EVT_COMMISSIONING_FINDORBIND_FINISH){
......@@ -1228,7 +1229,7 @@ _CODE_BDB_ static s32 bdb_task_delay(void *arg)
_CODE_BDB_ void bdb_zdoStartDevCnf(zdo_start_device_confirm_t *startDevCnf){
u32 evt = BDB_EVT_IDLE;
u8 state = BDB_STATE_GET();
Tl_printf("sdk print,bdb_zdoStartDevCnf,get bdb status = %d,start status = %d\r\n",state,startDevCnf->status);
switch(state){
case BDB_STATE_IDLE:
/* for rejoin indication by the stack */
......@@ -1287,7 +1288,6 @@ _CODE_BDB_ void bdb_zdoStartDevCnf(zdo_start_device_confirm_t *startDevCnf){
#endif
case BDB_STATE_COMMISSIONING_NETWORK_STEER:
Tl_printf("sdk print,bdb_zdoStartDevCnf,status = %d\r\n",startDevCnf->status); //just debug for sdk test
if(startDevCnf->status == SUCCESS){
//g_bdbAttrs.commissioningStatus = BDB_COMMISSION_STA_SUCCESS;
g_bdbAttrs.nodeIsOnANetwork = 1;
......@@ -1454,7 +1454,7 @@ _CODE_BDB_ static u8 bdb_topLevelCommissiongConfirm(void){
*/
_CODE_BDB_ static u8 bdb_topLevelCommissioning(u8 target){
/* restore persistent ZigBee data */
Tl_printf("sdk print,bdb_topLevelCommissioning = %d,%d\r\n",BDB_STATE_GET(),g_bdbAttrs.commissioningStatus);
if(BDB_STATE_GET() != BDB_STATE_IDLE || g_bdbAttrs.commissioningStatus == BDB_COMMISSION_STA_IN_PROGRESS){
return BDB_STATE_COMMISSIONING_BUSY;
}
......
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