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

📄 console_remote_control.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
*******************************************************************************
**                                                                           **
**  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 + -