Reformat files
This commit is contained in:
		
							parent
							
								
									edff6aef13
								
							
						
					
					
						commit
						222faed678
					
				
							
								
								
									
										11
									
								
								app_cfg.h
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								app_cfg.h
									
									
									
									
									
								
							@ -25,10 +25,10 @@
 | 
			
		||||
 | 
			
		||||
/* Enable C linkage for C++ Compilers: */
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
extern "C" {
 | 
			
		||||
extern "C"
 | 
			
		||||
{
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * Version configuration
 | 
			
		||||
 */
 | 
			
		||||
@ -81,7 +81,6 @@ extern "C" {
 | 
			
		||||
#include "board_glc002p.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Voltage detect module */
 | 
			
		||||
/* If you want to define the VOLTAGE_DETECT_ENABLE to 1,
 | 
			
		||||
 * and the model of the development board is B91 evk or dongle,
 | 
			
		||||
@ -101,7 +100,6 @@ extern "C" {
 | 
			
		||||
#define ZBHCI_EN 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * ZCL cluster support setting
 | 
			
		||||
 */
 | 
			
		||||
@ -121,17 +119,16 @@ extern "C" {
 | 
			
		||||
 | 
			
		||||
#define AF_TEST_ENABLE 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * Stack configuration
 | 
			
		||||
 */
 | 
			
		||||
#include "stack_cfg.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/**********************************************************************
 | 
			
		||||
	 * EV configuration
 | 
			
		||||
	 */
 | 
			
		||||
typedef enum{
 | 
			
		||||
	typedef enum
 | 
			
		||||
	{
 | 
			
		||||
		EV_POLL_ED_DETECT,
 | 
			
		||||
		EV_POLL_HCI,
 | 
			
		||||
		EV_POLL_IDLE,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										88
									
								
								app_ui.c
									
									
									
									
									
								
							
							
						
						
									
										88
									
								
								app_ui.c
									
									
									
									
									
								
							@ -36,70 +36,86 @@
 | 
			
		||||
 * LOCAL CONSTANTS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * GLOBAL VARIABLES
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * LOCAL FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
void led_on(u32 pin){
 | 
			
		||||
void led_on(u32 pin)
 | 
			
		||||
{
 | 
			
		||||
	drv_gpio_write(pin, LED_ON);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void led_off(u32 pin){
 | 
			
		||||
void led_off(u32 pin)
 | 
			
		||||
{
 | 
			
		||||
	drv_gpio_write(pin, LED_OFF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void led_init(void){
 | 
			
		||||
void led_init(void)
 | 
			
		||||
{
 | 
			
		||||
	led_off(LED_STATUS_R);
 | 
			
		||||
	led_off(LED_STATUS_G);
 | 
			
		||||
	led_off(LED_STATUS_B);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void localPermitJoinState(void){
 | 
			
		||||
void localPermitJoinState(void)
 | 
			
		||||
{
 | 
			
		||||
	static bool assocPermit = 0;
 | 
			
		||||
	if(assocPermit != zb_getMacAssocPermit()){
 | 
			
		||||
	if (assocPermit != zb_getMacAssocPermit())
 | 
			
		||||
	{
 | 
			
		||||
		assocPermit = zb_getMacAssocPermit();
 | 
			
		||||
		if(assocPermit){
 | 
			
		||||
		if (assocPermit)
 | 
			
		||||
		{
 | 
			
		||||
			led_on(LED_STATUS_R);
 | 
			
		||||
		}else{
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			led_off(LED_STATUS_R);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void buttonKeepPressed(u8 btNum){
 | 
			
		||||
	if(btNum == VK_SW1){
 | 
			
		||||
void buttonKeepPressed(u8 btNum)
 | 
			
		||||
{
 | 
			
		||||
	if (btNum == VK_SW1)
 | 
			
		||||
	{
 | 
			
		||||
		gLightCtx.state = APP_FACTORY_NEW_DOING;
 | 
			
		||||
		led_on(LED_STATUS_R);
 | 
			
		||||
		led_on(LED_STATUS_G);
 | 
			
		||||
		led_on(LED_STATUS_B);
 | 
			
		||||
 | 
			
		||||
		zb_factoryReset();
 | 
			
		||||
	}else if(btNum == VK_SW2){
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	else if (btNum == VK_SW2)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void buttonShortPressed(u8 btNum){
 | 
			
		||||
	if(btNum == VK_SW1){
 | 
			
		||||
		if(zb_isDeviceJoinedNwk()){
 | 
			
		||||
void buttonShortPressed(u8 btNum)
 | 
			
		||||
{
 | 
			
		||||
	if (btNum == VK_SW1)
 | 
			
		||||
	{
 | 
			
		||||
		if (zb_isDeviceJoinedNwk())
 | 
			
		||||
		{
 | 
			
		||||
			gLightCtx.sta = !gLightCtx.sta;
 | 
			
		||||
			if(gLightCtx.sta){
 | 
			
		||||
			if (gLightCtx.sta)
 | 
			
		||||
			{
 | 
			
		||||
				sampleLight_onoff(ZCL_ONOFF_STATUS_ON);
 | 
			
		||||
			}else{
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				sampleLight_onoff(ZCL_ONOFF_STATUS_OFF);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}else if(btNum == VK_SW2){
 | 
			
		||||
	}
 | 
			
		||||
	else if (btNum == VK_SW2)
 | 
			
		||||
	{
 | 
			
		||||
		/* toggle local permit Joining */
 | 
			
		||||
		static u8 duration = 0;
 | 
			
		||||
		duration = duration ? 0 : 0xff;
 | 
			
		||||
@ -107,42 +123,52 @@ void buttonShortPressed(u8 btNum){
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void keyScan_keyPressedCB(kb_data_t *kbEvt){
 | 
			
		||||
void keyScan_keyPressedCB(kb_data_t *kbEvt)
 | 
			
		||||
{
 | 
			
		||||
	//	u8 toNormal = 0;
 | 
			
		||||
	u8 keyCode = kbEvt->keycode[0];
 | 
			
		||||
	//	static u8 lastKeyCode = 0xff;
 | 
			
		||||
 | 
			
		||||
	buttonShortPressed(keyCode);
 | 
			
		||||
 | 
			
		||||
	if(keyCode == VK_SW1){
 | 
			
		||||
	if (keyCode == VK_SW1)
 | 
			
		||||
	{
 | 
			
		||||
		gLightCtx.keyPressedTime = clock_time();
 | 
			
		||||
		gLightCtx.state = APP_FACTORY_NEW_SET_CHECK;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void keyScan_keyReleasedCB(u8 keyCode){
 | 
			
		||||
void keyScan_keyReleasedCB(u8 keyCode)
 | 
			
		||||
{
 | 
			
		||||
	gLightCtx.state = APP_STATE_NORMAL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
volatile u8 T_keyPressedNum = 0;
 | 
			
		||||
void app_key_handler(void){
 | 
			
		||||
void app_key_handler(void)
 | 
			
		||||
{
 | 
			
		||||
	static u8 valid_keyCode = 0xff;
 | 
			
		||||
 | 
			
		||||
	if(gLightCtx.state == APP_FACTORY_NEW_SET_CHECK){
 | 
			
		||||
		if(clock_time_exceed(gLightCtx.keyPressedTime, 5*1000*1000)){
 | 
			
		||||
	if (gLightCtx.state == APP_FACTORY_NEW_SET_CHECK)
 | 
			
		||||
	{
 | 
			
		||||
		if (clock_time_exceed(gLightCtx.keyPressedTime, 5 * 1000 * 1000))
 | 
			
		||||
		{
 | 
			
		||||
			buttonKeepPressed(VK_SW1);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(kb_scan_key(0 , 1)){
 | 
			
		||||
	if (kb_scan_key(0, 1))
 | 
			
		||||
	{
 | 
			
		||||
		T_keyPressedNum++;
 | 
			
		||||
		if(kb_event.cnt){
 | 
			
		||||
		if (kb_event.cnt)
 | 
			
		||||
		{
 | 
			
		||||
			keyScan_keyPressedCB(&kb_event);
 | 
			
		||||
			if(kb_event.cnt == 1){
 | 
			
		||||
			if (kb_event.cnt == 1)
 | 
			
		||||
			{
 | 
			
		||||
				valid_keyCode = kb_event.keycode[0];
 | 
			
		||||
			}
 | 
			
		||||
		}else{
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			keyScan_keyReleasedCB(valid_keyCode);
 | 
			
		||||
			valid_keyCode = 0xff;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								app_ui.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								app_ui.h
									
									
									
									
									
								
							@ -30,17 +30,16 @@
 | 
			
		||||
#define LED_ON 1
 | 
			
		||||
#define LED_OFF 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
enum{
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	APP_STATE_NORMAL,
 | 
			
		||||
	APP_FACTORY_NEW_SET_CHECK,
 | 
			
		||||
	APP_FACTORY_NEW_DOING,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -25,7 +25,8 @@
 | 
			
		||||
 | 
			
		||||
/* Enable C linkage for C++ Compilers: */
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
extern "C" {
 | 
			
		||||
extern "C"
 | 
			
		||||
{
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************************************
 | 
			
		||||
@ -53,28 +54,37 @@ extern "C" {
 | 
			
		||||
#define LED_W GPIO_PB4 //		PWM4
 | 
			
		||||
 | 
			
		||||
#define PWM_B_CHANNEL 0 // PWM0
 | 
			
		||||
#define PWM_B_CHANNEL_SET()			do{	\
 | 
			
		||||
#define PWM_B_CHANNEL_SET()            \
 | 
			
		||||
	do                                 \
 | 
			
		||||
	{                                  \
 | 
			
		||||
		gpio_set_func(LED_B, AS_PWM0); \
 | 
			
		||||
	} while (0)
 | 
			
		||||
 | 
			
		||||
#define PWM_G_CHANNEL 1 // PWM1
 | 
			
		||||
#define PWM_G_CHANNEL_SET()			do{	\
 | 
			
		||||
#define PWM_G_CHANNEL_SET()            \
 | 
			
		||||
	do                                 \
 | 
			
		||||
	{                                  \
 | 
			
		||||
		gpio_set_func(LED_G, AS_PWM1); \
 | 
			
		||||
	} while (0)
 | 
			
		||||
 | 
			
		||||
#define PWM_R_CHANNEL 2 // PWM2
 | 
			
		||||
#define PWM_R_CHANNEL_SET()			do{	\
 | 
			
		||||
#define PWM_R_CHANNEL_SET()            \
 | 
			
		||||
	do                                 \
 | 
			
		||||
	{                                  \
 | 
			
		||||
		gpio_set_func(LED_R, AS_PWM2); \
 | 
			
		||||
	} while (0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define PWM_C_CHANNEL 3 // PWM3
 | 
			
		||||
#define PWM_C_CHANNEL_SET()			do{	\
 | 
			
		||||
#define PWM_C_CHANNEL_SET()            \
 | 
			
		||||
	do                                 \
 | 
			
		||||
	{                                  \
 | 
			
		||||
		gpio_set_func(LED_C, AS_PWM3); \
 | 
			
		||||
	} while (0)
 | 
			
		||||
 | 
			
		||||
#define PWM_W_CHANNEL 4 // PWM4
 | 
			
		||||
#define PWM_W_CHANNEL_SET()			do{	\
 | 
			
		||||
#define PWM_W_CHANNEL_SET()            \
 | 
			
		||||
	do                                 \
 | 
			
		||||
	{                                  \
 | 
			
		||||
		gpio_set_func(LED_W, AS_PWM4); \
 | 
			
		||||
	} while (0)
 | 
			
		||||
 | 
			
		||||
@ -120,21 +130,33 @@ extern "C" {
 | 
			
		||||
#define DEBUG_INFO_TX_PIN GPIO_PC4 // print
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
enum{
 | 
			
		||||
	enum
 | 
			
		||||
	{
 | 
			
		||||
		VK_SW1 = 0x01,
 | 
			
		||||
		VK_SW2 = 0x02
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
#define	KB_MAP_NORMAL	{\
 | 
			
		||||
		{VK_SW1,}, \
 | 
			
		||||
		{VK_SW2,}, }
 | 
			
		||||
#define KB_MAP_NORMAL   \
 | 
			
		||||
	{                   \
 | 
			
		||||
		{               \
 | 
			
		||||
			VK_SW1,     \
 | 
			
		||||
		},              \
 | 
			
		||||
			{           \
 | 
			
		||||
				VK_SW2, \
 | 
			
		||||
			},          \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#define KB_MAP_NUM KB_MAP_NORMAL
 | 
			
		||||
#define KB_MAP_FN KB_MAP_NORMAL
 | 
			
		||||
 | 
			
		||||
#define KB_DRIVE_PINS  {NULL }
 | 
			
		||||
#define KB_SCAN_PINS   {BUTTON_OPT,  BUTTON_RESET}
 | 
			
		||||
 | 
			
		||||
#define KB_DRIVE_PINS \
 | 
			
		||||
	{                 \
 | 
			
		||||
		NULL          \
 | 
			
		||||
	}
 | 
			
		||||
#define KB_SCAN_PINS             \
 | 
			
		||||
	{                            \
 | 
			
		||||
		BUTTON_OPT, BUTTON_RESET \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/* Disable C linkage for C++ Compilers: */
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
 | 
			
		||||
@ -47,18 +47,15 @@
 | 
			
		||||
 * LOCAL CONSTANTS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * GLOBAL VARIABLES
 | 
			
		||||
 */
 | 
			
		||||
app_ctx_t gLightCtx;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef ZCL_OTA
 | 
			
		||||
extern ota_callBack_t sampleLight_otaCb;
 | 
			
		||||
 | 
			
		||||
@ -70,7 +67,6 @@ ota_preamble_t sampleLight_otaInfo = {
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Must declare the application call back function which used by ZDO layer
 | 
			
		||||
const zdo_appIndCb_t appCbLst = {
 | 
			
		||||
	bdb_zdoStartDevCnf,					  // start device cnf cb
 | 
			
		||||
@ -85,7 +81,6 @@ const zdo_appIndCb_t appCbLst = {
 | 
			
		||||
	NULL,								  // tc detects that the frame counter is near limit
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Definition for bdb commissioning setting
 | 
			
		||||
 */
 | 
			
		||||
@ -113,7 +108,6 @@ bdb_commissionSetting_t g_bdbCommissionSetting = {
 | 
			
		||||
 */
 | 
			
		||||
ev_timer_event_t *sampleLightAttrsStoreTimerEvt = NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
@ -184,8 +178,6 @@ void user_app_init(void)
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
s32 sampleLightAttrsStoreTimerCb(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	zcl_onOffAttr_save();
 | 
			
		||||
@ -198,7 +190,8 @@ s32 sampleLightAttrsStoreTimerCb(void *arg)
 | 
			
		||||
 | 
			
		||||
void sampleLightAttrsStoreTimerStart(void)
 | 
			
		||||
{
 | 
			
		||||
	if(sampleLightAttrsStoreTimerEvt){
 | 
			
		||||
	if (sampleLightAttrsStoreTimerEvt)
 | 
			
		||||
	{
 | 
			
		||||
		TL_ZB_TIMER_CANCEL(&sampleLightAttrsStoreTimerEvt);
 | 
			
		||||
	}
 | 
			
		||||
	sampleLightAttrsStoreTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLightAttrsStoreTimerCb, NULL, 200);
 | 
			
		||||
@ -206,9 +199,11 @@ void sampleLightAttrsStoreTimerStart(void)
 | 
			
		||||
 | 
			
		||||
void sampleLightAttrsChk(void)
 | 
			
		||||
{
 | 
			
		||||
	if(gLightCtx.lightAttrsChanged){
 | 
			
		||||
	if (gLightCtx.lightAttrsChanged)
 | 
			
		||||
	{
 | 
			
		||||
		gLightCtx.lightAttrsChanged = FALSE;
 | 
			
		||||
		if(zb_isDeviceJoinedNwk()){
 | 
			
		||||
		if (zb_isDeviceJoinedNwk())
 | 
			
		||||
		{
 | 
			
		||||
			sampleLightAttrsStoreTimerStart();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -216,15 +211,19 @@ void sampleLightAttrsChk(void)
 | 
			
		||||
 | 
			
		||||
void report_handler(void)
 | 
			
		||||
{
 | 
			
		||||
	if(zb_isDeviceJoinedNwk()){
 | 
			
		||||
		if(zcl_reportingEntryActiveNumGet()){
 | 
			
		||||
	if (zb_isDeviceJoinedNwk())
 | 
			
		||||
	{
 | 
			
		||||
		if (zcl_reportingEntryActiveNumGet())
 | 
			
		||||
		{
 | 
			
		||||
			u16 second = 1; // TODO: fix me
 | 
			
		||||
 | 
			
		||||
			reportNoMinLimit();
 | 
			
		||||
 | 
			
		||||
			// start report timer
 | 
			
		||||
			reportAttrTimerStart(second);
 | 
			
		||||
		}else{
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			// stop report timer
 | 
			
		||||
			reportAttrTimerStop();
 | 
			
		||||
		}
 | 
			
		||||
@ -235,7 +234,8 @@ void app_task(void)
 | 
			
		||||
{
 | 
			
		||||
	app_key_handler();
 | 
			
		||||
	localPermitJoinState();
 | 
			
		||||
	if(BDB_STATE_GET() == BDB_STATE_IDLE){
 | 
			
		||||
	if (BDB_STATE_GET() == BDB_STATE_IDLE)
 | 
			
		||||
	{
 | 
			
		||||
		// factroyRst_handler();
 | 
			
		||||
 | 
			
		||||
		report_handler();
 | 
			
		||||
@ -296,7 +296,8 @@ void user_init(bool isRetention)
 | 
			
		||||
	ev_on_poll(EV_POLL_IDLE, app_task);
 | 
			
		||||
 | 
			
		||||
	/* Read the pre-install code from NV */
 | 
			
		||||
	if(bdb_preInstallCodeLoad(&gLightCtx.tcLinkKey.keyType, gLightCtx.tcLinkKey.key) == RET_OK){
 | 
			
		||||
	if (bdb_preInstallCodeLoad(&gLightCtx.tcLinkKey.keyType, gLightCtx.tcLinkKey.key) == RET_OK)
 | 
			
		||||
	{
 | 
			
		||||
		g_bdbCommissionSetting.linkKey.tcLinkKey.keyType = gLightCtx.tcLinkKey.keyType;
 | 
			
		||||
		g_bdbCommissionSetting.linkKey.tcLinkKey.key = gLightCtx.tcLinkKey.key;
 | 
			
		||||
	}
 | 
			
		||||
@ -311,4 +312,3 @@ void user_init(bool isRetention)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* __PROJECT_TL_DIMMABLE_LIGHT__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -24,8 +24,6 @@
 | 
			
		||||
#ifndef _SAMPLE_LIGHT_H_
 | 
			
		||||
#define _SAMPLE_LIGHT_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * CONSTANT
 | 
			
		||||
 */
 | 
			
		||||
@ -35,13 +33,15 @@
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u8 keyType; /* ERTIFICATION_KEY or MASTER_KEY key for touch-link or distribute network
 | 
			
		||||
				 SS_UNIQUE_LINK_KEY or SS_GLOBAL_LINK_KEY for distribute network */
 | 
			
		||||
	u8 key[16]; /* the key used */
 | 
			
		||||
} app_linkKey_info_t;
 | 
			
		||||
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	ev_timer_event_t *timerLedEvt;
 | 
			
		||||
	u32 keyPressedTime;
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,8 @@ typedef struct{
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Defined for basic cluster attributes
 | 
			
		||||
 */
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u8 zclVersion;
 | 
			
		||||
	u8 appVersion;
 | 
			
		||||
	u8 stackVersion;
 | 
			
		||||
@ -76,21 +77,24 @@ typedef struct{
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Defined for identify cluster attributes
 | 
			
		||||
 */
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u16 identifyTime;
 | 
			
		||||
} zcl_identifyAttr_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Defined for group cluster attributes
 | 
			
		||||
 */
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u8 nameSupport;
 | 
			
		||||
} zcl_groupAttr_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Defined for scene cluster attributes
 | 
			
		||||
 */
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u8 sceneCount;
 | 
			
		||||
	u8 currentScene;
 | 
			
		||||
	u8 nameSupport;
 | 
			
		||||
@ -101,7 +105,8 @@ typedef struct{
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Defined for on/off cluster attributes
 | 
			
		||||
 */
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u16 onTime;
 | 
			
		||||
	u16 offWaitTime;
 | 
			
		||||
	u8 startUpOnOff;
 | 
			
		||||
@ -112,7 +117,8 @@ typedef struct{
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Defined for level cluster attributes
 | 
			
		||||
 */
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u16 remainingTime;
 | 
			
		||||
	u8 curLevel;
 | 
			
		||||
	u8 startUpCurrentLevel;
 | 
			
		||||
@ -121,7 +127,8 @@ typedef struct{
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Defined for color control cluster attributes
 | 
			
		||||
 */
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u8 colorMode;
 | 
			
		||||
	u8 options;
 | 
			
		||||
	u8 enhancedColorMode;
 | 
			
		||||
@ -146,7 +153,8 @@ typedef struct{
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Defined for saving on/off attributes
 | 
			
		||||
 */
 | 
			
		||||
typedef struct {
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u8 onOff;
 | 
			
		||||
	u8 startUpOnOff;
 | 
			
		||||
} zcl_nv_onOff_t;
 | 
			
		||||
@ -154,7 +162,8 @@ typedef struct {
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Defined for saving level attributes
 | 
			
		||||
 */
 | 
			
		||||
typedef struct {
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u8 curLevel;
 | 
			
		||||
	u8 startUpCurLevel;
 | 
			
		||||
} zcl_nv_level_t;
 | 
			
		||||
@ -162,7 +171,8 @@ typedef struct {
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief Defined for saving color control attributes
 | 
			
		||||
 */
 | 
			
		||||
typedef struct {
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	u8 currentHue;
 | 
			
		||||
	u8 currentSaturation;
 | 
			
		||||
	u16 colorTemperatureMireds;
 | 
			
		||||
@ -176,7 +186,6 @@ extern app_ctx_t gLightCtx;
 | 
			
		||||
extern bdb_commissionSetting_t g_bdbCommissionSetting;
 | 
			
		||||
extern bdb_appCb_t g_zbDemoBdbCb;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern u8 SAMPLELIGHT_CB_CLUSTER_NUM;
 | 
			
		||||
extern const zcl_specClusterInfo_t g_sampleLightClusterList[];
 | 
			
		||||
extern const af_simple_descriptor_t sampleLight_simpleDesc;
 | 
			
		||||
 | 
			
		||||
@ -39,17 +39,14 @@
 | 
			
		||||
#define PWM_FULL_DUTYCYCLE 100
 | 
			
		||||
#define PMW_MAX_TICK (PWM_CLOCK_SOURCE / PWM_FREQUENCY)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * GLOBAL VARIABLES
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
@ -132,13 +129,16 @@ void hwLight_init(void)
 | 
			
		||||
 */
 | 
			
		||||
void hwLight_onOffUpdate(u8 onOff)
 | 
			
		||||
{
 | 
			
		||||
	if(onOff){
 | 
			
		||||
	if (onOff)
 | 
			
		||||
	{
 | 
			
		||||
		drv_pwm_start(R_LIGHT_PWM_CHANNEL);
 | 
			
		||||
		drv_pwm_start(G_LIGHT_PWM_CHANNEL);
 | 
			
		||||
		drv_pwm_start(B_LIGHT_PWM_CHANNEL);
 | 
			
		||||
		drv_pwm_start(COOL_LIGHT_PWM_CHANNEL);
 | 
			
		||||
		drv_pwm_start(WARM_LIGHT_PWM_CHANNEL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		drv_pwm_stop(R_LIGHT_PWM_CHANNEL);
 | 
			
		||||
		drv_pwm_stop(G_LIGHT_PWM_CHANNEL);
 | 
			
		||||
		drv_pwm_stop(B_LIGHT_PWM_CHANNEL);
 | 
			
		||||
@ -147,7 +147,6 @@ void hwLight_onOffUpdate(u8 onOff)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
 * @fn      hwLight_levelUpdate
 | 
			
		||||
 *
 | 
			
		||||
@ -242,16 +241,20 @@ void hsvToRGB(u8 hue, u8 saturation, u8 level, u8 *R, u8 *G, u8 *B)
 | 
			
		||||
	u8 rS = saturation;
 | 
			
		||||
	u8 rV = level;
 | 
			
		||||
 | 
			
		||||
	if(saturation == 0){
 | 
			
		||||
	if (saturation == 0)
 | 
			
		||||
	{
 | 
			
		||||
		*R = rV;
 | 
			
		||||
		*G = rV;
 | 
			
		||||
		*B = rV;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(rHue < 360){
 | 
			
		||||
	if (rHue < 360)
 | 
			
		||||
	{
 | 
			
		||||
		region = rHue / 60;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		region = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -261,27 +264,38 @@ void hsvToRGB(u8 hue, u8 saturation, u8 level, u8 *R, u8 *G, u8 *B)
 | 
			
		||||
	q = (rV * (255 - ((rS * remainder) >> 8))) >> 8;
 | 
			
		||||
	t = (rV * (255 - ((rS * (255 - remainder)) >> 8))) >> 8;
 | 
			
		||||
 | 
			
		||||
    if (region == 0) {
 | 
			
		||||
	if (region == 0)
 | 
			
		||||
	{
 | 
			
		||||
		*R = rV;
 | 
			
		||||
		*G = t;
 | 
			
		||||
		*B = p;
 | 
			
		||||
    } else if (region == 1) {
 | 
			
		||||
	}
 | 
			
		||||
	else if (region == 1)
 | 
			
		||||
	{
 | 
			
		||||
		*R = q;
 | 
			
		||||
		*G = rV;
 | 
			
		||||
		*B = p;
 | 
			
		||||
    } else if (region == 2) {
 | 
			
		||||
	}
 | 
			
		||||
	else if (region == 2)
 | 
			
		||||
	{
 | 
			
		||||
		*R = p;
 | 
			
		||||
		*G = rV;
 | 
			
		||||
		*B = t;
 | 
			
		||||
    } else if (region == 3) {
 | 
			
		||||
	}
 | 
			
		||||
	else if (region == 3)
 | 
			
		||||
	{
 | 
			
		||||
		*R = p;
 | 
			
		||||
		*G = q;
 | 
			
		||||
		*B = rV;
 | 
			
		||||
    } else if (region == 4) {
 | 
			
		||||
	}
 | 
			
		||||
	else if (region == 4)
 | 
			
		||||
	{
 | 
			
		||||
		*R = t;
 | 
			
		||||
		*G = p;
 | 
			
		||||
		*B = rV;
 | 
			
		||||
    } else {
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		*R = rV;
 | 
			
		||||
		*G = p;
 | 
			
		||||
		*B = q;
 | 
			
		||||
@ -312,7 +326,8 @@ void hwLight_colorUpdate_HSV2RGB(u8 hue, u8 saturation, u8 level)
 | 
			
		||||
	hwLight_colorUpdate_RGB(R, G, B);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void hwLight_colorUpdate_RGB(u8 R, u8 G, u8 B) {
 | 
			
		||||
void hwLight_colorUpdate_RGB(u8 R, u8 G, u8 B)
 | 
			
		||||
{
 | 
			
		||||
	u16 gammaCorrectR = ((u16)R * R) / ZCL_LEVEL_ATTR_MAX_LEVEL;
 | 
			
		||||
	u16 gammaCorrectG = ((u16)G * G) / ZCL_LEVEL_ATTR_MAX_LEVEL;
 | 
			
		||||
	u16 gammaCorrectB = ((u16)B * B) / ZCL_LEVEL_ATTR_MAX_LEVEL;
 | 
			
		||||
@ -324,15 +339,19 @@ void hwLight_colorUpdate_RGB(u8 R, u8 G, u8 B) {
 | 
			
		||||
	pwmSetDuty(WARM_LIGHT_PWM_CHANNEL, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static float ENFORCE_BOUNDS_FLOAT(float lowerBound, float num, float upperBound) {
 | 
			
		||||
		return num < lowerBound ? lowerBound : num > upperBound ? upperBound : num;
 | 
			
		||||
static float ENFORCE_BOUNDS_FLOAT(float lowerBound, float num, float upperBound)
 | 
			
		||||
{
 | 
			
		||||
	return num < lowerBound ? lowerBound : num > upperBound ? upperBound
 | 
			
		||||
															: num;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float LINEAR_TO_SRGB_GAMMA_CORRECTION(const float part) {
 | 
			
		||||
float LINEAR_TO_SRGB_GAMMA_CORRECTION(const float part)
 | 
			
		||||
{
 | 
			
		||||
	return part <= 0.0031308 ? 12.92 * part : 1.055 * pow(part, 1.0 / 2.4) - 0.055;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void hwLight_colorUpdate_XY2RGB(u16 xI, u16 yI, u8 level) {
 | 
			
		||||
void hwLight_colorUpdate_XY2RGB(u16 xI, u16 yI, u8 level)
 | 
			
		||||
{
 | 
			
		||||
	float x = xI / 65536.f;
 | 
			
		||||
	float y = yI / 65536.f;
 | 
			
		||||
 | 
			
		||||
@ -413,26 +432,37 @@ void light_fresh(void)
 | 
			
		||||
 */
 | 
			
		||||
void light_applyUpdate(u8 *curLevel, u16 *curLevel256, s32 *stepLevel256, u16 *remainingTime, u8 minLevel, u8 maxLevel, bool wrap)
 | 
			
		||||
{
 | 
			
		||||
	if((*stepLevel256 > 0) && ((((s32)*curLevel256 + *stepLevel256) / 256) > maxLevel)){
 | 
			
		||||
	if ((*stepLevel256 > 0) && ((((s32)*curLevel256 + *stepLevel256) / 256) > maxLevel))
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel256 = (wrap) ? ((u16)minLevel * 256 + ((*curLevel256 + *stepLevel256) - (u16)maxLevel * 256) - 256)
 | 
			
		||||
							  : ((u16)maxLevel * 256);
 | 
			
		||||
	}else if((*stepLevel256 < 0) && ((((s32)*curLevel256 + *stepLevel256) / 256) < minLevel)){
 | 
			
		||||
	}
 | 
			
		||||
	else if ((*stepLevel256 < 0) && ((((s32)*curLevel256 + *stepLevel256) / 256) < minLevel))
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel256 = (wrap) ? ((u16)maxLevel * 256 - ((u16)minLevel * 256 - ((s32)*curLevel256 + *stepLevel256)) + 256)
 | 
			
		||||
							  : ((u16)minLevel * 256);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel256 += *stepLevel256;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(*stepLevel256 > 0){
 | 
			
		||||
	if (*stepLevel256 > 0)
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel = (*curLevel256 + 127) / 256;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel = *curLevel256 / 256;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(*remainingTime == 0){
 | 
			
		||||
	if (*remainingTime == 0)
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel256 = ((u16)*curLevel) * 256;
 | 
			
		||||
		*stepLevel256 = 0;
 | 
			
		||||
	}else if(*remainingTime != 0xFFFF){
 | 
			
		||||
	}
 | 
			
		||||
	else if (*remainingTime != 0xFFFF)
 | 
			
		||||
	{
 | 
			
		||||
		*remainingTime = *remainingTime - 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -450,26 +480,37 @@ void light_applyUpdate(u8 *curLevel, u16 *curLevel256, s32 *stepLevel256, u16 *r
 | 
			
		||||
 */
 | 
			
		||||
void light_applyUpdate_16(u16 *curLevel, u32 *curLevel256, s32 *stepLevel256, u16 *remainingTime, u16 minLevel, u16 maxLevel, bool wrap)
 | 
			
		||||
{
 | 
			
		||||
	if((*stepLevel256 > 0) && ((((s32)*curLevel256 + *stepLevel256) / 256) > maxLevel)){
 | 
			
		||||
	if ((*stepLevel256 > 0) && ((((s32)*curLevel256 + *stepLevel256) / 256) > maxLevel))
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel256 = (wrap) ? ((u32)minLevel * 256 + ((*curLevel256 + *stepLevel256) - (u32)maxLevel * 256) - 256)
 | 
			
		||||
							  : ((u32)maxLevel * 256);
 | 
			
		||||
	}else if((*stepLevel256 < 0) && ((((s32)*curLevel256 + *stepLevel256) / 256) < minLevel)){
 | 
			
		||||
	}
 | 
			
		||||
	else if ((*stepLevel256 < 0) && ((((s32)*curLevel256 + *stepLevel256) / 256) < minLevel))
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel256 = (wrap) ? ((u32)maxLevel * 256 - ((u32)minLevel * 256 - ((s32)*curLevel256 + *stepLevel256)) + 256)
 | 
			
		||||
							  : ((u32)minLevel * 256);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel256 += *stepLevel256;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(*stepLevel256 > 0){
 | 
			
		||||
	if (*stepLevel256 > 0)
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel = (*curLevel256 + 127) / 256;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel = *curLevel256 / 256;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(*remainingTime == 0){
 | 
			
		||||
	if (*remainingTime == 0)
 | 
			
		||||
	{
 | 
			
		||||
		*curLevel256 = ((u32)*curLevel) * 256;
 | 
			
		||||
		*stepLevel256 = 0;
 | 
			
		||||
	}else if(*remainingTime != 0xFFFF){
 | 
			
		||||
	}
 | 
			
		||||
	else if (*remainingTime != 0xFFFF)
 | 
			
		||||
	{
 | 
			
		||||
		*remainingTime = *remainingTime - 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -489,13 +530,19 @@ s32 light_blink_TimerEvtCb(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	u32 interval = 0;
 | 
			
		||||
 | 
			
		||||
	if(gLightCtx.sta == gLightCtx.oriSta){
 | 
			
		||||
		if(gLightCtx.times){
 | 
			
		||||
	if (gLightCtx.sta == gLightCtx.oriSta)
 | 
			
		||||
	{
 | 
			
		||||
		if (gLightCtx.times)
 | 
			
		||||
		{
 | 
			
		||||
			gLightCtx.times--;
 | 
			
		||||
			if(gLightCtx.times <= 0){
 | 
			
		||||
				if(gLightCtx.oriSta){
 | 
			
		||||
			if (gLightCtx.times <= 0)
 | 
			
		||||
			{
 | 
			
		||||
				if (gLightCtx.oriSta)
 | 
			
		||||
				{
 | 
			
		||||
					hwLight_onOffUpdate(ZCL_CMD_ONOFF_ON);
 | 
			
		||||
				}else{
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					hwLight_onOffUpdate(ZCL_CMD_ONOFF_OFF);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
@ -506,10 +553,13 @@ s32 light_blink_TimerEvtCb(void *arg)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	gLightCtx.sta = !gLightCtx.sta;
 | 
			
		||||
	if(gLightCtx.sta){
 | 
			
		||||
	if (gLightCtx.sta)
 | 
			
		||||
	{
 | 
			
		||||
		hwLight_onOffUpdate(ZCL_CMD_ONOFF_ON);
 | 
			
		||||
		interval = gLightCtx.ledOnTime;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		hwLight_onOffUpdate(ZCL_CMD_ONOFF_OFF);
 | 
			
		||||
		interval = gLightCtx.ledOffTime;
 | 
			
		||||
	}
 | 
			
		||||
@ -536,12 +586,16 @@ void light_blink_start(u8 times, u16 ledOnTime, u16 ledOffTime)
 | 
			
		||||
	gLightCtx.oriSta = pOnoff->onOff;
 | 
			
		||||
	gLightCtx.times = times;
 | 
			
		||||
 | 
			
		||||
	if(!gLightCtx.timerLedEvt){
 | 
			
		||||
		if(gLightCtx.oriSta){
 | 
			
		||||
	if (!gLightCtx.timerLedEvt)
 | 
			
		||||
	{
 | 
			
		||||
		if (gLightCtx.oriSta)
 | 
			
		||||
		{
 | 
			
		||||
			hwLight_onOffUpdate(ZCL_CMD_ONOFF_OFF);
 | 
			
		||||
			gLightCtx.sta = 0;
 | 
			
		||||
			interval = ledOffTime;
 | 
			
		||||
		}else{
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			hwLight_onOffUpdate(ZCL_CMD_ONOFF_ON);
 | 
			
		||||
			gLightCtx.sta = 1;
 | 
			
		||||
			interval = ledOnTime;
 | 
			
		||||
@ -564,13 +618,17 @@ void light_blink_start(u8 times, u16 ledOnTime, u16 ledOffTime)
 | 
			
		||||
 */
 | 
			
		||||
void light_blink_stop(void)
 | 
			
		||||
{
 | 
			
		||||
	if(gLightCtx.timerLedEvt){
 | 
			
		||||
	if (gLightCtx.timerLedEvt)
 | 
			
		||||
	{
 | 
			
		||||
		TL_ZB_TIMER_CANCEL(&gLightCtx.timerLedEvt);
 | 
			
		||||
 | 
			
		||||
		gLightCtx.times = 0;
 | 
			
		||||
		if(gLightCtx.oriSta){
 | 
			
		||||
		if (gLightCtx.oriSta)
 | 
			
		||||
		{
 | 
			
		||||
			hwLight_onOffUpdate(ZCL_CMD_ONOFF_ON);
 | 
			
		||||
		}else{
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			hwLight_onOffUpdate(ZCL_CMD_ONOFF_OFF);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -24,12 +24,10 @@
 | 
			
		||||
#ifndef _SAMPLE_LIGHT_CTRL_H_
 | 
			
		||||
#define _SAMPLE_LIGHT_CTRL_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * CONSTANT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -30,18 +30,26 @@
 | 
			
		||||
#include "zcl_include.h"
 | 
			
		||||
#include "sampleLight.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * LOCAL CONSTANTS
 | 
			
		||||
 */
 | 
			
		||||
#ifndef ZCL_BASIC_MFG_NAME
 | 
			
		||||
#define ZCL_BASIC_MFG_NAME     		{8,'G','L','E','D','O','P','T','O'}
 | 
			
		||||
#define ZCL_BASIC_MFG_NAME                        \
 | 
			
		||||
	{                                             \
 | 
			
		||||
		8, 'G', 'L', 'E', 'D', 'O', 'P', 'T', 'O' \
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef ZCL_BASIC_MODEL_ID
 | 
			
		||||
#define ZCL_BASIC_MODEL_ID	   		{9,'G','L','-','C','-','0','0','8','P'}
 | 
			
		||||
#define ZCL_BASIC_MODEL_ID                             \
 | 
			
		||||
	{                                                  \
 | 
			
		||||
		9, 'G', 'L', '-', 'C', '-', '0', '0', '8', 'P' \
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef ZCL_BASIC_SW_BUILD_ID
 | 
			
		||||
#define ZCL_BASIC_SW_BUILD_ID     	{8,'2','0','2','2','0','4','0','1'}
 | 
			
		||||
#define ZCL_BASIC_SW_BUILD_ID                     \
 | 
			
		||||
	{                                             \
 | 
			
		||||
		8, '2', '0', '2', '2', '0', '4', '0', '1' \
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define COLOR_TEMPERATURE_PHYSICAL_MIN 0x009A // 6500K
 | 
			
		||||
@ -52,7 +60,6 @@
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * GLOBAL VARIABLES
 | 
			
		||||
 */
 | 
			
		||||
@ -149,7 +156,6 @@ const zclAttrInfo_t basic_attrTbl[] =
 | 
			
		||||
 | 
			
		||||
#define ZCL_BASIC_ATTR_NUM sizeof(basic_attrTbl) / sizeof(zclAttrInfo_t)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Identify */
 | 
			
		||||
zcl_identifyAttr_t g_zcl_identifyAttrs =
 | 
			
		||||
	{
 | 
			
		||||
@ -320,12 +326,10 @@ const zcl_specClusterInfo_t g_sampleLightClusterList[] =
 | 
			
		||||
 | 
			
		||||
u8 SAMPLELIGHT_CB_CLUSTER_NUM = (sizeof(g_sampleLightClusterList) / sizeof(g_sampleLightClusterList[0]));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
 * @fn      zcl_onOffAttr_save
 | 
			
		||||
 *
 | 
			
		||||
@ -344,14 +348,18 @@ nv_sts_t zcl_onOffAttr_save(void)
 | 
			
		||||
 | 
			
		||||
	st = nv_flashReadNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_ON_OFF, sizeof(zcl_nv_onOff_t), (u8 *)&zcl_nv_onOff);
 | 
			
		||||
 | 
			
		||||
	if(st == NV_SUCC){
 | 
			
		||||
		if((zcl_nv_onOff.onOff != g_zcl_onOffAttrs.onOff) || (zcl_nv_onOff.startUpOnOff != g_zcl_onOffAttrs.startUpOnOff)){
 | 
			
		||||
	if (st == NV_SUCC)
 | 
			
		||||
	{
 | 
			
		||||
		if ((zcl_nv_onOff.onOff != g_zcl_onOffAttrs.onOff) || (zcl_nv_onOff.startUpOnOff != g_zcl_onOffAttrs.startUpOnOff))
 | 
			
		||||
		{
 | 
			
		||||
			zcl_nv_onOff.onOff = g_zcl_onOffAttrs.onOff;
 | 
			
		||||
			zcl_nv_onOff.startUpOnOff = g_zcl_onOffAttrs.startUpOnOff;
 | 
			
		||||
 | 
			
		||||
			st = nv_flashWriteNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_ON_OFF, sizeof(zcl_nv_onOff_t), (u8 *)&zcl_nv_onOff);
 | 
			
		||||
		}
 | 
			
		||||
	}else if(st == NV_ITEM_NOT_FOUND){
 | 
			
		||||
	}
 | 
			
		||||
	else if (st == NV_ITEM_NOT_FOUND)
 | 
			
		||||
	{
 | 
			
		||||
		zcl_nv_onOff.onOff = g_zcl_onOffAttrs.onOff;
 | 
			
		||||
		zcl_nv_onOff.startUpOnOff = g_zcl_onOffAttrs.startUpOnOff;
 | 
			
		||||
 | 
			
		||||
@ -382,7 +390,8 @@ nv_sts_t zcl_onOffAttr_restore(void)
 | 
			
		||||
 | 
			
		||||
	st = nv_flashReadNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_ON_OFF, sizeof(zcl_nv_onOff_t), (u8 *)&zcl_nv_onOff);
 | 
			
		||||
 | 
			
		||||
	if(st == NV_SUCC){
 | 
			
		||||
	if (st == NV_SUCC)
 | 
			
		||||
	{
 | 
			
		||||
		g_zcl_onOffAttrs.onOff = zcl_nv_onOff.onOff;
 | 
			
		||||
		g_zcl_onOffAttrs.startUpOnOff = zcl_nv_onOff.startUpOnOff;
 | 
			
		||||
	}
 | 
			
		||||
@ -411,14 +420,18 @@ nv_sts_t zcl_levelAttr_save(void)
 | 
			
		||||
 | 
			
		||||
	st = nv_flashReadNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_LEVEL, sizeof(zcl_nv_level_t), (u8 *)&zcl_nv_level);
 | 
			
		||||
 | 
			
		||||
	if(st == NV_SUCC){
 | 
			
		||||
		if((zcl_nv_level.curLevel != g_zcl_levelAttrs.curLevel) || (zcl_nv_level.startUpCurLevel != g_zcl_levelAttrs.startUpCurrentLevel)){
 | 
			
		||||
	if (st == NV_SUCC)
 | 
			
		||||
	{
 | 
			
		||||
		if ((zcl_nv_level.curLevel != g_zcl_levelAttrs.curLevel) || (zcl_nv_level.startUpCurLevel != g_zcl_levelAttrs.startUpCurrentLevel))
 | 
			
		||||
		{
 | 
			
		||||
			zcl_nv_level.curLevel = g_zcl_levelAttrs.curLevel;
 | 
			
		||||
			zcl_nv_level.startUpCurLevel = g_zcl_levelAttrs.startUpCurrentLevel;
 | 
			
		||||
 | 
			
		||||
			st = nv_flashWriteNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_LEVEL, sizeof(zcl_nv_level_t), (u8 *)&zcl_nv_level);
 | 
			
		||||
		}
 | 
			
		||||
	}else if(st == NV_ITEM_NOT_FOUND){
 | 
			
		||||
	}
 | 
			
		||||
	else if (st == NV_ITEM_NOT_FOUND)
 | 
			
		||||
	{
 | 
			
		||||
		zcl_nv_level.curLevel = g_zcl_levelAttrs.curLevel;
 | 
			
		||||
		zcl_nv_level.startUpCurLevel = g_zcl_levelAttrs.startUpCurrentLevel;
 | 
			
		||||
 | 
			
		||||
@ -449,7 +462,8 @@ nv_sts_t zcl_levelAttr_restore(void)
 | 
			
		||||
 | 
			
		||||
	st = nv_flashReadNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_LEVEL, sizeof(zcl_nv_level_t), (u8 *)&zcl_nv_level);
 | 
			
		||||
 | 
			
		||||
	if(st == NV_SUCC){
 | 
			
		||||
	if (st == NV_SUCC)
 | 
			
		||||
	{
 | 
			
		||||
		g_zcl_levelAttrs.curLevel = zcl_nv_level.curLevel;
 | 
			
		||||
		g_zcl_levelAttrs.startUpCurrentLevel = zcl_nv_level.startUpCurLevel;
 | 
			
		||||
	}
 | 
			
		||||
@ -479,10 +493,10 @@ nv_sts_t zcl_colorCtrlAttr_save(void)
 | 
			
		||||
 | 
			
		||||
	st = nv_flashReadNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_COLOR_CTRL, sizeof(zcl_nv_colorCtrl_t), (u8 *)&zcl_nv_colorCtrl);
 | 
			
		||||
 | 
			
		||||
	if(st == NV_SUCC){
 | 
			
		||||
		if((zcl_nv_colorCtrl.currentHue != g_zcl_colorCtrlAttrs.currentHue) || (zcl_nv_colorCtrl.currentSaturation != g_zcl_colorCtrlAttrs.currentSaturation)
 | 
			
		||||
		|| (zcl_nv_colorCtrl.colorTemperatureMireds != g_zcl_colorCtrlAttrs.colorTemperatureMireds) 
 | 
			
		||||
		|| (zcl_nv_colorCtrl.startUpColorTemperatureMireds != g_zcl_colorCtrlAttrs.startUpColorTemperatureMireds)){
 | 
			
		||||
	if (st == NV_SUCC)
 | 
			
		||||
	{
 | 
			
		||||
		if ((zcl_nv_colorCtrl.currentHue != g_zcl_colorCtrlAttrs.currentHue) || (zcl_nv_colorCtrl.currentSaturation != g_zcl_colorCtrlAttrs.currentSaturation) || (zcl_nv_colorCtrl.colorTemperatureMireds != g_zcl_colorCtrlAttrs.colorTemperatureMireds) || (zcl_nv_colorCtrl.startUpColorTemperatureMireds != g_zcl_colorCtrlAttrs.startUpColorTemperatureMireds))
 | 
			
		||||
		{
 | 
			
		||||
			zcl_nv_colorCtrl.currentHue = g_zcl_colorCtrlAttrs.currentHue;
 | 
			
		||||
			zcl_nv_colorCtrl.currentSaturation = g_zcl_colorCtrlAttrs.currentSaturation;
 | 
			
		||||
			zcl_nv_colorCtrl.colorTemperatureMireds = g_zcl_colorCtrlAttrs.colorTemperatureMireds;
 | 
			
		||||
@ -490,7 +504,9 @@ nv_sts_t zcl_colorCtrlAttr_save(void)
 | 
			
		||||
 | 
			
		||||
			needSave = TRUE;
 | 
			
		||||
		}
 | 
			
		||||
	}else if(st == NV_ITEM_NOT_FOUND){
 | 
			
		||||
	}
 | 
			
		||||
	else if (st == NV_ITEM_NOT_FOUND)
 | 
			
		||||
	{
 | 
			
		||||
		zcl_nv_colorCtrl.currentHue = g_zcl_colorCtrlAttrs.currentHue;
 | 
			
		||||
		zcl_nv_colorCtrl.currentSaturation = g_zcl_colorCtrlAttrs.currentSaturation;
 | 
			
		||||
		zcl_nv_colorCtrl.colorTemperatureMireds = g_zcl_colorCtrlAttrs.colorTemperatureMireds;
 | 
			
		||||
@ -499,8 +515,8 @@ nv_sts_t zcl_colorCtrlAttr_save(void)
 | 
			
		||||
		needSave = TRUE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if(needSave){
 | 
			
		||||
	if (needSave)
 | 
			
		||||
	{
 | 
			
		||||
		st = nv_flashWriteNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_COLOR_CTRL, sizeof(zcl_nv_colorCtrl_t), (u8 *)&zcl_nv_colorCtrl);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -527,7 +543,8 @@ nv_sts_t zcl_colorCtrlAttr_restore(void)
 | 
			
		||||
 | 
			
		||||
	st = nv_flashReadNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_COLOR_CTRL, sizeof(zcl_nv_colorCtrl_t), (u8 *)&zcl_nv_colorCtrl);
 | 
			
		||||
 | 
			
		||||
	if(st == NV_SUCC){
 | 
			
		||||
	if (st == NV_SUCC)
 | 
			
		||||
	{
 | 
			
		||||
		g_zcl_colorCtrlAttrs.currentHue = zcl_nv_colorCtrl.currentHue;
 | 
			
		||||
		g_zcl_colorCtrlAttrs.currentSaturation = zcl_nv_colorCtrl.currentSaturation;
 | 
			
		||||
		g_zcl_colorCtrlAttrs.colorTemperatureMireds = zcl_nv_colorCtrl.colorTemperatureMireds;
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,6 @@
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief  Working channel
 | 
			
		||||
 *          Valid value: 11 ~ 26
 | 
			
		||||
@ -40,7 +39,6 @@
 | 
			
		||||
 */
 | 
			
		||||
#define SECURITY_ENABLE 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * Following parameter need user to adjust according the app requirement
 | 
			
		||||
 */
 | 
			
		||||
@ -62,7 +60,6 @@
 | 
			
		||||
 */
 | 
			
		||||
#define ZCL_SCENE_TABLE_NUM 8
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *  @brief  APS: MAX number of groups size in the group table
 | 
			
		||||
 *          In each group entry, there is 8 endpoints existed.
 | 
			
		||||
@ -74,7 +71,6 @@
 | 
			
		||||
 */
 | 
			
		||||
#define APS_BINDING_TABLE_NUM 8
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * Following configuration will calculated automatically
 | 
			
		||||
 */
 | 
			
		||||
@ -90,4 +86,3 @@
 | 
			
		||||
#elif (END_DEVICE)
 | 
			
		||||
#define ZB_ED_ROLE 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -39,12 +39,10 @@
 | 
			
		||||
 * LOCAL CONSTANTS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * LOCAL FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
@ -53,7 +51,6 @@
 | 
			
		||||
 * GLOBAL VARIABLES
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * LOCAL VARIABLES
 | 
			
		||||
 */
 | 
			
		||||
@ -74,13 +71,15 @@ static void afTest_testReqPrc(apsdeDataInd_t *pApsdeInd)
 | 
			
		||||
 | 
			
		||||
	u8 dataLen = 50;
 | 
			
		||||
	u8 *pBuf = (u8 *)ev_buf_allocate(dataLen);
 | 
			
		||||
	if(pBuf){
 | 
			
		||||
	if (pBuf)
 | 
			
		||||
	{
 | 
			
		||||
		u8 *pData = pBuf;
 | 
			
		||||
 | 
			
		||||
		*pData++ = LO_UINT16(g_afTest_rcvReqCnt);
 | 
			
		||||
		*pData++ = HI_UINT16(g_afTest_rcvReqCnt);
 | 
			
		||||
 | 
			
		||||
		for(u8 i = 0; i < dataLen - 2; i++){
 | 
			
		||||
		for (u8 i = 0; i < dataLen - 2; i++)
 | 
			
		||||
		{
 | 
			
		||||
			*pData++ = i;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -115,7 +114,8 @@ void afTest_rx_handler(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	apsdeDataInd_t *pApsdeInd = (apsdeDataInd_t *)arg;
 | 
			
		||||
 | 
			
		||||
	switch(pApsdeInd->indInfo.cluster_id){
 | 
			
		||||
	switch (pApsdeInd->indInfo.cluster_id)
 | 
			
		||||
	{
 | 
			
		||||
	case ZCL_CLUSTER_TELINK_SDK_TEST_CLEAR_REQ:
 | 
			
		||||
		g_afTest_rcvReqCnt = 0;
 | 
			
		||||
		afTest_testClearReqPrc(pApsdeInd);
 | 
			
		||||
@ -138,7 +138,6 @@ void afTest_rx_handler(void *arg)
 | 
			
		||||
void afTest_dataSendConfirm(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	//	apsdeDataConf_t *pApsDataCnf = (apsdeDataConf_t *)arg;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* AF_TEST_ENABLE */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										140
									
								
								zb_appCb.c
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								zb_appCb.c
									
									
									
									
									
								
							@ -43,7 +43,6 @@
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * LOCAL FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
@ -51,7 +50,6 @@ void zbdemo_bdbInitCb(u8 status, u8 joinedNetwork);
 | 
			
		||||
void zbdemo_bdbCommissioningCb(u8 status, void *arg);
 | 
			
		||||
void zbdemo_bdbIdentifyCb(u8 endpoint, u16 srcAddr, u16 identifyTime);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * GLOBAL VARIABLES
 | 
			
		||||
 */
 | 
			
		||||
@ -77,8 +75,10 @@ ev_timer_event_t *heartTimerEvt = NULL;
 | 
			
		||||
 * FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
#if DEBUG_HEART
 | 
			
		||||
static s32 heartTimerCb(void *arg){
 | 
			
		||||
	if(heartInterval == 0){
 | 
			
		||||
static s32 heartTimerCb(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	if (heartInterval == 0)
 | 
			
		||||
	{
 | 
			
		||||
		heartTimerEvt = NULL;
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
@ -89,14 +89,16 @@ static s32 heartTimerCb(void *arg){
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
s32 sampleLight_bdbNetworkSteerStart(void *arg){
 | 
			
		||||
s32 sampleLight_bdbNetworkSteerStart(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	bdb_networkSteerStart();
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if FIND_AND_BIND_SUPPORT
 | 
			
		||||
s32 sampleLight_bdbFindAndBindStart(void *arg){
 | 
			
		||||
s32 sampleLight_bdbFindAndBindStart(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	bdb_findAndBindStart(BDB_COMMISSIONING_ROLE_TARGET);
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
@ -114,34 +116,43 @@ s32 sampleLight_bdbFindAndBindStart(void *arg){
 | 
			
		||||
 *
 | 
			
		||||
 * @return  None
 | 
			
		||||
 */
 | 
			
		||||
void zbdemo_bdbInitCb(u8 status, u8 joinedNetwork){
 | 
			
		||||
	if(status == BDB_INIT_STATUS_SUCCESS){
 | 
			
		||||
void zbdemo_bdbInitCb(u8 status, u8 joinedNetwork)
 | 
			
		||||
{
 | 
			
		||||
	if (status == BDB_INIT_STATUS_SUCCESS)
 | 
			
		||||
	{
 | 
			
		||||
		/*
 | 
			
		||||
		 * start bdb commissioning
 | 
			
		||||
		 * */
 | 
			
		||||
		if(joinedNetwork){
 | 
			
		||||
		if (joinedNetwork)
 | 
			
		||||
		{
 | 
			
		||||
			heartInterval = 1000;
 | 
			
		||||
 | 
			
		||||
#ifdef ZCL_OTA
 | 
			
		||||
			ota_queryStart(OTA_PERIODIC_QUERY_INTERVAL);
 | 
			
		||||
#endif
 | 
			
		||||
		}else{
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			heartInterval = 500;
 | 
			
		||||
 | 
			
		||||
#if (!ZBHCI_EN)
 | 
			
		||||
			u16 jitter = 0;
 | 
			
		||||
			do{
 | 
			
		||||
			do
 | 
			
		||||
			{
 | 
			
		||||
				jitter = zb_random() % 0x0fff;
 | 
			
		||||
			} while (jitter == 0);
 | 
			
		||||
			TL_ZB_TIMER_SCHEDULE(sampleLight_bdbNetworkSteerStart, NULL, jitter);
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		heartInterval = 200;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#if DEBUG_HEART
 | 
			
		||||
	if(heartTimerEvt){
 | 
			
		||||
	if (heartTimerEvt)
 | 
			
		||||
	{
 | 
			
		||||
		TL_ZB_TIMER_CANCEL(&heartTimerEvt);
 | 
			
		||||
	}
 | 
			
		||||
	heartTimerEvt = TL_ZB_TIMER_SCHEDULE(heartTimerCb, NULL, heartInterval);
 | 
			
		||||
@ -159,12 +170,15 @@ void zbdemo_bdbInitCb(u8 status, u8 joinedNetwork){
 | 
			
		||||
 *
 | 
			
		||||
 * @return  None
 | 
			
		||||
 */
 | 
			
		||||
void zbdemo_bdbCommissioningCb(u8 status, void *arg){
 | 
			
		||||
	if(status == BDB_COMMISSION_STA_SUCCESS){
 | 
			
		||||
void zbdemo_bdbCommissioningCb(u8 status, void *arg)
 | 
			
		||||
{
 | 
			
		||||
	if (status == BDB_COMMISSION_STA_SUCCESS)
 | 
			
		||||
	{
 | 
			
		||||
		heartInterval = 1000;
 | 
			
		||||
 | 
			
		||||
#if FIND_AND_BIND_SUPPORT
 | 
			
		||||
	    if(!gLightCtx.bdbFindBindFlg){
 | 
			
		||||
		if (!gLightCtx.bdbFindBindFlg)
 | 
			
		||||
		{
 | 
			
		||||
			gLightCtx.bdbFindBindFlg = TRUE;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -179,31 +193,46 @@ void zbdemo_bdbCommissioningCb(u8 status, void *arg){
 | 
			
		||||
			TL_ZB_TIMER_SCHEDULE(sampleLight_bdbFindAndBindStart, NULL, 1000);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	}else if(status == BDB_COMMISSION_STA_IN_PROGRESS){
 | 
			
		||||
 | 
			
		||||
	}else if(status == BDB_COMMISSION_STA_NOT_AA_CAPABLE){
 | 
			
		||||
 | 
			
		||||
	}else if((status == BDB_COMMISSION_STA_NO_NETWORK)||(status == BDB_COMMISSION_STA_TCLK_EX_FAILURE)){
 | 
			
		||||
	}
 | 
			
		||||
	else if (status == BDB_COMMISSION_STA_IN_PROGRESS)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	else if (status == BDB_COMMISSION_STA_NOT_AA_CAPABLE)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	else if ((status == BDB_COMMISSION_STA_NO_NETWORK) || (status == BDB_COMMISSION_STA_TCLK_EX_FAILURE))
 | 
			
		||||
	{
 | 
			
		||||
		u16 jitter = 0;
 | 
			
		||||
		do{
 | 
			
		||||
		do
 | 
			
		||||
		{
 | 
			
		||||
			jitter = zb_random() % 0x0fff;
 | 
			
		||||
		} while (jitter == 0);
 | 
			
		||||
		TL_ZB_TIMER_SCHEDULE(sampleLight_bdbNetworkSteerStart, NULL, jitter);
 | 
			
		||||
	}else if(status == BDB_COMMISSION_STA_TARGET_FAILURE){
 | 
			
		||||
 | 
			
		||||
	}else if(status == BDB_COMMISSION_STA_FORMATION_FAILURE){
 | 
			
		||||
 | 
			
		||||
	}else if(status == BDB_COMMISSION_STA_NO_IDENTIFY_QUERY_RESPONSE){
 | 
			
		||||
 | 
			
		||||
	}else if(status == BDB_COMMISSION_STA_BINDING_TABLE_FULL){
 | 
			
		||||
 | 
			
		||||
	}else if(status == BDB_COMMISSION_STA_NO_SCAN_RESPONSE){
 | 
			
		||||
 | 
			
		||||
	}else if(status == BDB_COMMISSION_STA_NOT_PERMITTED){
 | 
			
		||||
 | 
			
		||||
	}else if(status == BDB_COMMISSION_STA_REJOIN_FAILURE){
 | 
			
		||||
	}
 | 
			
		||||
	else if (status == BDB_COMMISSION_STA_TARGET_FAILURE)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	else if (status == BDB_COMMISSION_STA_FORMATION_FAILURE)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	else if (status == BDB_COMMISSION_STA_NO_IDENTIFY_QUERY_RESPONSE)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	else if (status == BDB_COMMISSION_STA_BINDING_TABLE_FULL)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	else if (status == BDB_COMMISSION_STA_NO_SCAN_RESPONSE)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	else if (status == BDB_COMMISSION_STA_NOT_PERMITTED)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	else if (status == BDB_COMMISSION_STA_REJOIN_FAILURE)
 | 
			
		||||
	{
 | 
			
		||||
		zb_rejoinReq(NLME_REJOIN_METHOD_REJOIN, zb_apsChannelMaskGet());
 | 
			
		||||
	}else if(status == BDB_COMMISSION_STA_FORMATION_DONE){
 | 
			
		||||
	}
 | 
			
		||||
	else if (status == BDB_COMMISSION_STA_FORMATION_DONE)
 | 
			
		||||
	{
 | 
			
		||||
#if ZBHCI_EN
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
@ -212,36 +241,42 @@ void zbdemo_bdbCommissioningCb(u8 status, void *arg){
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern void sampleLight_zclIdentifyCmdHandler(u8 endpoint, u16 srcAddr, u16 identifyTime);
 | 
			
		||||
void zbdemo_bdbIdentifyCb(u8 endpoint, u16 srcAddr, u16 identifyTime){
 | 
			
		||||
void zbdemo_bdbIdentifyCb(u8 endpoint, u16 srcAddr, u16 identifyTime)
 | 
			
		||||
{
 | 
			
		||||
#if FIND_AND_BIND_SUPPORT
 | 
			
		||||
	sampleLight_zclIdentifyCmdHandler(endpoint, srcAddr, identifyTime);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef ZCL_OTA
 | 
			
		||||
void sampleLight_otaProcessMsgHandler(u8 evt, u8 status)
 | 
			
		||||
{
 | 
			
		||||
	if(evt == OTA_EVT_START){
 | 
			
		||||
		if(status == ZCL_STA_SUCCESS){
 | 
			
		||||
 | 
			
		||||
		}else{
 | 
			
		||||
 | 
			
		||||
	if (evt == OTA_EVT_START)
 | 
			
		||||
	{
 | 
			
		||||
		if (status == ZCL_STA_SUCCESS)
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
	}else if(evt == OTA_EVT_COMPLETE){
 | 
			
		||||
		if(status == ZCL_STA_SUCCESS){
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else if (evt == OTA_EVT_COMPLETE)
 | 
			
		||||
	{
 | 
			
		||||
		if (status == ZCL_STA_SUCCESS)
 | 
			
		||||
		{
 | 
			
		||||
			ota_mcuReboot();
 | 
			
		||||
		}else{
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			ota_queryStart(OTA_PERIODIC_QUERY_INTERVAL);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
s32 sampleLight_softReset(void *arg){
 | 
			
		||||
s32 sampleLight_softReset(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	SYSTEM_RESET();
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
@ -258,7 +293,8 @@ s32 sampleLight_softReset(void *arg){
 | 
			
		||||
 */
 | 
			
		||||
void sampleLight_leaveCnfHandler(nlme_leave_cnf_t *pLeaveCnf)
 | 
			
		||||
{
 | 
			
		||||
    if(pLeaveCnf->status == SUCCESS){
 | 
			
		||||
	if (pLeaveCnf->status == SUCCESS)
 | 
			
		||||
	{
 | 
			
		||||
		light_blink_start(3, 200, 200);
 | 
			
		||||
 | 
			
		||||
		// waiting blink over
 | 
			
		||||
@ -277,10 +313,10 @@ void sampleLight_leaveCnfHandler(nlme_leave_cnf_t *pLeaveCnf)
 | 
			
		||||
 */
 | 
			
		||||
void sampleLight_leaveIndHandler(nlme_leave_ind_t *pLeaveInd)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
u8 sampleLight_nwkUpdateIndicateHandler(nwkCmd_nwkUpdate_t *pNwkUpdate){
 | 
			
		||||
u8 sampleLight_nwkUpdateIndicateHandler(nwkCmd_nwkUpdate_t *pNwkUpdate)
 | 
			
		||||
{
 | 
			
		||||
	return FAILURE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -38,12 +38,11 @@
 | 
			
		||||
 */
 | 
			
		||||
#define ZCL_COLOR_CHANGE_INTERVAL 100
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	s32 stepHue256;
 | 
			
		||||
	u16 currentHue256;
 | 
			
		||||
	u16 hueRemainingTime;
 | 
			
		||||
@ -81,13 +80,11 @@ static zcl_colorInfo_t colorInfo = {
 | 
			
		||||
static ev_timer_event_t *colorTimerEvt = NULL;
 | 
			
		||||
static ev_timer_event_t *colorLoopTimerEvt = NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
void sampleLight_updateColorMode(u8 colorMode);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
 * @fn      sampleLight_colorInit
 | 
			
		||||
 *
 | 
			
		||||
@ -117,7 +114,6 @@ void sampleLight_colorInit(void)
 | 
			
		||||
 | 
			
		||||
	light_applyUpdate_16(&pColor->colorTemperatureMireds, &colorInfo.currentColorTemp256, &colorInfo.stepColorTemp256, &colorInfo.colorTempRemainingTime,
 | 
			
		||||
						 pColor->colorTempPhysicalMinMireds, pColor->colorTempPhysicalMaxMireds, FALSE);
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
@ -136,13 +132,16 @@ void sampleLight_updateColorMode(u8 colorMode)
 | 
			
		||||
{
 | 
			
		||||
	zcl_lightColorCtrlAttr_t *pColor = zcl_colorAttrGet();
 | 
			
		||||
 | 
			
		||||
	if(colorMode != pColor->colorMode){
 | 
			
		||||
		if(colorMode == ZCL_COLOR_MODE_CURRENT_X_Y){
 | 
			
		||||
 | 
			
		||||
		}else if(colorMode == ZCL_COLOR_MODE_CURRENT_HUE_SATURATION){
 | 
			
		||||
 | 
			
		||||
		}else if(colorMode == ZCL_COLOR_MODE_COLOR_TEMPERATURE_MIREDS){
 | 
			
		||||
 | 
			
		||||
	if (colorMode != pColor->colorMode)
 | 
			
		||||
	{
 | 
			
		||||
		if (colorMode == ZCL_COLOR_MODE_CURRENT_X_Y)
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
		else if (colorMode == ZCL_COLOR_MODE_CURRENT_HUE_SATURATION)
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
		else if (colorMode == ZCL_COLOR_MODE_COLOR_TEMPERATURE_MIREDS)
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -161,11 +160,16 @@ void sampleLight_updateColor(void)
 | 
			
		||||
	zcl_lightColorCtrlAttr_t *pColor = zcl_colorAttrGet();
 | 
			
		||||
	zcl_levelAttr_t *pLevel = zcl_levelAttrGet();
 | 
			
		||||
 | 
			
		||||
	if(pColor->colorMode == ZCL_COLOR_MODE_CURRENT_X_Y) {
 | 
			
		||||
	if (pColor->colorMode == ZCL_COLOR_MODE_CURRENT_X_Y)
 | 
			
		||||
	{
 | 
			
		||||
		hwLight_colorUpdate_XY2RGB(pColor->currentX, pColor->currentY, pLevel->curLevel);
 | 
			
		||||
	} else if(pColor->colorMode == ZCL_COLOR_MODE_CURRENT_HUE_SATURATION || pColor->enhancedColorMode == ZCL_ENHANCED_COLOR_MODE_CURRENT_HUE_SATURATION){
 | 
			
		||||
	}
 | 
			
		||||
	else if (pColor->colorMode == ZCL_COLOR_MODE_CURRENT_HUE_SATURATION || pColor->enhancedColorMode == ZCL_ENHANCED_COLOR_MODE_CURRENT_HUE_SATURATION)
 | 
			
		||||
	{
 | 
			
		||||
		hwLight_colorUpdate_HSV2RGB(pColor->currentHue, pColor->currentSaturation, pLevel->curLevel);
 | 
			
		||||
	} else if(pColor->colorMode == ZCL_COLOR_MODE_COLOR_TEMPERATURE_MIREDS){
 | 
			
		||||
	}
 | 
			
		||||
	else if (pColor->colorMode == ZCL_COLOR_MODE_COLOR_TEMPERATURE_MIREDS)
 | 
			
		||||
	{
 | 
			
		||||
		hwLight_colorUpdate_colorTemperature(pColor->colorTemperatureMireds, pLevel->curLevel);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -184,27 +188,35 @@ static s32 sampleLight_colorTimerEvtCb(void *arg)
 | 
			
		||||
	zcl_lightColorCtrlAttr_t *pColor = zcl_colorAttrGet();
 | 
			
		||||
 | 
			
		||||
	if ((pColor->enhancedColorMode == ZCL_COLOR_MODE_CURRENT_HUE_SATURATION) ||
 | 
			
		||||
		(pColor->enhancedColorMode == ZCL_ENHANCED_COLOR_MODE_CURRENT_HUE_SATURATION) ){
 | 
			
		||||
		if(colorInfo.saturationRemainingTime){
 | 
			
		||||
		(pColor->enhancedColorMode == ZCL_ENHANCED_COLOR_MODE_CURRENT_HUE_SATURATION))
 | 
			
		||||
	{
 | 
			
		||||
		if (colorInfo.saturationRemainingTime)
 | 
			
		||||
		{
 | 
			
		||||
			light_applyUpdate(&pColor->currentSaturation, &colorInfo.currentSaturation256, &colorInfo.stepSaturation256, &colorInfo.saturationRemainingTime,
 | 
			
		||||
							  ZCL_COLOR_ATTR_SATURATION_MIN, ZCL_COLOR_ATTR_SATURATION_MAX, FALSE);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if(colorInfo.hueRemainingTime){
 | 
			
		||||
		if (colorInfo.hueRemainingTime)
 | 
			
		||||
		{
 | 
			
		||||
			light_applyUpdate(&pColor->currentHue, &colorInfo.currentHue256, &colorInfo.stepHue256, &colorInfo.hueRemainingTime,
 | 
			
		||||
							  ZCL_COLOR_ATTR_HUE_MIN, ZCL_COLOR_ATTR_HUE_MAX, TRUE);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else if(pColor->enhancedColorMode == ZCL_COLOR_MODE_COLOR_TEMPERATURE_MIREDS){
 | 
			
		||||
		if(colorInfo.colorTempRemainingTime){
 | 
			
		||||
	else if (pColor->enhancedColorMode == ZCL_COLOR_MODE_COLOR_TEMPERATURE_MIREDS)
 | 
			
		||||
	{
 | 
			
		||||
		if (colorInfo.colorTempRemainingTime)
 | 
			
		||||
		{
 | 
			
		||||
			light_applyUpdate_16(&pColor->colorTemperatureMireds, &colorInfo.currentColorTemp256, &colorInfo.stepColorTemp256, &colorInfo.colorTempRemainingTime,
 | 
			
		||||
								 colorInfo.colorTempMinMireds, colorInfo.colorTempMaxMireds, FALSE);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(colorInfo.saturationRemainingTime || colorInfo.hueRemainingTime || colorInfo.colorTempRemainingTime){
 | 
			
		||||
	if (colorInfo.saturationRemainingTime || colorInfo.hueRemainingTime || colorInfo.colorTempRemainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		return 0;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		colorTimerEvt = NULL;
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
@ -221,7 +233,8 @@ static s32 sampleLight_colorTimerEvtCb(void *arg)
 | 
			
		||||
 */
 | 
			
		||||
static void sampleLight_colorTimerStop(void)
 | 
			
		||||
{
 | 
			
		||||
	if(colorTimerEvt){
 | 
			
		||||
	if (colorTimerEvt)
 | 
			
		||||
	{
 | 
			
		||||
		TL_ZB_TIMER_CANCEL(&colorTimerEvt);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -239,9 +252,11 @@ static s32 sampleLight_colorLoopTimerEvtCb(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	zcl_lightColorCtrlAttr_t *pColor = zcl_colorAttrGet();
 | 
			
		||||
 | 
			
		||||
	if(pColor->colorLoopActive){
 | 
			
		||||
 | 
			
		||||
	}else{
 | 
			
		||||
	if (pColor->colorLoopActive)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		colorLoopTimerEvt = NULL;
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
@ -260,12 +275,12 @@ static s32 sampleLight_colorLoopTimerEvtCb(void *arg)
 | 
			
		||||
 */
 | 
			
		||||
static void sampleLight_colorLoopTimerStop(void)
 | 
			
		||||
{
 | 
			
		||||
	if(colorLoopTimerEvt){
 | 
			
		||||
	if (colorLoopTimerEvt)
 | 
			
		||||
	{
 | 
			
		||||
		TL_ZB_TIMER_CANCEL(&colorLoopTimerEvt);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
 * @fn      sampleLight_moveToHueProcess
 | 
			
		||||
 *
 | 
			
		||||
@ -288,28 +303,37 @@ static void sampleLight_moveToHueProcess(zcl_colorCtrlMoveToHueCmd_t *cmd)
 | 
			
		||||
 | 
			
		||||
	s16 hueDiff = (s16)cmd->hue - pColor->currentHue;
 | 
			
		||||
 | 
			
		||||
	switch(cmd->direction){
 | 
			
		||||
	switch (cmd->direction)
 | 
			
		||||
	{
 | 
			
		||||
	case COLOR_CTRL_DIRECTION_SHORTEST_DISTANCE:
 | 
			
		||||
			if(hueDiff > (ZCL_COLOR_ATTR_HUE_MAX / 2)){
 | 
			
		||||
		if (hueDiff > (ZCL_COLOR_ATTR_HUE_MAX / 2))
 | 
			
		||||
		{
 | 
			
		||||
			hueDiff -= (ZCL_COLOR_ATTR_HUE_MAX + 1);
 | 
			
		||||
			}else if(hueDiff < -ZCL_COLOR_ATTR_HUE_MAX / 2){
 | 
			
		||||
		}
 | 
			
		||||
		else if (hueDiff < -ZCL_COLOR_ATTR_HUE_MAX / 2)
 | 
			
		||||
		{
 | 
			
		||||
			hueDiff += (ZCL_COLOR_ATTR_HUE_MAX + 1);
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case COLOR_CTRL_DIRECTION_LONGEST_DISTANCE:
 | 
			
		||||
			if((hueDiff > 0) && (hueDiff < (ZCL_COLOR_ATTR_HUE_MAX / 2))){
 | 
			
		||||
		if ((hueDiff > 0) && (hueDiff < (ZCL_COLOR_ATTR_HUE_MAX / 2)))
 | 
			
		||||
		{
 | 
			
		||||
			hueDiff -= (ZCL_COLOR_ATTR_HUE_MAX + 1);
 | 
			
		||||
			}else if((hueDiff < 0) && (hueDiff > -ZCL_COLOR_ATTR_HUE_MAX / 2)){
 | 
			
		||||
		}
 | 
			
		||||
		else if ((hueDiff < 0) && (hueDiff > -ZCL_COLOR_ATTR_HUE_MAX / 2))
 | 
			
		||||
		{
 | 
			
		||||
			hueDiff += (ZCL_COLOR_ATTR_HUE_MAX + 1);
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case COLOR_CTRL_DIRECTION_UP:
 | 
			
		||||
			if(hueDiff < 0){
 | 
			
		||||
		if (hueDiff < 0)
 | 
			
		||||
		{
 | 
			
		||||
			hueDiff += ZCL_COLOR_ATTR_HUE_MAX;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case COLOR_CTRL_DIRECTION_DOWN:
 | 
			
		||||
			if(hueDiff > 0){
 | 
			
		||||
		if (hueDiff > 0)
 | 
			
		||||
		{
 | 
			
		||||
			hueDiff -= ZCL_COLOR_ATTR_HUE_MAX;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
@ -324,10 +348,13 @@ static void sampleLight_moveToHueProcess(zcl_colorCtrlMoveToHueCmd_t *cmd)
 | 
			
		||||
	light_applyUpdate(&pColor->currentHue, &colorInfo.currentHue256, &colorInfo.stepHue256, &colorInfo.hueRemainingTime,
 | 
			
		||||
					  ZCL_COLOR_ATTR_HUE_MIN, ZCL_COLOR_ATTR_HUE_MAX, TRUE);
 | 
			
		||||
 | 
			
		||||
	if(colorInfo.hueRemainingTime){
 | 
			
		||||
	if (colorInfo.hueRemainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
		colorTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_colorTimerEvtCb, NULL, ZCL_COLOR_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -352,7 +379,8 @@ static void sampleLight_moveHueProcess(zcl_colorCtrlMoveHueCmd_t *cmd)
 | 
			
		||||
 | 
			
		||||
	colorInfo.currentHue256 = (u16)(pColor->currentHue) << 8;
 | 
			
		||||
 | 
			
		||||
	switch(cmd->moveMode){
 | 
			
		||||
	switch (cmd->moveMode)
 | 
			
		||||
	{
 | 
			
		||||
	case COLOR_CTRL_MOVE_STOP:
 | 
			
		||||
		colorInfo.stepHue256 = 0;
 | 
			
		||||
		colorInfo.hueRemainingTime = 0;
 | 
			
		||||
@ -372,10 +400,13 @@ static void sampleLight_moveHueProcess(zcl_colorCtrlMoveHueCmd_t *cmd)
 | 
			
		||||
	light_applyUpdate(&pColor->currentHue, &colorInfo.currentHue256, &colorInfo.stepHue256, &colorInfo.hueRemainingTime,
 | 
			
		||||
					  ZCL_COLOR_ATTR_HUE_MIN, ZCL_COLOR_ATTR_HUE_MAX, TRUE);
 | 
			
		||||
 | 
			
		||||
	if(colorInfo.hueRemainingTime){
 | 
			
		||||
	if (colorInfo.hueRemainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
		colorTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_colorTimerEvtCb, NULL, ZCL_COLOR_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -404,7 +435,8 @@ static void sampleLight_stepHueProcess(zcl_colorCtrlStepHueCmd_t *cmd)
 | 
			
		||||
 | 
			
		||||
	colorInfo.stepHue256 = (((s32)cmd->stepSize) << 8) / colorInfo.hueRemainingTime;
 | 
			
		||||
 | 
			
		||||
	switch(cmd->stepMode){
 | 
			
		||||
	switch (cmd->stepMode)
 | 
			
		||||
	{
 | 
			
		||||
	case COLOR_CTRL_STEP_MODE_UP:
 | 
			
		||||
		break;
 | 
			
		||||
	case COLOR_CTRL_STEP_MODE_DOWN:
 | 
			
		||||
@ -417,10 +449,13 @@ static void sampleLight_stepHueProcess(zcl_colorCtrlStepHueCmd_t *cmd)
 | 
			
		||||
	light_applyUpdate(&pColor->currentHue, &colorInfo.currentHue256, &colorInfo.stepHue256, &colorInfo.hueRemainingTime,
 | 
			
		||||
					  ZCL_COLOR_ATTR_HUE_MIN, ZCL_COLOR_ATTR_HUE_MAX, TRUE);
 | 
			
		||||
 | 
			
		||||
	if(colorInfo.hueRemainingTime){
 | 
			
		||||
	if (colorInfo.hueRemainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
		colorTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_colorTimerEvtCb, NULL, ZCL_COLOR_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -453,10 +488,13 @@ static void sampleLight_moveToSaturationProcess(zcl_colorCtrlMoveToSaturationCmd
 | 
			
		||||
	light_applyUpdate(&pColor->currentSaturation, &colorInfo.currentSaturation256, &colorInfo.stepSaturation256, &colorInfo.saturationRemainingTime,
 | 
			
		||||
					  ZCL_COLOR_ATTR_SATURATION_MIN, ZCL_COLOR_ATTR_SATURATION_MAX, FALSE);
 | 
			
		||||
 | 
			
		||||
	if(colorInfo.saturationRemainingTime){
 | 
			
		||||
	if (colorInfo.saturationRemainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
		colorTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_colorTimerEvtCb, NULL, ZCL_COLOR_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -481,7 +519,8 @@ static void sampleLight_moveSaturationProcess(zcl_colorCtrlMoveSaturationCmd_t *
 | 
			
		||||
 | 
			
		||||
	colorInfo.currentSaturation256 = (u16)(pColor->currentSaturation) << 8;
 | 
			
		||||
 | 
			
		||||
	switch(cmd->moveMode){
 | 
			
		||||
	switch (cmd->moveMode)
 | 
			
		||||
	{
 | 
			
		||||
	case COLOR_CTRL_MOVE_STOP:
 | 
			
		||||
		colorInfo.stepSaturation256 = 0;
 | 
			
		||||
		colorInfo.saturationRemainingTime = 0;
 | 
			
		||||
@ -501,10 +540,13 @@ static void sampleLight_moveSaturationProcess(zcl_colorCtrlMoveSaturationCmd_t *
 | 
			
		||||
	light_applyUpdate(&pColor->currentSaturation, &colorInfo.currentSaturation256, &colorInfo.stepSaturation256, &colorInfo.saturationRemainingTime,
 | 
			
		||||
					  ZCL_COLOR_ATTR_SATURATION_MIN, ZCL_COLOR_ATTR_SATURATION_MAX, FALSE);
 | 
			
		||||
 | 
			
		||||
	if(colorInfo.saturationRemainingTime){
 | 
			
		||||
	if (colorInfo.saturationRemainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
		colorTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_colorTimerEvtCb, NULL, ZCL_COLOR_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -533,7 +575,8 @@ static void sampleLight_stepSaturationProcess(zcl_colorCtrlStepSaturationCmd_t *
 | 
			
		||||
 | 
			
		||||
	colorInfo.stepSaturation256 = (((s32)cmd->stepSize) << 8) / colorInfo.saturationRemainingTime;
 | 
			
		||||
 | 
			
		||||
	switch(cmd->stepMode){
 | 
			
		||||
	switch (cmd->stepMode)
 | 
			
		||||
	{
 | 
			
		||||
	case COLOR_CTRL_STEP_MODE_UP:
 | 
			
		||||
		break;
 | 
			
		||||
	case COLOR_CTRL_STEP_MODE_DOWN:
 | 
			
		||||
@ -546,10 +589,13 @@ static void sampleLight_stepSaturationProcess(zcl_colorCtrlStepSaturationCmd_t *
 | 
			
		||||
	light_applyUpdate(&pColor->currentSaturation, &colorInfo.currentSaturation256, &colorInfo.stepSaturation256, &colorInfo.saturationRemainingTime,
 | 
			
		||||
					  ZCL_COLOR_ATTR_SATURATION_MIN, ZCL_COLOR_ATTR_SATURATION_MAX, FALSE);
 | 
			
		||||
 | 
			
		||||
	if(colorInfo.saturationRemainingTime){
 | 
			
		||||
	if (colorInfo.saturationRemainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
		colorTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_colorTimerEvtCb, NULL, ZCL_COLOR_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -596,8 +642,6 @@ static void sampleLight_moveToColorProcess(zcl_colorCtrlMoveToColorCmd_t *cmd)
 | 
			
		||||
 | 
			
		||||
	pColor->colorMode = ZCL_COLOR_MODE_CURRENT_X_Y;
 | 
			
		||||
	pColor->enhancedColorMode = ZCL_COLOR_MODE_CURRENT_X_Y;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
@ -617,8 +661,6 @@ static void sampleLight_moveColorProcess(zcl_colorCtrlMoveColorCmd_t *cmd)
 | 
			
		||||
 | 
			
		||||
	pColor->colorMode = ZCL_COLOR_MODE_CURRENT_X_Y;
 | 
			
		||||
	pColor->enhancedColorMode = ZCL_COLOR_MODE_CURRENT_X_Y;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
@ -638,8 +680,6 @@ static void sampleLight_stepColorProcess(zcl_colorCtrlStepColorCmd_t *cmd)
 | 
			
		||||
 | 
			
		||||
	pColor->colorMode = ZCL_COLOR_MODE_CURRENT_X_Y;
 | 
			
		||||
	pColor->enhancedColorMode = ZCL_COLOR_MODE_CURRENT_X_Y;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
@ -660,7 +700,8 @@ static void sampleLight_enhancedMoveToHueProcess(zcl_colorCtrlEnhancedMoveToHueC
 | 
			
		||||
	pColor->colorMode = ZCL_COLOR_MODE_CURRENT_HUE_SATURATION;
 | 
			
		||||
	pColor->enhancedColorMode = ZCL_ENHANCED_COLOR_MODE_CURRENT_HUE_SATURATION;
 | 
			
		||||
 | 
			
		||||
	switch(cmd->direction){
 | 
			
		||||
	switch (cmd->direction)
 | 
			
		||||
	{
 | 
			
		||||
	case COLOR_CTRL_DIRECTION_SHORTEST_DISTANCE:
 | 
			
		||||
		break;
 | 
			
		||||
	case COLOR_CTRL_DIRECTION_LONGEST_DISTANCE:
 | 
			
		||||
@ -672,8 +713,6 @@ static void sampleLight_enhancedMoveToHueProcess(zcl_colorCtrlEnhancedMoveToHueC
 | 
			
		||||
	default:
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
@ -694,7 +733,8 @@ static void sampleLight_enhancedMoveHueProcess(zcl_colorCtrlEnhancedMoveHueCmd_t
 | 
			
		||||
	pColor->colorMode = ZCL_COLOR_MODE_CURRENT_HUE_SATURATION;
 | 
			
		||||
	pColor->enhancedColorMode = ZCL_ENHANCED_COLOR_MODE_CURRENT_HUE_SATURATION;
 | 
			
		||||
 | 
			
		||||
	switch(cmd->moveMode){
 | 
			
		||||
	switch (cmd->moveMode)
 | 
			
		||||
	{
 | 
			
		||||
	case COLOR_CTRL_MOVE_STOP:
 | 
			
		||||
		break;
 | 
			
		||||
	case COLOR_CTRL_MOVE_UP:
 | 
			
		||||
@ -704,8 +744,6 @@ static void sampleLight_enhancedMoveHueProcess(zcl_colorCtrlEnhancedMoveHueCmd_t
 | 
			
		||||
	default:
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
@ -726,7 +764,8 @@ static void sampleLight_enhancedStepHueProcess(zcl_colorCtrlEnhancedStepHueCmd_t
 | 
			
		||||
	pColor->colorMode = ZCL_COLOR_MODE_CURRENT_HUE_SATURATION;
 | 
			
		||||
	pColor->enhancedColorMode = ZCL_ENHANCED_COLOR_MODE_CURRENT_HUE_SATURATION;
 | 
			
		||||
 | 
			
		||||
	switch(cmd->stepMode){
 | 
			
		||||
	switch (cmd->stepMode)
 | 
			
		||||
	{
 | 
			
		||||
	case COLOR_CTRL_STEP_MODE_UP:
 | 
			
		||||
		break;
 | 
			
		||||
	case COLOR_CTRL_STEP_MODE_DOWN:
 | 
			
		||||
@ -734,8 +773,6 @@ static void sampleLight_enhancedStepHueProcess(zcl_colorCtrlEnhancedStepHueCmd_t
 | 
			
		||||
	default:
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
@ -776,20 +813,25 @@ static void sampleLight_colorLoopSetProcess(zcl_colorCtrlColorLoopSetCmd_t *cmd)
 | 
			
		||||
{
 | 
			
		||||
	zcl_lightColorCtrlAttr_t *pColor = zcl_colorAttrGet();
 | 
			
		||||
 | 
			
		||||
	if(cmd->updateFlags.bits.direction){
 | 
			
		||||
	if (cmd->updateFlags.bits.direction)
 | 
			
		||||
	{
 | 
			
		||||
		pColor->colorLoopDirection = cmd->direction;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(cmd->updateFlags.bits.time){
 | 
			
		||||
	if (cmd->updateFlags.bits.time)
 | 
			
		||||
	{
 | 
			
		||||
		pColor->colorLoopTime = cmd->time;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(cmd->updateFlags.bits.startHue){
 | 
			
		||||
	if (cmd->updateFlags.bits.startHue)
 | 
			
		||||
	{
 | 
			
		||||
		pColor->colorLoopStartEnhancedHue = cmd->startHue;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(cmd->updateFlags.bits.action){
 | 
			
		||||
		switch(cmd->action){
 | 
			
		||||
	if (cmd->updateFlags.bits.action)
 | 
			
		||||
	{
 | 
			
		||||
		switch (cmd->action)
 | 
			
		||||
		{
 | 
			
		||||
		case COLOR_LOOP_SET_DEACTION:
 | 
			
		||||
			break;
 | 
			
		||||
		case COLOR_LOOP_SET_ACTION_FROM_COLOR_LOOP_START_ENHANCED_HUE:
 | 
			
		||||
@ -833,10 +875,13 @@ static void sampleLight_moveToColorTemperatureProcess(zcl_colorCtrlMoveToColorTe
 | 
			
		||||
	light_applyUpdate_16(&pColor->colorTemperatureMireds, &colorInfo.currentColorTemp256, &colorInfo.stepColorTemp256, &colorInfo.colorTempRemainingTime,
 | 
			
		||||
						 colorInfo.colorTempMinMireds, colorInfo.colorTempMaxMireds, FALSE);
 | 
			
		||||
 | 
			
		||||
	if(colorInfo.colorTempRemainingTime){
 | 
			
		||||
	if (colorInfo.colorTempRemainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
		colorTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_colorTimerEvtCb, NULL, ZCL_COLOR_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -859,23 +904,30 @@ static void sampleLight_moveColorTemperatureProcess(zcl_colorCtrlMoveColorTemper
 | 
			
		||||
	pColor->colorMode = ZCL_COLOR_MODE_COLOR_TEMPERATURE_MIREDS;
 | 
			
		||||
	pColor->enhancedColorMode = ZCL_COLOR_MODE_COLOR_TEMPERATURE_MIREDS;
 | 
			
		||||
 | 
			
		||||
	if(cmd->colorTempMinMireds){
 | 
			
		||||
	if (cmd->colorTempMinMireds)
 | 
			
		||||
	{
 | 
			
		||||
		colorInfo.colorTempMinMireds = (cmd->colorTempMinMireds < pColor->colorTempPhysicalMinMireds) ? pColor->colorTempPhysicalMinMireds
 | 
			
		||||
																									  : cmd->colorTempMinMireds;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		colorInfo.colorTempMinMireds = pColor->colorTempPhysicalMinMireds;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(cmd->colorTempMaxMireds){
 | 
			
		||||
	if (cmd->colorTempMaxMireds)
 | 
			
		||||
	{
 | 
			
		||||
		colorInfo.colorTempMaxMireds = (cmd->colorTempMaxMireds > pColor->colorTempPhysicalMaxMireds) ? pColor->colorTempPhysicalMaxMireds
 | 
			
		||||
																									  : cmd->colorTempMaxMireds;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		colorInfo.colorTempMaxMireds = pColor->colorTempPhysicalMaxMireds;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	colorInfo.currentColorTemp256 = (u32)(pColor->colorTemperatureMireds) << 8;
 | 
			
		||||
 | 
			
		||||
	switch(cmd->moveMode){
 | 
			
		||||
	switch (cmd->moveMode)
 | 
			
		||||
	{
 | 
			
		||||
	case COLOR_CTRL_MOVE_STOP:
 | 
			
		||||
		colorInfo.stepColorTemp256 = 0;
 | 
			
		||||
		colorInfo.colorTempRemainingTime = 0;
 | 
			
		||||
@ -895,10 +947,13 @@ static void sampleLight_moveColorTemperatureProcess(zcl_colorCtrlMoveColorTemper
 | 
			
		||||
	light_applyUpdate_16(&pColor->colorTemperatureMireds, &colorInfo.currentColorTemp256, &colorInfo.stepColorTemp256, &colorInfo.colorTempRemainingTime,
 | 
			
		||||
						 colorInfo.colorTempMinMireds, colorInfo.colorTempMaxMireds, FALSE);
 | 
			
		||||
 | 
			
		||||
	if(colorInfo.colorTempRemainingTime){
 | 
			
		||||
	if (colorInfo.colorTempRemainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
		colorTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_colorTimerEvtCb, NULL, ZCL_COLOR_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -921,17 +976,23 @@ static void sampleLight_stepColorTemperatureProcess(zcl_colorCtrlStepColorTemper
 | 
			
		||||
	pColor->colorMode = ZCL_COLOR_MODE_COLOR_TEMPERATURE_MIREDS;
 | 
			
		||||
	pColor->enhancedColorMode = ZCL_COLOR_MODE_COLOR_TEMPERATURE_MIREDS;
 | 
			
		||||
 | 
			
		||||
	if(cmd->colorTempMinMireds){
 | 
			
		||||
	if (cmd->colorTempMinMireds)
 | 
			
		||||
	{
 | 
			
		||||
		colorInfo.colorTempMinMireds = (cmd->colorTempMinMireds < pColor->colorTempPhysicalMinMireds) ? pColor->colorTempPhysicalMinMireds
 | 
			
		||||
																									  : cmd->colorTempMinMireds;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		colorInfo.colorTempMinMireds = pColor->colorTempPhysicalMinMireds;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(cmd->colorTempMaxMireds){
 | 
			
		||||
	if (cmd->colorTempMaxMireds)
 | 
			
		||||
	{
 | 
			
		||||
		colorInfo.colorTempMaxMireds = (cmd->colorTempMaxMireds > pColor->colorTempPhysicalMaxMireds) ? pColor->colorTempPhysicalMaxMireds
 | 
			
		||||
																									  : cmd->colorTempMaxMireds;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		colorInfo.colorTempMaxMireds = pColor->colorTempPhysicalMaxMireds;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -941,7 +1002,8 @@ static void sampleLight_stepColorTemperatureProcess(zcl_colorCtrlStepColorTemper
 | 
			
		||||
 | 
			
		||||
	colorInfo.stepColorTemp256 = (((s32)cmd->stepSize) << 8) / colorInfo.colorTempRemainingTime;
 | 
			
		||||
 | 
			
		||||
	switch(cmd->stepMode){
 | 
			
		||||
	switch (cmd->stepMode)
 | 
			
		||||
	{
 | 
			
		||||
	case COLOR_CTRL_STEP_MODE_UP:
 | 
			
		||||
		break;
 | 
			
		||||
	case COLOR_CTRL_STEP_MODE_DOWN:
 | 
			
		||||
@ -954,15 +1016,17 @@ static void sampleLight_stepColorTemperatureProcess(zcl_colorCtrlStepColorTemper
 | 
			
		||||
	light_applyUpdate_16(&pColor->colorTemperatureMireds, &colorInfo.currentColorTemp256, &colorInfo.stepColorTemp256, &colorInfo.colorTempRemainingTime,
 | 
			
		||||
						 colorInfo.colorTempMinMireds, colorInfo.colorTempMaxMireds, FALSE);
 | 
			
		||||
 | 
			
		||||
	if(colorInfo.colorTempRemainingTime){
 | 
			
		||||
	if (colorInfo.colorTempRemainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
		colorTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_colorTimerEvtCb, NULL, ZCL_COLOR_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_colorTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
 * @fn      sampleLight_stopMoveStepProcess
 | 
			
		||||
 *
 | 
			
		||||
@ -996,8 +1060,10 @@ static void sampleLight_stopMoveStepProcess(void)
 | 
			
		||||
 */
 | 
			
		||||
status_t sampleLight_colorCtrlCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
 | 
			
		||||
{
 | 
			
		||||
	if(pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT){
 | 
			
		||||
		switch(cmdId){
 | 
			
		||||
	if (pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT)
 | 
			
		||||
	{
 | 
			
		||||
		switch (cmdId)
 | 
			
		||||
		{
 | 
			
		||||
		case ZCL_CMD_LIGHT_COLOR_CONTROL_MOVE_TO_HUE:
 | 
			
		||||
			sampleLight_moveToHueProcess((zcl_colorCtrlMoveToHueCmd_t *)cmdPayload);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,8 @@
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
typedef struct{
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	s32 stepLevel256;
 | 
			
		||||
	u16 currentLevel256;
 | 
			
		||||
	u8 withOnOff;
 | 
			
		||||
@ -112,20 +113,26 @@ static s32 sampleLight_levelTimerEvtCb(void * arg)
 | 
			
		||||
{
 | 
			
		||||
	zcl_levelAttr_t *pLevel = zcl_levelAttrGet();
 | 
			
		||||
 | 
			
		||||
	if(pLevel->remainingTime){
 | 
			
		||||
	if (pLevel->remainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		light_applyUpdate(&pLevel->curLevel, &levelInfo.currentLevel256, &levelInfo.stepLevel256, &pLevel->remainingTime,
 | 
			
		||||
						  ZCL_LEVEL_ATTR_MIN_LEVEL, ZCL_LEVEL_ATTR_MAX_LEVEL, FALSE);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(levelInfo.withOnOff){
 | 
			
		||||
		if(pLevel->curLevel == ZCL_LEVEL_ATTR_MIN_LEVEL){
 | 
			
		||||
	if (levelInfo.withOnOff)
 | 
			
		||||
	{
 | 
			
		||||
		if (pLevel->curLevel == ZCL_LEVEL_ATTR_MIN_LEVEL)
 | 
			
		||||
		{
 | 
			
		||||
			sampleLight_onoff(ZCL_CMD_ONOFF_OFF);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(pLevel->remainingTime){
 | 
			
		||||
	if (pLevel->remainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		return 0;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		levelTimerEvt = NULL;
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
@ -142,7 +149,8 @@ static s32 sampleLight_levelTimerEvtCb(void * arg)
 | 
			
		||||
 */
 | 
			
		||||
static void sampleLight_LevelTimerStop(void)
 | 
			
		||||
{
 | 
			
		||||
	if(levelTimerEvt){
 | 
			
		||||
	if (levelTimerEvt)
 | 
			
		||||
	{
 | 
			
		||||
		TL_ZB_TIMER_CANCEL(&levelTimerEvt);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -171,18 +179,25 @@ static void sampleLight_moveToLevelProcess(u8 cmdId, moveToLvl_t *cmd)
 | 
			
		||||
	light_applyUpdate(&pLevel->curLevel, &levelInfo.currentLevel256, &levelInfo.stepLevel256, &pLevel->remainingTime,
 | 
			
		||||
					  ZCL_LEVEL_ATTR_MIN_LEVEL, ZCL_LEVEL_ATTR_MAX_LEVEL, FALSE);
 | 
			
		||||
 | 
			
		||||
	if(levelInfo.withOnOff){
 | 
			
		||||
		if(levelInfo.stepLevel256 > 0){
 | 
			
		||||
	if (levelInfo.withOnOff)
 | 
			
		||||
	{
 | 
			
		||||
		if (levelInfo.stepLevel256 > 0)
 | 
			
		||||
		{
 | 
			
		||||
			sampleLight_onoff(ZCL_CMD_ONOFF_ON);
 | 
			
		||||
		}else if(pLevel->curLevel == ZCL_LEVEL_ATTR_MIN_LEVEL){
 | 
			
		||||
		}
 | 
			
		||||
		else if (pLevel->curLevel == ZCL_LEVEL_ATTR_MIN_LEVEL)
 | 
			
		||||
		{
 | 
			
		||||
			sampleLight_onoff(ZCL_CMD_ONOFF_OFF);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(pLevel->remainingTime){
 | 
			
		||||
	if (pLevel->remainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_LevelTimerStop();
 | 
			
		||||
		levelTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_levelTimerEvtCb, NULL, ZCL_LEVEL_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_LevelTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -207,23 +222,29 @@ static void sampleLight_moveProcess(u8 cmdId, move_t *cmd)
 | 
			
		||||
	u32 rate = (u32)cmd->rate * 100;
 | 
			
		||||
	u8 newLevel;
 | 
			
		||||
	u8 deltaLevel;
 | 
			
		||||
	if(cmd->moveMode == LEVEL_MOVE_UP){
 | 
			
		||||
	if (cmd->moveMode == LEVEL_MOVE_UP)
 | 
			
		||||
	{
 | 
			
		||||
		newLevel = ZCL_LEVEL_ATTR_MAX_LEVEL;
 | 
			
		||||
		deltaLevel = ZCL_LEVEL_ATTR_MAX_LEVEL - pLevel->curLevel;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		newLevel = ZCL_LEVEL_ATTR_MIN_LEVEL;
 | 
			
		||||
		deltaLevel = pLevel->curLevel - ZCL_LEVEL_ATTR_MIN_LEVEL;
 | 
			
		||||
	}
 | 
			
		||||
	pLevel->remainingTime = ((u32)deltaLevel * 1000) / rate;
 | 
			
		||||
	if(pLevel->remainingTime == 0){
 | 
			
		||||
	if (pLevel->remainingTime == 0)
 | 
			
		||||
	{
 | 
			
		||||
		pLevel->remainingTime = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	levelInfo.stepLevel256 = ((s32)(newLevel - pLevel->curLevel)) << 8;
 | 
			
		||||
	levelInfo.stepLevel256 /= (s32)pLevel->remainingTime;
 | 
			
		||||
 | 
			
		||||
	if(cmd->moveMode == LEVEL_MOVE_UP){
 | 
			
		||||
		if(levelInfo.withOnOff){
 | 
			
		||||
	if (cmd->moveMode == LEVEL_MOVE_UP)
 | 
			
		||||
	{
 | 
			
		||||
		if (levelInfo.withOnOff)
 | 
			
		||||
		{
 | 
			
		||||
			sampleLight_onoff(ZCL_CMD_ONOFF_ON);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -231,16 +252,21 @@ static void sampleLight_moveProcess(u8 cmdId, move_t *cmd)
 | 
			
		||||
	light_applyUpdate(&pLevel->curLevel, &levelInfo.currentLevel256, &levelInfo.stepLevel256, &pLevel->remainingTime,
 | 
			
		||||
					  ZCL_LEVEL_ATTR_MIN_LEVEL, ZCL_LEVEL_ATTR_MAX_LEVEL, FALSE);
 | 
			
		||||
 | 
			
		||||
	if(levelInfo.withOnOff){
 | 
			
		||||
		if(pLevel->curLevel == ZCL_LEVEL_ATTR_MIN_LEVEL){
 | 
			
		||||
	if (levelInfo.withOnOff)
 | 
			
		||||
	{
 | 
			
		||||
		if (pLevel->curLevel == ZCL_LEVEL_ATTR_MIN_LEVEL)
 | 
			
		||||
		{
 | 
			
		||||
			sampleLight_onoff(ZCL_CMD_ONOFF_OFF);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(pLevel->remainingTime){
 | 
			
		||||
	if (pLevel->remainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_LevelTimerStop();
 | 
			
		||||
		levelTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_levelTimerEvtCb, NULL, ZCL_LEVEL_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_LevelTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -265,27 +291,36 @@ static void sampleLight_stepProcess(u8 cmdId, step_t *cmd)
 | 
			
		||||
	levelInfo.currentLevel256 = (u16)(pLevel->curLevel) << 8;
 | 
			
		||||
	levelInfo.stepLevel256 = (((s32)cmd->stepSize) << 8) / pLevel->remainingTime;
 | 
			
		||||
 | 
			
		||||
	if(cmd->stepMode == LEVEL_STEP_UP){
 | 
			
		||||
		if(levelInfo.withOnOff){
 | 
			
		||||
	if (cmd->stepMode == LEVEL_STEP_UP)
 | 
			
		||||
	{
 | 
			
		||||
		if (levelInfo.withOnOff)
 | 
			
		||||
		{
 | 
			
		||||
			sampleLight_onoff(ZCL_CMD_ONOFF_ON);
 | 
			
		||||
		}
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		levelInfo.stepLevel256 = -levelInfo.stepLevel256;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	light_applyUpdate(&pLevel->curLevel, &levelInfo.currentLevel256, &levelInfo.stepLevel256, &pLevel->remainingTime,
 | 
			
		||||
					  ZCL_LEVEL_ATTR_MIN_LEVEL, ZCL_LEVEL_ATTR_MAX_LEVEL, FALSE);
 | 
			
		||||
 | 
			
		||||
	if(levelInfo.withOnOff){
 | 
			
		||||
		if(pLevel->curLevel == ZCL_LEVEL_ATTR_MIN_LEVEL){
 | 
			
		||||
	if (levelInfo.withOnOff)
 | 
			
		||||
	{
 | 
			
		||||
		if (pLevel->curLevel == ZCL_LEVEL_ATTR_MIN_LEVEL)
 | 
			
		||||
		{
 | 
			
		||||
			sampleLight_onoff(ZCL_CMD_ONOFF_OFF);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(pLevel->remainingTime){
 | 
			
		||||
	if (pLevel->remainingTime)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_LevelTimerStop();
 | 
			
		||||
		levelTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_levelTimerEvtCb, NULL, ZCL_LEVEL_CHANGE_INTERVAL);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_LevelTimerStop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -323,8 +358,10 @@ static void sampleLight_stopProcess(u8 cmdId, stop_t *cmd)
 | 
			
		||||
 */
 | 
			
		||||
status_t sampleLight_levelCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
 | 
			
		||||
{
 | 
			
		||||
	if(pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT){
 | 
			
		||||
		switch(cmdId){
 | 
			
		||||
	if (pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT)
 | 
			
		||||
	{
 | 
			
		||||
		switch (cmdId)
 | 
			
		||||
		{
 | 
			
		||||
		case ZCL_CMD_LEVEL_MOVE_TO_LEVEL:
 | 
			
		||||
		case ZCL_CMD_LEVEL_MOVE_TO_LEVEL_WITH_ON_OFF:
 | 
			
		||||
			sampleLight_moveToLevelProcess(cmdId, (moveToLvl_t *)cmdPayload);
 | 
			
		||||
 | 
			
		||||
@ -91,25 +91,35 @@ void sampleLight_onoff(u8 cmd)
 | 
			
		||||
{
 | 
			
		||||
	zcl_onOffAttr_t *pOnOff = zcl_onoffAttrGet();
 | 
			
		||||
 | 
			
		||||
	if(cmd == ZCL_CMD_ONOFF_ON){
 | 
			
		||||
	if (cmd == ZCL_CMD_ONOFF_ON)
 | 
			
		||||
	{
 | 
			
		||||
		pOnOff->globalSceneControl = TRUE;
 | 
			
		||||
 | 
			
		||||
		pOnOff->onOff = ZCL_ONOFF_STATUS_ON;
 | 
			
		||||
		if(pOnOff->onTime == 0){
 | 
			
		||||
		if (pOnOff->onTime == 0)
 | 
			
		||||
		{
 | 
			
		||||
			pOnOff->offWaitTime = 0;
 | 
			
		||||
		}
 | 
			
		||||
	}else if(cmd == ZCL_CMD_ONOFF_OFF){
 | 
			
		||||
	}
 | 
			
		||||
	else if (cmd == ZCL_CMD_ONOFF_OFF)
 | 
			
		||||
	{
 | 
			
		||||
		pOnOff->onOff = ZCL_ONOFF_STATUS_OFF;
 | 
			
		||||
		pOnOff->onTime = 0;
 | 
			
		||||
	}else{
 | 
			
		||||
		if(pOnOff->onOff == ZCL_ONOFF_STATUS_OFF){
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if (pOnOff->onOff == ZCL_ONOFF_STATUS_OFF)
 | 
			
		||||
		{
 | 
			
		||||
			pOnOff->globalSceneControl = TRUE;
 | 
			
		||||
 | 
			
		||||
			pOnOff->onOff = ZCL_ONOFF_STATUS_ON;
 | 
			
		||||
			if(pOnOff->onTime == 0){
 | 
			
		||||
			if (pOnOff->onTime == 0)
 | 
			
		||||
			{
 | 
			
		||||
				pOnOff->offWaitTime = 0;
 | 
			
		||||
			}
 | 
			
		||||
		}else{
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			pOnOff->onOff = ZCL_ONOFF_STATUS_OFF;
 | 
			
		||||
			pOnOff->onTime = 0;
 | 
			
		||||
		}
 | 
			
		||||
@ -136,25 +146,32 @@ static s32 sampleLight_OnWithTimedOffTimerCb(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	zcl_onOffAttr_t *pOnOff = zcl_onoffAttrGet();
 | 
			
		||||
 | 
			
		||||
	if((pOnOff->onOff == ZCL_ONOFF_STATUS_ON) && pOnOff->onTime){
 | 
			
		||||
	if ((pOnOff->onOff == ZCL_ONOFF_STATUS_ON) && pOnOff->onTime)
 | 
			
		||||
	{
 | 
			
		||||
		pOnOff->onTime--;
 | 
			
		||||
		if(pOnOff->onTime <= 0){
 | 
			
		||||
		if (pOnOff->onTime <= 0)
 | 
			
		||||
		{
 | 
			
		||||
			pOnOff->offWaitTime = 0;
 | 
			
		||||
			sampleLight_onoff(ZCL_CMD_ONOFF_OFF);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if((pOnOff->onOff == ZCL_ONOFF_STATUS_OFF) && pOnOff->offWaitTime){
 | 
			
		||||
	if ((pOnOff->onOff == ZCL_ONOFF_STATUS_OFF) && pOnOff->offWaitTime)
 | 
			
		||||
	{
 | 
			
		||||
		pOnOff->offWaitTime--;
 | 
			
		||||
		if(pOnOff->offWaitTime <= 0){
 | 
			
		||||
		if (pOnOff->offWaitTime <= 0)
 | 
			
		||||
		{
 | 
			
		||||
			onWithTimedOffTimerEvt = NULL;
 | 
			
		||||
			return -1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(pOnOff->onTime || pOnOff->offWaitTime){
 | 
			
		||||
	if (pOnOff->onTime || pOnOff->offWaitTime)
 | 
			
		||||
	{
 | 
			
		||||
		return 0;
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		onWithTimedOffTimerEvt = NULL;
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
@ -171,7 +188,8 @@ static s32 sampleLight_OnWithTimedOffTimerCb(void *arg)
 | 
			
		||||
 */
 | 
			
		||||
static void sampleLight_OnWithTimedOffTimerStop(void)
 | 
			
		||||
{
 | 
			
		||||
	if(onWithTimedOffTimerEvt){
 | 
			
		||||
	if (onWithTimedOffTimerEvt)
 | 
			
		||||
	{
 | 
			
		||||
		TL_ZB_TIMER_CANCEL(&onWithTimedOffTimerEvt);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -189,20 +207,26 @@ static void sampleLight_onoff_onWithTimedOffProcess(zcl_onoff_onWithTimeOffCmd_t
 | 
			
		||||
{
 | 
			
		||||
	zcl_onOffAttr_t *pOnOff = zcl_onoffAttrGet();
 | 
			
		||||
 | 
			
		||||
	if(cmd->onOffCtrl.bits.acceptOnlyWhenOn && (pOnOff->onOff == ZCL_ONOFF_STATUS_OFF)){
 | 
			
		||||
	if (cmd->onOffCtrl.bits.acceptOnlyWhenOn && (pOnOff->onOff == ZCL_ONOFF_STATUS_OFF))
 | 
			
		||||
	{
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(pOnOff->offWaitTime && (pOnOff->onOff == ZCL_ONOFF_STATUS_OFF)){
 | 
			
		||||
	if (pOnOff->offWaitTime && (pOnOff->onOff == ZCL_ONOFF_STATUS_OFF))
 | 
			
		||||
	{
 | 
			
		||||
		pOnOff->offWaitTime = min2(pOnOff->offWaitTime, cmd->offWaitTime);
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		pOnOff->onTime = max2(pOnOff->onTime, cmd->onTime);
 | 
			
		||||
		pOnOff->offWaitTime = cmd->offWaitTime;
 | 
			
		||||
		sampleLight_onoff(ZCL_CMD_ONOFF_ON);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if((pOnOff->onTime < 0xFFFF) && (pOnOff->offWaitTime < 0xFFFF)){
 | 
			
		||||
		if(pOnOff->onTime || pOnOff->offWaitTime){
 | 
			
		||||
	if ((pOnOff->onTime < 0xFFFF) && (pOnOff->offWaitTime < 0xFFFF))
 | 
			
		||||
	{
 | 
			
		||||
		if (pOnOff->onTime || pOnOff->offWaitTime)
 | 
			
		||||
		{
 | 
			
		||||
			sampleLight_OnWithTimedOffTimerStop();
 | 
			
		||||
			onWithTimedOffTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_OnWithTimedOffTimerCb, NULL, ZCL_ONOFF_TIMER_INTERVAL);
 | 
			
		||||
		}
 | 
			
		||||
@ -236,7 +260,6 @@ static void sampleLight_onoff_offWithEffectProcess(zcl_onoff_offWithEffectCmd_t
 | 
			
		||||
 */
 | 
			
		||||
static void sampleLight_onoff_onWithRecallGlobalSceneProcess(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
@ -254,15 +277,18 @@ status_t sampleLight_onOffCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *c
 | 
			
		||||
{
 | 
			
		||||
	zcl_onOffAttr_t *pOnOff = zcl_onoffAttrGet();
 | 
			
		||||
 | 
			
		||||
	if(pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT){
 | 
			
		||||
		switch(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;
 | 
			
		||||
		case ZCL_CMD_OFF_WITH_EFFECT:
 | 
			
		||||
				if(pOnOff->globalSceneControl == TRUE){
 | 
			
		||||
			if (pOnOff->globalSceneControl == TRUE)
 | 
			
		||||
			{
 | 
			
		||||
				/* TODO: store its settings in its global scene */
 | 
			
		||||
 | 
			
		||||
				pOnOff->globalSceneControl = FALSE;
 | 
			
		||||
@ -270,7 +296,8 @@ status_t sampleLight_onOffCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *c
 | 
			
		||||
			sampleLight_onoff_offWithEffectProcess((zcl_onoff_offWithEffectCmd_t *)cmdPayload);
 | 
			
		||||
			break;
 | 
			
		||||
		case ZCL_CMD_ON_WITH_RECALL_GLOBAL_SCENE:
 | 
			
		||||
				if(pOnOff->globalSceneControl == FALSE){
 | 
			
		||||
			if (pOnOff->globalSceneControl == FALSE)
 | 
			
		||||
			{
 | 
			
		||||
				sampleLight_onoff_onWithRecallGlobalSceneProcess();
 | 
			
		||||
				pOnOff->globalSceneControl = TRUE;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
@ -37,13 +37,10 @@
 | 
			
		||||
 * LOCAL CONSTANTS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * TYPEDEFS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * LOCAL FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
@ -61,12 +58,10 @@ static void sampleLight_zclReportCmd(zclReportCmd_t *pReportCmd);
 | 
			
		||||
#endif
 | 
			
		||||
static void sampleLight_zclDfltRspCmd(zclDefaultRspCmd_t *pDftRspCmd);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * GLOBAL VARIABLES
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * LOCAL VARIABLES
 | 
			
		||||
 */
 | 
			
		||||
@ -74,7 +69,6 @@ static void sampleLight_zclDfltRspCmd(zclDefaultRspCmd_t *pDftRspCmd);
 | 
			
		||||
static ev_timer_event_t *identifyTimerEvt = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * FUNCTIONS
 | 
			
		||||
 */
 | 
			
		||||
@ -139,7 +133,6 @@ void sampleLight_zclProcessIncomingMsg(zclIncoming_t *pInHdlrMsg)
 | 
			
		||||
static void sampleLight_zclReadRspCmd(zclReadRspCmd_t *pReadRspCmd)
 | 
			
		||||
{
 | 
			
		||||
	//    printf("sampleLight_zclReadRspCmd\n");
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -158,9 +151,12 @@ static void sampleLight_zclWriteReqCmd(u16 clusterId, zclWriteCmd_t *pWriteReqCm
 | 
			
		||||
	u8 numAttr = pWriteReqCmd->numAttr;
 | 
			
		||||
	zclWriteRec_t *attr = pWriteReqCmd->attrList;
 | 
			
		||||
 | 
			
		||||
	if(clusterId == ZCL_CLUSTER_GEN_ON_OFF){
 | 
			
		||||
		for(u8 i = 0; i < numAttr; i++){
 | 
			
		||||
			if(attr[i].attrID == ZCL_ATTRID_START_UP_ONOFF){
 | 
			
		||||
	if (clusterId == ZCL_CLUSTER_GEN_ON_OFF)
 | 
			
		||||
	{
 | 
			
		||||
		for (u8 i = 0; i < numAttr; i++)
 | 
			
		||||
		{
 | 
			
		||||
			if (attr[i].attrID == ZCL_ATTRID_START_UP_ONOFF)
 | 
			
		||||
			{
 | 
			
		||||
				zcl_onOffAttr_save();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@ -179,11 +175,9 @@ static void sampleLight_zclWriteReqCmd(u16 clusterId, zclWriteCmd_t *pWriteReqCm
 | 
			
		||||
static void sampleLight_zclWriteRspCmd(zclWriteRspCmd_t *pWriteRspCmd)
 | 
			
		||||
{
 | 
			
		||||
	//    printf("sampleLight_zclWriteRspCmd\n");
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
 * @fn      sampleLight_zclDfltRspCmd
 | 
			
		||||
 *
 | 
			
		||||
@ -198,8 +192,10 @@ static void sampleLight_zclDfltRspCmd(zclDefaultRspCmd_t *pDftRspCmd)
 | 
			
		||||
//  printf("sampleLight_zclDfltRspCmd\n");
 | 
			
		||||
#ifdef ZCL_OTA
 | 
			
		||||
	if ((pDftRspCmd->commandID == ZCL_CMD_OTA_UPGRADE_END_REQ) &&
 | 
			
		||||
		(pDftRspCmd->statusCode == ZCL_STA_ABORT) ){
 | 
			
		||||
		if(zcl_attr_imageUpgradeStatus == IMAGE_UPGRADE_STATUS_DOWNLOAD_COMPLETE){
 | 
			
		||||
		(pDftRspCmd->statusCode == ZCL_STA_ABORT))
 | 
			
		||||
	{
 | 
			
		||||
		if (zcl_attr_imageUpgradeStatus == IMAGE_UPGRADE_STATUS_DOWNLOAD_COMPLETE)
 | 
			
		||||
		{
 | 
			
		||||
			ota_upgradeAbort();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -219,7 +215,6 @@ static void sampleLight_zclDfltRspCmd(zclDefaultRspCmd_t *pDftRspCmd)
 | 
			
		||||
static void sampleLight_zclCfgReportCmd(zclCfgReportCmd_t *pCfgReportCmd)
 | 
			
		||||
{
 | 
			
		||||
	//    printf("sampleLight_zclCfgReportCmd\n");
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
@ -234,7 +229,6 @@ static void sampleLight_zclCfgReportCmd(zclCfgReportCmd_t *pCfgReportCmd)
 | 
			
		||||
static void sampleLight_zclCfgReportRspCmd(zclCfgReportRspCmd_t *pCfgReportRspCmd)
 | 
			
		||||
{
 | 
			
		||||
	//    printf("sampleLight_zclCfgReportRspCmd\n");
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
@ -249,7 +243,6 @@ static void sampleLight_zclCfgReportRspCmd(zclCfgReportRspCmd_t *pCfgReportRspCm
 | 
			
		||||
static void sampleLight_zclReportCmd(zclReportCmd_t *pReportCmd)
 | 
			
		||||
{
 | 
			
		||||
	//    printf("sampleLight_zclReportCmd\n");
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -267,7 +260,8 @@ static void sampleLight_zclReportCmd(zclReportCmd_t *pReportCmd)
 | 
			
		||||
 */
 | 
			
		||||
status_t sampleLight_basicCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
 | 
			
		||||
{
 | 
			
		||||
	if(cmdId == ZCL_CMD_BASIC_RESET_FAC_DEFAULT){
 | 
			
		||||
	if (cmdId == ZCL_CMD_BASIC_RESET_FAC_DEFAULT)
 | 
			
		||||
	{
 | 
			
		||||
		// Reset all the attributes of all its clusters to factory defaults
 | 
			
		||||
		// zcl_nv_attr_reset();
 | 
			
		||||
	}
 | 
			
		||||
@ -279,7 +273,8 @@ status_t sampleLight_basicCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *c
 | 
			
		||||
#ifdef ZCL_IDENTIFY
 | 
			
		||||
s32 sampleLight_zclIdentifyTimerCb(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	if(g_zcl_identifyAttrs.identifyTime <= 0){
 | 
			
		||||
	if (g_zcl_identifyAttrs.identifyTime <= 0)
 | 
			
		||||
	{
 | 
			
		||||
		light_blink_stop();
 | 
			
		||||
 | 
			
		||||
		identifyTimerEvt = NULL;
 | 
			
		||||
@ -291,7 +286,8 @@ s32 sampleLight_zclIdentifyTimerCb(void *arg)
 | 
			
		||||
 | 
			
		||||
void sampleLight_zclIdentifyTimerStop(void)
 | 
			
		||||
{
 | 
			
		||||
	if(identifyTimerEvt){
 | 
			
		||||
	if (identifyTimerEvt)
 | 
			
		||||
	{
 | 
			
		||||
		TL_ZB_TIMER_CANCEL(&identifyTimerEvt);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -311,11 +307,15 @@ void sampleLight_zclIdentifyCmdHandler(u8 endpoint, u16 srcAddr, u16 identifyTim
 | 
			
		||||
{
 | 
			
		||||
	g_zcl_identifyAttrs.identifyTime = identifyTime;
 | 
			
		||||
 | 
			
		||||
	if(identifyTime == 0){
 | 
			
		||||
	if (identifyTime == 0)
 | 
			
		||||
	{
 | 
			
		||||
		sampleLight_zclIdentifyTimerStop();
 | 
			
		||||
		light_blink_stop();
 | 
			
		||||
	}else{
 | 
			
		||||
		if(!identifyTimerEvt){
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if (!identifyTimerEvt)
 | 
			
		||||
		{
 | 
			
		||||
			light_blink_start(identifyTime, 500, 500);
 | 
			
		||||
			identifyTimerEvt = TL_ZB_TIMER_SCHEDULE(sampleLight_zclIdentifyTimerCb, NULL, 1000);
 | 
			
		||||
		}
 | 
			
		||||
@ -336,7 +336,8 @@ static void sampleLight_zcltriggerCmdHandler(zcl_triggerEffect_t *pTriggerEffect
 | 
			
		||||
	u8 effectId = pTriggerEffect->effectId;
 | 
			
		||||
	//	u8 effectVariant = pTriggerEffect->effectVariant;
 | 
			
		||||
 | 
			
		||||
	switch(effectId){
 | 
			
		||||
	switch (effectId)
 | 
			
		||||
	{
 | 
			
		||||
	case IDENTIFY_EFFECT_BLINK:
 | 
			
		||||
		light_blink_start(1, 500, 500);
 | 
			
		||||
		break;
 | 
			
		||||
@ -373,9 +374,12 @@ static void sampleLight_zcltriggerCmdHandler(zcl_triggerEffect_t *pTriggerEffect
 | 
			
		||||
 */
 | 
			
		||||
status_t sampleLight_identifyCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
 | 
			
		||||
{
 | 
			
		||||
	if(pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT){
 | 
			
		||||
		if(pAddrInfo->dirCluster == ZCL_FRAME_CLIENT_SERVER_DIR){
 | 
			
		||||
			switch(cmdId){
 | 
			
		||||
	if (pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT)
 | 
			
		||||
	{
 | 
			
		||||
		if (pAddrInfo->dirCluster == ZCL_FRAME_CLIENT_SERVER_DIR)
 | 
			
		||||
		{
 | 
			
		||||
			switch (cmdId)
 | 
			
		||||
			{
 | 
			
		||||
			case ZCL_CMD_IDENTIFY:
 | 
			
		||||
				sampleLight_zclIdentifyCmdHandler(pAddrInfo->dstEp, pAddrInfo->srcAddr, ((zcl_identifyCmd_t *)cmdPayload)->identifyTime);
 | 
			
		||||
				break;
 | 
			
		||||
@ -393,5 +397,3 @@ status_t sampleLight_identifyCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __PROJECT_TL_DIMMABLE_LIGHT__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,6 @@
 | 
			
		||||
 | 
			
		||||
#if (__PROJECT_TL_DIMMABLE_LIGHT__)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
 * INCLUDES
 | 
			
		||||
 */
 | 
			
		||||
@ -32,7 +31,6 @@
 | 
			
		||||
#include "zcl_include.h"
 | 
			
		||||
#include "sampleLight.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************************************
 | 
			
		||||
 * @fn      sampleLight_sceneRecallReqHandler
 | 
			
		||||
 *
 | 
			
		||||
@ -77,14 +75,17 @@ static void sampleLight_sceneRecallReqHandler(zclIncomingAddrInfo_t *pAddrInfo,
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef ZCL_LIGHT_COLOR_CONTROL
 | 
			
		||||
	if (colorMode == ZCL_COLOR_MODE_CURRENT_HUE_SATURATION) {
 | 
			
		||||
	if (colorMode == ZCL_COLOR_MODE_CURRENT_HUE_SATURATION)
 | 
			
		||||
	{
 | 
			
		||||
		zcl_colorCtrlMoveToColorTemperatureCmd_t move2ColorTemp;
 | 
			
		||||
		move2ColorTemp.colorTemperature = colorTemperatureMireds;
 | 
			
		||||
		move2ColorTemp.transitionTime = pScene->transTime;
 | 
			
		||||
		move2ColorTemp.optPresent = 0;
 | 
			
		||||
 | 
			
		||||
		sampleLight_colorCtrlCb(pAddrInfo, ZCL_CMD_LIGHT_COLOR_CONTROL_MOVE_TO_COLOR_TEMPERATURE, &move2ColorTemp);
 | 
			
		||||
	} else {
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		zcl_colorCtrlMoveToHueAndSaturationCmd_t move2HueAndSat;
 | 
			
		||||
		move2HueAndSat.hue = hue;
 | 
			
		||||
		move2HueAndSat.saturation = saturation;
 | 
			
		||||
@ -156,9 +157,12 @@ static void sampleLight_sceneStoreReqHandler(zcl_sceneEntry_t *pScene)
 | 
			
		||||
 */
 | 
			
		||||
status_t sampleLight_sceneCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
 | 
			
		||||
{
 | 
			
		||||
	if(pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT){
 | 
			
		||||
		if(pAddrInfo->dirCluster == ZCL_FRAME_CLIENT_SERVER_DIR){
 | 
			
		||||
			switch(cmdId){
 | 
			
		||||
	if (pAddrInfo->dstEp == SAMPLE_LIGHT_ENDPOINT)
 | 
			
		||||
	{
 | 
			
		||||
		if (pAddrInfo->dirCluster == ZCL_FRAME_CLIENT_SERVER_DIR)
 | 
			
		||||
		{
 | 
			
		||||
			switch (cmdId)
 | 
			
		||||
			{
 | 
			
		||||
			case ZCL_CMD_SCENE_STORE_SCENE:
 | 
			
		||||
				sampleLight_sceneStoreReqHandler((zcl_sceneEntry_t *)cmdPayload);
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user