| 
					
				 | 
			
			
				@@ -11,12 +11,13 @@ uint8 task_btn_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define KEY_DEMO_ONCE_TIMER      0x0001 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define KEY_DEMO_CYCLE_TIMER     0x0002 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+int last_release_btn_ind = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void evt_press_release(int i){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 短按抬起  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	osal_start_timerEx(task_btn_id, EVT_TIME_CHECK, TIME_CHECK_TEMP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	// 短按抬起后,1000ms 后检测该按键是否为长按,是则 调整色温 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	osal_start_timerEx(task_btn_id, BTN_EVT_TIME_CHECK, TIME_CHECK_TEMP * 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 500ms 后检测是否 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	last_release_btn_ind = i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -26,7 +27,17 @@ static void key_press_evt(uint8_t i,key_evt_t key_evt) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	switch(key_evt) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		case HAL_KEY_EVT_PRESS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			LOG("key(press down)\n");		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LOG("key(press down)\n");	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (last_release_btn_ind != -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (last_release_btn_ind == i)	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// 按下后再次按下 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				osal_stop_timeEx(task_btn_id, BTN_EVT_TIME_CHECK) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef HAL_KEY_SUPPORT_LONG_PRESS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			osal_start_timerEx(task_btn_id, KEY_DEMO_LONG_PRESS_EVT, HAL_KEY_LONG_PRESS_TIME); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -35,7 +46,7 @@ static void key_press_evt(uint8_t i,key_evt_t key_evt) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		case HAL_KEY_EVT_RELEASE: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			LOG("key(press release)\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// evt_press_release(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			evt_press_release(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef HAL_KEY_SUPPORT_LONG_PRESS		 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -65,7 +76,6 @@ int btn_init(task_id){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         key_state.key[i].idle_level = HAL_HIGH_IDLE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 注册同时按下事件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     key_state.task_id = task_btn_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	key_state.key_callbank = key_press_evt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	key_init(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -76,23 +86,21 @@ int btn_init(task_id){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 按钮事件处理函数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 uint16 Key_ProcessEvent( uint8 task_id, uint16 events ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	// LOG("Key_ProcessEvent\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	// LOG("key event:%04x\n",events); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if(task_id != task_btn_id){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if( events & KEY_DEMO_ONCE_TIMER){		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//LOG("once timer\n\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LOG("once timer\n\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		osal_start_timerEx( task_btn_id, KEY_DEMO_ONCE_TIMER , 5000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return (events ^ KEY_DEMO_ONCE_TIMER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if( events & KEY_DEMO_CYCLE_TIMER){		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//LOG("recycle timer\n\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LOG("recycle timer\n\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return (events ^ KEY_DEMO_CYCLE_TIMER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if( events & HAL_KEY_EVENT){	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// LOG("HAL_KEY_EVENT \n");											//do not modify,key will use it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LOG("HAL_KEY_EVENT \n");											//do not modify,key will use it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		for (uint8 i = 0; i < HAL_KEY_NUM; ++i){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if ((key_state.temp[i].in_enable == TRUE)|| 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			(key_state.key[i].state == HAL_STATE_KEY_RELEASE_DEBOUNCE)){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -105,12 +113,13 @@ uint16 Key_ProcessEvent( uint8 task_id, uint16 events ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef HAL_KEY_SUPPORT_LONG_PRESS	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if( events & KEY_DEMO_LONG_PRESS_EVT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LOG("KEY_DEMO_LONG_PRESS_EVT\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (int i = 0; i < HAL_KEY_NUM; ++i){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(key_state.key[i].state == HAL_KEY_EVT_PRESS){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				LOG("key:%d gpio:%d	",i,key_state.key[i].pin); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				LOG("key(long press down)\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// LOG("KEY_DEMO_LONG_PRESS_EVT\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (int i = 0; i <= HAL_KEY_NUM; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// LOG("%d --- state [%d]",i, key_state.key[i].state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(key_state.key[i].state == HAL_KEY_EVT_PRESS) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				osal_start_timerEx(task_btn_id, KEY_DEMO_LONG_PRESS_EVT, HAL_KEY_LONG_PRESS_TIME); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return (events ^ KEY_DEMO_LONG_PRESS_EVT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -124,4 +133,3 @@ uint16 Key_ProcessEvent( uint8 task_id, uint16 events ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 |