⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 halkey.c

📁 威望公司MP3 + USB MCU 的参考软件
💻 C
字号:
/****************************************************************
*                      Viaon Technology (Suzhou) Co.,Ltd
*
*    Copyright 2007, Viaon Technology (Suzhou) Co.,Ltd,Suzhou,China
*                    All rights reserved.
*
*
* Filename:      	halmatrixkey.c
*
* Programmer:    	Greg 
*
* Created: 	 	1/2/2008
*
* Description: 		public functions 
*              
*        
* Change History (most recent first):	2008.1.2
****************************************************************/
//Key Scan through GPIO pins.
#include "utiltypedef.h"
#include "va4010reg.h"
#include "common.h"
#include "halkey.h"

extern volatile BYTE data byGap;
extern volatile BYTE data SongLocateTick;
BOOL data IsJumpFlag = FALSE;
static BYTE data gbyKeyFSM = KEY_FSM_IDLE;
void halKeyFSM(void)
{
	//#if (DIGITAL_SHOW==DIGITAL_SHOW_DLED)
	
#if(BOARD_ID == EVB_V1)
	//#if 0
			
		KEY_IN_ENABLE();
//		KEY_PULL_UP();
		
		switch(gbyKeyFSM){
			case KEY_FSM_IDLE:{
				byGap = 0;	//reset gap counter
				if(KEY_Stop == 0){ //key down
					gbyKeyFSM = KEY_FSM_STOP;
				}else if(KEY_FsVu == 0){
					gbyKeyFSM = KEY_FSM_FSVU;
				}else if(KEY_RsVd == 0){
					gbyKeyFSM = KEY_FSM_RSVD;
				}else if(KEY_PlayPause == 0){
					gbyKeyFSM = KEY_FSM_PLAYPAUSE;
				}	
				break;
			}
			
			case KEY_FSM_STOP:{
				if(KEY_Stop == 0){
					break;		//FSM state not change		
				}
	
				//key up
				gbyKeyFSM = KEY_FSM_IDLE;
				if(byGap >=KEY_STABLE_CNT){ // A valid key press
					//UartOutText("-I-: KEY_FSM_FMCH \r\n");
					keystatus = KEY_STATUS_STOP;
				}
				break;
			}

			case KEY_FSM_FSVU:{
				if(KEY_FsVu == 0){
#if 0				
					if(byGap>KEY_STABLE_2S){
						//UartOutText("-I-: KEY_FSM_FSVU 2S \r\n");
						//gbyKeyFSM = KEY_FSM_FSVU_2S;
						keystatus = KEY_STATUS_VOLUP;
						byGap = KEY_STABLE_2S -KEY_SAMPLE_CNT;	//byGap = 0;
					}	
#endif				
					break;		//FSM state not change		
				}
	
				gbyKeyFSM = KEY_FSM_IDLE;
				if(byGap >=KEY_STABLE_CNT){
					UartOutText("-I-: KEY_FSM_FSVU \r\n");
					keystatus = KEY_STATUS_FSEEK;
					IsJumpFlag = TRUE;
					SongLocateTick = 0;
				}
				break;
			}
			case KEY_FSM_RSVD:{
				if(KEY_RsVd == 0){
#if 0				
					
					if(byGap>KEY_STABLE_2S){
						//UartOutText("-I-: KEY_FSM_FSVU 2S \r\n");
						//gbyKeyFSM = KEY_FSM_RSVD_2S;
						keystatus = KEY_STATUS_VOLDOWN;
						byGap = KEY_STABLE_2S -KEY_SAMPLE_CNT;	//byGap = 0;
					}
#endif				
					
					break;		//FSM state not change		
				}
	
				gbyKeyFSM = KEY_FSM_IDLE;
				if(byGap >=KEY_STABLE_CNT){
					//UartOutText("-I-: KEY_FSM_RSVD \r\n");
					keystatus = KEY_STATUS_RSEEK;
					IsJumpFlag = TRUE;
					SongLocateTick = 0;
				}			
				break;
			}

			
			case KEY_FSM_PLAYPAUSE:{
				if(KEY_PlayPause == 0){
					break;		//FSM state not change		
				}
	
				gbyKeyFSM = KEY_FSM_IDLE;
				if(byGap >=KEY_STABLE_CNT){ // A valid key press
					//UartOutText("-I-: KEY_FSM_PLAYSTOP \r\n");
					keystatus = KEY_STATUS_PLAYPAUSE;
				}
	
				break;
			}
						
			break;
			
		}	
		
#elif (BOARD_ID == HX_001)
		KEY_IN_ENABLE();
	
		switch(gbyKeyFSM){
			case KEY_FSM_IDLE:{
				byGap = 0;	//reset gap counter
				if(KEY_Stop == 0){ //key down
					gbyKeyFSM = KEY_FSM_STOP;
				}else if(KEY_FsVu == 0){
					gbyKeyFSM = KEY_FSM_FSVU;
				}else if(KEY_RsVd == 0){
					gbyKeyFSM = KEY_FSM_RSVD;
				}else if(KEY_PlayPause == 0){
					gbyKeyFSM = KEY_FSM_PLAYPAUSE;
				}	
				break;
			}
			
			case KEY_FSM_STOP:{
				if(KEY_Stop == 0){
					break;		//FSM state not change		
				}
	
				//key up
				gbyKeyFSM = KEY_FSM_IDLE;
				if(byGap >=KEY_STABLE_CNT){ // A valid key press
					//UartOutText("-I-: KEY_FSM_FMCH \r\n");
					keystatus = KEY_STATUS_STOP;
				}
				break;
			}

			case KEY_FSM_FSVU:{
				if(KEY_FsVu == 0){
#if 0				
					if(byGap>KEY_STABLE_2S){
						//UartOutText("-I-: KEY_FSM_FSVU 2S \r\n");
						//gbyKeyFSM = KEY_FSM_FSVU_2S;
						keystatus = KEY_STATUS_VOLUP;
						byGap = KEY_STABLE_2S -KEY_SAMPLE_CNT;	//byGap = 0;
					}	
#endif				
					break;		//FSM state not change		
				}
	
				gbyKeyFSM = KEY_FSM_IDLE;
				if(byGap >=KEY_STABLE_CNT){
					UartOutText("-I-: KEY_FSM_FSVU \r\n");
					keystatus = KEY_STATUS_FSEEK;
					IsJumpFlag = TRUE;
					SongLocateTick = 0;
				}
				break;
			}
			case KEY_FSM_RSVD:{
				if(KEY_RsVd == 0){
#if 0				
					
					if(byGap>KEY_STABLE_2S){
						//UartOutText("-I-: KEY_FSM_FSVU 2S \r\n");
						//gbyKeyFSM = KEY_FSM_RSVD_2S;
						keystatus = KEY_STATUS_VOLDOWN;
						byGap = KEY_STABLE_2S -KEY_SAMPLE_CNT;	//byGap = 0;
					}
#endif				
					
					break;		//FSM state not change		
				}
	
				gbyKeyFSM = KEY_FSM_IDLE;
				if(byGap >=KEY_STABLE_CNT){
					//UartOutText("-I-: KEY_FSM_RSVD \r\n");
					keystatus = KEY_STATUS_RSEEK;
					IsJumpFlag = TRUE;
					SongLocateTick = 0;
				}			
				break;
			}

			
			case KEY_FSM_PLAYPAUSE:{
				if(KEY_PlayPause == 0){
					break;		//FSM state not change		
				}
	
				gbyKeyFSM = KEY_FSM_IDLE;
				if(byGap >=KEY_STABLE_CNT){ // A valid key press
					//UartOutText("-I-: KEY_FSM_PLAYSTOP \r\n");
					keystatus = KEY_STATUS_PLAYPAUSE;
				}
	
				break;
			}
						
			break;
			
		}	
#endif	
		return;
	}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -