Commit 682c75ca authored by limm's avatar limm

V1.0 VERSION

parent 25f1f17b
...@@ -188,6 +188,11 @@ void user_app_init(void) ...@@ -188,6 +188,11 @@ void user_app_init(void)
zcl_register(fixedEndpoints[i], Cluster_Num_List[i], (zcl_specClusterInfo_t *)g_EPClusterAllList[i]); 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 #ifdef ZCL_GREEN_POWER
/* Initialize GP */ /* Initialize GP */
...@@ -272,6 +277,7 @@ void user_init(bool isRetention) ...@@ -272,6 +277,7 @@ void user_init(bool isRetention)
user_app_init(); user_app_init();
App_Init(); App_Init();
printf("###########init !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n");
/* Register except handler for test */ /* Register except handler for test */
sys_exceptHandlerRegister(sampleLightSysException); sys_exceptHandlerRegister(sampleLightSysException);
......
...@@ -47,12 +47,11 @@ ...@@ -47,12 +47,11 @@
#define _SAMPLE_LIGHT_H_ #define _SAMPLE_LIGHT_H_
#include ENDPOINT_CONFIG_H #include ENDPOINT_CONFIG_H
/********************************************************************** /**********************************************************************
* CONSTANT * CONSTANT
*/ */
#define SAMPLE_LIGHT_ENDPOINT 0x01 #define SAMPLE_LIGHT_ENDPOINT 0x01
#define SAMPLE_TEST_ENDPOINT 0x02 #define SAMPLE_TEST_ENDPOINT 0x06
/********************************************************************** /**********************************************************************
* TYPEDEFS * TYPEDEFS
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
*/ */
#define ZCL_BASIC_MFG_NAME {5,'K','o','n','k','e'} #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 #ifndef ZCL_BASIC_MFG_NAME
#define ZCL_BASIC_MFG_NAME {6,'T','E','L','I','N','K'} #define ZCL_BASIC_MFG_NAME {6,'T','E','L','I','N','K'}
...@@ -120,7 +120,6 @@ const u16 EP1_inClusterList[] = ...@@ -120,7 +120,6 @@ const u16 EP1_inClusterList[] =
#ifdef ZCL_FCC0 #ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0, ZCL_CLUSTER_PRIVATE_FCC0,
#endif #endif
}; };
/** /**
...@@ -162,10 +161,6 @@ const u16 EP2_inClusterList[] = ...@@ -162,10 +161,6 @@ const u16 EP2_inClusterList[] =
#ifdef ZCL_ZLL_COMMISSIONING #ifdef ZCL_ZLL_COMMISSIONING
ZCL_CLUSTER_TOUCHLINK_COMMISSIONING, ZCL_CLUSTER_TOUCHLINK_COMMISSIONING,
#endif #endif
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0,
#endif
}; };
/** /**
...@@ -208,10 +203,6 @@ const u16 EP3_inClusterList[] = ...@@ -208,10 +203,6 @@ const u16 EP3_inClusterList[] =
#ifdef ZCL_ZLL_COMMISSIONING #ifdef ZCL_ZLL_COMMISSIONING
ZCL_CLUSTER_TOUCHLINK_COMMISSIONING, ZCL_CLUSTER_TOUCHLINK_COMMISSIONING,
#endif #endif
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0,
#endif
}; };
/** /**
...@@ -253,10 +244,6 @@ const u16 EP4_inClusterList[] = ...@@ -253,10 +244,6 @@ const u16 EP4_inClusterList[] =
#ifdef ZCL_ZLL_COMMISSIONING #ifdef ZCL_ZLL_COMMISSIONING
ZCL_CLUSTER_TOUCHLINK_COMMISSIONING, ZCL_CLUSTER_TOUCHLINK_COMMISSIONING,
#endif #endif
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0,
#endif
}; };
/** /**
...@@ -299,6 +286,7 @@ const u16 sampleTest_inClusterList[] = ...@@ -299,6 +286,7 @@ const u16 sampleTest_inClusterList[] =
ZCL_CLUSTER_TELINK_SDK_TEST_RSP, ZCL_CLUSTER_TELINK_SDK_TEST_RSP,
ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_REQ, ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_REQ,
ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_RSP, ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_RSP,
0x0001,
}; };
...@@ -324,8 +312,8 @@ const u16 sampleTest_outClusterList[] = ...@@ -324,8 +312,8 @@ const u16 sampleTest_outClusterList[] =
*/ */
const af_simple_descriptor_t sampleTestDesc = const af_simple_descriptor_t sampleTestDesc =
{ {
HA_PROFILE_ID, /* Application profile identifier */ ZDO_PROFILE_ID, /* Application profile identifier */
HA_DEV_DIMMABLE_LIGHT, /* Application device identifier */ HA_DEV_ONOFF_LIGHT_SWITCH, /* Application device identifier */
SAMPLE_TEST_ENDPOINT, /* Endpoint */ SAMPLE_TEST_ENDPOINT, /* Endpoint */
0, /* Application device version */ 0, /* Application device version */
0, /* Reserved */ 0, /* Reserved */
...@@ -559,7 +547,7 @@ zcl_onOffAttr_t g_zcl_onOffAttrs[Support_Endpoint_Num] ={ONOFF_DEFAULT1,ONOFF_DE ...@@ -559,7 +547,7 @@ zcl_onOffAttr_t g_zcl_onOffAttrs[Support_Endpoint_Num] ={ONOFF_DEFAULT1,ONOFF_DE
const zclAttrInfo_t onOff_attrTbl[] = 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_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_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}, { 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[] = ...@@ -569,7 +557,7 @@ const zclAttrInfo_t onOff_attrTbl[] =
}; };
const zclAttrInfo_t onOff_attrTb2[] = 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_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_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}, { 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[] = ...@@ -579,7 +567,7 @@ const zclAttrInfo_t onOff_attrTb2[] =
}; };
const zclAttrInfo_t onOff_attrTb3[] = 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_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_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}, { 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[] = ...@@ -589,7 +577,7 @@ const zclAttrInfo_t onOff_attrTb3[] =
}; };
const zclAttrInfo_t onOff_attrTb4[] = 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_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_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}, { 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; ...@@ -119,6 +119,8 @@ extern zcl_lightColorCtrlAttr_t g_zcl_colorCtrlAttrs;
#define zcl_sceneAttrGet(ep) &g_zcl_sceneAttrs[ep-1] #define zcl_sceneAttrGet(ep) &g_zcl_sceneAttrs[ep-1]
#define zcl_onoffAttrGet(ep) &g_zcl_onOffAttrs[ep-1] #define zcl_onoffAttrGet(ep) &g_zcl_onOffAttrs[ep-1]
#define zcl_BasicAttrGet() &g_zcl_basicAttrs
void SimpleDesc_Init(uint8_t endpint); void SimpleDesc_Init(uint8_t endpint);
nv_sts_t zcl_onOffAttr_get(void); nv_sts_t zcl_onOffAttr_get(void);
nv_sts_t zcl_onOffAttr_save(void); nv_sts_t zcl_onOffAttr_save(void);
......
...@@ -116,7 +116,7 @@ extern "C" { ...@@ -116,7 +116,7 @@ extern "C" {
// DEBUG // DEBUG
#if UART_PRINTF_MODE #if UART_PRINTF_MODE
#define DEBUG_INFO_TX_PIN GPIO_PA2//print #define DEBUG_INFO_TX_PIN GPIO_PA1//print
#endif #endif
/********************************************************************** /**********************************************************************
* Stack configuration * Stack configuration
...@@ -148,7 +148,7 @@ extern "C" { ...@@ -148,7 +148,7 @@ extern "C" {
* @brief ZCL: MAX number of cluster list, in cluster number add + out cluster number * @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 * @brief ZCL: maximum number for zcl reporting table
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#define MANUFATURE_NAME "Konke" #define MANUFATURE_NAME "Konke"
/*Dsp: MODEL_ID */ /*Dsp: MODEL_ID */
#define MODEL_ID 0x3AFE101000068624 #define MODEL_ID 0x00068624
/*Dsp: OTA_IMAGE_TYPE */ /*Dsp: OTA_IMAGE_TYPE */
#define OTA_IMAGE_TYPE 65000 #define OTA_IMAGE_TYPE 65000
......
...@@ -10,28 +10,33 @@ ...@@ -10,28 +10,33 @@
#include "ikk-relay.h" #include "ikk-relay.h"
#include "ikk-led.h" #include "ikk-led.h"
#include "ikk-ota.h" #include "ikk-ota.h"
#include "ikk-command.h"
#include "ikk-common-utils.h"
#include "ikk-interpan.h"
#include "ikk-pwm.h"
#define ZERO_PIN GPIO_PA0 #define ZERO_PIN GPIO_PA0
#define RELAY1_PIN GPIO_PC1 #define RELAY1_PIN GPIO_PC0
#define RELAY2_PIN GPIO_PC4 #define RELAY2_PIN GPIO_PC4
#define RELAY3_PIN GPIO_PC6 #define RELAY3_PIN GPIO_PC6
#define RELAY4_PIN GPIO_PC5 #define RELAY4_PIN GPIO_PC5
#define LED_RADAR_PIN GPIO_PD2 #define LED_RADAR_PIN GPIO_PD4
#define LED1_PIN GPIO_PB6 #define LED1_PIN GPIO_PB5
#define LED2_PIN GPIO_PA5 #define LED2_PIN GPIO_PA4
#define LED3_PIN GPIO_PD4 #define LED3_PIN GPIO_PD2
#define LED4_PIN GPIO_PB4 #define LED4_PIN GPIO_PA3
#define KEY_SYS_PIN GPIO_PD7 #define KEY_SYS_PIN GPIO_PD7
#define KEY1_PIN GPIO_PC7 #define KEY1_PIN GPIO_PC7
#define KEY2_PIN GPIO_PB5 #define KEY2_PIN GPIO_PB4
#define KEY3_PIN GPIO_PD3 #define KEY3_PIN GPIO_PD3
#define KEY4_PIN GPIO_PA3 #define KEY4_PIN GPIO_PA6
#define RADAR_PIN GPIO_PC0 #define RADAR_PIN GPIO_PC1
#define UART_TX_PIN GPIO_PB7
#define UART_RX_PIN GPIO_PB1
#define SYS_BUTTON_LONG_PRESS_TIME_MS (5 * 1000) #define SYS_BUTTON_LONG_PRESS_TIME_MS (5 * 1000)
#define DELAY_REPORT_DATA_AFTER_NWK_JOINED_MS (3 * 1000) #define DELAY_REPORT_DATA_AFTER_NWK_JOINED_MS (3 * 1000)
...@@ -89,11 +94,11 @@ BtnConfSt g_btnConfList[] = { ...@@ -89,11 +94,11 @@ BtnConfSt g_btnConfList[] = {
// LEDs CONFIG // LEDs CONFIG
LedConfSt g_ledConfList[] = { LedConfSt g_ledConfList[] = {
{(uint8_t)LED_RADAR_ID, 1, {LED_RADAR_PIN, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID}, ELP_HIGH }, {(uint8_t)LED_RADAR_ID, 1, {LED_RADAR_PIN, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID}, ELP_HIGH },
{(uint8_t)LED1_ID, 1, {LED1_PIN, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID}, ELP_HIGH }, {(uint8_t)LED1_ID, 1, {LED1_PIN, PWM1_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID}, ELP_HIGH },
{(uint8_t)LED2_ID, 1, {LED2_PIN, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID}, ELP_HIGH }, {(uint8_t)LED2_ID, 1, {LED2_PIN, PWM2_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID}, ELP_HIGH },
{(uint8_t)LED3_ID, 1, {LED3_PIN, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID}, ELP_HIGH }, {(uint8_t)LED3_ID, 1, {LED3_PIN, PWM3_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID}, ELP_HIGH },
{(uint8_t)LED4_ID, 1, {LED4_PIN, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID}, ELP_HIGH }, {(uint8_t)LED4_ID, 1, {LED4_PIN, PWM4_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID, PIN_UNKNOW, PWM_UNKNOW_ID}, ELP_HIGH },
{(uint8_t)LED_ALL_ID, 4, {LED1_PIN, PWM_UNKNOW_ID, LED2_PIN, PWM_UNKNOW_ID, LED3_PIN, PWM_UNKNOW_ID, LED4_PIN, PWM_UNKNOW_ID}, ELP_HIGH }, {(uint8_t)LED_ALL_ID, 4, {LED1_PIN, PWM1_ID, LED2_PIN, PWM2_ID, LED3_PIN, PWM3_ID, LED4_PIN, PWM4_ID}, ELP_HIGH },
}; };
PwmConfSt g_pwmConfList[] = { PwmConfSt g_pwmConfList[] = {
{PWM1_ID, {LED1_PIN, KK_PWM_CC0}}, // {PWM1_ID, {LED1_PIN, KK_PWM_CC0}}, //
...@@ -124,10 +129,18 @@ BindObjSt cluster_obj_list[] = { ...@@ -124,10 +129,18 @@ BindObjSt cluster_obj_list[] = {
{ZCL_CLUSTER_GEN_ON_OFF, ZCL_ATTRID_ONOFF, 4}, {ZCL_CLUSTER_GEN_ON_OFF, ZCL_ATTRID_ONOFF, 4},
}; };
void pOnOffAttributeChangeCallback(uint8_t endpoint,uint16_t cluster,uint16_t attribute,uint8_t *data,uint8_t data_type);
AttributeChangeConfSt attribte_change_list[] = {
{ZCL_CLUSTER_GEN_ON_OFF, pOnOffAttributeChangeCallback},
};
uint32_t u32PeroidIntervalMS = 2*1000; uint32_t u32PeroidIntervalMS = 2*1000;
bool Human_body_induction_flag = false; bool Human_body_induction_flag = false;
static bool power_on_sync[4] = {false,false,false,false}; static bool power_on_sync[4] = {false,false,false,false};
static uint8_t g_u8NoDisturbModeMinLevel = 0x01;
static uint8_t g_u8NoDisturbModeMaxLevel = 0x64;
//非控客网关首次数据是否上报标志 //非控客网关首次数据是否上报标志
static bool g_bIsNotKonkeGatewayFirstReportedFlg = false; static bool g_bIsNotKonkeGatewayFirstReportedFlg = false;
static uint8_t g_u8CurrentHeartEndpoint = 1; static uint8_t g_u8CurrentHeartEndpoint = 1;
...@@ -149,7 +162,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status); ...@@ -149,7 +162,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status);
void kOTAMoudleUserCallback(OTAStatusEnum status); void kOTAMoudleUserCallback(OTAStatusEnum status);
#endif #endif
#define UART_ENABLE false
void kUserRelayLedCallback(RelayStatusSt status); void kUserRelayLedCallback(RelayStatusSt status);
void kRadarDetectInit(void); void kRadarDetectInit(void);
void kRadarLedTragger(void); void kRadarLedTragger(void);
...@@ -164,12 +177,13 @@ void Test(void ); ...@@ -164,12 +177,13 @@ void Test(void );
static ev_timer_event_t *kkSystemSetUpEvent = NULL; static ev_timer_event_t *kkSystemSetUpEvent = NULL;
s32 kkSystemSetUpEventHandler(void *arg ); s32 kkSystemSetUpEventHandler(void *arg );
//void pOnOffClusterAttributeChangeCallback(uint8_t endpoint,uint16_t cluster,uint16_t attribute,uint8_t len,uint8_t *data); void kUserInterPanMsgInComingPaser(UMsgNodeSt *pMsgNode);
// void pOnOffClusterAttributeChangeCallback(uint8_t endpoint,uint16_t cluster,uint16_t attribute,uint8_t len,uint8_t *data);
//AttributeChangeConfSt g_ClusterAttributeConfList[] = {
// {ZCL_CLUSTER_GEN_ON_OFF, ZCL_ATTRID_ONOFF, pOnOffClusterAttributeChangeCallback}, AttributeChangeConfSt g_ClusterAttributeConfList[] = {
//}; {ZCL_CLUSTER_GEN_ON_OFF, ZCL_ATTRID_ONOFF, pOnOffClusterAttributeChangeCallback},
#define UART_ENABLE false };
static void kLEDOnAction(LED_ID_ENUM led_id); static void kLEDOnAction(LED_ID_ENUM led_id);
static void kLEDOffAction(LED_ID_ENUM led_id); static void kLEDOffAction(LED_ID_ENUM led_id);
void App_Init(void) void App_Init(void)
...@@ -188,7 +202,7 @@ void App_Init(void) ...@@ -188,7 +202,7 @@ void App_Init(void)
iKonkeAfSelfPrint("Err: Button Module Init failed(%d)!!\r\n", err); iKonkeAfSelfPrint("Err: Button Module Init failed(%d)!!\r\n", err);
} }
#endif #endif
#if 0 #if 1
err = kPwmModuleInit(g_pwmConfList, sizeof(g_pwmConfList)/sizeof(PwmConfSt), kUserPwmActionDoneCallback); err = kPwmModuleInit(g_pwmConfList, sizeof(g_pwmConfList)/sizeof(PwmConfSt), kUserPwmActionDoneCallback);
if( err != KET_OK ) { if( err != KET_OK ) {
iKonkeAfSelfPrint("Err: PWM Module Init failed(%d)!!\r\n", err); iKonkeAfSelfPrint("Err: PWM Module Init failed(%d)!!\r\n", err);
...@@ -205,7 +219,7 @@ void App_Init(void) ...@@ -205,7 +219,7 @@ void App_Init(void)
} }
#if UART_ENABLE #if UART_ENABLE
uint8_t recv_header[] = {0xAA,0X55}; uint8_t recv_header[] = {0xAA,0X55};
err = kUartModuleInit(UART_TX_PIN,UART_RX_PIN,115200,PARITY_NONE,STOP_BIT_ONE,recv_header,2,2,5,MsgCRC16,UartMsgProcessHandle,true ); err = kUartModuleInit(UART_TX_PIN,UART_RX_PIN,115200,PARITY_NONE,STOP_BIT_ONE,recv_header,2,3,6,MsgCRC16,UartMsgProcessHandle,true );
#endif #endif
kNwkModuleInit(cluster_obj_list,sizeof(cluster_obj_list) / sizeof(cluster_obj_list[0]), kUserNetworkStatusNotify, kUserNetworkExitCompleteCallback); kNwkModuleInit(cluster_obj_list,sizeof(cluster_obj_list) / sizeof(cluster_obj_list[0]), kUserNetworkStatusNotify, kUserNetworkExitCompleteCallback);
...@@ -221,19 +235,16 @@ void App_Init(void) ...@@ -221,19 +235,16 @@ void App_Init(void)
if( err != KET_OK ) { if( err != KET_OK ) {
iKonkeAfSelfPrint("Err: kUserOODMessageIncoming Register Failed(%d)!!\r\n", err); iKonkeAfSelfPrint("Err: kUserOODMessageIncoming Register Failed(%d)!!\r\n", err);
} }
// ZCL // //注册属性改变回调
ikkAttributeChangeCallbackRegister(attribte_change_list,sizeof(attribte_change_list)/sizeof(attribte_change_list[0]));
kZclOnOffClusterServerInit(kUserOnOffClusterOnOffStatusCallback); kZclOnOffClusterServerInit(kUserOnOffClusterOnOffStatusCallback);
if(!ev_timer_exist(kkSystemSetUpEvent)) { if(!ev_timer_exist(kkSystemSetUpEvent)) {
kkSystemSetUpEvent = TL_ZB_TIMER_SCHEDULE(kkSystemSetUpEventHandler, NULL, 20); kkSystemSetUpEvent = TL_ZB_TIMER_SCHEDULE(kkSystemSetUpEventHandler, NULL, 50);
} }
//start radar detect event //start radar detect event
kRadarDetectInit(); kRadarDetectInit();
kZclClusterPermitReportTableInit(cluster_obj_list, sizeof(cluster_obj_list) / sizeof(BindObjSt)); kZclClusterPermitReportTableInit(cluster_obj_list, sizeof(cluster_obj_list) / sizeof(BindObjSt));
//注册属性改变回调
//ClusterAttributeChangeCallbackRegister(g_ClusterAttributeConfList,sizeof(g_ClusterAttributeConfList)/sizeof(AttributeChangeConfSt));
//重写attribute
Update_Local_Attribute_Info();
} }
...@@ -241,7 +252,11 @@ void Test(void ) ...@@ -241,7 +252,11 @@ void Test(void )
{ {
} }
void kUserNetworkExitCompleteCallback()
{
SYSTEM_RESET();
}
static bool kClustePeriodReportCheckIsSet(uint8_t endpoint) static bool kClustePeriodReportCheckIsSet(uint8_t endpoint)
{ {
uint16_t u16MinTimeMS = 0; uint16_t u16MinTimeMS = 0;
...@@ -264,7 +279,6 @@ void JoinCompleteCallback(NwkJoinCompltEnum nwkcomplt ) ...@@ -264,7 +279,6 @@ void JoinCompleteCallback(NwkJoinCompltEnum nwkcomplt )
case (EJC_JOIN_FAILED ): case (EJC_JOIN_FAILED ):
{ {
LED_OPT_OFF(LED_ALL_ID); LED_OPT_OFF(LED_ALL_ID);
kUserNetworkExitCompleteCallback();
break; break;
} }
case (EJC_JOIN_SUCCEED): case (EJC_JOIN_SUCCEED):
...@@ -275,6 +289,7 @@ void JoinCompleteCallback(NwkJoinCompltEnum nwkcomplt ) ...@@ -275,6 +289,7 @@ void JoinCompleteCallback(NwkJoinCompltEnum nwkcomplt )
default: break; default: break;
} }
} }
void kUserNetworkStatusNotify(NwkStatusEnum nwkst ) void kUserNetworkStatusNotify(NwkStatusEnum nwkst )
{ {
iKonkeAfSelfPrint("#############################kUserNetworkStatusNotify = %d\r\n", nwkst); iKonkeAfSelfPrint("#############################kUserNetworkStatusNotify = %d\r\n", nwkst);
...@@ -283,22 +298,24 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst ) ...@@ -283,22 +298,24 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst )
{ {
uint32_t randTimeMS = DELAY_REPORT_DATA_AFTER_NWK_JOINED_MS; uint32_t randTimeMS = DELAY_REPORT_DATA_AFTER_NWK_JOINED_MS;
//power on after joined network //power on after joined network
uint32_t currentTimeMS = clock_time(); uint32_t currentTimeMS = clock_time()/16/1000;
kSetLedStatus(LED_ALL_ID);
if ( currentTimeMS < MIN_JOINED_NWK_DELAY_TIME_MS){ if ( currentTimeMS < MIN_JOINED_NWK_DELAY_TIME_MS){
randTimeMS = kGetRandNum(RAND_MIN_NUM, RAND_MAX_NUM); randTimeMS = kGetRandNum(RAND_MIN_NUM, RAND_MAX_NUM);
}else { }else {
// kPwmOptTrigger(PWM4_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000); kPwmOptTrigger(PWM4_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000);
// kPwmOptTrigger(PWM3_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000); kPwmOptTrigger(PWM3_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000);
// kPwmOptTrigger(PWM2_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000); kPwmOptTrigger(PWM2_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000);
// kPwmOptTrigger(PWM1_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000); kPwmOptTrigger(PWM1_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000);
//kLedOptTrigger(LED_ALL_ID, 0, 0, 0, LED_OFF, LED_IGNORE); //kLedOptTrigger(LED_ALL_ID, 0, 0, 0, LED_OFF, LED_IGNORE);
} }
if (kIsKonkeRemoteGateway() != true){ if (kIsKonkeRemoteGateway() != true){
g_bIsNotKonkeGatewayFirstReportedFlg = false; g_bIsNotKonkeGatewayFirstReportedFlg = false;
} }
kSetLedStatus(LED_ALL_ID);
kNwkScheduleTaskRegister(randTimeMS); kNwkScheduleTaskRegister(randTimeMS);
iKonkeAfSelfPrint("Joined Network RandTime(%dms) CurrentTime(%ld)\r\n", randTimeMS, currentTimeMS); iKonkeAfSelfPrint("Joined Network RandTime(%dms) CurrentTime(%d)\r\n", randTimeMS, currentTimeMS);
break; break;
} }
case (ENS_JOINING): case (ENS_JOINING):
...@@ -323,6 +340,16 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst ) ...@@ -323,6 +340,16 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst )
} }
} }
} }
void pOnOffAttributeChangeCallback(uint8_t endpoint,uint16_t cluster,uint16_t attribute,uint8_t *data,uint8_t data_type)
{
if((cluster == ZCL_CLUSTER_GEN_ON_OFF)&&(attribute == ZCL_ATTRID_ONOFF)&&(data_type == ZCL_DATA_TYPE_BOOLEAN))
{
OnOffStatusEnum estatus = *data;
kUserOnOffClusterOnOffStatusCallback(endpoint,estatus);
iKonkeAfSelfPrint("#####pOnOffAttributeChangeCallback,endpont = %d,value = %d\r\n",endpoint,estatus);
}
}
//on off 属性改变后的回调函数,一般用来操作继电器,过零检测,如果没有过零检测可以在这里同步LED状态 //on off 属性改变后的回调函数,一般用来操作继电器,过零检测,如果没有过零检测可以在这里同步LED状态
void kUserOnOffClusterOnOffStatusCallback(uint8_t endpoint, OnOffStatusEnum estatus ) void kUserOnOffClusterOnOffStatusCallback(uint8_t endpoint, OnOffStatusEnum estatus )
{ {
...@@ -331,37 +358,21 @@ void kUserOnOffClusterOnOffStatusCallback(uint8_t endpoint, OnOffStatusEnum esta ...@@ -331,37 +358,21 @@ void kUserOnOffClusterOnOffStatusCallback(uint8_t endpoint, OnOffStatusEnum esta
switch(endpoint) { switch(endpoint) {
case (1): case (1):
{ {
if(estatus == EOOS_OFF)
LED_OPT_OFF(LED1_ID);
else
LED_OPT_ON(LED1_ID);
kRelayChannelOpt(RELAY_CHANNEL1_ID,estatus == EOOS_OFF? EZAO_OFF : EZAO_ON); kRelayChannelOpt(RELAY_CHANNEL1_ID,estatus == EOOS_OFF? EZAO_OFF : EZAO_ON);
break; break;
} }
case (2): case (2):
{ {
if(estatus == EOOS_OFF)
LED_OPT_OFF(LED2_ID);
else
LED_OPT_ON(LED2_ID);
kRelayChannelOpt(RELAY_CHANNEL2_ID,estatus == EOOS_OFF? EZAO_OFF : EZAO_ON); kRelayChannelOpt(RELAY_CHANNEL2_ID,estatus == EOOS_OFF? EZAO_OFF : EZAO_ON);
break; break;
} }
case (3): case (3):
{ {
if(estatus == EOOS_OFF)
LED_OPT_OFF(LED3_ID);
else
LED_OPT_ON(LED3_ID);
kRelayChannelOpt(RELAY_CHANNEL3_ID,estatus == EOOS_OFF? EZAO_OFF : EZAO_ON); kRelayChannelOpt(RELAY_CHANNEL3_ID,estatus == EOOS_OFF? EZAO_OFF : EZAO_ON);
break; break;
} }
case (4): case (4):
{ {
if(estatus == EOOS_OFF)
LED_OPT_OFF(LED4_ID);
else
LED_OPT_ON(LED4_ID);
kRelayChannelOpt(RELAY_CHANNEL4_ID,estatus == EOOS_OFF? EZAO_OFF : EZAO_ON); kRelayChannelOpt(RELAY_CHANNEL4_ID,estatus == EOOS_OFF? EZAO_OFF : EZAO_ON);
break; break;
} }
...@@ -370,10 +381,12 @@ void kUserOnOffClusterOnOffStatusCallback(uint8_t endpoint, OnOffStatusEnum esta ...@@ -370,10 +381,12 @@ void kUserOnOffClusterOnOffStatusCallback(uint8_t endpoint, OnOffStatusEnum esta
kZclOnOffClusterServerOnOffControl(endpoint, estatus); kZclOnOffClusterServerOnOffControl(endpoint, estatus);
} }
uint8_t Key_Press_Test_Flag[5] = {0};
void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
{ {
iKonkeAfSelfPrint("kUserButton: ButtonId(%d), Action(%d)\r\n", button_id, action); iKonkeAfSelfPrint("kUserButton: ButtonId(%d), Action(%d),%d\r\n", button_id, action,kGetFactoryTestStatus());
if ( kGetFactoryTestStatus() == FTS_AGING_8HOU || kGetFactoryTestStatus() == FTS_AGING_DONE \ if ( kGetFactoryTestStatus() == FTS_AGING_4HOU || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS \ || kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS \
|| kNwkIsExiting() == true){ || kNwkIsExiting() == true){
...@@ -388,8 +401,13 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -388,8 +401,13 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
{ {
case EBA_CLICK: case EBA_CLICK:
{ {
if(kNwkGetCurrentStatus() == ENS_ONLINE) Key_Press_Test_Flag[0] = 1;
kLedOptTrigger(LED_ALL_ID,200,200,1,LED_OFF,LED_IGNORE); //绿灯闪烁一次 if( kNwkGetCurrentStatus() == ENS_ONLINE ) { // report connected!
if (kLedIsBlinking(LED_ALL_ID) != true)
kLedOptTrigger(LED_ALL_ID, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, 1, LED_ON, LED_OFF);
kOptTunnelOODReport(0, 0XCD, NULL, 0);
}
else if(kNwkGetCurrentStatus() == ENS_LEAVED) else if(kNwkGetCurrentStatus() == ENS_LEAVED)
{ {
kNwkFactoryReset(false); kNwkFactoryReset(false);
...@@ -416,11 +434,11 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -416,11 +434,11 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
if(action == EBA_CLICK) if(action == EBA_CLICK)
{ {
iKonkeAfSelfPrint("KEY 1 PRESS!!!\r\n"); iKonkeAfSelfPrint("KEY 1 PRESS!!!\r\n");
Key_Press_Test_Flag[1] = 1;
OnOffCtrlEnum state = kZclOnOffClusterServerOnOffGet(1)? EOOC_OFF : EOOC_ON; OnOffCtrlEnum state = kZclOnOffClusterServerOnOffGet(1)? EOOC_OFF : EOOC_ON;
kZclClusterSetPermitReportInfo(1,0x0006,true,false); kZclClusterSetPermitReportInfo(1,0x0006,true,false);
//afTest_dataSendDemo();
kZclOnOffClusterServerOnOffControl(1, state); kZclOnOffClusterServerOnOffControl(1, state);
kRelayChannelOpt(RELAY_CHANNEL1_ID,kZclOnOffClusterServerOnOffGet(1)? EZAO_ON : EZAO_OFF);
// iKonkeAfSelfPrint("Get onoff (%d),%d\r\n", pOnOff->onOff, pOnOff->startUpOnOff);
}else if (action == EBA_LONGPRESS){ }else if (action == EBA_LONGPRESS){
if (kNwkIsExiting() == true){ if (kNwkIsExiting() == true){
iKonkeAfSelfPrint("#####NWK is exiting\r\n"); iKonkeAfSelfPrint("#####NWK is exiting\r\n");
...@@ -430,7 +448,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -430,7 +448,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
static bool firstLongPressFlg = false; static bool firstLongPressFlg = false;
if (kNwkGetCurrentStatus() == ENS_ONLINE){ if (kNwkGetCurrentStatus() == ENS_ONLINE){
static uint32_t lastTimeMS = 0; static uint32_t lastTimeMS = 0;
uint32_t currentTimeMS = clock_time(); uint32_t currentTimeMS = clock_time()/16/1000;
if (firstLongPressFlg != true \ if (firstLongPressFlg != true \
|| (currentTimeMS - lastTimeMS >= MAX_FIRST_USER_KEY_LEAVE_NWK_INTERVAL_TIME_MS)){ || (currentTimeMS - lastTimeMS >= MAX_FIRST_USER_KEY_LEAVE_NWK_INTERVAL_TIME_MS)){
firstLongPressFlg = true; firstLongPressFlg = true;
...@@ -465,10 +483,10 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -465,10 +483,10 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
if (action == EBA_CLICK){ if (action == EBA_CLICK){
//restore report attribute immediately //restore report attribute immediately
iKonkeAfSelfPrint("KEY 2 PRESS!!!\r\n"); iKonkeAfSelfPrint("KEY 2 PRESS!!!\r\n");
Key_Press_Test_Flag[2] = 1;
OnOffCtrlEnum state = kZclOnOffClusterServerOnOffGet(2)? EOOC_OFF : EOOC_ON; OnOffCtrlEnum state = kZclOnOffClusterServerOnOffGet(2)? EOOC_OFF : EOOC_ON;
kZclClusterSetPermitReportInfo(2,0x0006,true,false); kZclClusterSetPermitReportInfo(2,0x0006,true,false);
kZclOnOffClusterServerOnOffControl(2, state); kZclOnOffClusterServerOnOffControl(2, state);
kRelayChannelOpt(RELAY_CHANNEL2_ID,kZclOnOffClusterServerOnOffGet(2)? EZAO_ON : EZAO_OFF);
} }
break; break;
} }
...@@ -477,10 +495,10 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -477,10 +495,10 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
if (action == EBA_CLICK){ if (action == EBA_CLICK){
//restore report attribute immediately //restore report attribute immediately
iKonkeAfSelfPrint("KEY 3 PRESS!!!\r\n"); iKonkeAfSelfPrint("KEY 3 PRESS!!!\r\n");
Key_Press_Test_Flag[3] = 1;
OnOffCtrlEnum state = kZclOnOffClusterServerOnOffGet(3)? EOOC_OFF : EOOC_ON; OnOffCtrlEnum state = kZclOnOffClusterServerOnOffGet(3)? EOOC_OFF : EOOC_ON;
kZclClusterSetPermitReportInfo(3,0x0006,true,false); kZclClusterSetPermitReportInfo(3,0x0006,true,false);
kZclOnOffClusterServerOnOffControl(3, state); kZclOnOffClusterServerOnOffControl(3, state);
kRelayChannelOpt(RELAY_CHANNEL3_ID,kZclOnOffClusterServerOnOffGet(3)? EZAO_ON : EZAO_OFF);
} }
break; break;
} }
...@@ -489,10 +507,10 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -489,10 +507,10 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
if (action == EBA_CLICK){ if (action == EBA_CLICK){
//restore report attribute immediately //restore report attribute immediately
iKonkeAfSelfPrint("KEY 4 PRESS!!!\r\n"); iKonkeAfSelfPrint("KEY 4 PRESS!!!\r\n");
Key_Press_Test_Flag[4] = 1;
OnOffCtrlEnum state = kZclOnOffClusterServerOnOffGet(4)? EOOC_OFF : EOOC_ON; OnOffCtrlEnum state = kZclOnOffClusterServerOnOffGet(4)? EOOC_OFF : EOOC_ON;
kZclClusterSetPermitReportInfo(4,0x0006,true,false); kZclClusterSetPermitReportInfo(4,0x0006,true,false);
kZclOnOffClusterServerOnOffControl(4, state); kZclOnOffClusterServerOnOffControl(4, state);
kRelayChannelOpt(RELAY_CHANNEL4_ID,kZclOnOffClusterServerOnOffGet(4)? EZAO_ON : EZAO_OFF);
} }
break; break;
} }
...@@ -515,7 +533,7 @@ void kUserRelayLedCallback(RelayStatusSt status) ...@@ -515,7 +533,7 @@ void kUserRelayLedCallback(RelayStatusSt status)
{ {
case RELAY_CHANNEL1_ID: case RELAY_CHANNEL1_ID:
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[0] == true \ if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[0] == true \
|| kGetFactoryTestStatus() == FTS_AGING_8HOU \ || kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
...@@ -527,13 +545,17 @@ void kUserRelayLedCallback(RelayStatusSt status) ...@@ -527,13 +545,17 @@ void kUserRelayLedCallback(RelayStatusSt status)
} }
}else if (kNwkGetCurrentStatus() == ENS_LEAVED \ }else if (kNwkGetCurrentStatus() == ENS_LEAVED \
|| kNwkGetCurrentStatus() == ENS_OFFLINE){ || kNwkGetCurrentStatus() == ENS_OFFLINE){
if(kZclOnOffClusterServerOnOffGet(1)== EOOC_OFF)
kLedOptTrigger(LED1_ID, LED_FAST_BLINK_ON_TIME_MS, \ kLedOptTrigger(LED1_ID, LED_FAST_BLINK_ON_TIME_MS, \
LED_FAST_BLINK_OFF_TIME_MS, 3, LED_ON, LED_IGNORE); LED_FAST_BLINK_OFF_TIME_MS, 3, EOOC_OFF, EOOC_OFF);
else
kLedOptTrigger(LED1_ID, LED_FAST_BLINK_ON_TIME_MS, \
LED_FAST_BLINK_OFF_TIME_MS, 3, LED_ON, LED_ON);
} }
break; break;
case RELAY_CHANNEL2_ID: case RELAY_CHANNEL2_ID:
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[1] == true \ if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[1] == true \
|| kGetFactoryTestStatus() == FTS_AGING_8HOU \ || kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
...@@ -545,13 +567,17 @@ void kUserRelayLedCallback(RelayStatusSt status) ...@@ -545,13 +567,17 @@ void kUserRelayLedCallback(RelayStatusSt status)
} }
}else if (kNwkGetCurrentStatus() == ENS_LEAVED \ }else if (kNwkGetCurrentStatus() == ENS_LEAVED \
|| kNwkGetCurrentStatus() == ENS_OFFLINE){ || kNwkGetCurrentStatus() == ENS_OFFLINE){
if(kZclOnOffClusterServerOnOffGet(2)== EOOC_OFF)
kLedOptTrigger(LED2_ID, LED_FAST_BLINK_ON_TIME_MS, \ kLedOptTrigger(LED2_ID, LED_FAST_BLINK_ON_TIME_MS, \
LED_FAST_BLINK_OFF_TIME_MS, 3, LED_ON, LED_IGNORE); LED_FAST_BLINK_OFF_TIME_MS, 3, EOOC_OFF, EOOC_OFF);
else
kLedOptTrigger(LED2_ID, LED_FAST_BLINK_ON_TIME_MS, \
LED_FAST_BLINK_OFF_TIME_MS, 3, LED_ON, LED_ON);
} }
break; break;
case RELAY_CHANNEL3_ID: case RELAY_CHANNEL3_ID:
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[2] == true \ if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[2] == true \
|| kGetFactoryTestStatus() == FTS_AGING_8HOU \ || kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
...@@ -563,13 +589,17 @@ void kUserRelayLedCallback(RelayStatusSt status) ...@@ -563,13 +589,17 @@ void kUserRelayLedCallback(RelayStatusSt status)
} }
}else if (kNwkGetCurrentStatus() == ENS_LEAVED \ }else if (kNwkGetCurrentStatus() == ENS_LEAVED \
|| kNwkGetCurrentStatus() == ENS_OFFLINE){ || kNwkGetCurrentStatus() == ENS_OFFLINE){
if(kZclOnOffClusterServerOnOffGet(3)== EOOC_OFF)
kLedOptTrigger(LED3_ID, LED_FAST_BLINK_ON_TIME_MS, \
LED_FAST_BLINK_OFF_TIME_MS, 3, EOOC_OFF, EOOC_OFF);
else
kLedOptTrigger(LED3_ID, LED_FAST_BLINK_ON_TIME_MS, \ kLedOptTrigger(LED3_ID, LED_FAST_BLINK_ON_TIME_MS, \
LED_FAST_BLINK_OFF_TIME_MS, 3, LED_ON, LED_IGNORE); LED_FAST_BLINK_OFF_TIME_MS, 3, LED_ON, LED_ON);
} }
break; break;
case RELAY_CHANNEL4_ID: case RELAY_CHANNEL4_ID:
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[3] == true \ if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[3] == true \
|| kGetFactoryTestStatus() == FTS_AGING_8HOU \ || kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
...@@ -581,8 +611,12 @@ void kUserRelayLedCallback(RelayStatusSt status) ...@@ -581,8 +611,12 @@ void kUserRelayLedCallback(RelayStatusSt status)
} }
}else if (kNwkGetCurrentStatus() == ENS_LEAVED \ }else if (kNwkGetCurrentStatus() == ENS_LEAVED \
|| kNwkGetCurrentStatus() == ENS_OFFLINE){ || kNwkGetCurrentStatus() == ENS_OFFLINE){
if(kZclOnOffClusterServerOnOffGet(4)== EOOC_OFF)
kLedOptTrigger(LED4_ID, LED_FAST_BLINK_ON_TIME_MS, \
LED_FAST_BLINK_OFF_TIME_MS, 3, EOOC_OFF, EOOC_OFF);
else
kLedOptTrigger(LED4_ID, LED_FAST_BLINK_ON_TIME_MS, \ kLedOptTrigger(LED4_ID, LED_FAST_BLINK_ON_TIME_MS, \
LED_FAST_BLINK_OFF_TIME_MS, 3, LED_ON, LED_IGNORE); LED_FAST_BLINK_OFF_TIME_MS, 3, LED_ON, LED_ON);
} }
break; break;
...@@ -591,9 +625,39 @@ void kUserRelayLedCallback(RelayStatusSt status) ...@@ -591,9 +625,39 @@ void kUserRelayLedCallback(RelayStatusSt status)
break; break;
} }
} }
//add by zbw
void kUserPwmActionDoneCallback(unsigned char id, PwmGradientDirectionEnum opt)
{
switch(id)
{
case PWM1_ID:
kSetLedStatus(LED1_ID);
break;
case PWM2_ID:
kSetLedStatus(LED2_ID);
break;
case PWM3_ID:
kSetLedStatus(LED3_ID);
break;
case PWM4_ID:
kSetLedStatus(LED4_ID);
break;
default:
break;
}
}
//ota升级失败或入网成功和失败后LED闪烁完成后处理,需要根据不同产品来修改 //ota升级失败或入网成功和失败后LED闪烁完成后处理,需要根据不同产品来修改
static void kSetLedStatus(LED_ID_ENUM id) static void kSetLedStatus(LED_ID_ENUM id)
{ {
if (id != LED_ALL_ID){
kPwmClearGradientCounterById(id - 1);
}else{
kPwmClearGradientCounterById(PWM1_ID);
kPwmClearGradientCounterById(PWM2_ID);
kPwmClearGradientCounterById(PWM3_ID);
kPwmClearGradientCounterById(PWM4_ID);
}
//恢复继电器的LED状态 //恢复继电器的LED状态
if (id == LED_ALL_ID) if (id == LED_ALL_ID)
{ {
...@@ -608,6 +672,7 @@ static void kSetLedStatus(LED_ID_ENUM id) ...@@ -608,6 +672,7 @@ static void kSetLedStatus(LED_ID_ENUM id)
} }
} }
}else if (id == LED1_ID || id == LED2_ID || id == LED3_ID || id == LED4_ID){ }else if (id == LED1_ID || id == LED2_ID || id == LED3_ID || id == LED4_ID){
iKonkeAfSelfPrint("###kSetLedStatus:%d,%d,%d\r\n",kLedIsBlinking(id),kZclOnOffClusterServerOnOffGet(GET_ENDPOINT(id)),kGetIndicatorNotDisturbModeFlg());
if (kLedIsBlinking(id) == false){ if (kLedIsBlinking(id) == false){
if ((kZclOnOffClusterServerOnOffGet(GET_ENDPOINT(id)) == EOOS_ON)&&(!kGetIndicatorNotDisturbModeFlg())){ if ((kZclOnOffClusterServerOnOffGet(GET_ENDPOINT(id)) == EOOS_ON)&&(!kGetIndicatorNotDisturbModeFlg())){
kLEDOnAction(id); kLEDOnAction(id);
...@@ -657,11 +722,6 @@ void kUserLedActionDoneCallback(unsigned char id) ...@@ -657,11 +722,6 @@ void kUserLedActionDoneCallback(unsigned char id)
iKonkeAfSelfPrint("##############kUserLedActionDoneCallback id(%d)nwk(%d)##################\r\n", id,kNwkGetCurrentStatus()); iKonkeAfSelfPrint("##############kUserLedActionDoneCallback id(%d)nwk(%d)##################\r\n", id,kNwkGetCurrentStatus());
kSetLedStatus(id); kSetLedStatus(id);
} }
void kUserPwmActionDoneCallback(unsigned char id, PwmGradientDirectionEnum opt)
{
iKonkeAfSelfPrint("####kUserPwmActionDoneCallback id(%d)opt(%d)##################\r\n", id,opt);
}
//网关场景控制下发后的属性延时上报处理,可以根据不同场景cluster修改 //网关场景控制下发后的属性延时上报处理,可以根据不同场景cluster修改
/* DESP: recall scene rand delay report Attribute set /* DESP: recall scene rand delay report Attribute set
* Auth: maozj.20191224. * Auth: maozj.20191224.
...@@ -749,6 +809,10 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, uint16_t clusterId, uint1 ...@@ -749,6 +809,10 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, uint16_t clusterId, uint1
//不直接上报,随机延时上报 //不直接上报,随机延时上报
return false; return false;
} }
else if(!zclReportInfo.reportEnable)
{
return false;
}
} }
...@@ -835,13 +899,85 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i ...@@ -835,13 +899,85 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
static void kLEDOffAction(LED_ID_ENUM led_id) static void kLEDOffAction(LED_ID_ENUM led_id)
{ {
iKonkeAfSelfPrint("LED_Off_Action LED_ID (%d).\r\n", led_id); iKonkeAfSelfPrint("LED_Off_Action LED_ID (%d).\r\n", led_id);
LED_OPT_OFF(led_id); kLedOptTrigger(led_id, 0, 0, 0, LED_OFF, LED_IGNORE);
if (kGetIndicatorNotDisturbModeFlg() == false){
iKonkeAfSelfPrint("is not NotDisturbMode.\r\n");
switch (led_id)
{
case LED1_ID:
{
kPwmDriverhandler(kPwmGetIndexByID(PWM1_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMinLevel * 65535) / 100) );
break;
}
case LED2_ID:
{
kPwmDriverhandler(kPwmGetIndexByID(PWM2_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMinLevel * 65535) / 100) );
break;
}
case LED3_ID:
{
kPwmDriverhandler(kPwmGetIndexByID(PWM3_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMinLevel * 65535) / 100));
break;
}
case LED4_ID:
{
kPwmDriverhandler(kPwmGetIndexByID(PWM4_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMinLevel * 65535) / 100));
break;
}
case LED_ALL_ID:
{
kPwmDriverhandler(kPwmGetIndexByID(PWM1_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMinLevel * 65535) / 100));
kPwmDriverhandler(kPwmGetIndexByID(PWM2_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMinLevel * 65535) / 100));
kPwmDriverhandler(kPwmGetIndexByID(PWM3_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMinLevel * 65535) / 100));
kPwmDriverhandler(kPwmGetIndexByID(PWM4_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMinLevel * 65535) / 100));
break;
}
default:
break;
}
}
} }
static void kLEDOnAction(LED_ID_ENUM led_id) static void kLEDOnAction(LED_ID_ENUM led_id)
{ {
iKonkeAfSelfPrint("LED_ON_Action LED_ID (%d).\r\n", led_id); iKonkeAfSelfPrint("LED_ON_Action LED_ID (%d).\r\n", led_id);
LED_OPT_ON(led_id); kLedOptTrigger(led_id, 0, 0, 0, LED_OFF, LED_IGNORE);
if (kGetIndicatorNotDisturbModeFlg() == false){
iKonkeAfSelfPrint("is not NotDisturbMode.\r\n");
switch (led_id)
{
case LED1_ID:
{
kPwmDriverhandler(kPwmGetIndexByID(PWM1_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMaxLevel * 65535) / 100) );
break;
}
case LED2_ID:
{
kPwmDriverhandler(kPwmGetIndexByID(PWM2_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMaxLevel * 65535) / 100) );
break;
}
case LED3_ID:
{
kPwmDriverhandler(kPwmGetIndexByID(PWM3_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMaxLevel * 65535) / 100) );
break;
}
case LED4_ID:
{
kPwmDriverhandler(kPwmGetIndexByID(PWM4_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMaxLevel * 65535) / 100) );
break;
}
case LED_ALL_ID:
{
kPwmDriverhandler(kPwmGetIndexByID(PWM1_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMaxLevel * 65535) / 100) );
kPwmDriverhandler(kPwmGetIndexByID(PWM2_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMaxLevel * 65535) / 100) );
kPwmDriverhandler(kPwmGetIndexByID(PWM3_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMaxLevel * 65535) / 100) );
kPwmDriverhandler(kPwmGetIndexByID(PWM4_ID), ELP_ANY, (uint16_t)(((uint32_t)g_u8NoDisturbModeMaxLevel * 65535) / 100) );
break;
}
default:
break;
}
}
} }
//芯片上电后延时操作事件,一般处理继电器状态恢复或者禁用SWD口作为普通IO,也用来根据gpio读取电平修改同一类型的不同型号 //芯片上电后延时操作事件,一般处理继电器状态恢复或者禁用SWD口作为普通IO,也用来根据gpio读取电平修改同一类型的不同型号
/* DESP: system setup delay callback handler, called once. /* DESP: system setup delay callback handler, called once.
...@@ -867,27 +1003,14 @@ s32 kkSystemSetUpEventHandler(void *arg ) ...@@ -867,27 +1003,14 @@ s32 kkSystemSetUpEventHandler(void *arg )
,relayStatusBuffer[i-1] == false? EZAO_OFF : EZAO_ON); ,relayStatusBuffer[i-1] == false? EZAO_OFF : EZAO_ON);
} }
//重写attribute
Update_Local_Attribute_Info();
#if UART_ENABLE
kInterPanMoudleInit(kUserInterPanMsgInComingPaser);
#endif
return -1; return -1;
} }
//退网5S快闪结束后的回调函数,一般用于面板、插座和窗帘面板退网完成后在全部关闭时复位
void kUserNetworkExitCompleteCallback(void)
{
iKonkeAfSelfPrint("##############kUserNetworkExitCompleteCallback(%d)##################\r\n");
bool bIsAllOffFlg = true;
for (uint8_t i = 1; i <= Support_Endpoint_Num; i++){
zcl_onOffAttr_t *pOnOff = zcl_onoffAttrGet(i);
if (pOnOff->onOff){
bIsAllOffFlg = false;
break;
}
}
if (bIsAllOffFlg == true){
SYSTEM_RESET();
}
}
#if Z30_DEVICE_AGING_ENABLE #if Z30_DEVICE_AGING_ENABLE
//老化的轮询回调函数,一般用于实现老化期间的LED闪烁或继电器翻转,也可以只LED闪烁 //老化的轮询回调函数,一般用于实现老化期间的LED闪烁或继电器翻转,也可以只LED闪烁
void kUserFactorTestPollCallback(FactoryTestStatusEnum status) void kUserFactorTestPollCallback(FactoryTestStatusEnum status)
...@@ -903,7 +1026,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status) ...@@ -903,7 +1026,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status)
break; break;
case FTS_AGING_15MIN: case FTS_AGING_15MIN:
break; break;
case FTS_AGING_8HOU_START: case FTS_AGING_4HOU_START:
//关闭所有的蓝色LED,有可能之前蓝灯闪烁了 //关闭所有的蓝色LED,有可能之前蓝灯闪烁了
LED_OPT_OFF(LED_ALL_ID); LED_OPT_OFF(LED_ALL_ID);
LED_OPT_OFF(LED_RADAR_ID); LED_OPT_OFF(LED_RADAR_ID);
...@@ -913,7 +1036,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status) ...@@ -913,7 +1036,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status)
} }
eRelayStatus = EZAO_ON; eRelayStatus = EZAO_ON;
break; break;
case FTS_AGING_8HOU: case FTS_AGING_4HOU:
//翻转继电器,LED也会同步 //翻转继电器,LED也会同步
eRelayStatus = eRelayStatus == EZAO_ON?EZAO_OFF:EZAO_ON; eRelayStatus = eRelayStatus == EZAO_ON?EZAO_OFF:EZAO_ON;
if (eRelayStatus == EZAO_ON){ if (eRelayStatus == EZAO_ON){
...@@ -1024,7 +1147,7 @@ static ev_timer_event_t *kRadarControlLedEvent = NULL; ...@@ -1024,7 +1147,7 @@ static ev_timer_event_t *kRadarControlLedEvent = NULL;
s32 kRadarCheckEventHandler(void *arg) s32 kRadarCheckEventHandler(void *arg)
{ {
if (kGetFactoryTestStatus() == FTS_AGING_8HOU \ if (kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
...@@ -1049,7 +1172,7 @@ s32 kRadarCheckEventHandler(void *arg) ...@@ -1049,7 +1172,7 @@ s32 kRadarCheckEventHandler(void *arg)
s32 kRadarLedEventHandler(void *arg) s32 kRadarLedEventHandler(void *arg)
{ {
if (kGetFactoryTestStatus() == FTS_AGING_8HOU \ if (kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
...@@ -1128,15 +1251,189 @@ uint8_t uart_send(void) ...@@ -1128,15 +1251,189 @@ uint8_t uart_send(void)
} }
void UartMsgProcessHandle(UMsgNodeSt *pMsgNode ) void UartMsgProcessHandle(UMsgNodeSt *pMsgNode )
{ {
uint16_t opcode;
uint16_t frameLenth = 0;
uint8_t *args_in;
uint8_t reply_control_field;
DataField_st send_buf;
if( NULL == pMsgNode ) { if( NULL == pMsgNode ) {
return ; return ;
} }
#if 1 // Just for debug #if 1 // Just for debug
iKonkeAfSelfPrint("\r\nUartMsgProcessHandle,MSG INCOMING[%d]:\r\n", pMsgNode->length); iKonkeAfSelfPrint("\r\n-- RTT MSG INCOMING[%d]:\r\n", pMsgNode->length);
iKonkeAfSelfPrintBuffer(pMsgNode->buffer, pMsgNode->length); iKonkeAfSelfPrintBuffer(pMsgNode->buffer, pMsgNode->length);
iKonkeAfSelfPrint("\r\n--------------------\r\n"); iKonkeAfSelfPrint("\r\n--------------------\r\n");
#endif #endif
// check SOF
if ((pMsgNode->buffer[0] != 0xAA) || (pMsgNode->buffer[1] != 0x55)) {
return ;
}
frameLenth = UINT16_HL(pMsgNode->buffer[2], pMsgNode->buffer[3]);
// check for parsable packets
if( pMsgNode->length < 10 /* Minimum Packet Length */ ) {
iKonkeAfSelfPrint("Err: Unparsable Packets!!\r\n");
return ;
}
opcode = ((uint16_t)pMsgNode->buffer[9] << 8) | (uint16_t)(pMsgNode->buffer[10]);
args_in = &pMsgNode->buffer[8];
send_buf.seq = UINT16_HL(pMsgNode->buffer[5],pMsgNode->buffer[6] );
send_buf.u8ChannelID = args_in[0];
send_buf.u16Opcode = opcode;
iKonkeAfSelfPrint("opcode(%d)\r\n", opcode);
reply_control_field = Z_TO_H_NO_ACK;
switch(opcode){
case UART_MSG_READ_DEVICE_SNAP_OPCODE:
case UART_MSG_JOIN_NWK_REQUEST_OPCODE:
case UART_MSG_LEAVE_NWK_REQUEST_OPCODE:
case UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE:
case UART_MSG_NWK_STATUS_NOTIFY_OPCODE:
case UART_MSG_READ_ATTRIBUTE_REQUEST_OPCODE:
case UART_MSG_WRITE_ATTRIBUTE_REQUEST_OPCODE:
case UART_MSG_WRITE_CMEI_CODE_OPCODE:
case UART_MSG_READ_CMEI_CODE_OPCODE:
case UART_MSG_WRITE_ISN_CODE_OPCODE:
case UART_MSG_READ_ISN_CODE_OPCODE:
case UART_MSG_ZCL_COMMAND_REQUEST_OPCODE:
case UART_MSG_BIND_REQUEST_OPCODE:
case UART_MSG_WRITE_INSTALL_CODE_OPCODE:
case UART_MSG_READ_INSTALL_CODE_OPCODE:
case UART_MSG_WRITE_MAC_CODE_OPCODE:
case UART_MSG_READ_MAC_CODE_OPCODE:
case UART_MSG_WRITE_MOUDLE_ID_OPCODE:
case UART_MSG_READ_MOUDLE_ID_OPCODE:
case UART_MSG_READ_DEV_RSSI_OPCODE:
case UART_MSG_WRITE_AGING_TIME_OPCODE:
case UART_MSG_READ_AGING_TIME_OPCODE:
case UART_MSG_WRITE_INTERPAN_PARA_OPCODE:
case UART_MSG_READ_INTERPAN_PARA_OPCODE:
reply_control_field = Z_TO_H_NO_ACK;
kCmdGeneralMsgPaser(pMsgNode, ECOM_PORT_UART, &send_buf);
break;
case UART_MSG_QUERY_INFO_OPCODE:
case UART_MSG_QUERY_DEVICE_VERSION_OPCODE:
case UART_MSG_QUERY_DEVICE_INFO_OPCODE:
case UART_MSG_CONFIG_DEVICE_SLEEP_OPCODE:
case UART_MSG_EXIT_FACTORY_TEST_OPCODE:
case UART_MSG_QUERY_SWITCH_ONOFF_OPCODE:
case UART_MSG_QUERY_FACTORY_INFO_OPCODE:
case UART_MSG_ENTER_FACTORY_TEST_OPCODE:
case UART_MSG_ONOFF_SWITCH_OPCODE:
kkFactoryMsgInComingPaser(pMsgNode, ECOM_PORT_UART, &send_buf);
break;
default:
send_buf.u8ARG[0] = ERR_NOT_EXIST;
send_buf.u8ArgLen = 1;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
kCmdMsgDataSentByPort(reply_control_field, send_buf, false, ECOM_PORT_UART);
}
/* DESP: rtt command message incoming and process interface.
* Auth: kkk.20210222.
* */
void kUserInterPanMsgInComingPaser(UMsgNodeSt *pMsgNode)
{
uint16_t opcode;
uint16_t frameLenth = 0;
uint16_t crc16DataIn = 0;
uint16_t crc16Value = 0;
uint8_t *args_in;
uint8_t reply_control_field;
DataField_st send_buf;
if( NULL == pMsgNode ) {
return ;
}
#if 0 // Just for debug
iKonkeAfSelfPrint("\r\n-- InterPan MSG INCOMING[%d]:\r\n", pMsgNode->length);
iKonkeAfSelfPrintBuffer(pMsgNode->buffer, pMsgNode->length);
iKonkeAfSelfPrint("\r\n--------------------\r\n");
#endif
// check SOF
if ((pMsgNode->buffer[0] != 0xAA) || (pMsgNode->buffer[1] != 0x55)) {
return ;
}
frameLenth = UINT16_HL(pMsgNode->buffer[2], pMsgNode->buffer[3]);
// check CRC16
crc16Value = kCmdGetMsgCrc16Value(&pMsgNode->buffer[4], frameLenth);
crc16DataIn = UINT16_HL(pMsgNode->buffer[pMsgNode->length - 2], pMsgNode->buffer[pMsgNode->length - 1]);
if (crc16Value != crc16DataIn) {
iKonkeAfSelfPrint("Err: CRC(%d)(%d)\r\n", crc16Value, crc16DataIn);
return ;
}
// check for parsable packets
if( pMsgNode->length < 10 /* Minimum Packet Length */ ) {
iKonkeAfSelfPrint("Err: Unparsable Packets!!\r\n");
return ;
}
opcode = ((uint16_t)pMsgNode->buffer[9] << 8) | (uint16_t)(pMsgNode->buffer[10]);
args_in = &pMsgNode->buffer[8];
send_buf.seq = UINT16_HL(pMsgNode->buffer[5],pMsgNode->buffer[6] );
send_buf.u8ChannelID = args_in[0];
send_buf.u16Opcode = opcode;
iKonkeAfSelfPrint("opcode(%d)\r\n", opcode);
switch(opcode){
case UART_MSG_READ_DEVICE_SNAP_OPCODE:
case UART_MSG_JOIN_NWK_REQUEST_OPCODE:
case UART_MSG_LEAVE_NWK_REQUEST_OPCODE:
case UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE:
case UART_MSG_NWK_STATUS_NOTIFY_OPCODE:
case UART_MSG_READ_ATTRIBUTE_REQUEST_OPCODE:
case UART_MSG_WRITE_ATTRIBUTE_REQUEST_OPCODE:
case UART_MSG_WRITE_CMEI_CODE_OPCODE:
case UART_MSG_READ_CMEI_CODE_OPCODE:
case UART_MSG_WRITE_ISN_CODE_OPCODE:
case UART_MSG_READ_ISN_CODE_OPCODE:
case UART_MSG_ZCL_COMMAND_REQUEST_OPCODE:
case UART_MSG_BIND_REQUEST_OPCODE:
case UART_MSG_WRITE_INSTALL_CODE_OPCODE:
case UART_MSG_READ_INSTALL_CODE_OPCODE:
case UART_MSG_WRITE_MAC_CODE_OPCODE:
case UART_MSG_READ_MAC_CODE_OPCODE:
case UART_MSG_WRITE_MOUDLE_ID_OPCODE:
case UART_MSG_READ_MOUDLE_ID_OPCODE:
case UART_MSG_READ_DEV_RSSI_OPCODE:
case UART_MSG_WRITE_AGING_TIME_OPCODE:
case UART_MSG_READ_AGING_TIME_OPCODE:
case UART_MSG_WRITE_INTERPAN_PARA_OPCODE:
case UART_MSG_READ_INTERPAN_PARA_OPCODE:
kCmdGeneralMsgPaser(pMsgNode, ECOM_PORT_INTERPAN, &send_buf);
break;
case UART_MSG_QUERY_INFO_OPCODE:
case UART_MSG_QUERY_DEVICE_VERSION_OPCODE:
case UART_MSG_QUERY_DEVICE_INFO_OPCODE:
case UART_MSG_CONFIG_DEVICE_SLEEP_OPCODE:
case UART_MSG_EXIT_FACTORY_TEST_OPCODE:
case UART_MSG_QUERY_FACTORY_INFO_OPCODE:
case UART_MSG_QUERY_SWITCH_ONOFF_OPCODE:
case UART_MSG_ENTER_FACTORY_TEST_OPCODE:
case UART_MSG_ONOFF_SWITCH_OPCODE:
kkFactoryMsgInComingPaser(pMsgNode, ECOM_PORT_INTERPAN, &send_buf);
break;
default:
send_buf.u8ARG[0] = ERR_NOT_EXIST;
send_buf.u8ArgLen = 1;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
reply_control_field = Z_TO_H_NO_ACK;
kCmdMsgDataSentByPort(reply_control_field, send_buf, false, ECOM_PORT_INTERPAN);
} }
uint16_t check_sum( uint8_t* msg, uint8_t len) uint16_t check_sum( uint8_t* msg, uint8_t len)
{ {
...@@ -1169,10 +1466,10 @@ bool MsgCRC16(uint8_t *pdat, int length ) ...@@ -1169,10 +1466,10 @@ bool MsgCRC16(uint8_t *pdat, int length )
if((NULL == pdat) || (length < 9)){ if((NULL == pdat) || (length < 9)){
return false; return false;
} }
crc_data = check_sum(&pdat[3], pdat[2]); crc_data = check_sum(&pdat[4], pdat[3]);
CRC_H = (crc_data>>8) & 0xff; CRC_H = (crc_data>>8) & 0xff;
CRC_L = crc_data & 0xff; CRC_L = crc_data & 0xff;
iKonkeAfSelfPrint("\r\nMsgCRC16,%d,%d\r\n",CRC_H,CRC_L); //iKonkeAfSelfPrint("\r\nMsgCRC16,%d,%d\r\n",CRC_H,CRC_L);
if((pdat[length - 1] == CRC_L) && (pdat[length - 2]== CRC_H)) if((pdat[length - 1] == CRC_L) && (pdat[length - 2]== CRC_H))
{ {
return true; return true;
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
#if ZBHCI_EN #if ZBHCI_EN
#include "zbhci.h" #include "zbhci.h"
#endif #endif
#include "ikk-debug.h"
#if AF_TEST_ENABLE #if AF_TEST_ENABLE
/********************************************************************** /**********************************************************************
* LOCAL CONSTANTS * LOCAL CONSTANTS
...@@ -126,17 +126,40 @@ static void afTest_testClearReqPrc(apsdeDataInd_t *pApsdeInd) ...@@ -126,17 +126,40 @@ static void afTest_testClearReqPrc(apsdeDataInd_t *pApsdeInd)
dstEp.profileId = pApsdeInd->indInfo.profile_id; dstEp.profileId = pApsdeInd->indInfo.profile_id;
dstEp.dstAddrMode = APS_SHORT_DSTADDR_WITHEP; dstEp.dstAddrMode = APS_SHORT_DSTADDR_WITHEP;
dstEp.dstAddr.shortAddr = pApsdeInd->indInfo.src_short_addr; dstEp.dstAddr.shortAddr = pApsdeInd->indInfo.src_short_addr;
u8 st = SUCCESS; u8 st = SUCCESS;
u8 apsCnt = 0; u8 apsCnt = 0;
af_dataSend(pApsdeInd->indInfo.dst_ep, &dstEp, ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_RSP, 1, &st, &apsCnt); 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) void afTest_rx_handler(void *arg)
{ {
apsdeDataInd_t *pApsdeInd = (apsdeDataInd_t *)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){ switch(pApsdeInd->indInfo.cluster_id){
case ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_REQ: case ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_REQ:
g_afTest_rcvReqCnt = 0; g_afTest_rcvReqCnt = 0;
...@@ -147,8 +170,12 @@ void afTest_rx_handler(void *arg) ...@@ -147,8 +170,12 @@ void afTest_rx_handler(void *arg)
afTest_testReqPrc(pApsdeInd); afTest_testReqPrc(pApsdeInd);
break; break;
case ZCL_CLUSTER_TELINK_SDK_TEST_RSP: case ZCL_CLUSTER_TELINK_SDK_TEST_RSP:
break; break;
// case ZCL_CLUSTER_PRIVATE_FCC0:
// {
// afTest_dataSendDemo(pApsdeInd);
// break;
// }
default: default:
break; break;
} }
...@@ -159,8 +186,8 @@ void afTest_rx_handler(void *arg) ...@@ -159,8 +186,8 @@ void afTest_rx_handler(void *arg)
void afTest_dataSendConfirm(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 */ #endif /* AF_TEST_ENABLE */
......
...@@ -64,7 +64,7 @@ void pwmSetDuty(u8 ch, u16 dutycycle) ...@@ -64,7 +64,7 @@ void pwmSetDuty(u8 ch, u16 dutycycle)
uint8_t kPwmGetIndexByID(uint8_t pwm_id ) uint8_t kPwmGetIndexByID(uint8_t pwm_id )
{ {
for(int index = 0; index < g_u8PwmChannelNum; ++index ) { 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_UNUSED_ID ) {
if( g_stPwmConfList[index].u8PwmId == pwm_id ) { if( g_stPwmConfList[index].u8PwmId == pwm_id ) {
return index; return index;
...@@ -86,7 +86,7 @@ void kPwmDriverhandler(uint8_t pwm_index, PwmGradientDirectionEnum st, uint16_t ...@@ -86,7 +86,7 @@ void kPwmDriverhandler(uint8_t pwm_index, PwmGradientDirectionEnum st, uint16_t
iKonkeAfSelfPrint("####kPwmDriverhandler index is too large\r\n"); iKonkeAfSelfPrint("####kPwmDriverhandler index is too large\r\n");
return; 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) { switch(st) {
case (ELP_MIN): case (ELP_MIN):
...@@ -170,7 +170,7 @@ void kPwmOptTrigger(uint8_t id, uint32_t start_value, uint32_t end_value, uint32 ...@@ -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].startDutyCycle = start_value;
g_stPwmCtrller[pwm_index].endDutyCycle = end_value; g_stPwmCtrller[pwm_index].endDutyCycle = end_value;
g_stPwmCtrller[pwm_index].startDutyCycleValue = start_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); iKonkeAfSelfPrint("action (%d) , interval[%d]\r\n",g_stPwmCtrller[pwm_index].actionCounter,g_stPwmCtrller[pwm_index].intervalDutyCycle);
pwmSetDuty(g_stPwmConfList[pwm_index].gpioInfo.pwmChannel,start_value); pwmSetDuty(g_stPwmConfList[pwm_index].gpioInfo.pwmChannel,start_value);
...@@ -267,7 +267,7 @@ static s32 kPwmGradientChangeEventHandler(void *data) ...@@ -267,7 +267,7 @@ static s32 kPwmGradientChangeEventHandler(void *data)
g_stPwmCtrller[i].startDutyCycleValue += g_stPwmCtrller[i].intervalDutyCycle; g_stPwmCtrller[i].startDutyCycleValue += g_stPwmCtrller[i].intervalDutyCycle;
pwmSetDuty(g_stPwmCtrller[i].gpioInfo.pwmChannel,g_stPwmCtrller[i].startDutyCycleValue); pwmSetDuty(g_stPwmCtrller[i].gpioInfo.pwmChannel,g_stPwmCtrller[i].startDutyCycleValue);
} }
iKonkeAfSelfPrint("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ص //PWM_IDص
if (g_stPwmCtrller[i].actionCounter == 0){ if (g_stPwmCtrller[i].actionCounter == 0){
//may be end duty cycle not equal, restore end duty cycle //may be end duty cycle not equal, restore end duty cycle
...@@ -291,7 +291,29 @@ static s32 kPwmGradientChangeEventHandler(void *data) ...@@ -291,7 +291,29 @@ static s32 kPwmGradientChangeEventHandler(void *data)
} }
return 0; 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) void PWM_Test(uint8_t data)
{ {
......
...@@ -89,7 +89,7 @@ kk_err_t kPwmModuleInit(PwmConfSt pwmlist[], unsigned char pwm_number, pPwmActio ...@@ -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 ); 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); void PWM_Test(uint8_t data);
......
...@@ -265,8 +265,8 @@ static void dma_uartRcvHandler(void) ...@@ -265,8 +265,8 @@ static void dma_uartRcvHandler(void)
uint8_t head_index = 0; uint8_t head_index = 0;
uint32_t len = *dma_uartRxBuf; uint32_t len = *dma_uartRxBuf;
// iKonkeAfSelfPrint("#############dma_uartRcvHandler,recv data len = %d \r\n",len); iKonkeAfSelfPrint("#############dma_uartRcvHandler,recv data len = %d \r\n",len);
// iKonkeAfSelfPrintBuffer(dma_uartRxBuf+4,len); iKonkeAfSelfPrintBuffer(dma_uartRxBuf+4,len);
memset(&MsgNode,0,sizeof(UMsgNodeSt)); memset(&MsgNode,0,sizeof(UMsgNodeSt));
for(uint8_t i = 0;i< len;i++) for(uint8_t i = 0;i< len;i++)
{ {
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include "drv_uart.h" #include "drv_uart.h"
// MSG BUFFER OF NODE MAXLENGTH // MSG BUFFER OF NODE MAXLENGTH
#define UMSG_NODE_SIZE 32 #define UMSG_NODE_SIZE 96
// Maximum number of message nodes in the queue // Maximum number of message nodes in the queue
#define UMSG_NODE_MAX 4 #define UMSG_NODE_MAX 4
// Maximum Cache Length of Message Receiver // Maximum Cache Length of Message Receiver
...@@ -17,7 +17,7 @@ typedef enum { EQU_RECV = 0, EQU_SENT }QueueEm; ...@@ -17,7 +17,7 @@ typedef enum { EQU_RECV = 0, EQU_SENT }QueueEm;
// uart recv/send buffer node // uart recv/send buffer node
typedef struct tag_uart_message_node { typedef struct tag_uart_message_node {
unsigned char buffer[UMSG_NODE_SIZE]; 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! // just for sending, Used to match instruction responses. For example, according to the instruction opcode!
unsigned char matcher[4]; unsigned char matcher[4];
unsigned char matcher_offset; unsigned char matcher_offset;
...@@ -26,6 +26,8 @@ typedef struct tag_uart_message_node { ...@@ -26,6 +26,8 @@ typedef struct tag_uart_message_node {
bool bRspNeedtoDispatch; bool bRspNeedtoDispatch;
// Attempt to send number of times, decreases to 0 when invalid!!! // Attempt to send number of times, decreases to 0 when invalid!!!
unsigned char sent_try; unsigned char sent_try;
unsigned char *ack;
unsigned char ack_length;
}UMsgNodeSt; }UMsgNodeSt;
typedef struct tag_uart_message_queue { typedef struct tag_uart_message_queue {
......
...@@ -19,7 +19,7 @@ static uint8_t g_tmp_buffer[64] = { 0 }; ...@@ -19,7 +19,7 @@ static uint8_t g_tmp_buffer[64] = { 0 };
pOnOffClusterOnOffStatusCallback g_pfOnOffStatusCallback = NULL; pOnOffClusterOnOffStatusCallback g_pfOnOffStatusCallback = NULL;
//static pClusterAttributeChangeCallback pOnOffClusterCallback = NULL; static pClusterAttributeChangeCallback pOnOffClusterCallback = NULL;
//static pClusterAttributeChangeCallback pLevelClusterCallback = NULL; //static pClusterAttributeChangeCallback pLevelClusterCallback = NULL;
//static pClusterAttributeChangeCallback pColorClusterCallback = NULL; //static pClusterAttributeChangeCallback pColorClusterCallback = NULL;
...@@ -33,27 +33,12 @@ typedef struct { ...@@ -33,27 +33,12 @@ typedef struct {
static ZclClusterReportTableSt g_stZclClusterReportPermitTable; 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) void kZclOnOffClusterServerOnOffSet(uint8_t endpoint,bool onoff)
{ {
zcl_onOffAttr_t *pOnOff = zcl_onoffAttrGet(endpoint); 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; //
// pOnOff->onOff = onoff;
zcl_onOffAttr_save(); zcl_onOffAttr_save();
} }
/* DESP: on-off cluster control operate. /* DESP: on-off cluster control operate.
...@@ -69,7 +54,6 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl ...@@ -69,7 +54,6 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl
setValue = 1; setValue = 1;
else else
setValue = 0; setValue = 0;
kZclOnOffClusterServerOnOffSet(endpoint,setValue); kZclOnOffClusterServerOnOffSet(endpoint,setValue);
if( kNwkGetCurrentStatus() == ENS_ONLINE ) { if( kNwkGetCurrentStatus() == ENS_ONLINE ) {
// check binding table // check binding table
...@@ -81,7 +65,12 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl ...@@ -81,7 +65,12 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl
return KET_OK; 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) 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 ...@@ -90,15 +79,41 @@ static status_t WriteServerAttribute(u8 endpoint, u16 clusterId,uint8_t attribut
attr_data.attrID = attributeID; attr_data.attrID = attributeID;
attr_data.dataType = data_type; attr_data.dataType = data_type;
u16 dataLen = zcl_getAttrSize(data_type, dataPtr); 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("##WriteServerAttribute cluster =%d,attr = %d,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]); if(dataLen == 1)
// iKonkeAfSelfPrintBuffer(attr_data.attrData,attr_data.attrData[0]+1); iKonkeAfSelfPrint("##data=%d:\r\n",*dataPtr);
return zcl_attrWrite(endpoint,clusterId,&attr_data,false); 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) static status_t Rewrite_Modeid(uint8_t *modeid,uint8_t software,uint8_t hardware)
{ {
uint8_t Modeid_Temp[] = "3AFE101003008611" ; uint8_t Modeid_Temp[] = "3AFE101003008611" ;
...@@ -140,6 +155,10 @@ static status_t Rewrite_Modeid(uint8_t *modeid,uint8_t software,uint8_t hardwar ...@@ -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] = 16;
g_tmp_buffer[0+ 2+16] = '0'; 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); 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) if(status != ZCL_STA_SUCCESS)
{ {
...@@ -188,73 +207,54 @@ void Update_Local_Attribute_Info(void) ...@@ -188,73 +207,54 @@ void Update_Local_Attribute_Info(void)
typedef struct{
zcl_basicAttr_t basicAttrs_temp;
zcl_identifyAttr_t identifyAttrs_temp;
// zcl_onOffAttr_t onOffAttrs_temp;
//static typedef struct{ zcl_levelAttr_t levelAttrs_temp;
// zcl_basicAttr_t basicAttrs_temp; }AttrListST;
// zcl_identifyAttr_t identifyAttrs_temp static AttrListST Attr_List_Value[MAX_ATTR_CHANGE_SUPPORT_NUMS] ;
// zcl_onOffAttr_t onOffAttrs_temp; void ikkAttributeChangeCallbackRegister(AttributeChangeConfSt *ConfSt,uint8_t num)
// zcl_onOffAttr_t levelAttrs_temp; {
//}AttrListST; for(uint8_t i=0;i<MAX_ATTR_CHANGE_SUPPORT_NUMS;i++)
//static AttrListST Attr_List_Value[MAX_ATTR_CHANGE_SUPPORT_NUMS] ; {
//void ClusterAttributeChangeCallbackRegister(AttributeChangeConfSt *ConfSt,unint8_t num) if(i > MAX_ATTR_CHANGE_SUPPORT_NUMS)
//{ {
// for(uint8_t i=0;i<num;i++) iKonkeAfSelfPrint("attribute change callback totals number beyond!!\r\n");
// { break;
// if(i > MAX_ATTR_CHANGE_SUPPORT_NUMS) }
// { switch(ConfSt->cluster)
// iKonkeAfSelfPrint("attribute change callback totals number beyond!!\r\n"); {
// break; case ZCL_CLUSTER_GEN_ON_OFF:
// } {
// switch(ConfSt[i]->cluster) pOnOffClusterCallback = ConfSt->change_callback;
// { }
// case ZCL_CLUSTER_GEN_ON_OFF: break;
// {
// if(ConfSt[i]->attribute == ZCL_ATTRID_ONOFF)
// {
// pOnOffClusterCallback = ConfSt[i]->change_callback;
// }
// }
// break;
// case ZCL_CLUSTER_GEN_LEVEL_CONTROL: // case ZCL_CLUSTER_GEN_LEVEL_CONTROL:
// { // {
// if(ConfSt[i]->attribute == ZCL_ATTRID_LEVEL_CURRENT_LEVEL) // pLevelClusterCallback = ConfSt->change_callback;
// pLevelClusterCallback = ConfSt[i]->change_callback;
// } // }
// break; // break;
// default: default:
// break; 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));
//}
void AttributeValueCheck(void) void AttributeValueCheckCallback(void)
{ {
// if((Attr_List_Value.onOffAttrs_temp.onOff !=g_zcl_onOffAttrs.onOff)&&(pOnOffClusterCallback)) for(uint8_t i = 0;i<Support_Endpoint_Num;i++)
// { {
// pOnOffClusterCallback(1,ZCL_CLUSTER_GEN_ON_OFF,ZCL_ATTRID_ONOFF,g_zcl_onOffAttrs.onOff,1,g_zcl_onOffAttrs.onOff); 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) ...@@ -379,7 +379,6 @@ void ON_OFF_Cmd_Handler(uint8_t endpoint,bool onoff)
OnOffStatusEnum on_off_ctr = (OnOffStatusEnum)onoff; OnOffStatusEnum on_off_ctr = (OnOffStatusEnum)onoff;
kZclClusterSetPermitReportInfo(endpoint,ZCL_CLUSTER_GEN_ON_OFF,true,false); kZclClusterSetPermitReportInfo(endpoint,ZCL_CLUSTER_GEN_ON_OFF,true,false);
kZclOnOffClusterServerOnOffControl(endpoint, on_off_ctr); kZclOnOffClusterServerOnOffControl(endpoint, on_off_ctr);
g_pfOnOffStatusCallback(endpoint,on_off_ctr);
} }
/* DESP: Modified attribute reporting interface, reference from SDK callback[emberAfReportingAttributeChangeCallback]. /* DESP: Modified attribute reporting interface, reference from SDK callback[emberAfReportingAttributeChangeCallback].
* Auth: dingmz_frc.20190701. * Auth: dingmz_frc.20190701.
......
...@@ -28,11 +28,10 @@ typedef struct tag_zcl_report_table{ ...@@ -28,11 +28,10 @@ typedef struct tag_zcl_report_table{
}ZclReportTableSt; }ZclReportTableSt;
#define MAX_ATTR_CHANGE_SUPPORT_NUMS 8 #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 { typedef struct {
uint16_t cluster; uint16_t cluster;
uint16_t attribute;
pClusterAttributeChangeCallback change_callback; pClusterAttributeChangeCallback change_callback;
}AttributeChangeConfSt; }AttributeChangeConfSt;
...@@ -41,20 +40,25 @@ typedef void (*pOnOffClusterOnOffStatusCallback)(uint8_t endpoint, OnOffStatusEn ...@@ -41,20 +40,25 @@ typedef void (*pOnOffClusterOnOffStatusCallback)(uint8_t endpoint, OnOffStatusEn
void kZclOnOffClusterServerOnOffSet(uint8_t endpoint,bool onoff); void kZclOnOffClusterServerOnOffSet(uint8_t endpoint,bool onoff);
extern status_t zcl_attrWrite(u8 endpoint, u16 clusterId, zclWriteRec_t *pWriteRec, bool enable); 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); void Update_Local_Attribute_Info(void);
bool kIsKonkeRemoteGateway(void); bool kIsKonkeRemoteGateway(void);
kk_err_t kZclOnOffClusterServerInit(pOnOffClusterOnOffStatusCallback pOnOffStatusCallback ); kk_err_t kZclOnOffClusterServerInit(pOnOffClusterOnOffStatusCallback pOnOffStatusCallback );
void ikkAttributeChangeCallbackRegister(AttributeChangeConfSt *ConfSt,uint8_t num);
void ON_OFF_Cmd_Handler(uint8_t endpoint,uint8_t cmd); void ON_OFF_Cmd_Handler(uint8_t endpoint,uint8_t cmd);
bool kZclOnOffClusterServerOnOffGet(uint8_t endpoint); bool kZclOnOffClusterServerOnOffGet(uint8_t endpoint);
kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrlopt ); 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 ); bool kkClusterGetReportingPeriod(uint8_t endpoint, uint16_t cluster_id, uint16_t attribute_id,uint16_t *min_interval, uint16_t *max_interval );
void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId, uint16_t attributeId ); void kOptTunnelReportingPlagiarizeOriginal(uint8_t endpoint, uint16_t clusterId, uint16_t attributeId );
void kZclClusterPermitReportTableInit(BindObjSt clusterBindList[], uint8_t size); void kZclClusterPermitReportTableInit(BindObjSt clusterBindList[], uint8_t size);
......
#include "ikk-debug.h" #include "ikk-debug.h"
#include "ikk-command.h" #include "ikk-command.h"
#include "ikk-common-utils.h"
#include "ikk-token.h"
#include "ikk-network.h"
#include "ikk-cluster.h"
#include "ikk-factory-test.h"
#include "ikk-interpan.h"
//#define OPCODE_REMAP_TABLE_SIZE 20
static uint16_t opcodeReampTable[][2] =
{
//FCC0, AA55
{0xE0, 0x0001}, //write install code,
{0xE1, 0x0003}, //write cmei
{0xE2, 0x0005}, //write isn
{0xE3, 0x0007}, //write mac
{0xE6, 0x0002},
{0xE7, 0x0004},
{0xE8, 0x0006},
{0xE9, 0x0008},
{0xEA, 0x0009},
{0xEB, 0x000A},
//{0xF0, 0xED14},//????
//{0xF1, 0xED04},//????
//{0xF2, 0xED05},//??????
{0xF3, 0x000C}, //??????
{0xF4, 0x000D}, //??????
{0xF5, 0x000E}, //??interPan??
{0xF6, 0x000F}, //??interPan??
{0xF7, 0x0010}, //??????
};
uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len)
{
uint16_t crc = 0xFFFF;
uint16_t i, j = 0;
for (i = 0; i < len; i++)
{
for (j = 0; j < 8; j++)
{
//????a?? ADD BY YWQ
uint8_t c15 = (uint8_t)((crc >> 15 & 1) == 1);
uint8_t bit = (uint8_t)((msg[i] >> (7 - j) & 1) == 1);
crc <<= 1;
if (c15 ^ bit)
{
crc ^= 0x1021;
}
}
}
return crc;
}
/* DESP: remap opcode, arg direction 0: FCC0->AA55 1:AA55->FCC0
* Auth:
* */
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) {
return opcodeReampTable[i][1];
}
}
return 0xFFFF;
}
kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut)
{
//UMsgNodeSt uMsgNode = {0};
uint16_t length = 0;
uint8_t control_field = 0;
DataField_st data;
DataField_st send_buf;
uint8_t reply_control_field = 0;
if( NULL == pMsgNode ) {
return KET_ERR_INVALID_PARAM;
}
#if 1 // Just for debug
iKonkeAfSelfPrint("\r\n-- MSG INCOMING[%d]:\r\n", pMsgNode->length);
iKonkeAfSelfPrintBuffer(pMsgNode->buffer, pMsgNode->length);
iKonkeAfSelfPrint("\r\n--------------------\r\n");
#endif
// check for parsable packets
if( pMsgNode->length < 5 /* Minimum Packet Length */ ) {
iKonkeAfSelfPrint("Err: Unparsable Packets!!\r\n");
return KET_ERR_INVALID_PARAM;
}
//length(1) pid(4) ch(1) opcode(1) arg
if (port == ECOM_PORT_FCC0) {
length = (uint16_t)pMsgNode->length;
//control_field = pMsgNode->buffer[4];
data.seq = 0x00;
data.u8Datalen = pMsgNode->buffer[0];
data.u8ArgLen = data.u8Datalen - 6; // fcc0 - id (4) - ch(1) - opcode(1)
data.u8ChannelID = pMsgNode->buffer[5];
data.u16Opcode = kCmdOpcodeRemap((uint16_t)(pMsgNode->buffer[6]), 0);
if(data.u16Opcode == 0xFFFF) {
return KET_ERR_INVALID_PARAM;
}
memcpy(data.u8ARG,&pMsgNode->buffer[7], data.u8ArgLen); //6 = pid(4) + ch(1) + opcode(1)
send_buf.seq = data.seq;
send_buf.u8ChannelID = data.u8ChannelID;
send_buf.u16Opcode = data.u16Opcode;
} else {
length = ((uint16_t)pMsgNode->buffer[2] << 8) | (uint16_t)(pMsgNode->buffer[3]);
control_field = pMsgNode->buffer[4];
data.seq = ((uint16_t)pMsgNode->buffer[5] << 8) | (uint16_t)(pMsgNode->buffer[6]);
data.u8Datalen = pMsgNode->buffer[7];
data.u8ArgLen = data.u8Datalen - 3; // aa55 - ch(1) - opcode(2)
data.u8ChannelID = pMsgNode->buffer[8];
data.u16Opcode = ((uint16_t)pMsgNode->buffer[9] << 8) | (uint16_t)(pMsgNode->buffer[10]);
memcpy(data.u8ARG,&pMsgNode->buffer[11],data.u8Datalen - 3);
send_buf.seq = data.seq;
send_buf.u8ChannelID = data.u8ChannelID;
send_buf.u16Opcode = data.u16Opcode;
}
send_buf.u8Datalen = 0;
iKonkeAfSelfPrint("opcode = %x%x\r\n",send_buf.u16Opcode>>8,(u8)send_buf.u16Opcode);
iKonkeAfSelfPrint("channel = %x\r\n",data.u8ChannelID );
switch(data.u16Opcode) {
case (UART_MSG_QUERY_INFO_OPCODE):
{
reply_control_field = Z_TO_H_NO_ACK;
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ArgLen = 1;
break;
}
case (UART_MSG_WRITE_INSTALL_CODE_OPCODE): // write install code
{
uint8_t buffer[16]= {0};
//check install code length 20200725
uint8_t length = data.u8ARG[0];
if (length != 16) {
send_buf.u8ARG[0] = ERR_FORMAT;
send_buf.u8ARG[1] = data.u8ARG[0];
memcpy(&send_buf.u8ARG[2], &data.u8ARG[1], length);
//send_buf.u8Datalen = data.u8ARG[0] + 5;
send_buf.u8ArgLen = length + 1 + 1;
break;
}
memcpy(buffer, &data.u8ARG[1], 16);
INSTALL_CODE_TOKEN_SET(buffer,16);
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ARG[1] = data.u8ARG[0];
memcpy(&send_buf.u8ARG[2], &data.u8ARG[1], length);
send_buf.u8ArgLen = length + 1 + 1;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_READ_INSTALL_CODE_OPCODE): //read install code
{
uint8_t install_code_len = 0;
send_buf.u8ARG[0] = ERR_OK;
install_code_len = 16;
memcpy(&send_buf.u8ARG[2], INSTALL_CODE_TOKEN_GET(), install_code_len);
send_buf.u8ARG[1] = install_code_len;
send_buf.u8ArgLen = install_code_len + 2; // err(1) + codelen(1)
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_WRITE_CMEI_CODE_OPCODE): // write cmei
{
uint8_t buffer[33];
uint8_t length = data.u8ARG[0];
memset(buffer, 0, 33);
if(length > 32) {
send_buf.u8ARG[0] = ERR_NOT_EXPECTED;
//send_buf.u8Datalen = 1 + 1 + 3;
}else{
send_buf.u8ARG[0] = ERR_OK;
memcpy(buffer, &data.u8ARG[1], length);
CMEI_TOKEN_SET(buffer,length);
}
memcpy(&send_buf.u8ARG[1], &data.u8ARG[0], data.u8ARG[0] + 1);
send_buf.u8ArgLen = data.u8ARG[0] + 1 + 1;
//send_buf.u8Datalen = data.u8ARG[0] + 4;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_READ_CMEI_CODE_OPCODE): //read cmei
{
uint8_t buffer[33];
uint8_t length = 0;
memset(buffer, 0, 33);
uint8_t *data = CMEI_TOKEN_GET();
iKonkeAfSelfPrint("len %x\r\n",data[0]);
iKonkeAfSelfPrintBuffer(data+1,32);
length = data[0];
memcpy(buffer,data,length +1);
if(length > 32) {
send_buf.u8ARG[0] = ERR_NOT_EXPECTED;
send_buf.u8ARG[1] = 0x00;
send_buf.u8ArgLen = 2;
} else {
send_buf.u8ARG[0] = ERR_OK;
memcpy(&send_buf.u8ARG[1], buffer, length + 1);
send_buf.u8ArgLen = length + 1 + 1;
}
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_WRITE_ISN_CODE_OPCODE): // write isn
{
uint8_t buffer[33];
uint8_t length = data.u8ARG[0];
memset(buffer, 0, 33);
if(length > 32) {
send_buf.u8ARG[0] = ERR_NOT_EXPECTED;
//send_buf.u8Datalen = 1 + 1 + 3;
}else{
send_buf.u8ARG[0] = ERR_OK;
memcpy(buffer, &data.u8ARG[1], length);
ISN_TOKEN_SET(buffer,length);
}
memcpy(&send_buf.u8ARG[1], &data.u8ARG[0], data.u8ARG[0] + 1);
send_buf.u8ArgLen = data.u8ARG[0] + 1 + 1;
//send_buf.u8Datalen = data.u8ARG[0] + 4;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_READ_ISN_CODE_OPCODE): //read isn
{
uint8_t buffer[33];
uint8_t length = 0;
memset(buffer, 0, 33);
uint8_t *data = ISN_TOKEN_GET();
iKonkeAfSelfPrint("len %x\r\n",data[0]);
iKonkeAfSelfPrintBuffer(data+1,32);
length = data[0];
memcpy(buffer,data,length +1);
if(length > 32) {
send_buf.u8ARG[0] = ERR_NOT_EXPECTED;
send_buf.u8ARG[1] = 0x00;
send_buf.u8ArgLen = 2;
} else {
send_buf.u8ARG[0] = ERR_OK;
memcpy(&send_buf.u8ARG[1], buffer, length + 1);
send_buf.u8ArgLen = length + 1 + 1;
}
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_WRITE_MAC_CODE_OPCODE)://ok
{
uint8_t mac_length = 0x00;
addrExt_t addr,local_addr;
flash_read(CFG_MAC_ADDRESS,8,(uint8_t*)local_addr);
mac_length = data.u8ARG[0];
if (mac_length != 8) {
send_buf.u8ARG[0] = ERR_NOT_EXPECTED;
} else {
send_buf.u8ARG[0] = ERR_OK;
memcpy(addr, &data.u8ARG[1], 8);
SWAP_EUI64((uint8_t *)local_addr);
if(memcmp(local_addr,addr,8) ){
SWAP_EUI64((uint8_t *)addr);
flash_erase(CFG_MAC_ADDRESS);
flash_write(CFG_MAC_ADDRESS,8,addr);
}
}
send_buf.u8ARG[1] = 8;
memcpy(&send_buf.u8ARG[2], &data.u8ARG[1], 8);
send_buf.u8ArgLen = 1 + 1 + 8;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_READ_MAC_CODE_OPCODE)://ok
{
addrExt_t addr;
flash_read(CFG_MAC_ADDRESS,8,(uint8_t*)addr);
// zb_getLocalExtAddr(addr);
send_buf.u8ARG[0] = 0x00;
send_buf.u8ARG[1] = 0x08;
SWAP_EUI64((uint8_t *)addr);
iKonkeAfSelfPrintBuffer(addr,8);
memcpy(&send_buf.u8ARG[2], addr, 8);
send_buf.u8ArgLen = 1 + 1 + 8;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_WRITE_MOUDLE_ID_OPCODE): // write modeid code
{
uint8_t buffer[33];
uint8_t length = data.u8ARG[0];
memset(buffer, 0, 33);
if(length > 32) {
send_buf.u8ARG[0] = ERR_NOT_EXPECTED;
//send_buf.u8Datalen = 1 + 1 + 3;
}else{
send_buf.u8ARG[0] = ERR_OK;
memcpy(buffer, &data.u8ARG[1], length);
MODEL_ID_TOKEN_SET(buffer,length);
}
memcpy(&send_buf.u8ARG[1], &data.u8ARG[0], data.u8ARG[0] + 1);
send_buf.u8ArgLen = data.u8ARG[0] + 1 + 1;
//send_buf.u8Datalen = data.u8ARG[0] + 4;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_READ_MOUDLE_ID_OPCODE): //read modeid code
{
uint8_t buffer[33];
uint8_t length = 0;
memset(buffer, 0, 33);
uint8_t *data = MODEL_ID_TOKEN_GET();
if(All_Same_Data(&data[1],0xff,32))
{
status_t status;
zclAttrInfo_t *attrInfo = ReadServerAttribute(1,0x0000,0x0005,&status);
length = attrInfo->data[0];
iKonkeAfSelfPrint("len %x\r\n",length);
iKonkeAfSelfPrintBuffer( attrInfo->data+1,32);
memcpy(buffer,attrInfo->data,length +1);
}else{
length = data[0];
iKonkeAfSelfPrint("len %x\r\n",length);
iKonkeAfSelfPrintBuffer(data+1,32);
memcpy(buffer,data,length +1);
}
if(length > 32) {
send_buf.u8ARG[0] = ERR_NOT_EXPECTED;
send_buf.u8ARG[1] = 0x00;
send_buf.u8ArgLen = 2;
//send_buf.u8Datalen = 1 + 1 + 3;
} else {
send_buf.u8ARG[0] = ERR_OK;
memcpy(&send_buf.u8ARG[1], buffer, length + 1);
send_buf.u8ArgLen = length + 1 + 1;
//send_buf.u8Datalen = length + 1 + 1 + 3;
}
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_READ_DEV_RSSI_OPCODE):
{
reply_control_field = Z_TO_H_NO_ACK;
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ARG[1] = kGetLastRssi();
send_buf.u8ArgLen = 2;
break;
}
case (UART_MSG_WRITE_AGING_TIME_OPCODE)://OK
{
uint16_t agingTime = 0;
agingTime = UINT16_HL(data.u8ARG[0], data.u8ARG[1]);
kSetAgingMaxTime(agingTime);
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ARG[1] = data.u8ARG[0];
send_buf.u8ARG[2] = data.u8ARG[1];
send_buf.u8ArgLen = 3;
//send_buf.u8Datalen = 3 + 3;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_READ_AGING_TIME_OPCODE)://OK
{
uint32_t agingTime = 0;
agingTime = kGetAgingMaxTime();
agingTime = agingTime / 1000 / 60;
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ARG[1] = H1_UINT32(agingTime);
send_buf.u8ARG[2] = H0_UINT32(agingTime);
send_buf.u8ArgLen = 3;
//send_buf.u8Datalen = 3 + 3;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_WRITE_INTERPAN_PARA_OPCODE):
{
uint8_t enable = 0;
uint16_t panId = 0;
uint8_t channel = 0;
int8_t radioTxPower = 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,enable);
send_buf.u8ARG[0] = ERR_OK;
memcpy(&send_buf.u8ARG[1], &data.u8ARG[0], data.u8ArgLen);
send_buf.u8ArgLen = data.u8ArgLen + 1;
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
{
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ARG[1] = kNwkGetCurrentStatus();
send_buf.u8ArgLen = 2;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_JOIN_NWK_REQUEST_OPCODE)://ok
{
uint8_t duration = data.u8ARG[0];//unit:S
if (zb_isDeviceJoinedNwk()){
iKonkeAfSelfPrint("#####NWK Is Joined By Usart Duration(0x%2x)\r\n", duration);
send_buf.u8ARG[0] = ERR_NOT_EXPECTED;
}else {
send_buf.u8ARG[0] = ERR_OK;
kNwkFactoryReset(false);
//steering timeout can be set
iKonkeAfSelfPrint("#####Start Steering By Usart Duration(0x%2x)\r\n", duration);
if(duration > 0)
kNwkJoiningStart(duration * 1000, NULL);
}
send_buf.u8ARG[1] = duration;
send_buf.u8ArgLen = 2;
//send_buf.u8Datalen = 5;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_LEAVE_NWK_REQUEST_OPCODE)://ok
{
if( zb_isDeviceJoinedNwk()){
send_buf.u8ARG[0] = ERR_OK;
kNwkFactoryReset(true);
}else {
send_buf.u8ARG[0] = ERR_NOT_EXPECTED;
}
send_buf.u8ArgLen = 1;
//send_buf.u8Datalen = 4;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
/*************************************/
case (UART_MSG_ENTER_FACTORY_TEST_OPCODE):
{
uint8_t tmp_value = 0;
if ((tmp_value & 0x01) == 0x01) {
kSetSingleBoardValue(0x00);
}
if ((tmp_value & 0x02) == 0x02) {
kSetFullDeviceValue(0x00);
}
if ((tmp_value & 0x04) == 0x04) {
kSetAgingTestValue(0x00);
}
send_buf.u8ArgLen = 2;
send_buf.u8ARG[0] = ERR_OK;
reply_control_field = Z_TO_H_NO_ACK;
send_buf.u8ARG[1] = kGetFactoryTestValueStatus();
break;
}
default:
{
send_buf.u8ARG[0] = ERR_NOT_EXPECTED;
send_buf.u8ArgLen = 1;
//send_buf.u8Datalen = 4;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
}
memcpy(pDataOut, (uint8_t *)&send_buf, sizeof(DataField_st));
if (send_buf.u8ArgLen == 0) { //if cmd exist, lengtg must > 0
return KET_ERR_CMD_INVALID;
} else {
if (port == ECOM_PORT_FCC0) {
pDataOut->u8Datalen = pDataOut->u8ArgLen;
} else {
pDataOut->u8Datalen = pDataOut->u8ArgLen + 3; //AA 55 (opcode(2), ch(1))
}
return KET_OK;
}
}
uint8_t kCmdMsgDataSentByPort(uint8_t u8Control_Field, DataField_st data, bool isGetResult, ComPortEm port)
{
uint8_t length = 0;
UMsgNodeSt uMsgNode;
memset((uint8_t*)&uMsgNode,0,sizeof(UMsgNodeSt));
uMsgNode.buffer[length++] = 0xAA; //msg header
uMsgNode.buffer[length++] = 0x55; //msg header
uMsgNode.buffer[length++] = 0x00; //msg length
uMsgNode.buffer[length++] = 0x00; //msg length
uMsgNode.buffer[length++] = u8Control_Field;
// seq++;
uMsgNode.buffer[length++] = (uint8_t) (data.seq >> 8);
uMsgNode.buffer[length++] = (uint8_t) data.seq;
uMsgNode.buffer[length++] = data.u8Datalen;
uMsgNode.buffer[length++] = data.u8ChannelID;
uMsgNode.buffer[length++] = (uint8_t) (data.u16Opcode >> 8);
uMsgNode.buffer[length++] = (uint8_t) data.u16Opcode;
memmove(&uMsgNode.buffer[length], data.u8ARG, data.u8Datalen - 3);
length = length + data.u8Datalen - 3;
uMsgNode.buffer[2] = (uint8_t) ((length - 4) >> 8);
uMsgNode.buffer[3] = (uint8_t) (length - 4);
uint16_t crc = kCmdGetMsgCrc16Value(&uMsgNode.buffer[4], length - 4);
uMsgNode.buffer[length++] = (uint8_t) (crc >> 8);
uMsgNode.buffer[length++] = (uint8_t) (crc);
uMsgNode.length = length;
// setting for matcher content.
uMsgNode.matcher[0] = uMsgNode.buffer[2]; //seq
uMsgNode.matcher[1] = uMsgNode.buffer[3];
uMsgNode.matcher_offset = 2;
uMsgNode.matcher_n = 2;
//zigbee send to host ack
if (u8Control_Field == Z_TO_H_NO_ACK) {
uMsgNode.sent_try = 0;
} else if (u8Control_Field == Z_TO_H_WITH_ACK) {
//zigbee send to host notify or control
uMsgNode.sent_try = 1;
}
if (isGetResult) {
uMsgNode.ack = uMsgNode.buffer;
} else {
uMsgNode.ack = NULL;
uMsgNode.ack_length = 0;
}
iKonkeAfSelfPrint("\r\n-- kCmdMsgDataSentByPort[%d]:\r\n", uMsgNode.length);
iKonkeAfSelfPrintBuffer(uMsgNode.buffer, uMsgNode.length);
if (port == ECOM_PORT_UART) {
return kUartMsgSent(&uMsgNode);
}
else if (port == ECOM_PORT_INTERPAN) {
return kInterPanSend(&uMsgNode);
}
return 0;
}
#ifndef __IKONKE_COMMAND_H____________________________ #ifndef __IKONKE_COMMAND_H____________________________
#define __IKONKE_COMMAND_H____________________________ #define __IKONKE_COMMAND_H____________________________
#include "ikk-module-def.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 #endif
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#define __IKONKE_MODULE_DEBUG_H______________________________ #define __IKONKE_MODULE_DEBUG_H______________________________
#define IKONKE_DEBUG_LOG_ENABLE (1) // ENABLE #define IKONKE_DEBUG_LOG_ENABLE (0) // ENABLE
#define PROMPT_DSR "" #define PROMPT_DSR ""
......
#include "ikk-factory-test.h" #include "ikk-factory-test.h"
#include "ikk-debug.h" #include "ikk-debug.h"
#include "ikk-token.h" #include "ikk-token.h"
#include "tl_common.h" #include "ikk-common-utils.h"
#include "../driver/ikk-button.h" #include "../driver/ikk-button.h"
#define AGING_TEST_15MIN_VALUE 0xA1 #define AGING_TEST_15MIN_VALUE 0xA1
#define AGING_TEST_8HOU_VALUE 0xA2 #define AGING_TEST_4HOU_VALUE 0xA2
#define AGINE_TEST_DONE_VALUE 0xFA #define AGINE_TEST_DONE_VALUE 0xFA
//已经置老化标志 //已经置老化标志
#define FACTORY_TEST_VALUE 0xF1 #define SINGLE_BOARD_TEST_DONE_VALUE 0xF1 //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
//初始值 #define FULL_DEVICE_TEST_DONE_VALUE 0xF2 //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟?
#define TEST_INIT_VALUE 0xFF #define FORCE_FACTORY_TEST_VALUE 0xF8 //锟斤拷锟斤拷锟斤拷锟斤拷锟角匡拷锟斤拷顺锟?
static ev_timer_event_t *kFactoryTestEvt = NULL; static ev_timer_event_t *kFactoryTestEvt = NULL;
s32 kFactoryTestEventHandler(void *arg); s32 kFactoryTestEventHandler(void *arg);
...@@ -26,6 +28,8 @@ typedef struct{ ...@@ -26,6 +28,8 @@ typedef struct{
uint32_t u32FirstBtnLongPressedCountDown; uint32_t u32FirstBtnLongPressedCountDown;
}FactoryTestControllerSt; }FactoryTestControllerSt;
typedef enum{FT_SINGLE_BOARD_TEST=0x01, FT_FULL_DEVICE_TEST=0x02, FT_NORMAL_DONE=0x04, FT_FORCE_EXIT=0x08}FT_STATUS;
FactoryTestControllerSt g_stFactoryTestControllerList[AGING_EXIT_MAX_BTN_NUM] \ FactoryTestControllerSt g_stFactoryTestControllerList[AGING_EXIT_MAX_BTN_NUM] \
= {{BTN_UNKNOW_ID, 0, 0, 0, EBA_IDLE, EBA_IDLE, 0, 0}, {BTN_UNKNOW_ID, 0, 0, 0, EBA_IDLE, EBA_IDLE, 0, 0}}; = {{BTN_UNKNOW_ID, 0, 0, 0, EBA_IDLE, EBA_IDLE, 0, 0}, {BTN_UNKNOW_ID, 0, 0, 0, EBA_IDLE, EBA_IDLE, 0, 0}};
...@@ -56,12 +60,97 @@ FactoryTestStatusEnum kGetFactoryTestStatus(void) ...@@ -56,12 +60,97 @@ FactoryTestStatusEnum kGetFactoryTestStatus(void)
return g_eFactoryTestStatus; return g_eFactoryTestStatus;
} }
void kSetAgingMaxTime(uint16_t value)
{
nv_sts_t st = NV_SUCC;
uint16_t temp;
st = nv_flashReadNew(1, NV_MODULE_APP, NV_AGING_TEST_TIME, sizeof(uint16_t), (u8*)&temp);
if(st == NV_SUCC){
if(temp != value)
{
st = nv_flashWriteNew(1, NV_MODULE_APP, NV_AGING_TEST_TIME, sizeof(uint16_t), (u8*)&value);
iKonkeAfSelfPrint("kSetAgingTestTime:st = %d,data = %d\r\n",st,NV_AGING_TEST_TIME);
}
}else if(st == NV_ITEM_NOT_FOUND){
st = nv_flashWriteNew(1, NV_MODULE_APP, NV_AGING_TEST_TIME, sizeof(uint16_t), (u8*)&value);
}
}
uint32_t kGetAgingMaxTime(void)
{
nv_sts_t st = NV_SUCC;
uint32_t maxTime;
uint16_t value = 0;
st = nv_flashReadNew(1, NV_MODULE_APP, NV_AGING_TEST_TIME, sizeof(value), (u8*)&value);
iKonkeAfSelfPrint("kGetAgingTestTime:st = %d,value = %d\r\n",st,value);
if(st != NV_SUCC){
maxTime = FACTORY_TEST_4HOU_MS;
}
else if ((value == 0) || (value == 0xffff)) {
maxTime = FACTORY_TEST_4HOU_MS;
} else {
maxTime = value * 60 * 1000;
}
return maxTime;
}
uint8_t kGetFactoryTestValueStatus(void)
{
uint8_t status = 0;
#if Z30_DEVICE_SINGLE_BOARD_ENABLE
if (kGetSingleBoardValue() == FORCE_FACTORY_TEST_VALUE) {
status = status | FT_FORCE_EXIT;
}else if (kGetSingleBoardValue() != SINGLE_BOARD_TEST_DONE_VALUE) {
status = status | FT_SINGLE_BOARD_TEST;
}
#endif
#if Z30_DEVICE_FULL_DEVICE_ENBALE
if (kGetFullDeviceValue() == FORCE_FACTORY_TEST_VALUE) {
status = status | FT_FORCE_EXIT;
}else if (kGetFullDeviceValue() != FULL_DEVICE_TEST_DONE_VALUE){
status = status | FT_FULL_DEVICE_TEST;
}else if(kGetSingleBoardValue() == SINGLE_BOARD_TEST_DONE_VALUE){
status = status | FT_NORMAL_DONE;
}
#endif
return status;
}
nv_sts_t General_Set_Factory_Test(nv_item_t items,uint8_t value)
{
nv_sts_t st = NV_SUCC;
uint8_t temp;
st = nv_flashReadNew(1, NV_MODULE_APP, items, sizeof(uint8_t), (u8*)&temp);
if(st == NV_SUCC){
if(temp != value)
{
st = nv_flashWriteNew(1, NV_MODULE_APP, items, sizeof(uint8_t), (u8*)&value);
iKonkeAfSelfPrint("kSetSingleBoardValue:st = %d,data = %d\r\n",st,value);
}
}else if(st == NV_ITEM_NOT_FOUND){
st = nv_flashWriteNew(1, NV_MODULE_APP, items, sizeof(uint8_t), (u8*)&value);
}
return st;
}
uint8_t General_Get_Factory_Test(nv_item_t items,uint8_t default_value)
{
nv_sts_t st = NV_SUCC;
uint8_t temp;
st = nv_flashReadNew(1, NV_MODULE_APP, items, sizeof(temp), (u8*)&temp);
iKonkeAfSelfPrint("kGetSingleBoardValue:st = %d,data = %d\r\n",st,temp);
if(st != NV_SUCC){
temp = default_value;
}
return temp;
}
void kFactoryTestBtnActionCallback(unsigned char button_id, BtnActionEnum action) void kFactoryTestBtnActionCallback(unsigned char button_id, BtnActionEnum action)
{ {
if (kGetFactoryTestStatus() != FTS_NORMAL)
{
uint8_t u8FactoryTestIndex = kGetFactoryTestIndexByID(button_id); uint8_t u8FactoryTestIndex = kGetFactoryTestIndexByID(button_id);
iKonkeAfSelfPrint("######kFactoryTestBtnActionCallback,index(%d) id (%d)action(%d)\r\n",u8FactoryTestIndex,button_id, action);
if (u8FactoryTestIndex != 0xFF){ if (u8FactoryTestIndex != 0xFF){
//add bby maozj 20200828
if(action == EBA_LONGPRESS) if(action == EBA_LONGPRESS)
g_stFactoryTestControllerList[u8FactoryTestIndex].eCurrentBtnAction = EBA_PRESSED; g_stFactoryTestControllerList[u8FactoryTestIndex].eCurrentBtnAction = EBA_PRESSED;
else else
...@@ -74,9 +163,224 @@ void kFactoryTestBtnActionCallback(unsigned char button_id, BtnActionEnum actio ...@@ -74,9 +163,224 @@ void kFactoryTestBtnActionCallback(unsigned char button_id, BtnActionEnum actio
iKonkeAfSelfPrint("######33333333333333333 FactoryTest Released\r\n"); iKonkeAfSelfPrint("######33333333333333333 FactoryTest Released\r\n");
} }
} }
}
} }
kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut)
{
//UMsgNodeSt uMsgNode = {0};
uint16_t length = 0;
uint8_t control_field = 0;
DataField_st data;
DataField_st send_buf;
uint8_t reply_control_field = 0;
if( NULL == pMsgNode ) {
return KET_ERR_INVALID_PARAM;
}
#if 0 // Just for debug
iKonkeAfSelfPrint("\r\n-- MSG INCOMING[%d]:\r\n", pMsgNode->length);
iKonkeAfSelfPrintBuffer(pMsgNode->buffer, pMsgNode->length, true);
iKonkeAfSelfPrint("\r\n--------------------\r\n");
#endif
// check for parsable packets
if( pMsgNode->length < 5 /* Minimum Packet Length */ ) {
iKonkeAfSelfPrint("Err: Unparsable Packets!!\r\n");
return KET_ERR_INVALID_PARAM;
}
//length(1) pid(4) ch(1) opcode(1) arg
if (port == ECOM_PORT_FCC0) {
length = pMsgNode->length;
//control_field = pMsgNode->buffer[4];
data.seq = 0x00;
data.u8Datalen = pMsgNode->buffer[0];
data.u8ArgLen = data.u8Datalen - 6; // fcc0 - id (4) - ch(1) - opcode(1)
data.u8ChannelID = pMsgNode->buffer[5];
data.u16Opcode = kCmdOpcodeRemap((uint16_t)(pMsgNode->buffer[6]), 0);
if(data.u16Opcode == 0xFFFF) {
return KET_ERR_INVALID_PARAM;
}
memcpy(data.u8ARG,&pMsgNode->buffer[7], data.u8ArgLen); //6 = pid(4) + ch(1) + opcode(1)
send_buf.seq = data.seq;
send_buf.u8ChannelID = data.u8ChannelID;
send_buf.u16Opcode = data.u16Opcode;
} else {
length = ((uint16_t)pMsgNode->buffer[2] << 8) | (uint16_t)(pMsgNode->buffer[3]);
control_field = pMsgNode->buffer[4];
data.seq = ((uint16_t)pMsgNode->buffer[5] << 8) | (uint16_t)(pMsgNode->buffer[6]);
data.u8Datalen = pMsgNode->buffer[7];
data.u8ArgLen = data.u8Datalen - 3; // aa55 - ch(1) - opcode(2)
data.u8ChannelID = pMsgNode->buffer[8];
data.u16Opcode = ((uint16_t)pMsgNode->buffer[9] << 8) | (uint16_t)(pMsgNode->buffer[10]);
memcpy(data.u8ARG,&pMsgNode->buffer[11],data.u8Datalen - 3);
send_buf.seq = data.seq;
send_buf.u8ChannelID = data.u8ChannelID;
send_buf.u16Opcode = data.u16Opcode;
}
send_buf.u8Datalen = 0;
switch (data.u16Opcode) {
case (UART_MSG_QUERY_INFO_OPCODE):
{
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ArgLen = 1;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_QUERY_DEVICE_VERSION_OPCODE):
{
send_buf.u8ARG[0] = ERR_OK;
//wait to do
send_buf.u8ARG[1] = 0x20;
send_buf.u8ARG[2] = 0x20;
send_buf.u8ARG[3] = 0XFF;
send_buf.u8ARG[4] = 0XFF;
send_buf.u8ARG[0] = ERR_OK;;
send_buf.u8ArgLen = 5;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_QUERY_DEVICE_INFO_OPCODE):
{
addrExt_t addr;
flash_read(CFG_MAC_ADDRESS,8,(uint8_t*)addr);
send_buf.u8ARG[0] = ERR_OK;
SWAP_EUI64((uint8_t *)addr);
memcpy(&send_buf.u8ARG[1],addr,8);
send_buf.u8ArgLen = 9;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_CONFIG_DEVICE_SLEEP_OPCODE):
{
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ArgLen = 1;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_EXIT_FACTORY_TEST_OPCODE):
{
uint8_t token_data = 0;
if(data.u8ARG[0]&0x01)
{
kSetSingleBoardValue(SINGLE_BOARD_TEST_DONE_VALUE);
iKonkeAfSelfPrint("######kGetSingleBoardValue(%x)\r\n", token_data);
send_buf.u8ARG[0] = ERR_OK;
}
if(data.u8ARG[0]&0x02)
{
kSetFullDeviceValue(FULL_DEVICE_TEST_DONE_VALUE);
iKonkeAfSelfPrint("######kGetFullBoardValue(%02x)\r\n", token_data);
send_buf.u8ARG[0] = ERR_OK;
}
if( (data.u8ARG[0]&0x03 == 0x03)||(data.u8ARG[0]&0x04 == 0x04) )
{
kSetAgingTestValue(AGINE_TEST_DONE_VALUE);
iKonkeAfSelfPrint("######kGetAgingTestValue(%02x)\r\n", token_data);
send_buf.u8ARG[0] = ERR_OK;
g_eFactoryTestStatus = FTS_AGING_DONE;
}
send_buf.u8ARG[1] = data.u8ARG[0];
send_buf.u8ArgLen = 2;
reply_control_field = Z_TO_H_NO_ACK;
break;
}
case (UART_MSG_QUERY_FACTORY_INFO_OPCODE):
{
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ARG[1] = kGetFactoryTestValueStatus();
send_buf.u8ArgLen = 2;
reply_control_field = Z_TO_H_NO_ACK;
iKonkeAfSelfPrint("######UART_MSG_QUERY_FACTORY_INFO_OPCODE(%d)\r\n", send_buf.u8ArgLen);
break;
}
case UART_MSG_QUERY_SWITCH_ONOFF_OPCODE:
{
extern uint8_t Key_Press_Test_Flag[5];
for (uint8_t i = 0; i < 6; i++){
if(i < 5){
send_buf.u8ARG[i+1] = Key_Press_Test_Flag[i];
}
else{
send_buf.u8ARG[i+1] = 0xff;
}
}
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ArgLen = 7;
break;
}
case (UART_MSG_ENTER_FACTORY_TEST_OPCODE):
{
uint8_t tmp_value = data.u8ARG[0];
reply_control_field = Z_TO_H_NO_ACK;
if ((tmp_value & 0x01) == 0x01) {
kSetSingleBoardValue(0x00);
}
if ((tmp_value & 0x02) == 0x02) {
kSetFullDeviceValue(0x00);
}
if ((tmp_value & 0x04) == 0x04) {
kSetAgingTestValue(0x00);
}
send_buf.u8ArgLen = 2;
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ARG[1] = kGetFactoryTestValueStatus();
break;
}
case UART_MSG_ONOFF_SWITCH_OPCODE:
{
uint8_t command = data.u8ARG[0];
if(command == 1){ //控制命令
for (uint8_t i = 0; i < 9; i++){
if(i < 4){
if(data.u8ARG[i+1] == 1)
kZclOnOffClusterServerOnOffControl(i+1, 1);
else if(data.u8ARG[i+1] == 0)
kZclOnOffClusterServerOnOffControl(i+1, 0);
}
else{
data.u8ARG[i+1] = 0xff;
}
}
}
send_buf.u8ARG[0] = ERR_OK;
memcpy(&send_buf.u8ARG[1], &data.u8ARG[1], 8);
send_buf.u8ArgLen = 10;
break;
}
default:
break;
}
memcpy(pDataOut, (uint8_t *)&send_buf, sizeof(DataField_st));
if (send_buf.u8ArgLen == 0) { //if cmd exist, lengtg must > 0
return KET_ERR_CMD_INVALID;
} else {
if (port == ECOM_PORT_FCC0) {
pDataOut->u8Datalen = pDataOut->u8ArgLen;
} else {
pDataOut->u8Datalen = pDataOut->u8ArgLen + 3; //AA 55 (opcode(2), ch(1))
}
return KET_OK;
}
}
void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num) void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num)
{ {
#if FACTORY_TEST_ENABLE #if FACTORY_TEST_ENABLE
...@@ -119,7 +423,7 @@ void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_ ...@@ -119,7 +423,7 @@ void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_
s32 kFactoryTestEventHandler(void *arg) s32 kFactoryTestEventHandler(void *arg)
{ {
iKonkeAfSelfPrint("######kFactoryTestEventHandler status(%d)\r\n", g_eFactoryTestStatus); // iKonkeAfSelfPrint("######kFactoryTestEventHandler status(%d)\r\n", g_eFactoryTestStatus);
g_u32AgingTotalTimeMS += FACTORY_TEST_POLL_TTME_1S; g_u32AgingTotalTimeMS += FACTORY_TEST_POLL_TTME_1S;
...@@ -133,20 +437,20 @@ s32 kFactoryTestEventHandler(void *arg) ...@@ -133,20 +437,20 @@ s32 kFactoryTestEventHandler(void *arg)
case (FTS_AGING_15MIN): case (FTS_AGING_15MIN):
//上电后15分钟时间到,15分钟内可以短按按键和长按,但不能组网 //上电后15分钟时间到,15分钟内可以短按按键和长按,但不能组网
if (g_u32AgingTotalTimeMS >= FACTORY_TEST_15MIN_MS){ if (g_u32AgingTotalTimeMS >= FACTORY_TEST_15MIN_MS){
kSetAgingTestValue(AGING_TEST_8HOU_VALUE); kSetAgingTestValue(AGING_TEST_4HOU_VALUE);
g_eFactoryTestStatus = FTS_AGING_8HOU_START; g_eFactoryTestStatus = FTS_AGING_4HOU_START;
//15分钟后重新开始计时 //15分钟后重新开始计时
g_u32AgingTotalTimeMS = 0; g_u32AgingTotalTimeMS = 0;
g_u32Count = FACTORY_TEST_POLL_TIMES;//快点处理自定义函数 g_u32Count = FACTORY_TEST_POLL_TIMES;//快点处理自定义函数
} }
break; break;
case (FTS_AGING_8HOU_START): case (FTS_AGING_4HOU_START):
//可以设置所有的LED状态一致,在回调函数实现 //可以设置所有的LED状态一致,在回调函数实现
g_eFactoryTestStatus = FTS_AGING_8HOU; g_eFactoryTestStatus = FTS_AGING_4HOU;
break; break;
case (FTS_AGING_8HOU): case (FTS_AGING_4HOU):
//上电后12小时老化时间到,12小时内不可以短按按键和长按,不能组网 //上电后12小时老化时间到,12小时内不可以短按按键和长按,不能组网
if (g_u32AgingTotalTimeMS >= FACTORY_TEST_8HOU_MS){ if (g_u32AgingTotalTimeMS >= FACTORY_TEST_4HOU_MS){
kSetAgingTestValue(AGINE_TEST_DONE_VALUE); kSetAgingTestValue(AGINE_TEST_DONE_VALUE);
g_eFactoryTestStatus = FTS_AGING_DONE; g_eFactoryTestStatus = FTS_AGING_DONE;
} }
...@@ -206,6 +510,14 @@ s32 kFactoryTestEventHandler(void *arg) ...@@ -206,6 +510,14 @@ s32 kFactoryTestEventHandler(void *arg)
//successfully exit aging test //successfully exit aging test
g_eFactoryTestStatus = FTS_AGING_FORCE_EXIT; g_eFactoryTestStatus = FTS_AGING_FORCE_EXIT;
kSetAgingTestValue(AGINE_TEST_DONE_VALUE); kSetAgingTestValue(AGINE_TEST_DONE_VALUE);
#if Z30_DEVICE_SINGLE_BOARD_ENABLE
if(kGetSingleBoardValue() != SINGLE_BOARD_TEST_DONE_VALUE)
kSetSingleBoardValue(FORCE_FACTORY_TEST_VALUE);
#endif
#if Z30_DEVICE_FULL_DEVICE_ENBALE
if(kGetFullDeviceValue() != FULL_DEVICE_TEST_DONE_VALUE)
kSetFullDeviceValue(FORCE_FACTORY_TEST_VALUE);
#endif
g_u32Count = FACTORY_TEST_POLL_TIMES; //快点执行自定义函数 g_u32Count = FACTORY_TEST_POLL_TIMES; //快点执行自定义函数
//防止老化状态被重置 //防止老化状态被重置
g_stFactoryTestControllerList[index].u32FirstBtnLongPressedCountDown = 0; g_stFactoryTestControllerList[index].u32FirstBtnLongPressedCountDown = 0;
......
#ifndef __IKONKE_MODULE_FACTORY_TEST_H_______________________ #ifndef __IKONKE_MODULE_FACTORY_TEST_H_______________________
#define __IKONKE_MODULE_FACTORY_TEST_H_______________________ #define __IKONKE_MODULE_FACTORY_TEST_H_______________________
#include "ikk-module-def.h"
#include "ikk-debug.h" #include "ikk-debug.h"
#include "../driver/ikk-uart.h"
#include "ikk-command.h"
// 定义是否需要产测 // 定义是否需要产测
#define FACTORY_TEST_ENABLE true #define FACTORY_TEST_ENABLE true
//使能debug快速测试老化 //使能debug快速测试老化
...@@ -26,19 +26,21 @@ ...@@ -26,19 +26,21 @@
#define FACTORY_TEST_POLL_TIMES (FACTORY_TEST_POLL_TTME_10S / FACTORY_TEST_POLL_TTME_1S) #define FACTORY_TEST_POLL_TIMES (FACTORY_TEST_POLL_TTME_10S / FACTORY_TEST_POLL_TTME_1S)
#if AGING_DEBUG #if AGING_DEBUG
#define FACTORY_TEST_15MIN_MS (2 * 60 * 1000) #define FACTORY_TEST_15MIN_MS (2 * 60 * 1000)
#define FACTORY_TEST_8HOU_MS (5 * 1 * 60 * 1000) #define FACTORY_TEST_4HOU_MS (5 * 1 * 60 * 1000)
#else #else
#define FACTORY_TEST_15MIN_MS (15 * 60 * 1000) #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 #endif
#define FACTORY_TEST_1S (1000) #define FACTORY_TEST_1S (1000)
//初始值
#define TEST_INIT_VALUE 0xFF
typedef enum{ typedef enum{
FTS_NORMAL=0, FTS_NORMAL=0,
FTS_START, FTS_START,
FTS_AGING_15MIN, FTS_AGING_15MIN,
FTS_AGING_8HOU_START, FTS_AGING_4HOU_START,
FTS_AGING_8HOU, FTS_AGING_4HOU,
FTS_AGING_DONE, FTS_AGING_DONE,
FTS_AGING_FORCE_EXIT, FTS_AGING_FORCE_EXIT,
FTS_AGING_WAITING, FTS_AGING_WAITING,
...@@ -55,11 +57,25 @@ typedef struct{ ...@@ -55,11 +57,25 @@ typedef struct{
//10S轮询操作函数,可根据不同长供电产品自定义实现 //10S轮询操作函数,可根据不同长供电产品自定义实现
typedef void (*pFactoryTestPollCallback)(FactoryTestStatusEnum status); 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); FactoryTestStatusEnum kGetFactoryTestStatus(void);
//void kGetFactoryTestBtnAction(uint8_t btn_id, BtnActionEnum action); //void kGetFactoryTestBtnAction(uint8_t btn_id, BtnActionEnum action);
void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num); void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num);
kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut);
#endif #endif
...@@ -11,7 +11,12 @@ ...@@ -11,7 +11,12 @@
#define Z30_DEVICE_DTYPE (Z30_DEVICE_ZR) #define Z30_DEVICE_DTYPE (Z30_DEVICE_ZR)
#define Z30_DEVICE_OTA_ENABLE false #define Z30_DEVICE_OTA_ENABLE false
// 定义是否需要老化,目前一般路由设备需要
#define Z30_DEVICE_AGING_ENABLE true #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!!! // Real time IO operation, no optimization!!!
#define _IO volatile #define _IO volatile
...@@ -39,6 +44,92 @@ ...@@ -39,6 +44,92 @@
#define PORT_UNKNOW 0xFF #define PORT_UNKNOW 0xFF
#define PIN_UNKNOW (uint32_t)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 { typedef enum kk_error_type {
KET_OK = 0, // 正常(成功) KET_OK = 0, // 正常(成功)
...@@ -73,11 +164,23 @@ typedef enum kk_error_type { ...@@ -73,11 +164,23 @@ typedef enum kk_error_type {
KET_ERR_OPRATE_IN_PROGRESS = -908, // 操作进行中 KET_ERR_OPRATE_IN_PROGRESS = -908, // 操作进行中
KET_ERR_UNKNOW = -999, // 位置错误 KET_ERR_UNKNOW = -999, // 位置错误
}kk_err_t; }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 enum { Z3D_COORDINATOR = 0, Z3D_ROUTER, Z3D_ENDDEVICE }Z3DevTypeEm;
typedef void (*pFUNC_VOID)(void *); 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 { typedef struct tag_common_opt_callback_st {
pFUNC_VOID pfunc; pFUNC_VOID pfunc;
void *param; void *param;
......
...@@ -5,15 +5,19 @@ ...@@ -5,15 +5,19 @@
#include "ikk-token.h" #include "ikk-token.h"
#include "tl_common.h" #include "tl_common.h"
#include "ikk-cluster.h" #include "ikk-cluster.h"
#include "ikk-interpan.h"
#include "ikk-factory-test.h"
#include "../../../../zigbee/aps/aps_api.h" #include "../../../../zigbee/aps/aps_api.h"
#include "../../../../zigbee/common/includes/zb_common.h" #include "../../../../zigbee/common/includes/zb_common.h"
/********************************************************************** /**********************************************************************
* INCLUDES * 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 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 //global value
addrExt_t g_Eui64GatewayAddr = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; addrExt_t g_Eui64GatewayAddr = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
...@@ -30,6 +34,8 @@ static uint32_t g_u32NwkDetectCountDownCounter = 0; ...@@ -30,6 +34,8 @@ static uint32_t g_u32NwkDetectCountDownCounter = 0;
static uint32_t g_u32NwkJoiningCountdownCounter = 0; static uint32_t g_u32NwkJoiningCountdownCounter = 0;
static bool g_KeyPressCauasLeave = false;
// copy current network status. // copy current network status.
static NwkStatusEnum g_eCurrentNetworkStatus = ENS_UNKNOW; static NwkStatusEnum g_eCurrentNetworkStatus = ENS_UNKNOW;
//add by maozj 20200225 //add by maozj 20200225
...@@ -378,7 +384,7 @@ void kNwkFactoryReset(bool is_nwk_indicator) ...@@ -378,7 +384,7 @@ void kNwkFactoryReset(bool is_nwk_indicator)
memset(g_Eui64GatewayAddr, 0xFF, sizeof(g_Eui64GatewayAddr)); memset(g_Eui64GatewayAddr, 0xFF, sizeof(g_Eui64GatewayAddr));
Gateway_IEEE_Addr_Save(g_Eui64GatewayAddr); Gateway_IEEE_Addr_Save(g_Eui64GatewayAddr);
Update_Local_Attribute_Info();
// //add by maozj 20200320 // //add by maozj 20200320
//#if Z30_DEVICE_OTA_ENABLE //#if Z30_DEVICE_OTA_ENABLE
// kSetOTAStatus(OTA_NORMAL); // kSetOTAStatus(OTA_NORMAL);
...@@ -395,23 +401,24 @@ void kNwkFactoryReset(bool is_nwk_indicator) ...@@ -395,23 +401,24 @@ void kNwkFactoryReset(bool is_nwk_indicator)
//led can blink when network leaved //led can blink when network leaved
if (is_nwk_indicator == true){ if (is_nwk_indicator == true){
zb_factoryReset(); zb_factoryReset();
g_KeyPressCauasLeave = true;
kNwkNetworkStatusNotifyCall(ENS_LEAVED);
//add by maozj 20200407 for reset count down after network leaved //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); // 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) void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf)
{ {
if(g_KeyPressCauasLeave)
{
g_KeyPressCauasLeave = false;
return;
}
iKonkeAfSelfPrint("Leave Handler,Nwk State = %d\r\n",kNwkGetCurrentStatus()); iKonkeAfSelfPrint("Leave Handler,Nwk State = %d\r\n",kNwkGetCurrentStatus());
if((pLeaveCnf->status == 0)&&(kNwkGetCurrentStatus() != ENS_JOINING)) if((pLeaveCnf->status == 0)&&(kNwkGetCurrentStatus() != ENS_JOINING))
{ {
//如果正处于离网中状态,则不执行以下函数 //如果正处于离网中状态,则不执行以下函数
...@@ -424,8 +431,8 @@ void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf) ...@@ -424,8 +431,8 @@ void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf)
Gateway_IEEE_Addr_Save(g_Eui64GatewayAddr); Gateway_IEEE_Addr_Save(g_Eui64GatewayAddr);
kNwkNetworkStatusNotifyCall(ENS_LEAVED); kNwkNetworkStatusNotifyCall(ENS_LEAVED);
//add by maozj 20200407 for reset count down after network leaved // //add by maozj 20200407 for reset count down after network leaved
g_u32NwkExitCountDownCounter = MS2COUNT(5*1000); //g_u32NwkExitCountDownCounter = MS2COUNT(5*1000);
} }
} }
} }
...@@ -466,12 +473,11 @@ static ev_timer_event_t *kUserScheduleTaskEvt = NULL; ...@@ -466,12 +473,11 @@ static ev_timer_event_t *kUserScheduleTaskEvt = NULL;
extern s32 kUserScheduleTaskHandler(void *arg); extern s32 kUserScheduleTaskHandler(void *arg);
kk_err_t kNwkScheduleTaskRegister(uint32_t TimeOut) kk_err_t kNwkScheduleTaskRegister(uint32_t TimeOut)
{ {
kk_err_t err = KET_FAILED; if(kUserScheduleTaskEvt){
if(!ev_timer_exist(kUserScheduleTaskEvt)) { TL_ZB_TIMER_CANCEL(&kUserScheduleTaskEvt);
kUserScheduleTaskEvt = TL_ZB_TIMER_SCHEDULE(kUserScheduleTaskHandler, NULL, TimeOut);
err = KET_OK;
} }
return err; kUserScheduleTaskEvt = TL_ZB_TIMER_SCHEDULE(kUserScheduleTaskHandler, NULL, TimeOut);
return KET_OK;
} }
...@@ -479,8 +485,16 @@ void kNwkJoiningStart(uint32_t u32JoiningDuration, pJoinCompleteCallback callbac ...@@ -479,8 +485,16 @@ void kNwkJoiningStart(uint32_t u32JoiningDuration, pJoinCompleteCallback callbac
{ {
if( u32JoiningDuration > 0 ) if( u32JoiningDuration > 0 )
{ {
#if Z30_DEVICE_AGING_ENABLE
if (kGetFactoryTestStatus() != FTS_NORMAL /*&& kGetFactoryTestStatus() != FTS_AGING_15MIN*/){
return;
}
#endif
if(!zb_isDeviceJoinedNwk()) if(!zb_isDeviceJoinedNwk())
{ {
//disable interpan
kInterpanDisable();
iKonkeAfSelfPrint("#####Set Steering Counter\r\n"); iKonkeAfSelfPrint("#####Set Steering Counter\r\n");
g_u32NwkJoiningCountdownCounter= MS2COUNT(u32JoiningDuration); g_u32NwkJoiningCountdownCounter= MS2COUNT(u32JoiningDuration);
g_pJoinCompleteCallback = callback; g_pJoinCompleteCallback = callback;
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
#include "ikk-opt-tunnel.h" #include "ikk-opt-tunnel.h"
#include "ikk-debug.h" #include "ikk-debug.h"
#include "ikk-config.h" #include "ikk-config.h"
#include "ikk-token.h"
#include "../../../../zigbee/zcl/zcl_include.h" #include "../../../../zigbee/zcl/zcl_include.h"
// FCC0-0000 // FCC0-0000
#pragma pack(1) #pragma pack(1)
typedef struct tag_private_clsFCC0_attr0000_frame_st { 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; ...@@ -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 // private protocol optdata message incoming process callback
pFUNC_OPTDATA_MESSAGE_CALLBACK g_pOptDataIncomingMessageCallback = NULL; 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_ 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); 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); //_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 ...@@ -76,36 +76,77 @@ extern _CODE_ZCL_ status_t zcl_readRsp(u8 srcEp, epInfo_t *pDstEpInfo, u16 clust
// } // }
//} //}
// //
///********************************************************************* uint8_t kOptTunnelChunkRead(uint8_t endpoint,
// * @fn private_fcc0Cb uint16_t clusterId,
// * uint16_t attributeId,
// * @brief Handler for ZCL FCC0 command. This function will set attribute first. uint16_t manufacturerCode,
// * uint8_t *buffer,
// * @param pAddrInfo uint8_t *length_out)
// * @param cmdId - onoff cluster command id {
// * @param cmdPayload iKonkeAfSelfPrint("&&&&&&&&&&&&&Token Read cluster(%2X), attr(%2X)\r\n", clusterId, attributeId);
// * uint8_t length = 0;
// * @return status_t if (buffer == NULL){
// */ iKonkeAfSelfPrint("Err: Buffer is null(%d)!!\r\n");
//status_t private_fcc0Cb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload) return 0xff;
//{ }
// 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;
//}
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) status_t kOptTunnelMessageReadResponse(zclIncoming_t *pInHdlrMsg,uint8_t *pData)
{ {
u8 status = ZCL_STA_SUCCESS; u8 status = ZCL_STA_SUCCESS;
...@@ -285,15 +326,15 @@ kk_err_t kOptTunnelMessageIncoming(OptMethodEm method,zclIncoming_t *pCmd) ...@@ -285,15 +326,15 @@ kk_err_t kOptTunnelMessageIncoming(OptMethodEm method,zclIncoming_t *pCmd)
* Auth: dingmz_frc.20191113. * 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); 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}; uint8_t temp_buffer[64] = {0};
if(length < 64) if( arg && length > 0 )
memmove(temp_buffer+1, arg, length); memmove(temp_buffer+1, arg, length);
temp_buffer[0] = length; temp_buffer[0] = length;
memmove(g_tmp_buffer,temp_buffer,length+1); 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. /* DESP: Private protocol common report interface.
* Auth: dingmz_frc.20191113. * Auth: dingmz_frc.20191113.
...@@ -305,18 +346,22 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id ) ...@@ -305,18 +346,22 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
} }
kk_err_t err = KET_OK; kk_err_t err = KET_OK;
uint8_t bufCount = 0;
switch(attribute_id) { switch(attribute_id) {
case (ECA_OPTDATA): case (ECA_OPTDATA):
{ {
uint32_t modeid = (uint32_t)MODEL_ID; uint8_t modeid[8] = {0};
iKonkeAfSelfPrint("#######kOptTunnelCommonReport OPTDATA\r\n"); if(Get_Model_ID(modeid))
g_tmp_buffer[1] = modeid>>24; {
g_tmp_buffer[2] = modeid>>16; g_tmp_buffer[bufCount++] = 0;
g_tmp_buffer[3] = modeid>>8; g_tmp_buffer[bufCount++] = modeid[4];
g_tmp_buffer[4] = modeid; 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[5] = 0x00;//channel
g_tmp_buffer[6] = 0x00;//opcode g_tmp_buffer[6] = 0x00;//opcode
}
if( g_pOptDataIncomingMessageCallback ) { if( g_pOptDataIncomingMessageCallback ) {
g_tmp_length = 0; g_tmp_length = 0;
g_tmp_buffer[7] = 0x00;//add by maozj 20200511 g_tmp_buffer[7] = 0x00;//add by maozj 20200511
...@@ -328,6 +373,34 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id ) ...@@ -328,6 +373,34 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
} }
break; 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: default:
{ {
err = KET_ERR_OPRATE_ILLEGAL; err = KET_ERR_OPRATE_ILLEGAL;
...@@ -335,7 +408,7 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id ) ...@@ -335,7 +408,7 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
} }
} }
if( err == KET_OK && g_tmp_length > 1) { 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; err = KET_OK;
else else
err = KET_FAILED; err = KET_FAILED;
...@@ -343,11 +416,38 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id ) ...@@ -343,11 +416,38 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
return err; 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 ) kk_err_t kOptTunnelModuleInit(pFUNC_OPTDATA_MESSAGE_CALLBACK pOptdataIncomingCallback )
{ {
g_pOptDataIncomingMessageCallback = pOptdataIncomingCallback; g_pOptDataIncomingMessageCallback = pOptdataIncomingCallback;
return KET_OK; return KET_OK;
} }
...@@ -10,6 +10,18 @@ ...@@ -10,6 +10,18 @@
#define PRIV_CLUSTER_FCC0 0XFCC0 #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_ID 0x0000 // FCC0 Cluster Attribute 0x0000
#define OPTTUNNEL_OPTDATA_MAXLEN 128 #define OPTTUNNEL_OPTDATA_MAXLEN 128
...@@ -51,10 +63,6 @@ typedef kk_err_t (*pFUNC_OPTDATA_MESSAGE_CALLBACK)(uint8_t channel, uint8_t opco ...@@ -51,10 +63,6 @@ typedef kk_err_t (*pFUNC_OPTDATA_MESSAGE_CALLBACK)(uint8_t channel, uint8_t opco
void Set2NwkJoiningCountdownCounter(u32 time_ms); 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. /* DESP: private clsuter protocol module init interface.
...@@ -66,14 +74,7 @@ kk_err_t kOptTunnelModuleInit(pFUNC_OPTDATA_MESSAGE_CALLBACK pOptdataIncomingCal ...@@ -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 * INCLUDES
*/ */
...@@ -17,8 +15,10 @@ extern void kBtnModuleActionDetectCallback(void ); ...@@ -17,8 +15,10 @@ extern void kBtnModuleActionDetectCallback(void );
extern void kLedModuleActionDetectCallback(void ); extern void kLedModuleActionDetectCallback(void );
//extern bool kLedModuleActionIsGoing(void ); //extern bool kLedModuleActionIsGoing(void );
extern void kNwkModuleActionDetectCallback(void ); extern void kNwkModuleActionDetectCallback(void );
//attribute change check callback
extern void kRelayModuleActionDetectCallback(uint8_t poll_time); extern void kRelayModuleActionDetectCallback(uint8_t poll_time);
//attribute change check callback
extern void AttributeValueCheckCallback(void);
static s32 kTickEventHandler(void *arg) static s32 kTickEventHandler(void *arg)
{ {
...@@ -26,6 +26,7 @@ static s32 kTickEventHandler(void *arg) ...@@ -26,6 +26,7 @@ static s32 kTickEventHandler(void *arg)
kBtnModuleActionDetectCallback(); kBtnModuleActionDetectCallback();
kNwkModuleActionDetectCallback(); kNwkModuleActionDetectCallback();
kRelayModuleActionDetectCallback(TICK_LOOP_NMS); kRelayModuleActionDetectCallback(TICK_LOOP_NMS);
AttributeValueCheckCallback();
return 0; return 0;
} }
...@@ -52,5 +53,5 @@ void kTickRunnningTrigger(void ) ...@@ -52,5 +53,5 @@ void kTickRunnningTrigger(void )
} }
#endif /* __PROJECT_TL_DIMMABLE_LIGHT__ */
...@@ -15,5 +15,4 @@ void Tick_Time_Init(void); ...@@ -15,5 +15,4 @@ void Tick_Time_Init(void);
* */ * */
void kTickRunnningTrigger(void ); void kTickRunnningTrigger(void );
#endif #endif
...@@ -2,13 +2,15 @@ ...@@ -2,13 +2,15 @@
* INCLUDES * INCLUDES
*/ */
#include "ikk-token.h" #include "ikk-token.h"
#include "../../../../zigbee/zcl/zcl_include.h"
#include "ikk-common-utils.h"
extern addrExt_t g_Eui64GatewayAddr; extern addrExt_t g_Eui64GatewayAddr;
uint8_t Flash_Buffer_Data[USER_SIZE];
OPTTUNEL_TOKEN_ST sOptunnel_Token = {{1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6},{16,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26},{16,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46},{16,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66}};
/********************************************************************* /*********************************************************************
* @fn Get Gateway Addr * @fn Get Gateway Addr
* *
...@@ -22,7 +24,7 @@ uint8_t* Gateway_IEEE_Addr_Get(void) ...@@ -22,7 +24,7 @@ uint8_t* Gateway_IEEE_Addr_Get(void)
{ {
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
st = nv_flashReadNew(1, NV_MODULE_KEYPAIR, 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"); iKonkeAfSelfPrint("flashRead:::\r\n");
DEBUG_ARRAY(1,g_Eui64GatewayAddr,sizeof(addrExt_t)); DEBUG_ARRAY(1,g_Eui64GatewayAddr,sizeof(addrExt_t));
if(st != NV_SUCC){ if(st != NV_SUCC){
...@@ -44,14 +46,14 @@ nv_sts_t Gateway_IEEE_Addr_Save(addrExt_t addr) ...@@ -44,14 +46,14 @@ nv_sts_t Gateway_IEEE_Addr_Save(addrExt_t addr)
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
addrExt_t temp_addr; addrExt_t temp_addr;
st = nv_flashReadNew(1, NV_MODULE_KEYPAIR, 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"); iKonkeAfSelfPrint("flashRead:::temp_addr\r\n");
DEBUG_ARRAY(1,temp_addr,sizeof(addrExt_t)); DEBUG_ARRAY(1,temp_addr,sizeof(addrExt_t));
if(st == NV_SUCC){ if(st == NV_SUCC){
if(memcmp(temp_addr,addr,sizeof(addrExt_t))) if(memcmp(temp_addr,addr,sizeof(addrExt_t)))
st = nv_flashWriteNew(1, NV_MODULE_KEYPAIR, 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){ }else if(st == NV_ITEM_NOT_FOUND){
st = nv_flashWriteNew(1, NV_MODULE_KEYPAIR, 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); iKonkeAfSelfPrint("Gateway_IEEE_Addr_Save result = %d\r\n",st);
return st; return st;
...@@ -69,7 +71,7 @@ uint16_t MFG_Code_Get(void) ...@@ -69,7 +71,7 @@ uint16_t MFG_Code_Get(void)
{ {
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
uint16_t mfg_code_temp; uint16_t mfg_code_temp;
st = nv_flashReadNew(1, NV_MODULE_KEYPAIR, 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(st != NV_SUCC){
mfg_code_temp = 0; mfg_code_temp = 0;
} }
...@@ -89,96 +91,282 @@ nv_sts_t MFG_Code_Save(uint16_t mfgcode) ...@@ -89,96 +91,282 @@ nv_sts_t MFG_Code_Save(uint16_t mfgcode)
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
uint16_t mfg_code_temp; uint16_t mfg_code_temp;
st = nv_flashReadNew(1, NV_MODULE_KEYPAIR, 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(st == NV_SUCC){
if(mfg_code_temp != mfgcode) if(mfg_code_temp != mfgcode){
st = nv_flashWriteNew(1, NV_MODULE_KEYPAIR, 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);
}
}else if(st == NV_ITEM_NOT_FOUND){ }else if(st == NV_ITEM_NOT_FOUND){
st = nv_flashWriteNew(1, NV_MODULE_KEYPAIR, 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; return st;
} }
/*********************************************************************
* @fn Get age test step bool kGetIndicatorNotDisturbModeFlg(void)
*
* @brief
*
* @param None
*
* @return
*/
uint8_t kGetAgingTestValue(void)
{ {
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
uint8_t temp; uint8_t temp;
st = nv_flashReadNew(1, NV_MODULE_KEYPAIR, NV_AGE_TEST_STEP, sizeof(temp), (u8*)&temp); st = nv_flashReadNew(1, NV_MODULE_APP, NV_NO_DISTURB_MODE, sizeof(temp), (u8*)&temp);
iKonkeAfSelfPrint("kGetAgingTestValue:st = %d,data = %d\r\n",st,temp);
if(st != NV_SUCC){ if(st != NV_SUCC){
temp = 0; temp = 0;
iKonkeAfSelfPrint("kGetIndicatorNotDisturbModeFlg failed!!\r\n");
} }
return temp; iKonkeAfSelfPrint("Read st =%d,data=%d\r\n",st,temp);
return (temp == 1) ;
} }
/********************************************************************* nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value)
* @fn Save age test step
*
* @brief
*
* @param None
*
* @return
*/
nv_sts_t kSetAgingTestValue(uint8_t value)
{ {
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
uint8_t temp; uint8_t temp;
st = nv_flashReadNew(1, NV_MODULE_KEYPAIR, NV_AGE_TEST_STEP, sizeof(uint8_t), (u8*)&temp); st = nv_flashReadNew(1, NV_MODULE_APP, NV_NO_DISTURB_MODE, sizeof(temp), (u8*)&temp);
if(st == NV_SUCC){ if(st == NV_SUCC){
if(temp != value) if(temp != value)
{ st = nv_flashWriteNew(1, NV_MODULE_APP, NV_NO_DISTURB_MODE, sizeof(uint8_t), (u8*)&value);
st = nv_flashWriteNew(1, NV_MODULE_KEYPAIR, NV_AGE_TEST_STEP, sizeof(uint8_t), (u8*)&value);
iKonkeAfSelfPrint("kSetAgingTestValue:st = %d,data = %d\r\n",st,value);
}
}else if(st == NV_ITEM_NOT_FOUND){ }else if(st == NV_ITEM_NOT_FOUND){
st = nv_flashWriteNew(1, NV_MODULE_KEYPAIR, NV_AGE_TEST_STEP, sizeof(uint8_t), (u8*)&value); st = nv_flashWriteNew(1, NV_MODULE_APP, NV_NO_DISTURB_MODE, sizeof(uint8_t), (u8*)&value);
}
if(st != NV_SUCC)
{
iKonkeAfSelfPrint("kSetIndicatorNotDisturbModeFlg failed!!\r\n");
} }
return st; return st;
} }
bool kGetIndicatorNotDisturbModeFlg(void)
bool kGetInterpanEnableFlg(void)
{ {
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
uint8_t temp; uint8_t temp;
st = nv_flashReadNew(1, NV_MODULE_KEYPAIR, NV_NO_DISTURB_MODE, sizeof(temp), (u8*)&temp); st = nv_flashReadNew(1, NV_MODULE_APP, NV_INTERPAN_ENABLE_FLG, sizeof(temp), (u8*)&temp);
if(st != NV_SUCC){ if(st != NV_SUCC){
temp = 0; temp = 1;
iKonkeAfSelfPrint("kGetIndicatorNotDisturbModeFlg failed!!\r\n"); iKonkeAfSelfPrint("kGetInterpanEnableFlg failed!!\r\n");
} }
return (temp == 1) ; return (temp == 1) ;
} }
nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value) nv_sts_t kSetInterpanEnableFlg(uint8_t value)
{ {
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
st = nv_flashWriteNew(1, NV_MODULE_KEYPAIR, NV_NO_DISTURB_MODE, sizeof(uint8_t), (u8*)&value); st = nv_flashWriteNew(1, NV_MODULE_APP, NV_INTERPAN_ENABLE_FLG, sizeof(uint8_t), (u8*)&value);
if(st != NV_SUCC) if(st != NV_SUCC)
{ {
iKonkeAfSelfPrint("kSetIndicatorNotDisturbModeFlg failed!!\r\n"); iKonkeAfSelfPrint("kSetIndicatorNotDisturbModeFlg failed!!\r\n");
} }
return st; return st;
} }
void falsh_test(void)
void Flash_Test_Save(uint8_t value)
{
uint8_t data = Flash_Test_Get();
if(value != data)
{
flash_read(TOKEN_USER_LOCATION,USER_SIZE,Flash_Buffer_Data);
iKonkeAfSelfPrintBuffer(Flash_Buffer_Data,USER_SIZE);
iKonkeAfSelfPrint("Erase Sector!!\r\n");
Flash_Buffer_Data[0] = value;
flash_erase(TOKEN_USER_LOCATION);
flash_write(TOKEN_USER_LOCATION,1,&value);
}
}
uint8_t Flash_Test_Get(void)
{ {
addrExt_t addr; uint8_t value;
memcpy(addr,Gateway_IEEE_Addr_Get(),sizeof(addrExt_t)); flash_read(TOKEN_USER_LOCATION,1,&value);
iKonkeAfSelfPrint("flashRead11111:::\r\n"); return value;
DEBUG_ARRAY(1,addr,sizeof(addrExt_t)); }
addr[0] = 11;
addr[1] = 22; void Print_Flash_Data(void)
Gateway_IEEE_Addr_Save(addr); {
iKonkeAfSelfPrint("flashRead22222:::\r\n"); flash_read(TOKEN_USER_LOCATION,USER_SIZE,(uint8_t*)&sOptunnel_Token);
DEBUG_ARRAY(1,addr,sizeof(addrExt_t)); iKonkeAfSelfPrint("install code :\r\n");
iKonkeAfSelfPrintBuffer(sOptunnel_Token.install_code.install_code_data,16);
iKonkeAfSelfPrint("modeid :len = %d\r\n",sOptunnel_Token.modeid.modeid_len);
iKonkeAfSelfPrintBuffer(sOptunnel_Token.modeid.modeid_data,32);
iKonkeAfSelfPrint("cmei :len = %d\r\n",32);
iKonkeAfSelfPrintBuffer(sOptunnel_Token.cmei.cmei_data,sOptunnel_Token.cmei.cmei_len);
iKonkeAfSelfPrint("isn :len = %d\r\n",sOptunnel_Token.isn.isn_len);
iKonkeAfSelfPrintBuffer(sOptunnel_Token.isn.isn_data,32);
uint8_t addr[254] = {0};
flash_read(CFG_MAC_ADDRESS,254,(uint8_t*)addr);
iKonkeAfSelfPrint("mac data::::\r\n");
iKonkeAfSelfPrintBuffer(addr,254);
}
uint8_t g_buffer[33] = {0};
uint8_t* General_Custom_Token_Get(uint8_t item)
{
flash_read(TOKEN_USER_LOCATION,USER_SIZE,(uint8_t*)&sOptunnel_Token);
switch(item)
{
case CUSTOM_ITEMS_INSTALL_CODE:
{
memcpy(g_buffer,sOptunnel_Token.install_code.install_code_data,16);
break;
}
case CUSTOM_ITEMS_MODEL_ID:
{
if(sOptunnel_Token.modeid.modeid_len != 0xff)
memcpy(g_buffer,(uint8_t*)&sOptunnel_Token.modeid,sOptunnel_Token.modeid.modeid_len+1);
else{
g_buffer[0] = 32;
memset(g_buffer+1,0xff,32);
}
break;
}
case CUSTOM_ITEMS_CMEI_CODE:
{
if(sOptunnel_Token.cmei.cmei_len != 0xff)
memcpy(g_buffer,(uint8_t*)&sOptunnel_Token.cmei,sOptunnel_Token.cmei.cmei_len+1);
else{
g_buffer[0] = 32;
memset(g_buffer+1,0xff,32);
}
break;
}
case CUSTOM_ITEMS_ISN_CODE:
{
if(sOptunnel_Token.isn.isn_len != 0xff)
memcpy(g_buffer,(uint8_t*)&sOptunnel_Token.isn,sOptunnel_Token.isn.isn_len+1);
else{
g_buffer[0] = 32;
memset(g_buffer+1,0xff,32);
}
break;
}
default:
break;
}
return g_buffer;
}
uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len)
{
if((buff == NULL)||((len == 0)))
return 0xff;
if(len > 32)
return 0xfe;
OPTTUNEL_TOKEN_ST sOptunnel_Token_temp;
uint8_t rewrite_flash = 0;
uint8_t valid_len = 0;
iKonkeAfSelfPrint("will write data len =%d:\r\n",len);
iKonkeAfSelfPrintBuffer(buff,len);
flash_read(TOKEN_USER_LOCATION,USER_SIZE,(uint8_t*)&sOptunnel_Token_temp);
switch(item)
{
case CUSTOM_ITEMS_INSTALL_CODE:
{
iKonkeAfSelfPrint("read install code:\r\n");
iKonkeAfSelfPrintBuffer(sOptunnel_Token_temp.install_code.install_code_data,16);
if(len >16)
return 0xfe;
if((!memcmp(sOptunnel_Token_temp.install_code.install_code_data,buff,len))
&&(All_Same_Data(&sOptunnel_Token_temp.install_code.install_code_data[len],0xff,16-len)))
{
//same data ,not need rewrite!
return 0;
}else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.install_code.install_code_data,0xff,16)){
flash_write(TOKEN_USER_LOCATION+INSTALL_CODE_LOC_OFFSET,len,buff);
return 0;
}else{
memset(sOptunnel_Token_temp.install_code.install_code_data,0xff,16);
memcpy(sOptunnel_Token_temp.install_code.install_code_data,buff,len);
rewrite_flash = 1;
}
break;
}
case CUSTOM_ITEMS_MODEL_ID:
{
iKonkeAfSelfPrint("read modeid data len =%d:\r\n",sOptunnel_Token_temp.modeid.modeid_len);
iKonkeAfSelfPrintBuffer(sOptunnel_Token_temp.modeid.modeid_data,32);
valid_len = (sOptunnel_Token_temp.modeid.modeid_len > len)?sOptunnel_Token_temp.modeid.modeid_len :len;
if((!memcmp(sOptunnel_Token_temp.modeid.modeid_data,buff,len))
&&(All_Same_Data(&sOptunnel_Token_temp.modeid.modeid_data[len],0xff,32-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);
return 0;
}else{
sOptunnel_Token_temp.modeid.modeid_len = len;
memset(sOptunnel_Token_temp.modeid.modeid_data,0xff,valid_len);
memcpy(sOptunnel_Token_temp.modeid.modeid_data,buff,len);
rewrite_flash = 1;
}
break;
}
case CUSTOM_ITEMS_CMEI_CODE:
{
iKonkeAfSelfPrint("read cmei data len =%d:\r\n",sOptunnel_Token_temp.cmei.cmei_len);
iKonkeAfSelfPrintBuffer(sOptunnel_Token_temp.cmei.cmei_data,32);
valid_len = (sOptunnel_Token_temp.cmei.cmei_len > len)?sOptunnel_Token_temp.cmei.cmei_len :len;
if((!memcmp(sOptunnel_Token_temp.cmei.cmei_data,buff,len))
&&(All_Same_Data(&sOptunnel_Token_temp.cmei.cmei_data[len],0xff,32-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);
return 0;
}else{
sOptunnel_Token_temp.cmei.cmei_len = len;
memset(sOptunnel_Token_temp.cmei.cmei_data,0xff,valid_len);
memcpy(sOptunnel_Token_temp.cmei.cmei_data,buff,len);
rewrite_flash = 1;
}
break;
}
case CUSTOM_ITEMS_ISN_CODE:
{
iKonkeAfSelfPrint("read isn data len =%d:\r\n",sOptunnel_Token_temp.isn.isn_len);
iKonkeAfSelfPrintBuffer(sOptunnel_Token_temp.isn.isn_data,32);
valid_len = (sOptunnel_Token_temp.isn.isn_len > len)?sOptunnel_Token_temp.isn.isn_len :len;
if((!memcmp(sOptunnel_Token_temp.isn.isn_data,buff,len))
&&(All_Same_Data(&sOptunnel_Token_temp.isn.isn_data[len],0xff,32-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);
return 0;
}else{
sOptunnel_Token_temp.isn.isn_len = len;
memset(sOptunnel_Token_temp.isn.isn_data,0xff,valid_len);
memcpy(sOptunnel_Token_temp.isn.isn_data,buff,len);
rewrite_flash = 1;
}
break;
}
default:
break;
}
if(rewrite_flash){
flash_erase(TOKEN_USER_LOCATION);
flash_write(TOKEN_USER_LOCATION,USER_SIZE,(uint8_t*)&sOptunnel_Token_temp);
Print_Flash_Data();
return 0;
}
return 0xfd;
}
void falsh_test(uint8_t count)
{
// uint8_t install_code1[] = {1,2,3,4,5,6,7,8,9,0x0a};
// uint8_t install_code2[] = {1,2,3,4,5,6,7,8,9,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10};
// if(count%2)
// General_Custom_Token_Save(CUSTOM_ITEMS_INSTALL_CODE,install_code1,sizeof(install_code1));
// else
// General_Custom_Token_Save(CUSTOM_ITEMS_INSTALL_CODE,install_code2,sizeof(install_code2));
// uint8_t *p = MODEL_ID_TOKEN_GET();
Print_Flash_Data();
// iKonkeAfSelfPrint("len =%d:\r\n",p[0]);
// iKonkeAfSelfPrintBuffer(p+1,32);
} }
...@@ -4,6 +4,70 @@ ...@@ -4,6 +4,70 @@
#include "tl_common.h" #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); nv_sts_t Gateway_IEEE_Addr_Save(addrExt_t addr);
...@@ -13,14 +77,12 @@ uint16_t MFG_Code_Get(void); ...@@ -13,14 +77,12 @@ uint16_t MFG_Code_Get(void);
nv_sts_t MFG_Code_Save(uint16_t mfgcode); nv_sts_t MFG_Code_Save(uint16_t mfgcode);
uint8_t kGetAgingTestValue(void);
nv_sts_t kSetAgingTestValue(uint8_t value);
bool kGetIndicatorNotDisturbModeFlg(void); bool kGetIndicatorNotDisturbModeFlg(void);
nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value); nv_sts_t kSetIndicatorNotDisturbModeFlg(uint8_t value);
#if 0 nv_sts_t kSetInterpanEnableFlg(uint8_t value);
void falsh_test(void); bool kGetInterpanEnableFlg(void);
#if 1
void falsh_test(uint8_t count);
#endif #endif
#endif /* _SAMPLE_LIGHT_H_ */ #endif /* _SAMPLE_LIGHT_H_ */
...@@ -22,7 +22,7 @@ uint8_t* Gateway_IEEE_Addr_Get(void) ...@@ -22,7 +22,7 @@ uint8_t* Gateway_IEEE_Addr_Get(void)
{ {
nv_sts_t st = NV_SUCC; 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"); iKonkeAfSelfPrint("flashRead:::\r\n");
DEBUG_ARRAY(1,g_Eui64GatewayAddr,sizeof(addrExt_t)); DEBUG_ARRAY(1,g_Eui64GatewayAddr,sizeof(addrExt_t));
if(st != NV_SUCC){ if(st != NV_SUCC){
...@@ -44,14 +44,14 @@ nv_sts_t Gateway_IEEE_Addr_Save(addrExt_t addr) ...@@ -44,14 +44,14 @@ nv_sts_t Gateway_IEEE_Addr_Save(addrExt_t addr)
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
addrExt_t temp_addr; 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"); iKonkeAfSelfPrint("flashRead:::temp_addr\r\n");
DEBUG_ARRAY(1,temp_addr,sizeof(addrExt_t)); DEBUG_ARRAY(1,temp_addr,sizeof(addrExt_t));
if(st == NV_SUCC){ if(st == NV_SUCC){
if(memcmp(temp_addr,addr,sizeof(addrExt_t))) 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){ }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); iKonkeAfSelfPrint("Gateway_IEEE_Addr_Save result = %d\r\n",st);
return st; return st;
...@@ -69,7 +69,7 @@ uint16_t MFG_Code_Get(void) ...@@ -69,7 +69,7 @@ uint16_t MFG_Code_Get(void)
{ {
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
uint16_t mfg_code_temp; 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(st != NV_SUCC){
mfg_code_temp = 0; mfg_code_temp = 0;
} }
...@@ -89,12 +89,12 @@ nv_sts_t MFG_Code_Save(uint16_t mfgcode) ...@@ -89,12 +89,12 @@ nv_sts_t MFG_Code_Save(uint16_t mfgcode)
nv_sts_t st = NV_SUCC; nv_sts_t st = NV_SUCC;
uint16_t mfg_code_temp; 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(st == NV_SUCC){
if(mfg_code_temp != mfgcode) 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){ }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); iKonkeAfSelfPrint("MFG_CODE_Save result = %d\r\n",st);
return st; return st;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -189,7 +189,7 @@ ...@@ -189,7 +189,7 @@
<link> <link>
<name>apps/common/00ikonke_app</name> <name>apps/common/00ikonke_app</name>
<type>2</type> <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>
<link> <link>
<name>platform/boot/8258</name> <name>platform/boot/8258</name>
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#if defined(MCU_CORE_826x) || defined(MCU_CORE_8258) || defined(MCU_CORE_8278) #if defined(MCU_CORE_826x) || defined(MCU_CORE_8258) || defined(MCU_CORE_8278)
int Tl_printf(const char *format, ...); int Tl_printf(const char *format, ...);
#endif #endif
#define SKD_LOG_ENABLE FALSE
#if (UART_PRINTF_MODE || USB_PRINTF_MODE) #if (UART_PRINTF_MODE || USB_PRINTF_MODE)
...@@ -59,6 +60,7 @@ int Tl_printf(const char *format, ...); ...@@ -59,6 +60,7 @@ int Tl_printf(const char *format, ...);
#define printf Tl_printf #define printf Tl_printf
#endif #endif
#define TRACE printf #define TRACE printf
#define DEBUG(compileFlag, ...) do{ \ #define DEBUG(compileFlag, ...) do{ \
...@@ -75,6 +77,11 @@ int Tl_printf(const char *format, ...); ...@@ -75,6 +77,11 @@ int Tl_printf(const char *format, ...);
TRACE("\n*********************************\n"); \ TRACE("\n*********************************\n"); \
} \ } \
}while(0) }while(0)
#if SKD_LOG_ENABLE
#define sdk_printf printf
#else
#define sdk_printf
#endif
#else #else
#if defined(MCU_CORE_826x) || defined(MCU_CORE_8258) || defined(MCU_CORE_8278) #if defined(MCU_CORE_826x) || defined(MCU_CORE_8258) || defined(MCU_CORE_8278)
#define printf #define printf
......
...@@ -601,7 +601,7 @@ nv_sts_t nv_resetToFactoryNew(void){ ...@@ -601,7 +601,7 @@ nv_sts_t nv_resetToFactoryNew(void){
} }
foreach(i, NV_MAX_MODULS){ 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); nv_resetModule(i);
} }
} }
......
...@@ -354,8 +354,12 @@ typedef enum{ ...@@ -354,8 +354,12 @@ typedef enum{
NV_GATEWAY_ADDR, //lmm add NV_GATEWAY_ADDR, //lmm add
NV_MFG_CODE, //lmm add NV_MFG_CODE, //lmm add
NV_AGE_TEST_STEP, //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_MFC_CODE, //lmm add
NV_NO_DISTURB_MODE, //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_ID_MAX = 0xFF,/* Item id 0xFF should not be used. */
}nv_item_t; }nv_item_t;
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
/** /**
* @brief Definition for timer event * @brief Definition for timer event
*/ */
#define TIMER_EVENT_NUM (40) #define TIMER_EVENT_NUM (24)
#define TIMER_EVENT_ENOUGH_NUM (TIMER_EVENT_NUM - 4) #define TIMER_EVENT_ENOUGH_NUM (TIMER_EVENT_NUM - 4)
/** /**
......
...@@ -83,3 +83,4 @@ ...@@ -83,3 +83,4 @@
#include "drivers/drv_putchar.h" #include "drivers/drv_putchar.h"
#include "drivers/drv_usb.h" #include "drivers/drv_usb.h"
...@@ -854,7 +854,7 @@ _CODE_BDB_ static void bdb_nodeDescRespHandler(void *arg) ...@@ -854,7 +854,7 @@ _CODE_BDB_ static void bdb_nodeDescRespHandler(void *arg)
//lmm add for getting coo manufacture code //lmm add for getting coo manufacture code
u16 manufactureCode = (u16)(rsp->node_descriptor.mcH8) <<8 | rsp->node_descriptor.mcL8; u16 manufactureCode = (u16)(rsp->node_descriptor.mcH8) <<8 | rsp->node_descriptor.mcL8;
MFG_Code_Save(manufactureCode); 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){ if(stackRev >= 21){
ss_apsRequestKeyReq_t requestKey; ss_apsRequestKeyReq_t requestKey;
TL_SETSTRUCTCONTENT(requestKey, 0); TL_SETSTRUCTCONTENT(requestKey, 0);
...@@ -926,6 +926,7 @@ _CODE_BDB_ static s32 bdb_retrieveTcLinkKeyTimeout(void *arg) ...@@ -926,6 +926,7 @@ _CODE_BDB_ static s32 bdb_retrieveTcLinkKeyTimeout(void *arg)
*/ */
_CODE_BDB_ static s32 bdb_retrieveTcLinkKeyStart(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){ if(g_bdbAttrs.tcLinkKeyExchangeMethod == TCKEY_EXCHANGE_METHOD_APSRK){
/* send node description */ /* send node description */
u8 sn = 0; u8 sn = 0;
...@@ -1108,7 +1109,6 @@ static void bdb_task(void *arg) ...@@ -1108,7 +1109,6 @@ static void bdb_task(void *arg)
g_bdbCtx.bdbAppCb->bdbcommissioningCb(g_bdbAttrs.commissioningStatus, NULL); 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); BDB_STATE_SET(status);
}else if(evt == BDB_STATE_REJOIN_DONE){ }else if(evt == BDB_STATE_REJOIN_DONE){
bdb_topLevelCommissiongConfirm(); bdb_topLevelCommissiongConfirm();
...@@ -1116,6 +1116,7 @@ static void bdb_task(void *arg) ...@@ -1116,6 +1116,7 @@ static void bdb_task(void *arg)
break; break;
case BDB_STATE_COMMISSIONING_TOUCHLINK: 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(evt == BDB_EVT_COMMISSIONING_TOUCHLINK_NO_RESP){
/* /*
* if no scan response received, start network steer * if no scan response received, start network steer
...@@ -1143,7 +1144,7 @@ static void bdb_task(void *arg) ...@@ -1143,7 +1144,7 @@ static void bdb_task(void *arg)
break; break;
case BDB_STATE_COMMISSIONING_NETWORK_STEER: 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){ if(evt == BDB_EVT_COMMISSIONING_NETWORK_STEER_RETRIEVE_TCLINK_KEY){
TL_ZB_TIMER_SCHEDULE(bdb_retrieveTcLinkKeyStart, NULL, 1000); TL_ZB_TIMER_SCHEDULE(bdb_retrieveTcLinkKeyStart, NULL, 1000);
}else if(evt == BDB_EVT_COMMISSIONING_NETWORK_STEER_PERMITJOIN){ }else if(evt == BDB_EVT_COMMISSIONING_NETWORK_STEER_PERMITJOIN){
...@@ -1156,13 +1157,11 @@ static void bdb_task(void *arg) ...@@ -1156,13 +1157,11 @@ static void bdb_task(void *arg)
#if ZB_COORDINATOR_ROLE #if ZB_COORDINATOR_ROLE
ss_securityModeSet(SS_SEMODE_CENTRALIZED); ss_securityModeSet(SS_SEMODE_CENTRALIZED);
#else #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))){ if((!g_bdbAttrs.nodeIsOnANetwork)||(ZB_IEEE_ADDR_IS_INVAILD(ss_ib.trust_center_address))){
ss_securityModeSet(SS_SEMODE_DISTRIBUTED); ss_securityModeSet(SS_SEMODE_DISTRIBUTED);
} }
#endif #endif
status = bdb_commissioningNetworkFormation(); status = bdb_commissioningNetworkFormation();
Tl_printf("sdk print,bdb_task,networ steering,status = %d\r\n",status);
if(status == BDB_STATE_IDLE){ if(status == BDB_STATE_IDLE){
/* confirm to application */ /* confirm to application */
bdb_topLevelCommissiongConfirm(); bdb_topLevelCommissiongConfirm();
...@@ -1172,6 +1171,7 @@ static void bdb_task(void *arg) ...@@ -1172,6 +1171,7 @@ static void bdb_task(void *arg)
break; break;
case BDB_STATE_COMMISSIONING_NETWORK_FORMATION: 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){ if( evt == BDB_EVT_COMMISSIONING_NETWORK_FORMATION_PERMITJOIN){
g_bdbAttrs.commissioningMode.networkSteer = 1; g_bdbAttrs.commissioningMode.networkSteer = 1;
zb_mgmtPermitJoinReq(0xfffc, BDBC_MIN_COMMISSIONING_TIME, 0x01, &sn, NULL); zb_mgmtPermitJoinReq(0xfffc, BDBC_MIN_COMMISSIONING_TIME, 0x01, &sn, NULL);
...@@ -1187,6 +1187,7 @@ static void bdb_task(void *arg) ...@@ -1187,6 +1187,7 @@ static void bdb_task(void *arg)
break; break;
case BDB_STATE_COMMISSIONING_FINDORBIND: case BDB_STATE_COMMISSIONING_FINDORBIND:
sdk_printf("sdk printf,FINDORBIND,evt = %d\r\n",evt);
if(evt == BDB_EVT_COMMISSIONING_FINDORBIND_SIMPLE_DESC_REQ){ if(evt == BDB_EVT_COMMISSIONING_FINDORBIND_SIMPLE_DESC_REQ){
bdb_commissioningFindBindSimpleDescReq(); bdb_commissioningFindBindSimpleDescReq();
}else if(evt == BDB_EVT_COMMISSIONING_FINDORBIND_FINISH){ }else if(evt == BDB_EVT_COMMISSIONING_FINDORBIND_FINISH){
...@@ -1228,7 +1229,7 @@ _CODE_BDB_ static s32 bdb_task_delay(void *arg) ...@@ -1228,7 +1229,7 @@ _CODE_BDB_ static s32 bdb_task_delay(void *arg)
_CODE_BDB_ void bdb_zdoStartDevCnf(zdo_start_device_confirm_t *startDevCnf){ _CODE_BDB_ void bdb_zdoStartDevCnf(zdo_start_device_confirm_t *startDevCnf){
u32 evt = BDB_EVT_IDLE; u32 evt = BDB_EVT_IDLE;
u8 state = BDB_STATE_GET(); 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){ switch(state){
case BDB_STATE_IDLE: case BDB_STATE_IDLE:
/* for rejoin indication by the stack */ /* for rejoin indication by the stack */
...@@ -1287,7 +1288,6 @@ _CODE_BDB_ void bdb_zdoStartDevCnf(zdo_start_device_confirm_t *startDevCnf){ ...@@ -1287,7 +1288,6 @@ _CODE_BDB_ void bdb_zdoStartDevCnf(zdo_start_device_confirm_t *startDevCnf){
#endif #endif
case BDB_STATE_COMMISSIONING_NETWORK_STEER: 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){ if(startDevCnf->status == SUCCESS){
//g_bdbAttrs.commissioningStatus = BDB_COMMISSION_STA_SUCCESS; //g_bdbAttrs.commissioningStatus = BDB_COMMISSION_STA_SUCCESS;
g_bdbAttrs.nodeIsOnANetwork = 1; g_bdbAttrs.nodeIsOnANetwork = 1;
...@@ -1454,7 +1454,7 @@ _CODE_BDB_ static u8 bdb_topLevelCommissiongConfirm(void){ ...@@ -1454,7 +1454,7 @@ _CODE_BDB_ static u8 bdb_topLevelCommissiongConfirm(void){
*/ */
_CODE_BDB_ static u8 bdb_topLevelCommissioning(u8 target){ _CODE_BDB_ static u8 bdb_topLevelCommissioning(u8 target){
/* restore persistent ZigBee data */ /* 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){ if(BDB_STATE_GET() != BDB_STATE_IDLE || g_bdbAttrs.commissioningStatus == BDB_COMMISSION_STA_IN_PROGRESS){
return BDB_STATE_COMMISSIONING_BUSY; 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