builtinkeypad_0409.cpp

来自「该BSP是基于PXA270+WINCE的BSP」· C++ 代码 · 共 1,028 行 · 第 1/3 页

CPP
1,028
字号
//
// 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.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

@doc    EXTERNAL

@module BuiltInKeypad.cpp |

Sample implementation of the platform dependent scan code to
Virtual Key mapping for a built-in keypad driver.

*/
/******************************************************************************
**
** Copyright 2000-2004 Intel Corporation All Rights Reserved.
**
** Portions of the source code contained or described herein and all documents
** related to such source code (Material) are owned by Intel Corporation
** or its suppliers or licensors and is licensed by Microsoft Corporation for distribution.  
** Title to the Material remains with Intel Corporation or its suppliers and licensors. 
** Use of the Materials is subject to the terms of the Microsoft license agreement which accompanied the Materials.  
** No other license under any patent, copyright, trade secret or other intellectual
** property right is granted to or conferred upon you by disclosure or
** delivery of the Materials, either expressly, by implication, inducement,
** estoppel or otherwise 
** Some portion of the Materials may be copyrighted by Microsoft Corporation.
**
/*****************************************************************************/


#include <windows.h>
#include <keybddr.h>
#include <laymgr.h>
#include <devicelayout.h>
#include <NumPadRmp.h>
#include "winuserm.h"
#include "xllp_defs.h"
#include "xllp_keypad.h"
#include "keypad.hpp"


// This is how we get most of the Mainstone II's non-
//  alphanumeric characters translated properly to
//  Unicode.
typedef struct tagMARKER_VK_TRANSFORM
{
    UINT32       outputVK;
    XLLP_BOOL_T  reportStateAsShifted;
} MARKER_VK_TRANSFORM, *PMARKER_VK_TRANSFORM;

typedef struct tagMARKER_VK_MAP
{
    UINT32                 markerVK;
    MARKER_VK_TRANSFORM    unShiftedInputTransform;
    MARKER_VK_TRANSFORM    shiftedInputTransform;

} MARKER_VK_MAP, *PMARKER_VK_MAP;


// fast tap key pad scan codes
#ifdef BSP_SMARTPHONE

// Need to do this to get non-AT keyboard key mappings through the system.
// Unique keys' scan codes need to be moved outside of range of standard
// keys, so that they can get special handling.
// Unpopulated slots get 0xFF as a flag
// Unique chars get 0x80+ and their own table
// Numbers get 0x00-0x0F; Alphas get 0x10-0x2F; other standards get
// 0x30-0x7F, as far as needed.
const UINT8  XllpScanCodeToWinCeScanCodeTable[XLLP_SCAN_CODE_MAX+1] =
{
	0x10,// 'A',	    // Xllp Scan Code 0x0  
	0x16,//'G',			// Xllp Scan Code 0x1  
	0x1C,//'M',			// Xllp Scan Code 0x2  
	0x22,//'S',			// Xllp Scan Code 0x3
	0x80, 		        // Xllp Scan Code 0x4  
	0x3A,//VK_THOME,	// Xllp Scan Code 0x5
	0x41,//VK_TUP,		// Xllp Scan Code 0x6  
	0xFF,				// Xllp Scan Code 0x7
	0xFF,				// Xllp Scan Code 0x8  
	0xFF,				// Xllp Scan Code 0x9
	0x43,//VK_TVOLUMEUP,	// Xllp Scan Code 0xA  	
	0x42,//VK_TVOLUMEDOWN,	// Xllp Scan Code 0xB  
	0x36,//VK_TACTION,		// Xllp Scan Code 0xC  
	0xFF,				// Xllp Scan Code 0xD
	0xFF,				// Xllp Scan Code 0xE  
    0xFF,				// Xllp Scan Code 0xF

	0x11,//'B',			// Xllp Scan Code 0x10 
	0x17,//'H',			// Xllp Scan Code 0x11 
	0x1D,//'N',			// Xllp Scan Code 0x12 
	0x23,//'T',			// Xllp Scan Code 0x13
	0x81,  		        // Xllp Scan Code 0x14
	0x32,//VK_CAPITAL,	// Xllp Scan Code 0x15
	0x38,//VK_TDOWN,   	// Xllp Scan Code 0x16
	0xFF,				// Xllp Scan Code 0x17
	0xFF,				// Xllp Scan Code 0x18
	0xFF,				// Xllp Scan Code 0x19
	0xFF,				// Xllp Scan Code 0x1A
	0xFF,				// Xllp Scan Code 0x1B
	0xFF,				// Xllp Scan Code 0x1C
	0xFF,				// Xllp Scan Code 0x1D
	0xFF,				// Xllp Scan Code 0x1E
	0xFF,				// Xllp Scan Code 0x1F

	0x12,//'C',			// Xllp Scan Code 0x20
	0x18,//'I',			// Xllp Scan Code 0x21
	0x1E,//'O',			// Xllp Scan Code 0x22
	0x24,//'U',			// Xllp Scan Code 0x23
	0x28,//'Y',			// Xllp Scan Code 0x24
	0x35,//VK_SPACE,	// Xllp Scan Code 0x25
	0x3B,//VK_TLEFT,	// Xllp Scan Code 0x26
	0xFF,				// Xllp Scan Code 0x27
	0xFF,				// Xllp Scan Code 0x28
	0xFF,				// Xllp Scan Code 0x29
	0xFF,				// Xllp Scan Code 0x2A
	0xFF,				// Xllp Scan Code 0x2B
	0xFF,				// Xllp Scan Code 0x2C
	0xFF,				// Xllp Scan Code 0x2D
	0xFF,				// Xllp Scan Code 0x2E
	0xFF,				// Xllp Scan Code 0x2F

	0x13,//'D',			// Xllp Scan Code 0x30
	0x19,//'J',			// Xllp Scan Code 0x31
	0x1F,//'P',			// Xllp Scan Code 0x32
	0x25,//'V',			// Xllp Scan Code 0x33
	0x29,//'Z',			// Xllp Scan Code 0x34
	0x35,//VK_SPACE,	// Xllp Scan Code 0x35
	0x34,//VK_TRIGHT,	// Xllp Scan Code 0x36
	0xFF,				// Xllp Scan Code 0x37
	0xFF,				// Xllp Scan Code 0x38
	0xFF,				// Xllp Scan Code 0x39
	0xFF,				// Xllp Scan Code 0x3A
	0xFF,				// Xllp Scan Code 0x3B
	0xFF,				// Xllp Scan Code 0x3C
	0xFF,				// Xllp Scan Code 0x3D
	0xFF,				// Xllp Scan Code 0x3E
	0xFF,				// Xllp Scan Code 0x3F

	0x14,//'E',			// Xllp Scan Code 0x40  
	0x1A,//'K',			// Xllp Scan Code 0x41  
	0x20,//'Q',			// Xllp Scan Code 0x42  
	0x26,//'W',			// Xllp Scan Code 0x43  
	0x82,		        // Xllp Scan Code 0x44  
	0x33,//VK_CONTROL,	// Xllp Scan Code 0x45
	0x36,//VK_TACTION,	// Xllp Scan Code 0x46  
	0xFF,				// Xllp Scan Code 0x47
	0xFF,				// Xllp Scan Code 0x48  
	0xFF,				// Xllp Scan Code 0x49
 	0xFF,				// Xllp Scan Code 0x4A  
	0xFF,				// Xllp Scan Code 0x4B  
	0xFF,				// Xllp Scan Code 0x4C  
	0xFF,				// Xllp Scan Code 0x4D
	0xFF,				// Xllp Scan Code 0x4E
	0xFF,				// Xllp Scan Code 0x4F

	0x15,//'F',			// Xllp Scan Code 0x50  
	0x1B,//'L',			// Xllp Scan Code 0x51  
	0x21,//'R',			// Xllp Scan Code 0x52  
	0x27,//'X',			// Xllp Scan Code 0x53
	0x83,	            // Xllp Scan Code 0x54
	0x37,//VK_TBACK, 	// Xllp Scan Code 0x55
	0xFF,				// Xllp Scan Code 0x56
	0xFF,				// Xllp Scan Code 0x57
	0xFF,				// Xllp Scan Code 0x58
	0xFF,				// Xllp Scan Code 0x59
	0xFF,				// Xllp Scan Code 0x5A
	0xFF,				// Xllp Scan Code 0x5B
	0xFF,				// Xllp Scan Code 0x5C
	0xFF,				// Xllp Scan Code 0x5D
	0xFF,				// Xllp Scan Code 0x5E
	0xFF,				// Xllp Scan Code 0x5F

	0x40,//VK_TTALK,	// Xllp Scan Code 0x60 
	0x39,//VK_TEND,	 	// Xllp Scan Code 0x61 
	0x3D,//VK_TSOFT1,	// Xllp Scan Code 0x62 
	0x3E,//VK_TSOFT2,	// Xllp Scan Code 0x63
	0x36,//VK_TACTION,	// Xllp Scan Code 0x64
	0xFF,			    // Xllp Scan Code 0x65
	0xFF,			    // Xllp Scan Code 0x66
	0xFF,			    // Xllp Scan Code 0x67
	0xFF,			    // Xllp Scan Code 0x68
	0xFF,			    // Xllp Scan Code 0x69
	0xFF,			    // Xllp Scan Code 0x6A
	0xFF,			    // Xllp Scan Code 0x6B
	0xFF,			    // Xllp Scan Code 0x6C
	0xFF,			    // Xllp Scan Code 0x6D
	0xFF,			    // Xllp Scan Code 0x6E
	0xFF,			    // Xllp Scan Code 0x6F

	0x01,//VK_T1,		// Xllp Scan Code 0x70 
	0x84,		        // Xllp Scan Code 0x71
	0x02,//VK_T2,		// Xllp Scan Code 0x72 
	0x85,	   	        // Xllp Scan Code 0x73
	0x03,//VK_T3,		// Xllp Scan Code 0x74 
	0xFF,			    // Xllp Scan Code 0x75
	0xFF,			    // Xllp Scan Code 0x76
	0xFF,			    // Xllp Scan Code 0x77
	0xFF,			    // Xllp Scan Code 0x78
	0xFF,			    // Xllp Scan Code 0x79
	0xFF,			    // Xllp Scan Code 0x7A
	0xFF,			    // Xllp Scan Code 0x7B
	0xFF,			    // Xllp Scan Code 0x7C
	0xFF,			    // Xllp Scan Code 0x7D
	0xFF,			    // Xllp Scan Code 0x7E
	0xFF,			    // Xllp Scan Code 0x7F

	0x04,//VK_T4,		// Xllp Scan Code 0x80  	
	0x86,		        // Xllp Scan Code 0x81  	
	0x05,//VK_T5,		// Xllp Scan Code 0x82  	
	0x87,		        // Xllp Scan Code 0x83
	0x06,//VK_T6,		// Xllp Scan Code 0x84
	0xFF,			    // Xllp Scan Code 0x85
	0xFF,			    // Xllp Scan Code 0x86
	0xFF,			    // Xllp Scan Code 0x87
	0xFF,			    // Xllp Scan Code 0x88
	0xFF,			    // Xllp Scan Code 0x89
	0xFF,			    // Xllp Scan Code 0x8A
	0xFF,			    // Xllp Scan Code 0x8B
	0xFF,			    // Xllp Scan Code 0x8C
	0xFF,			    // Xllp Scan Code 0x8D
	0xFF,			    // Xllp Scan Code 0x8E
	0xFF,			    // Xllp Scan Code 0x8F

	0x07,//VK_T7,	    // Xllp Scan Code 0x90  	
	0x88,			    // Xllp Scan Code 0x91  	
	0x08,//VK_T8,	    // Xllp Scan Code 0x92  	
	0x89,	            // Xllp Scan Code 0x93
	0x09,//VK_T9,	    // Xllp Scan Code 0x94
	0xFF,			    // Xllp Scan Code 0x95
	0xFF,			    // Xllp Scan Code 0x96
	0xFF,			    // Xllp Scan Code 0x97
	0xFF,			    // Xllp Scan Code 0x98
	0xFF,			    // Xllp Scan Code 0x99
	0xFF,			    // Xllp Scan Code 0x9A
	0xFF,			    // Xllp Scan Code 0x9B
	0xFF,			    // Xllp Scan Code 0x9C
	0xFF,			    // Xllp Scan Code 0x9D
	0xFF,			    // Xllp Scan Code 0x9E
	0xFF,			    // Xllp Scan Code 0x9F
			   
	0x3F,//VK_TSTAR,   	// Xllp Scan Code 0xA0		
	0x8E,//VK_APOSTROPHE,	// Xllp Scan Code 0xA1		
	0x00,//VK_T0,			// Xllp Scan Code 0xA2		
	0x8A,		    // Xllp Scan Code 0xA3
	0x3C,//VK_TPOUND,		// Xllp Scan Code 0xA4
	0xFF,			// Xllp Scan Code 0xA5
	0xFF,			// Xllp Scan Code 0xA6
	0xFF,			// Xllp Scan Code 0xA7
	0xFF,			// Xllp Scan Code 0xA8
	0xFF,			// Xllp Scan Code 0xA9
	0xFF,			// Xllp Scan Code 0xAA
	0xFF,			// Xllp Scan Code 0xAB
	0xFF,			// Xllp Scan Code 0xAC
	0xFF,			// Xllp Scan Code 0xAD
	0xFF,			// Xllp Scan Code 0xAE
	0xFF,			// Xllp Scan Code 0xAF

	0x8B,		    // Xllp Scan Code 0xB0		
	0x8C,	        // Xllp Scan Code 0xB1		
	0x31,//VK_BACK,		// Xllp Scan Code 0xB2		
	0x8D,	        // Xllp Scan Code 0xB3
	0x36,//VK_TACTION,		// Xllp Scan Code 0xB4
	0xFF,			// Xllp Scan Code 0xB5
	0xFF,			// Xllp Scan Code 0xB6
	0xFF,			// Xllp Scan Code 0xB7
	0xFF,			// Xllp Scan Code 0xB8
	0xFF,			// Xllp Scan Code 0xB9
	0xFF,			// Xllp Scan Code 0xBA
	0xFF,			// Xllp Scan Code 0xBB
	0xFF,			// Xllp Scan Code 0xBC
	0xFF,			// Xllp Scan Code 0xBD
	0xFF,			// Xllp Scan Code 0xBE
	0xFF,			// Xllp Scan Code 0xBF

    
};  //XllpScanCodeToWinCeScanCodeTable[]


#define MainScanCodeTableFirst      0x00
#define	MainScanCodeTableLast	    0x4F
#define	MAIN_SCAN_CODE_TABLE_SIZE	 ((MainScanCodeTableLast-MainScanCodeTableFirst)+1)

// No need to pad this table with 0x80 empty entries in the beginning.
// KeyPadPdd_GetEventEx2() knows about this and has adjusted the marker VKs ORred with
// the UNIQUE_KEY_SC_PREPEND_MSK
#define	UNIQUE_KEY_SCAN_CODE_TABLE_SIZE	 ((UNIQUE_KEY_SC_RAW_MAX-UNIQUE_KEY_SC_RAW_MIN)+1)
#define UniqueKeyScanCodeTableFirst  (UNIQUE_KEY_SC_PREPEND_MSK)
#define	UniqueKeyScanCodeTableLast   (UNIQUE_KEY_SC_PREPEND_MSK|UNIQUE_KEY_SCAN_CODE_TABLE_SIZE)


const UINT8  MainScanCodeToVKeyTable[MAIN_SCAN_CODE_TABLE_SIZE] =
{
    VK_T0		   , //     0x00
    VK_T1		   , //     0x01
    VK_T2		   , //     0x02
    VK_T3		   , //     0x03
    VK_T4		   , //     0x04
    VK_T5		   , //     0x05
    VK_T6		   , //     0x06
    VK_T7		   , //     0x07
    VK_T8		   , //     0x08
    VK_T9		   , //     0x09
    0              , //     0x0A 
    0              , //     0x0B
    0              , //     0x0C
    0              , //     0x0D
    0              , //     0x0E
    0              , //     0x0F
    'A'		       , //     0x10
    'B'		       , //     0x11
    'C'		       , //     0x12
    'D'		       , //     0x13
    'E'		       , //     0x14
    'F'		       , //     0x15
    'G'		       , //     0x16
    'H'		       , //     0x17
    'I'		       , //     0x18
    'J'		       , //     0x19
    'K'		       , //     0x1A
    'L'		       , //     0x1B
    'M'		       , //     0x1C
    'N'		       , //     0x1D
    'O'		       , //     0x1E
    'P'		       , //     0x1F
    'Q'		       , //     0x20
    'R'		       , //     0x21
    'S'		       , //     0x22
    'T'		       , //     0x23
    'U'		       , //     0x24
    'V'		       , //     0x25

⌨️ 快捷键说明

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