Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
Telin_Zigbee_SDK
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
limm
Telin_Zigbee_SDK
Commits
682c75ca
Commit
682c75ca
authored
Nov 26, 2021
by
limm
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
V1.0 VERSION
parent
25f1f17b
Changes
39
Show whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
42604 additions
and
35668 deletions
+42604
-35668
tl_zigbee_sdk/apps/3LightPanelDemo/3LightPanelDemo.c
tl_zigbee_sdk/apps/3LightPanelDemo/3LightPanelDemo.c
+316
-310
tl_zigbee_sdk/apps/3LightPanelDemo/3LightPanelDemo.h
tl_zigbee_sdk/apps/3LightPanelDemo/3LightPanelDemo.h
+1
-2
tl_zigbee_sdk/apps/3LightPanelDemo/3LightPanelDemo_endpoint_config.c
...dk/apps/3LightPanelDemo/3LightPanelDemo_endpoint_config.c
+975
-987
tl_zigbee_sdk/apps/3LightPanelDemo/3LightPanelDemo_endpoint_config.h
...dk/apps/3LightPanelDemo/3LightPanelDemo_endpoint_config.h
+128
-126
tl_zigbee_sdk/apps/3LightPanelDemo/app_cfg.h
tl_zigbee_sdk/apps/3LightPanelDemo/app_cfg.h
+215
-215
tl_zigbee_sdk/apps/3LightPanelDemo/ikk-config.h
tl_zigbee_sdk/apps/3LightPanelDemo/ikk-config.h
+55
-55
tl_zigbee_sdk/apps/3LightPanelDemo/user.c
tl_zigbee_sdk/apps/3LightPanelDemo/user.c
+1480
-1183
tl_zigbee_sdk/apps/3LightPanelDemo/zb_afTestCb.c
tl_zigbee_sdk/apps/3LightPanelDemo/zb_afTestCb.c
+194
-167
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-button.c
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-button.c
+374
-374
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-pwm.c
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-pwm.c
+339
-317
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-pwm.h
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-pwm.h
+1
-1
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-uart.c
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-uart.c
+316
-316
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-uart.h
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-uart.h
+86
-84
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-cluster.c
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-cluster.c
+419
-420
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-cluster.h
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-cluster.h
+9
-5
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-command.c
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-command.c
+635
-4
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-command.h
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-command.h
+89
-6
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-debug.h
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-debug.h
+26
-26
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-factory-test.c
...e_sdk/apps/common/00ikonke_app/general/ikk-factory-test.c
+574
-262
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-factory-test.h
...e_sdk/apps/common/00ikonke_app/general/ikk-factory-test.h
+81
-65
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-module-def.h
...bee_sdk/apps/common/00ikonke_app/general/ikk-module-def.h
+189
-86
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-network.c
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-network.c
+544
-530
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-opt-tunnel.c
...bee_sdk/apps/common/00ikonke_app/general/ikk-opt-tunnel.c
+453
-353
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-opt-tunnel.h
...bee_sdk/apps/common/00ikonke_app/general/ikk-opt-tunnel.h
+13
-12
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-tick-handler.c
...e_sdk/apps/common/00ikonke_app/general/ikk-tick-handler.c
+57
-56
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-tick-handler.h
...e_sdk/apps/common/00ikonke_app/general/ikk-tick-handler.h
+0
-1
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-token.c
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-token.c
+371
-183
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-token.h
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-token.h
+68
-6
tl_zigbee_sdk/apps/common/firmwareEncryptChk.c
tl_zigbee_sdk/apps/common/firmwareEncryptChk.c
+77
-77
tl_zigbee_sdk/apps/sampleLight/app_driver/general/ikk-token.c
...igbee_sdk/apps/sampleLight/app_driver/general/ikk-token.c
+114
-114
tl_zigbee_sdk/build/tlsr_tc32/.cproject
tl_zigbee_sdk/build/tlsr_tc32/.cproject
+30721
-25653
tl_zigbee_sdk/build/tlsr_tc32/.project
tl_zigbee_sdk/build/tlsr_tc32/.project
+220
-220
tl_zigbee_sdk/build/tlsr_tc32/boot.link
tl_zigbee_sdk/build/tlsr_tc32/boot.link
+145
-145
tl_zigbee_sdk/proj/common/tlPrintf.h
tl_zigbee_sdk/proj/common/tlPrintf.h
+95
-88
tl_zigbee_sdk/proj/drivers/drv_nv.c
tl_zigbee_sdk/proj/drivers/drv_nv.c
+628
-628
tl_zigbee_sdk/proj/drivers/drv_nv.h
tl_zigbee_sdk/proj/drivers/drv_nv.h
+430
-426
tl_zigbee_sdk/proj/os/ev_timer.h
tl_zigbee_sdk/proj/os/ev_timer.h
+164
-164
tl_zigbee_sdk/proj/tl_common.h
tl_zigbee_sdk/proj/tl_common.h
+86
-85
tl_zigbee_sdk/zigbee/bdb/bdb.c
tl_zigbee_sdk/zigbee/bdb/bdb.c
+1916
-1916
No files found.
tl_zigbee_sdk/apps/3LightPanelDemo/3LightPanelDemo.c
View file @
682c75ca
...
...
@@ -188,6 +188,11 @@ void user_app_init(void)
zcl_register
(
fixedEndpoints
[
i
],
Cluster_Num_List
[
i
],
(
zcl_specClusterInfo_t
*
)
g_EPClusterAllList
[
i
]);
}
#if AF_TEST_ENABLE
/* Register endPoint */
u8
status
=
af_endpointRegister
(
SAMPLE_TEST_ENDPOINT
,
(
af_simple_descriptor_t
*
)
&
sampleTestDesc
,
afTest_rx_handler
,
afTest_dataSendConfirm
);
printf
(
"af_test regester status =%d
\r\n
"
,
status
);
#endif
#ifdef ZCL_GREEN_POWER
/* Initialize GP */
...
...
@@ -272,6 +277,7 @@ void user_init(bool isRetention)
user_app_init
();
App_Init
();
printf
(
"###########init !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
\r\n
"
);
/* Register except handler for test */
sys_exceptHandlerRegister
(
sampleLightSysException
);
...
...
tl_zigbee_sdk/apps/3LightPanelDemo/3LightPanelDemo.h
View file @
682c75ca
...
...
@@ -47,12 +47,11 @@
#define _SAMPLE_LIGHT_H_
#include ENDPOINT_CONFIG_H
/**********************************************************************
* CONSTANT
*/
#define SAMPLE_LIGHT_ENDPOINT 0x01
#define SAMPLE_TEST_ENDPOINT 0x0
2
#define SAMPLE_TEST_ENDPOINT 0x0
6
/**********************************************************************
* TYPEDEFS
...
...
tl_zigbee_sdk/apps/3LightPanelDemo/3LightPanelDemo_endpoint_config.c
View file @
682c75ca
...
...
@@ -58,7 +58,7 @@
*/
#define ZCL_BASIC_MFG_NAME {5,'K','o','n','k','e'}
#define ZCL_BASIC_MODEL_ID {16,'3','A','F','E','2','
8','2','0','0','0','0','6','8','6','2','1'}
#define ZCL_BASIC_MODEL_ID {16,'3','A','F','E','2','
0','2','0','0','0','0','6','8','6','2','4'}
#ifndef ZCL_BASIC_MFG_NAME
#define ZCL_BASIC_MFG_NAME {6,'T','E','L','I','N','K'}
...
...
@@ -120,7 +120,6 @@ const u16 EP1_inClusterList[] =
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0
,
#endif
};
/**
...
...
@@ -162,10 +161,6 @@ const u16 EP2_inClusterList[] =
#ifdef ZCL_ZLL_COMMISSIONING
ZCL_CLUSTER_TOUCHLINK_COMMISSIONING
,
#endif
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0
,
#endif
};
/**
...
...
@@ -208,10 +203,6 @@ const u16 EP3_inClusterList[] =
#ifdef ZCL_ZLL_COMMISSIONING
ZCL_CLUSTER_TOUCHLINK_COMMISSIONING
,
#endif
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0
,
#endif
};
/**
...
...
@@ -253,10 +244,6 @@ const u16 EP4_inClusterList[] =
#ifdef ZCL_ZLL_COMMISSIONING
ZCL_CLUSTER_TOUCHLINK_COMMISSIONING
,
#endif
#ifdef ZCL_FCC0
ZCL_CLUSTER_PRIVATE_FCC0
,
#endif
};
/**
...
...
@@ -299,6 +286,7 @@ const u16 sampleTest_inClusterList[] =
ZCL_CLUSTER_TELINK_SDK_TEST_RSP
,
ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_REQ
,
ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_RSP
,
0x0001
,
};
...
...
@@ -324,8 +312,8 @@ const u16 sampleTest_outClusterList[] =
*/
const
af_simple_descriptor_t
sampleTestDesc
=
{
HA_PROFILE_ID
,
/* Application profile identifier */
HA_DEV_
DIMMABLE_LIGHT
,
/* Application device identifier */
ZDO_PROFILE_ID
,
/* Application profile identifier */
HA_DEV_
ONOFF_LIGHT_SWITCH
,
/* Application device identifier */
SAMPLE_TEST_ENDPOINT
,
/* Endpoint */
0
,
/* Application device version */
0
,
/* Reserved */
...
...
@@ -559,7 +547,7 @@ zcl_onOffAttr_t g_zcl_onOffAttrs[Support_Endpoint_Num] ={ONOFF_DEFAULT1,ONOFF_DE
const
zclAttrInfo_t
onOff_attrTbl
[]
=
{
{
ZCL_ATTRID_ONOFF
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_
REPORTABLE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
0
].
onOff
},
{
ZCL_ATTRID_ONOFF
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_
WRITE
|
ACCESS_CONTROL_REPORTABLE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
0
].
onOff
},
{
ZCL_ATTRID_GLOBAL_SCENE_CONTROL
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
0
].
globalSceneControl
},
{
ZCL_ATTRID_ON_TIME
,
ZCL_DATA_TYPE_UINT16
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_WRITE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
0
].
onTime
},
{
ZCL_ATTRID_OFF_WAIT_TIME
,
ZCL_DATA_TYPE_UINT16
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_WRITE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
0
].
offWaitTime
},
...
...
@@ -569,7 +557,7 @@ const zclAttrInfo_t onOff_attrTbl[] =
};
const
zclAttrInfo_t
onOff_attrTb2
[]
=
{
{
ZCL_ATTRID_ONOFF
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_
REPORTABLE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
1
].
onOff
},
{
ZCL_ATTRID_ONOFF
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_
WRITE
|
ACCESS_CONTROL_REPORTABLE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
1
].
onOff
},
{
ZCL_ATTRID_GLOBAL_SCENE_CONTROL
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
1
].
globalSceneControl
},
{
ZCL_ATTRID_ON_TIME
,
ZCL_DATA_TYPE_UINT16
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_WRITE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
1
].
onTime
},
{
ZCL_ATTRID_OFF_WAIT_TIME
,
ZCL_DATA_TYPE_UINT16
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_WRITE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
1
].
offWaitTime
},
...
...
@@ -579,7 +567,7 @@ const zclAttrInfo_t onOff_attrTb2[] =
};
const
zclAttrInfo_t
onOff_attrTb3
[]
=
{
{
ZCL_ATTRID_ONOFF
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_
REPORTABLE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
2
].
onOff
},
{
ZCL_ATTRID_ONOFF
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_
WRITE
|
ACCESS_CONTROL_REPORTABLE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
2
].
onOff
},
{
ZCL_ATTRID_GLOBAL_SCENE_CONTROL
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
2
].
globalSceneControl
},
{
ZCL_ATTRID_ON_TIME
,
ZCL_DATA_TYPE_UINT16
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_WRITE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
2
].
onTime
},
{
ZCL_ATTRID_OFF_WAIT_TIME
,
ZCL_DATA_TYPE_UINT16
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_WRITE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
2
].
offWaitTime
},
...
...
@@ -589,7 +577,7 @@ const zclAttrInfo_t onOff_attrTb3[] =
};
const
zclAttrInfo_t
onOff_attrTb4
[]
=
{
{
ZCL_ATTRID_ONOFF
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_
REPORTABLE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
3
].
onOff
},
{
ZCL_ATTRID_ONOFF
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_
WRITE
|
ACCESS_CONTROL_REPORTABLE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
3
].
onOff
},
{
ZCL_ATTRID_GLOBAL_SCENE_CONTROL
,
ZCL_DATA_TYPE_BOOLEAN
,
ACCESS_CONTROL_READ
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
3
].
globalSceneControl
},
{
ZCL_ATTRID_ON_TIME
,
ZCL_DATA_TYPE_UINT16
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_WRITE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
3
].
onTime
},
{
ZCL_ATTRID_OFF_WAIT_TIME
,
ZCL_DATA_TYPE_UINT16
,
ACCESS_CONTROL_READ
|
ACCESS_CONTROL_WRITE
,
(
u8
*
)
&
g_zcl_onOffAttrs
[
3
].
offWaitTime
},
...
...
tl_zigbee_sdk/apps/3LightPanelDemo/3LightPanelDemo_endpoint_config.h
View file @
682c75ca
...
...
@@ -119,6 +119,8 @@ extern zcl_lightColorCtrlAttr_t g_zcl_colorCtrlAttrs;
#define zcl_sceneAttrGet(ep) &g_zcl_sceneAttrs[ep-1]
#define zcl_onoffAttrGet(ep) &g_zcl_onOffAttrs[ep-1]
#define zcl_BasicAttrGet() &g_zcl_basicAttrs
void
SimpleDesc_Init
(
uint8_t
endpint
);
nv_sts_t
zcl_onOffAttr_get
(
void
);
nv_sts_t
zcl_onOffAttr_save
(
void
);
...
...
tl_zigbee_sdk/apps/3LightPanelDemo/app_cfg.h
View file @
682c75ca
...
...
@@ -116,7 +116,7 @@ extern "C" {
// DEBUG
#if UART_PRINTF_MODE
#define DEBUG_INFO_TX_PIN GPIO_PA
2//print
#define DEBUG_INFO_TX_PIN GPIO_PA
1//print
#endif
/**********************************************************************
* Stack configuration
...
...
@@ -148,7 +148,7 @@ extern "C" {
* @brief ZCL: MAX number of cluster list, in cluster number add + out cluster number
*
*/
#define ZCL_CLUSTER_NUM_MAX
30
#define ZCL_CLUSTER_NUM_MAX
50
/**
* @brief ZCL: maximum number for zcl reporting table
...
...
tl_zigbee_sdk/apps/3LightPanelDemo/ikk-config.h
View file @
682c75ca
...
...
@@ -19,7 +19,7 @@
#define MANUFATURE_NAME "Konke"
/*Dsp: MODEL_ID */
#define MODEL_ID 0x
3AFE101000068624
#define MODEL_ID 0x
00068624
/*Dsp: OTA_IMAGE_TYPE */
#define OTA_IMAGE_TYPE 65000
...
...
tl_zigbee_sdk/apps/3LightPanelDemo/user.c
View file @
682c75ca
...
...
@@ -10,28 +10,33 @@
#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"
#define ZERO_PIN GPIO_PA0
#define RELAY1_PIN GPIO_PC
1
#define RELAY1_PIN GPIO_PC
0
#define RELAY2_PIN GPIO_PC4
#define RELAY3_PIN GPIO_PC6
#define RELAY4_PIN GPIO_PC5
#define LED_RADAR_PIN GPIO_PD
2
#define LED1_PIN GPIO_PB
6
#define LED2_PIN GPIO_PA
5
#define LED3_PIN GPIO_PD
4
#define LED4_PIN GPIO_P
B4
#define LED_RADAR_PIN GPIO_PD
4
#define LED1_PIN GPIO_PB
5
#define LED2_PIN GPIO_PA
4
#define LED3_PIN GPIO_PD
2
#define LED4_PIN GPIO_P
A3
#define KEY_SYS_PIN GPIO_PD7
#define KEY1_PIN GPIO_PC7
#define KEY2_PIN GPIO_PB
5
#define KEY2_PIN GPIO_PB
4
#define KEY3_PIN GPIO_PD3
#define KEY4_PIN GPIO_PA
3
#define RADAR_PIN GPIO_PC
0
#define KEY4_PIN GPIO_PA
6
#define RADAR_PIN GPIO_PC
1
#define UART_TX_PIN GPIO_PB7
#define UART_RX_PIN GPIO_PB1
#define SYS_BUTTON_LONG_PRESS_TIME_MS (5 * 1000)
#define DELAY_REPORT_DATA_AFTER_NWK_JOINED_MS (3 * 1000)
...
...
@@ -89,11 +94,11 @@ BtnConfSt g_btnConfList[] = {
// LEDs CONFIG
LedConfSt
g_ledConfList
[]
=
{
{(
uint8_t
)
LED_RADAR_ID
,
1
,
{
LED_RADAR_PIN
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
},
ELP_HIGH
},
{(
uint8_t
)
LED1_ID
,
1
,
{
LED1_PIN
,
PWM
_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
},
ELP_HIGH
},
{(
uint8_t
)
LED2_ID
,
1
,
{
LED2_PIN
,
PWM
_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
},
ELP_HIGH
},
{(
uint8_t
)
LED3_ID
,
1
,
{
LED3_PIN
,
PWM
_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
},
ELP_HIGH
},
{(
uint8_t
)
LED4_ID
,
1
,
{
LED4_PIN
,
PWM
_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
},
ELP_HIGH
},
{(
uint8_t
)
LED_ALL_ID
,
4
,
{
LED1_PIN
,
PWM
_UNKNOW_ID
,
LED2_PIN
,
PWM_UNKNOW_ID
,
LED3_PIN
,
PWM_UNKNOW_ID
,
LED4_PIN
,
PWM_UNKNOW_ID
},
ELP_HIGH
},
{(
uint8_t
)
LED1_ID
,
1
,
{
LED1_PIN
,
PWM
1_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
},
ELP_HIGH
},
{(
uint8_t
)
LED2_ID
,
1
,
{
LED2_PIN
,
PWM
2_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
},
ELP_HIGH
},
{(
uint8_t
)
LED3_ID
,
1
,
{
LED3_PIN
,
PWM
3_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
},
ELP_HIGH
},
{(
uint8_t
)
LED4_ID
,
1
,
{
LED4_PIN
,
PWM
4_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
,
PIN_UNKNOW
,
PWM_UNKNOW_ID
},
ELP_HIGH
},
{(
uint8_t
)
LED_ALL_ID
,
4
,
{
LED1_PIN
,
PWM
1_ID
,
LED2_PIN
,
PWM2_ID
,
LED3_PIN
,
PWM3_ID
,
LED4_PIN
,
PWM4_ID
},
ELP_HIGH
},
};
PwmConfSt
g_pwmConfList
[]
=
{
{
PWM1_ID
,
{
LED1_PIN
,
KK_PWM_CC0
}},
//
...
...
@@ -124,10 +129,18 @@ BindObjSt cluster_obj_list[] = {
{
ZCL_CLUSTER_GEN_ON_OFF
,
ZCL_ATTRID_ONOFF
,
4
},
};
void
pOnOffAttributeChangeCallback
(
uint8_t
endpoint
,
uint16_t
cluster
,
uint16_t
attribute
,
uint8_t
*
data
,
uint8_t
data_type
);
AttributeChangeConfSt
attribte_change_list
[]
=
{
{
ZCL_CLUSTER_GEN_ON_OFF
,
pOnOffAttributeChangeCallback
},
};
uint32_t
u32PeroidIntervalMS
=
2
*
1000
;
bool
Human_body_induction_flag
=
false
;
static
bool
power_on_sync
[
4
]
=
{
false
,
false
,
false
,
false
};
static
uint8_t
g_u8NoDisturbModeMinLevel
=
0x01
;
static
uint8_t
g_u8NoDisturbModeMaxLevel
=
0x64
;
//非控客网关首次数据是否上报标志
static
bool
g_bIsNotKonkeGatewayFirstReportedFlg
=
false
;
static
uint8_t
g_u8CurrentHeartEndpoint
=
1
;
...
...
@@ -149,7 +162,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status);
void
kOTAMoudleUserCallback
(
OTAStatusEnum
status
);
#endif
#define UART_ENABLE false
void
kUserRelayLedCallback
(
RelayStatusSt
status
);
void
kRadarDetectInit
(
void
);
void
kRadarLedTragger
(
void
);
...
...
@@ -164,12 +177,13 @@ void Test(void );
static
ev_timer_event_t
*
kkSystemSetUpEvent
=
NULL
;
s32
kkSystemSetUpEventHandler
(
void
*
arg
);
//void pOnOffClusterAttributeChangeCallback(uint8_t endpoint,uint16_t cluster,uint16_t attribute,uint8_t len,uint8_t *data);
//
//AttributeChangeConfSt g_ClusterAttributeConfList[] = {
// {ZCL_CLUSTER_GEN_ON_OFF, ZCL_ATTRID_ONOFF, pOnOffClusterAttributeChangeCallback},
//};
#define UART_ENABLE false
void
kUserInterPanMsgInComingPaser
(
UMsgNodeSt
*
pMsgNode
);
void
pOnOffClusterAttributeChangeCallback
(
uint8_t
endpoint
,
uint16_t
cluster
,
uint16_t
attribute
,
uint8_t
len
,
uint8_t
*
data
);
AttributeChangeConfSt
g_ClusterAttributeConfList
[]
=
{
{
ZCL_CLUSTER_GEN_ON_OFF
,
ZCL_ATTRID_ONOFF
,
pOnOffClusterAttributeChangeCallback
},
};
static
void
kLEDOnAction
(
LED_ID_ENUM
led_id
);
static
void
kLEDOffAction
(
LED_ID_ENUM
led_id
);
void
App_Init
(
void
)
...
...
@@ -188,7 +202,7 @@ void App_Init(void)
iKonkeAfSelfPrint
(
"Err: Button Module Init failed(%d)!!
\r\n
"
,
err
);
}
#endif
#if
0
#if
1
err
=
kPwmModuleInit
(
g_pwmConfList
,
sizeof
(
g_pwmConfList
)
/
sizeof
(
PwmConfSt
),
kUserPwmActionDoneCallback
);
if
(
err
!=
KET_OK
)
{
iKonkeAfSelfPrint
(
"Err: PWM Module Init failed(%d)!!
\r\n
"
,
err
);
...
...
@@ -205,7 +219,7 @@ void App_Init(void)
}
#if UART_ENABLE
uint8_t
recv_header
[]
=
{
0xAA
,
0X55
};
err
=
kUartModuleInit
(
UART_TX_PIN
,
UART_RX_PIN
,
115200
,
PARITY_NONE
,
STOP_BIT_ONE
,
recv_header
,
2
,
2
,
5
,
MsgCRC16
,
UartMsgProcessHandle
,
true
);
err
=
kUartModuleInit
(
UART_TX_PIN
,
UART_RX_PIN
,
115200
,
PARITY_NONE
,
STOP_BIT_ONE
,
recv_header
,
2
,
3
,
6
,
MsgCRC16
,
UartMsgProcessHandle
,
true
);
#endif
kNwkModuleInit
(
cluster_obj_list
,
sizeof
(
cluster_obj_list
)
/
sizeof
(
cluster_obj_list
[
0
]),
kUserNetworkStatusNotify
,
kUserNetworkExitCompleteCallback
);
...
...
@@ -221,19 +235,16 @@ void App_Init(void)
if
(
err
!=
KET_OK
)
{
iKonkeAfSelfPrint
(
"Err: kUserOODMessageIncoming Register Failed(%d)!!
\r\n
"
,
err
);
}
// ZCL
// //注册属性改变回调
ikkAttributeChangeCallbackRegister
(
attribte_change_list
,
sizeof
(
attribte_change_list
)
/
sizeof
(
attribte_change_list
[
0
]));
kZclOnOffClusterServerInit
(
kUserOnOffClusterOnOffStatusCallback
);
if
(
!
ev_timer_exist
(
kkSystemSetUpEvent
))
{
kkSystemSetUpEvent
=
TL_ZB_TIMER_SCHEDULE
(
kkSystemSetUpEventHandler
,
NULL
,
20
);
kkSystemSetUpEvent
=
TL_ZB_TIMER_SCHEDULE
(
kkSystemSetUpEventHandler
,
NULL
,
50
);
}
//start radar detect event
kRadarDetectInit
();
kZclClusterPermitReportTableInit
(
cluster_obj_list
,
sizeof
(
cluster_obj_list
)
/
sizeof
(
BindObjSt
));
//注册属性改变回调
//ClusterAttributeChangeCallbackRegister(g_ClusterAttributeConfList,sizeof(g_ClusterAttributeConfList)/sizeof(AttributeChangeConfSt));
//重写attribute
Update_Local_Attribute_Info
();
}
...
...
@@ -241,7 +252,11 @@ void Test(void )
{
}
void
kUserNetworkExitCompleteCallback
()
{
SYSTEM_RESET
();
}
static
bool
kClustePeriodReportCheckIsSet
(
uint8_t
endpoint
)
{
uint16_t
u16MinTimeMS
=
0
;
...
...
@@ -264,7 +279,6 @@ void JoinCompleteCallback(NwkJoinCompltEnum nwkcomplt )
case
(
EJC_JOIN_FAILED
):
{
LED_OPT_OFF
(
LED_ALL_ID
);
kUserNetworkExitCompleteCallback
();
break
;
}
case
(
EJC_JOIN_SUCCEED
):
...
...
@@ -275,6 +289,7 @@ void JoinCompleteCallback(NwkJoinCompltEnum nwkcomplt )
default:
break
;
}
}
void
kUserNetworkStatusNotify
(
NwkStatusEnum
nwkst
)
{
iKonkeAfSelfPrint
(
"#############################kUserNetworkStatusNotify = %d
\r\n
"
,
nwkst
);
...
...
@@ -283,22 +298,24 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst )
{
uint32_t
randTimeMS
=
DELAY_REPORT_DATA_AFTER_NWK_JOINED_MS
;
//power on after joined network
uint32_t
currentTimeMS
=
clock_time
();
uint32_t
currentTimeMS
=
clock_time
()
/
16
/
1000
;
kSetLedStatus
(
LED_ALL_ID
);
if
(
currentTimeMS
<
MIN_JOINED_NWK_DELAY_TIME_MS
){
randTimeMS
=
kGetRandNum
(
RAND_MIN_NUM
,
RAND_MAX_NUM
);
}
else
{
// kPwmOptTrigger(PWM4_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000);
// kPwmOptTrigger(PWM3_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000);
// kPwmOptTrigger(PWM2_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000);
// kPwmOptTrigger(PWM1_ID, PWM_TIMER_MAX_DUTY_CYCLE_NUM, 0, 5*1000);
kPwmOptTrigger
(
PWM4_ID
,
PWM_TIMER_MAX_DUTY_CYCLE_NUM
,
0
,
5
*
1000
);
kPwmOptTrigger
(
PWM3_ID
,
PWM_TIMER_MAX_DUTY_CYCLE_NUM
,
0
,
5
*
1000
);
kPwmOptTrigger
(
PWM2_ID
,
PWM_TIMER_MAX_DUTY_CYCLE_NUM
,
0
,
5
*
1000
);
kPwmOptTrigger
(
PWM1_ID
,
PWM_TIMER_MAX_DUTY_CYCLE_NUM
,
0
,
5
*
1000
);
//kLedOptTrigger(LED_ALL_ID, 0, 0, 0, LED_OFF, LED_IGNORE);
}
if
(
kIsKonkeRemoteGateway
()
!=
true
){
g_bIsNotKonkeGatewayFirstReportedFlg
=
false
;
}
kSetLedStatus
(
LED_ALL_ID
);
kNwkScheduleTaskRegister
(
randTimeMS
);
iKonkeAfSelfPrint
(
"Joined Network RandTime(%dms) CurrentTime(%
ld)
\r\n
"
,
randTimeMS
,
currentTimeMS
);
iKonkeAfSelfPrint
(
"Joined Network RandTime(%dms) CurrentTime(%
d)
\r\n
"
,
randTimeMS
,
currentTimeMS
);
break
;
}
case
(
ENS_JOINING
):
...
...
@@ -323,6 +340,16 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst )
}
}
}
void
pOnOffAttributeChangeCallback
(
uint8_t
endpoint
,
uint16_t
cluster
,
uint16_t
attribute
,
uint8_t
*
data
,
uint8_t
data_type
)
{
if
((
cluster
==
ZCL_CLUSTER_GEN_ON_OFF
)
&&
(
attribute
==
ZCL_ATTRID_ONOFF
)
&&
(
data_type
==
ZCL_DATA_TYPE_BOOLEAN
))
{
OnOffStatusEnum
estatus
=
*
data
;
kUserOnOffClusterOnOffStatusCallback
(
endpoint
,
estatus
);
iKonkeAfSelfPrint
(
"#####pOnOffAttributeChangeCallback,endpont = %d,value = %d
\r\n
"
,
endpoint
,
estatus
);
}
}
//on off 属性改变后的回调函数,一般用来操作继电器,过零检测,如果没有过零检测可以在这里同步LED状态
void
kUserOnOffClusterOnOffStatusCallback
(
uint8_t
endpoint
,
OnOffStatusEnum
estatus
)
{
...
...
@@ -331,37 +358,21 @@ void kUserOnOffClusterOnOffStatusCallback(uint8_t endpoint, OnOffStatusEnum esta
switch
(
endpoint
)
{
case
(
1
):
{
if
(
estatus
==
EOOS_OFF
)
LED_OPT_OFF
(
LED1_ID
);
else
LED_OPT_ON
(
LED1_ID
);
kRelayChannelOpt
(
RELAY_CHANNEL1_ID
,
estatus
==
EOOS_OFF
?
EZAO_OFF
:
EZAO_ON
);
break
;
}
case
(
2
):
{
if
(
estatus
==
EOOS_OFF
)
LED_OPT_OFF
(
LED2_ID
);
else
LED_OPT_ON
(
LED2_ID
);
kRelayChannelOpt
(
RELAY_CHANNEL2_ID
,
estatus
==
EOOS_OFF
?
EZAO_OFF
:
EZAO_ON
);
break
;
}
case
(
3
):
{
if
(
estatus
==
EOOS_OFF
)
LED_OPT_OFF
(
LED3_ID
);
else
LED_OPT_ON
(
LED3_ID
);
kRelayChannelOpt
(
RELAY_CHANNEL3_ID
,
estatus
==
EOOS_OFF
?
EZAO_OFF
:
EZAO_ON
);
break
;
}
case
(
4
):
{
if
(
estatus
==
EOOS_OFF
)
LED_OPT_OFF
(
LED4_ID
);
else
LED_OPT_ON
(
LED4_ID
);
kRelayChannelOpt
(
RELAY_CHANNEL4_ID
,
estatus
==
EOOS_OFF
?
EZAO_OFF
:
EZAO_ON
);
break
;
}
...
...
@@ -370,10 +381,12 @@ void kUserOnOffClusterOnOffStatusCallback(uint8_t endpoint, OnOffStatusEnum esta
kZclOnOffClusterServerOnOffControl
(
endpoint
,
estatus
);
}
uint8_t
Key_Press_Test_Flag
[
5
]
=
{
0
};
void
kUserButtonAcitonCallback
(
unsigned
char
button_id
,
BtnActionEnum
action
)
{
iKonkeAfSelfPrint
(
"kUserButton: ButtonId(%d), Action(%d)
\r\n
"
,
button_id
,
action
);
if
(
kGetFactoryTestStatus
()
==
FTS_AGING_
8HOU
||
kGetFactoryTestStatus
()
==
FTS_AGING_DONE
\
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
\
||
kNwkIsExiting
()
==
true
){
...
...
@@ -388,8 +401,13 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
{
case
EBA_CLICK
:
{
if
(
kNwkGetCurrentStatus
()
==
ENS_ONLINE
)
kLedOptTrigger
(
LED_ALL_ID
,
200
,
200
,
1
,
LED_OFF
,
LED_IGNORE
);
//绿灯闪烁一次
Key_Press_Test_Flag
[
0
]
=
1
;
if
(
kNwkGetCurrentStatus
()
==
ENS_ONLINE
)
{
// report connected!
if
(
kLedIsBlinking
(
LED_ALL_ID
)
!=
true
)
kLedOptTrigger
(
LED_ALL_ID
,
LED_FAST_BLINK_ON_TIME_MS
,
LED_FAST_BLINK_OFF_TIME_MS
,
1
,
LED_ON
,
LED_OFF
);
kOptTunnelOODReport
(
0
,
0XCD
,
NULL
,
0
);
}
else
if
(
kNwkGetCurrentStatus
()
==
ENS_LEAVED
)
{
kNwkFactoryReset
(
false
);
...
...
@@ -416,11 +434,11 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
if
(
action
==
EBA_CLICK
)
{
iKonkeAfSelfPrint
(
"KEY 1 PRESS!!!
\r\n
"
);
Key_Press_Test_Flag
[
1
]
=
1
;
OnOffCtrlEnum
state
=
kZclOnOffClusterServerOnOffGet
(
1
)
?
EOOC_OFF
:
EOOC_ON
;
kZclClusterSetPermitReportInfo
(
1
,
0x0006
,
true
,
false
);
//afTest_dataSendDemo();
kZclOnOffClusterServerOnOffControl
(
1
,
state
);
kRelayChannelOpt
(
RELAY_CHANNEL1_ID
,
kZclOnOffClusterServerOnOffGet
(
1
)
?
EZAO_ON
:
EZAO_OFF
);
// iKonkeAfSelfPrint("Get onoff (%d),%d\r\n", pOnOff->onOff, pOnOff->startUpOnOff);
}
else
if
(
action
==
EBA_LONGPRESS
){
if
(
kNwkIsExiting
()
==
true
){
iKonkeAfSelfPrint
(
"#####NWK is exiting
\r\n
"
);
...
...
@@ -430,7 +448,7 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
static
bool
firstLongPressFlg
=
false
;
if
(
kNwkGetCurrentStatus
()
==
ENS_ONLINE
){
static
uint32_t
lastTimeMS
=
0
;
uint32_t
currentTimeMS
=
clock_time
()
;
uint32_t
currentTimeMS
=
clock_time
()
/
16
/
1000
;
if
(
firstLongPressFlg
!=
true
\
||
(
currentTimeMS
-
lastTimeMS
>=
MAX_FIRST_USER_KEY_LEAVE_NWK_INTERVAL_TIME_MS
)){
firstLongPressFlg
=
true
;
...
...
@@ -465,10 +483,10 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
if
(
action
==
EBA_CLICK
){
//restore report attribute immediately
iKonkeAfSelfPrint
(
"KEY 2 PRESS!!!
\r\n
"
);
Key_Press_Test_Flag
[
2
]
=
1
;
OnOffCtrlEnum
state
=
kZclOnOffClusterServerOnOffGet
(
2
)
?
EOOC_OFF
:
EOOC_ON
;
kZclClusterSetPermitReportInfo
(
2
,
0x0006
,
true
,
false
);
kZclOnOffClusterServerOnOffControl
(
2
,
state
);
kRelayChannelOpt
(
RELAY_CHANNEL2_ID
,
kZclOnOffClusterServerOnOffGet
(
2
)
?
EZAO_ON
:
EZAO_OFF
);
}
break
;
}
...
...
@@ -477,10 +495,10 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
if
(
action
==
EBA_CLICK
){
//restore report attribute immediately
iKonkeAfSelfPrint
(
"KEY 3 PRESS!!!
\r\n
"
);
Key_Press_Test_Flag
[
3
]
=
1
;
OnOffCtrlEnum
state
=
kZclOnOffClusterServerOnOffGet
(
3
)
?
EOOC_OFF
:
EOOC_ON
;
kZclClusterSetPermitReportInfo
(
3
,
0x0006
,
true
,
false
);
kZclOnOffClusterServerOnOffControl
(
3
,
state
);
kRelayChannelOpt
(
RELAY_CHANNEL3_ID
,
kZclOnOffClusterServerOnOffGet
(
3
)
?
EZAO_ON
:
EZAO_OFF
);
}
break
;
}
...
...
@@ -489,10 +507,10 @@ void kUserButtonAcitonCallback(unsigned char button_id, BtnActionEnum action )
if
(
action
==
EBA_CLICK
){
//restore report attribute immediately
iKonkeAfSelfPrint
(
"KEY 4 PRESS!!!
\r\n
"
);
Key_Press_Test_Flag
[
4
]
=
1
;
OnOffCtrlEnum
state
=
kZclOnOffClusterServerOnOffGet
(
4
)
?
EOOC_OFF
:
EOOC_ON
;
kZclClusterSetPermitReportInfo
(
4
,
0x0006
,
true
,
false
);
kZclOnOffClusterServerOnOffControl
(
4
,
state
);
kRelayChannelOpt
(
RELAY_CHANNEL4_ID
,
kZclOnOffClusterServerOnOffGet
(
4
)
?
EZAO_ON
:
EZAO_OFF
);
}
break
;
}
...
...
@@ -515,7 +533,7 @@ void kUserRelayLedCallback(RelayStatusSt status)
{
case
RELAY_CHANNEL1_ID
:
if
(
kNwkGetCurrentStatus
()
==
ENS_ONLINE
||
power_on_sync
[
0
]
==
true
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_
8HOU
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_
4HOU
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_DONE
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING_SECOND_PRESS
){
...
...
@@ -527,13 +545,17 @@ void kUserRelayLedCallback(RelayStatusSt status)
}
}
else
if
(
kNwkGetCurrentStatus
()
==
ENS_LEAVED
\
||
kNwkGetCurrentStatus
()
==
ENS_OFFLINE
){
if
(
kZclOnOffClusterServerOnOffGet
(
1
)
==
EOOC_OFF
)
kLedOptTrigger
(
LED1_ID
,
LED_FAST_BLINK_ON_TIME_MS
,
\
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
LED_ON
,
LED_IGNORE
);
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
EOOC_OFF
,
EOOC_OFF
);
else
kLedOptTrigger
(
LED1_ID
,
LED_FAST_BLINK_ON_TIME_MS
,
\
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
LED_ON
,
LED_ON
);
}
break
;
case
RELAY_CHANNEL2_ID
:
if
(
kNwkGetCurrentStatus
()
==
ENS_ONLINE
||
power_on_sync
[
1
]
==
true
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_
8HOU
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_
4HOU
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_DONE
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING_SECOND_PRESS
){
...
...
@@ -545,13 +567,17 @@ void kUserRelayLedCallback(RelayStatusSt status)
}
}
else
if
(
kNwkGetCurrentStatus
()
==
ENS_LEAVED
\
||
kNwkGetCurrentStatus
()
==
ENS_OFFLINE
){
if
(
kZclOnOffClusterServerOnOffGet
(
2
)
==
EOOC_OFF
)
kLedOptTrigger
(
LED2_ID
,
LED_FAST_BLINK_ON_TIME_MS
,
\
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
LED_ON
,
LED_IGNORE
);
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
EOOC_OFF
,
EOOC_OFF
);
else
kLedOptTrigger
(
LED2_ID
,
LED_FAST_BLINK_ON_TIME_MS
,
\
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
LED_ON
,
LED_ON
);
}
break
;
case
RELAY_CHANNEL3_ID
:
if
(
kNwkGetCurrentStatus
()
==
ENS_ONLINE
||
power_on_sync
[
2
]
==
true
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_
8HOU
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_
4HOU
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_DONE
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING_SECOND_PRESS
){
...
...
@@ -563,13 +589,17 @@ void kUserRelayLedCallback(RelayStatusSt status)
}
}
else
if
(
kNwkGetCurrentStatus
()
==
ENS_LEAVED
\
||
kNwkGetCurrentStatus
()
==
ENS_OFFLINE
){
if
(
kZclOnOffClusterServerOnOffGet
(
3
)
==
EOOC_OFF
)
kLedOptTrigger
(
LED3_ID
,
LED_FAST_BLINK_ON_TIME_MS
,
\
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
EOOC_OFF
,
EOOC_OFF
);
else
kLedOptTrigger
(
LED3_ID
,
LED_FAST_BLINK_ON_TIME_MS
,
\
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
LED_ON
,
LED_IGNORE
);
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
LED_ON
,
LED_ON
);
}
break
;
case
RELAY_CHANNEL4_ID
:
if
(
kNwkGetCurrentStatus
()
==
ENS_ONLINE
||
power_on_sync
[
3
]
==
true
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_
8HOU
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_
4HOU
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_DONE
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING_SECOND_PRESS
){
...
...
@@ -581,8 +611,12 @@ void kUserRelayLedCallback(RelayStatusSt status)
}
}
else
if
(
kNwkGetCurrentStatus
()
==
ENS_LEAVED
\
||
kNwkGetCurrentStatus
()
==
ENS_OFFLINE
){
if
(
kZclOnOffClusterServerOnOffGet
(
4
)
==
EOOC_OFF
)
kLedOptTrigger
(
LED4_ID
,
LED_FAST_BLINK_ON_TIME_MS
,
\
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
EOOC_OFF
,
EOOC_OFF
);
else
kLedOptTrigger
(
LED4_ID
,
LED_FAST_BLINK_ON_TIME_MS
,
\
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
LED_ON
,
LED_IGNORE
);
LED_FAST_BLINK_OFF_TIME_MS
,
3
,
LED_ON
,
LED_ON
);
}
break
;
...
...
@@ -591,9 +625,39 @@ void kUserRelayLedCallback(RelayStatusSt status)
break
;
}
}
//add by zbw
void
kUserPwmActionDoneCallback
(
unsigned
char
id
,
PwmGradientDirectionEnum
opt
)
{
switch
(
id
)
{
case
PWM1_ID
:
kSetLedStatus
(
LED1_ID
);
break
;
case
PWM2_ID
:
kSetLedStatus
(
LED2_ID
);
break
;
case
PWM3_ID
:
kSetLedStatus
(
LED3_ID
);
break
;
case
PWM4_ID
:
kSetLedStatus
(
LED4_ID
);
break
;
default:
break
;
}
}
//ota升级失败或入网成功和失败后LED闪烁完成后处理,需要根据不同产品来修改
static
void
kSetLedStatus
(
LED_ID_ENUM
id
)
{
if
(
id
!=
LED_ALL_ID
){
kPwmClearGradientCounterById
(
id
-
1
);
}
else
{
kPwmClearGradientCounterById
(
PWM1_ID
);
kPwmClearGradientCounterById
(
PWM2_ID
);
kPwmClearGradientCounterById
(
PWM3_ID
);
kPwmClearGradientCounterById
(
PWM4_ID
);
}
//恢复继电器的LED状态
if
(
id
==
LED_ALL_ID
)
{
...
...
@@ -608,6 +672,7 @@ static void kSetLedStatus(LED_ID_ENUM id)
}
}
}
else
if
(
id
==
LED1_ID
||
id
==
LED2_ID
||
id
==
LED3_ID
||
id
==
LED4_ID
){
iKonkeAfSelfPrint
(
"###kSetLedStatus:%d,%d,%d
\r\n
"
,
kLedIsBlinking
(
id
),
kZclOnOffClusterServerOnOffGet
(
GET_ENDPOINT
(
id
)),
kGetIndicatorNotDisturbModeFlg
());
if
(
kLedIsBlinking
(
id
)
==
false
){
if
((
kZclOnOffClusterServerOnOffGet
(
GET_ENDPOINT
(
id
))
==
EOOS_ON
)
&&
(
!
kGetIndicatorNotDisturbModeFlg
())){
kLEDOnAction
(
id
);
...
...
@@ -657,11 +722,6 @@ void kUserLedActionDoneCallback(unsigned char id)
iKonkeAfSelfPrint
(
"##############kUserLedActionDoneCallback id(%d)nwk(%d)##################
\r\n
"
,
id
,
kNwkGetCurrentStatus
());
kSetLedStatus
(
id
);
}
void
kUserPwmActionDoneCallback
(
unsigned
char
id
,
PwmGradientDirectionEnum
opt
)
{
iKonkeAfSelfPrint
(
"####kUserPwmActionDoneCallback id(%d)opt(%d)##################
\r\n
"
,
id
,
opt
);
}
//网关场景控制下发后的属性延时上报处理,可以根据不同场景cluster修改
/* DESP: recall scene rand delay report Attribute set
* Auth: maozj.20191224.
...
...
@@ -749,6 +809,10 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, uint16_t clusterId, uint1
//不直接上报,随机延时上报
return
false
;
}
else
if
(
!
zclReportInfo
.
reportEnable
)
{
return
false
;
}
}
...
...
@@ -835,13 +899,85 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
static
void
kLEDOffAction
(
LED_ID_ENUM
led_id
)
{
iKonkeAfSelfPrint
(
"LED_Off_Action LED_ID (%d).
\r\n
"
,
led_id
);
LED_OPT_OFF
(
led_id
);
kLedOptTrigger
(
led_id
,
0
,
0
,
0
,
LED_OFF
,
LED_IGNORE
);
if
(
kGetIndicatorNotDisturbModeFlg
()
==
false
){
iKonkeAfSelfPrint
(
"is not NotDisturbMode.
\r\n
"
);
switch
(
led_id
)
{
case
LED1_ID
:
{
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM1_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMinLevel
*
65535
)
/
100
)
);
break
;
}
case
LED2_ID
:
{
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM2_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMinLevel
*
65535
)
/
100
)
);
break
;
}
case
LED3_ID
:
{
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM3_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMinLevel
*
65535
)
/
100
));
break
;
}
case
LED4_ID
:
{
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM4_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMinLevel
*
65535
)
/
100
));
break
;
}
case
LED_ALL_ID
:
{
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM1_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMinLevel
*
65535
)
/
100
));
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM2_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMinLevel
*
65535
)
/
100
));
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM3_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMinLevel
*
65535
)
/
100
));
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM4_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMinLevel
*
65535
)
/
100
));
break
;
}
default:
break
;
}
}
}
static
void
kLEDOnAction
(
LED_ID_ENUM
led_id
)
{
iKonkeAfSelfPrint
(
"LED_ON_Action LED_ID (%d).
\r\n
"
,
led_id
);
LED_OPT_ON
(
led_id
);
kLedOptTrigger
(
led_id
,
0
,
0
,
0
,
LED_OFF
,
LED_IGNORE
);
if
(
kGetIndicatorNotDisturbModeFlg
()
==
false
){
iKonkeAfSelfPrint
(
"is not NotDisturbMode.
\r\n
"
);
switch
(
led_id
)
{
case
LED1_ID
:
{
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM1_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMaxLevel
*
65535
)
/
100
)
);
break
;
}
case
LED2_ID
:
{
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM2_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMaxLevel
*
65535
)
/
100
)
);
break
;
}
case
LED3_ID
:
{
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM3_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMaxLevel
*
65535
)
/
100
)
);
break
;
}
case
LED4_ID
:
{
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM4_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMaxLevel
*
65535
)
/
100
)
);
break
;
}
case
LED_ALL_ID
:
{
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM1_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMaxLevel
*
65535
)
/
100
)
);
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM2_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMaxLevel
*
65535
)
/
100
)
);
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM3_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMaxLevel
*
65535
)
/
100
)
);
kPwmDriverhandler
(
kPwmGetIndexByID
(
PWM4_ID
),
ELP_ANY
,
(
uint16_t
)(((
uint32_t
)
g_u8NoDisturbModeMaxLevel
*
65535
)
/
100
)
);
break
;
}
default:
break
;
}
}
}
//芯片上电后延时操作事件,一般处理继电器状态恢复或者禁用SWD口作为普通IO,也用来根据gpio读取电平修改同一类型的不同型号
/* DESP: system setup delay callback handler, called once.
...
...
@@ -867,27 +1003,14 @@ s32 kkSystemSetUpEventHandler(void *arg )
,
relayStatusBuffer
[
i
-
1
]
==
false
?
EZAO_OFF
:
EZAO_ON
);
}
//重写attribute
Update_Local_Attribute_Info
();
#if UART_ENABLE
kInterPanMoudleInit
(
kUserInterPanMsgInComingPaser
);
#endif
return
-
1
;
}
//退网5S快闪结束后的回调函数,一般用于面板、插座和窗帘面板退网完成后在全部关闭时复位
void
kUserNetworkExitCompleteCallback
(
void
)
{
iKonkeAfSelfPrint
(
"##############kUserNetworkExitCompleteCallback(%d)##################
\r\n
"
);
bool
bIsAllOffFlg
=
true
;
for
(
uint8_t
i
=
1
;
i
<=
Support_Endpoint_Num
;
i
++
){
zcl_onOffAttr_t
*
pOnOff
=
zcl_onoffAttrGet
(
i
);
if
(
pOnOff
->
onOff
){
bIsAllOffFlg
=
false
;
break
;
}
}
if
(
bIsAllOffFlg
==
true
){
SYSTEM_RESET
();
}
}
#if Z30_DEVICE_AGING_ENABLE
//老化的轮询回调函数,一般用于实现老化期间的LED闪烁或继电器翻转,也可以只LED闪烁
void
kUserFactorTestPollCallback
(
FactoryTestStatusEnum
status
)
...
...
@@ -903,7 +1026,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status)
break
;
case
FTS_AGING_15MIN
:
break
;
case
FTS_AGING_
8HOU_START
:
case
FTS_AGING_
4HOU_START
:
//关闭所有的蓝色LED,有可能之前蓝灯闪烁了
LED_OPT_OFF
(
LED_ALL_ID
);
LED_OPT_OFF
(
LED_RADAR_ID
);
...
...
@@ -913,7 +1036,7 @@ void kUserFactorTestPollCallback(FactoryTestStatusEnum status)
}
eRelayStatus
=
EZAO_ON
;
break
;
case
FTS_AGING_
8HOU
:
case
FTS_AGING_
4HOU
:
//翻转继电器,LED也会同步
eRelayStatus
=
eRelayStatus
==
EZAO_ON
?
EZAO_OFF
:
EZAO_ON
;
if
(
eRelayStatus
==
EZAO_ON
){
...
...
@@ -1024,7 +1147,7 @@ static ev_timer_event_t *kRadarControlLedEvent = NULL;
s32
kRadarCheckEventHandler
(
void
*
arg
)
{
if
(
kGetFactoryTestStatus
()
==
FTS_AGING_
8HOU
\
if
(
kGetFactoryTestStatus
()
==
FTS_AGING_
4HOU
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_DONE
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING_SECOND_PRESS
){
...
...
@@ -1049,7 +1172,7 @@ s32 kRadarCheckEventHandler(void *arg)
s32
kRadarLedEventHandler
(
void
*
arg
)
{
if
(
kGetFactoryTestStatus
()
==
FTS_AGING_
8HOU
\
if
(
kGetFactoryTestStatus
()
==
FTS_AGING_
4HOU
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_DONE
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING
\
||
kGetFactoryTestStatus
()
==
FTS_AGING_WAITING_SECOND_PRESS
){
...
...
@@ -1128,15 +1251,189 @@ uint8_t uart_send(void)
}
void
UartMsgProcessHandle
(
UMsgNodeSt
*
pMsgNode
)
{
uint16_t
opcode
;
uint16_t
frameLenth
=
0
;
uint8_t
*
args_in
;
uint8_t
reply_control_field
;
DataField_st
send_buf
;
if
(
NULL
==
pMsgNode
)
{
return
;
}
#if 1 // Just for debug
iKonkeAfSelfPrint
(
"
\r\n
UartMsgProcessHandle,MSG INCOMING[%d]:
\r\n
"
,
pMsgNode
->
length
);
iKonkeAfSelfPrint
(
"
\r\n
-- RTT MSG INCOMING[%d]:
\r\n
"
,
pMsgNode
->
length
);
iKonkeAfSelfPrintBuffer
(
pMsgNode
->
buffer
,
pMsgNode
->
length
);
iKonkeAfSelfPrint
(
"
\r\n
--------------------
\r\n
"
);
#endif
// check SOF
if
((
pMsgNode
->
buffer
[
0
]
!=
0xAA
)
||
(
pMsgNode
->
buffer
[
1
]
!=
0x55
))
{
return
;
}
frameLenth
=
UINT16_HL
(
pMsgNode
->
buffer
[
2
],
pMsgNode
->
buffer
[
3
]);
// check for parsable packets
if
(
pMsgNode
->
length
<
10
/* Minimum Packet Length */
)
{
iKonkeAfSelfPrint
(
"Err: Unparsable Packets!!
\r\n
"
);
return
;
}
opcode
=
((
uint16_t
)
pMsgNode
->
buffer
[
9
]
<<
8
)
|
(
uint16_t
)(
pMsgNode
->
buffer
[
10
]);
args_in
=
&
pMsgNode
->
buffer
[
8
];
send_buf
.
seq
=
UINT16_HL
(
pMsgNode
->
buffer
[
5
],
pMsgNode
->
buffer
[
6
]
);
send_buf
.
u8ChannelID
=
args_in
[
0
];
send_buf
.
u16Opcode
=
opcode
;
iKonkeAfSelfPrint
(
"opcode(%d)
\r\n
"
,
opcode
);
reply_control_field
=
Z_TO_H_NO_ACK
;
switch
(
opcode
){
case
UART_MSG_READ_DEVICE_SNAP_OPCODE
:
case
UART_MSG_JOIN_NWK_REQUEST_OPCODE
:
case
UART_MSG_LEAVE_NWK_REQUEST_OPCODE
:
case
UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE
:
case
UART_MSG_NWK_STATUS_NOTIFY_OPCODE
:
case
UART_MSG_READ_ATTRIBUTE_REQUEST_OPCODE
:
case
UART_MSG_WRITE_ATTRIBUTE_REQUEST_OPCODE
:
case
UART_MSG_WRITE_CMEI_CODE_OPCODE
:
case
UART_MSG_READ_CMEI_CODE_OPCODE
:
case
UART_MSG_WRITE_ISN_CODE_OPCODE
:
case
UART_MSG_READ_ISN_CODE_OPCODE
:
case
UART_MSG_ZCL_COMMAND_REQUEST_OPCODE
:
case
UART_MSG_BIND_REQUEST_OPCODE
:
case
UART_MSG_WRITE_INSTALL_CODE_OPCODE
:
case
UART_MSG_READ_INSTALL_CODE_OPCODE
:
case
UART_MSG_WRITE_MAC_CODE_OPCODE
:
case
UART_MSG_READ_MAC_CODE_OPCODE
:
case
UART_MSG_WRITE_MOUDLE_ID_OPCODE
:
case
UART_MSG_READ_MOUDLE_ID_OPCODE
:
case
UART_MSG_READ_DEV_RSSI_OPCODE
:
case
UART_MSG_WRITE_AGING_TIME_OPCODE
:
case
UART_MSG_READ_AGING_TIME_OPCODE
:
case
UART_MSG_WRITE_INTERPAN_PARA_OPCODE
:
case
UART_MSG_READ_INTERPAN_PARA_OPCODE
:
reply_control_field
=
Z_TO_H_NO_ACK
;
kCmdGeneralMsgPaser
(
pMsgNode
,
ECOM_PORT_UART
,
&
send_buf
);
break
;
case
UART_MSG_QUERY_INFO_OPCODE
:
case
UART_MSG_QUERY_DEVICE_VERSION_OPCODE
:
case
UART_MSG_QUERY_DEVICE_INFO_OPCODE
:
case
UART_MSG_CONFIG_DEVICE_SLEEP_OPCODE
:
case
UART_MSG_EXIT_FACTORY_TEST_OPCODE
:
case
UART_MSG_QUERY_SWITCH_ONOFF_OPCODE
:
case
UART_MSG_QUERY_FACTORY_INFO_OPCODE
:
case
UART_MSG_ENTER_FACTORY_TEST_OPCODE
:
case
UART_MSG_ONOFF_SWITCH_OPCODE
:
kkFactoryMsgInComingPaser
(
pMsgNode
,
ECOM_PORT_UART
,
&
send_buf
);
break
;
default:
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXIST
;
send_buf
.
u8ArgLen
=
1
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
kCmdMsgDataSentByPort
(
reply_control_field
,
send_buf
,
false
,
ECOM_PORT_UART
);
}
/* DESP: rtt command message incoming and process interface.
* Auth: kkk.20210222.
* */
void
kUserInterPanMsgInComingPaser
(
UMsgNodeSt
*
pMsgNode
)
{
uint16_t
opcode
;
uint16_t
frameLenth
=
0
;
uint16_t
crc16DataIn
=
0
;
uint16_t
crc16Value
=
0
;
uint8_t
*
args_in
;
uint8_t
reply_control_field
;
DataField_st
send_buf
;
if
(
NULL
==
pMsgNode
)
{
return
;
}
#if 0 // Just for debug
iKonkeAfSelfPrint("\r\n-- InterPan MSG INCOMING[%d]:\r\n", pMsgNode->length);
iKonkeAfSelfPrintBuffer(pMsgNode->buffer, pMsgNode->length);
iKonkeAfSelfPrint("\r\n--------------------\r\n");
#endif
// check SOF
if
((
pMsgNode
->
buffer
[
0
]
!=
0xAA
)
||
(
pMsgNode
->
buffer
[
1
]
!=
0x55
))
{
return
;
}
frameLenth
=
UINT16_HL
(
pMsgNode
->
buffer
[
2
],
pMsgNode
->
buffer
[
3
]);
// check CRC16
crc16Value
=
kCmdGetMsgCrc16Value
(
&
pMsgNode
->
buffer
[
4
],
frameLenth
);
crc16DataIn
=
UINT16_HL
(
pMsgNode
->
buffer
[
pMsgNode
->
length
-
2
],
pMsgNode
->
buffer
[
pMsgNode
->
length
-
1
]);
if
(
crc16Value
!=
crc16DataIn
)
{
iKonkeAfSelfPrint
(
"Err: CRC(%d)(%d)
\r\n
"
,
crc16Value
,
crc16DataIn
);
return
;
}
// check for parsable packets
if
(
pMsgNode
->
length
<
10
/* Minimum Packet Length */
)
{
iKonkeAfSelfPrint
(
"Err: Unparsable Packets!!
\r\n
"
);
return
;
}
opcode
=
((
uint16_t
)
pMsgNode
->
buffer
[
9
]
<<
8
)
|
(
uint16_t
)(
pMsgNode
->
buffer
[
10
]);
args_in
=
&
pMsgNode
->
buffer
[
8
];
send_buf
.
seq
=
UINT16_HL
(
pMsgNode
->
buffer
[
5
],
pMsgNode
->
buffer
[
6
]
);
send_buf
.
u8ChannelID
=
args_in
[
0
];
send_buf
.
u16Opcode
=
opcode
;
iKonkeAfSelfPrint
(
"opcode(%d)
\r\n
"
,
opcode
);
switch
(
opcode
){
case
UART_MSG_READ_DEVICE_SNAP_OPCODE
:
case
UART_MSG_JOIN_NWK_REQUEST_OPCODE
:
case
UART_MSG_LEAVE_NWK_REQUEST_OPCODE
:
case
UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE
:
case
UART_MSG_NWK_STATUS_NOTIFY_OPCODE
:
case
UART_MSG_READ_ATTRIBUTE_REQUEST_OPCODE
:
case
UART_MSG_WRITE_ATTRIBUTE_REQUEST_OPCODE
:
case
UART_MSG_WRITE_CMEI_CODE_OPCODE
:
case
UART_MSG_READ_CMEI_CODE_OPCODE
:
case
UART_MSG_WRITE_ISN_CODE_OPCODE
:
case
UART_MSG_READ_ISN_CODE_OPCODE
:
case
UART_MSG_ZCL_COMMAND_REQUEST_OPCODE
:
case
UART_MSG_BIND_REQUEST_OPCODE
:
case
UART_MSG_WRITE_INSTALL_CODE_OPCODE
:
case
UART_MSG_READ_INSTALL_CODE_OPCODE
:
case
UART_MSG_WRITE_MAC_CODE_OPCODE
:
case
UART_MSG_READ_MAC_CODE_OPCODE
:
case
UART_MSG_WRITE_MOUDLE_ID_OPCODE
:
case
UART_MSG_READ_MOUDLE_ID_OPCODE
:
case
UART_MSG_READ_DEV_RSSI_OPCODE
:
case
UART_MSG_WRITE_AGING_TIME_OPCODE
:
case
UART_MSG_READ_AGING_TIME_OPCODE
:
case
UART_MSG_WRITE_INTERPAN_PARA_OPCODE
:
case
UART_MSG_READ_INTERPAN_PARA_OPCODE
:
kCmdGeneralMsgPaser
(
pMsgNode
,
ECOM_PORT_INTERPAN
,
&
send_buf
);
break
;
case
UART_MSG_QUERY_INFO_OPCODE
:
case
UART_MSG_QUERY_DEVICE_VERSION_OPCODE
:
case
UART_MSG_QUERY_DEVICE_INFO_OPCODE
:
case
UART_MSG_CONFIG_DEVICE_SLEEP_OPCODE
:
case
UART_MSG_EXIT_FACTORY_TEST_OPCODE
:
case
UART_MSG_QUERY_FACTORY_INFO_OPCODE
:
case
UART_MSG_QUERY_SWITCH_ONOFF_OPCODE
:
case
UART_MSG_ENTER_FACTORY_TEST_OPCODE
:
case
UART_MSG_ONOFF_SWITCH_OPCODE
:
kkFactoryMsgInComingPaser
(
pMsgNode
,
ECOM_PORT_INTERPAN
,
&
send_buf
);
break
;
default:
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXIST
;
send_buf
.
u8ArgLen
=
1
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
reply_control_field
=
Z_TO_H_NO_ACK
;
kCmdMsgDataSentByPort
(
reply_control_field
,
send_buf
,
false
,
ECOM_PORT_INTERPAN
);
}
uint16_t
check_sum
(
uint8_t
*
msg
,
uint8_t
len
)
{
...
...
@@ -1169,10 +1466,10 @@ bool MsgCRC16(uint8_t *pdat, int length )
if
((
NULL
==
pdat
)
||
(
length
<
9
)){
return
false
;
}
crc_data
=
check_sum
(
&
pdat
[
3
],
pdat
[
2
]);
crc_data
=
check_sum
(
&
pdat
[
4
],
pdat
[
3
]);
CRC_H
=
(
crc_data
>>
8
)
&
0xff
;
CRC_L
=
crc_data
&
0xff
;
iKonkeAfSelfPrint
(
"
\r\n
MsgCRC16,%d,%d
\r\n
"
,
CRC_H
,
CRC_L
);
//iKonkeAfSelfPrint("\r\nMsgCRC16,%d,%d\r\n",CRC_H,CRC_L);
if
((
pdat
[
length
-
1
]
==
CRC_L
)
&&
(
pdat
[
length
-
2
]
==
CRC_H
))
{
return
true
;
...
...
tl_zigbee_sdk/apps/3LightPanelDemo/zb_afTestCb.c
View file @
682c75ca
...
...
@@ -55,7 +55,7 @@
#if ZBHCI_EN
#include "zbhci.h"
#endif
#include "ikk-debug.h"
#if AF_TEST_ENABLE
/**********************************************************************
* LOCAL CONSTANTS
...
...
@@ -126,17 +126,40 @@ static void afTest_testClearReqPrc(apsdeDataInd_t *pApsdeInd)
dstEp
.
profileId
=
pApsdeInd
->
indInfo
.
profile_id
;
dstEp
.
dstAddrMode
=
APS_SHORT_DSTADDR_WITHEP
;
dstEp
.
dstAddr
.
shortAddr
=
pApsdeInd
->
indInfo
.
src_short_addr
;
u8
st
=
SUCCESS
;
u8
apsCnt
=
0
;
af_dataSend
(
pApsdeInd
->
indInfo
.
dst_ep
,
&
dstEp
,
ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_RSP
,
1
,
&
st
,
&
apsCnt
);
}
static
void
afTest_dataSendDemo
(
apsdeDataInd_t
*
pApsdeInd
)
{
epInfo_t
dstEp
;
TL_SETSTRUCTCONTENT
(
dstEp
,
0
);
dstEp
.
dstAddrMode
=
APS_LONG_DSTADDR_WITHEP
;
dstEp
.
dstEp
=
pApsdeInd
->
indInfo
.
src_ep
;
memcpy
(
dstEp
.
dstAddr
.
extAddr
,
pApsdeInd
->
indInfo
.
src_ext_addr
,
8
);
dstEp
.
profileId
=
HA_PROFILE_ID
;
dstEp
.
txOptions
=
APS_TX_OPT_INTRA_PAN
;
dstEp
.
radius
=
0
;
u8
apsCnt
=
0
;
u8
asdu
[]
=
{
0xAA
,
0x55
,
0x00
,
0x08
,
0x10
,
0x00
,
0x00
,
0x04
,
0x00
,
0x00
,
0x0d
,
0x00
,
0xF3
,
0xD0
};
u8
asdulength
=
sizeof
(
asdu
);
//af_dataSend(pApsdeInd->indInfo.dst_ep, &dstEp, 0x0001, asdulength, asdu, &apsCnt);
printf
(
"afTest_Receive--------------ok!!
\r\n
"
);
}
void
afTest_rx_handler
(
void
*
arg
)
{
apsdeDataInd_t
*
pApsdeInd
=
(
apsdeDataInd_t
*
)
arg
;
iKonkeAfSelfPrint
(
"interpan data received,data len =%d
\r\n
"
,
pApsdeInd
->
indInfo
.
asduLength
);
iKonkeAfSelfPrintBuffer
(
pApsdeInd
->
indInfo
.
asdu
,
pApsdeInd
->
indInfo
.
asduLength
);
switch
(
pApsdeInd
->
indInfo
.
cluster_id
){
case
ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_REQ
:
g_afTest_rcvReqCnt
=
0
;
...
...
@@ -147,8 +170,12 @@ void afTest_rx_handler(void *arg)
afTest_testReqPrc
(
pApsdeInd
);
break
;
case
ZCL_CLUSTER_TELINK_SDK_TEST_RSP
:
break
;
// case ZCL_CLUSTER_PRIVATE_FCC0:
// {
// afTest_dataSendDemo(pApsdeInd);
// break;
// }
default:
break
;
}
...
...
@@ -159,8 +186,8 @@ void afTest_rx_handler(void *arg)
void
afTest_dataSendConfirm
(
void
*
arg
)
{
// apsdeDataConf_t *pApsDataCnf = (apsdeDataConf_t *)arg;
apsdeDataConf_t
*
pApsDataCnf
=
(
apsdeDataConf_t
*
)
arg
;
printf
(
"afTest_dataSendConfirm,dest ep = %d
\r\n
!!
\r\n
"
,
pApsDataCnf
->
dstEndpoint
);
}
#endif
/* AF_TEST_ENABLE */
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-button.c
View file @
682c75ca
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-pwm.c
View file @
682c75ca
...
...
@@ -64,7 +64,7 @@ void pwmSetDuty(u8 ch, u16 dutycycle)
uint8_t
kPwmGetIndexByID
(
uint8_t
pwm_id
)
{
for
(
int
index
=
0
;
index
<
g_u8PwmChannelNum
;
++
index
)
{
iKonkeAfSelfPrint
(
"####kPwmGetIndexByID index[%d] pwm_id[%d]
\r\n
"
,
index
,
g_stPwmConfList
[
index
].
u8PwmId
);
//iKonkeAfSelfPrint("####kPwmGetIndexByID index[%d] pwm_id[%d]\r\n",index, g_stPwmConfList[index].u8PwmId);
if
(
g_stPwmConfList
[
index
].
u8PwmId
!=
PWM_UNUSED_ID
)
{
if
(
g_stPwmConfList
[
index
].
u8PwmId
==
pwm_id
)
{
return
index
;
...
...
@@ -86,7 +86,7 @@ void kPwmDriverhandler(uint8_t pwm_index, PwmGradientDirectionEnum st, uint16_t
iKonkeAfSelfPrint
(
"####kPwmDriverhandler index is too large
\r\n
"
);
return
;
}
iKonkeAfSelfPrint
(
"######kPwmDriverhandler index(%d), direction(%d), value(%d)
\r\n
"
,
pwm_index
,
st
,
value
);
//iKonkeAfSelfPrint("######kPwmDriverhandler index(%d), direction(%d), value(%d)\r\n", pwm_index, st, value);
switch
(
st
)
{
case
(
ELP_MIN
):
...
...
@@ -170,7 +170,7 @@ void kPwmOptTrigger(uint8_t id, uint32_t start_value, uint32_t end_value, uint32
g_stPwmCtrller
[
pwm_index
].
startDutyCycle
=
start_value
;
g_stPwmCtrller
[
pwm_index
].
endDutyCycle
=
end_value
;
g_stPwmCtrller
[
pwm_index
].
startDutyCycleValue
=
start_value
;
memcpy
(
&
g_stPwmCtrller
[
pwm_index
].
gpioInfo
,
&
g_stPwmConfList
[
pwm_index
].
gpioInfo
,
sizeof
(
PwmGpio
ListSt
));
memcpy
(
&
g_stPwmCtrller
[
pwm_index
].
gpioInfo
,
&
g_stPwmConfList
[
pwm_index
].
gpioInfo
,
sizeof
(
PwmGpio
St
));
iKonkeAfSelfPrint
(
"action (%d) , interval[%d]
\r\n
"
,
g_stPwmCtrller
[
pwm_index
].
actionCounter
,
g_stPwmCtrller
[
pwm_index
].
intervalDutyCycle
);
pwmSetDuty
(
g_stPwmConfList
[
pwm_index
].
gpioInfo
.
pwmChannel
,
start_value
);
...
...
@@ -267,7 +267,7 @@ static s32 kPwmGradientChangeEventHandler(void *data)
g_stPwmCtrller
[
i
].
startDutyCycleValue
+=
g_stPwmCtrller
[
i
].
intervalDutyCycle
;
pwmSetDuty
(
g_stPwmCtrller
[
i
].
gpioInfo
.
pwmChannel
,
g_stPwmCtrller
[
i
].
startDutyCycleValue
);
}
iKonkeAfSelfPrint
(
"BREATH index(%d)channel(%d) count(%d),%d
\r\n
"
,
i
,
g_stPwmCtrller
[
i
].
gpioInfo
.
pwmChannel
,
g_stPwmCtrller
[
i
].
actionCounter
,
g_stPwmCtrller
[
i
].
startDutyCycleValue
);
//iKonkeAfSelfPrint("BREATH index(%d)channel(%d) count(%d),%d\r\n", i,g_stPwmCtrller[i].gpioInfo.pwmChannel, g_stPwmCtrller[i].actionCounter,g_stPwmCtrller[i].startDutyCycleValue);
//PWM_IDص
if
(
g_stPwmCtrller
[
i
].
actionCounter
==
0
){
//may be end duty cycle not equal, restore end duty cycle
...
...
@@ -291,7 +291,29 @@ static s32 kPwmGradientChangeEventHandler(void *data)
}
return
0
;
}
/* DESP: clear pwm gradient counter interface by pwm id.
* Auth: maozj.20200212.
* */
bool
kPwmClearGradientCounterById
(
uint8_t
pwm_id
)
{
if
(
pwm_id
==
PWM_UNUSED_ID
){
iKonkeAfSelfPrint
(
"#Err: kPwmClearGradientCounterById pwm id is invalid
\r\n
"
);
return
false
;
}
for
(
int
index
=
0
;
index
<
PWM_OBJS_SUPPORT_MAXN
;
++
index
)
{
//iKonkeAfSelfPrint("####kPwmGetIndexByID index[%d] pwm_id[%d]\r\n",index, g_stPwmConfList[index].u8PwmId);
if
(
g_stPwmConfList
[
index
].
u8PwmId
==
pwm_id
)
{
iKonkeAfSelfPrint
(
"###kPwmClearGradientCounterById success index(%d) id(%d)
\r\n
"
,
index
,
pwm_id
);
g_stPwmCtrller
[
index
].
actionCounter
=
0
;
return
true
;
}
}
return
false
;
}
void
PWM_Test
(
uint8_t
data
)
{
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-pwm.h
View file @
682c75ca
...
...
@@ -89,7 +89,7 @@ kk_err_t kPwmModuleInit(PwmConfSt pwmlist[], unsigned char pwm_number, pPwmActio
*/
void
kPwmOptTrigger
(
uint8_t
id
,
uint32_t
start_value
,
uint32_t
end_value
,
uint32_t
duration_time
);
bool
kPwmClearGradientCounterById
(
uint8_t
pwm_id
);
void
PWM_Test
(
uint8_t
data
);
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-uart.c
View file @
682c75ca
...
...
@@ -265,8 +265,8 @@ static void dma_uartRcvHandler(void)
uint8_t
head_index
=
0
;
uint32_t
len
=
*
dma_uartRxBuf
;
// iKonkeAfSelfPrint("#############dma_uartRcvHandler,recv data len = %d \r\n",len);
// iKonkeAfSelfPrintBuffer(dma_uartRxBuf+4,len);
iKonkeAfSelfPrint
(
"#############dma_uartRcvHandler,recv data len = %d
\r\n
"
,
len
);
iKonkeAfSelfPrintBuffer
(
dma_uartRxBuf
+
4
,
len
);
memset
(
&
MsgNode
,
0
,
sizeof
(
UMsgNodeSt
));
for
(
uint8_t
i
=
0
;
i
<
len
;
i
++
)
{
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/driver/ikk-uart.h
View file @
682c75ca
...
...
@@ -5,7 +5,7 @@
#include "drv_uart.h"
// MSG BUFFER OF NODE MAXLENGTH
#define UMSG_NODE_SIZE
32
#define UMSG_NODE_SIZE
96
// Maximum number of message nodes in the queue
#define UMSG_NODE_MAX 4
// Maximum Cache Length of Message Receiver
...
...
@@ -17,7 +17,7 @@ typedef enum { EQU_RECV = 0, EQU_SENT }QueueEm;
// uart recv/send buffer node
typedef
struct
tag_uart_message_node
{
unsigned
char
buffer
[
UMSG_NODE_SIZE
];
u
nsigned
char
length
;
u
int16_t
length
;
// just for sending, Used to match instruction responses. For example, according to the instruction opcode!
unsigned
char
matcher
[
4
];
unsigned
char
matcher_offset
;
...
...
@@ -26,6 +26,8 @@ typedef struct tag_uart_message_node {
bool
bRspNeedtoDispatch
;
// Attempt to send number of times, decreases to 0 when invalid!!!
unsigned
char
sent_try
;
unsigned
char
*
ack
;
unsigned
char
ack_length
;
}
UMsgNodeSt
;
typedef
struct
tag_uart_message_queue
{
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-cluster.c
View file @
682c75ca
...
...
@@ -19,7 +19,7 @@ static uint8_t g_tmp_buffer[64] = { 0 };
pOnOffClusterOnOffStatusCallback
g_pfOnOffStatusCallback
=
NULL
;
//static pClusterAttributeChangeCallback pOnOffClusterCallback = NULL;
static
pClusterAttributeChangeCallback
pOnOffClusterCallback
=
NULL
;
//static pClusterAttributeChangeCallback pLevelClusterCallback = NULL;
//static pClusterAttributeChangeCallback pColorClusterCallback = NULL;
...
...
@@ -33,27 +33,12 @@ typedef struct {
static
ZclClusterReportTableSt
g_stZclClusterReportPermitTable
;
//bool kZclOnOffClusterServerOnOffGet(uint8_t endpoint)
//{
// uint8_t status;
// zclAttrInfo_t *onoff = zcl_attrRead(endpoint,ZCL_CLUSTER_GEN_ON_OFF,ZCL_ATTRID_ONOFF,&status);
//
// iKonkeAfSelfPrint("kZclOnOffClusterServerOnOffGet:status(%d), endpoint(%d), status(%d)\r\n",status, endpoint, onoff->data[0]);
// iKonkeAfSelfPrint("kZclOnOffClusterServerOnOffGet:id(%d), type(%d), access(%d)\r\n",onoff->id, onoff->type, onoff->access);
//
// return onoff->data[0];
//}
bool
kZclOnOffClusterServerOnOffGet
(
uint8_t
endpoint
)
{
zcl_onOffAttr_t
*
pOnOff
=
zcl_onoffAttrGet
(
endpoint
);
return
pOnOff
->
onOff
;
}
void
kZclOnOffClusterServerOnOffSet
(
uint8_t
endpoint
,
bool
onoff
)
{
zcl_onOffAttr_t
*
pOnOff
=
zcl_onoffAttrGet
(
endpoint
);
pOnOff
->
onOff
=
onoff
;
WriteServerAttribute
(
endpoint
,
CLUSTER_ONOFF_ID
,
ZCL_ATTRID_ONOFF
,(
uint8_t
*
)
&
onoff
,
ZCL_DATA_TYPE_BOOLEAN
);
// zcl_onOffAttr_t *pOnOff = zcl_onoffAttrGet(endpoint);
//
// pOnOff->onOff = onoff;
zcl_onOffAttr_save
();
}
/* DESP: on-off cluster control operate.
...
...
@@ -69,7 +54,6 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl
setValue
=
1
;
else
setValue
=
0
;
kZclOnOffClusterServerOnOffSet
(
endpoint
,
setValue
);
if
(
kNwkGetCurrentStatus
()
==
ENS_ONLINE
)
{
// check binding table
...
...
@@ -81,7 +65,12 @@ kk_err_t kZclOnOffClusterServerOnOffControl(uint8_t endpoint, OnOffCtrlEnum ctrl
return
KET_OK
;
}
bool
kZclOnOffClusterServerOnOffGet
(
uint8_t
endpoint
)
{
status_t
status
;
zclAttrInfo_t
*
pOnOff
=
zcl_attrRead
(
endpoint
,
CLUSTER_ONOFF_ID
,
ZCL_ATTRID_ONOFF
,
&
status
);
return
(
status
==
ZCL_STA_SUCCESS
)
?
(
pOnOff
->
data
[
0
])
:
(
0
);
}
static
status_t
WriteServerAttribute
(
u8
endpoint
,
u16
clusterId
,
uint8_t
attributeID
,
uint8_t
*
dataPtr
,
uint8_t
data_type
)
...
...
@@ -90,15 +79,41 @@ static status_t WriteServerAttribute(u8 endpoint, u16 clusterId,uint8_t attribut
attr_data
.
attrID
=
attributeID
;
attr_data
.
dataType
=
data_type
;
u16
dataLen
=
zcl_getAttrSize
(
data_type
,
dataPtr
);
memcpy
(
attr_data
.
attrData
,
dataPtr
,
dataLen
);
attr_data
.
attrData
=
dataPtr
;
// iKonkeAfSelfPrint("##WriteServerAttribute attr =%x,attr = %x,len=%d :\r\n",clusterId,attr_data.attrID,dataLen);
// iKonkeAfSelfPrint("##DataBuffer len = %d,data=%x-%x:\r\n",dataLen,attr_data.attrData[1],attr_data.attrData[2]);
// iKonkeAfSelfPrintBuffer(attr_data.attrData,attr_data.attrData[0]+1);
return
zcl_attrWrite
(
endpoint
,
clusterId
,
&
attr_data
,
false
);
iKonkeAfSelfPrint
(
"##WriteServerAttribute cluster =%d,attr = %d,len=%d :
\r\n
"
,
clusterId
,
attr_data
.
attrID
,
dataLen
);
if
(
dataLen
==
1
)
iKonkeAfSelfPrint
(
"##data=%d:
\r\n
"
,
*
dataPtr
);
else
iKonkeAfSelfPrintBuffer
(
dataPtr
,
dataLen
);
return
zcl_attrWrite
(
endpoint
,
clusterId
,
&
attr_data
,
true
);
}
bool
Get_Model_ID
(
uint8_t
*
ModeID
)
{
status_t
status
;
zclAttrInfo_t
*
pAttrInfo
=
zcl_attrRead
(
1
,
ZCL_CLUSTER_GEN_BASIC
,
ZCL_ATTRID_BASIC_MODEL_ID
,
&
status
);
if
(
status
==
ZCL_STA_SUCCESS
)
{
uint8_t
len
=
pAttrInfo
->
data
[
0
];
if
((
ModeID
)
&&
(
len
>
0
)
&&
(
pAttrInfo
->
type
==
ZCL_DATA_TYPE_CHAR_STR
))
{
uint8_t
temp
[
16
]
=
{
0
};
memcpy
(
ModeID
,
&
pAttrInfo
->
data
[
1
],
len
);
//Get ASCII Data
if
((
len
>
0
)
&&
(
len
%
2
==
0
))
{
kUtilsStr2Hex
(
ModeID
,
temp
,
len
);
memcpy
(
ModeID
,
temp
,
len
/
2
);
iKonkeAfSelfPrint
(
"##Trans Data Buffer Len =%d:
\r\n
"
,
len
);
iKonkeAfSelfPrintBuffer
(
ModeID
,
8
);
return
true
;
}
}
}
return
false
;
}
static
status_t
Rewrite_Modeid
(
uint8_t
*
modeid
,
uint8_t
software
,
uint8_t
hardware
)
{
uint8_t
Modeid_Temp
[]
=
"3AFE101003008611"
;
...
...
@@ -140,6 +155,10 @@ static status_t Rewrite_Modeid(uint8_t *modeid,uint8_t software,uint8_t hardwar
g_tmp_buffer
[
0
]
=
16
;
g_tmp_buffer
[
0
+
2
+
16
]
=
'0'
;
uint8_t
*
data
=
MODEL_ID_TOKEN_GET
();
if
(
!
All_Same_Data
(
&
data
[
1
],
0xff
,
32
))
memcpy
(
g_tmp_buffer
,
data
,
data
[
0
]
+
1
);
status
=
WriteServerAttribute
(
1
,
ZCL_CLUSTER_GEN_BASIC
,
ZCL_ATTRID_BASIC_MODEL_ID
,(
uint8_t
*
)
g_tmp_buffer
,
ZCL_DATA_TYPE_CHAR_STR
);
if
(
status
!=
ZCL_STA_SUCCESS
)
{
...
...
@@ -188,73 +207,54 @@ void Update_Local_Attribute_Info(void)
//
//static typedef struct{
// zcl_basicAttr_t basicAttrs_temp;
// zcl_identifyAttr_t identifyAttrs_temp
// zcl_onOffAttr_t onOffAttrs_temp;
// zcl_onOffAttr_t levelAttrs_temp;
//}AttrListST;
//static AttrListST Attr_List_Value[MAX_ATTR_CHANGE_SUPPORT_NUMS] ;
//void ClusterAttributeChangeCallbackRegister(AttributeChangeConfSt *ConfSt,unint8_t num)
//{
// for(uint8_t i=0;i<num;i++)
// {
// if(i > MAX_ATTR_CHANGE_SUPPORT_NUMS)
// {
// iKonkeAfSelfPrint("attribute change callback totals number beyond!!\r\n");
// break;
// }
// switch(ConfSt[i]->cluster)
// {
// case ZCL_CLUSTER_GEN_ON_OFF:
// {
// if(ConfSt[i]->attribute == ZCL_ATTRID_ONOFF)
// {
// pOnOffClusterCallback = ConfSt[i]->change_callback;
// }
// }
// break;
typedef
struct
{
zcl_basicAttr_t
basicAttrs_temp
;
zcl_identifyAttr_t
identifyAttrs_temp
;
zcl_onOffAttr_t
onOffAttrs_temp
;
zcl_levelAttr_t
levelAttrs_temp
;
}
AttrListST
;
static
AttrListST
Attr_List_Value
[
MAX_ATTR_CHANGE_SUPPORT_NUMS
]
;
void
ikkAttributeChangeCallbackRegister
(
AttributeChangeConfSt
*
ConfSt
,
uint8_t
num
)
{
for
(
uint8_t
i
=
0
;
i
<
MAX_ATTR_CHANGE_SUPPORT_NUMS
;
i
++
)
{
if
(
i
>
MAX_ATTR_CHANGE_SUPPORT_NUMS
)
{
iKonkeAfSelfPrint
(
"attribute change callback totals number beyond!!
\r\n
"
);
break
;
}
switch
(
ConfSt
->
cluster
)
{
case
ZCL_CLUSTER_GEN_ON_OFF
:
{
pOnOffClusterCallback
=
ConfSt
->
change_callback
;
}
break
;
// case ZCL_CLUSTER_GEN_LEVEL_CONTROL:
// {
// if(ConfSt[i]->attribute == ZCL_ATTRID_LEVEL_CURRENT_LEVEL)
// pLevelClusterCallback = ConfSt[i]->change_callback;
// pLevelClusterCallback = ConfSt->change_callback;
// }
// break;
// default:
// break;
// }
// }
//// memcpy(&Attr_List_Value.basicAttrs_temp,&g_zcl_basicAttrs,sizeof(zcl_basicAttr_t));
//// memcpy(&Attr_List_Value.identifyAttrs_temp,&g_zcl_identifyAttrs,sizeof(zcl_basicAttr_t));
//// memcpy(&Attr_List_Value.onOffAttrs_temp,&g_zcl_onOffAttrs,sizeof(zcl_basicAttr_t));
//// memcpy(&Attr_List_Value.levelAttrs_temp,&g_zcl_levelAttrs,sizeof(zcl_basicAttr_t));
//}
default:
break
;
}
}
}
void
AttributeValueCheck
(
void
)
void
AttributeValueCheck
Callback
(
void
)
{
// if((Attr_List_Value.onOffAttrs_temp.onOff !=g_zcl_onOffAttrs.onOff)&&(pOnOffClusterCallback))
// {
// pOnOffClusterCallback(1,ZCL_CLUSTER_GEN_ON_OFF,ZCL_ATTRID_ONOFF,g_zcl_onOffAttrs.onOff,1,g_zcl_onOffAttrs.onOff);
//
//
// }
for
(
uint8_t
i
=
0
;
i
<
Support_Endpoint_Num
;
i
++
)
{
if
(
memcmp
((
uint8_t
*
)
&
Attr_List_Value
[
i
].
onOffAttrs_temp
,(
uint8_t
*
)
&
g_zcl_onOffAttrs
[
i
],
sizeof
(
zcl_onOffAttr_t
))
)
{
if
(
Attr_List_Value
[
i
].
onOffAttrs_temp
.
onOff
!=
g_zcl_onOffAttrs
[
i
].
onOff
)
{
if
(
pOnOffClusterCallback
)
pOnOffClusterCallback
(
i
+
1
,
ZCL_CLUSTER_GEN_ON_OFF
,
ZCL_ATTRID_ONOFF
,(
uint8_t
*
)
&
g_zcl_onOffAttrs
[
i
].
onOff
,
ZCL_DATA_TYPE_BOOLEAN
);
}
memcpy
((
uint8_t
*
)
&
Attr_List_Value
[
i
].
onOffAttrs_temp
,(
uint8_t
*
)
&
g_zcl_onOffAttrs
[
i
],
sizeof
(
zcl_onOffAttr_t
));
}
}
}
...
...
@@ -379,7 +379,6 @@ void ON_OFF_Cmd_Handler(uint8_t endpoint,bool onoff)
OnOffStatusEnum
on_off_ctr
=
(
OnOffStatusEnum
)
onoff
;
kZclClusterSetPermitReportInfo
(
endpoint
,
ZCL_CLUSTER_GEN_ON_OFF
,
true
,
false
);
kZclOnOffClusterServerOnOffControl
(
endpoint
,
on_off_ctr
);
g_pfOnOffStatusCallback
(
endpoint
,
on_off_ctr
);
}
/* DESP: Modified attribute reporting interface, reference from SDK callback[emberAfReportingAttributeChangeCallback].
* Auth: dingmz_frc.20190701.
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-cluster.h
View file @
682c75ca
...
...
@@ -28,11 +28,10 @@ typedef struct tag_zcl_report_table{
}
ZclReportTableSt
;
#define MAX_ATTR_CHANGE_SUPPORT_NUMS 8
typedef
void
(
*
pClusterAttributeChangeCallback
)(
uint8_t
endpoint
,
uint16_t
cluster
,
uint16_t
attribute
,
uint8_t
len
,
uint8_t
*
data
);
typedef
void
(
*
pClusterAttributeChangeCallback
)(
uint8_t
endpoint
,
uint16_t
cluster
,
uint16_t
attribute
,
uint8_t
*
data
,
uint8_t
data_type
);
typedef
struct
{
uint16_t
cluster
;
uint16_t
attribute
;
pClusterAttributeChangeCallback
change_callback
;
}
AttributeChangeConfSt
;
...
...
@@ -41,20 +40,25 @@ typedef void (*pOnOffClusterOnOffStatusCallback)(uint8_t endpoint, OnOffStatusEn
void
kZclOnOffClusterServerOnOffSet
(
uint8_t
endpoint
,
bool
onoff
);
extern
status_t
zcl_attrWrite
(
u8
endpoint
,
u16
clusterId
,
zclWriteRec_t
*
pWriteRec
,
bool
enable
);
extern
zclAttrInfo_t
*
zcl_attrRead
(
u8
endpoint
,
u16
clusterId
,
u16
attrId
,
status_t
*
status
);
#define ReadServerAttribute(endpoint,clusterId,attributeID,status) (zcl_attrRead(endpoint,clusterId,attributeID,status))
#define kGetLastRssi() (g_sysDiags.lastMessageRSSI)
#define kGetLastLQI() (g_sysDiags.lastMessageLQI)
void
Update_Local_Attribute_Info
(
void
);
bool
kIsKonkeRemoteGateway
(
void
);
kk_err_t
kZclOnOffClusterServerInit
(
pOnOffClusterOnOffStatusCallback
pOnOffStatusCallback
);
void
ikkAttributeChangeCallbackRegister
(
AttributeChangeConfSt
*
ConfSt
,
uint8_t
num
);
void
ON_OFF_Cmd_Handler
(
uint8_t
endpoint
,
uint8_t
cmd
);
bool
kZclOnOffClusterServerOnOffGet
(
uint8_t
endpoint
);
kk_err_t
kZclOnOffClusterServerOnOffControl
(
uint8_t
endpoint
,
OnOffCtrlEnum
ctrlopt
);
void
ClusterAttributeChangeCallbackRegister
(
AttributeChangeConfSt
*
ConfSt
,
uint8_t
num
);
bool
Get_Model_ID
(
uint8_t
*
ModeID
);
bool
kkClusterGetReportingPeriod
(
uint8_t
endpoint
,
uint16_t
cluster_id
,
uint16_t
attribute_id
,
uint16_t
*
min_interval
,
uint16_t
*
max_interval
);
void
kOptTunnelReportingPlagiarizeOriginal
(
uint8_t
endpoint
,
uint16_t
clusterId
,
uint16_t
attributeId
);
void
kZclClusterPermitReportTableInit
(
BindObjSt
clusterBindList
[],
uint8_t
size
);
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-command.c
View file @
682c75ca
#include "ikk-debug.h"
#include "ikk-command.h"
#include "ikk-common-utils.h"
#include "ikk-token.h"
#include "ikk-network.h"
#include "ikk-cluster.h"
#include "ikk-factory-test.h"
#include "ikk-interpan.h"
//#define OPCODE_REMAP_TABLE_SIZE 20
static
uint16_t
opcodeReampTable
[][
2
]
=
{
//FCC0, AA55
{
0xE0
,
0x0001
},
//write install code,
{
0xE1
,
0x0003
},
//write cmei
{
0xE2
,
0x0005
},
//write isn
{
0xE3
,
0x0007
},
//write mac
{
0xE6
,
0x0002
},
{
0xE7
,
0x0004
},
{
0xE8
,
0x0006
},
{
0xE9
,
0x0008
},
{
0xEA
,
0x0009
},
{
0xEB
,
0x000A
},
//{0xF0, 0xED14},//????
//{0xF1, 0xED04},//????
//{0xF2, 0xED05},//??????
{
0xF3
,
0x000C
},
//??????
{
0xF4
,
0x000D
},
//??????
{
0xF5
,
0x000E
},
//??interPan??
{
0xF6
,
0x000F
},
//??interPan??
{
0xF7
,
0x0010
},
//??????
};
uint16_t
kCmdGetMsgCrc16Value
(
uint8_t
*
msg
,
uint8_t
len
)
{
uint16_t
crc
=
0xFFFF
;
uint16_t
i
,
j
=
0
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
for
(
j
=
0
;
j
<
8
;
j
++
)
{
//????a?? ADD BY YWQ
uint8_t
c15
=
(
uint8_t
)((
crc
>>
15
&
1
)
==
1
);
uint8_t
bit
=
(
uint8_t
)((
msg
[
i
]
>>
(
7
-
j
)
&
1
)
==
1
);
crc
<<=
1
;
if
(
c15
^
bit
)
{
crc
^=
0x1021
;
}
}
}
return
crc
;
}
/* DESP: remap opcode, arg direction 0: FCC0->AA55 1:AA55->FCC0
* Auth:
* */
uint16_t
kCmdOpcodeRemap
(
uint16_t
Opcode
,
uint8_t
direction
)
{
for
(
uint8_t
i
=
0
;
i
<
(
sizeof
(
opcodeReampTable
)
/
(
2
*
sizeof
(
uint16_t
)));
i
++
)
{
if
(
opcodeReampTable
[
i
][
0
]
==
Opcode
)
{
return
opcodeReampTable
[
i
][
1
];
}
}
return
0xFFFF
;
}
kk_err_t
kCmdGeneralMsgPaser
(
UMsgNodeSt
*
pMsgNode
,
ComPortEm
port
,
DataField_st
*
pDataOut
)
{
//UMsgNodeSt uMsgNode = {0};
uint16_t
length
=
0
;
uint8_t
control_field
=
0
;
DataField_st
data
;
DataField_st
send_buf
;
uint8_t
reply_control_field
=
0
;
if
(
NULL
==
pMsgNode
)
{
return
KET_ERR_INVALID_PARAM
;
}
#if 1 // Just for debug
iKonkeAfSelfPrint
(
"
\r\n
-- MSG INCOMING[%d]:
\r\n
"
,
pMsgNode
->
length
);
iKonkeAfSelfPrintBuffer
(
pMsgNode
->
buffer
,
pMsgNode
->
length
);
iKonkeAfSelfPrint
(
"
\r\n
--------------------
\r\n
"
);
#endif
// check for parsable packets
if
(
pMsgNode
->
length
<
5
/* Minimum Packet Length */
)
{
iKonkeAfSelfPrint
(
"Err: Unparsable Packets!!
\r\n
"
);
return
KET_ERR_INVALID_PARAM
;
}
//length(1) pid(4) ch(1) opcode(1) arg
if
(
port
==
ECOM_PORT_FCC0
)
{
length
=
(
uint16_t
)
pMsgNode
->
length
;
//control_field = pMsgNode->buffer[4];
data
.
seq
=
0x00
;
data
.
u8Datalen
=
pMsgNode
->
buffer
[
0
];
data
.
u8ArgLen
=
data
.
u8Datalen
-
6
;
// fcc0 - id (4) - ch(1) - opcode(1)
data
.
u8ChannelID
=
pMsgNode
->
buffer
[
5
];
data
.
u16Opcode
=
kCmdOpcodeRemap
((
uint16_t
)(
pMsgNode
->
buffer
[
6
]),
0
);
if
(
data
.
u16Opcode
==
0xFFFF
)
{
return
KET_ERR_INVALID_PARAM
;
}
memcpy
(
data
.
u8ARG
,
&
pMsgNode
->
buffer
[
7
],
data
.
u8ArgLen
);
//6 = pid(4) + ch(1) + opcode(1)
send_buf
.
seq
=
data
.
seq
;
send_buf
.
u8ChannelID
=
data
.
u8ChannelID
;
send_buf
.
u16Opcode
=
data
.
u16Opcode
;
}
else
{
length
=
((
uint16_t
)
pMsgNode
->
buffer
[
2
]
<<
8
)
|
(
uint16_t
)(
pMsgNode
->
buffer
[
3
]);
control_field
=
pMsgNode
->
buffer
[
4
];
data
.
seq
=
((
uint16_t
)
pMsgNode
->
buffer
[
5
]
<<
8
)
|
(
uint16_t
)(
pMsgNode
->
buffer
[
6
]);
data
.
u8Datalen
=
pMsgNode
->
buffer
[
7
];
data
.
u8ArgLen
=
data
.
u8Datalen
-
3
;
// aa55 - ch(1) - opcode(2)
data
.
u8ChannelID
=
pMsgNode
->
buffer
[
8
];
data
.
u16Opcode
=
((
uint16_t
)
pMsgNode
->
buffer
[
9
]
<<
8
)
|
(
uint16_t
)(
pMsgNode
->
buffer
[
10
]);
memcpy
(
data
.
u8ARG
,
&
pMsgNode
->
buffer
[
11
],
data
.
u8Datalen
-
3
);
send_buf
.
seq
=
data
.
seq
;
send_buf
.
u8ChannelID
=
data
.
u8ChannelID
;
send_buf
.
u16Opcode
=
data
.
u16Opcode
;
}
send_buf
.
u8Datalen
=
0
;
iKonkeAfSelfPrint
(
"opcode = %x%x
\r\n
"
,
send_buf
.
u16Opcode
>>
8
,(
u8
)
send_buf
.
u16Opcode
);
iKonkeAfSelfPrint
(
"channel = %x
\r\n
"
,
data
.
u8ChannelID
);
switch
(
data
.
u16Opcode
)
{
case
(
UART_MSG_QUERY_INFO_OPCODE
):
{
reply_control_field
=
Z_TO_H_NO_ACK
;
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ArgLen
=
1
;
break
;
}
case
(
UART_MSG_WRITE_INSTALL_CODE_OPCODE
):
// write install code
{
uint8_t
buffer
[
16
]
=
{
0
};
//check install code length 20200725
uint8_t
length
=
data
.
u8ARG
[
0
];
if
(
length
!=
16
)
{
send_buf
.
u8ARG
[
0
]
=
ERR_FORMAT
;
send_buf
.
u8ARG
[
1
]
=
data
.
u8ARG
[
0
];
memcpy
(
&
send_buf
.
u8ARG
[
2
],
&
data
.
u8ARG
[
1
],
length
);
//send_buf.u8Datalen = data.u8ARG[0] + 5;
send_buf
.
u8ArgLen
=
length
+
1
+
1
;
break
;
}
memcpy
(
buffer
,
&
data
.
u8ARG
[
1
],
16
);
INSTALL_CODE_TOKEN_SET
(
buffer
,
16
);
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ARG
[
1
]
=
data
.
u8ARG
[
0
];
memcpy
(
&
send_buf
.
u8ARG
[
2
],
&
data
.
u8ARG
[
1
],
length
);
send_buf
.
u8ArgLen
=
length
+
1
+
1
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_READ_INSTALL_CODE_OPCODE
):
//read install code
{
uint8_t
install_code_len
=
0
;
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
install_code_len
=
16
;
memcpy
(
&
send_buf
.
u8ARG
[
2
],
INSTALL_CODE_TOKEN_GET
(),
install_code_len
);
send_buf
.
u8ARG
[
1
]
=
install_code_len
;
send_buf
.
u8ArgLen
=
install_code_len
+
2
;
// err(1) + codelen(1)
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_WRITE_CMEI_CODE_OPCODE
):
// write cmei
{
uint8_t
buffer
[
33
];
uint8_t
length
=
data
.
u8ARG
[
0
];
memset
(
buffer
,
0
,
33
);
if
(
length
>
32
)
{
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXPECTED
;
//send_buf.u8Datalen = 1 + 1 + 3;
}
else
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
memcpy
(
buffer
,
&
data
.
u8ARG
[
1
],
length
);
CMEI_TOKEN_SET
(
buffer
,
length
);
}
memcpy
(
&
send_buf
.
u8ARG
[
1
],
&
data
.
u8ARG
[
0
],
data
.
u8ARG
[
0
]
+
1
);
send_buf
.
u8ArgLen
=
data
.
u8ARG
[
0
]
+
1
+
1
;
//send_buf.u8Datalen = data.u8ARG[0] + 4;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_READ_CMEI_CODE_OPCODE
):
//read cmei
{
uint8_t
buffer
[
33
];
uint8_t
length
=
0
;
memset
(
buffer
,
0
,
33
);
uint8_t
*
data
=
CMEI_TOKEN_GET
();
iKonkeAfSelfPrint
(
"len %x
\r\n
"
,
data
[
0
]);
iKonkeAfSelfPrintBuffer
(
data
+
1
,
32
);
length
=
data
[
0
];
memcpy
(
buffer
,
data
,
length
+
1
);
if
(
length
>
32
)
{
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXPECTED
;
send_buf
.
u8ARG
[
1
]
=
0x00
;
send_buf
.
u8ArgLen
=
2
;
}
else
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
memcpy
(
&
send_buf
.
u8ARG
[
1
],
buffer
,
length
+
1
);
send_buf
.
u8ArgLen
=
length
+
1
+
1
;
}
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_WRITE_ISN_CODE_OPCODE
):
// write isn
{
uint8_t
buffer
[
33
];
uint8_t
length
=
data
.
u8ARG
[
0
];
memset
(
buffer
,
0
,
33
);
if
(
length
>
32
)
{
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXPECTED
;
//send_buf.u8Datalen = 1 + 1 + 3;
}
else
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
memcpy
(
buffer
,
&
data
.
u8ARG
[
1
],
length
);
ISN_TOKEN_SET
(
buffer
,
length
);
}
memcpy
(
&
send_buf
.
u8ARG
[
1
],
&
data
.
u8ARG
[
0
],
data
.
u8ARG
[
0
]
+
1
);
send_buf
.
u8ArgLen
=
data
.
u8ARG
[
0
]
+
1
+
1
;
//send_buf.u8Datalen = data.u8ARG[0] + 4;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_READ_ISN_CODE_OPCODE
):
//read isn
{
uint8_t
buffer
[
33
];
uint8_t
length
=
0
;
memset
(
buffer
,
0
,
33
);
uint8_t
*
data
=
ISN_TOKEN_GET
();
iKonkeAfSelfPrint
(
"len %x
\r\n
"
,
data
[
0
]);
iKonkeAfSelfPrintBuffer
(
data
+
1
,
32
);
length
=
data
[
0
];
memcpy
(
buffer
,
data
,
length
+
1
);
if
(
length
>
32
)
{
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXPECTED
;
send_buf
.
u8ARG
[
1
]
=
0x00
;
send_buf
.
u8ArgLen
=
2
;
}
else
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
memcpy
(
&
send_buf
.
u8ARG
[
1
],
buffer
,
length
+
1
);
send_buf
.
u8ArgLen
=
length
+
1
+
1
;
}
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_WRITE_MAC_CODE_OPCODE
):
//ok
{
uint8_t
mac_length
=
0x00
;
addrExt_t
addr
,
local_addr
;
flash_read
(
CFG_MAC_ADDRESS
,
8
,(
uint8_t
*
)
local_addr
);
mac_length
=
data
.
u8ARG
[
0
];
if
(
mac_length
!=
8
)
{
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXPECTED
;
}
else
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
memcpy
(
addr
,
&
data
.
u8ARG
[
1
],
8
);
SWAP_EUI64
((
uint8_t
*
)
local_addr
);
if
(
memcmp
(
local_addr
,
addr
,
8
)
){
SWAP_EUI64
((
uint8_t
*
)
addr
);
flash_erase
(
CFG_MAC_ADDRESS
);
flash_write
(
CFG_MAC_ADDRESS
,
8
,
addr
);
}
}
send_buf
.
u8ARG
[
1
]
=
8
;
memcpy
(
&
send_buf
.
u8ARG
[
2
],
&
data
.
u8ARG
[
1
],
8
);
send_buf
.
u8ArgLen
=
1
+
1
+
8
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_READ_MAC_CODE_OPCODE
):
//ok
{
addrExt_t
addr
;
flash_read
(
CFG_MAC_ADDRESS
,
8
,(
uint8_t
*
)
addr
);
// zb_getLocalExtAddr(addr);
send_buf
.
u8ARG
[
0
]
=
0x00
;
send_buf
.
u8ARG
[
1
]
=
0x08
;
SWAP_EUI64
((
uint8_t
*
)
addr
);
iKonkeAfSelfPrintBuffer
(
addr
,
8
);
memcpy
(
&
send_buf
.
u8ARG
[
2
],
addr
,
8
);
send_buf
.
u8ArgLen
=
1
+
1
+
8
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_WRITE_MOUDLE_ID_OPCODE
):
// write modeid code
{
uint8_t
buffer
[
33
];
uint8_t
length
=
data
.
u8ARG
[
0
];
memset
(
buffer
,
0
,
33
);
if
(
length
>
32
)
{
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXPECTED
;
//send_buf.u8Datalen = 1 + 1 + 3;
}
else
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
memcpy
(
buffer
,
&
data
.
u8ARG
[
1
],
length
);
MODEL_ID_TOKEN_SET
(
buffer
,
length
);
}
memcpy
(
&
send_buf
.
u8ARG
[
1
],
&
data
.
u8ARG
[
0
],
data
.
u8ARG
[
0
]
+
1
);
send_buf
.
u8ArgLen
=
data
.
u8ARG
[
0
]
+
1
+
1
;
//send_buf.u8Datalen = data.u8ARG[0] + 4;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_READ_MOUDLE_ID_OPCODE
):
//read modeid code
{
uint8_t
buffer
[
33
];
uint8_t
length
=
0
;
memset
(
buffer
,
0
,
33
);
uint8_t
*
data
=
MODEL_ID_TOKEN_GET
();
if
(
All_Same_Data
(
&
data
[
1
],
0xff
,
32
))
{
status_t
status
;
zclAttrInfo_t
*
attrInfo
=
ReadServerAttribute
(
1
,
0x0000
,
0x0005
,
&
status
);
length
=
attrInfo
->
data
[
0
];
iKonkeAfSelfPrint
(
"len %x
\r\n
"
,
length
);
iKonkeAfSelfPrintBuffer
(
attrInfo
->
data
+
1
,
32
);
memcpy
(
buffer
,
attrInfo
->
data
,
length
+
1
);
}
else
{
length
=
data
[
0
];
iKonkeAfSelfPrint
(
"len %x
\r\n
"
,
length
);
iKonkeAfSelfPrintBuffer
(
data
+
1
,
32
);
memcpy
(
buffer
,
data
,
length
+
1
);
}
if
(
length
>
32
)
{
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXPECTED
;
send_buf
.
u8ARG
[
1
]
=
0x00
;
send_buf
.
u8ArgLen
=
2
;
//send_buf.u8Datalen = 1 + 1 + 3;
}
else
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
memcpy
(
&
send_buf
.
u8ARG
[
1
],
buffer
,
length
+
1
);
send_buf
.
u8ArgLen
=
length
+
1
+
1
;
//send_buf.u8Datalen = length + 1 + 1 + 3;
}
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_READ_DEV_RSSI_OPCODE
):
{
reply_control_field
=
Z_TO_H_NO_ACK
;
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ARG
[
1
]
=
kGetLastRssi
();
send_buf
.
u8ArgLen
=
2
;
break
;
}
case
(
UART_MSG_WRITE_AGING_TIME_OPCODE
):
//OK
{
uint16_t
agingTime
=
0
;
agingTime
=
UINT16_HL
(
data
.
u8ARG
[
0
],
data
.
u8ARG
[
1
]);
kSetAgingMaxTime
(
agingTime
);
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ARG
[
1
]
=
data
.
u8ARG
[
0
];
send_buf
.
u8ARG
[
2
]
=
data
.
u8ARG
[
1
];
send_buf
.
u8ArgLen
=
3
;
//send_buf.u8Datalen = 3 + 3;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_READ_AGING_TIME_OPCODE
):
//OK
{
uint32_t
agingTime
=
0
;
agingTime
=
kGetAgingMaxTime
();
agingTime
=
agingTime
/
1000
/
60
;
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ARG
[
1
]
=
H1_UINT32
(
agingTime
);
send_buf
.
u8ARG
[
2
]
=
H0_UINT32
(
agingTime
);
send_buf
.
u8ArgLen
=
3
;
//send_buf.u8Datalen = 3 + 3;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_WRITE_INTERPAN_PARA_OPCODE
):
{
uint8_t
enable
=
0
;
uint16_t
panId
=
0
;
uint8_t
channel
=
0
;
int8_t
radioTxPower
=
0
;
enable
=
data
.
u8ARG
[
0
];
channel
=
data
.
u8ARG
[
1
];
panId
=
UINT16_HL
(
data
.
u8ARG
[
2
],
data
.
u8ARG
[
3
]);
radioTxPower
=
data
.
u8ARG
[
4
];
if
(
enable
==
1
)
zb_factoryReset
();
SetInterpanPara
(
channel
,
panId
,
enable
);
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
memcpy
(
&
send_buf
.
u8ARG
[
1
],
&
data
.
u8ARG
[
0
],
data
.
u8ArgLen
);
send_buf
.
u8ArgLen
=
data
.
u8ArgLen
+
1
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
// case (UART_MSG_READ_DEVICE_SNAP_OPCODE):
// {
// uint8_t tmp_value = 0;
// uint8_t send_length = 0;
//
// send_buf.u8ARG[send_length++] = ERR_OK;
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_STACK_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
//
// EmberEUI64 localEui64;
// EmberNodeType nodeTypeResult = 0xFF;
// EmberNetworkParameters networkParams;
// emberAfGetEui64(localEui64);
// SWAP_EUI64((uint8_t *)&localEui64);
//
// if(emberAfNetworkState() == EMBER_JOINED_NETWORK) {
// emberAfGetNetworkParameters(&nodeTypeResult, &networkParams);
// send_buf.u8ARG[send_length++] = HI_UINT16(networkParams.panId);
// send_buf.u8ARG[send_length++] = LO_UINT16(networkParams.panId);
// send_buf.u8ARG[send_length++] = HI_UINT16(emberAfGetNodeId());
// send_buf.u8ARG[send_length++] = LO_UINT16(emberAfGetNodeId());
// memcpy(&send_buf.u8ARG[send_length], localEui64, 8);
// send_length = send_length + 8;
// send_buf.u8ARG[send_length++] = networkParams.radioChannel;
// send_buf.u8ARG[send_length++] = networkParams.radioTxPower;
// } else {
// emberAfGetNetworkParameters(&nodeTypeResult, &networkParams);
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// memcpy(&send_buf.u8ARG[send_length], localEui64, 8);
// send_length = send_length + 8;
// send_buf.u8ARG[send_length++] = 0xff;
// send_buf.u8ARG[send_length++] = 0xff;
// }
// //SV
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_APPLICATION_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
// //HV
// emberAfReadAttribute(1, ZCL_BASIC_CLUSTER_ID, ZCL_HW_VERSION_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
// &tmp_value, 1, NULL);
// send_buf.u8ARG[send_length++] = tmp_value;
// memset(&send_buf.u8ARG[send_length], 0xff, 4);
// send_length = send_length + 4;
// send_buf.u8ARG[send_length++] = emberAfNetworkState();
//
// send_buf.u8ArgLen = send_length;
// //send_buf.u8Datalen = send_length + 3;
// reply_control_field = Z_TO_H_NO_ACK;
//
// break;
// }
//nwk operation request
case
(
UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE
):
//ok
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ARG
[
1
]
=
kNwkGetCurrentStatus
();
send_buf
.
u8ArgLen
=
2
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_JOIN_NWK_REQUEST_OPCODE
):
//ok
{
uint8_t
duration
=
data
.
u8ARG
[
0
];
//unit:S
if
(
zb_isDeviceJoinedNwk
()){
iKonkeAfSelfPrint
(
"#####NWK Is Joined By Usart Duration(0x%2x)
\r\n
"
,
duration
);
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXPECTED
;
}
else
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
kNwkFactoryReset
(
false
);
//steering timeout can be set
iKonkeAfSelfPrint
(
"#####Start Steering By Usart Duration(0x%2x)
\r\n
"
,
duration
);
if
(
duration
>
0
)
kNwkJoiningStart
(
duration
*
1000
,
NULL
);
}
send_buf
.
u8ARG
[
1
]
=
duration
;
send_buf
.
u8ArgLen
=
2
;
//send_buf.u8Datalen = 5;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_LEAVE_NWK_REQUEST_OPCODE
):
//ok
{
if
(
zb_isDeviceJoinedNwk
()){
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
kNwkFactoryReset
(
true
);
}
else
{
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXPECTED
;
}
send_buf
.
u8ArgLen
=
1
;
//send_buf.u8Datalen = 4;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
/*************************************/
case
(
UART_MSG_ENTER_FACTORY_TEST_OPCODE
):
{
uint8_t
tmp_value
=
0
;
if
((
tmp_value
&
0x01
)
==
0x01
)
{
kSetSingleBoardValue
(
0x00
);
}
if
((
tmp_value
&
0x02
)
==
0x02
)
{
kSetFullDeviceValue
(
0x00
);
}
if
((
tmp_value
&
0x04
)
==
0x04
)
{
kSetAgingTestValue
(
0x00
);
}
send_buf
.
u8ArgLen
=
2
;
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
reply_control_field
=
Z_TO_H_NO_ACK
;
send_buf
.
u8ARG
[
1
]
=
kGetFactoryTestValueStatus
();
break
;
}
default:
{
send_buf
.
u8ARG
[
0
]
=
ERR_NOT_EXPECTED
;
send_buf
.
u8ArgLen
=
1
;
//send_buf.u8Datalen = 4;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
}
memcpy
(
pDataOut
,
(
uint8_t
*
)
&
send_buf
,
sizeof
(
DataField_st
));
if
(
send_buf
.
u8ArgLen
==
0
)
{
//if cmd exist, lengtg must > 0
return
KET_ERR_CMD_INVALID
;
}
else
{
if
(
port
==
ECOM_PORT_FCC0
)
{
pDataOut
->
u8Datalen
=
pDataOut
->
u8ArgLen
;
}
else
{
pDataOut
->
u8Datalen
=
pDataOut
->
u8ArgLen
+
3
;
//AA 55 (opcode(2), ch(1))
}
return
KET_OK
;
}
}
uint8_t
kCmdMsgDataSentByPort
(
uint8_t
u8Control_Field
,
DataField_st
data
,
bool
isGetResult
,
ComPortEm
port
)
{
uint8_t
length
=
0
;
UMsgNodeSt
uMsgNode
;
memset
((
uint8_t
*
)
&
uMsgNode
,
0
,
sizeof
(
UMsgNodeSt
));
uMsgNode
.
buffer
[
length
++
]
=
0xAA
;
//msg header
uMsgNode
.
buffer
[
length
++
]
=
0x55
;
//msg header
uMsgNode
.
buffer
[
length
++
]
=
0x00
;
//msg length
uMsgNode
.
buffer
[
length
++
]
=
0x00
;
//msg length
uMsgNode
.
buffer
[
length
++
]
=
u8Control_Field
;
// seq++;
uMsgNode
.
buffer
[
length
++
]
=
(
uint8_t
)
(
data
.
seq
>>
8
);
uMsgNode
.
buffer
[
length
++
]
=
(
uint8_t
)
data
.
seq
;
uMsgNode
.
buffer
[
length
++
]
=
data
.
u8Datalen
;
uMsgNode
.
buffer
[
length
++
]
=
data
.
u8ChannelID
;
uMsgNode
.
buffer
[
length
++
]
=
(
uint8_t
)
(
data
.
u16Opcode
>>
8
);
uMsgNode
.
buffer
[
length
++
]
=
(
uint8_t
)
data
.
u16Opcode
;
memmove
(
&
uMsgNode
.
buffer
[
length
],
data
.
u8ARG
,
data
.
u8Datalen
-
3
);
length
=
length
+
data
.
u8Datalen
-
3
;
uMsgNode
.
buffer
[
2
]
=
(
uint8_t
)
((
length
-
4
)
>>
8
);
uMsgNode
.
buffer
[
3
]
=
(
uint8_t
)
(
length
-
4
);
uint16_t
crc
=
kCmdGetMsgCrc16Value
(
&
uMsgNode
.
buffer
[
4
],
length
-
4
);
uMsgNode
.
buffer
[
length
++
]
=
(
uint8_t
)
(
crc
>>
8
);
uMsgNode
.
buffer
[
length
++
]
=
(
uint8_t
)
(
crc
);
uMsgNode
.
length
=
length
;
// setting for matcher content.
uMsgNode
.
matcher
[
0
]
=
uMsgNode
.
buffer
[
2
];
//seq
uMsgNode
.
matcher
[
1
]
=
uMsgNode
.
buffer
[
3
];
uMsgNode
.
matcher_offset
=
2
;
uMsgNode
.
matcher_n
=
2
;
//zigbee send to host ack
if
(
u8Control_Field
==
Z_TO_H_NO_ACK
)
{
uMsgNode
.
sent_try
=
0
;
}
else
if
(
u8Control_Field
==
Z_TO_H_WITH_ACK
)
{
//zigbee send to host notify or control
uMsgNode
.
sent_try
=
1
;
}
if
(
isGetResult
)
{
uMsgNode
.
ack
=
uMsgNode
.
buffer
;
}
else
{
uMsgNode
.
ack
=
NULL
;
uMsgNode
.
ack_length
=
0
;
}
iKonkeAfSelfPrint
(
"
\r\n
-- kCmdMsgDataSentByPort[%d]:
\r\n
"
,
uMsgNode
.
length
);
iKonkeAfSelfPrintBuffer
(
uMsgNode
.
buffer
,
uMsgNode
.
length
);
if
(
port
==
ECOM_PORT_UART
)
{
return
kUartMsgSent
(
&
uMsgNode
);
}
else
if
(
port
==
ECOM_PORT_INTERPAN
)
{
return
kInterPanSend
(
&
uMsgNode
);
}
return
0
;
}
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-command.h
View file @
682c75ca
#ifndef __IKONKE_COMMAND_H____________________________
#define __IKONKE_COMMAND_H____________________________
#include "ikk-module-def.h"
#include "../driver/ikk-uart.h"
#define CMD_CONTROL_FIELD_HOST_TO_ZIGBEE_NEED_ACK 0x10
#define CMD_CONTROL_FIELD_HOST_TO_ZIGBEE_NO_ACK 0x00
#define CMD_CONTROL_FIELD_ZIGBEE_TO_HOST_NEED_ACK 0x30
#define CMD_CONTROL_FIELD_ZIGBEE_TO_HOST_NO_ACK 0x20
typedef
enum
{
H_TO_Z_WITH_ACK
=
CMD_CONTROL_FIELD_HOST_TO_ZIGBEE_NEED_ACK
,
H_TO_Z_NO_ACK
=
CMD_CONTROL_FIELD_HOST_TO_ZIGBEE_NO_ACK
,
Z_TO_H_WITH_ACK
=
CMD_CONTROL_FIELD_ZIGBEE_TO_HOST_NEED_ACK
,
Z_TO_H_NO_ACK
=
CMD_CONTROL_FIELD_ZIGBEE_TO_HOST_NO_ACK
,
}
CMD_CONTROL_FIELD_E
;
typedef
struct
{
uint16_t
seq
;
uint8_t
u8Datalen
;
uint8_t
u8ChannelID
;
uint16_t
u16Opcode
;
uint8_t
u8ArgLen
;
uint8_t
u8ARG
[
128
];
}
DataField_st
;
typedef
struct
{
uint8_t
u8SOFHeaderBuf
[
2
];
uint16_t
u16DataLength
;
uint8_t
u8ControlFied
;
//uint16_t u16Seq;
DataField_st
stDataField
;
}
MsgFrameworkFormat_st
;
kk_err_t
kCmdGeneralMsgPaser
(
UMsgNodeSt
*
pMsgNode
,
ComPortEm
port
,
DataField_st
*
pDataOut
);
uint16_t
kCmdOpcodeRemap
(
uint16_t
Opcode
,
uint8_t
direction
);
uint16_t
kCmdGetMsgCrc16Value
(
uint8_t
*
msg
,
uint8_t
len
);
uint8_t
kCmdMsgDataSentByPort
(
uint8_t
u8Control_Field
,
DataField_st
data
,
bool
isGetResult
,
ComPortEm
port
);
#endif
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-debug.h
View file @
682c75ca
...
...
@@ -2,7 +2,7 @@
#define __IKONKE_MODULE_DEBUG_H______________________________
#define IKONKE_DEBUG_LOG_ENABLE (
1) // ENABLE
#define IKONKE_DEBUG_LOG_ENABLE (
0) // ENABLE
#define PROMPT_DSR ""
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-factory-test.c
View file @
682c75ca
#include "ikk-factory-test.h"
#include "ikk-debug.h"
#include "ikk-token.h"
#include "
tl_common.h"
#include "
ikk-common-utils.h"
#include "../driver/ikk-button.h"
#define AGING_TEST_15MIN_VALUE 0xA1
#define AGING_TEST_
8HOU_VALUE 0xA2
#define AGING_TEST_
4HOU_VALUE 0xA2
#define AGINE_TEST_DONE_VALUE 0xFA
//已经置老化标志
#define FACTORY_TEST_VALUE 0xF1
//初始值
#define TEST_INIT_VALUE 0xFF
#define SINGLE_BOARD_TEST_DONE_VALUE 0xF1 //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
#define FULL_DEVICE_TEST_DONE_VALUE 0xF2 //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟?
#define FORCE_FACTORY_TEST_VALUE 0xF8 //锟斤拷锟斤拷锟斤拷锟斤拷锟角匡拷锟斤拷顺锟?
static
ev_timer_event_t
*
kFactoryTestEvt
=
NULL
;
s32
kFactoryTestEventHandler
(
void
*
arg
);
...
...
@@ -26,6 +28,8 @@ 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
;
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
}};
...
...
@@ -56,12 +60,97 @@ FactoryTestStatusEnum kGetFactoryTestStatus(void)
return
g_eFactoryTestStatus
;
}
void
kSetAgingMaxTime
(
uint16_t
value
)
{
nv_sts_t
st
=
NV_SUCC
;
uint16_t
temp
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_APP
,
NV_AGING_TEST_TIME
,
sizeof
(
uint16_t
),
(
u8
*
)
&
temp
);
if
(
st
==
NV_SUCC
){
if
(
temp
!=
value
)
{
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_APP
,
NV_AGING_TEST_TIME
,
sizeof
(
uint16_t
),
(
u8
*
)
&
value
);
iKonkeAfSelfPrint
(
"kSetAgingTestTime:st = %d,data = %d
\r\n
"
,
st
,
NV_AGING_TEST_TIME
);
}
}
else
if
(
st
==
NV_ITEM_NOT_FOUND
){
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_APP
,
NV_AGING_TEST_TIME
,
sizeof
(
uint16_t
),
(
u8
*
)
&
value
);
}
}
uint32_t
kGetAgingMaxTime
(
void
)
{
nv_sts_t
st
=
NV_SUCC
;
uint32_t
maxTime
;
uint16_t
value
=
0
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_APP
,
NV_AGING_TEST_TIME
,
sizeof
(
value
),
(
u8
*
)
&
value
);
iKonkeAfSelfPrint
(
"kGetAgingTestTime:st = %d,value = %d
\r\n
"
,
st
,
value
);
if
(
st
!=
NV_SUCC
){
maxTime
=
FACTORY_TEST_4HOU_MS
;
}
else
if
((
value
==
0
)
||
(
value
==
0xffff
))
{
maxTime
=
FACTORY_TEST_4HOU_MS
;
}
else
{
maxTime
=
value
*
60
*
1000
;
}
return
maxTime
;
}
uint8_t
kGetFactoryTestValueStatus
(
void
)
{
uint8_t
status
=
0
;
#if Z30_DEVICE_SINGLE_BOARD_ENABLE
if
(
kGetSingleBoardValue
()
==
FORCE_FACTORY_TEST_VALUE
)
{
status
=
status
|
FT_FORCE_EXIT
;
}
else
if
(
kGetSingleBoardValue
()
!=
SINGLE_BOARD_TEST_DONE_VALUE
)
{
status
=
status
|
FT_SINGLE_BOARD_TEST
;
}
#endif
#if Z30_DEVICE_FULL_DEVICE_ENBALE
if
(
kGetFullDeviceValue
()
==
FORCE_FACTORY_TEST_VALUE
)
{
status
=
status
|
FT_FORCE_EXIT
;
}
else
if
(
kGetFullDeviceValue
()
!=
FULL_DEVICE_TEST_DONE_VALUE
){
status
=
status
|
FT_FULL_DEVICE_TEST
;
}
else
if
(
kGetSingleBoardValue
()
==
SINGLE_BOARD_TEST_DONE_VALUE
){
status
=
status
|
FT_NORMAL_DONE
;
}
#endif
return
status
;
}
nv_sts_t
General_Set_Factory_Test
(
nv_item_t
items
,
uint8_t
value
)
{
nv_sts_t
st
=
NV_SUCC
;
uint8_t
temp
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_APP
,
items
,
sizeof
(
uint8_t
),
(
u8
*
)
&
temp
);
if
(
st
==
NV_SUCC
){
if
(
temp
!=
value
)
{
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_APP
,
items
,
sizeof
(
uint8_t
),
(
u8
*
)
&
value
);
iKonkeAfSelfPrint
(
"kSetSingleBoardValue:st = %d,data = %d
\r\n
"
,
st
,
value
);
}
}
else
if
(
st
==
NV_ITEM_NOT_FOUND
){
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_APP
,
items
,
sizeof
(
uint8_t
),
(
u8
*
)
&
value
);
}
return
st
;
}
uint8_t
General_Get_Factory_Test
(
nv_item_t
items
,
uint8_t
default_value
)
{
nv_sts_t
st
=
NV_SUCC
;
uint8_t
temp
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_APP
,
items
,
sizeof
(
temp
),
(
u8
*
)
&
temp
);
iKonkeAfSelfPrint
(
"kGetSingleBoardValue:st = %d,data = %d
\r\n
"
,
st
,
temp
);
if
(
st
!=
NV_SUCC
){
temp
=
default_value
;
}
return
temp
;
}
void
kFactoryTestBtnActionCallback
(
unsigned
char
button_id
,
BtnActionEnum
action
)
{
if
(
kGetFactoryTestStatus
()
!=
FTS_NORMAL
)
{
uint8_t
u8FactoryTestIndex
=
kGetFactoryTestIndexByID
(
button_id
);
iKonkeAfSelfPrint
(
"######kFactoryTestBtnActionCallback,index(%d) id (%d)action(%d)
\r\n
"
,
u8FactoryTestIndex
,
button_id
,
action
);
if
(
u8FactoryTestIndex
!=
0xFF
){
//add bby maozj 20200828
if
(
action
==
EBA_LONGPRESS
)
g_stFactoryTestControllerList
[
u8FactoryTestIndex
].
eCurrentBtnAction
=
EBA_PRESSED
;
else
...
...
@@ -74,9 +163,224 @@ void kFactoryTestBtnActionCallback(unsigned char button_id, BtnActionEnum actio
iKonkeAfSelfPrint
(
"######33333333333333333 FactoryTest Released
\r\n
"
);
}
}
}
}
kk_err_t
kkFactoryMsgInComingPaser
(
UMsgNodeSt
*
pMsgNode
,
ComPortEm
port
,
DataField_st
*
pDataOut
)
{
//UMsgNodeSt uMsgNode = {0};
uint16_t
length
=
0
;
uint8_t
control_field
=
0
;
DataField_st
data
;
DataField_st
send_buf
;
uint8_t
reply_control_field
=
0
;
if
(
NULL
==
pMsgNode
)
{
return
KET_ERR_INVALID_PARAM
;
}
#if 0 // Just for debug
iKonkeAfSelfPrint("\r\n-- MSG INCOMING[%d]:\r\n", pMsgNode->length);
iKonkeAfSelfPrintBuffer(pMsgNode->buffer, pMsgNode->length, true);
iKonkeAfSelfPrint("\r\n--------------------\r\n");
#endif
// check for parsable packets
if
(
pMsgNode
->
length
<
5
/* Minimum Packet Length */
)
{
iKonkeAfSelfPrint
(
"Err: Unparsable Packets!!
\r\n
"
);
return
KET_ERR_INVALID_PARAM
;
}
//length(1) pid(4) ch(1) opcode(1) arg
if
(
port
==
ECOM_PORT_FCC0
)
{
length
=
pMsgNode
->
length
;
//control_field = pMsgNode->buffer[4];
data
.
seq
=
0x00
;
data
.
u8Datalen
=
pMsgNode
->
buffer
[
0
];
data
.
u8ArgLen
=
data
.
u8Datalen
-
6
;
// fcc0 - id (4) - ch(1) - opcode(1)
data
.
u8ChannelID
=
pMsgNode
->
buffer
[
5
];
data
.
u16Opcode
=
kCmdOpcodeRemap
((
uint16_t
)(
pMsgNode
->
buffer
[
6
]),
0
);
if
(
data
.
u16Opcode
==
0xFFFF
)
{
return
KET_ERR_INVALID_PARAM
;
}
memcpy
(
data
.
u8ARG
,
&
pMsgNode
->
buffer
[
7
],
data
.
u8ArgLen
);
//6 = pid(4) + ch(1) + opcode(1)
send_buf
.
seq
=
data
.
seq
;
send_buf
.
u8ChannelID
=
data
.
u8ChannelID
;
send_buf
.
u16Opcode
=
data
.
u16Opcode
;
}
else
{
length
=
((
uint16_t
)
pMsgNode
->
buffer
[
2
]
<<
8
)
|
(
uint16_t
)(
pMsgNode
->
buffer
[
3
]);
control_field
=
pMsgNode
->
buffer
[
4
];
data
.
seq
=
((
uint16_t
)
pMsgNode
->
buffer
[
5
]
<<
8
)
|
(
uint16_t
)(
pMsgNode
->
buffer
[
6
]);
data
.
u8Datalen
=
pMsgNode
->
buffer
[
7
];
data
.
u8ArgLen
=
data
.
u8Datalen
-
3
;
// aa55 - ch(1) - opcode(2)
data
.
u8ChannelID
=
pMsgNode
->
buffer
[
8
];
data
.
u16Opcode
=
((
uint16_t
)
pMsgNode
->
buffer
[
9
]
<<
8
)
|
(
uint16_t
)(
pMsgNode
->
buffer
[
10
]);
memcpy
(
data
.
u8ARG
,
&
pMsgNode
->
buffer
[
11
],
data
.
u8Datalen
-
3
);
send_buf
.
seq
=
data
.
seq
;
send_buf
.
u8ChannelID
=
data
.
u8ChannelID
;
send_buf
.
u16Opcode
=
data
.
u16Opcode
;
}
send_buf
.
u8Datalen
=
0
;
switch
(
data
.
u16Opcode
)
{
case
(
UART_MSG_QUERY_INFO_OPCODE
):
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ArgLen
=
1
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_QUERY_DEVICE_VERSION_OPCODE
):
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
//wait to do
send_buf
.
u8ARG
[
1
]
=
0x20
;
send_buf
.
u8ARG
[
2
]
=
0x20
;
send_buf
.
u8ARG
[
3
]
=
0XFF
;
send_buf
.
u8ARG
[
4
]
=
0XFF
;
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;;
send_buf
.
u8ArgLen
=
5
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_QUERY_DEVICE_INFO_OPCODE
):
{
addrExt_t
addr
;
flash_read
(
CFG_MAC_ADDRESS
,
8
,(
uint8_t
*
)
addr
);
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
SWAP_EUI64
((
uint8_t
*
)
addr
);
memcpy
(
&
send_buf
.
u8ARG
[
1
],
addr
,
8
);
send_buf
.
u8ArgLen
=
9
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_CONFIG_DEVICE_SLEEP_OPCODE
):
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ArgLen
=
1
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_EXIT_FACTORY_TEST_OPCODE
):
{
uint8_t
token_data
=
0
;
if
(
data
.
u8ARG
[
0
]
&
0x01
)
{
kSetSingleBoardValue
(
SINGLE_BOARD_TEST_DONE_VALUE
);
iKonkeAfSelfPrint
(
"######kGetSingleBoardValue(%x)
\r\n
"
,
token_data
);
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
}
if
(
data
.
u8ARG
[
0
]
&
0x02
)
{
kSetFullDeviceValue
(
FULL_DEVICE_TEST_DONE_VALUE
);
iKonkeAfSelfPrint
(
"######kGetFullBoardValue(%02x)
\r\n
"
,
token_data
);
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
}
if
(
(
data
.
u8ARG
[
0
]
&
0x03
==
0x03
)
||
(
data
.
u8ARG
[
0
]
&
0x04
==
0x04
)
)
{
kSetAgingTestValue
(
AGINE_TEST_DONE_VALUE
);
iKonkeAfSelfPrint
(
"######kGetAgingTestValue(%02x)
\r\n
"
,
token_data
);
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
g_eFactoryTestStatus
=
FTS_AGING_DONE
;
}
send_buf
.
u8ARG
[
1
]
=
data
.
u8ARG
[
0
];
send_buf
.
u8ArgLen
=
2
;
reply_control_field
=
Z_TO_H_NO_ACK
;
break
;
}
case
(
UART_MSG_QUERY_FACTORY_INFO_OPCODE
):
{
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ARG
[
1
]
=
kGetFactoryTestValueStatus
();
send_buf
.
u8ArgLen
=
2
;
reply_control_field
=
Z_TO_H_NO_ACK
;
iKonkeAfSelfPrint
(
"######UART_MSG_QUERY_FACTORY_INFO_OPCODE(%d)
\r\n
"
,
send_buf
.
u8ArgLen
);
break
;
}
case
UART_MSG_QUERY_SWITCH_ONOFF_OPCODE
:
{
extern
uint8_t
Key_Press_Test_Flag
[
5
];
for
(
uint8_t
i
=
0
;
i
<
6
;
i
++
){
if
(
i
<
5
){
send_buf
.
u8ARG
[
i
+
1
]
=
Key_Press_Test_Flag
[
i
];
}
else
{
send_buf
.
u8ARG
[
i
+
1
]
=
0xff
;
}
}
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ArgLen
=
7
;
break
;
}
case
(
UART_MSG_ENTER_FACTORY_TEST_OPCODE
):
{
uint8_t
tmp_value
=
data
.
u8ARG
[
0
];
reply_control_field
=
Z_TO_H_NO_ACK
;
if
((
tmp_value
&
0x01
)
==
0x01
)
{
kSetSingleBoardValue
(
0x00
);
}
if
((
tmp_value
&
0x02
)
==
0x02
)
{
kSetFullDeviceValue
(
0x00
);
}
if
((
tmp_value
&
0x04
)
==
0x04
)
{
kSetAgingTestValue
(
0x00
);
}
send_buf
.
u8ArgLen
=
2
;
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
send_buf
.
u8ARG
[
1
]
=
kGetFactoryTestValueStatus
();
break
;
}
case
UART_MSG_ONOFF_SWITCH_OPCODE
:
{
uint8_t
command
=
data
.
u8ARG
[
0
];
if
(
command
==
1
){
//控制命令
for
(
uint8_t
i
=
0
;
i
<
9
;
i
++
){
if
(
i
<
4
){
if
(
data
.
u8ARG
[
i
+
1
]
==
1
)
kZclOnOffClusterServerOnOffControl
(
i
+
1
,
1
);
else
if
(
data
.
u8ARG
[
i
+
1
]
==
0
)
kZclOnOffClusterServerOnOffControl
(
i
+
1
,
0
);
}
else
{
data
.
u8ARG
[
i
+
1
]
=
0xff
;
}
}
}
send_buf
.
u8ARG
[
0
]
=
ERR_OK
;
memcpy
(
&
send_buf
.
u8ARG
[
1
],
&
data
.
u8ARG
[
1
],
8
);
send_buf
.
u8ArgLen
=
10
;
break
;
}
default:
break
;
}
memcpy
(
pDataOut
,
(
uint8_t
*
)
&
send_buf
,
sizeof
(
DataField_st
));
if
(
send_buf
.
u8ArgLen
==
0
)
{
//if cmd exist, lengtg must > 0
return
KET_ERR_CMD_INVALID
;
}
else
{
if
(
port
==
ECOM_PORT_FCC0
)
{
pDataOut
->
u8Datalen
=
pDataOut
->
u8ArgLen
;
}
else
{
pDataOut
->
u8Datalen
=
pDataOut
->
u8ArgLen
+
3
;
//AA 55 (opcode(2), ch(1))
}
return
KET_OK
;
}
}
void
kFactoryTestInit
(
pFactoryTestPollCallback
callback
,
FactoryTestConfSt
conf_list
[],
uint8_t
btn_num
)
{
#if FACTORY_TEST_ENABLE
...
...
@@ -119,7 +423,7 @@ void kFactoryTestInit(pFactoryTestPollCallback callback, FactoryTestConfSt conf_
s32
kFactoryTestEventHandler
(
void
*
arg
)
{
iKonkeAfSelfPrint
(
"######kFactoryTestEventHandler status(%d)
\r\n
"
,
g_eFactoryTestStatus
);
// iKonkeAfSelfPrint("######kFactoryTestEventHandler status(%d)\r\n", g_eFactoryTestStatus);
g_u32AgingTotalTimeMS
+=
FACTORY_TEST_POLL_TTME_1S
;
...
...
@@ -133,20 +437,20 @@ s32 kFactoryTestEventHandler(void *arg)
case
(
FTS_AGING_15MIN
):
//上电后15分钟时间到,15分钟内可以短按按键和长按,但不能组网
if
(
g_u32AgingTotalTimeMS
>=
FACTORY_TEST_15MIN_MS
){
kSetAgingTestValue
(
AGING_TEST_
8HOU_VALUE
);
g_eFactoryTestStatus
=
FTS_AGING_
8HOU_START
;
kSetAgingTestValue
(
AGING_TEST_
4HOU_VALUE
);
g_eFactoryTestStatus
=
FTS_AGING_
4HOU_START
;
//15分钟后重新开始计时
g_u32AgingTotalTimeMS
=
0
;
g_u32Count
=
FACTORY_TEST_POLL_TIMES
;
//快点处理自定义函数
}
break
;
case
(
FTS_AGING_
8HOU_START
):
case
(
FTS_AGING_
4HOU_START
):
//可以设置所有的LED状态一致,在回调函数实现
g_eFactoryTestStatus
=
FTS_AGING_
8HOU
;
g_eFactoryTestStatus
=
FTS_AGING_
4HOU
;
break
;
case
(
FTS_AGING_
8HOU
):
case
(
FTS_AGING_
4HOU
):
//上电后12小时老化时间到,12小时内不可以短按按键和长按,不能组网
if
(
g_u32AgingTotalTimeMS
>=
FACTORY_TEST_
8HOU_MS
){
if
(
g_u32AgingTotalTimeMS
>=
FACTORY_TEST_
4HOU_MS
){
kSetAgingTestValue
(
AGINE_TEST_DONE_VALUE
);
g_eFactoryTestStatus
=
FTS_AGING_DONE
;
}
...
...
@@ -206,6 +510,14 @@ s32 kFactoryTestEventHandler(void *arg)
//successfully exit aging test
g_eFactoryTestStatus
=
FTS_AGING_FORCE_EXIT
;
kSetAgingTestValue
(
AGINE_TEST_DONE_VALUE
);
#if Z30_DEVICE_SINGLE_BOARD_ENABLE
if
(
kGetSingleBoardValue
()
!=
SINGLE_BOARD_TEST_DONE_VALUE
)
kSetSingleBoardValue
(
FORCE_FACTORY_TEST_VALUE
);
#endif
#if Z30_DEVICE_FULL_DEVICE_ENBALE
if
(
kGetFullDeviceValue
()
!=
FULL_DEVICE_TEST_DONE_VALUE
)
kSetFullDeviceValue
(
FORCE_FACTORY_TEST_VALUE
);
#endif
g_u32Count
=
FACTORY_TEST_POLL_TIMES
;
//快点执行自定义函数
//防止老化状态被重置
g_stFactoryTestControllerList
[
index
].
u32FirstBtnLongPressedCountDown
=
0
;
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-factory-test.h
View file @
682c75ca
#ifndef __IKONKE_MODULE_FACTORY_TEST_H_______________________
#define __IKONKE_MODULE_FACTORY_TEST_H_______________________
#include "ikk-module-def.h"
#include "ikk-debug.h"
#include "../driver/ikk-uart.h"
#include "ikk-command.h"
// 定义是否需要产测
#define FACTORY_TEST_ENABLE true
//使能debug快速测试老化
...
...
@@ -26,19 +26,21 @@
#define FACTORY_TEST_POLL_TIMES (FACTORY_TEST_POLL_TTME_10S / FACTORY_TEST_POLL_TTME_1S)
#if AGING_DEBUG
#define FACTORY_TEST_15MIN_MS (2 * 60 * 1000)
#define FACTORY_TEST_
8HOU_MS (5 * 1 * 60 * 1000)
#define FACTORY_TEST_
4HOU_MS (5 * 1 * 60 * 1000)
#else
#define FACTORY_TEST_15MIN_MS (15 * 60 * 1000)
#define FACTORY_TEST_
8HOU_MS (8 * 60 * 60 * 1000)
#define FACTORY_TEST_
4HOU_MS (4 * 60 * 60 * 1000)
#endif
#define FACTORY_TEST_1S (1000)
//初始值
#define TEST_INIT_VALUE 0xFF
typedef
enum
{
FTS_NORMAL
=
0
,
FTS_START
,
FTS_AGING_15MIN
,
FTS_AGING_
8HOU_START
,
FTS_AGING_
8HOU
,
FTS_AGING_
4HOU_START
,
FTS_AGING_
4HOU
,
FTS_AGING_DONE
,
FTS_AGING_FORCE_EXIT
,
FTS_AGING_WAITING
,
...
...
@@ -55,11 +57,25 @@ typedef struct{
//10S轮询操作函数,可根据不同长供电产品自定义实现
typedef
void
(
*
pFactoryTestPollCallback
)(
FactoryTestStatusEnum
status
);
nv_sts_t
General_Set_Factory_Test
(
nv_item_t
items
,
uint8_t
value
);
uint8_t
General_Get_Factory_Test
(
nv_item_t
items
,
uint8_t
default_value
);
#define kSetSingleBoardValue(value) General_Set_Factory_Test(NV_SINGLE_BOARD_TEST_FLG,value)
#define kSetFullDeviceValue(value) General_Set_Factory_Test(NV_FULL_DEVICE_TEST_FLG,value)
#define kSetAgingTestValue(value) General_Set_Factory_Test(NV_AGE_TEST_STEP,value)
#define kGetSingleBoardValue() General_Get_Factory_Test(NV_SINGLE_BOARD_TEST_FLG,TEST_INIT_VALUE)
#define kGetFullDeviceValue() General_Get_Factory_Test(NV_FULL_DEVICE_TEST_FLG,TEST_INIT_VALUE)
#define kGetAgingTestValue() General_Get_Factory_Test(NV_AGE_TEST_STEP,0)
uint8_t
kGetFactoryTestValueStatus
(
void
);
uint32_t
kGetAgingMaxTime
(
void
);
void
kSetAgingMaxTime
(
uint16_t
value
);
//获取当前产测状态
FactoryTestStatusEnum
kGetFactoryTestStatus
(
void
);
//void kGetFactoryTestBtnAction(uint8_t btn_id, BtnActionEnum action);
void
kFactoryTestInit
(
pFactoryTestPollCallback
callback
,
FactoryTestConfSt
conf_list
[],
uint8_t
btn_num
);
kk_err_t
kkFactoryMsgInComingPaser
(
UMsgNodeSt
*
pMsgNode
,
ComPortEm
port
,
DataField_st
*
pDataOut
);
#endif
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-module-def.h
View file @
682c75ca
...
...
@@ -11,7 +11,12 @@
#define Z30_DEVICE_DTYPE (Z30_DEVICE_ZR)
#define Z30_DEVICE_OTA_ENABLE false
// 定义是否需要老化,目前一般路由设备需要
#define Z30_DEVICE_AGING_ENABLE true
//单板测试,目前一般是休眠设备需要
#define Z30_DEVICE_SINGLE_BOARD_ENABLE true
//整机测试, 目前一般是休眠设备需要
#define Z30_DEVICE_FULL_DEVICE_ENBALE true
// Real time IO operation, no optimization!!!
#define _IO volatile
...
...
@@ -39,6 +44,92 @@
#define PORT_UNKNOW 0xFF
#define PIN_UNKNOW (uint32_t)0XFF
//串口通信协议OPCODE
#define UART_MSG_QUERY_INFO_OPCODE 0x0000
#define UART_MSG_WRITE_INSTALL_CODE_OPCODE 0x0001
#define UART_MSG_READ_INSTALL_CODE_OPCODE 0x0002
#define UART_MSG_WRITE_CMEI_CODE_OPCODE 0x0003
#define UART_MSG_READ_CMEI_CODE_OPCODE 0x0004
#define UART_MSG_WRITE_ISN_CODE_OPCODE 0x0005
#define UART_MSG_READ_ISN_CODE_OPCODE 0x0006
#define UART_MSG_WRITE_MAC_CODE_OPCODE 0x0007
#define UART_MSG_READ_MAC_CODE_OPCODE 0x0008
#define UART_MSG_WRITE_MOUDLE_ID_OPCODE 0x0009
#define UART_MSG_READ_MOUDLE_ID_OPCODE 0x000A
#define UART_MSG_READ_DEV_RSSI_OPCODE 0x000B
#define UART_MSG_WRITE_AGING_TIME_OPCODE 0x000C
#define UART_MSG_READ_AGING_TIME_OPCODE 0x000D
#define UART_MSG_WRITE_INTERPAN_PARA_OPCODE 0x000E
#define UART_MSG_READ_INTERPAN_PARA_OPCODE 0x000F
#define UART_MSG_READ_DEVICE_SNAP_OPCODE 0x0010
#define UART_MSG_JOIN_NWK_REQUEST_OPCODE 0x0100
#define UART_MSG_LEAVE_NWK_REQUEST_OPCODE 0x0101
#define UART_MSG_QUERY_NWK_STATUS_REQUEST_OPCODE 0x0102
#define UART_MSG_NWK_STATUS_NOTIFY_OPCODE 0x0103
#define UART_MSG_READ_ATTRIBUTE_REQUEST_OPCODE 0x0104
#define UART_MSG_WRITE_ATTRIBUTE_REQUEST_OPCODE 0x0105
#define UART_MSG_ZCL_COMMAND_REQUEST_OPCODE 0x0106
#define UART_MSG_BIND_REQUEST_OPCODE 0x0110
#define UART_MSG_GATEWAY_NWK_CHANNEL_ONOFF_OPCODE 0x00FC
#define UART_MSG_PRIVATE_PROTOCOL_CONTROL_CHILD_DEVICE_START_OPCODE 0xF000
#define UART_MSG_PRIVATE_PROTOCOL_CONTROL_CHILD_DEVICE_END_OPCODE 0xF0FF
#define UART_MSG_TTS_OPCODE 0xF100
//factory test message opcode
#define UART_MSG_QUERY_DEVICE_VERSION_OPCODE 0xED00
#define UART_MSG_QUERY_DEVICE_INFO_OPCODE 0xED01
#define UART_MSG_CONFIG_DEVICE_SLEEP_OPCODE 0xED02
#define UART_MSG_EXIT_FACTORY_TEST_OPCODE 0xED04
#define UART_MSG_QUERY_FACTORY_INFO_OPCODE 0xED05
#define UART_MSG_QUERY_SWITCH_ONOFF_OPCODE 0xED06
#define UART_MSG_ENTER_FACTORY_TEST_OPCODE 0xED14
#define UART_MSG_ONOFF_SWITCH_OPCODE 0xED15
#define UART_MSG_GPIO_TEST_OPCODE 0xED10
#define UART_MSG_READ_RSSI_REQUEST_OPCODE 0xED12
//offline voice panel
#define UART_MSG_HOST_SNAP_REQUEST_OPCODE 0x1000
#define UART_MSG_CTRL_HOST_ONOFF_OPCODE 0x1001 //zigbee module control panel
#define UART_MSG_HOST_ONOFF_NOTIFY_OPCODE 0x1002 //panel onoff status changed notify zigbee
#define UART_MSG_HOST_TRIGGER_SCENE_NOTIFY_OPCODE 0x1003 //pannel recall scene notify zigbees
#define UART_MSG_KEY_LIGHT_SCENE_TRANSFORM_OPCODE 0x1004
#define UART_MSG_TIME_SET_OPCODE 0x1005
#define UART_MSG_TIME_GET_OPCODE 0x1006
#define UART_MSG_DEVICE_OPERATOR_OPCODE 0x1007
#define UART_MSG_FILE_UPDATE_NOTIFY_OPCODE 0x1008
#define UART_MSG_FILE_DATA_REQUEST_OPCODE 0x1009
#define UART_MSG_FILE_UPDATE_STATUS_NOTIFY 0x100A
//bangde human body sensor
#define UART_MSG_BODY_TRIGGER_START_REPORT_OPCODE 0xED03
//bangde sos button
#define UART_MSG_SOS_REPORT_OPCODE 0xED03
//bangde scene button
#define UART_MSG_BUTTON_SCENE_REPORT_OPCODE 0xED03
//bangde environment sensor
#define UART_MSG_QUERY_TEMP_HUMI_INFO_OPCODE 0xED03
//bangde door sensor
#define UART_MSG_BUTTON_ONOFF_REPORT_OPCODE 0xED03
//offline voice panel
//define opcode for private cluster
#define NWK_CHANNEL_ONOFF (uint8_t)(UART_MSG_GATEWAY_NWK_CHANNEL_ONOFF_OPCODE)
#define SNAP_INFO (uint8_t)(UART_MSG_HOST_SNAP_REQUEST_OPCODE)
//#define ONOFF_CONTROL (uint8_t)(UART_MSG_CTRL_HOST_ONOFF_OPCODE)
#define SCENE_TRGGER (uint8_t)(UART_MSG_HOST_TRIGGER_SCENE_NOTIFY_OPCODE)
#define KEY_FUNCTION (uint8_t)(UART_MSG_KEY_LIGHT_SCENE_TRANSFORM_OPCODE)
#define TIME_SET (uint8_t)(UART_MSG_TIME_SET_OPCODE)
#define TIME_GET (uint8_t)(UART_MSG_TIME_GET_OPCODE)
#define DEVICE_OPT (uint8_t)(UART_MSG_DEVICE_OPERATOR_OPCODE)
#define FILE_UPDATE_NOTIFY (uint8_t)(UART_MSG_FILE_UPDATE_NOTIFY_OPCODE)
#define FILE_DATA_REQUEST (uint8_t)(UART_MSG_FILE_DATA_REQUEST_OPCODE )
#define FILE_STATUS_STATUS (uint8_t)(UART_MSG_FILE_UPDATE_STATUS_NOTIFY)
typedef
enum
kk_error_type
{
KET_OK
=
0
,
// 正常(成功)
...
...
@@ -73,11 +164,23 @@ typedef enum kk_error_type {
KET_ERR_OPRATE_IN_PROGRESS
=
-
908
,
// 操作进行中
KET_ERR_UNKNOW
=
-
999
,
// 位置错误
}
kk_err_t
;
typedef
enum
{
ERR_OK
=
0x00
,
ERR_EXIST
=
0x01
,
ERR_FORMAT
=
0x02
,
ERR_NOT_EXPECTED
=
0x03
,
ERR_WRITE_FAILED
=
0x04
,
ERR_READ_WRITE_TIMEOUT
=
0x05
,
ERR_NOT_EXIST
=
0x06
,
ERR_UNKNOW
=
0xFF
,
}
ERR_RET_E
;
typedef
enum
{
Z3D_COORDINATOR
=
0
,
Z3D_ROUTER
,
Z3D_ENDDEVICE
}
Z3DevTypeEm
;
typedef
void
(
*
pFUNC_VOID
)(
void
*
);
// 操作
typedef
enum
{
ECOM_PORT_UART
=
0
,
ECOM_PORT_RTT
,
ECOM_PORT_ZIGBEE
,
ECOM_PORT_INTERPAN
,
ECOM_PORT_FCC0
}
ComPortEm
;
typedef
struct
tag_common_opt_callback_st
{
pFUNC_VOID
pfunc
;
void
*
param
;
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-network.c
View file @
682c75ca
...
...
@@ -5,15 +5,19 @@
#include "ikk-token.h"
#include "tl_common.h"
#include "ikk-cluster.h"
#include "ikk-interpan.h"
#include "ikk-factory-test.h"
#include "../../../../zigbee/aps/aps_api.h"
#include "../../../../zigbee/common/includes/zb_common.h"
/**********************************************************************
* INCLUDES
*/
#define DELAY_RESTORE_NWK_STEERING_TIME_MS (
10 * 1000)
#define DELAY_RESTORE_NWK_STEERING_TIME_MS (
6 * 1000)
#define DELAY_NWK_DETECT_POWER_ON_TIME_MS (3 * 1000)
#define LED_SLOW_BLINK_CONTINUE_TIME_MS (60 * 1000)
#define LED_FAST_BLINK_CONTINUE_TIME_MS (5 * 1000)
//global value
addrExt_t
g_Eui64GatewayAddr
=
{
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
};
...
...
@@ -30,6 +34,8 @@ static uint32_t g_u32NwkDetectCountDownCounter = 0;
static
uint32_t
g_u32NwkJoiningCountdownCounter
=
0
;
static
bool
g_KeyPressCauasLeave
=
false
;
// copy current network status.
static
NwkStatusEnum
g_eCurrentNetworkStatus
=
ENS_UNKNOW
;
//add by maozj 20200225
...
...
@@ -378,7 +384,7 @@ void kNwkFactoryReset(bool is_nwk_indicator)
memset
(
g_Eui64GatewayAddr
,
0xFF
,
sizeof
(
g_Eui64GatewayAddr
));
Gateway_IEEE_Addr_Save
(
g_Eui64GatewayAddr
);
Update_Local_Attribute_Info
();
// //add by maozj 20200320
//#if Z30_DEVICE_OTA_ENABLE
// kSetOTAStatus(OTA_NORMAL);
...
...
@@ -395,23 +401,24 @@ void kNwkFactoryReset(bool is_nwk_indicator)
//led can blink when network leaved
if
(
is_nwk_indicator
==
true
){
zb_factoryReset
();
kNwkNetworkStatusNotifyCall
(
ENS_LEAVED
);
g_KeyPressCauasLeave
=
true
;
//add by maozj 20200407 for reset count down after network leaved
g_u32NwkExitCountDownCounter
=
MS2COUNT
(
5
*
1000
);
g_u32NwkExitCountDownCounter
=
MS2COUNT
(
LED_FAST_BLINK_CONTINUE_TIME_MS
);
kNwkNetworkStatusNotifyCall
(
ENS_LEAVED
);
Update_Local_Attribute_Info
();
}
Set_Nwk_Steering_Status
(
NWK_STEERING_STATUS_FAILED
);
// kNwkScheduleTaskStop(SCHEDULE_ALLOPT_ID);
//
// //add by maozj 20191213 need identify whether gateway is made by konke
// uint8_t isKonkeGateway = 0;
// halCommonSetToken(TOKEN_IS_KONKE_GATEWAY, &isKonkeGateway);
iKonkeAfSelfPrint
(
"kNwkFactoryReset
\r\n
"
);
}
void
NetworkLeaveHandler
(
nlme_leave_cnf_t
*
pLeaveCnf
)
{
if
(
g_KeyPressCauasLeave
)
{
g_KeyPressCauasLeave
=
false
;
return
;
}
iKonkeAfSelfPrint
(
"Leave Handler,Nwk State = %d
\r\n
"
,
kNwkGetCurrentStatus
());
if
((
pLeaveCnf
->
status
==
0
)
&&
(
kNwkGetCurrentStatus
()
!=
ENS_JOINING
))
{
//如果正处于离网中状态,则不执行以下函数
...
...
@@ -424,8 +431,8 @@ void NetworkLeaveHandler(nlme_leave_cnf_t *pLeaveCnf)
Gateway_IEEE_Addr_Save
(
g_Eui64GatewayAddr
);
kNwkNetworkStatusNotifyCall
(
ENS_LEAVED
);
//add by maozj 20200407 for reset count down after network leaved
g_u32NwkExitCountDownCounter
=
MS2COUNT
(
5
*
1000
);
// //add by maozj 20200407 for reset count down after network leaved
//g_u32NwkExitCountDownCounter = MS2COUNT(5*1000);
}
}
}
...
...
@@ -466,12 +473,11 @@ static ev_timer_event_t *kUserScheduleTaskEvt = NULL;
extern
s32
kUserScheduleTaskHandler
(
void
*
arg
);
kk_err_t
kNwkScheduleTaskRegister
(
uint32_t
TimeOut
)
{
kk_err_t
err
=
KET_FAILED
;
if
(
!
ev_timer_exist
(
kUserScheduleTaskEvt
))
{
kUserScheduleTaskEvt
=
TL_ZB_TIMER_SCHEDULE
(
kUserScheduleTaskHandler
,
NULL
,
TimeOut
);
err
=
KET_OK
;
if
(
kUserScheduleTaskEvt
){
TL_ZB_TIMER_CANCEL
(
&
kUserScheduleTaskEvt
);
}
return
err
;
kUserScheduleTaskEvt
=
TL_ZB_TIMER_SCHEDULE
(
kUserScheduleTaskHandler
,
NULL
,
TimeOut
);
return
KET_OK
;
}
...
...
@@ -479,8 +485,16 @@ void kNwkJoiningStart(uint32_t u32JoiningDuration, pJoinCompleteCallback callbac
{
if
(
u32JoiningDuration
>
0
)
{
#if Z30_DEVICE_AGING_ENABLE
if
(
kGetFactoryTestStatus
()
!=
FTS_NORMAL
/*&& kGetFactoryTestStatus() != FTS_AGING_15MIN*/
){
return
;
}
#endif
if
(
!
zb_isDeviceJoinedNwk
())
{
//disable interpan
kInterpanDisable
();
iKonkeAfSelfPrint
(
"#####Set Steering Counter
\r\n
"
);
g_u32NwkJoiningCountdownCounter
=
MS2COUNT
(
u32JoiningDuration
);
g_pJoinCompleteCallback
=
callback
;
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-opt-tunnel.c
View file @
682c75ca
...
...
@@ -4,8 +4,8 @@
#include "ikk-opt-tunnel.h"
#include "ikk-debug.h"
#include "ikk-config.h"
#include "ikk-token.h"
#include "../../../../zigbee/zcl/zcl_include.h"
// FCC0-0000
#pragma pack(1)
typedef
struct
tag_private_clsFCC0_attr0000_frame_st
{
...
...
@@ -24,7 +24,7 @@ uint8_t g_tmp_buffer[OPTTUNNEL_CHUNK_MAXLEN+1] = { 0 }, g_tmp_length = 0;
// private protocol optdata message incoming process callback
pFUNC_OPTDATA_MESSAGE_CALLBACK
g_pOptDataIncomingMessageCallback
=
NULL
;
extern
bool
Get_Model_ID
(
uint8_t
*
ModeID
);
extern
_CODE_ZCL_
zclReadCmd_t
*
zcl_parseInReadCmd
(
zclIncoming_t
*
pCmd
);
extern
_CODE_ZCL_
status_t
zcl_readRsp
(
u8
srcEp
,
epInfo_t
*
pDstEpInfo
,
u16
clusterId
,
u16
manuCode
,
u8
disableDefaultRsp
,
u8
direction
,
u8
seqNo
,
zclReadRspCmd_t
*
readRspCmd
);
//_CODE_ZCL_ static status_t zcl_Private_cmdHandler(zclIncoming_t *pInMsg);
...
...
@@ -76,36 +76,77 @@ extern _CODE_ZCL_ status_t zcl_readRsp(u8 srcEp, epInfo_t *pDstEpInfo, u16 clust
// }
//}
//
///*********************************************************************
// * @fn private_fcc0Cb
// *
// * @brief Handler for ZCL FCC0 command. This function will set attribute first.
// *
// * @param pAddrInfo
// * @param cmdId - onoff cluster command id
// * @param cmdPayload
// *
// * @return status_t
// */
//status_t private_fcc0Cb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
//{
// zcl_privateAttr_t *pFcc0_data = zcl_privateAttrGet();
// iKonkeAfSelfPrint("#############private_fcc0Cb ,command id =%x!!!!!!!\r\n",cmdId);
// if(pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT){
// switch(cmdId){
// case ZCL_CMD_ONOFF_ON:
// case ZCL_CMD_ONOFF_OFF:
// case ZCL_CMD_ONOFF_TOGGLE:
// //sampleLight_onoff(cmdId);
// break;
// default:
// break;
// }
// }
//
// return ZCL_STA_SUCCESS;
//}
uint8_t
kOptTunnelChunkRead
(
uint8_t
endpoint
,
uint16_t
clusterId
,
uint16_t
attributeId
,
uint16_t
manufacturerCode
,
uint8_t
*
buffer
,
uint8_t
*
length_out
)
{
iKonkeAfSelfPrint
(
"&&&&&&&&&&&&&Token Read cluster(%2X), attr(%2X)
\r\n
"
,
clusterId
,
attributeId
);
uint8_t
length
=
0
;
if
(
buffer
==
NULL
){
iKonkeAfSelfPrint
(
"Err: Buffer is null(%d)!!
\r\n
"
);
return
0xff
;
}
if
(
clusterId
==
PRIV_CLUSTER_FCC0
)
{
switch
(
attributeId
)
{
case
(
ZCL_CMEI_ATTRIBUTE_ID
):
{
uint8_t
*
data
=
CMEI_TOKEN_GET
();
length
=
data
[
0
];
memcpy
(
buffer
,
data
,
length
+
1
);
break
;
}
case
(
ZCL_ISN_ATTRIBUTE_ID
):
{
uint8_t
*
data
=
ISN_TOKEN_GET
();
length
=
data
[
0
];
memcpy
(
buffer
,
data
,
length
+
1
);
break
;
}
case
(
ZCL_InstallCode_ATTRIBUTE_ID
):
{
length
=
16
;
buffer
[
0
]
=
length
;
memcpy
(
&
buffer
[
1
],
INSTALL_CODE_TOKEN_GET
(),
length
);
break
;
}
default:
return
0xfe
;
}
}
if
(
buffer
[
0
]
<=
OPTTUNNEL_CHUNK_MAXLEN
){
*
length_out
=
buffer
[
0
];
}
else
{
*
length_out
=
0
;
}
return
0
;
}
/* DESP: Private clsuter attribute read interface, for chunk data.
* Auth: dingmz_frc.20190703.
* */
kk_err_t
kOptTunnelAttrChunkLocalRead
(
uint16_t
attribute_id
,
unsigned
char
*
chunk_buffer
,
unsigned
char
*
length_in_out
)
{
if
(
NULL
==
chunk_buffer
||
NULL
==
length_in_out
)
{
return
KET_ERR_INVALID_POINTER
;
}
uint8_t
status
=
0
;
kk_err_t
err
=
KET_OK
;
status
=
kOptTunnelChunkRead
(
1
,
PRIV_CLUSTER_FCC0
,
attribute_id
,
0x1268
,
chunk_buffer
,
length_in_out
);
if
(
status
==
0
)
{
*
length_in_out
=
chunk_buffer
[
0
]
+
1
;
}
else
{
iKonkeAfSelfPrint
(
"Err: Chunk read err(%d)!!
\r\n
"
,
status
);
*
length_in_out
=
0
;
err
=
KET_ERR_UNKNOW
;
}
return
err
;
}
status_t
kOptTunnelMessageReadResponse
(
zclIncoming_t
*
pInHdlrMsg
,
uint8_t
*
pData
)
{
u8
status
=
ZCL_STA_SUCCESS
;
...
...
@@ -285,15 +326,15 @@ kk_err_t kOptTunnelMessageIncoming(OptMethodEm method,zclIncoming_t *pCmd)
* Auth: dingmz_frc.20191113.
* */
extern
status_t
General_Report
(
uint8_t
src_ep
,
uint8_t
des_ep
,
uint16_t
cluster
,
uint16_t
Attribute
,
uint8_t
Data_Type
,
uint8_t
*
value
);
static
status_t
kOptTunnel
OODReport
(
uint16_t
attribute_id
,
uint8_t
channel
,
uint8_t
opcode
,
uint8_t
*
arg
,
uint8_t
length
)
static
status_t
kOptTunnel
CommonReportSend
(
uint16_t
attribute_id
,
uint8_t
*
arg
,
uint8_t
length
)
{
uint8_t
temp_buffer
[
64
]
=
{
0
};
if
(
length
<
64
)
if
(
arg
&&
length
>
0
)
memmove
(
temp_buffer
+
1
,
arg
,
length
);
temp_buffer
[
0
]
=
length
;
memmove
(
g_tmp_buffer
,
temp_buffer
,
length
+
1
);
return
General_Report
(
channel
,
1
,
PRIV_CLUSTER_FCC0
,
attribute_id
,
ZCL_DATA_TYPE_CHAR_STR
,
g_tmp_buffer
);
return
General_Report
(
1
,
1
,
PRIV_CLUSTER_FCC0
,
attribute_id
,
ZCL_DATA_TYPE_CHAR_STR
,
g_tmp_buffer
);
}
/* DESP: Private protocol common report interface.
* Auth: dingmz_frc.20191113.
...
...
@@ -305,18 +346,22 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
}
kk_err_t
err
=
KET_OK
;
uint8_t
bufCount
=
0
;
switch
(
attribute_id
)
{
case
(
ECA_OPTDATA
):
{
uint32_t
modeid
=
(
uint32_t
)
MODEL_ID
;
iKonkeAfSelfPrint
(
"#######kOptTunnelCommonReport OPTDATA
\r\n
"
);
g_tmp_buffer
[
1
]
=
modeid
>>
24
;
g_tmp_buffer
[
2
]
=
modeid
>>
16
;
g_tmp_buffer
[
3
]
=
modeid
>>
8
;
g_tmp_buffer
[
4
]
=
modeid
;
uint8_t
modeid
[
8
]
=
{
0
};
if
(
Get_Model_ID
(
modeid
))
{
g_tmp_buffer
[
bufCount
++
]
=
0
;
g_tmp_buffer
[
bufCount
++
]
=
modeid
[
4
];
g_tmp_buffer
[
bufCount
++
]
=
modeid
[
5
];
g_tmp_buffer
[
bufCount
++
]
=
modeid
[
6
];
g_tmp_buffer
[
bufCount
++
]
=
modeid
[
7
];
g_tmp_buffer
[
5
]
=
0x00
;
//channel
g_tmp_buffer
[
6
]
=
0x00
;
//opcode
}
if
(
g_pOptDataIncomingMessageCallback
)
{
g_tmp_length
=
0
;
g_tmp_buffer
[
7
]
=
0x00
;
//add by maozj 20200511
...
...
@@ -328,6 +373,34 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
}
break
;
}
case
(
ECA_ASSOCIATED_AOUNCE
):
{
addrExt_t
u64LocalEui64
=
{
0
};
uint16_t
NodeID
=
zb_getLocalShortAddr
();
uint16_t
index
;
tl_zbExtAddrByShortAddr
(
NodeID
,
u64LocalEui64
,
&
index
);
g_tmp_buffer
[
0
]
=
(
NodeID
>>
8
)
&
0xff
;
g_tmp_buffer
[
1
]
=
(
NodeID
>>
0
)
&
0xff
;
SWAP_EUI64
(
u64LocalEui64
);
memcpy
(
g_tmp_buffer
+
2
,
u64LocalEui64
,
8
);
g_tmp_length
=
10
;
break
;
}
case
(
ECA_CMEI
):
case
(
ECA_ISN
):
{
g_tmp_length
=
OPTTUNNEL_CHUNK_MAXLEN
;
kOptTunnelAttrChunkLocalRead
(
attribute_id
,
g_tmp_buffer
,
&
g_tmp_length
);
iKonkeAfSelfPrint
(
"####Report CHUNK Read length(0x%x)
\r\n
"
,
g_tmp_length
);
break
;
}
case
(
ECA_INSTALL_CODE
):
g_tmp_length
=
OPTTUNNEL_CHUNK_MAXLEN
;
kOptTunnelAttrChunkLocalRead
(
ZCL_InstallCode_ATTRIBUTE_ID
,
g_tmp_buffer
,
&
g_tmp_length
);
break
;
default:
{
err
=
KET_ERR_OPRATE_ILLEGAL
;
...
...
@@ -335,7 +408,7 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
}
}
if
(
err
==
KET_OK
&&
g_tmp_length
>
1
)
{
if
(
kOptTunnel
OODReport
(
attribute_id
,
g_tmp_buffer
[
5
],
g_tmp_buffer
[
6
],
g_tmp_buffer
,
g_tmp_buffer
[
0
]
+
1
)
==
ZCL_STA_SUCCESS
)
if
(
kOptTunnel
CommonReportSend
(
attribute_id
,
g_tmp_buffer
,
g_tmp_buffer
[
0
]
+
1
)
==
ZCL_STA_SUCCESS
)
err
=
KET_OK
;
else
err
=
KET_FAILED
;
...
...
@@ -343,11 +416,38 @@ kk_err_t kOptTunnelCommonReport(uint16_t attribute_id )
return
err
;
}
/* DESP: Private protocol message(command) reporting interface
* Auth: dingmz_frc.20191113.
* */
kk_err_t
kOptTunnelOODReport
(
uint8_t
channel
,
uint8_t
opcode
,
uint8_t
*
arg
,
uint8_t
length
)
{
uint8_t
bufCount
=
0
;
uint8_t
modeid
[
8
]
=
{
0
};
if
(
Get_Model_ID
(
modeid
))
{
g_tmp_buffer
[
bufCount
++
]
=
0
;
// totle length
g_tmp_buffer
[
bufCount
++
]
=
modeid
[
4
];
g_tmp_buffer
[
bufCount
++
]
=
modeid
[
5
];
g_tmp_buffer
[
bufCount
++
]
=
modeid
[
6
];
g_tmp_buffer
[
bufCount
++
]
=
modeid
[
7
];
g_tmp_buffer
[
bufCount
++
]
=
channel
;
//channel
g_tmp_buffer
[
bufCount
++
]
=
opcode
;
//opcode
}
if
(
arg
&&
length
>
0
)
{
memcpy
(
g_tmp_buffer
+
bufCount
,
arg
,
length
);
bufCount
+=
length
;
}
g_tmp_buffer
[
0
]
=
bufCount
-
1
;
return
kOptTunnelCommonReportSend
(
ECA_OPTDATA
,
g_tmp_buffer
,
bufCount
);
}
kk_err_t
kOptTunnelModuleInit
(
pFUNC_OPTDATA_MESSAGE_CALLBACK
pOptdataIncomingCallback
)
{
g_pOptDataIncomingMessageCallback
=
pOptdataIncomingCallback
;
return
KET_OK
;
}
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-opt-tunnel.h
View file @
682c75ca
...
...
@@ -10,6 +10,18 @@
#define PRIV_CLUSTER_FCC0 0XFCC0
// Server attributes
#define ZCL_OPT_DATA_ATTRIBUTE_ID 0x0000 // Ver.: always
#define ZCL_TTS_ATTRIBUTE_ID 0x0001 // Ver.: always
#define ZCL_MTO_RR_RspRandom_ATTRIBUTE_ID 0x0002 // Ver.: always
#define ZCL_AssociatedAnnounce_ATTRIBUTE_ID 0x0003 // Ver.: always
#define ZCL_CMEI_ATTRIBUTE_ID 0x0010 // Ver.: always
#define ZCL_ISN_ATTRIBUTE_ID 0x0011 // Ver.: always
#define ZCL_InstallCode_ATTRIBUTE_ID 0x0012 // Ver.: always
#define ZCL_CHUNK_N1_ATTRIBUTE_ID 0x0013 // Ver.: always
#define OPTTUNNEL_OPTDATA_ID 0x0000 // FCC0 Cluster Attribute 0x0000
#define OPTTUNNEL_OPTDATA_MAXLEN 128
...
...
@@ -51,10 +63,6 @@ typedef kk_err_t (*pFUNC_OPTDATA_MESSAGE_CALLBACK)(uint8_t channel, uint8_t opco
void
Set2NwkJoiningCountdownCounter
(
u32
time_ms
);
/* DESP: Private protocol common report interface.
* Auth: mengmengli_frc.20210527.
* */
kk_err_t
kOptTunnelCommonReport
(
uint16_t
attribute_id
);
/* DESP: private clsuter protocol module init interface.
...
...
@@ -66,14 +74,7 @@ kk_err_t kOptTunnelModuleInit(pFUNC_OPTDATA_MESSAGE_CALLBACK pOptdataIncomingCal
kk_err_t
kOptTunnelOODReport
(
uint8_t
channel
,
uint8_t
opcode
,
uint8_t
*
arg
,
uint8_t
length
);
...
...
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-tick-handler.c
View file @
682c75ca
#if (__PROJECT_TL_DIMMABLE_LIGHT__)
/**********************************************************************
* INCLUDES
*/
...
...
@@ -17,8 +15,10 @@ extern void kBtnModuleActionDetectCallback(void );
extern
void
kLedModuleActionDetectCallback
(
void
);
//extern bool kLedModuleActionIsGoing(void );
extern
void
kNwkModuleActionDetectCallback
(
void
);
//attribute change check callback
extern
void
kRelayModuleActionDetectCallback
(
uint8_t
poll_time
);
//attribute change check callback
extern
void
AttributeValueCheckCallback
(
void
);
static
s32
kTickEventHandler
(
void
*
arg
)
{
...
...
@@ -26,6 +26,7 @@ static s32 kTickEventHandler(void *arg)
kBtnModuleActionDetectCallback
();
kNwkModuleActionDetectCallback
();
kRelayModuleActionDetectCallback
(
TICK_LOOP_NMS
);
AttributeValueCheckCallback
();
return
0
;
}
...
...
@@ -52,5 +53,5 @@ void kTickRunnningTrigger(void )
}
#endif
/* __PROJECT_TL_DIMMABLE_LIGHT__ */
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-tick-handler.h
View file @
682c75ca
...
...
@@ -15,5 +15,4 @@ void Tick_Time_Init(void);
* */
void
kTickRunnningTrigger
(
void
);
#endif
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-token.c
View file @
682c75ca
...
...
@@ -2,13 +2,15 @@
* INCLUDES
*/
#include "ikk-token.h"
#include "../../../../zigbee/zcl/zcl_include.h"
#include "ikk-common-utils.h"
extern
addrExt_t
g_Eui64GatewayAddr
;
uint8_t
Flash_Buffer_Data
[
USER_SIZE
];
OPTTUNEL_TOKEN_ST
sOptunnel_Token
=
{{
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
0
,
1
,
2
,
3
,
4
,
5
,
6
},{
16
,
11
,
12
,
13
,
14
,
15
,
16
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
26
},{
16
,
31
,
32
,
33
,
34
,
35
,
36
,
37
,
38
,
39
,
40
,
41
,
42
,
43
,
44
,
45
,
46
},{
16
,
51
,
52
,
53
,
54
,
55
,
56
,
57
,
58
,
59
,
60
,
61
,
62
,
63
,
64
,
65
,
66
}};
/*********************************************************************
* @fn Get Gateway Addr
*
...
...
@@ -22,7 +24,7 @@ uint8_t* Gateway_IEEE_Addr_Get(void)
{
nv_sts_t
st
=
NV_SUCC
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
KEYPAIR
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
g_Eui64GatewayAddr
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
APP
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
g_Eui64GatewayAddr
);
iKonkeAfSelfPrint
(
"flashRead:::
\r\n
"
);
DEBUG_ARRAY
(
1
,
g_Eui64GatewayAddr
,
sizeof
(
addrExt_t
));
if
(
st
!=
NV_SUCC
){
...
...
@@ -44,14 +46,14 @@ nv_sts_t Gateway_IEEE_Addr_Save(addrExt_t addr)
nv_sts_t
st
=
NV_SUCC
;
addrExt_t
temp_addr
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
KEYPAIR
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
temp_addr
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
APP
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
temp_addr
);
iKonkeAfSelfPrint
(
"flashRead:::temp_addr
\r\n
"
);
DEBUG_ARRAY
(
1
,
temp_addr
,
sizeof
(
addrExt_t
));
if
(
st
==
NV_SUCC
){
if
(
memcmp
(
temp_addr
,
addr
,
sizeof
(
addrExt_t
)))
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
KEYPAIR
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
addr
);
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
APP
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
addr
);
}
else
if
(
st
==
NV_ITEM_NOT_FOUND
){
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
KEYPAIR
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
addr
);
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
APP
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
addr
);
}
iKonkeAfSelfPrint
(
"Gateway_IEEE_Addr_Save result = %d
\r\n
"
,
st
);
return
st
;
...
...
@@ -69,7 +71,7 @@ uint16_t MFG_Code_Get(void)
{
nv_sts_t
st
=
NV_SUCC
;
uint16_t
mfg_code_temp
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
KEYPAIR
,
NV_MFG_CODE
,
sizeof
(
mfg_code_temp
),
(
u8
*
)
&
mfg_code_temp
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
APP
,
NV_MFG_CODE
,
sizeof
(
mfg_code_temp
),
(
u8
*
)
&
mfg_code_temp
);
if
(
st
!=
NV_SUCC
){
mfg_code_temp
=
0
;
}
...
...
@@ -89,96 +91,282 @@ nv_sts_t MFG_Code_Save(uint16_t mfgcode)
nv_sts_t
st
=
NV_SUCC
;
uint16_t
mfg_code_temp
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
KEYPAIR
,
NV_MFG_CODE
,
sizeof
(
mfg_code_temp
),
(
u8
*
)
&
mfg_code_temp
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
APP
,
NV_MFG_CODE
,
sizeof
(
mfg_code_temp
),
(
u8
*
)
&
mfg_code_temp
);
if
(
st
==
NV_SUCC
){
if
(
mfg_code_temp
!=
mfgcode
)
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_KEYPAIR
,
NV_MFG_CODE
,
sizeof
(
uint16_t
),
(
u8
*
)
&
mfgcode
);
if
(
mfg_code_temp
!=
mfgcode
){
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_APP
,
NV_MFG_CODE
,
sizeof
(
uint16_t
),
(
u8
*
)
&
mfgcode
);
iKonkeAfSelfPrint
(
"MFG_CODE_Save result = %d
\r\n
"
,
st
);
}
}
else
if
(
st
==
NV_ITEM_NOT_FOUND
){
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
KEYPAIR
,
NV_MFG_CODE
,
sizeof
(
uint16_t
),
(
u8
*
)
&
mfgcode
);
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
APP
,
NV_MFG_CODE
,
sizeof
(
uint16_t
),
(
u8
*
)
&
mfgcode
);
}
iKonkeAfSelfPrint
(
"MFG_CODE_Save result = %d
\r\n
"
,
st
);
return
st
;
}
/*********************************************************************
* @fn Get age test step
*
* @brief
*
* @param None
*
* @return
*/
uint8_t
kGetAgingTestValue
(
void
)
bool
kGetIndicatorNotDisturbModeFlg
(
void
)
{
nv_sts_t
st
=
NV_SUCC
;
uint8_t
temp
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_KEYPAIR
,
NV_AGE_TEST_STEP
,
sizeof
(
temp
),
(
u8
*
)
&
temp
);
iKonkeAfSelfPrint
(
"kGetAgingTestValue:st = %d,data = %d
\r\n
"
,
st
,
temp
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_APP
,
NV_NO_DISTURB_MODE
,
sizeof
(
temp
),
(
u8
*
)
&
temp
);
if
(
st
!=
NV_SUCC
){
temp
=
0
;
iKonkeAfSelfPrint
(
"kGetIndicatorNotDisturbModeFlg failed!!
\r\n
"
);
}
return
temp
;
iKonkeAfSelfPrint
(
"Read st =%d,data=%d
\r\n
"
,
st
,
temp
);
return
(
temp
==
1
)
;
}
/*********************************************************************
* @fn Save age test step
*
* @brief
*
* @param None
*
* @return
*/
nv_sts_t
kSetAgingTestValue
(
uint8_t
value
)
nv_sts_t
kSetIndicatorNotDisturbModeFlg
(
uint8_t
value
)
{
nv_sts_t
st
=
NV_SUCC
;
uint8_t
temp
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
KEYPAIR
,
NV_AGE_TEST_STEP
,
sizeof
(
uint8_t
),
(
u8
*
)
&
temp
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
APP
,
NV_NO_DISTURB_MODE
,
sizeof
(
temp
),
(
u8
*
)
&
temp
);
if
(
st
==
NV_SUCC
){
if
(
temp
!=
value
)
{
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_KEYPAIR
,
NV_AGE_TEST_STEP
,
sizeof
(
uint8_t
),
(
u8
*
)
&
value
);
iKonkeAfSelfPrint
(
"kSetAgingTestValue:st = %d,data = %d
\r\n
"
,
st
,
value
);
}
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_APP
,
NV_NO_DISTURB_MODE
,
sizeof
(
uint8_t
),
(
u8
*
)
&
value
);
}
else
if
(
st
==
NV_ITEM_NOT_FOUND
){
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_KEYPAIR
,
NV_AGE_TEST_STEP
,
sizeof
(
uint8_t
),
(
u8
*
)
&
value
);
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_APP
,
NV_NO_DISTURB_MODE
,
sizeof
(
uint8_t
),
(
u8
*
)
&
value
);
}
if
(
st
!=
NV_SUCC
)
{
iKonkeAfSelfPrint
(
"kSetIndicatorNotDisturbModeFlg failed!!
\r\n
"
);
}
return
st
;
}
bool
kGetIndicatorNotDisturbModeFlg
(
void
)
bool
kGetInterpanEnableFlg
(
void
)
{
nv_sts_t
st
=
NV_SUCC
;
uint8_t
temp
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
KEYPAIR
,
NV_NO_DISTURB_MODE
,
sizeof
(
temp
),
(
u8
*
)
&
temp
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
APP
,
NV_INTERPAN_ENABLE_FLG
,
sizeof
(
temp
),
(
u8
*
)
&
temp
);
if
(
st
!=
NV_SUCC
){
temp
=
0
;
iKonkeAfSelfPrint
(
"kGetIn
dicatorNotDisturbModeFlg failed!!
\r\n
"
);
temp
=
1
;
iKonkeAfSelfPrint
(
"kGetIn
terpanEnableFlg failed!!
\r\n
"
);
}
return
(
temp
==
1
)
;
}
nv_sts_t
kSetIn
dicatorNotDisturbModeFlg
(
uint8_t
value
)
nv_sts_t
kSetIn
terpanEnableFlg
(
uint8_t
value
)
{
nv_sts_t
st
=
NV_SUCC
;
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
KEYPAIR
,
NV_NO_DISTURB_MODE
,
sizeof
(
uint8_t
),
(
u8
*
)
&
value
);
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
APP
,
NV_INTERPAN_ENABLE_FLG
,
sizeof
(
uint8_t
),
(
u8
*
)
&
value
);
if
(
st
!=
NV_SUCC
)
{
iKonkeAfSelfPrint
(
"kSetIndicatorNotDisturbModeFlg failed!!
\r\n
"
);
}
return
st
;
}
void
falsh_test
(
void
)
void
Flash_Test_Save
(
uint8_t
value
)
{
uint8_t
data
=
Flash_Test_Get
();
if
(
value
!=
data
)
{
flash_read
(
TOKEN_USER_LOCATION
,
USER_SIZE
,
Flash_Buffer_Data
);
iKonkeAfSelfPrintBuffer
(
Flash_Buffer_Data
,
USER_SIZE
);
iKonkeAfSelfPrint
(
"Erase Sector!!
\r\n
"
);
Flash_Buffer_Data
[
0
]
=
value
;
flash_erase
(
TOKEN_USER_LOCATION
);
flash_write
(
TOKEN_USER_LOCATION
,
1
,
&
value
);
}
}
uint8_t
Flash_Test_Get
(
void
)
{
addrExt_t
addr
;
memcpy
(
addr
,
Gateway_IEEE_Addr_Get
(),
sizeof
(
addrExt_t
));
iKonkeAfSelfPrint
(
"flashRead11111:::
\r\n
"
);
DEBUG_ARRAY
(
1
,
addr
,
sizeof
(
addrExt_t
));
addr
[
0
]
=
11
;
addr
[
1
]
=
22
;
Gateway_IEEE_Addr_Save
(
addr
);
iKonkeAfSelfPrint
(
"flashRead22222:::
\r\n
"
);
DEBUG_ARRAY
(
1
,
addr
,
sizeof
(
addrExt_t
));
uint8_t
value
;
flash_read
(
TOKEN_USER_LOCATION
,
1
,
&
value
);
return
value
;
}
void
Print_Flash_Data
(
void
)
{
flash_read
(
TOKEN_USER_LOCATION
,
USER_SIZE
,(
uint8_t
*
)
&
sOptunnel_Token
);
iKonkeAfSelfPrint
(
"install code :
\r\n
"
);
iKonkeAfSelfPrintBuffer
(
sOptunnel_Token
.
install_code
.
install_code_data
,
16
);
iKonkeAfSelfPrint
(
"modeid :len = %d
\r\n
"
,
sOptunnel_Token
.
modeid
.
modeid_len
);
iKonkeAfSelfPrintBuffer
(
sOptunnel_Token
.
modeid
.
modeid_data
,
32
);
iKonkeAfSelfPrint
(
"cmei :len = %d
\r\n
"
,
32
);
iKonkeAfSelfPrintBuffer
(
sOptunnel_Token
.
cmei
.
cmei_data
,
sOptunnel_Token
.
cmei
.
cmei_len
);
iKonkeAfSelfPrint
(
"isn :len = %d
\r\n
"
,
sOptunnel_Token
.
isn
.
isn_len
);
iKonkeAfSelfPrintBuffer
(
sOptunnel_Token
.
isn
.
isn_data
,
32
);
uint8_t
addr
[
254
]
=
{
0
};
flash_read
(
CFG_MAC_ADDRESS
,
254
,(
uint8_t
*
)
addr
);
iKonkeAfSelfPrint
(
"mac data::::
\r\n
"
);
iKonkeAfSelfPrintBuffer
(
addr
,
254
);
}
uint8_t
g_buffer
[
33
]
=
{
0
};
uint8_t
*
General_Custom_Token_Get
(
uint8_t
item
)
{
flash_read
(
TOKEN_USER_LOCATION
,
USER_SIZE
,(
uint8_t
*
)
&
sOptunnel_Token
);
switch
(
item
)
{
case
CUSTOM_ITEMS_INSTALL_CODE
:
{
memcpy
(
g_buffer
,
sOptunnel_Token
.
install_code
.
install_code_data
,
16
);
break
;
}
case
CUSTOM_ITEMS_MODEL_ID
:
{
if
(
sOptunnel_Token
.
modeid
.
modeid_len
!=
0xff
)
memcpy
(
g_buffer
,(
uint8_t
*
)
&
sOptunnel_Token
.
modeid
,
sOptunnel_Token
.
modeid
.
modeid_len
+
1
);
else
{
g_buffer
[
0
]
=
32
;
memset
(
g_buffer
+
1
,
0xff
,
32
);
}
break
;
}
case
CUSTOM_ITEMS_CMEI_CODE
:
{
if
(
sOptunnel_Token
.
cmei
.
cmei_len
!=
0xff
)
memcpy
(
g_buffer
,(
uint8_t
*
)
&
sOptunnel_Token
.
cmei
,
sOptunnel_Token
.
cmei
.
cmei_len
+
1
);
else
{
g_buffer
[
0
]
=
32
;
memset
(
g_buffer
+
1
,
0xff
,
32
);
}
break
;
}
case
CUSTOM_ITEMS_ISN_CODE
:
{
if
(
sOptunnel_Token
.
isn
.
isn_len
!=
0xff
)
memcpy
(
g_buffer
,(
uint8_t
*
)
&
sOptunnel_Token
.
isn
,
sOptunnel_Token
.
isn
.
isn_len
+
1
);
else
{
g_buffer
[
0
]
=
32
;
memset
(
g_buffer
+
1
,
0xff
,
32
);
}
break
;
}
default:
break
;
}
return
g_buffer
;
}
uint8_t
General_Custom_Token_Save
(
uint8_t
item
,
uint8_t
*
buff
,
uint8_t
len
)
{
if
((
buff
==
NULL
)
||
((
len
==
0
)))
return
0xff
;
if
(
len
>
32
)
return
0xfe
;
OPTTUNEL_TOKEN_ST
sOptunnel_Token_temp
;
uint8_t
rewrite_flash
=
0
;
uint8_t
valid_len
=
0
;
iKonkeAfSelfPrint
(
"will write data len =%d:
\r\n
"
,
len
);
iKonkeAfSelfPrintBuffer
(
buff
,
len
);
flash_read
(
TOKEN_USER_LOCATION
,
USER_SIZE
,(
uint8_t
*
)
&
sOptunnel_Token_temp
);
switch
(
item
)
{
case
CUSTOM_ITEMS_INSTALL_CODE
:
{
iKonkeAfSelfPrint
(
"read install code:
\r\n
"
);
iKonkeAfSelfPrintBuffer
(
sOptunnel_Token_temp
.
install_code
.
install_code_data
,
16
);
if
(
len
>
16
)
return
0xfe
;
if
((
!
memcmp
(
sOptunnel_Token_temp
.
install_code
.
install_code_data
,
buff
,
len
))
&&
(
All_Same_Data
(
&
sOptunnel_Token_temp
.
install_code
.
install_code_data
[
len
],
0xff
,
16
-
len
)))
{
//same data ,not need rewrite!
return
0
;
}
else
if
(
All_Same_Data
((
uint8_t
*
)
&
sOptunnel_Token_temp
.
install_code
.
install_code_data
,
0xff
,
16
)){
flash_write
(
TOKEN_USER_LOCATION
+
INSTALL_CODE_LOC_OFFSET
,
len
,
buff
);
return
0
;
}
else
{
memset
(
sOptunnel_Token_temp
.
install_code
.
install_code_data
,
0xff
,
16
);
memcpy
(
sOptunnel_Token_temp
.
install_code
.
install_code_data
,
buff
,
len
);
rewrite_flash
=
1
;
}
break
;
}
case
CUSTOM_ITEMS_MODEL_ID
:
{
iKonkeAfSelfPrint
(
"read modeid data len =%d:
\r\n
"
,
sOptunnel_Token_temp
.
modeid
.
modeid_len
);
iKonkeAfSelfPrintBuffer
(
sOptunnel_Token_temp
.
modeid
.
modeid_data
,
32
);
valid_len
=
(
sOptunnel_Token_temp
.
modeid
.
modeid_len
>
len
)
?
sOptunnel_Token_temp
.
modeid
.
modeid_len
:
len
;
if
((
!
memcmp
(
sOptunnel_Token_temp
.
modeid
.
modeid_data
,
buff
,
len
))
&&
(
All_Same_Data
(
&
sOptunnel_Token_temp
.
modeid
.
modeid_data
[
len
],
0xff
,
32
-
len
)))
{
//same data ,not need rewrite!
return
0
;
}
else
if
(
All_Same_Data
((
uint8_t
*
)
&
sOptunnel_Token_temp
.
modeid
,
0xff
,
32
)){
flash_write
(
TOKEN_USER_LOCATION
+
MODEL_ID_LOC_OFFSET
,
len
,
buff
);
return
0
;
}
else
{
sOptunnel_Token_temp
.
modeid
.
modeid_len
=
len
;
memset
(
sOptunnel_Token_temp
.
modeid
.
modeid_data
,
0xff
,
valid_len
);
memcpy
(
sOptunnel_Token_temp
.
modeid
.
modeid_data
,
buff
,
len
);
rewrite_flash
=
1
;
}
break
;
}
case
CUSTOM_ITEMS_CMEI_CODE
:
{
iKonkeAfSelfPrint
(
"read cmei data len =%d:
\r\n
"
,
sOptunnel_Token_temp
.
cmei
.
cmei_len
);
iKonkeAfSelfPrintBuffer
(
sOptunnel_Token_temp
.
cmei
.
cmei_data
,
32
);
valid_len
=
(
sOptunnel_Token_temp
.
cmei
.
cmei_len
>
len
)
?
sOptunnel_Token_temp
.
cmei
.
cmei_len
:
len
;
if
((
!
memcmp
(
sOptunnel_Token_temp
.
cmei
.
cmei_data
,
buff
,
len
))
&&
(
All_Same_Data
(
&
sOptunnel_Token_temp
.
cmei
.
cmei_data
[
len
],
0xff
,
32
-
len
)))
{
//same data ,not need rewrite!
return
0
;
}
else
if
(
All_Same_Data
((
uint8_t
*
)
&
sOptunnel_Token_temp
.
cmei
,
0xff
,
32
)){
flash_write
(
TOKEN_USER_LOCATION
+
CMEI_LOC_OFFSET
,
len
,
buff
);
return
0
;
}
else
{
sOptunnel_Token_temp
.
cmei
.
cmei_len
=
len
;
memset
(
sOptunnel_Token_temp
.
cmei
.
cmei_data
,
0xff
,
valid_len
);
memcpy
(
sOptunnel_Token_temp
.
cmei
.
cmei_data
,
buff
,
len
);
rewrite_flash
=
1
;
}
break
;
}
case
CUSTOM_ITEMS_ISN_CODE
:
{
iKonkeAfSelfPrint
(
"read isn data len =%d:
\r\n
"
,
sOptunnel_Token_temp
.
isn
.
isn_len
);
iKonkeAfSelfPrintBuffer
(
sOptunnel_Token_temp
.
isn
.
isn_data
,
32
);
valid_len
=
(
sOptunnel_Token_temp
.
isn
.
isn_len
>
len
)
?
sOptunnel_Token_temp
.
isn
.
isn_len
:
len
;
if
((
!
memcmp
(
sOptunnel_Token_temp
.
isn
.
isn_data
,
buff
,
len
))
&&
(
All_Same_Data
(
&
sOptunnel_Token_temp
.
isn
.
isn_data
[
len
],
0xff
,
32
-
len
)))
{
//same data ,not need rewrite!
return
0
;
}
else
if
(
All_Same_Data
((
uint8_t
*
)
&
sOptunnel_Token_temp
.
isn
,
0xff
,
32
)){
flash_write
(
TOKEN_USER_LOCATION
+
ISN_LOC_OFFSET
,
len
,
buff
);
return
0
;
}
else
{
sOptunnel_Token_temp
.
isn
.
isn_len
=
len
;
memset
(
sOptunnel_Token_temp
.
isn
.
isn_data
,
0xff
,
valid_len
);
memcpy
(
sOptunnel_Token_temp
.
isn
.
isn_data
,
buff
,
len
);
rewrite_flash
=
1
;
}
break
;
}
default:
break
;
}
if
(
rewrite_flash
){
flash_erase
(
TOKEN_USER_LOCATION
);
flash_write
(
TOKEN_USER_LOCATION
,
USER_SIZE
,(
uint8_t
*
)
&
sOptunnel_Token_temp
);
Print_Flash_Data
();
return
0
;
}
return
0xfd
;
}
void
falsh_test
(
uint8_t
count
)
{
// uint8_t install_code1[] = {1,2,3,4,5,6,7,8,9,0x0a};
// uint8_t install_code2[] = {1,2,3,4,5,6,7,8,9,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10};
// if(count%2)
// General_Custom_Token_Save(CUSTOM_ITEMS_INSTALL_CODE,install_code1,sizeof(install_code1));
// else
// General_Custom_Token_Save(CUSTOM_ITEMS_INSTALL_CODE,install_code2,sizeof(install_code2));
// uint8_t *p = MODEL_ID_TOKEN_GET();
Print_Flash_Data
();
// iKonkeAfSelfPrint("len =%d:\r\n",p[0]);
// iKonkeAfSelfPrintBuffer(p+1,32);
}
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-token.h
View file @
682c75ca
...
...
@@ -4,6 +4,70 @@
#include "tl_common.h"
#define TOKEN_USER_LOCATION 0x78000
#define USER_SIZE 256
#define INSTALL_CODE_LOC_OFFSET 0 //16Byte //0
#define MODEL_ID_LOC_OFFSET 64 //33Byte //16+33
#define CMEI_LOC_OFFSET 64+64 //33Byte //16+33+33
#define ISN_LOC_OFFSET 64+64+64 //33Byte //16+33+33+33
enum
{
CUSTOM_ITEMS_INSTALL_CODE
=
1
,
CUSTOM_ITEMS_MODEL_ID
,
CUSTOM_ITEMS_CMEI_CODE
,
CUSTOM_ITEMS_ISN_CODE
,
CUSTOM_ITEMS_RESERVED
,
}
CUSTOM_ITEMS
;
#define INSTALL_CODE_INDEX 0
#define MODEL_ID_INDEX 1
#define INSTALL_CODE_INDEX 0
#define INSTALL_CODE_INDEX 0
#define INSTALL_CODE_INDEX 0
typedef
struct
{
struct
{
uint8_t
install_code_data
[
16
];
uint8_t
res
[
48
];
}
install_code
;
struct
{
uint8_t
modeid_len
;
uint8_t
modeid_data
[
32
];
uint8_t
res
[
31
];
}
modeid
;
struct
{
uint8_t
cmei_len
;
uint8_t
cmei_data
[
32
];
uint8_t
res
[
31
];
}
cmei
;
struct
{
uint8_t
isn_len
;
uint8_t
isn_data
[
32
];
uint8_t
res
[
31
];
}
isn
;
uint8_t
reserved
[
32
];
}
OPTTUNEL_TOKEN_ST
;
extern
OPTTUNEL_TOKEN_ST
sOptunnel_Token
;
void
Flash_Test_Save
(
uint8_t
value
);
uint8_t
Flash_Test_Get
(
void
);
uint8_t
General_Custom_Token_Save
(
uint8_t
item
,
uint8_t
*
buff
,
uint8_t
len
);
uint8_t
*
General_Custom_Token_Get
(
uint8_t
item
);
#define INSTALL_CODE_TOKEN_GET() (General_Custom_Token_Get(CUSTOM_ITEMS_INSTALL_CODE))
#define MODEL_ID_TOKEN_GET() (General_Custom_Token_Get(CUSTOM_ITEMS_MODEL_ID))
#define CMEI_TOKEN_GET() (General_Custom_Token_Get(CUSTOM_ITEMS_CMEI_CODE))
#define ISN_TOKEN_GET() (General_Custom_Token_Get(CUSTOM_ITEMS_ISN_CODE))
#define INSTALL_CODE_TOKEN_SET(buffer,len) (General_Custom_Token_Save(CUSTOM_ITEMS_INSTALL_CODE,buffer,len))
#define MODEL_ID_TOKEN_SET(buffer,len) (General_Custom_Token_Save(CUSTOM_ITEMS_MODEL_ID,buffer,len))
#define CMEI_TOKEN_SET(buffer,len) (General_Custom_Token_Save(CUSTOM_ITEMS_CMEI_CODE,buffer,len))
#define ISN_TOKEN_SET(buffer,len) (General_Custom_Token_Save(CUSTOM_ITEMS_ISN_CODE,buffer,len))
nv_sts_t
Gateway_IEEE_Addr_Save
(
addrExt_t
addr
);
...
...
@@ -13,14 +77,12 @@ uint16_t MFG_Code_Get(void);
nv_sts_t
MFG_Code_Save
(
uint16_t
mfgcode
);
uint8_t
kGetAgingTestValue
(
void
);
nv_sts_t
kSetAgingTestValue
(
uint8_t
value
);
bool
kGetIndicatorNotDisturbModeFlg
(
void
);
nv_sts_t
kSetIndicatorNotDisturbModeFlg
(
uint8_t
value
);
#if 0
void falsh_test(void);
nv_sts_t
kSetInterpanEnableFlg
(
uint8_t
value
);
bool
kGetInterpanEnableFlg
(
void
);
#if 1
void
falsh_test
(
uint8_t
count
);
#endif
#endif
/* _SAMPLE_LIGHT_H_ */
tl_zigbee_sdk/apps/common/firmwareEncryptChk.c
View file @
682c75ca
tl_zigbee_sdk/apps/sampleLight/app_driver/general/ikk-token.c
View file @
682c75ca
...
...
@@ -22,7 +22,7 @@ uint8_t* Gateway_IEEE_Addr_Get(void)
{
nv_sts_t
st
=
NV_SUCC
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
USER
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
g_Eui64GatewayAddr
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
APP
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
g_Eui64GatewayAddr
);
iKonkeAfSelfPrint
(
"flashRead:::
\r\n
"
);
DEBUG_ARRAY
(
1
,
g_Eui64GatewayAddr
,
sizeof
(
addrExt_t
));
if
(
st
!=
NV_SUCC
){
...
...
@@ -44,14 +44,14 @@ nv_sts_t Gateway_IEEE_Addr_Save(addrExt_t addr)
nv_sts_t
st
=
NV_SUCC
;
addrExt_t
temp_addr
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
USER
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
temp_addr
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
APP
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
temp_addr
);
iKonkeAfSelfPrint
(
"flashRead:::temp_addr
\r\n
"
);
DEBUG_ARRAY
(
1
,
temp_addr
,
sizeof
(
addrExt_t
));
if
(
st
==
NV_SUCC
){
if
(
memcmp
(
temp_addr
,
addr
,
sizeof
(
addrExt_t
)))
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
USER
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
addr
);
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
APP
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
addr
);
}
else
if
(
st
==
NV_ITEM_NOT_FOUND
){
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
USER
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
addr
);
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
APP
,
NV_GATEWAY_ADDR
,
sizeof
(
addrExt_t
),
(
u8
*
)
addr
);
}
iKonkeAfSelfPrint
(
"Gateway_IEEE_Addr_Save result = %d
\r\n
"
,
st
);
return
st
;
...
...
@@ -69,7 +69,7 @@ uint16_t MFG_Code_Get(void)
{
nv_sts_t
st
=
NV_SUCC
;
uint16_t
mfg_code_temp
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
USER
,
NV_MFG_CODE
,
sizeof
(
mfg_code_temp
),
(
u8
*
)
&
mfg_code_temp
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
APP
,
NV_MFG_CODE
,
sizeof
(
mfg_code_temp
),
(
u8
*
)
&
mfg_code_temp
);
if
(
st
!=
NV_SUCC
){
mfg_code_temp
=
0
;
}
...
...
@@ -89,12 +89,12 @@ nv_sts_t MFG_Code_Save(uint16_t mfgcode)
nv_sts_t
st
=
NV_SUCC
;
uint16_t
mfg_code_temp
;
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
USER
,
NV_MFG_CODE
,
sizeof
(
mfg_code_temp
),
(
u8
*
)
&
mfg_code_temp
);
st
=
nv_flashReadNew
(
1
,
NV_MODULE_
APP
,
NV_MFG_CODE
,
sizeof
(
mfg_code_temp
),
(
u8
*
)
&
mfg_code_temp
);
if
(
st
==
NV_SUCC
){
if
(
mfg_code_temp
!=
mfgcode
)
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
USER
,
NV_MFG_CODE
,
sizeof
(
uint16_t
),
(
u8
*
)
&
mfgcode
);
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
APP
,
NV_MFG_CODE
,
sizeof
(
uint16_t
),
(
u8
*
)
&
mfgcode
);
}
else
if
(
st
==
NV_ITEM_NOT_FOUND
){
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
USER
,
NV_MFG_CODE
,
sizeof
(
uint16_t
),
(
u8
*
)
&
mfgcode
);
st
=
nv_flashWriteNew
(
1
,
NV_MODULE_
APP
,
NV_MFG_CODE
,
sizeof
(
uint16_t
),
(
u8
*
)
&
mfgcode
);
}
iKonkeAfSelfPrint
(
"MFG_CODE_Save result = %d
\r\n
"
,
st
);
return
st
;
...
...
tl_zigbee_sdk/build/tlsr_tc32/.cproject
View file @
682c75ca
This source diff could not be displayed because it is too large. You can
view the blob
instead.
tl_zigbee_sdk/build/tlsr_tc32/.project
View file @
682c75ca
...
...
@@ -189,7 +189,7 @@
<link>
<name>
apps/common/00ikonke_app
</name>
<type>
2
</type>
<location>
E:/
TeLin_Zigbee_SDK/tl_zigbee_sdk/apps/common/00ikonke_app
</location>
<location>
E:/
telin_zigbee_sdk/tl_zigbee_sdk/apps/common/00ikonke_app
</location>
</link>
<link>
<name>
platform/boot/8258
</name>
...
...
tl_zigbee_sdk/build/tlsr_tc32/boot.link
View file @
682c75ca
tl_zigbee_sdk/proj/common/tlPrintf.h
View file @
682c75ca
...
...
@@ -52,6 +52,7 @@
#if defined(MCU_CORE_826x) || defined(MCU_CORE_8258) || defined(MCU_CORE_8278)
int
Tl_printf
(
const
char
*
format
,
...);
#endif
#define SKD_LOG_ENABLE FALSE
#if (UART_PRINTF_MODE || USB_PRINTF_MODE)
...
...
@@ -59,6 +60,7 @@ int Tl_printf(const char *format, ...);
#define printf Tl_printf
#endif
#define TRACE printf
#define DEBUG(compileFlag, ...) do{ \
...
...
@@ -75,6 +77,11 @@ int Tl_printf(const char *format, ...);
TRACE
(
"
\n
*********************************
\n
"
);
\
}
\
}
while
(
0
)
#if SKD_LOG_ENABLE
#define sdk_printf printf
#else
#define sdk_printf
#endif
#else
#if defined(MCU_CORE_826x) || defined(MCU_CORE_8258) || defined(MCU_CORE_8278)
#define printf
...
...
tl_zigbee_sdk/proj/drivers/drv_nv.c
View file @
682c75ca
...
...
@@ -601,7 +601,7 @@ nv_sts_t nv_resetToFactoryNew(void){
}
foreach
(
i
,
NV_MAX_MODULS
){
if
((
i
!=
NV_MODULE_NWK_FRAME_COUNT
)
&&
(
i
!=
NV_MODULE_
KEYPAIR
)){
if
((
i
!=
NV_MODULE_NWK_FRAME_COUNT
)
&&
(
i
!=
NV_MODULE_
APP
)){
nv_resetModule
(
i
);
}
}
...
...
tl_zigbee_sdk/proj/drivers/drv_nv.h
View file @
682c75ca
...
...
@@ -354,8 +354,12 @@ typedef enum{
NV_GATEWAY_ADDR
,
//lmm add
NV_MFG_CODE
,
//lmm add
NV_AGE_TEST_STEP
,
//lmm add
NV_SINGLE_BOARD_TEST_FLG
,
//lmm add
NV_FULL_DEVICE_TEST_FLG
,
//lmm add
NV_MFC_CODE
,
//lmm add
NV_NO_DISTURB_MODE
,
//lmm add
NV_AGING_TEST_TIME
,
//lmm add
NV_INTERPAN_ENABLE_FLG
,
//lmm add
NV_ITEM_ID_MAX
=
0xFF
,
/* Item id 0xFF should not be used. */
}
nv_item_t
;
...
...
tl_zigbee_sdk/proj/os/ev_timer.h
View file @
682c75ca
...
...
@@ -49,7 +49,7 @@
/**
* @brief Definition for timer event
*/
#define TIMER_EVENT_NUM (
40)
#define TIMER_EVENT_NUM (
24)
#define TIMER_EVENT_ENOUGH_NUM (TIMER_EVENT_NUM - 4)
/**
...
...
tl_zigbee_sdk/proj/tl_common.h
View file @
682c75ca
...
...
@@ -83,3 +83,4 @@
#include "drivers/drv_putchar.h"
#include "drivers/drv_usb.h"
tl_zigbee_sdk/zigbee/bdb/bdb.c
View file @
682c75ca
...
...
@@ -854,7 +854,7 @@ _CODE_BDB_ static void bdb_nodeDescRespHandler(void *arg)
//lmm add for getting coo manufacture code
u16
manufactureCode
=
(
u16
)(
rsp
->
node_descriptor
.
mcH8
)
<<
8
|
rsp
->
node_descriptor
.
mcL8
;
MFG_Code_Save
(
manufactureCode
);
Tl_printf
(
"sdk print,nodeDescResp,manufactureCode = %d
\r\n
"
,
manufactureCode
);
//just debug for sdk test
sdk_printf
(
"sdk print,nodeDescResp,manufactureCode = %d
\r\n
"
,
manufactureCode
);
//just debug for sdk test
if
(
stackRev
>=
21
){
ss_apsRequestKeyReq_t
requestKey
;
TL_SETSTRUCTCONTENT
(
requestKey
,
0
);
...
...
@@ -926,6 +926,7 @@ _CODE_BDB_ static s32 bdb_retrieveTcLinkKeyTimeout(void *arg)
*/
_CODE_BDB_
static
s32
bdb_retrieveTcLinkKeyStart
(
void
*
arg
)
{
sdk_printf
(
"bdb_retrieveTcLinkKeyStart, g_bdbAttrs.tcLinkKeyExchangeMethod= %d
\n
"
,
g_bdbAttrs
.
tcLinkKeyExchangeMethod
);
if
(
g_bdbAttrs
.
tcLinkKeyExchangeMethod
==
TCKEY_EXCHANGE_METHOD_APSRK
){
/* send node description */
u8
sn
=
0
;
...
...
@@ -1108,7 +1109,6 @@ static void bdb_task(void *arg)
g_bdbCtx
.
bdbAppCb
->
bdbcommissioningCb
(
g_bdbAttrs
.
commissioningStatus
,
NULL
);
}
}
Tl_printf
(
"sdk print,bdb_task,BDB_STATE_IDLE,status = %d
\r\n
"
,
status
);
//just debug for sdk test
BDB_STATE_SET
(
status
);
}
else
if
(
evt
==
BDB_STATE_REJOIN_DONE
){
bdb_topLevelCommissiongConfirm
();
...
...
@@ -1116,6 +1116,7 @@ static void bdb_task(void *arg)
break
;
case
BDB_STATE_COMMISSIONING_TOUCHLINK
:
sdk_printf
(
"sdk printf,touch link ,evt = %d
\r\n
"
,
evt
);
if
(
evt
==
BDB_EVT_COMMISSIONING_TOUCHLINK_NO_RESP
){
/*
* if no scan response received, start network steer
...
...
@@ -1143,7 +1144,7 @@ static void bdb_task(void *arg)
break
;
case
BDB_STATE_COMMISSIONING_NETWORK_STEER
:
Tl_printf
(
"sdk print,bdb_task,networ steering,evt = %d
\r\n
"
,
evt
);
//just debug for sdk test
sdk_printf
(
"sdk printf,start retry tclink_key event,evt = %d
\r\n
"
,
evt
);
if
(
evt
==
BDB_EVT_COMMISSIONING_NETWORK_STEER_RETRIEVE_TCLINK_KEY
){
TL_ZB_TIMER_SCHEDULE
(
bdb_retrieveTcLinkKeyStart
,
NULL
,
1000
);
}
else
if
(
evt
==
BDB_EVT_COMMISSIONING_NETWORK_STEER_PERMITJOIN
){
...
...
@@ -1156,13 +1157,11 @@ static void bdb_task(void *arg)
#if ZB_COORDINATOR_ROLE
ss_securityModeSet
(
SS_SEMODE_CENTRALIZED
);
#else
Tl_printf
(
"sdk print,bdb_task,networ steering,----
\r\n
"
);
if
((
!
g_bdbAttrs
.
nodeIsOnANetwork
)
||
(
ZB_IEEE_ADDR_IS_INVAILD
(
ss_ib
.
trust_center_address
))){
ss_securityModeSet
(
SS_SEMODE_DISTRIBUTED
);
}
#endif
status
=
bdb_commissioningNetworkFormation
();
Tl_printf
(
"sdk print,bdb_task,networ steering,status = %d
\r\n
"
,
status
);
if
(
status
==
BDB_STATE_IDLE
){
/* confirm to application */
bdb_topLevelCommissiongConfirm
();
...
...
@@ -1172,6 +1171,7 @@ static void bdb_task(void *arg)
break
;
case
BDB_STATE_COMMISSIONING_NETWORK_FORMATION
:
sdk_printf
(
"sdk printf,BDB_STATE_COMMISSIONING_NETWORK_FORMATION,evt = %d
\r\n
"
,
evt
);
if
(
evt
==
BDB_EVT_COMMISSIONING_NETWORK_FORMATION_PERMITJOIN
){
g_bdbAttrs
.
commissioningMode
.
networkSteer
=
1
;
zb_mgmtPermitJoinReq
(
0xfffc
,
BDBC_MIN_COMMISSIONING_TIME
,
0x01
,
&
sn
,
NULL
);
...
...
@@ -1187,6 +1187,7 @@ static void bdb_task(void *arg)
break
;
case
BDB_STATE_COMMISSIONING_FINDORBIND
:
sdk_printf
(
"sdk printf,FINDORBIND,evt = %d
\r\n
"
,
evt
);
if
(
evt
==
BDB_EVT_COMMISSIONING_FINDORBIND_SIMPLE_DESC_REQ
){
bdb_commissioningFindBindSimpleDescReq
();
}
else
if
(
evt
==
BDB_EVT_COMMISSIONING_FINDORBIND_FINISH
){
...
...
@@ -1228,7 +1229,7 @@ _CODE_BDB_ static s32 bdb_task_delay(void *arg)
_CODE_BDB_
void
bdb_zdoStartDevCnf
(
zdo_start_device_confirm_t
*
startDevCnf
){
u32
evt
=
BDB_EVT_IDLE
;
u8
state
=
BDB_STATE_GET
();
Tl_printf
(
"sdk print,bdb_zdoStartDevCnf,get bdb status = %d,start status = %d
\r\n
"
,
state
,
startDevCnf
->
status
);
switch
(
state
){
case
BDB_STATE_IDLE
:
/* for rejoin indication by the stack */
...
...
@@ -1287,7 +1288,6 @@ _CODE_BDB_ void bdb_zdoStartDevCnf(zdo_start_device_confirm_t *startDevCnf){
#endif
case
BDB_STATE_COMMISSIONING_NETWORK_STEER
:
Tl_printf
(
"sdk print,bdb_zdoStartDevCnf,status = %d
\r\n
"
,
startDevCnf
->
status
);
//just debug for sdk test
if
(
startDevCnf
->
status
==
SUCCESS
){
//g_bdbAttrs.commissioningStatus = BDB_COMMISSION_STA_SUCCESS;
g_bdbAttrs
.
nodeIsOnANetwork
=
1
;
...
...
@@ -1454,7 +1454,7 @@ _CODE_BDB_ static u8 bdb_topLevelCommissiongConfirm(void){
*/
_CODE_BDB_
static
u8
bdb_topLevelCommissioning
(
u8
target
){
/* restore persistent ZigBee data */
Tl_printf
(
"sdk print,bdb_topLevelCommissioning = %d,%d
\r\n
"
,
BDB_STATE_GET
(),
g_bdbAttrs
.
commissioningStatus
);
if
(
BDB_STATE_GET
()
!=
BDB_STATE_IDLE
||
g_bdbAttrs
.
commissioningStatus
==
BDB_COMMISSION_STA_IN_PROGRESS
){
return
BDB_STATE_COMMISSIONING_BUSY
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment