亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pmp_key_task.c

?? 嵌入式系統(tǒng)下的文件管理處理,和基本圖片jpg格式處理原代碼
?? C
?? 第 1 頁 / 共 4 頁
字號(hào):
static UINT16 LastKey;
// key TASK 的序列
static UINT32 keyDrvQueBuf[KEY_DRV_QUE_SIZE];


// 定時(shí)器進(jìn)行按鍵的處理
static void process_powersave_period(  void );

// 按鍵對節(jié)電模式的處理
static void process_powersave_key( void );


static UINT32 SPMP_KeyScan_Enable_Flag=1;
extern UINT32 g_uiStartFlag;	//add for nes game




/*
 *	物理按鍵 和 GUI 消息的對應(yīng)表	(用戶可以修改)
 */
static const UINT8 key_map_table[13][2] = 
{
//  物理掃描值  GUI 按鍵值
	{KEY_UP,	GUI_KEY_UP},
	{KEY_DOWN,	GUI_KEY_DOWN},
	{KEY_LEFT,	GUI_KEY_LEFT},
	{KEY_RIGHT, GUI_KEY_RIGHT},

	{KEY_OK,	GUI_KEY_OK},
	{KEY_ESC,	GUI_KEY_ESC},
	{KEY_A,		GUI_KEY_F1},	
	{KEY_B,		GUI_KEY_F2},

	// 【10/25/2006】 17:27  lanzhu 根據(jù) 5K 鍵盤對應(yīng)關(guān)系進(jìn)行整理
	{KEY_TELE,	GUI_KEY_MENU},
	{KEY_WIDE,	GUI_KEY_TAB},
	{KEY_M,		GUI_KEY_F3},
	{KEY_RESET, GUI_KEY_F4},
	{KEY_START, GUI_KEY_START},
};

/*
 *	 按鍵與按鍵音轉(zhuǎn)換表		(用戶可以修改)
 */
static const UINT8 key_tone_table[8][2] = 
{
//  物理鍵值	在配置表中的偏移    
	{KEY_UP,		0},
	{KEY_DOWN,		1},
	{KEY_LEFT,		2},
	{KEY_RIGHT,		3},
	{KEY_ESC,		4},
	{KEY_OK,		5},
	{KEY_WIDE,		6},	
	{KEY_TELE,		7},
};	

/*
 *	物理按鍵 和 NES GAME 內(nèi)在鍵值的對應(yīng)表格 (用戶可以修改)
 */

#define KEY_POWER			(0x1111)
#define PMP_NES_EXIT		(0x1112)
#define NES_KEY_NUM			(10)

static const UINT32 nes_game_key_table[10][2] = 
{
//	物理鍵值	NES GAME 鍵值
	{DUMMY_KEY,	0x00					},		// 按鍵的釋放動(dòng)作, 用戶不能改動(dòng)

	{KEY_UP,	MCATCH_EVENT_KEY_UP		},
	{KEY_DOWN,	MCATCH_EVENT_KEY_DOWN	},
	{KEY_LEFT,	MCATCH_EVENT_KEY_LEFT	},
	{KEY_RIGHT,	MCATCH_EVENT_KEY_RIGHT	},

	{KEY_OK,	MCATCH_EVENT_KEY_START	},
	{KEY_ESC,	MCATCH_EVENT_KEY_SELECT },	
	{KEY_TELE,	MCATCH_EVENT_KEY_A		},
	{KEY_WIDE,	MCATCH_EVENT_KEY_B		},

	{KEY_POWER,	PMP_NES_EXIT		},
};

 /**************************************************************************
 *                 E X T E R N A L   R E F E R E N C E S                  *
 **************************************************************************/
extern	void* aptask_q;

extern UINT32 SPMP_GetHoldKeyStatus(void);
/**************************************************************************
 *               F U N C T I O N   D E C L A R A T I O N S                *
 **************************************************************************/

static void clr_PowerDown( void );			// set gPowerDown 0x00;
static UINT16 get_PowerDown( void );		// get gPowerDown
static void increase_PowerDown( void );		// gPowerDown ++


// 定時(shí)器對自動(dòng)關(guān)機(jī)的處理
static void process_autooff_period(  void );
// 按鍵對自動(dòng)關(guān)機(jī)的處理
static void process_autooff_key( void );

// 檢測 關(guān)機(jī)鍵是否被按下
static UINT16 power_off_detect( void );
// 初始化 功能端口
static void function_port_initial( void );


#ifndef EVB_SN_V10
	static void  key_port_initial( void );// 初始化 鍵盤端口的 硬件設(shè)置	( S+MM開發(fā)板)
	static UINT16 get_key_value( void );	// 獲得鍵盤端口的值 (S+MM EVB )	
#endif


// 初始化 鍵盤端口的 硬件設(shè)置	( 北陽 開發(fā)板 V10 )
//static void  key_port_initial_snv10( void );

// 北陽 SN-6047B 開發(fā)板的初始化程序
static void  key_port_initial_sn6047b( void );	



// 掃描端口的值( SN EVB V10)
static UINT16 get_key_value_snv10( void );



// 檢查一個(gè)數(shù)據(jù)中 "0" 的個(gè)數(shù)
static UINT16 get_zero_bits( UINT32 data, UINT16 len );

// 輸入一個(gè)數(shù)值和需要檢查的位數(shù), 返回第一個(gè)0的在該數(shù)值中的偏移值
static UINT16 get_zero_position( UINT32 data, UINT16 len );

// 將鍵盤掃描碼 轉(zhuǎn)換為 GUI 能夠識(shí)別的鍵值編碼
static UINT16 phy2gui_value( UINT16 physical_value);

// 啟動(dòng)鍵盤任務(wù)的程序
void SPMP_KeyDriverTimerFunc( void );

static void set_reg_bit(UINT32 RegAddr, UINT16 BitOffset, UINT16 Flag);

//獲取鍵掃描開啟/關(guān)閉狀態(tài)
UINT32 SPMP_KeyScan_EnableStatusGet(void);

// 關(guān)掉系統(tǒng)電源
void SPMP_PowerControl ( UINT16 flag );

// 設(shè)定和獲得 是否需要進(jìn)行POWER 鍵的掃描
extern void SPMP_Set_ScanPowerKey( UINT16 value );
extern UINT16 SPMP_Get_ScanPowerKey( void );


// 判斷是否需要進(jìn)行GUI 消息的發(fā)送
static UINT16 judge_gui_msg( UINT16 msg );

// 內(nèi)部函數(shù) NES 鍵盤的處理 
static UINT16 nes_key_process( UINT16 key_value );
// 內(nèi)部函數(shù) GUI 鍵盤的處理
static UINT16 gui_key_process( UINT16 LastKey, UINT16 PhyKeyValue );

// 獲得 POWER 是否被按下的狀況
static UINT16 get_power_key_status( void );
// 設(shè)置 POWER 是否被按下的狀況
static void set_power_key_status( UINT16  data );

// 在 NES狀態(tài)下對 POWER 鍵的處理
static void nes_power_process( UINT16 data );

// 將一個(gè)物理鍵值轉(zhuǎn)換為NES 鍵值
static UINT32 phy_2_nes_key( UINT16 phy_key );

extern UINT32 SPMP_GetPwrStatus( void);
static void process_lowpower_period(  void );

/************************************************************************/
/*		輸入一個(gè)按鍵值, 得到按鍵音的位置索引值
  input:
			key_value	[in]	UINT16
  output:
			按鍵音的位置索引值
  func:
                                                                        */
/************************************************************************/
UINT16 SPMP_KeyTone_GetIndex( UINT16 key_value )
{
	UINT16 i;

	for(i=0x00; i<0x08; i++)
	{
		if ( key_tone_table[i][0] == key_value ) 
		{
			return key_tone_table[i][1];
		}
	}

	return (-1);
}

/************************************************************************/
/*			設(shè)定是否需要進(jìn)行開關(guān)機(jī)鍵的掃描

  input:
			value	0 不需要掃描
					非0值需要進(jìn)行掃描
  output:
			void 
                                                                       */
/************************************************************************/
void SPMP_Set_ScanPowerKey( UINT16 value )
{	
	gScanPowerKey = value;
	return;
}

UINT16 SPMP_Get_ScanPowerKey( void )
{
	return gScanPowerKey;
}

/************************************************************************/
/*			設(shè)定自動(dòng)關(guān)機(jī)計(jì)數(shù)器的值
  input:
			value	[in]	UINT32
  output:
			void 
  func:
                                                                        */
/************************************************************************/
void SPMP_Set_AutoOffCnt(UINT32 value)
{
	gBakAutoOffCount = value;		// 備份值
	gNowAutoOffCount = value;		// 當(dāng)前值
	return;
}

/************************************************************************/
/*			鍵盤對節(jié)電的處理
  input:
  output:
  func:		按鍵對節(jié)電模式的處理
  note:
                                                                        */
/************************************************************************/
static void process_powersave_key( void )
{
	// 如果是 不需要進(jìn)行節(jié)電,直接返回
	if ( DISABLE_POWER_SAVE == SPMP_Get_PowerSaveFlag() ) {
		return;
	}

	// 如果當(dāng)前計(jì)數(shù)值為0, 說明已經(jīng)熄滅掉了
	if( !SPMP_Get_PowerSaveCount() )	
	{
		SPMP_LCM_LightCtrl( LCM_LIGHT_ENABLE );	// 點(diǎn)亮屏幕的背光
	}

	SPMP_Reset_PowerSaveCount();	// 將當(dāng)前的節(jié)電值進(jìn)行復(fù)位

	return;
}


/************************************************************************/
/*			定時(shí)對自動(dòng)關(guān)機(jī)進(jìn)行檢測
  input:
  output:
  func:
  note:
	                                                                    */
/************************************************************************/
static void process_autooff_period(  void )
{
	// 如果是禁止自動(dòng)關(guān)機(jī), 返回不用處理
	if( SPMP_AUTO_POWER_OFF_DISABLE == SPMP_Get_AutoPowerOff()){
		return;
	}

#ifdef KEY_DEBUG_1211
	DEBUG_OUTPUT(("\r\ AutoOff = 0x%x\r\n", gNowAutoOffCount));
#endif

	if ( gNowAutoOffCount ) {
		gNowAutoOffCount --;							// 計(jì)數(shù)值減一
	}
	else
	{
		increase_PowerDown();	// gPowerDown ++
		
#ifdef KEY_DEBUG_1211
		DEBUG_OUTPUT(("\r\n自動(dòng)關(guān)機(jī), 發(fā)送消息!\r\n"));
#endif
		SPMP_SendGUIMessage((UINT8)MSG_OTHER,(UINT32)POWER_DOWN_PREPARE, (UINT8)NULL); 		
	}	
	return;
}

/*
 *		按鍵對自動(dòng)關(guān)機(jī)的處理, 每次收到自動(dòng)關(guān)機(jī)后, 復(fù)位計(jì)數(shù)值
 */
static void process_autooff_key( void )
{
	gNowAutoOffCount = gBakAutoOffCount;		// 使用備份值
	return;
}

/************************************************************************/
/*			定時(shí)對進(jìn)行節(jié)電的處理
  input:
  output:
  func:
                                                                        */
/************************************************************************/
static void process_powersave_period(  void )
{
	UINT16	i;	
	
	// 如果是 不需要進(jìn)行節(jié)電,直接返回成功
	if ( DISABLE_POWER_SAVE == SPMP_Get_PowerSaveFlag() ) {
		return;
	}

	// 獲取當(dāng)前的計(jì)數(shù)值
	i = SPMP_Get_PowerSaveCount();

	if(!i){ // 如果已經(jīng)是 0 了,直接返回, 不需要繼續(xù)處理 
		return;
	}

	// 計(jì)數(shù)值減一
	SPMP_Dec_PowerSaveCount();

	if ( 1 == i ) 
	{
		SPMP_LCM_LightCtrl( LCM_LIGHT_DISABLE );	// 關(guān)掉系統(tǒng)的背光.
	}
	
	return;
}

/************************************************************************/
/*			控制EVB 電路的電源開關(guān)
  input:
			flag	[in]	UINT16  
							SPMP_POWER_OFF
							SPMP_POWER_ON
  output:	void 	
  func:
  note:
			如果是關(guān)閉系統(tǒng)電源, 程序不返回
										                                */
/************************************************************************/
void SPMP_PowerControl ( UINT16 flag )
{
	UINT16 i;

	i = 0;
	if ( SPMP_POWER_OFF != flag) {
		i ++;
	}
	
#ifndef PMP3050_EVB_SN_V10
	// set LCM GPIO 25 OUTPUT VALUE
	set_reg_bit( REG_LCM_GPIO_OUTPUT_VALUE + LCM_GPIO_25/8, LCM_GPIO_25%8, i);
	// set output enable 
	set_reg_bit( REG_LCM_GPIO_OUTPUT_ENABLE + LCM_GPIO_25/8, LCM_GPIO_25%8, 1);
	// set LCM OUTPUT SELECT 1 
	set_reg_bit( REG_LCM_GPIO_OUTPUT_SELECT + LCM_GPIO_25/8, LCM_GPIO_25%8, 1);
	if ( SPMP_POWER_OFF == flag) {
		// disable pull high 
		set_reg_bit( REG_LCM_GPIO_PULL_ENABLE + LCM_GPIO_25/8, LCM_GPIO_25%8, 0);		
	}
#else
	/*PMP3050_EVB_SN_V10 used HGPIO1 as Power_EN*/
	//disable HGPIO1 input
	set_reg_bit( REG_HGPIO_INPUT_ENABLE, 1, 0);
	//enable HGPIO1 output
	set_reg_bit( REG_HGPIO_OUTPUT_ENABLE, 1, 1);
	//set HGPIO1 output value
	set_reg_bit( REG_HGPIO_OUTPUT_VALUE, 1, i);

	if ( SPMP_POWER_OFF == flag) {
		// disable pull enable
		set_reg_bit( REG_HGPIO_PULL_ENABLE, 1, 0);		
	}
#endif

	
	while (1);
	
	return;
}
/************************************************************************/
/*			獲得當(dāng)前熱鍵的狀態(tài)的數(shù)據(jù)
  input:
			void 
  output:
			0		沒有關(guān)機(jī)鍵 按下 
			非0值	關(guān)機(jī)鍵 按下
  func:
			獲得當(dāng)前熱鍵的狀態(tài)信息
                                                                        */
/************************************************************************/
UINT16 SPMP_Get_PowerStatus( void )
{
	if ( gHotKeyStatus & 0x01 )
	{
		return APP_DRV_ERR;		// 非0值表示 關(guān)機(jī)鍵被按下
	}

	return APP_DRV_OK;			// 0 表示 有關(guān)機(jī)鍵被按下		
}
/************************************************************************/
/*			將寄存器的某位進(jìn)行置位或復(fù)位
  input:
			RegAddr		[in]	UINT32	32位的寄存器地址值
			BitOffset	[in]	UINT16	0 ~ 7
			Flag		[in]	UINT16	0 或者 非0值
  output:
			void 
  func:
                                                                        */
/************************************************************************/
static void set_reg_bit(UINT32 RegAddr, UINT16 BitOffset, UINT16 Flag)
{
	UINT8 j;
	UINT8 data;	

	// read data from register
	data = READ8( RegAddr );
	// 獲得數(shù)據(jù)因子
	j = 1 << BitOffset;	

	// 如果是"0", 進(jìn)行清0 的動(dòng)作
	if (!Flag) {
		j = ~j;
		data &= j;
	}
	else{
		data |= j;
	}	

	// 將數(shù)據(jù)寫回寄存器
	WRITE8( RegAddr, data );
	return;
}

/************************************************************************/
/* 啟動(dòng)鍵盤掃描程序
  input:	
			viod
  output:
			void
  func:	
			初始化鍵盤硬件端口的設(shè)置, 設(shè)定定時(shí)器程序
                                                                        */
/************************************************************************/
void SPMP_KeyDriverInit( void )
{
	LastKey = DUMMY_KEY;			// 上次的鍵值為空
	gHotKeyStatus = 0x00;			// 將熱鍵狀態(tài)清空

	gSecondCount = SECOND_COUNT;	

	clr_PowerDown();				// set gPowerDown 0x00

#ifndef	EVB_SN_V10
	DEBUG_OUTPUT(("\r\n key driver for SUNPLUS\r\n"));
	// 初始化鍵盤端口		(凌陽開發(fā)板)
	key_port_initial();	
#else

	DEBUG_OUTPUT(("\r\n key driver for SUNNORTH\r\n"));
	#ifndef SN_6047B		
		DEBUG_OUTPUT(("... EVB SN-6047\r\n"));
		// 初始化鍵盤端口		(北陽開發(fā)板)
		key_port_initial_snv10();		
	#else
		DEBUG_OUTPUT(("... EVB SN-6047B\r\n"));
		// 初始化鍵盤端口		(北陽開發(fā)板)
		key_port_initial_sn6047b();	
		// 初始化功能端口
		function_port_initial();
	#endif

#endif

	// 設(shè)定時(shí)的動(dòng)作
	tmrPeriodFuncSet(TIMER0, (void*)SPMP_KeyDriverTimerFunc, KEY_SCAN_PERIOD);   
	// 返回
	return;
}

/************************************************************************/
/*	啟動(dòng)鍵盤任務(wù)的程序
                                                                        */
/************************************************************************/
void SPMP_KeyDriverTimerFunc( void )
{
	osQuePost(keyDrvQ, (void*)0x55aa);	
}

/************************************************************************/
/*	key driver TASK 

  input:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电视剧在线看免费| 国产三级三级三级精品8ⅰ区| 欧美一级淫片007| 欧美激情在线一区二区三区| 亚洲丰满少妇videoshd| www.一区二区| 欧美精品一区视频| 日韩国产欧美在线播放| 成人av在线资源网站| 欧美成人aa大片| 三级亚洲高清视频| 亚洲午夜久久久久| 91丨porny丨在线| 日韩视频不卡中文| 一区二区在线看| 成人视屏免费看| 精品剧情v国产在线观看在线| 天堂在线一区二区| 欧美亚洲动漫另类| 一区二区久久久| 一本久久a久久精品亚洲| 国产精品每日更新| 高清久久久久久| 国产午夜亚洲精品理论片色戒| 狂野欧美性猛交blacked| 51午夜精品国产| 亚洲国产精品麻豆| 欧美少妇性性性| 亚洲一区电影777| 欧美专区在线观看一区| 亚洲中国最大av网站| 一本大道久久a久久精二百| 亚洲激情第一区| 色视频一区二区| 夜夜嗨av一区二区三区网页| 一本色道久久加勒比精品| 一区二区三区在线影院| 在线观看中文字幕不卡| 亚洲国产日韩av| 在线不卡的av| 精品一区二区在线播放| 精品日韩欧美一区二区| 国产精品888| 国产精品拍天天在线| 91美女片黄在线观看| 一区二区三区四区精品在线视频| 91国偷自产一区二区三区成为亚洲经典| 18成人在线观看| 欧美婷婷六月丁香综合色| 五月天亚洲婷婷| 精品国免费一区二区三区| 国产**成人网毛片九色| 一区二区三区在线免费视频| 777亚洲妇女| 国产99久久久国产精品潘金 | 91免费观看视频在线| 亚洲精品国产精华液| 在线不卡免费欧美| 免费人成网站在线观看欧美高清| 久久女同性恋中文字幕| 在线观看亚洲精品| 日韩成人午夜电影| 国产精品视频第一区| 欧美自拍丝袜亚洲| 精品一区二区三区免费观看 | 久久国产人妖系列| 久久久久久一二三区| 成人网男人的天堂| 亚洲国产日韩综合久久精品| 2020国产精品久久精品美国| 99热在这里有精品免费| 免费不卡在线观看| 中文字幕一区二区不卡| 欧美一级高清大全免费观看| 波多野洁衣一区| 麻豆一区二区在线| 伊人开心综合网| 中文字幕不卡一区| 欧美sm美女调教| 日本久久精品电影| 国产传媒一区在线| 另类欧美日韩国产在线| 国产精品美女www爽爽爽| 91麻豆精品国产91久久久使用方法 | 精品区一区二区| 成人av在线一区二区三区| 丝袜美腿高跟呻吟高潮一区| 国产日韩欧美麻豆| 日韩欧美专区在线| 欧洲精品一区二区三区在线观看| 国产一区二区三区不卡在线观看| 亚洲自拍偷拍网站| 最新久久zyz资源站| 欧美成人bangbros| 7777精品伊人久久久大香线蕉的| 91麻豆高清视频| 国产精品亚洲专一区二区三区| 天堂精品中文字幕在线| 亚洲另类在线一区| 精品久久久久久综合日本欧美| 欧美亚洲禁片免费| 欧亚洲嫩模精品一区三区| 不卡影院免费观看| 国产一二精品视频| 免费成人小视频| 奇米一区二区三区| 日韩中文字幕亚洲一区二区va在线| 亚洲黄色录像片| 亚洲免费在线观看| 亚洲精选视频免费看| 综合久久久久久| 国产精品久线在线观看| 欧美国产精品一区二区三区| 久久久久久久国产精品影院| 亚洲精品一区二区三区在线观看| 欧美一区二区三区免费观看视频| 在线不卡a资源高清| 91精品国产综合久久久蜜臀粉嫩 | 欧美日韩亚洲丝袜制服| 色菇凉天天综合网| 欧美在线视频全部完| 欧美色精品天天在线观看视频| 欧美午夜精品久久久| 欧美视频精品在线| 日韩一卡二卡三卡国产欧美| 日韩一区二区在线观看视频| 精品久久久久久无| 久久久蜜桃精品| 最近日韩中文字幕| 亚洲成人一区二区在线观看| 青青草伊人久久| 国产精品一区二区久久精品爱涩| 国产精品影视天天线| 91网站最新网址| 91精品国产综合久久婷婷香蕉| 日韩欧美精品在线视频| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美日韩国产天堂| 日韩一区二区三区精品视频| xnxx国产精品| 亚洲欧洲性图库| 午夜国产精品影院在线观看| 久久99精品国产.久久久久久| 国产不卡一区视频| 在线视频一区二区免费| 日韩欧美第一区| 一区在线播放视频| 青草国产精品久久久久久| 国产一区二区在线看| 91在线观看成人| 91麻豆精品国产自产在线| 国产精品你懂的| 日一区二区三区| 成人妖精视频yjsp地址| 欧美日韩免费高清一区色橹橹| 久久综合一区二区| 亚洲网友自拍偷拍| 国产精品一区免费视频| 欧美日韩精品三区| 欧美性生交片4| 91精品麻豆日日躁夜夜躁| 日韩精品一区二区三区中文精品 | 日韩一卡二卡三卡| 亚洲免费观看在线视频| 国产精品乡下勾搭老头1| 色婷婷久久久亚洲一区二区三区| 欧美精品自拍偷拍动漫精品| 欧美精品一区在线观看| 亚洲制服丝袜一区| 91婷婷韩国欧美一区二区| 91精品视频网| 一片黄亚洲嫩模| 本田岬高潮一区二区三区| 国产精品电影一区二区| 精品一区二区三区日韩| 另类成人小视频在线| 99免费精品视频| 久久影院视频免费| 首页国产欧美久久| 91久久精品日日躁夜夜躁欧美| 欧美xxxx老人做受| 婷婷综合久久一区二区三区| 99国产精品视频免费观看| 久久精品一区二区三区av| 日韩精品一级中文字幕精品视频免费观看| 国产成人精品免费看| 久久精品夜夜夜夜久久| 久久不见久久见免费视频1| 在线不卡免费欧美| 亚洲影视在线播放| 色婷婷一区二区三区四区| 国产精品美女一区二区三区| 国产一区啦啦啦在线观看| 26uuu国产在线精品一区二区| 热久久国产精品| 欧美一区午夜精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 在线播放91灌醉迷j高跟美女 | 亚洲精品免费视频| 99热在这里有精品免费|