📄 console_remote_control.cpp
字号:
/******************************************************************************
*******************************************************************************
** **
** Copyright (c) 2006 Videon Central, Inc. **
** All rights reserved. **
** **
** The computer program contained herein contains proprietary information **
** which is the property of Videon Central, Inc. The program may be used **
** and/or copied only with the written permission of Videon Central, Inc. **
** or in accordance with the terms and conditions stipulated in the **
** agreement/contract under which the programs have been supplied. **
** **
*******************************************************************************
******************************************************************************/
/**
* @file console_remote_control.cpp
*
* $Revision: 1.4 $
*
* sdk keyboard based remote control implementation for console player sample
*
*/
#include "remote.h"
#include "dbgprint.h"
#include "vdvd_types.h"
#include "osapi.h"
#include "remote.h"
#include "keyboard.h"
/********************************************************************************
CONSTANTS
********************************************************************************/
#define POLL_KEYBOARD_THREAD_STACK_SIZE 2048
/********************************************************************************
LOCAL ROUTINES
********************************************************************************/
static const char* RemoteControlButtonName ( RC_KEY button );
static BOOLEAN ConvertKeycodeToRemoteCode ( KeyboardKeycodeType keycode, RC_KEY* remoteControlKey );
static void PollKeyboardThread ( void );
static void RemoteControlHelp ( void );
/********************************************************************************
GLOBAL VARIABLES
********************************************************************************/
static volatile int pollKeyboardThreadExitRequest = FALSE;
static ULONG pollKeyboardThreadHandle = 0;
static BOOLEAN remoteInitialized = FALSE;
static RC_CALLBACK remoteCallback = NULL;
static PVOID remoteCallbackContext = NULL;
/**
*******************************************************************************
* RemoteControlButtonName translates a remote control button code into a null
* terminated string containing button name.
*
* @return string containing button name
*******************************************************************************/
static const char* RemoteControlButtonName ( RC_KEY button )
{
switch ( button )
{
case RC_BTN_POWER: return ("RC_BTN_POWER"); break;
case RC_BTN_SUB_TITLES: return ("RC_BTN_SUB_TITLES"); break;
case RC_BTN_WIDE_SCREEN: return ("RC_BTN_WIDE_SCREEN"); break;
case RC_BTN_MENU: return ("RC_BTN_MENU"); break;
case RC_BTN_TITLE: return ("RC_BTN_TITLE"); break;
case RC_BTN_EXIT: return ("RC_BTN_EXIT"); break;
case RC_BTN_0: return ("RC_BTN_0"); break;
case RC_BTN_1: return ("RC_BTN_1"); break;
case RC_BTN_2: return ("RC_BTN_2"); break;
case RC_BTN_3: return ("RC_BTN_3"); break;
case RC_BTN_4: return ("RC_BTN_4"); break;
case RC_BTN_5: return ("RC_BTN_5"); break;
case RC_BTN_6: return ("RC_BTN_6"); break;
case RC_BTN_7: return ("RC_BTN_7"); break;
case RC_BTN_8: return ("RC_BTN_8"); break;
case RC_BTN_9: return ("RC_BTN_9"); break;
case RC_BTN_UP: return ("RC_BTN_UP"); break;
case RC_BTN_DOWN: return ("RC_BTN_DOWN"); break;
case RC_BTN_LEFT: return ("RC_BTN_LEFT"); break;
case RC_BTN_RIGHT: return ("RC_BTN_RIGHT"); break;
case RC_BTN_ENTER: return ("RC_BTN_ENTER"); break;
case RC_BTN_VOL_UP: return ("RC_BTN_VOL_UP"); break;
case RC_BTN_VOL_DOWN: return ("RC_BTN_VOL_DOWN"); break;
case RC_BTN_VOL_MUTE: return ("RC_BTN_VOL_MUTE"); break;
case RC_BTN_PLAY: return ("RC_BTN_PLAY"); break;
case RC_BTN_STOP: return ("RC_BTN_STOP"); break;
case RC_BTN_PAUSE: return ("RC_BTN_PAUSE"); break;
case RC_BTN_PROG_GUIDE: return ("RC_BTN_PROG_GUIDE"); break;
case RC_BTN_INFO: return ("RC_BTN_INFO"); break;
case RC_BTN_EJECT: return ("RC_BTN_EJECT"); break;
case RC_BTN_SKIP_FWD: return ("RC_BTN_SKIP_FWD"); break;
case RC_BTN_SKIP_BWD: return ("RC_BTN_SKIP_BWD"); break;
case RC_BTN_FAST_FWD: return ("RC_BTN_FAST_FWD"); break;
case RC_BTN_FAST_RWD: return ("RC_BTN_FAST_RWD"); break;
case RC_BTN_SLOW_FWD: return ("RC_BTN_SLOW_FWD"); break;
case RC_BTN_SLOW_RWD: return ("RC_BTN_SLOW_RWD"); break;
case RC_BTN_STEP_FWD: return ("RC_BTN_STEP_FWD"); break;
case RC_BTN_SETUP: return ("RC_BTN_SETUP"); break;
case RC_BTN_ANGLE: return ("RC_BTN_ANGLE"); break;
case RC_BTN_REPEAT_AB: return ("RC_BTN_REPEAT_AB"); break;
case RC_BTN_REPEAT: return ("RC_BTN_REPEAT"); break;
case RC_BTN_AUDIO_SELECT: return ("RC_BTN_AUDIO_SELECT"); break;
case RC_BTN_DISPLAY: return ("RC_BTN_DISPLAY"); break;
case RC_BTN_SEARCH: return ("RC_BTN_SEARCH"); break;
case RC_BTN_ZOOM: return ("RC_BTN_ZOOM"); break;
case RC_BTN_RETURN: return ("RC_BTN_RETURN"); break;
case RC_BTN_GEN_1: return ("RC_BTN_GEN_1"); break;
case RC_BTN_GEN_2: return ("RC_BTN_GEN_2"); break;
case RC_BTN_GEN_3: return ("RC_BTN_GEN_3"); break;
case RC_BTN_GEN_4: return ("RC_BTN_GEN_4"); break;
case RC_BTN_GEN_5: return ("RC_BTN_GEN_5"); break;
case RC_BTN_INVALID: return ("RC_BTN_INVALID"); break;
default:
return ("unkown remote control button");
break;
}
}
/**
*******************************************************************************
* ConvertKeycodeToRemoteCode converts a keyboard key into a remote control
* key.
*
* @param keycode = keyboard key code to convert
* @param remoteControlKey = pointer to a RC_KEY variable which will be assigned the remote control button code
*
* @return TRUE if keycode is converted, FALSE otherwise
*******************************************************************************/
static BOOLEAN ConvertKeycodeToRemoteCode( KeyboardKeycodeType keycode, RC_KEY* remoteControlKey )
{
BOOLEAN foundKey;
foundKey = TRUE;
if (( keycode >= 'a' ) && ( keycode <= 'z' ))
{
keycode = (KeyboardKeycodeType)(keycode - ('a'-'A'));
}
switch ( keycode )
{
case KEYBOARD_KEYCODE_UP_ARROW: *remoteControlKey = RC_BTN_UP; break;
case KEYBOARD_KEYCODE_LEFT_ARROW: *remoteControlKey = RC_BTN_LEFT; break;
case KEYBOARD_KEYCODE_ENTER: *remoteControlKey = RC_BTN_ENTER; break;
case KEYBOARD_KEYCODE_RIGHT_ARROW: *remoteControlKey = RC_BTN_RIGHT; break;
case KEYBOARD_KEYCODE_DOWN_ARROW: *remoteControlKey = RC_BTN_DOWN; break;
case 'X': *remoteControlKey = RC_BTN_POWER; break;
case 'Q': *remoteControlKey = RC_BTN_EXIT; break;
case 'M': *remoteControlKey = RC_BTN_MENU; break;
case 'T': *remoteControlKey = RC_BTN_TITLE; break;
case 'R': *remoteControlKey = RC_BTN_RETURN; break;
case 'V': *remoteControlKey = RC_BTN_SETUP; break;
case 'D': *remoteControlKey = RC_BTN_DISPLAY; break;
case 'E': *remoteControlKey = RC_BTN_EJECT; break;
case 'P': *remoteControlKey = RC_BTN_PLAY; break;
case 'S': *remoteControlKey = RC_BTN_STOP; break;
case 'U': *remoteControlKey = RC_BTN_PAUSE; break;
case '<': *remoteControlKey = RC_BTN_SKIP_BWD; break;
case '>': *remoteControlKey = RC_BTN_SKIP_FWD; break;
case ',': *remoteControlKey = RC_BTN_FAST_FWD; break;
case '.': *remoteControlKey = RC_BTN_FAST_RWD; break;
case 'A': *remoteControlKey = RC_BTN_ANGLE; break;
case 'I': *remoteControlKey = RC_BTN_AUDIO_SELECT; break;
case 'B': *remoteControlKey = RC_BTN_SUB_TITLES; break;
case 'J': *remoteControlKey = RC_BTN_REPEAT; break;
case 'K': *remoteControlKey = RC_BTN_REPEAT_AB; break;
case 'Z': *remoteControlKey = RC_BTN_ZOOM; break;
case '-': *remoteControlKey = RC_BTN_VOL_DOWN; break;
case '+': *remoteControlKey = RC_BTN_VOL_UP; break;
case '*': *remoteControlKey = RC_BTN_VOL_MUTE; break;
case '0': *remoteControlKey = RC_BTN_0; break;
case '1': *remoteControlKey = RC_BTN_1; break;
case '2': *remoteControlKey = RC_BTN_2; break;
case '3': *remoteControlKey = RC_BTN_3; break;
case '4': *remoteControlKey = RC_BTN_4; break;
case '5': *remoteControlKey = RC_BTN_5; break;
case '6': *remoteControlKey = RC_BTN_6; break;
case '7': *remoteControlKey = RC_BTN_7; break;
case '8': *remoteControlKey = RC_BTN_8; break;
case '9': *remoteControlKey = RC_BTN_9; break;
case 'C': *remoteControlKey = RC_BTN_SEARCH; break;
default:
foundKey = FALSE;
*remoteControlKey = RC_BTN_INVALID;
break;
}
return ( foundKey );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -