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

📄 key_send.c

📁 SAMSUNG 5009的源代码
💻 C
字号:
/****************************************************************************** *   Filename    : Key_send.c *   Start       : 2002. 11. 6. *   By          : Taejin Kwon *   Contact     : tj1kwon@samsung.co.kr *   Description : To send a data that can control the front micom. *				  It can be changed when a new micom is used. ****************************************************************************** *//****************************************************** *       INCLUDES *****************************************************/#include <string.h>#include "Basic_typedefs.h"#include "CUSTOM/Custom_option.h"#include "OS/OS_abstract.h"#include "API/SH_types.h"#include "API/SH_api.h"#include "API/SH_reg.h"#include "COMMON/Common.h"#include "I2c_api.h"#include "FP_data.h"#include "CUSTOM/Key_defs.h"#include "MAIN/Appl_types.h"#include "MAIN/Global_state.h"#include "CUSTOM/Osd_types.h"#include "DRIVER/WD/Wd_timer.h"#include "DRIVER/EEPROM/Eeprom_drv.h"/****************************************************** *       Global variables / functions *****************************************************//****************************************************** *       Extern variables  *****************************************************/extern SysQueue_t		gQ_key;extern ONOFF			gPower_state;extern volatile BOOL	gPower_off_start;extern BOOL gSetup_load_OK;#if _APP_CAP_KEY_INPUT_DELAYextern Key_t		 gKey_tx;#endif /* _APP_CAP_KEY_INPUT_DELAY */	#if _APP_CAP_FUNC_TRAY_AUTO_CLOSEextern volatile BOOL gScreen_saver_on;	extern BOOL gclose_at_saver;extern BOOL		gVersionOn;#endif/****************************************************** *       functions *****************************************************//****************************************************************************** *  Function name : KeyMsgSend *  Arguments     :  *       IN         data : key data from remote controller.  *					param : reseved for use in a future *       OUT	 *       I/O *  Return        : VOID *  By            : Taejin Kwon *  Description   : Send a message from remote key interrupt service routine. *		This routine has to be attached to a interrupt service routine. ****************************************************************************** */ #if _OLD_REMOTE_CONTROLconst unsigned char IrArray[] = {//00-07	RC_KEY_POWER,RC_KEY_ROOT_MENU,RC_KEY_XXXX,RC_KEY_PAUSE /* RC_KEY_PLAY */,	RC_KEY_XXXX,RC_KEY_TITLE_MENU,RC_KEY_ENTER,RC_KEY_UP,//08-0F	RC_KEY_VIDEOMODE, RC_KEY_PBC,RC_KEY_RIGHT,RC_KEY_DOWN,	RC_KEY_OPENCLOSE,RC_KEY_DISPLAY,RC_KEY_LEFT,RC_KEY_SETUP,//10-17	RC_KEY_REVERBRATION/*RC_KEY_XXXX*/,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_STOP,	RC_KEY_STEREO/*RC_KEY_XXXX*/,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//18-1F	RC_KEY_FUNC,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_KARAOKE,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_RETURN,//20-27	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//28-2F	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//30-37	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//38-2F	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//40-47	RC_KEY_BOOKMARK,/*RC_KEY_NUM10,*/RC_KEY_NUM9,RC_KEY_NUM6,RC_KEY_NUM3,	RC_KEY_NUM0,RC_KEY_NUM8,RC_KEY_NUM5,RC_KEY_NUM2,//48-4F	RC_KEY_PLAY/*RC_KEY_XXXX*/,RC_KEY_NUM7,RC_KEY_NUM4,RC_KEY_NUM1,	RC_KEY_PROGRAM,RC_KEY_REPEAT_AB,RC_KEY_REPEAT,RC_KEY_SEARCH,//50-57	RC_KEY_FF,RC_KEY_NEXT,RC_KEY_VOLUME_ADD,RC_KEY_MUTE/*(weilf)20060406*/,	RC_KEY_FR,RC_KEY_PREV,RC_KEY_VOLUME_REDUCE,RC_KEY_AUDIO,//58-5F	RC_KEY_SLOW_FWD,RC_KEY_ZOOM,RC_KEY_NTSC_PAL,RC_KEY_3D,	//RC_KEY_SLOW_REV,RC_KEY_STEP,RC_KEY_SUBTITLE,RC_KEY_ANGLE,	RC_KEY_VIDEOSCAN,RC_KEY_STEP,RC_KEY_SUBTITLE,RC_KEY_ANGLE,//60-67	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//68-6F	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//70-77	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//78-7F	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,};#elseconst unsigned char IrArray[] = {//00-07	RC_KEY_NUM1,RC_KEY_NUM2,RC_KEY_NUM3,RC_KEY_NUM4,	RC_KEY_NUM5,RC_KEY_NUM6,RC_KEY_NUM7,RC_KEY_NUM8,//08-0F	RC_KEY_NUM9,RC_KEY_SEARCH,RC_KEY_NUM0,RC_KEY_NUM10,	RC_KEY_POWER,RC_KEY_OPENCLOSE,RC_KEY_ENTER,RC_KEY_XXXX,//10-17	RC_KEY_UP,RC_KEY_DOWN,RC_KEY_LEFT,RC_KEY_RIGHT,	RC_KEY_SETUP,RC_KEY_TITLE_MENU,RC_KEY_PBC,RC_KEY_REPEAT_AB,//18-1F	RC_KEY_REPEAT,RC_KEY_RETURN,RC_KEY_ROOT_MENU,RC_KEY_ZOOM,	RC_KEY_AUDIO,RC_KEY_RESUME,RC_KEY_SUBTITLE,RC_KEY_ANGLE,//20-27	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//28-2F	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//30-37	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//38-2F	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//40-47	RC_KEY_FR,RC_KEY_FF,RC_KEY_PREV,RC_KEY_NEXT,	RC_KEY_PLAYPAUSE,RC_KEY_STOP,RC_KEY_XXXX,RC_KEY_XXXX,//48-4F	RC_KEY_DISPLAY,RC_KEY_STEP,RC_KEY_3D,RC_KEY_VOLUME_ADD,	RC_KEY_DIGEST,RC_KEY_SLOW_FWD,RC_KEY_MUTE,RC_KEY_VOLUME_REDUCE,//50-57	RC_KEY_NTSC_PAL,RC_KEY_RANDOM,RC_KEY_STEREO,RC_KEY_PROGRAM, 	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//58-5F	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//60-67	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//68-6F	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//70-77	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,//78-7F	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,	RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,RC_KEY_XXXX,};#endifVOID myKeyMsgSender(unsigned char ucdata ){	static UCHAR pre_param = 0xFF;	static UCHAR pre_key = 0xFF;		Key_t		 tx;	SYS_RETURN	 ret;	/* 	 * If power off sequence is started, ignore all key inputs	 * until power off.	 */	if( gPower_off_start == TRUE )		return;	tx.key_mode = RC_KEY_MODE_NORMAL; //RC_KEY_MODE_DUMMY;	tx.key_data = ucdata;	tx.param = 0;	//SysPrintf("\nKeyMsgSender data =0x%x",  ucdata);	switch(tx.key_data)	{		case RC_KEY_POWER:			if(!gSetup_load_OK)				return;						if( gPower_state == TOGGLE_ON )			{				/* Start timer */				SH_StartPowerOffCheck();			} else {				SH_FEState_et  state;								/* 				 *  If the cable of avloader deck is not connected properly,				 * system cann't boot.				 * So, we must check the connectivity.				 */				state = SH_FE_GetState();				if( state != SH_FE_STATE_NOT_CONNECT )				{					gPower_state = TOGGLE_ON;					SH_SetWakeMode();				}				return;			}					break;		case RC_KEY_OPENCLOSE:			/* if power off state, power on first and open tray */			if( gPower_state != TOGGLE_ON )			{#if _APP_CAP_FUNC_OPEN_WAKE_UP							Enable_Int(INT_TIMERD);#if _APP_CAP_PERI_EEPROM_BUF_MEM								SH_readEepromToBuffer();				SH_writeEepromByte(EEPROM_ADDRESS_OPEN_CMD, 0xA5);				SH_writeEepromFromBuffer();#else				SH_writeEepromByte(EEPROM_ADDRESS_OPEN_CMD, 0xA5);#endif				SH_SetWakeMode();#endif				return;			}#if _APP_CAP_FUNC_TRAY_AUTO_CLOSE			else if(gclose_at_saver)			{				if( gScreen_saver_on == FALSE )				{						StateTimerExpired(0);				}				gclose_at_saver = 0;				gVersionOn = 0;				SH_writeEepromByte(EEPROM_ADDRESS_OPEN_CMD, 0xA5);				return;			}#endif			else if(GetMainMode() != MODE_NORMAL_DISC)					return;			break;		case RC_KEY_PLAY:			/* if power off state, power on */			if( gPower_state != TOGGLE_ON )			{				gPower_state = TOGGLE_ON;				SH_SetWakeMode();				return;			}			break;		case RC_KEY_FF:		case RC_KEY_FR:              case RC_KEY_SLOW_FWD:                			tx.param = PM_SPEED_UNDEFINED;			break;					case RC_KEY_XXXX:			return;		default:			break;	}	/* 	 * Check previous key input. If same, skip it 	 * It is just used for Shuttle action.	 */     if( ((tx.key_data == RC_KEY_FF || tx.key_data == RC_KEY_FR) &&			(tx.param != PM_SPEED_UNDEFINED)) ||			(tx.key_data == RC_KEY_PLAY && tx.param == PM_SPEED_UNDEFINED))		{		/* If same direction and same speed, don't need to send it */		if( pre_key == tx.key_data &&  pre_param == tx.param  )				{			/* save previous button action */			pre_key = tx.key_data;						pre_param = tx.param;						return;				}		/* save previous button action */		pre_key = tx.key_data;		pre_param = tx.param;	}#if _APP_CAP_KEY_INPUT_DELAY		/*	 *	RC_KEY_POWER should work immediately.	 *	 *	TJ 2005.08.06	 */	if( tx.key_data == RC_KEY_POWER )	{		ret = SysSendMsg( &gQ_key, &tx, sizeof(Key_t), SYS_NO_WAIT, 0 );		if( ret == SYS_RETURN_FAIL )		{			SysPrintf("\n[KEY SENDER] Cannot send message");		}				} else {		KeyDelayTimerSet( TIMER_ENABLE );		memcpy(&gKey_tx, &tx, sizeof(Key_t));	}#else /* _APP_CAP_KEY_INPUT_DELAY */	ret = SysSendMsg( &gQ_key, &tx, sizeof(Key_t), SYS_NO_WAIT, 0 );	if( ret == SYS_RETURN_FAIL )	{		SysPrintf("\n[KEY SENDER] Cannot send message");	}	#endif/* _APP_CAP_KEY_INPUT_DELAY */		} VOID SendGeneralRcKey(UCHAR rc_key_data){	myKeyMsgSender(rc_key_data);}VOID KeyMsgSender( UINT data, VOID *param ){	data = IrArray[(UCHAR)data];	if(data !=RC_KEY_XXXX)		myKeyMsgSender(data);}

⌨️ 快捷键说明

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