Commit e31877dc authored by limm's avatar limm

V1.1

parent 4f207db8
...@@ -101,7 +101,7 @@ extern "C" { ...@@ -101,7 +101,7 @@ extern "C" {
#endif #endif
#define ZCL_GROUP_SUPPORT 1 #define ZCL_GROUP_SUPPORT 1
#define ZCL_SCENE_SUPPORT 1 #define ZCL_SCENE_SUPPORT 1
#define ZCL_OTA_SUPPORT 1 #define ZCL_OTA_SUPPORT 0
#define ZCL_PRIVATE_CLUSTER_FCC0_SUPPORT 1 #define ZCL_PRIVATE_CLUSTER_FCC0_SUPPORT 1
#if TOUCHLINK_SUPPORT #if TOUCHLINK_SUPPORT
#define ZCL_ZLL_COMMISSIONING_SUPPORT 1 #define ZCL_ZLL_COMMISSIONING_SUPPORT 1
......
...@@ -9,11 +9,33 @@ ...@@ -9,11 +9,33 @@
#include "ikk-uart.h" #include "ikk-uart.h"
#include "ikk-relay.h" #include "ikk-relay.h"
#include "ikk-led.h" #include "ikk-led.h"
#include "ikk-ota.h"
#include "ikk-command.h" #include "ikk-command.h"
#include "ikk-common-utils.h" #include "ikk-common-utils.h"
#include "ikk-interpan.h" #include "ikk-interpan.h"
#include "ikk-pwm.h" #include "ikk-pwm.h"
#include "ikk-module-def.h"
//#define SINGLE_LIGHT_PANEL
//#define DUAL_LIGHT_PANEL
//#define THREE_LIGHT_PANEL
#define FOUR_LIGHT_PANEL
#ifdef SINGLE_LIGHT_PANEL
#define g_ucRelayTotalNum 1
#endif
#ifdef DUAL_LIGHT_PANEL
#define g_ucRelayTotalNum 2
#endif
#ifdef THREE_LIGHT_PANEL
#define g_ucRelayTotalNum 3
#endif
#ifdef FOUR_LIGHT_PANEL
#define g_ucRelayTotalNum 4
#endif
#define ZERO_PIN GPIO_PA0 #define ZERO_PIN GPIO_PA0
#define RELAY1_PIN GPIO_PC0 #define RELAY1_PIN GPIO_PC0
...@@ -138,6 +160,7 @@ AttributeChangeConfSt attribte_change_list[] = { ...@@ -138,6 +160,7 @@ AttributeChangeConfSt attribte_change_list[] = {
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};
#define GET_MAX_ENDPOINT(relay_num) (relay_num)
static uint8_t g_u8NoDisturbModeMinLevel = 0x01; static uint8_t g_u8NoDisturbModeMinLevel = 0x01;
static uint8_t g_u8NoDisturbModeMaxLevel = 0x64; static uint8_t g_u8NoDisturbModeMaxLevel = 0x64;
...@@ -162,7 +185,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status); ...@@ -162,7 +185,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status);
void kOTAMoudleUserCallback(OTAStatusEnum status); void kOTAMoudleUserCallback(OTAStatusEnum status);
#endif #endif
#define UART_ENABLE false #define UART_ENABLE true
void kUserRelayLedCallback(RelayStatusSt status); void kUserRelayLedCallback(RelayStatusSt status);
void kRadarDetectInit(void); void kRadarDetectInit(void);
void kRadarLedTragger(void); void kRadarLedTragger(void);
...@@ -184,17 +207,13 @@ AttributeChangeConfSt g_ClusterAttributeConfList[] = { ...@@ -184,17 +207,13 @@ AttributeChangeConfSt g_ClusterAttributeConfList[] = {
{ZCL_CLUSTER_GEN_ON_OFF, ZCL_ATTRID_ONOFF, pOnOffClusterAttributeChangeCallback}, {ZCL_CLUSTER_GEN_ON_OFF, ZCL_ATTRID_ONOFF, pOnOffClusterAttributeChangeCallback},
}; };
static bool kEndpointIsValid(uint8_t endpoint);
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)
{ {
iKonkeAfSelfPrint("\r\n************************************************\r\n"); iKonkeAfSelfPrint("\r\n************************************************\r\n");
iKonkeAfSelfPrint("\r\n****************APP Init***********************\r\n"); iKonkeAfSelfPrint("\r\n****************APP Init***********************\r\n");
// iKonkeAfSelfPrint("xxx Reboot Reason: R-INFO(0x%x: %p), R-EXTEND(0x%x: %p) xxx\r\n"
// , halGetResetInfo(), halGetResetString()
// , halGetExtendedResetInfo(), halGetExtendedResetString());
// iKonkeAfSelfPrint("xxx Network Status: %d, systime: %d xxx\r\n", emberAfNetworkState()
// , halCommonGetInt32uMillisecondTick());
iKonkeAfSelfPrint("\r\n************************************************\r\n"); iKonkeAfSelfPrint("\r\n************************************************\r\n");
#if 1 #if 1
kk_err_t err = kBtnModuleInit(g_btnConfList, sizeof(g_btnConfList) / sizeof(BtnConfSt), kUserButtonAcitonCallback); kk_err_t err = kBtnModuleInit(g_btnConfList, sizeof(g_btnConfList) / sizeof(BtnConfSt), kUserButtonAcitonCallback);
...@@ -215,7 +234,7 @@ void App_Init(void) ...@@ -215,7 +234,7 @@ void App_Init(void)
err = kRelayModuleInit(ZERO_PIN, CHECKED_ZERO_DELAY_ON_TIME_MS, CHECKED_ZERO_DELAY_OFF_TIME_MS \ err = kRelayModuleInit(ZERO_PIN, CHECKED_ZERO_DELAY_ON_TIME_MS, CHECKED_ZERO_DELAY_OFF_TIME_MS \
, EZAP_LOW, g_relayConfList, sizeof(g_relayConfList)/sizeof(RelayChannelConfSt), kUserRelayLedCallback); , EZAP_LOW, g_relayConfList, sizeof(g_relayConfList)/sizeof(RelayChannelConfSt), kUserRelayLedCallback);
if( err != KET_OK ) { if( err != KET_OK ) {
iKonkeAfSelfPrint("Err: Led Module Init failed(%d)!!\r\n", err); iKonkeAfSelfPrint("Err: ZERO Module Init failed(%d)!!\r\n", err);
} }
#if UART_ENABLE #if UART_ENABLE
uint8_t recv_header[] = {0xAA,0X55}; uint8_t recv_header[] = {0xAA,0X55};
...@@ -228,7 +247,7 @@ void App_Init(void) ...@@ -228,7 +247,7 @@ void App_Init(void)
kOTAMoudleInit(kOTAMoudleUserCallback, LED_ALL_ID); kOTAMoudleInit(kOTAMoudleUserCallback, LED_ALL_ID);
#endif #endif
#if Z30_DEVICE_AGING_ENABLE #if Z30_DEVICE_AGING_ENABLE
kFactoryTestInit(kUserFactorTestPollCallback, g_factoryTestConfList, sizeof(g_factoryTestConfList)/ sizeof(FactoryTestConfSt)); kFactoryTestInit(kUserFactorTestPollCallback, g_factoryTestConfList, sizeof(g_factoryTestConfList)/ sizeof(FactoryTestConfSt),LED_ALL_ID);
#endif #endif
// init the private cluster protocol module. // init the private cluster protocol module.
err = kOptTunnelModuleInit(kUserOODMessageIncoming); err = kOptTunnelModuleInit(kUserOODMessageIncoming);
...@@ -254,8 +273,22 @@ void Test(void ) ...@@ -254,8 +273,22 @@ void Test(void )
} }
void kUserNetworkExitCompleteCallback() void kUserNetworkExitCompleteCallback()
{ {
bool bIsAllOffFlg = true;
for (uint8_t i = 1; i <= GET_MAX_ENDPOINT(g_ucRelayTotalNum); i++){
if (kZclOnOffClusterServerOnOffGet(i) == EOOS_ON){
bIsAllOffFlg = false;
break;
}
}
SYSTEM_RESET(); if (bIsAllOffFlg == true){
if (kGetFactoryTestStatus() == FTS_NORMAL ){
SYSTEM_RESET();
}
}
if (kGetFactoryTestStatus() != FTS_NORMAL ){
kNwkJoiningStart(NWK_STEERING_TIMEOUT_MS, JoinCompleteCallback);
}
} }
static bool kClustePeriodReportCheckIsSet(uint8_t endpoint) static bool kClustePeriodReportCheckIsSet(uint8_t endpoint)
{ {
...@@ -328,7 +361,7 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst ) ...@@ -328,7 +361,7 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst )
{ {
iKonkeAfSelfPrint("#####Enter Leave\r\n"); iKonkeAfSelfPrint("#####Enter Leave\r\n");
kLedOptTrigger((uint8_t)LED_ALL_ID, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS \ kLedOptTrigger((uint8_t)LED_ALL_ID, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS \
,LED_FAST_BLINK_CONTINUE_TIME_MS/(LED_FAST_BLINK_ON_TIME_MS+LED_FAST_BLINK_ON_TIME_MS), LED_ON, LED_IGNORE); ,LED_FAST_BLINK_CONTINUE_TIME_MS/(LED_FAST_BLINK_ON_TIME_MS+LED_FAST_BLINK_OFF_TIME_MS), LED_ON, LED_IGNORE);
//关闭勿扰模式 //关闭勿扰模式
kSetIndicatorNotDisturbModeFlg(false); kSetIndicatorNotDisturbModeFlg(false);
...@@ -387,8 +420,8 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -387,8 +420,8 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
{ {
iKonkeAfSelfPrint("kUserButton: ButtonId(%d), Action(%d),%d\r\n", button_id, action,kGetFactoryTestStatus()); iKonkeAfSelfPrint("kUserButton: ButtonId(%d), Action(%d),%d\r\n", button_id, action,kGetFactoryTestStatus());
if ( kGetFactoryTestStatus() == FTS_AGING_4HOU || kGetFactoryTestStatus() == FTS_AGING_DONE \ if ( kGetFactoryTestStatus() == FTS_AGING_4HOU || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS \ || kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS \
|| kNwkIsExiting() == true){ || kNwkIsExiting() == true){
//未老化完成,单击按键不操作继电器 //未老化完成,单击按键不操作继电器
return; return;
...@@ -401,6 +434,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -401,6 +434,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
{ {
case EBA_CLICK: case EBA_CLICK:
{ {
iKonkeAfSelfPrint("INTO KEY_SYS_ID EBA_CLICK kNwkGetCurrentStatus = (%d)\r\n",kNwkGetCurrentStatus());
Key_Press_Test_Flag[0] = 1; Key_Press_Test_Flag[0] = 1;
if( kNwkGetCurrentStatus() == ENS_ONLINE ) { // report connected! if( kNwkGetCurrentStatus() == ENS_ONLINE ) { // report connected!
...@@ -411,6 +445,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -411,6 +445,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
else if(kNwkGetCurrentStatus() == ENS_LEAVED) else if(kNwkGetCurrentStatus() == ENS_LEAVED)
{ {
kNwkFactoryReset(false); kNwkFactoryReset(false);
iKonkeAfSelfPrint("Start Joining...........\r\n");
kNwkJoiningStart(NWK_STEERING_TIMEOUT_MS,JoinCompleteCallback); //开启组网 kNwkJoiningStart(NWK_STEERING_TIMEOUT_MS,JoinCompleteCallback); //开启组网
} }
} }
...@@ -445,6 +480,15 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -445,6 +480,15 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
return; return;
} }
if(kGetFactoryTestStatus() == FTS_SINGLE_BOARD_TEST){
if( kNwkGetCurrentStatus() == ENS_LEAVED ) { // report connected!
if(kLedIsBlinking(LED_ALL_ID) != true){
kLedOptTrigger(LED_ALL_ID, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, 10, LED_ON, LED_OFF);
iKonkeAfSelfPrint("######FTS_SINGLE_BOARD_TEST Blinking 10 times######\r\n");
}
}
}
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;
...@@ -453,9 +497,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action ) ...@@ -453,9 +497,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
|| (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;
lastTimeMS = currentTimeMS; lastTimeMS = currentTimeMS;
if ( kGetOTAStatus() == OTA_NORMAL){ kLedOptTrigger(LED_ALL_ID, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, 1, LED_ON, LED_OFF);
kLedOptTrigger(LED_ALL_ID, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, 1, LED_ON, LED_OFF);
}
}else { }else {
//second times long press //second times long press
if (currentTimeMS - lastTimeMS < MAX_FIRST_USER_KEY_LEAVE_NWK_INTERVAL_TIME_MS){ if (currentTimeMS - lastTimeMS < MAX_FIRST_USER_KEY_LEAVE_NWK_INTERVAL_TIME_MS){
...@@ -535,8 +577,8 @@ void kUserRelayLedCallback(RelayStatusSt status) ...@@ -535,8 +577,8 @@ void kUserRelayLedCallback(RelayStatusSt status)
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[0] == true \ if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[0] == true \
|| kGetFactoryTestStatus() == FTS_AGING_4HOU \ || kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
power_on_sync[0] = false; power_on_sync[0] = false;
if (status.opt == EZAO_OFF){ if (status.opt == EZAO_OFF){
kLEDOffAction(LED1_ID); kLEDOffAction(LED1_ID);
...@@ -557,8 +599,8 @@ void kUserRelayLedCallback(RelayStatusSt status) ...@@ -557,8 +599,8 @@ void kUserRelayLedCallback(RelayStatusSt status)
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[1] == true \ if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[1] == true \
|| kGetFactoryTestStatus() == FTS_AGING_4HOU \ || kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
power_on_sync[1] = false; power_on_sync[1] = false;
if (status.opt == EZAO_OFF){ if (status.opt == EZAO_OFF){
kLEDOffAction(LED2_ID); kLEDOffAction(LED2_ID);
...@@ -579,8 +621,8 @@ void kUserRelayLedCallback(RelayStatusSt status) ...@@ -579,8 +621,8 @@ void kUserRelayLedCallback(RelayStatusSt status)
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[2] == true \ if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[2] == true \
|| kGetFactoryTestStatus() == FTS_AGING_4HOU \ || kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
power_on_sync[2] = false; power_on_sync[2] = false;
if (status.opt == EZAO_OFF){ if (status.opt == EZAO_OFF){
kLEDOffAction(LED3_ID); kLEDOffAction(LED3_ID);
...@@ -601,8 +643,8 @@ void kUserRelayLedCallback(RelayStatusSt status) ...@@ -601,8 +643,8 @@ void kUserRelayLedCallback(RelayStatusSt status)
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[3] == true \ if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[3] == true \
|| kGetFactoryTestStatus() == FTS_AGING_4HOU \ || kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
power_on_sync[3] = false; power_on_sync[3] = false;
if (status.opt == EZAO_OFF){ if (status.opt == EZAO_OFF){
kLEDOffAction(LED4_ID); kLEDOffAction(LED4_ID);
...@@ -661,6 +703,7 @@ static void kSetLedStatus(LED_ID_ENUM id) ...@@ -661,6 +703,7 @@ static void kSetLedStatus(LED_ID_ENUM id)
//恢复继电器的LED状态 //恢复继电器的LED状态
if (id == LED_ALL_ID) if (id == LED_ALL_ID)
{ {
iKonkeAfSelfPrint("##########kSetLedStatus LED_ALL_ID111111111111111111\r\n");
kLedOptTrigger(LED_ALL_ID, 0, 0, 0, LED_OFF, LED_IGNORE); kLedOptTrigger(LED_ALL_ID, 0, 0, 0, LED_OFF, LED_IGNORE);
for (uint8_t i = 1; i <= Support_Endpoint_Num; i++){ for (uint8_t i = 1; i <= Support_Endpoint_Num; i++){
if (kLedIsBlinking(GET_LED_ID_BY_ENDPOINT(i, Support_Endpoint_Num)) == false){ if (kLedIsBlinking(GET_LED_ID_BY_ENDPOINT(i, Support_Endpoint_Num)) == false){
...@@ -818,6 +861,7 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, uint16_t clusterId, uint1 ...@@ -818,6 +861,7 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, uint16_t clusterId, uint1
return true; return true;
} }
//Auth: han_frc.20220105.
kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_in_out[], uint8_t *length_in_out ) kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_in_out[], uint8_t *length_in_out )
{ {
if( NULL == args_in_out || NULL == length_in_out ) { if( NULL == args_in_out || NULL == length_in_out ) {
...@@ -831,59 +875,223 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i ...@@ -831,59 +875,223 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
iKonkeAfSelfPrint("--------------------------------------\r\n"); iKonkeAfSelfPrint("--------------------------------------\r\n");
switch(opcode) { switch(opcode) {
case (0x00): // get the device snap. case (0x00): // get the device snap.
{ {
uint8_t command = args_in_out[0];
if (command == 0x00){
OnOffStatusEnum status1= kZclOnOffClusterServerOnOffGet(1);
OnOffStatusEnum status2= kZclOnOffClusterServerOnOffGet(2);
OnOffStatusEnum status3= kZclOnOffClusterServerOnOffGet(3);
#ifdef FOUR_LIGHT_PANEL
OnOffStatusEnum status4= kZclOnOffClusterServerOnOffGet(4);
#endif
uint8_t channelValue1 = (status1 == EOOS_ON)?1:(status1 == EOOS_UNKNOW?0xFF:0);
uint8_t channelValue2 = (status2 == EOOS_ON)?1:(status2 == EOOS_UNKNOW?0xFF:0);
uint8_t channelValue3 = (status3 == EOOS_ON)?1:(status3 == EOOS_UNKNOW?0xFF:0);
#ifdef FOUR_LIGHT_PANEL
uint8_t channelValue4 = (status4 == EOOS_ON)?1:(status4 == EOOS_UNKNOW?0xFF:0);
#endif
if (g_ucRelayTotalNum == 1){
channelValue2 = 0xff; //0xff为私有协议中无效值
channelValue3 = 0xff;
}else if (g_ucRelayTotalNum == 2){
channelValue3 = 0xff;
}
args_in_out[0] = 0x00; args_in_out[0] = 0x00;
args_in_out[1] = kZclOnOffClusterServerOnOffGet(1); args_in_out[1] = channelValue1;
args_in_out[2] = kZclOnOffClusterServerOnOffGet(2); args_in_out[2] = channelValue2;
args_in_out[3] = kZclOnOffClusterServerOnOffGet(3); args_in_out[3] = channelValue3;
args_in_out[4] = kZclOnOffClusterServerOnOffGet(4); #ifndef FOUR_LIGHT_PANEL
args_in_out[4] = kGetIndicatorNotDisturbModeFlg();
iKonkeAfSelfPrint("OOOOOOPCODE: 1(%d), 2(%d), 3(%d)\r\n", args_in_out[1], args_in_out[2], args_in_out[3]);
*length_in_out = 5;
#endif
#ifdef FOUR_LIGHT_PANEL
args_in_out[4] = channelValue4;
args_in_out[5] = kGetIndicatorNotDisturbModeFlg(); args_in_out[5] = kGetIndicatorNotDisturbModeFlg();
iKonkeAfSelfPrint("OOOOOOPCODE: 1(%d), 2(%d), 3(%d),4(%d),5(%d)\r\n", args_in_out[1], args_in_out[2], args_in_out[3],args_in_out[4],args_in_out[5]); iKonkeAfSelfPrint("OOOOOOPCODE: 1(%d), 2(%d), 3(%d)\r\n", args_in_out[1], args_in_out[2], args_in_out[3]);
*length_in_out = 6; *length_in_out = 6;
break; #endif
} }else if (command == 0x01){
case (0xFE): args_in_out[0] = ERR_NO_NONE;
{ #ifndef FOUR_LIGHT_PANEL
//set disturb mode OnOffCtrlEnum onoffctrl[3] = {0};
uint8_t mode = args_in_out[0]; onoffctrl[0] = args_in_out[1];
if (mode != 0x00 && mode != 0x01){ onoffctrl[1] = args_in_out[2];
onoffctrl[2] = args_in_out[3];
uint8_t disturb_mode = args_in_out[4];
#endif
#ifdef FOUR_LIGHT_PANEL
OnOffCtrlEnum onoffctrl[4] = {0};
onoffctrl[0] = args_in_out[1];
onoffctrl[1] = args_in_out[2];
onoffctrl[2] = args_in_out[3];
onoffctrl[3] = args_in_out[4];
uint8_t disturb_mode = args_in_out[5];
#endif
for (uint8_t channelID = 1; channelID <= g_ucRelayTotalNum; channelID++){
if (kEndpointIsValid(channelID)){ //通道有效
if (onoffctrl[channelID - 1] != EOOC_OFF && onoffctrl[channelID - 1] != EOOC_ON && onoffctrl[channelID - 1] != EOOC_TOGGLE){
args_in_out[0] = ERR_NO_COMMAND_FORMAT;
args_in_out[channelID] = 0xff;
}else{
uint8_t status = onoffctrl[channelID - 1];
if (onoffctrl[channelID - 1] == EOOC_TOGGLE){ //对翻转需要转换成开/关
status = kZclOnOffClusterServerOnOffGet(channelID) == EOOC_ON?EOOC_OFF:EOOC_ON;
}
kZclClusterSetPermitReportInfo(channelID,ZCL_CLUSTER_GEN_ON_OFF,true,false);
kZclOnOffClusterServerOnOffControl(channelID, status);
args_in_out[channelID] = status;
}
}else{
args_in_out[channelID] = 0xff;
}
}
if (disturb_mode != 0x00 && disturb_mode != 0x01){
args_in_out[0] = ERR_NO_COMMAND_FORMAT; args_in_out[0] = ERR_NO_COMMAND_FORMAT;
}else { #ifndef FOUR_LIGHT_PANEL
args_in_out[4] = 0xff;
#endif
#ifdef FOUR_LIGHT_PANEL
args_in_out[5] = 0xff;
#endif
}else{
//存储勿扰标志 //存储勿扰标志
kSetIndicatorNotDisturbModeFlg(mode); kSetIndicatorNotDisturbModeFlg(disturb_mode);
////State Sync//// ////State Sync////
if (kLedIsBlinking(LED_ALL_ID) != true) { if (kLedIsBlinking(LED_ALL_ID) != true) {
kSetLedStatus(LED_ALL_ID); kSetLedStatus(LED_ALL_ID);
} }
#ifndef FOUR_LIGHT_PANEL
args_in_out[4] = kGetIndicatorNotDisturbModeFlg();
}
*length_in_out = 5;
#endif
#ifdef FOUR_LIGHT_PANEL
args_in_out[5] = kGetIndicatorNotDisturbModeFlg();
}
*length_in_out = 6;
#endif
iKonkeAfSelfPrint("OOOOOOPCODE: 1(%d), 2(%d), 3(%d)\r\n", args_in_out[1], args_in_out[2], args_in_out[3]);
}
break;
}
case (0x10): //on/off control
{
uint8_t channelID = channel;
uint8_t onOffStatus = args_in_out[0];
iKonkeAfSelfPrint("OOOOPCODE ONOFF: channel[%d], onoff[%d]\r\n", channelID, onOffStatus);
if (kEndpointIsValid(channelID)){ //通道有效
if (onOffStatus != EOOC_OFF && onOffStatus != EOOC_ON && onOffStatus != EOOC_TOGGLE){
args_in_out[0] = ERR_NO_COMMAND_FORMAT;
}else { //下发值正确
args_in_out[0] = ERR_NO_NONE; args_in_out[0] = ERR_NO_NONE;
if (channelID != 0xFF){ //网关单路下发控制
uint8_t status = onOffStatus;
if (onOffStatus == EOOC_TOGGLE){ //对翻转需要转换成开/关
status = kZclOnOffClusterServerOnOffGet(channelID) == EOOC_ON?EOOC_OFF:EOOC_ON;
}
kZclClusterSetPermitReportInfo(channelID,ZCL_CLUSTER_GEN_ON_OFF,true,false);
//commandOnOffClusterCallback(status, channelID, true, false);
kZclOnOffClusterServerOnOffControl(channelID, status);
}else { //全部
if (onOffStatus == EOOC_TOGGLE){//全部通道翻转
for (uint8_t i = 1; i <= GET_MAX_ENDPOINT(g_ucRelayTotalNum); i++){
kZclClusterSetPermitReportInfo(i,ZCL_CLUSTER_GEN_ON_OFF,true,false);
kZclOnOffClusterServerOnOffControl(i, EOOC_TOGGLE);
}
}else {
for (uint8_t i = 1; i <= GET_MAX_ENDPOINT(g_ucRelayTotalNum); i++){
kZclClusterSetPermitReportInfo(i,ZCL_CLUSTER_GEN_ON_OFF,true,false);
kZclOnOffClusterServerOnOffControl(i, onOffStatus);
}
}
}
} }
iKonkeAfSelfPrint("Disturb Mode(%d)\r\n", mode); }else {
args_in_out[1] = mode; args_in_out[0] = ERR_NO_COMMAND_FORMAT;
*length_in_out = 2;
break;
} }
case (0xFF):
{ args_in_out[1] = onOffStatus;//下发命令
uint8_t permitJoinTimeS = args_in_out[0]; //unit:s *length_in_out = 2;
iKonkeAfSelfPrint("###Opcode is channel(%d) JoinPermitTime(0x%X)!!\r\n",channel, permitJoinTimeS); //iKonkeAfSelfPrintln("2.retStatus[%d], channel[%d], onoff[%d]",retStatus, channelID, onOffStatus);
//路由协同组网,黄灯闪烁(OTA升级)时不协同组网闪灯 break;
if (kLedIsBlinking(LED_ALL_ID) != true }
&& permitJoinTimeS != 0 case (0xE4):
&& kNwkGetCurrentStatus() != ENS_JOINING){ {
iKonkeAfSelfPrint("####LED Blink\r\n"); uint8_t u8NetworkSteering_ch = args_in_out[0];
kLedOptTrigger(LED_ALL_ID, LED_SLOW_BLINK_ON_TIME_MS, LED_SLOW_BLINK_OFF_TIME_MS, uint16_t u16NetworkSteering_panid = ((uint16_t)args_in_out[1] << 8) | ((uint16_t)args_in_out[2]);
permitJoinTimeS * 1000/(LED_SLOW_BLINK_ON_TIME_MS+LED_SLOW_BLINK_OFF_TIME_MS), LED_ON, LED_OFF);
}else if (kLedIsBlinking(LED2_ID) == true kSetNetworkSteeringInfo(u8NetworkSteering_ch, u16NetworkSteering_panid);
&& permitJoinTimeS == 0 args_in_out[1] = u8NetworkSteering_ch;
&& kNwkGetCurrentStatus() != ENS_JOINING){ args_in_out[2] = (uint8_t)(u16NetworkSteering_panid >> 8);
kLedOptTrigger(LED_ALL_ID, 0, 0, 0, LED_OFF, LED_IGNORE); args_in_out[3] = (uint8_t)(u16NetworkSteering_panid);
// kLEDOffAction(LED_ALL_ID);
args_in_out[0] = ERR_NO_NONE;
if (kGetFactoryTestStatus() == FTS_NORMAL){
args_in_out[0] = ERR_NO_COMMAND_FORMAT;
}
*length_in_out = 4;
break;
}
case (0xE5):
{
kSetAgingTestDone();
args_in_out[0] = ERR_NO_NONE;
*length_in_out = 1;
break;
}
case (0xFE):
{
//set disturb mode
uint8_t mode = args_in_out[0];
if (mode != 0x00 && mode != 0x01){
args_in_out[0] = ERR_NO_COMMAND_FORMAT;
}else {
//存储勿扰标志
kSetIndicatorNotDisturbModeFlg(mode);
////State Sync////
if (kLedIsBlinking(LED_ALL_ID) != true) {
kSetLedStatus(LED_ALL_ID); kSetLedStatus(LED_ALL_ID);
} }
return KET_NO_RESPONSE; args_in_out[0] = ERR_NO_NONE;
} }
iKonkeAfSelfPrint("Disturb Mode(%d)\r\n", mode);
args_in_out[1] = mode;
*length_in_out = 2;
break;
}
case (0xFF):
{
int8_t permitJoinTimeS = args_in_out[0]; //unit:s
iKonkeAfSelfPrint("###Opcode is channel(%d) JoinPermitTime(0x%X)!!\r\n",channel, permitJoinTimeS);
//路由协同组网,黄灯闪烁(OTA升级)时不协同组网闪灯
if (kLedIsBlinking(LED_ALL_ID) != true
&& permitJoinTimeS != 0
&& kNwkGetCurrentStatus() != ENS_JOINING){
iKonkeAfSelfPrint("####LED Blink\r\n");
kLedOptTrigger(LED_ALL_ID, LED_SLOW_BLINK_ON_TIME_MS, LED_SLOW_BLINK_OFF_TIME_MS,
permitJoinTimeS * 1000/(LED_SLOW_BLINK_ON_TIME_MS+LED_SLOW_BLINK_OFF_TIME_MS), LED_ON, LED_OFF);
}else if (kLedIsBlinking(LED_ALL_ID) == true
&& permitJoinTimeS == 0
&& kNwkGetCurrentStatus() != ENS_JOINING){
iKonkeAfSelfPrint("####LED Blink over\r\n");
kLedOptTrigger(LED_ALL_ID, 0, 0, 0, LED_OFF, LED_IGNORE);
// kLEDOffAction(LED_ALL_ID);
kSetLedStatus(LED_ALL_ID);
}
return KET_NO_RESPONSE;
}
default: { default: {
iKonkeAfSelfPrint("Err: opcode is not exist(%d:%X)!!\r\n", channel, opcode); iKonkeAfSelfPrint("Err: opcode is not exist(%d:%X)!!\r\n", channel, opcode);
args_in_out[0] = ERR_NO_OPCODE; args_in_out[0] = ERR_NO_OPCODE;
...@@ -895,6 +1103,23 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i ...@@ -895,6 +1103,23 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
return KET_OK; return KET_OK;
} }
//Auth: han_frc.20220105.
static bool kEndpointIsValid(uint8_t endpoint)
{
bool ret = false;
if (endpoint == 1){
ret = true;
}else if (endpoint == 2 && (g_ucRelayTotalNum == 2 || g_ucRelayTotalNum == 3 || g_ucRelayTotalNum == 4)){
ret = true;
}else if (endpoint == 3 && (g_ucRelayTotalNum == 3 || g_ucRelayTotalNum == 4)){
ret = true;
}else if (endpoint == 4 && g_ucRelayTotalNum == 4){
ret = true;
}else if (endpoint == 0xFF){
ret = true;
}
return ret;
}
static void kLEDOffAction(LED_ID_ENUM led_id) static void kLEDOffAction(LED_ID_ENUM led_id)
{ {
...@@ -991,7 +1216,7 @@ s32 kkSystemSetUpEventHandler(void *arg ) ...@@ -991,7 +1216,7 @@ s32 kkSystemSetUpEventHandler(void *arg )
for (uint8_t i = 1; i <= Support_Endpoint_Num; i++){ for (uint8_t i = 1; i <= Support_Endpoint_Num; i++){
if(st == NV_SUCC) if(st == NV_SUCC)
{ {
relayStatusBuffer[i-1] = g_zcl_onOffAttrs[i-1].onOff; relayStatusBuffer[i-1] = false;
} }
power_on_sync[i - 1] = true; power_on_sync[i - 1] = true;
iKonkeAfSelfPrint("###########EP(%d), status(%d)\r\n", i, relayStatusBuffer[i-1]); iKonkeAfSelfPrint("###########EP(%d), status(%d)\r\n", i, relayStatusBuffer[i-1]);
...@@ -1008,6 +1233,14 @@ s32 kkSystemSetUpEventHandler(void *arg ) ...@@ -1008,6 +1233,14 @@ s32 kkSystemSetUpEventHandler(void *arg )
#if UART_ENABLE #if UART_ENABLE
kInterPanMoudleInit(kUserInterPanMsgInComingPaser); kInterPanMoudleInit(kUserInterPanMsgInComingPaser);
#endif #endif
addrExt_t addr1;
zb_getLocalExtAddr(addr1);
SWAP_EUI64((uint8_t *)addr1);//取反
iKonkeAfSelfPrint("mac1 :\r\n");
iKonkeAfSelfPrintBuffer(addr1,8);
return -1; return -1;
} }
...@@ -1058,18 +1291,18 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status) ...@@ -1058,18 +1291,18 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status)
//如果有单独系统LED也需要都点亮 //如果有单独系统LED也需要都点亮
// LED_OPT_ON(LED_SYS_ID); // LED_OPT_ON(LED_SYS_ID);
break; break;
case FTS_AGING_FORCE_EXIT: case FTS_FORCE_EXIT:
iKonkeAfSelfPrint("############## FactoryTestSatus is FTS_AGING_FORCE_EXIT\r\n"); iKonkeAfSelfPrint("############## FactoryTestSatus is FTS_FORCE_EXIT\r\n");
//按键强制退老化,快闪 //按键强制退老化,快闪
kLedOptTrigger(LED_ALL_ID, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, BLINK_DEAD, LED_ON, LED_IGNORE); kLedOptTrigger(LED_ALL_ID, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, BLINK_DEAD, LED_ON, LED_IGNORE);
break; break;
case FTS_AGING_WAITING: case FTS_WAITING_RELEASED:
break; break;
case FTS_AGING_FIRST_LONG_PRESSED: case FTS_FIRST_LONG_PRESSED:
//快闪一次,指示第一次长按有效 //快闪一次,指示第一次长按有效
kLedOptTrigger(LED_ALL_ID, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, 1, LED_ON, LED_IGNORE); kLedOptTrigger(LED_ALL_ID, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, 1, LED_ON, LED_IGNORE);
break; break;
case FTS_AGING_FORCE_REBOOT: case FTS_FORCE_REBOOT:
SYSTEM_RESET(); SYSTEM_RESET();
break; break;
default: default:
...@@ -1149,8 +1382,8 @@ s32 kRadarCheckEventHandler(void *arg) ...@@ -1149,8 +1382,8 @@ s32 kRadarCheckEventHandler(void *arg)
{ {
if (kGetFactoryTestStatus() == FTS_AGING_4HOU \ if (kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
return 0; return 0;
} }
...@@ -1174,8 +1407,8 @@ s32 kRadarLedEventHandler(void *arg) ...@@ -1174,8 +1407,8 @@ s32 kRadarLedEventHandler(void *arg)
{ {
if (kGetFactoryTestStatus() == FTS_AGING_4HOU \ if (kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \ || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \ || kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){ || kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
return 0; return 0;
} }
...@@ -1324,6 +1557,8 @@ void UartMsgProcessHandle(UMsgNodeSt *pMsgNode ) ...@@ -1324,6 +1557,8 @@ void UartMsgProcessHandle(UMsgNodeSt *pMsgNode )
case UART_MSG_QUERY_FACTORY_INFO_OPCODE: case UART_MSG_QUERY_FACTORY_INFO_OPCODE:
case UART_MSG_ENTER_FACTORY_TEST_OPCODE: case UART_MSG_ENTER_FACTORY_TEST_OPCODE:
case UART_MSG_ONOFF_SWITCH_OPCODE: case UART_MSG_ONOFF_SWITCH_OPCODE:
case UART_MSG_QUERY_FACTORY_STATE_OPCODE:
case UART_MSG_LED_GROUP_CONTROL_OPCODE:
kkFactoryMsgInComingPaser(pMsgNode, ECOM_PORT_UART, &send_buf); kkFactoryMsgInComingPaser(pMsgNode, ECOM_PORT_UART, &send_buf);
break; break;
...@@ -1422,6 +1657,8 @@ void kUserInterPanMsgInComingPaser(UMsgNodeSt *pMsgNode) ...@@ -1422,6 +1657,8 @@ void kUserInterPanMsgInComingPaser(UMsgNodeSt *pMsgNode)
case UART_MSG_QUERY_SWITCH_ONOFF_OPCODE: case UART_MSG_QUERY_SWITCH_ONOFF_OPCODE:
case UART_MSG_ENTER_FACTORY_TEST_OPCODE: case UART_MSG_ENTER_FACTORY_TEST_OPCODE:
case UART_MSG_ONOFF_SWITCH_OPCODE: case UART_MSG_ONOFF_SWITCH_OPCODE:
case UART_MSG_QUERY_FACTORY_STATE_OPCODE:
case UART_MSG_LED_GROUP_CONTROL_OPCODE:
kkFactoryMsgInComingPaser(pMsgNode, ECOM_PORT_INTERPAN, &send_buf); kkFactoryMsgInComingPaser(pMsgNode, ECOM_PORT_INTERPAN, &send_buf);
break; break;
......
...@@ -305,7 +305,11 @@ void kLedOptTrigger(uint8_t id, uint32_t duration_on_ms, uint32_t duration_off_m ...@@ -305,7 +305,11 @@ void kLedOptTrigger(uint8_t id, uint32_t duration_on_ms, uint32_t duration_off_m
g_stLedCtrller[led_index].offDuration = duration_off_ms/ TICK_LOOP_NMS; g_stLedCtrller[led_index].offDuration = duration_off_ms/ TICK_LOOP_NMS;
g_stLedCtrller[led_index].start = start; g_stLedCtrller[led_index].start = start;
g_stLedCtrller[led_index].end = end;
if(end == LED_IGNORE)
g_stLedCtrller[led_index].end = LED_OFF;
else
g_stLedCtrller[led_index].end = end;
if( g_stLedCtrller[led_index].start == LED_ON ) { if( g_stLedCtrller[led_index].start == LED_ON ) {
kLedDriverhandler(led_index, LED_ON); kLedDriverhandler(led_index, LED_ON);
......
...@@ -202,11 +202,6 @@ void Update_Local_Attribute_Info(void) ...@@ -202,11 +202,6 @@ void Update_Local_Attribute_Info(void)
Rewrite_ManufactureName(); Rewrite_ManufactureName();
} }
typedef struct{ typedef struct{
zcl_basicAttr_t basicAttrs_temp; zcl_basicAttr_t basicAttrs_temp;
zcl_identifyAttr_t identifyAttrs_temp; zcl_identifyAttr_t identifyAttrs_temp;
......
...@@ -19,7 +19,6 @@ typedef enum{ EOOC_OFF = 0, EOOC_ON, EOOC_TOGGLE, EOOC_UNKNOW }OnOffCtrlEnum; ...@@ -19,7 +19,6 @@ typedef enum{ EOOC_OFF = 0, EOOC_ON, EOOC_TOGGLE, EOOC_UNKNOW }OnOffCtrlEnum;
#define ZCL_ONOFF_STATUS_OFF 0x00 #define ZCL_ONOFF_STATUS_OFF 0x00
#define ZCL_ONOFF_STATUS_ON 0x01 #define ZCL_ONOFF_STATUS_ON 0x01
typedef struct tag_zcl_report_table{ typedef struct tag_zcl_report_table{
uint8_t endpoint; uint8_t endpoint;
uint16_t cluster; uint16_t cluster;
......
...@@ -56,7 +56,7 @@ uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len) ...@@ -56,7 +56,7 @@ uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len)
/* DESP: remap opcode, arg direction 0: FCC0->AA55 1:AA55->FCC0 /* DESP: remap opcode, arg direction 0: FCC0->AA55 1:AA55->FCC0
* Auth: * Auth:
* */ * */
uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction) static uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction)
{ {
for (uint8_t i = 0; i < (sizeof(opcodeReampTable)/(2*sizeof(uint16_t))); i++ ) { for (uint8_t i = 0; i < (sizeof(opcodeReampTable)/(2*sizeof(uint16_t))); i++ ) {
if (opcodeReampTable[i][0] == Opcode) { if (opcodeReampTable[i][0] == Opcode) {
...@@ -66,7 +66,6 @@ uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction) ...@@ -66,7 +66,6 @@ uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction)
return 0xFFFF; return 0xFFFF;
} }
kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut) kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut)
{ {
//UMsgNodeSt uMsgNode = {0}; //UMsgNodeSt uMsgNode = {0};
...@@ -144,7 +143,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st ...@@ -144,7 +143,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
//check install code length 20200725 //check install code length 20200725
uint8_t length = data.u8ARG[0]; uint8_t length = data.u8ARG[0];
if (length != 16) { if (length != 16) {//如果不是16位的数据就不做任何改变,只回复
send_buf.u8ARG[0] = ERR_FORMAT; send_buf.u8ARG[0] = ERR_FORMAT;
send_buf.u8ARG[1] = data.u8ARG[0]; send_buf.u8ARG[1] = data.u8ARG[0];
memcpy(&send_buf.u8ARG[2], &data.u8ARG[1], length); memcpy(&send_buf.u8ARG[2], &data.u8ARG[1], length);
...@@ -247,9 +246,9 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st ...@@ -247,9 +246,9 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
memset(buffer, 0, 33); memset(buffer, 0, 33);
uint8_t *data = ISN_TOKEN_GET(); uint8_t *data = ISN_TOKEN_GET();
iKonkeAfSelfPrint("len %x\r\n",data[0]);
iKonkeAfSelfPrintBuffer(data+1,32);
length = data[0]; length = data[0];
iKonkeAfSelfPrint("read ISN len %x\r\n",data[0]);
iKonkeAfSelfPrintBuffer(data+1,32);
memcpy(buffer,data,length +1); memcpy(buffer,data,length +1);
if(length > 32) { if(length > 32) {
...@@ -268,7 +267,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st ...@@ -268,7 +267,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
{ {
uint8_t mac_length = 0x00; uint8_t mac_length = 0x00;
addrExt_t addr,local_addr; addrExt_t addr,local_addr;
flash_read(CFG_MAC_ADDRESS,8,(uint8_t*)local_addr); zb_getLocalExtAddr(local_addr);
mac_length = data.u8ARG[0]; mac_length = data.u8ARG[0];
if (mac_length != 8) { if (mac_length != 8) {
...@@ -293,8 +292,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st ...@@ -293,8 +292,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
case (UART_MSG_READ_MAC_CODE_OPCODE)://ok case (UART_MSG_READ_MAC_CODE_OPCODE)://ok
{ {
addrExt_t addr; addrExt_t addr;
flash_read(CFG_MAC_ADDRESS,8,(uint8_t*)addr); zb_getLocalExtAddr(addr);
// zb_getLocalExtAddr(addr);
send_buf.u8ARG[0] = 0x00; send_buf.u8ARG[0] = 0x00;
send_buf.u8ARG[1] = 0x08; send_buf.u8ARG[1] = 0x08;
...@@ -424,61 +422,6 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st ...@@ -424,61 +422,6 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
reply_control_field = Z_TO_H_NO_ACK; reply_control_field = Z_TO_H_NO_ACK;
break; break;
} }
// case (UART_MSG_READ_DEVICE_SNAP_OPCODE):
// {
// uint8_t tmp_value = 0;
// uint8_t send_length = 0;
//
// send_buf.u8ARG[send_length++] = ERR_OK;
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_STACK_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
//
// EmberEUI64 localEui64;
// EmberNodeType nodeTypeResult = 0xFF;
// EmberNetworkParameters networkParams;
// emberAfGetEui64(localEui64);
// SWAP_EUI64((uint8_t *)&localEui64);
//
// if(emberAfNetworkState() == EMBER_JOINED_NETWORK) {
// emberAfGetNetworkParameters(&nodeTypeResult, &networkParams);
// send_buf.u8ARG[send_length++] = HI_UINT16(networkParams.panId);
// send_buf.u8ARG[send_length++] = LO_UINT16(networkParams.panId);
// send_buf.u8ARG[send_length++] = HI_UINT16(emberAfGetNodeId());
// send_buf.u8ARG[send_length++] = LO_UINT16(emberAfGetNodeId());
// memcpy(&send_buf.u8ARG[send_length], localEui64, 8);
// send_length = send_length + 8;
// send_buf.u8ARG[send_length++] = networkParams.radioChannel;
// send_buf.u8ARG[send_length++] = networkParams.radioTxPower;
// } else {
// emberAfGetNetworkParameters(&nodeTypeResult, &networkParams);
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// memcpy(&send_buf.u8ARG[send_length], localEui64, 8);
// send_length = send_length + 8;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// }
// //SV
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_APPLICATION_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
// //HV
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_HW_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
// memset(&send_buf.u8ARG[send_length], 0xff, 4);
// send_length = send_length + 4;
// send_buf.u8ARG[send_length++] = emberAfNetworkState();
//
// send_buf.u8ArgLen = send_length;
// //send_buf.u8Datalen = send_length + 3;
// reply_control_field = Z_TO_H_NO_ACK;
//
// break;
// }
//nwk operation request //nwk operation request
case (UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE)://ok case (UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE)://ok
{ {
......
...@@ -34,7 +34,6 @@ typedef struct{ ...@@ -34,7 +34,6 @@ typedef struct{
}MsgFrameworkFormat_st; }MsgFrameworkFormat_st;
kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut); kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut);
uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction);
uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len); uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len);
uint8_t kCmdMsgDataSentByPort(uint8_t u8Control_Field, DataField_st data, bool isGetResult, ComPortEm port); uint8_t kCmdMsgDataSentByPort(uint8_t u8Control_Field, DataField_st data, bool isGetResult, ComPortEm port);
......
...@@ -3,16 +3,35 @@ ...@@ -3,16 +3,35 @@
#include "ikk-token.h" #include "ikk-token.h"
#include "ikk-common-utils.h" #include "ikk-common-utils.h"
#include "../driver/ikk-button.h" #include "../driver/ikk-button.h"
#include "../driver/ikk-led.h"
#include "../driver/ikk-relay.h"
#include "ikk-cluster.h"
#include "ikk-command.h"
#define AGING_TEST_15MIN_VALUE 0xA1 #define AGING_TEST_15MIN_VALUE 0xA1
#define AGING_TEST_4HOU_VALUE 0xA2 #define AGING_TEST_4HOU_VALUE 0xA2
#define AGINE_TEST_DONE_VALUE 0xFA #define AGINE_TEST_DONE_VALUE 0xFA
//已经置老化标志 //已经置老化标志
#define SINGLE_BOARD_TEST_DONE_VALUE 0xF1 //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 #define SINGLE_BOARD_TEST_DONE_VALUE 0xF1
#define FULL_DEVICE_TEST_DONE_VALUE 0xF2 //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟? #define FULL_DEVICE_TEST_DONE_VALUE 0xF2
#define FORCE_FACTORY_TEST_VALUE 0xF8 //锟斤拷锟斤拷锟斤拷锟斤拷锟角匡拷锟斤拷顺锟? #define FORCE_FACTORY_TEST_VALUE 0xF8
#define TEST_INIT_VALUE 0xFF
#define LED_SLOW_BLINK_ON_TIME_MS 800
#define LED_SLOW_BLINK_OFF_TIME_MS 800
#define LED_FAST_BLINK_ON_TIME_MS 200
#define LED_FAST_BLINK_OFF_TIME_MS 200
#define LED_SLOW_BLINK_CONTINUE_TIME_MS (60 * 1000)
#define LED_FAST_BLINK_CONTINUE_TIME_MS (5 * 1000)
#define NETWORK_STEERING_WHITELIST_START_PANID 0xE000
#define NETWORK_STEERING_WHITELIST_NUM 32
#define PANID_ENABLE 0
#define PANID_DISABLE 1
u8 g_u8NetworkSteeringWhitelist[NETWORK_STEERING_WHITELIST_NUM] = {PANID_ENABLE};
u8 g_u8NetworkSteeringChannel = 20;
u16 g_u16NetworkSteeringPanId = 0xFFFF;
static ev_timer_event_t *kFactoryTestEvt = NULL; static ev_timer_event_t *kFactoryTestEvt = NULL;
s32 kFactoryTestEventHandler(void *arg); s32 kFactoryTestEventHandler(void *arg);
...@@ -28,17 +47,20 @@ typedef struct{ ...@@ -28,17 +47,20 @@ 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; typedef enum{FT_SINGLE_BOARD_TEST=0x01, FT_FULL_DEVICE_TEST=0x02, FT_NORMAL_DONE=0x04, FT_FORCE_EXIT=0x08, FT_AGING_DONE = 0X10,}FT_STATUS;
extern LedConfSt g_ledConfList;
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}};
static FactoryTestStatusEnum g_eFactoryTestStatus = FTS_NORMAL; FactoryTestStatusEnum g_eFactoryTestStatus = FTS_NORMAL;
static FactoryTestStatusEnum g_eLastFactoryTestStatus = FTS_NORMAL; static FactoryTestStatusEnum g_eLastFactoryTestStatus = FTS_NORMAL;
static uint32_t g_u32AgingTotalTimeMS = 0; static uint32_t g_u32AgingTotalTimeMS = 0;
static uint32_t g_u32AgingMaxTimeMS = 0;
static pFactoryTestPollCallback g_pFactoryTestPollCallback = NULL; static pFactoryTestPollCallback g_pFactoryTestPollCallback = NULL;
static uint8_t g_u8LongPressedKeyIndex = 0; static uint8_t g_u8LongPressedKeyIndex = 0;
static uint32_t g_u32Count = 0; static uint32_t g_u32Count = 0;
static uint8_t g_u8FactoryTestLedId = LED_UNKNOW_ID; //just for single board test or full device test
/* DESP: get the test index by id. /* DESP: get the test index by id.
* Auth: mazj.20200227. * Auth: mazj.20200227.
* */ * */
...@@ -102,6 +124,10 @@ uint8_t kGetFactoryTestValueStatus(void) ...@@ -102,6 +124,10 @@ uint8_t kGetFactoryTestValueStatus(void)
status = status | FT_FORCE_EXIT; status = status | FT_FORCE_EXIT;
}else if (kGetSingleBoardValue() != SINGLE_BOARD_TEST_DONE_VALUE) { }else if (kGetSingleBoardValue() != SINGLE_BOARD_TEST_DONE_VALUE) {
status = status | FT_SINGLE_BOARD_TEST; status = status | FT_SINGLE_BOARD_TEST;
}else {
#if !Z30_DEVICE_FULL_DEVICE_ENBALE
status = status | FT_NORMAL_DONE;
#endif
} }
#endif #endif
...@@ -109,12 +135,17 @@ uint8_t kGetFactoryTestValueStatus(void) ...@@ -109,12 +135,17 @@ uint8_t kGetFactoryTestValueStatus(void)
if (kGetFullDeviceValue() == FORCE_FACTORY_TEST_VALUE) { if (kGetFullDeviceValue() == FORCE_FACTORY_TEST_VALUE) {
status = status | FT_FORCE_EXIT; status = status | FT_FORCE_EXIT;
}else if (kGetFullDeviceValue() != FULL_DEVICE_TEST_DONE_VALUE){ }else if (kGetFullDeviceValue() != FULL_DEVICE_TEST_DONE_VALUE){
status = status | FT_FULL_DEVICE_TEST; status = status | FT_FULL_DEVICE_TEST;//没过整机时该标志位是1,单板整机都过的时候第三位bit为1,最后两个bit位为0
}else if(kGetSingleBoardValue() == SINGLE_BOARD_TEST_DONE_VALUE){ }else {
status = status | FT_NORMAL_DONE; status = status | FT_NORMAL_DONE;
} }
#endif #endif
#if Z30_DEVICE_AGING_ENABLE
if (kGetAgingTestValue() != AGINE_TEST_DONE_VALUE) {
status = status | FT_AGING_DONE;
}
#endif
return status; return status;
} }
nv_sts_t General_Set_Factory_Test(nv_item_t items,uint8_t value) nv_sts_t General_Set_Factory_Test(nv_item_t items,uint8_t value)
...@@ -157,8 +188,9 @@ void kFactoryTestBtnActionCallback(unsigned char button_id, BtnActionEnum actio ...@@ -157,8 +188,9 @@ void kFactoryTestBtnActionCallback(unsigned char button_id, BtnActionEnum actio
g_stFactoryTestControllerList[u8FactoryTestIndex].eCurrentBtnAction = action; g_stFactoryTestControllerList[u8FactoryTestIndex].eCurrentBtnAction = action;
//松手复位,触摸按键长时间按着也会自动松手 //松手复位,触摸按键长时间按着也会自动松手
if (g_eFactoryTestStatus == FTS_AGING_WAITING && g_stFactoryTestControllerList[g_u8LongPressedKeyIndex].eCurrentBtnAction == EBA_RELEASED){ iKonkeAfSelfPrint("######daiyanzhengqiangtui111 FactoryTest Released\r\n");
g_eFactoryTestStatus = FTS_AGING_FORCE_REBOOT; if ((g_eFactoryTestStatus == FTS_WAITING_RELEASED || g_eFactoryTestStatus == FTS_FORCE_EXIT) && g_stFactoryTestControllerList[g_u8LongPressedKeyIndex].eCurrentBtnAction == EBA_RELEASED){
g_eFactoryTestStatus = FTS_FORCE_REBOOT;
g_u32Count = FACTORY_TEST_POLL_TIMES; //快点执行自定义函数 g_u32Count = FACTORY_TEST_POLL_TIMES; //快点执行自定义函数
iKonkeAfSelfPrint("######33333333333333333 FactoryTest Released\r\n"); iKonkeAfSelfPrint("######33333333333333333 FactoryTest Released\r\n");
} }
...@@ -166,6 +198,25 @@ void kFactoryTestBtnActionCallback(unsigned char button_id, BtnActionEnum actio ...@@ -166,6 +198,25 @@ void kFactoryTestBtnActionCallback(unsigned char button_id, BtnActionEnum actio
} }
} }
static uint16_t opcodeReampTable[][2] =
{
//FCC0, AA55
{0xF0, 0xED14},//打开产测
{0xF1, 0xED04},//退出产测
{0xF2, 0xED05},//查询产测(按bit位)
{0xF8, 0xED16},//查询产测(按字节)
};
static uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction)
{
for (uint8_t i = 0; i < (sizeof(opcodeReampTable)/(2*sizeof(uint16_t))); i++ ) {
if (opcodeReampTable[i][0] == Opcode) {
return opcodeReampTable[i][1];
}
}
return 0xFFFF;
}
kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut) kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut)
{ {
//UMsgNodeSt uMsgNode = {0}; //UMsgNodeSt uMsgNode = {0};
...@@ -239,13 +290,23 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie ...@@ -239,13 +290,23 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie
case (UART_MSG_QUERY_DEVICE_VERSION_OPCODE): case (UART_MSG_QUERY_DEVICE_VERSION_OPCODE):
{ {
send_buf.u8ARG[0] = ERR_OK; send_buf.u8ARG[0] = ERR_OK;
uint8_t hardversion = 0;
uint8_t softversion = 0;
//wait to do status_t status;
send_buf.u8ARG[1] = 0x20; zclAttrInfo_t *hwattrInfo = ReadServerAttribute(1,ZCL_CLUSTER_GEN_BASIC,ZCL_ATTRID_BASIC_HW_VER,&status);
send_buf.u8ARG[2] = 0x20; hardversion = hwattrInfo->data[0];
iKonkeAfSelfPrint("hardversion = %x\r\n",hwattrInfo->data[0]);
zclAttrInfo_t *appattrInfo = ReadServerAttribute(1,ZCL_CLUSTER_GEN_BASIC,ZCL_ATTRID_BASIC_APP_VER,&status);
softversion = appattrInfo->data[0];
iKonkeAfSelfPrint("softversion = %x\r\n",appattrInfo->data[0]);
send_buf.u8ARG[1] = hardversion;
send_buf.u8ARG[2] = softversion;
send_buf.u8ARG[3] = 0XFF; send_buf.u8ARG[3] = 0XFF;
send_buf.u8ARG[4] = 0XFF; send_buf.u8ARG[4] = 0XFF;
send_buf.u8ARG[0] = ERR_OK;; send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ArgLen = 5; send_buf.u8ArgLen = 5;
reply_control_field = Z_TO_H_NO_ACK; reply_control_field = Z_TO_H_NO_ACK;
break; break;
...@@ -272,26 +333,27 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie ...@@ -272,26 +333,27 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie
} }
case (UART_MSG_EXIT_FACTORY_TEST_OPCODE): case (UART_MSG_EXIT_FACTORY_TEST_OPCODE):
{ {
uint8_t token_data = 0;
if(data.u8ARG[0]&0x01) if(data.u8ARG[0]&0x01)
{ {
kSetSingleBoardValue(SINGLE_BOARD_TEST_DONE_VALUE); kSetSingleBoardValue(SINGLE_BOARD_TEST_DONE_VALUE);
iKonkeAfSelfPrint("######kGetSingleBoardValue(%x)\r\n", token_data);
send_buf.u8ARG[0] = ERR_OK; send_buf.u8ARG[0] = ERR_OK;
g_eFactoryTestStatus = FTS_SINGLE_BOARD_TEST_DONE;
//单板结束,一直快闪
kLedOptTrigger(g_u8FactoryTestLedId, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, BLINK_DEAD, LED_ON, LED_ON);
} }
if(data.u8ARG[0]&0x02) if(data.u8ARG[0]&0x02)
{ {
kSetFullDeviceValue(FULL_DEVICE_TEST_DONE_VALUE); kSetFullDeviceValue(FULL_DEVICE_TEST_DONE_VALUE);
iKonkeAfSelfPrint("######kGetFullBoardValue(%02x)\r\n", token_data);
send_buf.u8ARG[0] = ERR_OK; send_buf.u8ARG[0] = ERR_OK;
g_eFactoryTestStatus = FTS_FULL_DEVICE_TEST_DONE;
//整机结束,一直快闪
kLedOptTrigger(g_u8FactoryTestLedId, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, BLINK_DEAD, LED_ON, LED_ON);
} }
if( (data.u8ARG[0]&0x03 == 0x03)||(data.u8ARG[0]&0x04 == 0x04) ) if((data.u8ARG[0]&0x03) == 0x03 || (data.u8ARG[0]&0x04) == 0x04)
{ {
kSetAgingTestValue(AGINE_TEST_DONE_VALUE); kSetAgingTestValue(AGINE_TEST_DONE_VALUE);
iKonkeAfSelfPrint("######kGetAgingTestValue(%02x)\r\n", token_data);
send_buf.u8ARG[0] = ERR_OK; send_buf.u8ARG[0] = ERR_OK;
g_eFactoryTestStatus = FTS_AGING_DONE; //g_eFactoryTestStatus = FTS_AGING_DONE;//指令退老化和正常4h退老化区分
} }
send_buf.u8ARG[1] = data.u8ARG[0]; send_buf.u8ARG[1] = data.u8ARG[0];
send_buf.u8ArgLen = 2; send_buf.u8ArgLen = 2;
...@@ -307,7 +369,7 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie ...@@ -307,7 +369,7 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie
iKonkeAfSelfPrint("######UART_MSG_QUERY_FACTORY_INFO_OPCODE(%d)\r\n", send_buf.u8ArgLen); iKonkeAfSelfPrint("######UART_MSG_QUERY_FACTORY_INFO_OPCODE(%d)\r\n", send_buf.u8ArgLen);
break; break;
} }
case UART_MSG_QUERY_SWITCH_ONOFF_OPCODE: case (UART_MSG_QUERY_SWITCH_ONOFF_OPCODE):
{ {
extern uint8_t Key_Press_Test_Flag[5]; extern uint8_t Key_Press_Test_Flag[5];
for (uint8_t i = 0; i < 6; i++){ for (uint8_t i = 0; i < 6; i++){
...@@ -342,25 +404,116 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie ...@@ -342,25 +404,116 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie
send_buf.u8ARG[1] = kGetFactoryTestValueStatus(); send_buf.u8ARG[1] = kGetFactoryTestValueStatus();
break; break;
} }
case UART_MSG_ONOFF_SWITCH_OPCODE: case UART_MSG_ONOFF_SWITCH_OPCODE: {
{ uint8_t err = 0;
uint8_t command = data.u8ARG[0]; if (data.u8ARG[0] == 0x01) {
if(command == 1){ //控制命令 for (uint8_t i = 1; i < 9; i++) {
for (uint8_t i = 0; i < 9; i++){ if (data.u8ARG[i] == 0x00) { // on
if(i < 4){ kZclOnOffClusterServerOnOffControl(i, EOOC_OFF);
if(data.u8ARG[i+1] == 1) } else if (data.u8ARG[i] == 0x01) {
kZclOnOffClusterServerOnOffControl(i+1, 1); kZclOnOffClusterServerOnOffControl(i, EOOC_ON);
else if(data.u8ARG[i+1] == 0)
kZclOnOffClusterServerOnOffControl(i+1, 0);
}
else{
data.u8ARG[i+1] = 0xff;
} }
} }
} }
//get onoff state
for (uint8_t i = 1; i < 9; i++) {
err = kZclOnOffClusterServerOnOffGet(i);
send_buf.u8ARG[i] = (err == EOOS_ON)?1:(err == EOOS_UNKNOW?0xFF:0);
}
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ArgLen = 9;
break;
}
//Auth: han_frc.20220105.
case UART_MSG_QUERY_FACTORY_STATE_OPCODE: {
uint8_t factoryTest = 0;
uint8_t singleBoardTest = 0;
uint8_t fullDeviceTest = 0;
uint8_t agingTest = 0;
singleBoardTest = kGetSingleBoardValue();
fullDeviceTest = kGetFullDeviceValue();
agingTest = kGetAgingTestValue();
if (((singleBoardTest == FORCE_FACTORY_TEST_VALUE) || (singleBoardTest == SINGLE_BOARD_TEST_DONE_VALUE)) \
&& ((fullDeviceTest == FULL_DEVICE_TEST_DONE_VALUE) || (fullDeviceTest == SINGLE_BOARD_TEST_DONE_VALUE))) {
factoryTest = 0x00;
} else {
factoryTest = 0x01;
}
#if Z30_DEVICE_SINGLE_BOARD_ENABLE
if (singleBoardTest == SINGLE_BOARD_TEST_DONE_VALUE) {
singleBoardTest = 0x01;
} else if (singleBoardTest == FORCE_FACTORY_TEST_VALUE) {
singleBoardTest = 0x02;
} else {
singleBoardTest = 0x00;
}
#else
singleBoardTest = 0xff;
#endif
#if Z30_DEVICE_FULL_DEVICE_ENBALE
if (fullDeviceTest == FULL_DEVICE_TEST_DONE_VALUE) {
fullDeviceTest = 0x01;
} else if (fullDeviceTest == FORCE_FACTORY_TEST_VALUE) {
fullDeviceTest = 0x02;
} else {
fullDeviceTest = 0x00;
}
#else
fullDeviceTest = 0xff;
#endif
#if Z30_DEVICE_AGING_ENABLE
if (agingTest == AGINE_TEST_DONE_VALUE) {
agingTest = 0x01;
} else if (agingTest == FORCE_FACTORY_TEST_VALUE) {
agingTest = 0x02;
} else {
agingTest = 0x00;
}
#else
agingTest = 0xff;
#endif
send_buf.u8ARG[0] = ERR_OK; send_buf.u8ARG[0] = ERR_OK;
memcpy(&send_buf.u8ARG[1], &data.u8ARG[1], 8); send_buf.u8ARG[1] = factoryTest;
send_buf.u8ArgLen = 10; send_buf.u8ARG[2] = singleBoardTest;
send_buf.u8ARG[3] = fullDeviceTest;
send_buf.u8ARG[4] = agingTest;
send_buf.u8ArgLen = 5;
break;
}
//Auth: han_frc.20220105.
case UART_MSG_LED_GROUP_CONTROL_OPCODE: {
for (uint8_t i = 5; i < 9; i++){
if(data.u8ARG[i] != 0x00){
send_buf.u8ARG[0] = ERR_EXEC_FAILED;
}
}
for (uint8_t i = 0; i < 5; i++){
if(data.u8ARG[i] == 0x81){
if(send_buf.u8ARG[0] != ERR_EXEC_FAILED){
LED_OPT_ON(i+1);
send_buf.u8ARG[0] = ERR_OK;
}
}else if(data.u8ARG[i] == 0x80){
if(send_buf.u8ARG[0] != ERR_EXEC_FAILED){
LED_OPT_OFF(i+1);
send_buf.u8ARG[0] = ERR_OK;
}
}else{
if(data.u8ARG[i] == 0x00 && send_buf.u8ARG[0] != ERR_EXEC_FAILED){
send_buf.u8ARG[0] = ERR_OK;
}else{
send_buf.u8ARG[0] = ERR_EXEC_FAILED;
}
}
}
send_buf.u8ArgLen = 1;
break; break;
} }
default: default:
...@@ -381,9 +534,11 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie ...@@ -381,9 +534,11 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie
} }
} }
void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num) void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num,uint8_t led_id)
{ {
g_eFactoryTestStatus = FTS_NORMAL;
#if FACTORY_TEST_ENABLE #if FACTORY_TEST_ENABLE
iKonkeAfSelfPrint("######kFactoryTestInit11111111111111111111111111111111111111\r\n");
if(NULL == callback || NULL == conf_list || btn_num > AGING_EXIT_MAX_BTN_NUM) { if(NULL == callback || NULL == conf_list || btn_num > AGING_EXIT_MAX_BTN_NUM) {
return; return;
} }
...@@ -397,25 +552,73 @@ void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_ ...@@ -397,25 +552,73 @@ void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_
iKonkeAfSelfPrint("######g_stFactoryTestControllerList[0].u8BtnId= %d u8BtnLongPressTimes = %d\r\n", g_stFactoryTestControllerList[0].u8BtnId, g_stFactoryTestControllerList[0].u8BtnLongPressTimes); iKonkeAfSelfPrint("######g_stFactoryTestControllerList[0].u8BtnId= %d u8BtnLongPressTimes = %d\r\n", g_stFactoryTestControllerList[0].u8BtnId, g_stFactoryTestControllerList[0].u8BtnLongPressTimes);
iKonkeAfSelfPrint("######g_stFactoryTestControllerList[1].u8BtnId= %d u8BtnLongPressTimes = %d\r\n", g_stFactoryTestControllerList[1].u8BtnId, g_stFactoryTestControllerList[1].u8BtnLongPressTimes); iKonkeAfSelfPrint("######g_stFactoryTestControllerList[1].u8BtnId= %d u8BtnLongPressTimes = %d\r\n", g_stFactoryTestControllerList[1].u8BtnId, g_stFactoryTestControllerList[1].u8BtnLongPressTimes);
if (kGetAgingTestValue() != AGINE_TEST_DONE_VALUE){ #if Z30_DEVICE_SINGLE_BOARD_ENABLE //单板 整机 老化
if ((g_eFactoryTestStatus == FTS_NORMAL) && (kGetSingleBoardValue() != SINGLE_BOARD_TEST_DONE_VALUE) \
&& (kGetSingleBoardValue() != FORCE_FACTORY_TEST_VALUE)){
kBtnaIRQCallbackRegister(kFactoryTestBtnActionCallback);
g_eFactoryTestStatus = FTS_SINGLE_BOARD_TEST;
g_pFactoryTestPollCallback = callback;
g_u8FactoryTestLedId = led_id;
if(kFactoryTestEvt){
TL_ZB_TIMER_CANCEL(&kFactoryTestEvt);
}
kFactoryTestEvt = TL_ZB_TIMER_SCHEDULE(kFactoryTestEventHandler, NULL, 1000);
}
#endif
#if Z30_DEVICE_AGING_ENABLE
if ((g_eFactoryTestStatus == FTS_NORMAL) && (kGetAgingTestValue() != AGINE_TEST_DONE_VALUE) \
&& (kGetAgingTestValue() != FORCE_FACTORY_TEST_VALUE)){
kSetAgingTestValue(AGING_TEST_15MIN_VALUE); kSetAgingTestValue(AGING_TEST_15MIN_VALUE);
kBtnaIRQCallbackRegister(kFactoryTestBtnActionCallback);
g_eFactoryTestStatus = FTS_START; g_eFactoryTestStatus = FTS_START;
//启动老化事件 g_pFactoryTestPollCallback = callback;
g_u8FactoryTestLedId = led_id;
g_u32AgingTotalTimeMS = 0;
//load aging time
g_u32AgingMaxTimeMS = kGetAgingMaxTime();
if(kFactoryTestEvt){
TL_ZB_TIMER_CANCEL(&kFactoryTestEvt);
}
kFactoryTestEvt = TL_ZB_TIMER_SCHEDULE(kFactoryTestEventHandler, NULL, 1000);
}
#endif
#if Z30_DEVICE_FULL_DEVICE_ENBALE
if ((g_eFactoryTestStatus == FTS_NORMAL) && (kGetFullDeviceValue() != FULL_DEVICE_TEST_DONE_VALUE) \
&& (kGetFullDeviceValue() != FORCE_FACTORY_TEST_VALUE)){
kBtnaIRQCallbackRegister(kFactoryTestBtnActionCallback);
g_eFactoryTestStatus = FTS_FULL_DEVICE_TEST;
g_pFactoryTestPollCallback = callback;
g_u8FactoryTestLedId = led_id;
if(kFactoryTestEvt){ if(kFactoryTestEvt){
TL_ZB_TIMER_CANCEL(&kFactoryTestEvt); TL_ZB_TIMER_CANCEL(&kFactoryTestEvt);
} }
kFactoryTestEvt = TL_ZB_TIMER_SCHEDULE(kFactoryTestEventHandler, NULL, 1000); kFactoryTestEvt = TL_ZB_TIMER_SCHEDULE(kFactoryTestEventHandler, NULL, 1000);
g_eFactoryTestStatus = FTS_START;
}else {
g_eFactoryTestStatus = FTS_NORMAL;
} }
kBtnaIRQCallbackRegister(kFactoryTestBtnActionCallback); #endif
g_pFactoryTestPollCallback = callback; iKonkeAfSelfPrint("\r\n######kFactoryTestInit status1111111111111111111111111(%d)\r\n", g_eFactoryTestStatus);
g_u32AgingTotalTimeMS = 0; //led indicate
// g_u8AgingForceExitBtnId = btn_id; if (g_eFactoryTestStatus == FTS_SINGLE_BOARD_TEST) {
kLedOptTrigger(g_u8FactoryTestLedId, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, 1, LED_ON, LED_OFF);
} else if (g_eFactoryTestStatus == FTS_FULL_DEVICE_TEST) {
kLedOptTrigger(g_u8FactoryTestLedId, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, 2, LED_ON, LED_OFF);
} else if (g_eFactoryTestStatus == FTS_START) {
kLedOptTrigger(g_u8FactoryTestLedId, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_OFF_TIME_MS, 3, LED_ON, LED_OFF);
}
#else #else
uint8_t value = TEST_INIT_VALUE; uint8_t value = TEST_INIT_VALUE;
kSetAgingTestValue(value); kSetAgingTestValue(value);
kSetSingleBoardValue(value);
kSetFullDeviceValue(value);
g_eFactoryTestStatus = FTS_NORMAL; g_eFactoryTestStatus = FTS_NORMAL;
#endif #endif
} }
...@@ -427,7 +630,7 @@ s32 kFactoryTestEventHandler(void *arg) ...@@ -427,7 +630,7 @@ s32 kFactoryTestEventHandler(void *arg)
g_u32AgingTotalTimeMS += FACTORY_TEST_POLL_TTME_1S; g_u32AgingTotalTimeMS += FACTORY_TEST_POLL_TTME_1S;
if (g_eFactoryTestStatus != FTS_AGING_WAITING && g_eFactoryTestStatus != FTS_AGING_WAITING_SECOND_PRESS){ if (g_eFactoryTestStatus != FTS_WAITING_RELEASED && g_eFactoryTestStatus != FTS_WAITING_SECOND_PRESS){
switch (g_eFactoryTestStatus) switch (g_eFactoryTestStatus)
{ {
case (FTS_START): case (FTS_START):
...@@ -460,16 +663,20 @@ s32 kFactoryTestEventHandler(void *arg) ...@@ -460,16 +663,20 @@ s32 kFactoryTestEventHandler(void *arg)
//return; //return;
g_u32Count = FACTORY_TEST_POLL_TIMES;//快点处理自定义函数 g_u32Count = FACTORY_TEST_POLL_TIMES;//快点处理自定义函数
break; break;
case (FTS_AGING_FORCE_EXIT): case (FTS_FORCE_EXIT):
g_eFactoryTestStatus = FTS_AGING_WAITING; g_eFactoryTestStatus = FTS_WAITING_RELEASED;
break; break;
case (FTS_AGING_WAITING): case (FTS_WAITING_RELEASED):
break; break;
case (FTS_AGING_FIRST_LONG_PRESSED): case (FTS_FIRST_LONG_PRESSED):
g_eFactoryTestStatus = FTS_AGING_WAITING_SECOND_PRESS; g_eFactoryTestStatus = FTS_WAITING_SECOND_PRESS;
break; break;
case (FTS_AGING_WAITING_SECOND_PRESS): case (FTS_WAITING_SECOND_PRESS):
break; break;
//Auth: han_frc.20220105.
case (FTS_NORMAL):
iKonkeAfSelfPrint("######FTS_NORMAL STOP EVENT!!!!!!!!!!!\r\n");
return -1;
default: default:
break; break;
} }
...@@ -508,8 +715,8 @@ s32 kFactoryTestEventHandler(void *arg) ...@@ -508,8 +715,8 @@ s32 kFactoryTestEventHandler(void *arg)
if ( g_stFactoryTestControllerList[index].u8BtnLongPressTimes == LONG_PRESS_1_TIMES \ if ( g_stFactoryTestControllerList[index].u8BtnLongPressTimes == LONG_PRESS_1_TIMES \
|| g_stFactoryTestControllerList[index].bIsFirstBtnLongPressed == true){ || g_stFactoryTestControllerList[index].bIsFirstBtnLongPressed == true){
//successfully exit aging test //successfully exit aging test
g_eFactoryTestStatus = FTS_AGING_FORCE_EXIT; g_eFactoryTestStatus = FTS_FORCE_EXIT;
kSetAgingTestValue(AGINE_TEST_DONE_VALUE); kSetAgingTestValue(FORCE_FACTORY_TEST_VALUE);
#if Z30_DEVICE_SINGLE_BOARD_ENABLE #if Z30_DEVICE_SINGLE_BOARD_ENABLE
if(kGetSingleBoardValue() != SINGLE_BOARD_TEST_DONE_VALUE) if(kGetSingleBoardValue() != SINGLE_BOARD_TEST_DONE_VALUE)
kSetSingleBoardValue(FORCE_FACTORY_TEST_VALUE); kSetSingleBoardValue(FORCE_FACTORY_TEST_VALUE);
...@@ -532,7 +739,7 @@ s32 kFactoryTestEventHandler(void *arg) ...@@ -532,7 +739,7 @@ s32 kFactoryTestEventHandler(void *arg)
g_u32Count = FACTORY_TEST_POLL_TIMES;//快点处理自定义函数 g_u32Count = FACTORY_TEST_POLL_TIMES;//快点处理自定义函数
//记录当前的老化状态 //记录当前的老化状态
g_eLastFactoryTestStatus = g_eFactoryTestStatus; g_eLastFactoryTestStatus = g_eFactoryTestStatus;
g_eFactoryTestStatus = FTS_AGING_FIRST_LONG_PRESSED; g_eFactoryTestStatus = FTS_FIRST_LONG_PRESSED;
iKonkeAfSelfPrint("######2222222222222222222222 == 0\r\n"); iKonkeAfSelfPrint("######2222222222222222222222 == 0\r\n");
} }
...@@ -570,5 +777,38 @@ s32 kFactoryTestEventHandler(void *arg) ...@@ -570,5 +777,38 @@ s32 kFactoryTestEventHandler(void *arg)
return 0; return 0;
} }
//Auth: han_frc.20220105.
void kSetAgingTestDone(void)
{
kSetAgingTestValue(AGINE_TEST_DONE_VALUE);
g_eFactoryTestStatus = FTS_NORMAL;
}
void kSetNetworkSteeringInfo(uint8_t channel, uint16_t PanId)
{
if (channel >= 15 && channel <= 26){
g_u8NetworkSteeringChannel = channel;
}
if (0xFFFF != PanId){
g_u16NetworkSteeringPanId = PanId;
}
}
bool kCmdNetworkSteeringinfoCheck(uint8_t channel, uint16_t panid)
{
bool status = false;
if (0xFFFF != g_u16NetworkSteeringPanId){
if ((channel == g_u8NetworkSteeringChannel) && (panid == g_u16NetworkSteeringPanId)){
status = true;
}
}else if ((panid >= NETWORK_STEERING_WHITELIST_START_PANID) && (panid <= (NETWORK_STEERING_WHITELIST_START_PANID + NETWORK_STEERING_WHITELIST_NUM))){
if ((channel == g_u8NetworkSteeringChannel) && (PANID_ENABLE == g_u8NetworkSteeringWhitelist[panid - NETWORK_STEERING_WHITELIST_START_PANID])){
status = true;
}
}
iKonkeAfSelfPrint("kCmdNetworkSteeringinfoCheck[%d], channel[%d], PanID[0X%04X]\r\n", status, channel, panid);
return status;
}
...@@ -42,11 +42,15 @@ typedef enum{ ...@@ -42,11 +42,15 @@ typedef enum{
FTS_AGING_4HOU_START, FTS_AGING_4HOU_START,
FTS_AGING_4HOU, FTS_AGING_4HOU,
FTS_AGING_DONE, FTS_AGING_DONE,
FTS_AGING_FORCE_EXIT, FTS_FORCE_EXIT,
FTS_AGING_WAITING, FTS_WAITING_RELEASED,//waiting key released
FTS_AGING_FORCE_REBOOT, FTS_FORCE_REBOOT,
FTS_AGING_FIRST_LONG_PRESSED, FTS_FIRST_LONG_PRESSED,
FTS_AGING_WAITING_SECOND_PRESS FTS_WAITING_SECOND_PRESS,
FTS_SINGLE_BOARD_TEST,
FTS_FULL_DEVICE_TEST,
FTS_SINGLE_BOARD_TEST_DONE,
FTS_FULL_DEVICE_TEST_DONE,
}FactoryTestStatusEnum; }FactoryTestStatusEnum;
typedef struct{ typedef struct{
...@@ -74,7 +78,14 @@ void kSetAgingMaxTime(uint16_t value); ...@@ -74,7 +78,14 @@ void kSetAgingMaxTime(uint16_t value);
//获取当前产测状态 //获取当前产测状态
FactoryTestStatusEnum kGetFactoryTestStatus(void); FactoryTestStatusEnum kGetFactoryTestStatus(void);
//void kGetFactoryTestBtnAction(uint8_t btn_id, BtnActionEnum action); //void kGetFactoryTestBtnAction(uint8_t btn_id, BtnActionEnum action);
void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num); void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num,uint8_t led_id);
void kSetNetworkSteeringInfo(uint8_t channel, uint16_t PanId);
bool kCmdNetworkSteeringinfoCheck(uint8_t channel, uint16_t panid);
//Auth: han_frc.20220105.
void kSetAgingTestDone(void);
kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut); kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut);
#endif #endif
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "ikk-debug.h" #include "ikk-debug.h"
#include "ikk-token.h" #include "ikk-token.h"
#include "ikk-network.h" #include "ikk-network.h"
#include "ikk-factory-test.h"
static bool gInterPanEnabled; // 1:enable static bool gInterPanEnabled; // 1:enable
static uint16_t gInterPanID = 0x1111; // 1:enable static uint16_t gInterPanID = 0x1111; // 1:enable
...@@ -16,12 +16,10 @@ static uint8_t g_interpanChannel = 20; ...@@ -16,12 +16,10 @@ static uint8_t g_interpanChannel = 20;
pInterPanMsgIncomingCallback gInterPanMsgIncomingCallback; pInterPanMsgIncomingCallback gInterPanMsgIncomingCallback;
static ev_timer_event_t *Interpan_timerEvt = NULL;
static ev_timer_event_t *Interpan_DelaySendEvt = NULL; static ev_timer_event_t *Interpan_DelaySendEvt = NULL;
static INCOM_MESSAGE_INFO sIncomingMessageInfo = {0}; static INCOM_MESSAGE_INFO sIncomingMessageInfo = {0};
static s32 kInterPanEventHandler(void);
static s32 kInterPanDelaySendTestDataEventHandler(void ); static s32 kInterPanDelaySendTestDataEventHandler(void );
/** /**
* @brief Definition for Incoming cluster / Sever Cluster * @brief Definition for Incoming cluster / Sever Cluster
...@@ -104,8 +102,7 @@ void kInterPanEnable(uint8_t channel) ...@@ -104,8 +102,7 @@ void kInterPanEnable(uint8_t channel)
{ {
rf_setChannel(channel); rf_setChannel(channel);
printf("kInterPanEnable enable,Regesiter Interpan Func,network = %d\r\n!!\r\n",kNwkGetCurrentStatus()); printf("kInterPanEnable enable,Regesiter Interpan Func,network = %d\r\n!!\r\n",kNwkGetCurrentStatus());
if (kNwkGetCurrentStatus() == ENS_LEAVED) { if (!zb_isDeviceJoinedNwk()) {
af_endpointRegister(INTERPAN_ENDPOINT, (af_simple_descriptor_t *)&kInterpanSimpleDesc, afInterpan_rx_handler, afInterpan_dataSendConfirm); af_endpointRegister(INTERPAN_ENDPOINT, (af_simple_descriptor_t *)&kInterpanSimpleDesc, afInterpan_rx_handler, afInterpan_dataSendConfirm);
} }
else{ else{
...@@ -128,19 +125,17 @@ void kInterpanDisable(void) ...@@ -128,19 +125,17 @@ void kInterpanDisable(void)
void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming) void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming)
{ {
if (kGetFactoryTestStatus() == FTS_NORMAL) {
bool interPanEnabledFlg = kGetInterpanEnableFlg(); gInterPanEnabled = false;
if (interPanEnabledFlg) { af_endpointUnregister(INTERPAN_ENDPOINT);
gInterPanEnabled = true; printf("kInterPanEnable disable\r\n!!\r\n");
} }
if (gInterPanEnabled == true) { else{
gInterPanEnabled = true;
printf("kInterPanEnable enable\r\n!!\r\n");
kInterPanEnable(INTERPAN_CHANNEL); kInterPanEnable(INTERPAN_CHANNEL);
if(Interpan_timerEvt){ if (!zb_isDeviceJoinedNwk()) {
TL_ZB_TIMER_CANCEL(&Interpan_timerEvt);
}
Interpan_timerEvt = TL_ZB_TIMER_SCHEDULE(kInterPanEventHandler, NULL, INTERPAN_AUTO_OFF_TIME);
if (kNwkGetCurrentStatus() == ENS_LEAVED) {
if(Interpan_DelaySendEvt) if(Interpan_DelaySendEvt)
TL_ZB_TIMER_CANCEL(&Interpan_DelaySendEvt); TL_ZB_TIMER_CANCEL(&Interpan_DelaySendEvt);
...@@ -211,17 +206,6 @@ static s32 kInterPanDelaySendTestDataEventHandler(void ) ...@@ -211,17 +206,6 @@ static s32 kInterPanDelaySendTestDataEventHandler(void )
sSend_Count = 0; sSend_Count = 0;
return -1; return -1;
} }
static s32 kInterPanEventHandler(void)
{
iKonkeAfSelfPrint("kInterPanEventHandler\r\n");
if (gInterPanEnabled ==true) {
af_endpointUnregister(INTERPAN_ENDPOINT);
kInterPanSetEnableStatus(false);
}
return -1;
}
kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode) kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode)
{ {
......
...@@ -12,7 +12,6 @@ extern const af_simple_descriptor_t kInterpanSimpleDesc; ...@@ -12,7 +12,6 @@ extern const af_simple_descriptor_t kInterpanSimpleDesc;
#define INTERPAN_EVENT_INIT 0x00 // interPan Event #define INTERPAN_EVENT_INIT 0x00 // interPan Event
#define INTERPAN_EVENT_OFF 0x01 // #define INTERPAN_EVENT_OFF 0x01 //
#define INTERPAN_AUTO_OFF_TIME (10 * 60 * 1000)
#define INTERPAN_DELAY_SEND_INTERVAL (3 * 1000) #define INTERPAN_DELAY_SEND_INTERVAL (3 * 1000)
#define INTERPAN_DELAY_SEND_TIMES (2) #define INTERPAN_DELAY_SEND_TIMES (2)
#define INTERPAN_CHANNEL 20 #define INTERPAN_CHANNEL 20
...@@ -38,5 +37,7 @@ kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode); ...@@ -38,5 +37,7 @@ kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode);
void kInterpan_Init(void); void kInterpan_Init(void);
bool kInterPanSetEnableStatus(uint8_t enable); bool kInterPanSetEnableStatus(uint8_t enable);
bool kInterPanGetEnableStatus(void);
void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming); void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming);
#endif /* _SAMPLE_LIGHT_H_ */ #endif /* _SAMPLE_LIGHT_H_ */
...@@ -86,6 +86,8 @@ ...@@ -86,6 +86,8 @@
#define UART_MSG_QUERY_SWITCH_ONOFF_OPCODE 0xED06 #define UART_MSG_QUERY_SWITCH_ONOFF_OPCODE 0xED06
#define UART_MSG_ENTER_FACTORY_TEST_OPCODE 0xED14 #define UART_MSG_ENTER_FACTORY_TEST_OPCODE 0xED14
#define UART_MSG_ONOFF_SWITCH_OPCODE 0xED15 #define UART_MSG_ONOFF_SWITCH_OPCODE 0xED15
#define UART_MSG_QUERY_FACTORY_STATE_OPCODE 0xED16
#define UART_MSG_LED_GROUP_CONTROL_OPCODE 0xED17
#define UART_MSG_GPIO_TEST_OPCODE 0xED10 #define UART_MSG_GPIO_TEST_OPCODE 0xED10
#define UART_MSG_READ_RSSI_REQUEST_OPCODE 0xED12 #define UART_MSG_READ_RSSI_REQUEST_OPCODE 0xED12
...@@ -172,6 +174,7 @@ typedef enum { ...@@ -172,6 +174,7 @@ typedef enum {
ERR_WRITE_FAILED=0x04, ERR_WRITE_FAILED=0x04,
ERR_READ_WRITE_TIMEOUT=0x05, ERR_READ_WRITE_TIMEOUT=0x05,
ERR_NOT_EXIST=0x06, ERR_NOT_EXIST=0x06,
ERR_EXEC_FAILED=0xe0,
ERR_UNKNOW=0xFF, ERR_UNKNOW=0xFF,
}ERR_RET_E; }ERR_RET_E;
typedef enum { Z3D_COORDINATOR = 0, Z3D_ROUTER, Z3D_ENDDEVICE }Z3DevTypeEm; typedef enum { Z3D_COORDINATOR = 0, Z3D_ROUTER, Z3D_ENDDEVICE }Z3DevTypeEm;
......
...@@ -400,7 +400,8 @@ void kNwkFactoryReset(bool is_nwk_indicator) ...@@ -400,7 +400,8 @@ 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(); if(zb_isDeviceJoinedNwk())
zb_factoryReset();
g_KeyPressCauasLeave = true; g_KeyPressCauasLeave = true;
//add by maozj 20200407 for reset count down after network leaved //add by maozj 20200407 for reset count down after network leaved
g_u32NwkExitCountDownCounter = MS2COUNT(LED_FAST_BLINK_CONTINUE_TIME_MS); g_u32NwkExitCountDownCounter = MS2COUNT(LED_FAST_BLINK_CONTINUE_TIME_MS);
...@@ -444,7 +445,7 @@ void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf) ...@@ -444,7 +445,7 @@ void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf)
NwkStatusEnum kNwkGetCurrentStatus(void ) NwkStatusEnum kNwkGetCurrentStatus(void )
{ {
NwkStatusEnum status; NwkStatusEnum status;
if(zb_isDeviceJoinedNwk()){ if(zb_isDeviceJoinedNwk() ||(kInterPanGetEnableStatus())){
status = ENS_ONLINE; status = ENS_ONLINE;
g_bIsNwkJoiningFlg = false; g_bIsNwkJoiningFlg = false;
} }
......
...@@ -6,6 +6,10 @@ ...@@ -6,6 +6,10 @@
#include "ikk-config.h" #include "ikk-config.h"
#include "ikk-token.h" #include "ikk-token.h"
#include "../../../../zigbee/zcl/zcl_include.h" #include "../../../../zigbee/zcl/zcl_include.h"
#include "ikk-command.h"
#include "../driver/ikk-uart.h"
#include "ikk-factory-test.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 {
...@@ -27,55 +31,7 @@ pFUNC_OPTDATA_MESSAGE_CALLBACK g_pOptDataIncomingMessageCallback = NULL; ...@@ -27,55 +31,7 @@ pFUNC_OPTDATA_MESSAGE_CALLBACK g_pOptDataIncomingMessageCallback = NULL;
extern bool Get_Model_ID(uint8_t *ModeID); 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_ status_t zcl_private_fcc0_register(u8 endpoint, u16 manuCode, u8 attrNum, const zclAttrInfo_t attrTbl[], cluster_forAppCb_t cb)
//{
// return zcl_registerCluster(endpoint, ZCL_CLUSTER_PRIVATE_FCC0, manuCode, attrNum, attrTbl, zcl_Private_cmdHandler, cb);
//}
//
//_CODE_ZCL_ static status_t zcl_private_clientCmdHandler(zclIncoming_t *pInMsg)
//{
// u8 status = ZCL_STA_SUCCESS;
// apsdeDataInd_t *pApsdeInd = (apsdeDataInd_t*)pInMsg->msg;
// iKonkeAfSelfPrint("#############zcl_private_clientCmdHandler ,command id =%x!!!!!!!\r\n",pInMsg->hdr.cmd);
//// switch(pInMsg->hdr.cmd)
//// {
//// case ZCL_CMD_BASIC_RESET_FAC_DEFAULT:
//// if(pInMsg->clusterAppCb){
//// zclIncomingAddrInfo_t addrInfo;
//// addrInfo.dirCluster = pInMsg->hdr.frmCtrl.bf.dir;
//// addrInfo.profileId = pApsdeInd->indInfo.profile_id;
//// addrInfo.srcAddr = pApsdeInd->indInfo.src_short_addr;
//// addrInfo.dstAddr = pApsdeInd->indInfo.dst_addr;
//// addrInfo.srcEp = pApsdeInd->indInfo.src_ep;
//// addrInfo.dstEp = pApsdeInd->indInfo.dst_ep;
////
//// status = pInMsg->clusterAppCb(&addrInfo, ZCL_CMD_BASIC_RESET_FAC_DEFAULT, NULL);
//// }else{
//// status = ZCL_STA_FAILURE;
//// }
//// break;
//// default:
//// status = ZCL_STA_UNSUP_CLUSTER_COMMAND;
//// break;
//// }
//
// return status;
//}
//
//_CODE_ZCL_ static status_t zcl_Private_cmdHandler(zclIncoming_t *pInMsg)
//{
// if(pInMsg->hdr.frmCtrl.bf.dir == ZCL_FRAME_CLIENT_SERVER_DIR){
// return zcl_private_clientCmdHandler(pInMsg);
// }else{
// return ZCL_STA_UNSUP_CLUSTER_COMMAND;
// }
//}
//
uint8_t kOptTunnelChunkRead(uint8_t endpoint, uint8_t kOptTunnelChunkRead(uint8_t endpoint,
uint16_t clusterId, uint16_t clusterId,
uint16_t attributeId, uint16_t attributeId,
...@@ -271,7 +227,29 @@ kk_err_t kOptTunnelMessageIncoming(OptMethodEm method,zclIncoming_t *pCmd) ...@@ -271,7 +227,29 @@ kk_err_t kOptTunnelMessageIncoming(OptMethodEm method,zclIncoming_t *pCmd)
// { // {
if( length >= 7 ) { if( length >= 7 ) {
iKonkeAfSelfPrint("\r\n########################OPTDATA WRITE,g_tmp_length = %d\r\n",g_tmp_length); iKonkeAfSelfPrint("\r\n########################OPTDATA WRITE,g_tmp_length = %d\r\n",g_tmp_length);
if( g_pOptDataIncomingMessageCallback ) { extern kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut);
UMsgNodeSt msgNode;
DataField_st dataOut;
// length pid ch opcode arg
memcpy(msgNode.buffer, &g_tmp_buffer[0], g_tmp_length);
msgNode.length = g_tmp_length;
if (kCmdGeneralMsgPaser(&msgNode, ECOM_PORT_FCC0, &dataOut) == KET_OK) {
iKonkeAfSelfPrint("length(%d)\r\n" , dataOut.u8Datalen);
iKonkeAfSelfPrintBuffer(dataOut.u8ARG, dataOut.u8Datalen);
g_tmp_length = dataOut.u8Datalen + 7;
g_tmp_buffer[0] = g_tmp_length - 1;
memcpy(&g_tmp_buffer[7], dataOut.u8ARG, dataOut.u8Datalen);
kOptTunnelMessageWriteResponse(pCmd, g_tmp_buffer);
} else if (kkFactoryMsgInComingPaser(&msgNode, ECOM_PORT_FCC0, &dataOut) == KET_OK) {
iKonkeAfSelfPrint("length(%d)\r\n" , dataOut.u8Datalen);
iKonkeAfSelfPrintBuffer(dataOut.u8ARG, dataOut.u8Datalen);
g_tmp_length = dataOut.u8Datalen + 7;
g_tmp_buffer[0] = g_tmp_length - 1;
memcpy(&g_tmp_buffer[7], dataOut.u8ARG, dataOut.u8Datalen);
kOptTunnelMessageWriteResponse(pCmd, g_tmp_buffer);
}
else if( g_pOptDataIncomingMessageCallback ) {
g_tmp_length = g_tmp_length - 6; g_tmp_length = g_tmp_length - 6;
if(KET_NO_RESPONSE == g_pOptDataIncomingMessageCallback(g_tmp_buffer[5], g_tmp_buffer[6], g_tmp_buffer + 7, &g_tmp_length)){ if(KET_NO_RESPONSE == g_pOptDataIncomingMessageCallback(g_tmp_buffer[5], g_tmp_buffer[6], g_tmp_buffer + 7, &g_tmp_length)){
return KET_NO_RESPONSE; return KET_NO_RESPONSE;
......
//#include "app/framework/plugin/network-steering/network-steering.h"
//#include "app/framework/plugin/network-steering/network-steering-internal.h"
#include "ikk-ota.h"
#include "ikk-debug.h"
#include "../driver/ikk-led.h"
#define LED_SLOW_BLINK_ON_TIME_MS 800
#define LED_SLOW_BLINK_OFF_TIME_MS 800
#define LED_FAST_BLINK_ON_TIME_MS 200
#define LED_FAST_BLINK_OFF_TIME_MS 200
#define LED_SLOW_BLINK_CONTINUE_TIME_MS (60 * 1000)
#define LED_FAST_BLINK_CONTINUE_TIME_MS (5 * 1000)
static OTAStatusEnum g_eOTAStatus = OTA_NORMAL;
static uint8_t g_u8OtaLedId = LED_UNKNOW_ID;
pOTACallback g_pOTACallback = NULL;
static void kOTAMoudleOptCallback(OTAStatusEnum status);
//__no_init OTAGpioStatusST g_stOTAGpioStatus @ 0x2000FFF0;
static OTAGpioStatusST g_stOTAGpioStatus;
OTAStatusEnum kGetOTAStatus(void)
{
return g_eOTAStatus;
}
void kSetOTAStatus(OTAStatusEnum status)
{
g_eOTAStatus = status;
}
void kOTAMoudleInit(pOTACallback callback, uint8_t led_id)
{
g_pOTACallback = callback;
g_u8OtaLedId = led_id;
}
void kOTAMoudleCallback(OTAStatusEnum status)
{
//校验成功或失败保存gpio状态,待bootloader中恢复
if (status == OTA_VERITY_SUCCEED || status == OTA_FAILED){
iKonkeAfSelfPrint("OTA GPIO KEEP status(%d)\r\n", g_eOTAStatus);
}
if (g_pOTACallback){
g_pOTACallback(status);
}else {
if (g_u8OtaLedId != LED_UNKNOW_ID){
kOTAMoudleOptCallback(status);
}
}
}
static void kOTAMoudleOptCallback(OTAStatusEnum status)
{
iKonkeAfSelfPrint("##############kOTAMoudleUserCallback status(%d)##################\r\n", status);
static bool flg = false;//防止网关断电后,ota失败后会间隔快闪
switch(status)
{
case OTA_NORMAL:
break;
case OTA_START:
kLedOptTrigger(g_u8OtaLedId, 2 * LED_FAST_BLINK_ON_TIME_MS, 14 * LED_FAST_BLINK_ON_TIME_MS,\
OTA_UPGRADE__CONTINUE_MAX_TIME_MS /(2 * LED_FAST_BLINK_ON_TIME_MS + 14 * LED_FAST_BLINK_ON_TIME_MS), LED_ON, LED_ON);
g_eOTAStatus = OTA_START;
flg = false;
break;
case OTA_DOWNLOAD_DONE:
{
g_eOTAStatus = OTA_DOWNLOAD_DONE;
break;
}
case OTA_VERITY_SUCCEED:
//校验成功,记录继电器状态
//常亮5S
kLedOptTrigger(g_u8OtaLedId, 25 * LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_ON_TIME_MS, 1, LED_ON, LED_ON);
g_eOTAStatus = OTA_NORMAL;
break;
case OTA_FAILED:
if (flg != true){
kLedOptTrigger(g_u8OtaLedId, LED_FAST_BLINK_ON_TIME_MS, LED_FAST_BLINK_ON_TIME_MS,\
LED_FAST_BLINK_CONTINUE_TIME_MS /(LED_FAST_BLINK_ON_TIME_MS + LED_FAST_BLINK_ON_TIME_MS), LED_ON, LED_ON);
g_eOTAStatus = OTA_NORMAL;
}
flg = true;
break;
default:
iKonkeAfSelfPrint("##############Err: OTA status is not exist\r\n");
break;
}
}
#ifndef __IKONKE_MODULE_OTA_H_______________________
#define __IKONKE_MODULE_OTA_H_______________________
#include "tl_common.h"
#define OTA_UPGRADE__CONTINUE_MAX_TIME_MS (16*60*1000)
#define OTA_GPIO_RESTORE_MAXN 8
typedef enum{OTA_NORMAL=0, OTA_START,OTA_DOWNLOAD_DONE, OTA_VERITY_SUCCEED, OTA_FAILED}OTAStatusEnum;
typedef enum{OTA_GPIO_OFF=0, OAT_GPIO_ON}OTAGpioEnum;
#pragma pack(1) //按1字节对齐
typedef struct {
uint32_t pin;
bool bStatus; // on/off
}OTAGpioListSt;
#pragma pack() //取消自定义字节对齐方式
#pragma pack(1) //按1字节对齐
typedef struct {
bool bIsValid;
uint8_t gpioNum;
OTAGpioListSt gpio[OTA_GPIO_RESTORE_MAXN];
}OTAGpioStatusST;
#pragma pack() //取消自定义字节对齐方式
//OTA操作函数,一般操作用来操作led
typedef void (*pOTACallback)(OTAStatusEnum status);
//获取当前产测状态
OTAStatusEnum kGetOTAStatus(void);
void kSetOTAStatus(OTAStatusEnum status);
void kOTAMoudleInit(pOTACallback callback, uint8_t led_id);
void kOTAMoudleCallback(OTAStatusEnum status);
#endif
...@@ -288,7 +288,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len) ...@@ -288,7 +288,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len)
//same data ,not need rewrite! //same data ,not need rewrite!
return 0; return 0;
}else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.modeid,0xff,32)){ }else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.modeid,0xff,32)){
flash_write(TOKEN_USER_LOCATION+MODEL_ID_LOC_OFFSET,len,buff); //Auth: han_frc.20220105.
u8 modelid_buff[35]={0};
modelid_buff[0] = len;
memcpy(modelid_buff+1,buff,len);
flash_write(TOKEN_USER_LOCATION+MODEL_ID_LOC_OFFSET,len+1,modelid_buff);
return 0; return 0;
}else{ }else{
sOptunnel_Token_temp.modeid.modeid_len = len; sOptunnel_Token_temp.modeid.modeid_len = len;
...@@ -309,7 +313,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len) ...@@ -309,7 +313,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len)
//same data ,not need rewrite! //same data ,not need rewrite!
return 0; return 0;
}else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.cmei,0xff,32)){ }else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.cmei,0xff,32)){
flash_write(TOKEN_USER_LOCATION+CMEI_LOC_OFFSET,len,buff); //Auth: han_frc.20220105.
u8 cmei_buff[35]={0};
cmei_buff[0] = len;
memcpy(cmei_buff+1,buff,len);
flash_write(TOKEN_USER_LOCATION+CMEI_LOC_OFFSET,len+1,cmei_buff);
return 0; return 0;
}else{ }else{
sOptunnel_Token_temp.cmei.cmei_len = len; sOptunnel_Token_temp.cmei.cmei_len = len;
...@@ -330,7 +338,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len) ...@@ -330,7 +338,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len)
//same data ,not need rewrite! //same data ,not need rewrite!
return 0; return 0;
}else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.isn,0xff,32)){ }else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.isn,0xff,32)){
flash_write(TOKEN_USER_LOCATION+ISN_LOC_OFFSET,len,buff); //Auth: han_frc.20220105.
u8 isn_buff[35]={0};
isn_buff[0] = len;
memcpy(isn_buff+1,buff,len);
flash_write(TOKEN_USER_LOCATION+ISN_LOC_OFFSET,len+1,isn_buff);
return 0; return 0;
}else{ }else{
sOptunnel_Token_temp.isn.isn_len = len; sOptunnel_Token_temp.isn.isn_len = len;
......
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
</toolChain> </toolChain>
</folderInfo> </folderInfo>
<sourceEntries> <sourceEntries>
<entry excluding="apps/common|apps/sampleLight|apps/sampleContactSensor|platform/chip_826x|apps/3LightPanelDemo|apps/sampleSwitch|apps/bootLoader|platform/chip_8278" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> <entry excluding="apps/common/00ikonke_app|apps/sampleLight|apps/sampleContactSensor|platform/chip_826x|apps/3LightPanelDemo|apps/sampleSwitch|apps/bootLoader|platform/chip_8278" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries> </sourceEntries>
</configuration> </configuration>
</storageModule> </storageModule>
...@@ -5162,7 +5162,7 @@ ...@@ -5162,7 +5162,7 @@
</toolChain> </toolChain>
</folderInfo> </folderInfo>
<sourceEntries> <sourceEntries>
<entry excluding="apps/common|apps/sampleLight|apps/3LightPanelDemo|apps/sampleContactSensor|apps/sampleGW|platform/chip_826x|apps/bootLoader|platform/chip_8278" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> <entry excluding="apps/common/00ikonke_app|apps/sampleLight|apps/3LightPanelDemo|apps/sampleContactSensor|apps/sampleGW|platform/chip_826x|apps/bootLoader|platform/chip_8278" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries> </sourceEntries>
</configuration> </configuration>
</storageModule> </storageModule>
...@@ -10295,6 +10295,7 @@ ...@@ -10295,6 +10295,7 @@
<sourceEntries> <sourceEntries>
<entry excluding="apps|apps/sampleContactSensor|apps/sampleGW|platform/chip_826x|apps/3LightPanelDemo/|apps/sampleSwitch|apps/bootLoader|platform/chip_8278" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> <entry excluding="apps|apps/sampleContactSensor|apps/sampleGW|platform/chip_826x|apps/3LightPanelDemo/|apps/sampleSwitch|apps/bootLoader|platform/chip_8278" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="apps/sampleLight"/> <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="apps/sampleLight"/>
<entry excluding="00ikonke_app" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="apps/common"/>
</sourceEntries> </sourceEntries>
</configuration> </configuration>
</storageModule> </storageModule>
...@@ -20435,7 +20436,7 @@ ...@@ -20435,7 +20436,7 @@
</toolChain> </toolChain>
</folderInfo> </folderInfo>
<sourceEntries> <sourceEntries>
<entry excluding="apps/common|apps/sampleLight|apps/3LightPanelDemo|zigbee|apps/sampleContactSensor|zbhci|apps/common/main.c|apps/sampleGW|platform/chip_826x|apps/common/factory_reset.c|apps/sampleSwitch|platform/chip_8278|apps/common/module_test.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> <entry excluding="apps/common/00ikonke_app|apps/sampleLight|apps/3LightPanelDemo|zigbee|apps/sampleContactSensor|zbhci|apps/common/main.c|apps/sampleGW|platform/chip_826x|apps/common/factory_reset.c|apps/sampleSwitch|platform/chip_8278|apps/common/module_test.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries> </sourceEntries>
</configuration> </configuration>
</storageModule> </storageModule>
...@@ -25544,81 +25545,16 @@ ...@@ -25544,81 +25545,16 @@
<tool id="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1858568854" name="Print Size" superClass="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1213737038"/> <tool id="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1858568854" name="Print Size" superClass="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1213737038"/>
</toolChain> </toolChain>
</folderInfo> </folderInfo>
<folderInfo id="com.telink.tc32eclipse.configuration.app.debug.1775306817.1609575092.51908207.315250623.639924188.972222429" name="/" resourcePath="apps">
<toolChain id="com.telink.tc32eclipse.toolchain.TC32Win.app.debug.1440142784" name="TC32-GCC Toolchain" superClass="com.telink.tc32eclipse.toolchain.TC32Win.app.debug" unusedChildren="">
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.objcopy.flash.app.debug.689852528.380148680" name="Generate binary file for Flash memory" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.objcopy.flash.app.debug.689852528"/>
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533" name="Generate Extended Listing (Source + generated Assembler)" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922"/>
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055" name="Print Size" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994"/>
<targetPlatform id="com.telink.tc32eclipse.targetplatform.TC32Win.app.debug" name="TC32 Cross-Target" superClass="com.telink.tc32eclipse.targetplatform.TC32Win.app.debug"/>
<tool id="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.3052926" name="TC32 CC/Assembler" superClass="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.1623452904">
<inputType id="com.telink.tc32eclipse.tool.assembler.input.1723657684" superClass="com.telink.tc32eclipse.tool.assembler.input"/>
</tool>
<tool id="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.429172573" name="TC32 Compiler" superClass="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.1699036449">
<option id="com.telink.tc32eclipse.compiler.option.incpath.2057043023" name="Include Paths (-I)" superClass="com.telink.tc32eclipse.compiler.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="../../../apps/common"/>
<listOptionValue builtIn="false" value="../../../platform"/>
<listOptionValue builtIn="false" value="../../../proj/common"/>
<listOptionValue builtIn="false" value="../../../proj"/>
<listOptionValue builtIn="false" value="../../../zigbee/common/includes"/>
<listOptionValue builtIn="false" value="../../../zigbee/zbapi"/>
<listOptionValue builtIn="false" value="../../../zigbee/bdb/includes"/>
<listOptionValue builtIn="false" value="../../../zigbee/gp"/>
<listOptionValue builtIn="false" value="../../../zigbee/zcl"/>
<listOptionValue builtIn="false" value="../../../zigbee/ota"/>
<listOptionValue builtIn="false" value="../../../zbhci"/>
<listOptionValue builtIn="false" value="../../../apps3LightPanelDemo"/>
</option>
<inputType id="com.telink.tc32eclipse.compiler.TC32Win.input.1884210857" name="C Source Files" superClass="com.telink.tc32eclipse.compiler.TC32Win.input"/>
</tool>
<tool id="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.1312256434" name="TC32 C Linker" superClass="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.374658101"/>
<tool id="com.telink.tc32eclipse.tool.archiver.TC32Win.base.105924924" name="TC32 Archiver" superClass="com.telink.tc32eclipse.tool.archiver.TC32Win.base.390926111"/>
<tool id="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.1069527759" name="TC32 Create Extended Listing" superClass="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.911217276"/>
<tool id="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.519967884" name="TC32 Create Flash image" superClass="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.1247140710"/>
<tool id="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1447950833" name="Print Size" superClass="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1213737038"/>
</toolChain>
</folderInfo>
<folderInfo id="com.telink.tc32eclipse.configuration.app.debug.1775306817.1609575092.51908207.315250623.639924188.616483876" name="/" resourcePath="apps/common">
<toolChain id="com.telink.tc32eclipse.toolchain.TC32Win.app.debug.613123056" name="TC32-GCC Toolchain" superClass="com.telink.tc32eclipse.toolchain.TC32Win.app.debug" unusedChildren="">
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.objcopy.flash.app.debug.689852528.380148680.1225216096" name="Generate binary file for Flash memory" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.objcopy.flash.app.debug.689852528.380148680"/>
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533.1868876062" name="Generate Extended Listing (Source + generated Assembler)" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533"/>
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055.457526171" name="Print Size" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055"/>
<tool id="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.341293686" name="TC32 CC/Assembler" superClass="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.3052926">
<inputType id="com.telink.tc32eclipse.tool.assembler.input.540379208" superClass="com.telink.tc32eclipse.tool.assembler.input"/>
</tool>
<tool id="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.343483956" name="TC32 Compiler" superClass="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.429172573">
<option id="com.telink.tc32eclipse.compiler.option.incpath.1484820834" superClass="com.telink.tc32eclipse.compiler.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="../../../apps/common"/>
<listOptionValue builtIn="false" value="../../../platform"/>
<listOptionValue builtIn="false" value="../../../proj/common"/>
<listOptionValue builtIn="false" value="../../../proj"/>
<listOptionValue builtIn="false" value="../../../zigbee/common/includes"/>
<listOptionValue builtIn="false" value="../../../zigbee/zbapi"/>
<listOptionValue builtIn="false" value="../../../zigbee/bdb/includes"/>
<listOptionValue builtIn="false" value="../../../zigbee/gp"/>
<listOptionValue builtIn="false" value="../../../zigbee/zcl"/>
<listOptionValue builtIn="false" value="../../../zigbee/ota"/>
<listOptionValue builtIn="false" value="../../../zbhci"/>
<listOptionValue builtIn="false" value="../../../apps/3LightPanelDemo"/>
</option>
<inputType id="com.telink.tc32eclipse.compiler.TC32Win.input.938244707" name="C Source Files" superClass="com.telink.tc32eclipse.compiler.TC32Win.input"/>
</tool>
<tool id="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.1425616030" name="TC32 C Linker" superClass="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.1312256434"/>
<tool id="com.telink.tc32eclipse.tool.archiver.TC32Win.base.83582154" name="TC32 Archiver" superClass="com.telink.tc32eclipse.tool.archiver.TC32Win.base.105924924"/>
<tool id="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.1103277855" name="TC32 Create Extended Listing" superClass="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.1069527759"/>
<tool id="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.1272775821" name="TC32 Create Flash image" superClass="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.519967884"/>
<tool id="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.668024269" name="Print Size" superClass="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1447950833"/>
</toolChain>
</folderInfo>
<folderInfo id="com.telink.tc32eclipse.configuration.app.debug.1775306817.1609575092.51908207.315250623.639924188.1821413199" name="/" resourcePath="apps/common/00ikonke_app"> <folderInfo id="com.telink.tc32eclipse.configuration.app.debug.1775306817.1609575092.51908207.315250623.639924188.1821413199" name="/" resourcePath="apps/common/00ikonke_app">
<toolChain id="com.telink.tc32eclipse.toolchain.TC32Win.app.debug.187646455" name="TC32-GCC Toolchain" superClass="com.telink.tc32eclipse.toolchain.TC32Win.app.debug" unusedChildren=""> <toolChain id="com.telink.tc32eclipse.toolchain.TC32Win.app.debug.187646455" name="TC32-GCC Toolchain" superClass="com.telink.tc32eclipse.toolchain.TC32Win.app.debug" unusedChildren="">
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.objcopy.flash.app.debug.689852528.380148680.928630173.1947215794" name="Generate binary file for Flash memory" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.objcopy.flash.app.debug.689852528.380148680.928630173"/> <option id="com.telink.tc32eclipse.toolchain.options.toolchain.objcopy.flash.app.debug.689852528.380148680.928630173.1947215794" name="Generate binary file for Flash memory" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.objcopy.flash.app.debug.689852528.380148680.928630173"/>
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533.657496731.2048600887" name="Generate Extended Listing (Source + generated Assembler)" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533.657496731"/> <option id="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533.657496731.2048600887" name="Generate Extended Listing (Source + generated Assembler)" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533.657496731"/>
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055.718476718.725671209" name="Print Size" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055.718476718"/> <option id="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055.718476718.725671209" name="Print Size" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055.718476718"/>
<targetPlatform id="com.telink.tc32eclipse.targetplatform.TC32Win.app.debug" name="TC32 Cross-Target" superClass="com.telink.tc32eclipse.targetplatform.TC32Win.app.debug"/> <targetPlatform id="com.telink.tc32eclipse.targetplatform.TC32Win.app.debug" name="TC32 Cross-Target" superClass="com.telink.tc32eclipse.targetplatform.TC32Win.app.debug"/>
<tool id="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.753340373" name="TC32 CC/Assembler" superClass="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.3052926"> <tool id="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.753340373" name="TC32 CC/Assembler" superClass="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.1623452904">
<inputType id="com.telink.tc32eclipse.tool.assembler.input.564927692" superClass="com.telink.tc32eclipse.tool.assembler.input"/> <inputType id="com.telink.tc32eclipse.tool.assembler.input.564927692" superClass="com.telink.tc32eclipse.tool.assembler.input"/>
</tool> </tool>
<tool id="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.718615725" name="TC32 Compiler" superClass="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.429172573"> <tool id="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.718615725" name="TC32 Compiler" superClass="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.1699036449">
<option id="com.telink.tc32eclipse.compiler.option.incpath.1184969672" name="Include Paths (-I)" superClass="com.telink.tc32eclipse.compiler.option.incpath" valueType="includePath"> <option id="com.telink.tc32eclipse.compiler.option.incpath.1184969672" name="Include Paths (-I)" superClass="com.telink.tc32eclipse.compiler.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="../../../apps/common"/> <listOptionValue builtIn="false" value="../../../apps/common"/>
<listOptionValue builtIn="false" value="../../../platform"/> <listOptionValue builtIn="false" value="../../../platform"/>
...@@ -25636,11 +25572,11 @@ ...@@ -25636,11 +25572,11 @@
</option> </option>
<inputType id="com.telink.tc32eclipse.compiler.TC32Win.input.2049876111" name="C Source Files" superClass="com.telink.tc32eclipse.compiler.TC32Win.input"/> <inputType id="com.telink.tc32eclipse.compiler.TC32Win.input.2049876111" name="C Source Files" superClass="com.telink.tc32eclipse.compiler.TC32Win.input"/>
</tool> </tool>
<tool id="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.911635503" name="TC32 C Linker" superClass="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.1312256434"/> <tool id="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.911635503" name="TC32 C Linker" superClass="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.374658101"/>
<tool id="com.telink.tc32eclipse.tool.archiver.TC32Win.base.1338933857" name="TC32 Archiver" superClass="com.telink.tc32eclipse.tool.archiver.TC32Win.base.105924924"/> <tool id="com.telink.tc32eclipse.tool.archiver.TC32Win.base.1338933857" name="TC32 Archiver" superClass="com.telink.tc32eclipse.tool.archiver.TC32Win.base.390926111"/>
<tool id="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.1672188041" name="TC32 Create Extended Listing" superClass="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.1069527759"/> <tool id="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.1672188041" name="TC32 Create Extended Listing" superClass="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.911217276"/>
<tool id="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.2053522754" name="TC32 Create Flash image" superClass="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.519967884"/> <tool id="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.2053522754" name="TC32 Create Flash image" superClass="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.1247140710"/>
<tool id="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1691902702" name="Print Size" superClass="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1447950833"/> <tool id="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1691902702" name="Print Size" superClass="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1213737038"/>
</toolChain> </toolChain>
</folderInfo> </folderInfo>
<folderInfo id="com.telink.tc32eclipse.configuration.app.debug.1775306817.1609575092.51908207.315250623.639924188.1919322824" name="/" resourcePath="apps/3LightPanelDemo"> <folderInfo id="com.telink.tc32eclipse.configuration.app.debug.1775306817.1609575092.51908207.315250623.639924188.1919322824" name="/" resourcePath="apps/3LightPanelDemo">
...@@ -25693,10 +25629,10 @@ ...@@ -25693,10 +25629,10 @@
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533.1682866220" name="Generate Extended Listing (Source + generated Assembler)" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533"/> <option id="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533.1682866220" name="Generate Extended Listing (Source + generated Assembler)" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.objdump.app.debug.95576922.1680786533"/>
<option id="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055.1750090503" name="Print Size" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055"/> <option id="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055.1750090503" name="Print Size" superClass="com.telink.tc32eclipse.toolchain.options.toolchain.size.app.debug.389953994.747141055"/>
<targetPlatform id="com.telink.tc32eclipse.targetplatform.TC32Win.app.debug" name="TC32 Cross-Target" superClass="com.telink.tc32eclipse.targetplatform.TC32Win.app.debug"/> <targetPlatform id="com.telink.tc32eclipse.targetplatform.TC32Win.app.debug" name="TC32 Cross-Target" superClass="com.telink.tc32eclipse.targetplatform.TC32Win.app.debug"/>
<tool id="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.1591846300" name="TC32 CC/Assembler" superClass="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.3052926"> <tool id="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.1591846300" name="TC32 CC/Assembler" superClass="com.telink.tc32eclipse.tool.assembler.TC32Win.app.debug.1623452904">
<inputType id="com.telink.tc32eclipse.tool.assembler.input.700290468" superClass="com.telink.tc32eclipse.tool.assembler.input"/> <inputType id="com.telink.tc32eclipse.tool.assembler.input.700290468" superClass="com.telink.tc32eclipse.tool.assembler.input"/>
</tool> </tool>
<tool id="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.291726593" name="TC32 Compiler" superClass="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.429172573"> <tool id="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.291726593" name="TC32 Compiler" superClass="com.telink.tc32eclipse.tool.compiler.TC32Win.app.debug.1699036449">
<option id="com.telink.tc32eclipse.compiler.option.incpath.1247767108" name="Include Paths (-I)" superClass="com.telink.tc32eclipse.compiler.option.incpath" valueType="includePath"> <option id="com.telink.tc32eclipse.compiler.option.incpath.1247767108" name="Include Paths (-I)" superClass="com.telink.tc32eclipse.compiler.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="../../../apps/common"/> <listOptionValue builtIn="false" value="../../../apps/common"/>
<listOptionValue builtIn="false" value="../../../platform"/> <listOptionValue builtIn="false" value="../../../platform"/>
...@@ -25713,11 +25649,11 @@ ...@@ -25713,11 +25649,11 @@
</option> </option>
<inputType id="com.telink.tc32eclipse.compiler.TC32Win.input.1401590976" name="C Source Files" superClass="com.telink.tc32eclipse.compiler.TC32Win.input"/> <inputType id="com.telink.tc32eclipse.compiler.TC32Win.input.1401590976" name="C Source Files" superClass="com.telink.tc32eclipse.compiler.TC32Win.input"/>
</tool> </tool>
<tool id="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.2030034369" name="TC32 C Linker" superClass="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.1312256434"/> <tool id="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.2030034369" name="TC32 C Linker" superClass="com.telink.tc32eclipse.tool.linker.TC32Win.app.debug.374658101"/>
<tool id="com.telink.tc32eclipse.tool.archiver.TC32Win.base.585422860" name="TC32 Archiver" superClass="com.telink.tc32eclipse.tool.archiver.TC32Win.base.105924924"/> <tool id="com.telink.tc32eclipse.tool.archiver.TC32Win.base.585422860" name="TC32 Archiver" superClass="com.telink.tc32eclipse.tool.archiver.TC32Win.base.390926111"/>
<tool id="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.452692940" name="TC32 Create Extended Listing" superClass="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.1069527759"/> <tool id="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.452692940" name="TC32 Create Extended Listing" superClass="com.telink.tc32eclipse.tool.objdump.TC32Win.app.debug.911217276"/>
<tool id="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.1187529474" name="TC32 Create Flash image" superClass="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.519967884"/> <tool id="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.1187529474" name="TC32 Create Flash image" superClass="com.telink.tc32eclipse.tool.objcopy.flash.TC32Win.app.debug.1247140710"/>
<tool id="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1675834392" name="Print Size" superClass="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1447950833"/> <tool id="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1675834392" name="Print Size" superClass="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1213737038"/>
</toolChain> </toolChain>
</folderInfo> </folderInfo>
<sourceEntries> <sourceEntries>
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