📄 key_send.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 + -