Commit e31877dc authored by limm's avatar limm

V1.1

parent 4f207db8
......@@ -101,7 +101,7 @@ extern "C" {
#endif
#define ZCL_GROUP_SUPPORT 1
#define ZCL_SCENE_SUPPORT 1
#define ZCL_OTA_SUPPORT 1
#define ZCL_OTA_SUPPORT 0
#define ZCL_PRIVATE_CLUSTER_FCC0_SUPPORT 1
#if TOUCHLINK_SUPPORT
#define ZCL_ZLL_COMMISSIONING_SUPPORT 1
......
......@@ -9,11 +9,33 @@
#include "ikk-uart.h"
#include "ikk-relay.h"
#include "ikk-led.h"
#include "ikk-ota.h"
#include "ikk-command.h"
#include "ikk-common-utils.h"
#include "ikk-interpan.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 RELAY1_PIN GPIO_PC0
......@@ -138,6 +160,7 @@ AttributeChangeConfSt attribte_change_list[] = {
uint32_t u32PeroidIntervalMS = 2*1000;
bool Human_body_induction_flag = 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_u8NoDisturbModeMaxLevel = 0x64;
......@@ -162,7 +185,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status);
void kOTAMoudleUserCallback(OTAStatusEnum status);
#endif
#define UART_ENABLE false
#define UART_ENABLE true
void kUserRelayLedCallback(RelayStatusSt status);
void kRadarDetectInit(void);
void kRadarLedTragger(void);
......@@ -184,17 +207,13 @@ AttributeChangeConfSt g_ClusterAttributeConfList[] = {
{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 kLEDOffAction(LED_ID_ENUM led_id);
void App_Init(void)
{
iKonkeAfSelfPrint("\r\n************************************************\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");
#if 1
kk_err_t err = kBtnModuleInit(g_btnConfList, sizeof(g_btnConfList) / sizeof(BtnConfSt), kUserButtonAcitonCallback);
......@@ -215,7 +234,7 @@ void App_Init(void)
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);
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
uint8_t recv_header[] = {0xAA,0X55};
......@@ -228,7 +247,7 @@ void App_Init(void)
kOTAMoudleInit(kOTAMoudleUserCallback, LED_ALL_ID);
#endif
#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
// init the private cluster protocol module.
err = kOptTunnelModuleInit(kUserOODMessageIncoming);
......@@ -254,8 +273,22 @@ void Test(void )
}
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)
{
......@@ -328,7 +361,7 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst )
{
iKonkeAfSelfPrint("#####Enter Leave\r\n");
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);
......@@ -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());
if ( kGetFactoryTestStatus() == FTS_AGING_4HOU || kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS \
|| kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS \
|| kNwkIsExiting() == true){
//未老化完成,单击按键不操作继电器
return;
......@@ -401,6 +434,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
{
case EBA_CLICK:
{
iKonkeAfSelfPrint("INTO KEY_SYS_ID EBA_CLICK kNwkGetCurrentStatus = (%d)\r\n",kNwkGetCurrentStatus());
Key_Press_Test_Flag[0] = 1;
if( kNwkGetCurrentStatus() == ENS_ONLINE ) { // report connected!
......@@ -411,6 +445,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
else if(kNwkGetCurrentStatus() == ENS_LEAVED)
{
kNwkFactoryReset(false);
iKonkeAfSelfPrint("Start Joining...........\r\n");
kNwkJoiningStart(NWK_STEERING_TIMEOUT_MS,JoinCompleteCallback); //开启组网
}
}
......@@ -445,6 +480,15 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
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;
if (kNwkGetCurrentStatus() == ENS_ONLINE){
static uint32_t lastTimeMS = 0;
......@@ -453,9 +497,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
|| (currentTimeMS - lastTimeMS >= MAX_FIRST_USER_KEY_LEAVE_NWK_INTERVAL_TIME_MS)){
firstLongPressFlg = true;
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 {
//second times long press
if (currentTimeMS - lastTimeMS < MAX_FIRST_USER_KEY_LEAVE_NWK_INTERVAL_TIME_MS){
......@@ -535,8 +577,8 @@ void kUserRelayLedCallback(RelayStatusSt status)
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[0] == true \
|| kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
|| kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
power_on_sync[0] = false;
if (status.opt == EZAO_OFF){
kLEDOffAction(LED1_ID);
......@@ -557,8 +599,8 @@ void kUserRelayLedCallback(RelayStatusSt status)
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[1] == true \
|| kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
|| kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
power_on_sync[1] = false;
if (status.opt == EZAO_OFF){
kLEDOffAction(LED2_ID);
......@@ -579,8 +621,8 @@ void kUserRelayLedCallback(RelayStatusSt status)
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[2] == true \
|| kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
|| kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
power_on_sync[2] = false;
if (status.opt == EZAO_OFF){
kLEDOffAction(LED3_ID);
......@@ -601,8 +643,8 @@ void kUserRelayLedCallback(RelayStatusSt status)
if (kNwkGetCurrentStatus() == ENS_ONLINE || power_on_sync[3] == true \
|| kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
|| kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
power_on_sync[3] = false;
if (status.opt == EZAO_OFF){
kLEDOffAction(LED4_ID);
......@@ -661,6 +703,7 @@ static void kSetLedStatus(LED_ID_ENUM id)
//恢复继电器的LED状态
if (id == LED_ALL_ID)
{
iKonkeAfSelfPrint("##########kSetLedStatus LED_ALL_ID111111111111111111\r\n");
kLedOptTrigger(LED_ALL_ID, 0, 0, 0, LED_OFF, LED_IGNORE);
for (uint8_t i = 1; i <= Support_Endpoint_Num; i++){
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
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 )
{
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
iKonkeAfSelfPrint("--------------------------------------\r\n");
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[1] = kZclOnOffClusterServerOnOffGet(1);
args_in_out[2] = kZclOnOffClusterServerOnOffGet(2);
args_in_out[3] = kZclOnOffClusterServerOnOffGet(3);
args_in_out[4] = kZclOnOffClusterServerOnOffGet(4);
args_in_out[1] = channelValue1;
args_in_out[2] = channelValue2;
args_in_out[3] = channelValue3;
#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();
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;
break;
}
case (0xFE):
{
//set disturb mode
uint8_t mode = args_in_out[0];
if (mode != 0x00 && mode != 0x01){
#endif
}else if (command == 0x01){
args_in_out[0] = ERR_NO_NONE;
#ifndef FOUR_LIGHT_PANEL
OnOffCtrlEnum onoffctrl[3] = {0};
onoffctrl[0] = args_in_out[1];
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;
}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////
if (kLedIsBlinking(LED_ALL_ID) != true) {
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;
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);
args_in_out[1] = mode;
*length_in_out = 2;
break;
}else {
args_in_out[0] = ERR_NO_COMMAND_FORMAT;
}
case (0xFF):
{
uint8_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(LED2_ID) == true
&& permitJoinTimeS == 0
&& kNwkGetCurrentStatus() != ENS_JOINING){
kLedOptTrigger(LED_ALL_ID, 0, 0, 0, LED_OFF, LED_IGNORE);
// kLEDOffAction(LED_ALL_ID);
args_in_out[1] = onOffStatus;//下发命令
*length_in_out = 2;
//iKonkeAfSelfPrintln("2.retStatus[%d], channel[%d], onoff[%d]",retStatus, channelID, onOffStatus);
break;
}
case (0xE4):
{
uint8_t u8NetworkSteering_ch = args_in_out[0];
uint16_t u16NetworkSteering_panid = ((uint16_t)args_in_out[1] << 8) | ((uint16_t)args_in_out[2]);
kSetNetworkSteeringInfo(u8NetworkSteering_ch, u16NetworkSteering_panid);
args_in_out[1] = u8NetworkSteering_ch;
args_in_out[2] = (uint8_t)(u16NetworkSteering_panid >> 8);
args_in_out[3] = (uint8_t)(u16NetworkSteering_panid);
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);
}
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: {
iKonkeAfSelfPrint("Err: opcode is not exist(%d:%X)!!\r\n", channel, 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
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)
{
......@@ -991,7 +1216,7 @@ s32 kkSystemSetUpEventHandler(void *arg )
for (uint8_t i = 1; i <= Support_Endpoint_Num; i++){
if(st == NV_SUCC)
{
relayStatusBuffer[i-1] = g_zcl_onOffAttrs[i-1].onOff;
relayStatusBuffer[i-1] = false;
}
power_on_sync[i - 1] = true;
iKonkeAfSelfPrint("###########EP(%d), status(%d)\r\n", i, relayStatusBuffer[i-1]);
......@@ -1008,6 +1233,14 @@ s32 kkSystemSetUpEventHandler(void *arg )
#if UART_ENABLE
kInterPanMoudleInit(kUserInterPanMsgInComingPaser);
#endif
addrExt_t addr1;
zb_getLocalExtAddr(addr1);
SWAP_EUI64((uint8_t *)addr1);//取反
iKonkeAfSelfPrint("mac1 :\r\n");
iKonkeAfSelfPrintBuffer(addr1,8);
return -1;
}
......@@ -1058,18 +1291,18 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status)
//如果有单独系统LED也需要都点亮
// LED_OPT_ON(LED_SYS_ID);
break;
case FTS_AGING_FORCE_EXIT:
iKonkeAfSelfPrint("############## FactoryTestSatus is FTS_AGING_FORCE_EXIT\r\n");
case FTS_FORCE_EXIT:
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);
break;
case FTS_AGING_WAITING:
case FTS_WAITING_RELEASED:
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);
break;
case FTS_AGING_FORCE_REBOOT:
case FTS_FORCE_REBOOT:
SYSTEM_RESET();
break;
default:
......@@ -1149,8 +1382,8 @@ s32 kRadarCheckEventHandler(void *arg)
{
if (kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
|| kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
return 0;
}
......@@ -1174,8 +1407,8 @@ s32 kRadarLedEventHandler(void *arg)
{
if (kGetFactoryTestStatus() == FTS_AGING_4HOU \
|| kGetFactoryTestStatus() == FTS_AGING_DONE \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING \
|| kGetFactoryTestStatus() == FTS_AGING_WAITING_SECOND_PRESS){
|| kGetFactoryTestStatus() == FTS_WAITING_RELEASED \
|| kGetFactoryTestStatus() == FTS_WAITING_SECOND_PRESS){
return 0;
}
......@@ -1324,6 +1557,8 @@ void UartMsgProcessHandle(UMsgNodeSt *pMsgNode )
case UART_MSG_QUERY_FACTORY_INFO_OPCODE:
case UART_MSG_ENTER_FACTORY_TEST_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);
break;
......@@ -1422,6 +1657,8 @@ void kUserInterPanMsgInComingPaser(UMsgNodeSt *pMsgNode)
case UART_MSG_QUERY_SWITCH_ONOFF_OPCODE:
case UART_MSG_ENTER_FACTORY_TEST_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);
break;
......
......@@ -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].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 ) {
kLedDriverhandler(led_index, LED_ON);
......
......@@ -202,11 +202,6 @@ void Update_Local_Attribute_Info(void)
Rewrite_ManufactureName();
}
typedef struct{
zcl_basicAttr_t basicAttrs_temp;
zcl_identifyAttr_t identifyAttrs_temp;
......
......@@ -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_ON 0x01
typedef struct tag_zcl_report_table{
uint8_t endpoint;
uint16_t cluster;
......
......@@ -56,7 +56,7 @@ uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len)
/* DESP: remap opcode, arg direction 0: FCC0->AA55 1:AA55->FCC0
* Auth:
* */
uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction)
static uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction)
{
for (uint8_t i = 0; i < (sizeof(opcodeReampTable)/(2*sizeof(uint16_t))); i++ ) {
if (opcodeReampTable[i][0] == Opcode) {
......@@ -66,7 +66,6 @@ uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction)
return 0xFFFF;
}
kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut)
{
//UMsgNodeSt uMsgNode = {0};
......@@ -144,7 +143,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
//check install code length 20200725
uint8_t length = data.u8ARG[0];
if (length != 16) {
if (length != 16) {//如果不是16位的数据就不做任何改变,只回复
send_buf.u8ARG[0] = ERR_FORMAT;
send_buf.u8ARG[1] = data.u8ARG[0];
memcpy(&send_buf.u8ARG[2], &data.u8ARG[1], length);
......@@ -247,9 +246,9 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
memset(buffer, 0, 33);
uint8_t *data = ISN_TOKEN_GET();
iKonkeAfSelfPrint("len %x\r\n",data[0]);
iKonkeAfSelfPrintBuffer(data+1,32);
length = data[0];
iKonkeAfSelfPrint("read ISN len %x\r\n",data[0]);
iKonkeAfSelfPrintBuffer(data+1,32);
memcpy(buffer,data,length +1);
if(length > 32) {
......@@ -268,7 +267,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
{
uint8_t mac_length = 0x00;
addrExt_t addr,local_addr;
flash_read(CFG_MAC_ADDRESS,8,(uint8_t*)local_addr);
zb_getLocalExtAddr(local_addr);
mac_length = data.u8ARG[0];
if (mac_length != 8) {
......@@ -293,8 +292,7 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
case (UART_MSG_READ_MAC_CODE_OPCODE)://ok
{
addrExt_t addr;
flash_read(CFG_MAC_ADDRESS,8,(uint8_t*)addr);
// zb_getLocalExtAddr(addr);
zb_getLocalExtAddr(addr);
send_buf.u8ARG[0] = 0x00;
send_buf.u8ARG[1] = 0x08;
......@@ -424,61 +422,6 @@ kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st
reply_control_field = Z_TO_H_NO_ACK;
break;
}
// case (UART_MSG_READ_DEVICE_SNAP_OPCODE):
// {
// uint8_t tmp_value = 0;
// uint8_t send_length = 0;
//
// send_buf.u8ARG[send_length++] = ERR_OK;
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_STACK_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
//
// EmberEUI64 localEui64;
// EmberNodeType nodeTypeResult = 0xFF;
// EmberNetworkParameters networkParams;
// emberAfGetEui64(localEui64);
// SWAP_EUI64((uint8_t *)&localEui64);
//
// if(emberAfNetworkState() == EMBER_JOINED_NETWORK) {
// emberAfGetNetworkParameters(&nodeTypeResult, &networkParams);
// send_buf.u8ARG[send_length++] = HI_UINT16(networkParams.panId);
// send_buf.u8ARG[send_length++] = LO_UINT16(networkParams.panId);
// send_buf.u8ARG[send_length++] = HI_UINT16(emberAfGetNodeId());
// send_buf.u8ARG[send_length++] = LO_UINT16(emberAfGetNodeId());
// memcpy(&send_buf.u8ARG[send_length], localEui64, 8);
// send_length = send_length + 8;
// send_buf.u8ARG[send_length++] = networkParams.radioChannel;
// send_buf.u8ARG[send_length++] = networkParams.radioTxPower;
// } else {
// emberAfGetNetworkParameters(&nodeTypeResult, &networkParams);
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// memcpy(&send_buf.u8ARG[send_length], localEui64, 8);
// send_length = send_length + 8;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// }
// //SV
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_APPLICATION_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
// //HV
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_HW_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
// memset(&send_buf.u8ARG[send_length], 0xff, 4);
// send_length = send_length + 4;
// send_buf.u8ARG[send_length++] = emberAfNetworkState();
//
// send_buf.u8ArgLen = send_length;
// //send_buf.u8Datalen = send_length + 3;
// reply_control_field = Z_TO_H_NO_ACK;
//
// break;
// }
//nwk operation request
case (UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE)://ok
{
......
......@@ -34,7 +34,6 @@ typedef struct{
}MsgFrameworkFormat_st;
kk_err_t kCmdGeneralMsgPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataField_st *pDataOut);
uint16_t kCmdOpcodeRemap(uint16_t Opcode, uint8_t direction);
uint16_t kCmdGetMsgCrc16Value( uint8_t* msg, uint8_t len);
uint8_t kCmdMsgDataSentByPort(uint8_t u8Control_Field, DataField_st data, bool isGetResult, ComPortEm port);
......
......@@ -3,16 +3,35 @@
#include "ikk-token.h"
#include "ikk-common-utils.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_4HOU_VALUE 0xA2
#define AGINE_TEST_DONE_VALUE 0xFA
//已经置老化标志
#define SINGLE_BOARD_TEST_DONE_VALUE 0xF1 //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
#define FULL_DEVICE_TEST_DONE_VALUE 0xF2 //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟?
#define FORCE_FACTORY_TEST_VALUE 0xF8 //锟斤拷锟斤拷锟斤拷锟斤拷锟角匡拷锟斤拷顺锟?
#define SINGLE_BOARD_TEST_DONE_VALUE 0xF1
#define FULL_DEVICE_TEST_DONE_VALUE 0xF2
#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;
s32 kFactoryTestEventHandler(void *arg);
......@@ -28,17 +47,20 @@ typedef struct{
uint32_t u32FirstBtnLongPressedCountDown;
}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] \
= {{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 uint32_t g_u32AgingTotalTimeMS = 0;
static uint32_t g_u32AgingMaxTimeMS = 0;
static pFactoryTestPollCallback g_pFactoryTestPollCallback = NULL;
static uint8_t g_u8LongPressedKeyIndex = 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.
* Auth: mazj.20200227.
* */
......@@ -102,6 +124,10 @@ uint8_t kGetFactoryTestValueStatus(void)
status = status | FT_FORCE_EXIT;
}else if (kGetSingleBoardValue() != SINGLE_BOARD_TEST_DONE_VALUE) {
status = status | FT_SINGLE_BOARD_TEST;
}else {
#if !Z30_DEVICE_FULL_DEVICE_ENBALE
status = status | FT_NORMAL_DONE;
#endif
}
#endif
......@@ -109,12 +135,17 @@ uint8_t kGetFactoryTestValueStatus(void)
if (kGetFullDeviceValue() == FORCE_FACTORY_TEST_VALUE) {
status = status | FT_FORCE_EXIT;
}else if (kGetFullDeviceValue() != FULL_DEVICE_TEST_DONE_VALUE){
status = status | FT_FULL_DEVICE_TEST;
}else if(kGetSingleBoardValue() == SINGLE_BOARD_TEST_DONE_VALUE){
status = status | FT_FULL_DEVICE_TEST;//没过整机时该标志位是1,单板整机都过的时候第三位bit为1,最后两个bit位为0
}else {
status = status | FT_NORMAL_DONE;
}
#endif
#if Z30_DEVICE_AGING_ENABLE
if (kGetAgingTestValue() != AGINE_TEST_DONE_VALUE) {
status = status | FT_AGING_DONE;
}
#endif
return status;
}
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
g_stFactoryTestControllerList[u8FactoryTestIndex].eCurrentBtnAction = action;
//松手复位,触摸按键长时间按着也会自动松手
if (g_eFactoryTestStatus == FTS_AGING_WAITING && g_stFactoryTestControllerList[g_u8LongPressedKeyIndex].eCurrentBtnAction == EBA_RELEASED){
g_eFactoryTestStatus = FTS_AGING_FORCE_REBOOT;
iKonkeAfSelfPrint("######daiyanzhengqiangtui111 FactoryTest Released\r\n");
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; //快点执行自定义函数
iKonkeAfSelfPrint("######33333333333333333 FactoryTest Released\r\n");
}
......@@ -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)
{
//UMsgNodeSt uMsgNode = {0};
......@@ -239,13 +290,23 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie
case (UART_MSG_QUERY_DEVICE_VERSION_OPCODE):
{
send_buf.u8ARG[0] = ERR_OK;
uint8_t hardversion = 0;
uint8_t softversion = 0;
//wait to do
send_buf.u8ARG[1] = 0x20;
send_buf.u8ARG[2] = 0x20;
status_t status;
zclAttrInfo_t *hwattrInfo = ReadServerAttribute(1,ZCL_CLUSTER_GEN_BASIC,ZCL_ATTRID_BASIC_HW_VER,&status);
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[4] = 0XFF;
send_buf.u8ARG[0] = ERR_OK;;
send_buf.u8ARG[0] = ERR_OK;
send_buf.u8ArgLen = 5;
reply_control_field = Z_TO_H_NO_ACK;
break;
......@@ -272,26 +333,27 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie
}
case (UART_MSG_EXIT_FACTORY_TEST_OPCODE):
{
uint8_t token_data = 0;
if(data.u8ARG[0]&0x01)
{
kSetSingleBoardValue(SINGLE_BOARD_TEST_DONE_VALUE);
iKonkeAfSelfPrint("######kGetSingleBoardValue(%x)\r\n", token_data);
send_buf.u8ARG[0] = ERR_OK;
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)
{
kSetFullDeviceValue(FULL_DEVICE_TEST_DONE_VALUE);
iKonkeAfSelfPrint("######kGetFullBoardValue(%02x)\r\n", token_data);
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);
iKonkeAfSelfPrint("######kGetAgingTestValue(%02x)\r\n", token_data);
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.u8ArgLen = 2;
......@@ -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);
break;
}
case UART_MSG_QUERY_SWITCH_ONOFF_OPCODE:
case (UART_MSG_QUERY_SWITCH_ONOFF_OPCODE):
{
extern uint8_t Key_Press_Test_Flag[5];
for (uint8_t i = 0; i < 6; i++){
......@@ -342,25 +404,116 @@ kk_err_t kkFactoryMsgInComingPaser(UMsgNodeSt *pMsgNode, ComPortEm port, DataFie
send_buf.u8ARG[1] = kGetFactoryTestValueStatus();
break;
}
case UART_MSG_ONOFF_SWITCH_OPCODE:
{
uint8_t command = data.u8ARG[0];
if(command == 1){ //控制命令
for (uint8_t i = 0; i < 9; i++){
if(i < 4){
if(data.u8ARG[i+1] == 1)
kZclOnOffClusterServerOnOffControl(i+1, 1);
else if(data.u8ARG[i+1] == 0)
kZclOnOffClusterServerOnOffControl(i+1, 0);
}
else{
data.u8ARG[i+1] = 0xff;
case UART_MSG_ONOFF_SWITCH_OPCODE: {
uint8_t err = 0;
if (data.u8ARG[0] == 0x01) {
for (uint8_t i = 1; i < 9; i++) {
if (data.u8ARG[i] == 0x00) { // on
kZclOnOffClusterServerOnOffControl(i, EOOC_OFF);
} else if (data.u8ARG[i] == 0x01) {
kZclOnOffClusterServerOnOffControl(i, EOOC_ON);
}
}
}
//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;
memcpy(&send_buf.u8ARG[1], &data.u8ARG[1], 8);
send_buf.u8ArgLen = 10;
send_buf.u8ARG[1] = factoryTest;
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;
}
default:
......@@ -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
iKonkeAfSelfPrint("######kFactoryTestInit11111111111111111111111111111111111111\r\n");
if(NULL == callback || NULL == conf_list || btn_num > AGING_EXIT_MAX_BTN_NUM) {
return;
}
......@@ -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[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);
kBtnaIRQCallbackRegister(kFactoryTestBtnActionCallback);
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){
TL_ZB_TIMER_CANCEL(&kFactoryTestEvt);
}
kFactoryTestEvt = TL_ZB_TIMER_SCHEDULE(kFactoryTestEventHandler, NULL, 1000);
g_eFactoryTestStatus = FTS_START;
}else {
g_eFactoryTestStatus = FTS_NORMAL;
}
kBtnaIRQCallbackRegister(kFactoryTestBtnActionCallback);
g_pFactoryTestPollCallback = callback;
g_u32AgingTotalTimeMS = 0;
// g_u8AgingForceExitBtnId = btn_id;
#endif
iKonkeAfSelfPrint("\r\n######kFactoryTestInit status1111111111111111111111111(%d)\r\n", g_eFactoryTestStatus);
//led indicate
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
uint8_t value = TEST_INIT_VALUE;
kSetAgingTestValue(value);
kSetSingleBoardValue(value);
kSetFullDeviceValue(value);
g_eFactoryTestStatus = FTS_NORMAL;
#endif
}
......@@ -427,7 +630,7 @@ s32 kFactoryTestEventHandler(void *arg)
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)
{
case (FTS_START):
......@@ -460,16 +663,20 @@ s32 kFactoryTestEventHandler(void *arg)
//return;
g_u32Count = FACTORY_TEST_POLL_TIMES;//快点处理自定义函数
break;
case (FTS_AGING_FORCE_EXIT):
g_eFactoryTestStatus = FTS_AGING_WAITING;
case (FTS_FORCE_EXIT):
g_eFactoryTestStatus = FTS_WAITING_RELEASED;
break;
case (FTS_AGING_WAITING):
case (FTS_WAITING_RELEASED):
break;
case (FTS_AGING_FIRST_LONG_PRESSED):
g_eFactoryTestStatus = FTS_AGING_WAITING_SECOND_PRESS;
case (FTS_FIRST_LONG_PRESSED):
g_eFactoryTestStatus = FTS_WAITING_SECOND_PRESS;
break;
case (FTS_AGING_WAITING_SECOND_PRESS):
case (FTS_WAITING_SECOND_PRESS):
break;
//Auth: han_frc.20220105.
case (FTS_NORMAL):
iKonkeAfSelfPrint("######FTS_NORMAL STOP EVENT!!!!!!!!!!!\r\n");
return -1;
default:
break;
}
......@@ -508,8 +715,8 @@ s32 kFactoryTestEventHandler(void *arg)
if ( g_stFactoryTestControllerList[index].u8BtnLongPressTimes == LONG_PRESS_1_TIMES \
|| g_stFactoryTestControllerList[index].bIsFirstBtnLongPressed == true){
//successfully exit aging test
g_eFactoryTestStatus = FTS_AGING_FORCE_EXIT;
kSetAgingTestValue(AGINE_TEST_DONE_VALUE);
g_eFactoryTestStatus = FTS_FORCE_EXIT;
kSetAgingTestValue(FORCE_FACTORY_TEST_VALUE);
#if Z30_DEVICE_SINGLE_BOARD_ENABLE
if(kGetSingleBoardValue() != SINGLE_BOARD_TEST_DONE_VALUE)
kSetSingleBoardValue(FORCE_FACTORY_TEST_VALUE);
......@@ -532,7 +739,7 @@ s32 kFactoryTestEventHandler(void *arg)
g_u32Count = FACTORY_TEST_POLL_TIMES;//快点处理自定义函数
//记录当前的老化状态
g_eLastFactoryTestStatus = g_eFactoryTestStatus;
g_eFactoryTestStatus = FTS_AGING_FIRST_LONG_PRESSED;
g_eFactoryTestStatus = FTS_FIRST_LONG_PRESSED;
iKonkeAfSelfPrint("######2222222222222222222222 == 0\r\n");
}
......@@ -570,5 +777,38 @@ s32 kFactoryTestEventHandler(void *arg)
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{
FTS_AGING_4HOU_START,
FTS_AGING_4HOU,
FTS_AGING_DONE,
FTS_AGING_FORCE_EXIT,
FTS_AGING_WAITING,
FTS_AGING_FORCE_REBOOT,
FTS_AGING_FIRST_LONG_PRESSED,
FTS_AGING_WAITING_SECOND_PRESS
FTS_FORCE_EXIT,
FTS_WAITING_RELEASED,//waiting key released
FTS_FORCE_REBOOT,
FTS_FIRST_LONG_PRESSED,
FTS_WAITING_SECOND_PRESS,
FTS_SINGLE_BOARD_TEST,
FTS_FULL_DEVICE_TEST,
FTS_SINGLE_BOARD_TEST_DONE,
FTS_FULL_DEVICE_TEST_DONE,
}FactoryTestStatusEnum;
typedef struct{
......@@ -74,7 +78,14 @@ void kSetAgingMaxTime(uint16_t value);
//获取当前产测状态
FactoryTestStatusEnum kGetFactoryTestStatus(void);
//void kGetFactoryTestBtnAction(uint8_t btn_id, BtnActionEnum action);
void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num);
void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_list[], uint8_t btn_num,uint8_t led_id);
void kSetNetworkSteeringInfo(uint8_t channel, uint16_t PanId);
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);
#endif
......
......@@ -8,7 +8,7 @@
#include "ikk-debug.h"
#include "ikk-token.h"
#include "ikk-network.h"
#include "ikk-factory-test.h"
static bool gInterPanEnabled; // 1:enable
static uint16_t gInterPanID = 0x1111; // 1:enable
......@@ -16,12 +16,10 @@ static uint8_t g_interpanChannel = 20;
pInterPanMsgIncomingCallback gInterPanMsgIncomingCallback;
static ev_timer_event_t *Interpan_timerEvt = NULL;
static ev_timer_event_t *Interpan_DelaySendEvt = NULL;
static INCOM_MESSAGE_INFO sIncomingMessageInfo = {0};
static s32 kInterPanEventHandler(void);
static s32 kInterPanDelaySendTestDataEventHandler(void );
/**
* @brief Definition for Incoming cluster / Sever Cluster
......@@ -104,8 +102,7 @@ void kInterPanEnable(uint8_t channel)
{
rf_setChannel(channel);
printf("kInterPanEnable enable,Regesiter Interpan Func,network = %d\r\n!!\r\n",kNwkGetCurrentStatus());
if (kNwkGetCurrentStatus() == ENS_LEAVED) {
if (!zb_isDeviceJoinedNwk()) {
af_endpointRegister(INTERPAN_ENDPOINT, (af_simple_descriptor_t *)&kInterpanSimpleDesc, afInterpan_rx_handler, afInterpan_dataSendConfirm);
}
else{
......@@ -128,19 +125,17 @@ void kInterpanDisable(void)
void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming)
{
bool interPanEnabledFlg = kGetInterpanEnableFlg();
if (interPanEnabledFlg) {
gInterPanEnabled = true;
if (kGetFactoryTestStatus() == FTS_NORMAL) {
gInterPanEnabled = false;
af_endpointUnregister(INTERPAN_ENDPOINT);
printf("kInterPanEnable disable\r\n!!\r\n");
}
if (gInterPanEnabled == true) {
else{
gInterPanEnabled = true;
printf("kInterPanEnable enable\r\n!!\r\n");
kInterPanEnable(INTERPAN_CHANNEL);
if(Interpan_timerEvt){
TL_ZB_TIMER_CANCEL(&Interpan_timerEvt);
}
Interpan_timerEvt = TL_ZB_TIMER_SCHEDULE(kInterPanEventHandler, NULL, INTERPAN_AUTO_OFF_TIME);
if (kNwkGetCurrentStatus() == ENS_LEAVED) {
if (!zb_isDeviceJoinedNwk()) {
if(Interpan_DelaySendEvt)
TL_ZB_TIMER_CANCEL(&Interpan_DelaySendEvt);
......@@ -211,17 +206,6 @@ static s32 kInterPanDelaySendTestDataEventHandler(void )
sSend_Count = 0;
return -1;
}
static s32 kInterPanEventHandler(void)
{
iKonkeAfSelfPrint("kInterPanEventHandler\r\n");
if (gInterPanEnabled ==true) {
af_endpointUnregister(INTERPAN_ENDPOINT);
kInterPanSetEnableStatus(false);
}
return -1;
}
kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode)
{
......
......@@ -12,7 +12,6 @@ extern const af_simple_descriptor_t kInterpanSimpleDesc;
#define INTERPAN_EVENT_INIT 0x00 // interPan Event
#define INTERPAN_EVENT_OFF 0x01 //
#define INTERPAN_AUTO_OFF_TIME (10 * 60 * 1000)
#define INTERPAN_DELAY_SEND_INTERVAL (3 * 1000)
#define INTERPAN_DELAY_SEND_TIMES (2)
#define INTERPAN_CHANNEL 20
......@@ -38,5 +37,7 @@ kk_err_t kInterPanSend(UMsgNodeSt *pMsgNode);
void kInterpan_Init(void);
bool kInterPanSetEnableStatus(uint8_t enable);
bool kInterPanGetEnableStatus(void);
void kInterPanMoudleInit(pInterPanMsgIncomingCallback pfunc_incoming);
#endif /* _SAMPLE_LIGHT_H_ */
......@@ -86,6 +86,8 @@
#define UART_MSG_QUERY_SWITCH_ONOFF_OPCODE 0xED06
#define UART_MSG_ENTER_FACTORY_TEST_OPCODE 0xED14
#define UART_MSG_ONOFF_SWITCH_OPCODE 0xED15
#define UART_MSG_QUERY_FACTORY_STATE_OPCODE 0xED16
#define UART_MSG_LED_GROUP_CONTROL_OPCODE 0xED17
#define UART_MSG_GPIO_TEST_OPCODE 0xED10
#define UART_MSG_READ_RSSI_REQUEST_OPCODE 0xED12
......@@ -172,6 +174,7 @@ typedef enum {
ERR_WRITE_FAILED=0x04,
ERR_READ_WRITE_TIMEOUT=0x05,
ERR_NOT_EXIST=0x06,
ERR_EXEC_FAILED=0xe0,
ERR_UNKNOW=0xFF,
}ERR_RET_E;
typedef enum { Z3D_COORDINATOR = 0, Z3D_ROUTER, Z3D_ENDDEVICE }Z3DevTypeEm;
......
......@@ -400,7 +400,8 @@ void kNwkFactoryReset(bool is_nwk_indicator)
//led can blink when network leaved
if (is_nwk_indicator == true){
zb_factoryReset();
if(zb_isDeviceJoinedNwk())
zb_factoryReset();
g_KeyPressCauasLeave = true;
//add by maozj 20200407 for reset count down after network leaved
g_u32NwkExitCountDownCounter = MS2COUNT(LED_FAST_BLINK_CONTINUE_TIME_MS);
......@@ -444,7 +445,7 @@ void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf)
NwkStatusEnum kNwkGetCurrentStatus(void )
{
NwkStatusEnum status;
if(zb_isDeviceJoinedNwk()){
if(zb_isDeviceJoinedNwk() ||(kInterPanGetEnableStatus())){
status = ENS_ONLINE;
g_bIsNwkJoiningFlg = false;
}
......
......@@ -6,6 +6,10 @@
#include "ikk-config.h"
#include "ikk-token.h"
#include "../../../../zigbee/zcl/zcl_include.h"
#include "ikk-command.h"
#include "../driver/ikk-uart.h"
#include "ikk-factory-test.h"
// FCC0-0000
#pragma pack(1)
typedef struct tag_private_clsFCC0_attr0000_frame_st {
......@@ -27,55 +31,7 @@ pFUNC_OPTDATA_MESSAGE_CALLBACK g_pOptDataIncomingMessageCallback = NULL;
extern bool Get_Model_ID(uint8_t *ModeID);
extern _CODE_ZCL_ zclReadCmd_t *zcl_parseInReadCmd(zclIncoming_t *pCmd);
extern _CODE_ZCL_ status_t zcl_readRsp(u8 srcEp, epInfo_t *pDstEpInfo, u16 clusterId, u16 manuCode, u8 disableDefaultRsp, u8 direction, u8 seqNo, zclReadRspCmd_t *readRspCmd);
//_CODE_ZCL_ static status_t zcl_Private_cmdHandler(zclIncoming_t *pInMsg);
//
//
//
//
//_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,
uint16_t clusterId,
uint16_t attributeId,
......@@ -271,7 +227,29 @@ kk_err_t kOptTunnelMessageIncoming(OptMethodEm method,zclIncoming_t *pCmd)
// {
if( length >= 7 ) {
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;
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;
......
//#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)
//same data ,not need rewrite!
return 0;
}else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.modeid,0xff,32)){
flash_write(TOKEN_USER_LOCATION+MODEL_ID_LOC_OFFSET,len,buff);
//Auth: han_frc.20220105.
u8 modelid_buff[35]={0};
modelid_buff[0] = len;
memcpy(modelid_buff+1,buff,len);
flash_write(TOKEN_USER_LOCATION+MODEL_ID_LOC_OFFSET,len+1,modelid_buff);
return 0;
}else{
sOptunnel_Token_temp.modeid.modeid_len = len;
......@@ -309,7 +313,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len)
//same data ,not need rewrite!
return 0;
}else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.cmei,0xff,32)){
flash_write(TOKEN_USER_LOCATION+CMEI_LOC_OFFSET,len,buff);
//Auth: han_frc.20220105.
u8 cmei_buff[35]={0};
cmei_buff[0] = len;
memcpy(cmei_buff+1,buff,len);
flash_write(TOKEN_USER_LOCATION+CMEI_LOC_OFFSET,len+1,cmei_buff);
return 0;
}else{
sOptunnel_Token_temp.cmei.cmei_len = len;
......@@ -330,7 +338,11 @@ uint8_t General_Custom_Token_Save(uint8_t item,uint8_t *buff,uint8_t len)
//same data ,not need rewrite!
return 0;
}else if(All_Same_Data((uint8_t*)&sOptunnel_Token_temp.isn,0xff,32)){
flash_write(TOKEN_USER_LOCATION+ISN_LOC_OFFSET,len,buff);
//Auth: han_frc.20220105.
u8 isn_buff[35]={0};
isn_buff[0] = len;
memcpy(isn_buff+1,buff,len);
flash_write(TOKEN_USER_LOCATION+ISN_LOC_OFFSET,len+1,isn_buff);
return 0;
}else{
sOptunnel_Token_temp.isn.isn_len = len;
......
......@@ -87,7 +87,7 @@
</toolChain>
</folderInfo>
<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>
</configuration>
</storageModule>
......@@ -5162,7 +5162,7 @@
</toolChain>
</folderInfo>
<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>
</configuration>
</storageModule>
......@@ -10295,6 +10295,7 @@
<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 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>
</configuration>
</storageModule>
......@@ -20435,7 +20436,7 @@
</toolChain>
</folderInfo>
<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>
</configuration>
</storageModule>
......@@ -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"/>
</toolChain>
</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">
<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.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"/>
<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"/>
</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">
<listOptionValue builtIn="false" value="../../../apps/common"/>
<listOptionValue builtIn="false" value="../../../platform"/>
......@@ -25636,11 +25572,11 @@
</option>
<inputType id="com.telink.tc32eclipse.compiler.TC32Win.input.2049876111" name="C Source Files" superClass="com.telink.tc32eclipse.compiler.TC32Win.input"/>
</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.archiver.TC32Win.base.1338933857" name="TC32 Archiver" superClass="com.telink.tc32eclipse.tool.archiver.TC32Win.base.105924924"/>
<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.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.size.TC32Win.app.debug.1691902702" name="Print Size" superClass="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1447950833"/>
<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.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.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.1247140710"/>
<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>
</folderInfo>
<folderInfo id="com.telink.tc32eclipse.configuration.app.debug.1775306817.1609575092.51908207.315250623.639924188.1919322824" name="/" resourcePath="apps/3LightPanelDemo">
......@@ -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.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"/>
<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"/>
</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">
<listOptionValue builtIn="false" value="../../../apps/common"/>
<listOptionValue builtIn="false" value="../../../platform"/>
......@@ -25713,11 +25649,11 @@
</option>
<inputType id="com.telink.tc32eclipse.compiler.TC32Win.input.1401590976" name="C Source Files" superClass="com.telink.tc32eclipse.compiler.TC32Win.input"/>
</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.archiver.TC32Win.base.585422860" name="TC32 Archiver" superClass="com.telink.tc32eclipse.tool.archiver.TC32Win.base.105924924"/>
<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.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.size.TC32Win.app.debug.1675834392" name="Print Size" superClass="com.telink.tc32eclipse.tool.size.TC32Win.app.debug.1447950833"/>
<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.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.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.1247140710"/>
<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>
</folderInfo>
<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