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

📄 bspkeypad.cpp

📁 Freescale ARM11系列CPU MX31的WINCE 5.0下的BSP
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
//------------------------------------------------------------------------------
// 
//  Copyright (C) 2004, Motorola Inc. All Rights Reserved
//
//------------------------------------------------------------------------------
//
//  Copyright (C) 2004-2006,2007 Freescale Semiconductor, Inc. All Rights Reserved.
//  THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
//  AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT
//
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
//
//  File:  bspkeypad.c
//
//  Provides BSP-specific configuration routines for the KPP peripheral.
//  Implementation of the keyboard platform dependent scan code to
//  Virtual Key mapping for keyboard driver.
//
//  Exports ScanCodeToVKey for the PDD to use to map scan codes to virtual
//  keys.  A version of this will be needed for every physical/virtual key
//  configuration.
//
//------------------------------------------------------------------------------
#include <windows.h>
#include <winuser.h>
#include <winuserm.h>
#include <ceddk.h>
#include <keybddr.h>
#include <laymgr.h>
#include <devicelayout.h>

#include "bsp.h"
#include "Keypad.hpp"


//------------------------------------------------------------------------------
// External Functions


//------------------------------------------------------------------------------
// External Variables
extern PCSP_KPP_REGS g_pKPP;


//------------------------------------------------------------------------------
// Defines
#define ScanCodeTableFirst       0x00
#define ScanCodeTableLast        0x99



#define E0ScanCodeTableFirst    0xE010
#define E0ScanCodeTableLast     0xE07F

#define KEY_DEBOUNCE_PERIOD      40    // msec
#define MAX_KEY_EVENTS           16

#define KPP_COLUMN_INUSE         8
#define KPP_ROW_INUSE            8
#define KEY_NUMBER               (KPP_COLUMN_INUSE*KPP_ROW_INUSE)
#define KPP_COLUMN_MASK          ((0x1<<KPP_COLUMN_INUSE) -1)
#define KPP_ROW_MASK             ((0x1<<KPP_ROW_INUSE) - 1)

//------------------------------------------------------------------------------
// Types
struct VirtualKeyMapping {
    UINT32 uiVk;
    UINT32 uiVkGenerated;
};

//------------------------------------------------------------------------------
// Global Variables
//------------------------------------------------------------------------------
// Local Variables

static volatile BOOL g_SysSuspend = FALSE;
static volatile BOOL g_bRestoreClocks = FALSE;
// This variable is global to this file because it
// will later be used in BSPKppPowerOff.
// Record of which keys were down the last time columns were scanned.
static UINT8 keyDown[KPP_COLUMN_INUSE];
static UINT32 prevDownTime[KEY_NUMBER]; // Time that the key went down.
static BOOL keyDownSent[KEY_NUMBER]; // Tells whether the key down event
                                         // has already been passed up.
                                         // Reset to false after key goes up.
static UINT8 kppStatus[KPP_COLUMN_INUSE]; // Row data from the last time
                                              // columns were scanned.
// Copies of scan sequence variables used to store and restore
// key data in case system enters suspend state
static UINT8 IntermediateScanCode[]=
{
    0x5A,//0x00
    0x05,
    0x26,
    0x46,
    0x1C,
    0x68,//0x05
    0x32,
    0x29,
    0x96,
    0x04,
    0x1E,//0x0A
    0x01,
    0x1B,
    0x78,
    0x33,
    0x94,
    0x98,//0x10
    0x99,
    0x16,
    0x3E,
    0x23,
    0x58,//0x15
    0x31,
    0x49,
    0x97,
    0x90,
    0x25,//0x1A
    0x45,
    0x24,
    0x1A,
    0x3A,
    0x5A,
    0x95,//0x20
    0x0B,
    0x83,
    0x0A,
    0x2B,
    0x22,//0x25
    0x3B,
    0x4B,  
    0x06,
    0x91,
    0x3D,//0x2A
    0x09,
    0x2D,
    0x21,
    0x42,
    0x66,
    0x0C,//0x30
    0x92,
    0x2E,
    0x15,
    0x2C,
    0x2A,//0x35
    0x3C,
    0x4D,
    0x76,
    0x93,
    0x36,//0x3A
    0x1D,
    0x35,
    0x34,
    0x43,
    0x44 //0x3F
};

static WORD g_wKPSRStored;
static UINT8 keyDownStored[KPP_COLUMN_INUSE];
static UINT32 prevDownTimeStored[KEY_NUMBER];
static BOOL keyDownSentStored[KEY_NUMBER];
static UINT8 kppStatusStored[KPP_COLUMN_INUSE];


static UINT8 ScanCodeToVKeyTable[] =
{
#ifdef PLAT_PMC
    VK_RETURN,          //SW60
#else
    VK_TACTION,         // Scan Code 0x0
#endif
    VK_F9,              // Scan Code 0x1
    0    ,              // Scan Code 0x2
    VK_F5,              // Scan Code 0x3
    VK_F3,              // Scan Code 0x4
    VK_F1,              // Scan Code 0x5
    VK_F2,              // Scan Code 0x6
    VK_F12,             // Scan Code 0x7
    VK_F13,             // Scan Code 0x8
    VK_F10,             // Scan Code 0x9
    VK_F8,              // Scan Code 0xA
    VK_F6,              // Scan Code 0xB
    VK_F4,              // Scan Code 0xC
    VK_TAB,             // Scan Code 0xD
    VK_BACKQUOTE,       // Scan Code 0xE
    VK_CLEAR,           // Scan Code 0xF
    VK_F14,             // Scan Code 0x10
    VK_LMENU,           // Scan Code 0x11
    VK_LSHIFT,          // Scan Code 0x12
    VK_DBE_HIRAGANA,    // Scan Code 0x13
    VK_LCONTROL,        // Scan Code 0x14
    'Q',                // Scan Code 0x15
    '1',                // Scan Code 0x16
    0,                  // Scan Code 0x17
    VK_F15,             // Scan Code 0x18
    0,                  // Scan Code 0x19
    'Z',                // Scan Code 0x1A
    'S',                // Scan Code 0x1B
    'A',                // Scan Code 0x1C
    'W',                // Scan Code 0x1D
    '2',                // Scan Code 0x1E
    0xf1,               // Scan Code 0x1F
    VK_F16,             // Scan Code 0x20
    'C',                // Scan Code 0x21
    'X',                // Scan Code 0x22
    'D',                // Scan Code 0x23
    'E',                // Scan Code 0x24
    '4',                // Scan Code 0x25
    '3',                // Scan Code 0x26
    0,                  // Scan Code 0x27
    VK_F17,             // Scan Code 0x28
    VK_SPACE,           // Scan Code 0x29
    'V',                // Scan Code 0x2A
    'F',                // Scan Code 0x2B
    'T',                // Scan Code 0x2C
    'R',                // Scan Code 0x2D
    '5',                // Scan Code 0x2E
    VK_DBE_FLUSHSTRING, // Scan Code 0x2F
    VK_F18,             // Scan Code 0x30
    'N',                // Scan Code 0x31
    'B',                // Scan Code 0x32
    'H',                // Scan Code 0x33
    'G',                // Scan Code 0x34
    'Y',                // Scan Code 0x35
    '6',                // Scan Code 0x36
    VK_DBE_ROMAN,       // Scan Code 0x37
    VK_F19,             // Scan Code 0x38
    0,                  // Scan Code 0x39
    'M',                // Scan Code 0x3A
    'J',                // Scan Code 0x3B
    'U',                // Scan Code 0x3C
    '7',                // Scan Code 0x3D
    '8',                // Scan Code 0x3E
    VK_DBE_SBCSCHAR,    // Scan Code 0x3F
    VK_F20,             // Scan Code 0x40
    VK_COMMA,           // Scan Code 0x41
    'K',                // Scan Code 0x42
    'I',                // Scan Code 0x43
    'O',                // Scan Code 0x44
    '0',                // Scan Code 0x45
    '9',                // Scan Code 0x46
    0,                  // Scan Code 0x47
    VK_F21,             // Scan Code 0x48
    VK_PERIOD,          // Scan Code 0x49
    VK_SLASH,           // Scan Code 0x4A
    'L',                // Scan Code 0x4B
    VK_SEMICOLON,       // Scan Code 0x4C
    'P',                // Scan Code 0x4D
    VK_HYPHEN,          // Scan Code 0x4E
    0,                  // Scan Code 0x4F
    VK_F22,             // Scan Code 0x50
    VK_EXTEND_BSLASH,   // Scan Code 0x51
    VK_APOSTROPHE,      // Scan Code 0x52
    0,                  // Scan Code 0x53
    VK_LBRACKET,        // Scan Code 0x54
    VK_EQUAL,           // Scan Code 0x55
    VK_DBE_NOCODEINPUT, // Scan Code 0x56
    VK_F23,             // Scan Code 0x57
    VK_CAPITAL,         // Scan Code 0x58
    VK_RSHIFT,          // Scan Code 0x59
    VK_RETURN,          // Scan Code 0x5A
    VK_RBRACKET,        // Scan Code 0x5B
    0,                  // Scan Code 0x5C
    VK_BACKSLASH,       // Scan Code 0x5D
    VK_HELP,            // Scan Code 0x5E
    VK_F24,             // Scan Code 0x5F
    0,                  // Scan Code 0x60
    VK_EXTEND_BSLASH,   // Scan Code 0x61
    0,                  // Scan Code 0x62
    0,                  // Scan Code 0x63
    VK_CONVERT,         // Scan Code 0x64
    0,                  // Scan Code 0x65
    VK_BACK,            // Scan Code 0x66
    VK_NOCONVERT,       // Scan Code 0x67
    VK_TAB,             // Scan Code 0x68
    VK_NUMPAD1,         // Scan Code 0x69
    VK_DBE_ALPHANUMERIC,// Scan Code 0x6A
    VK_NUMPAD4,         // Scan Code 0x6B
    VK_NUMPAD7,         // Scan Code 0x6C
    0,                  // Scan Code 0x6D
    0,                  // Scan Code 0x6E
    0,                  // Scan Code 0x6F
    VK_NUMPAD0,         // Scan Code 0x70
    VK_DECIMAL,         // Scan Code 0x71
    VK_NUMPAD2,         // Scan Code 0x72
    VK_NUMPAD5,         // Scan Code 0x73
    VK_NUMPAD6,         // Scan Code 0x74
    VK_NUMPAD8,         // Scan Code 0x75
    VK_ESCAPE,          // Scan Code 0x76
    VK_NUMLOCK,         // Scan Code 0x77
    VK_F11,             // Scan Code 0x78
    VK_ADD,             // Scan Code 0x79
    VK_NUMPAD3,         // Scan Code 0x7A
    VK_SUBTRACT,        // Scan Code 0x7B
    VK_MULTIPLY,        // Scan Code 0x7C
    VK_NUMPAD9,         // Scan Code 0x7D
    VK_SCROLL,          // Scan Code 0x7E
    0,                  // Scan Code 0x7F
    0,                  // Scan Code 0x80
    0,                  // Scan Code 0x81
    0,                  // Scan Code 0x82
    VK_F7,              // Scan Code 0x83
    VK_SNAPSHOT,        // Scan Code 0x84
    0,                  // Scan Code 0x85
    0,                  // Scan Code 0x86
    0,                  // Scan Code 0x87
    0,                  // Scan Code 0x88
    0,                  // Scan Code 0x89
    0,                  // Scan Code 0x8A
    0,                  // Scan Code 0x8B
    0,                  // Scan Code 0x8C
    0,                  // Scan Code 0x8D
    0,                  // Scan Code 0x8E
    0,                  // Scan Code 0x8F
#ifdef PLAT_PMC
    VK_F1,              //SW8
#else
    VK_APP1,            // Scan Code 0x90
#endif
#ifdef PLAT_PMC
    VK_F2,              //SW6
#else
    VK_APP2,            // Scan Code 0x91
    #endif
#ifdef PLAT_PMC
    VK_F3,              //SW5
#else
    VK_APP3,            //SW5 // Scan Code 0x92
#endif
#ifdef PLAT_PMC
    VK_F4,              //SW5
#else
    VK_APP4,            //SW5 // Scan Code 0x93
#endif
    VK_MENU,            // Scan Code 0x94
    VK_UP,              // Scan Code 0x95
    VK_LEFT,            // Scan Code 0x96
    VK_RIGHT,           // Scan Code 0x97
    VK_DOWN,            // Scan Code 0x98
    VK_LWIN,            // Scan Code 0x99
};

static UINT8 E0ScanCodeToVKeyTable[] =
{
    VK_BROWSER_SEARCH,  // Scan Code 0xE010
    VK_RMENU,           // Scan Code 0xE011
    0,                  // Scan Code 0xE012 which must be 0 or extra WM_KEYDOWN/UP messages will occur
    0,                  // Scan Code 0xE013
    VK_RCONTROL,        // Scan Code 0xE014
    VK_MEDIA_PREV_TRACK,// Scan Code 0xE015
    0,                  // Scan Code 0xE016
    0,                  // Scan Code 0xE017
    VK_BROWSER_FAVORITES,// Scan Code 0xE018
    0,                  // Scan Code 0xE019
    0,                  // Scan Code 0xE01A
    0,                  // Scan Code 0xE01B
    0,                  // Scan Code 0xE01C
    0,                  // Scan Code 0xE01D
    0,                  // Scan Code 0xE01E
    VK_LWIN,            // Scan Code 0xE01F
    VK_BROWSER_REFRESH, // Scan Code 0xE020
    VK_VOLUME_DOWN,     // Scan Code 0xE021
    0,                  // Scan Code 0xE022
    VK_VOLUME_MUTE,     // Scan Code 0xE023
    0,                  // Scan Code 0xE024
    0,                  // Scan Code 0xE025
    0,                  // Scan Code 0xE026
    VK_RWIN,            // Scan Code 0xE027
    VK_BROWSER_STOP,    // Scan Code 0xE028
    0,                  // Scan Code 0xE029
    0,                  // Scan Code 0xE02A
    VK_LAUNCH_APP2,     // Scan Code 0xE02B
    0,                  // Scan Code 0xE02C
    0,                  // Scan Code 0xE02D
    0,                  // Scan Code 0xE02E
    VK_APPS,            // Scan Code 0xE02F
    VK_BROWSER_FORWARD, // Scan Code 0xE030
    0,                  // Scan Code 0xE031
    VK_VOLUME_UP,       // Scan Code 0xE032
    0,                  // Scan Code 0xE033
    VK_MEDIA_PLAY_PAUSE,// Scan Code 0xE034
    0,                  // Scan Code 0xE035
    0,                  // Scan Code 0xE036
    0,                  // Scan Code 0xE037
    VK_BROWSER_BACK,    // Scan Code 0xE038
    0,                  // Scan Code 0xE039
    VK_BROWSER_HOME,    // Scan Code 0xE03A
    VK_MEDIA_STOP,      // Scan Code 0xE03B
    0,                  // Scan Code 0xE03C
    0,                  // Scan Code 0xE03D
    0,                  // Scan Code 0xE03E
    VK_OFF,             // Scan Code 0xE03F
    VK_LAUNCH_APP1,     // Scan Code 0xE040
    0,                  // Scan Code 0xE041
    0,                  // Scan Code 0xE042
    0,                  // Scan Code 0xE043
    0,                  // Scan Code 0xE044
    0,                  // Scan Code 0xE045
    0,                  // Scan Code 0xE046
    0,                  // Scan Code 0xE047
    VK_LAUNCH_MAIL,     // Scan Code 0xE048
    0,                  // Scan Code 0xE049
    VK_DIVIDE,          // Scan Code 0xE04A
    0,                  // Scan Code 0xE04B
    0,                  // Scan Code 0xE04C
    VK_MEDIA_NEXT_TRACK,// Scan Code 0xE04D
    0,                  // Scan Code 0xE04E
    0,                  // Scan Code 0xE04F
    VK_LAUNCH_MEDIA_SELECT,// Scan Code 0xE050
    0,                  // Scan Code 0xE051
    0,                  // Scan Code 0xE052
    0,                  // Scan Code 0xE053
    0,                  // Scan Code 0xE054
    0,                  // Scan Code 0xE055
    0,                  // Scan Code 0xE056
    0,                  // Scan Code 0xE057
    0,                  // Scan Code 0xE058
    0,                  // Scan Code 0xE059
    VK_RETURN,          // Scan Code 0xE05A

⌨️ 快捷键说明

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