os/kernelhwsrv/kernel/eka/include/k32keys.h
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of the License "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// e32\include\k32keys.h
sl@0
    15
// 
sl@0
    16
// WARNING: This file contains some APIs which are internal and are subject
sl@0
    17
//          to change without notice. Such APIs should therefore not be used
sl@0
    18
//          outside the Kernel and Hardware Services package.
sl@0
    19
//
sl@0
    20
sl@0
    21
#ifndef __KEYSTD_H__
sl@0
    22
#define __KEYSTD_H__
sl@0
    23
sl@0
    24
sl@0
    25
////////////////////////////////////////////////////////
sl@0
    26
//
sl@0
    27
// Bits required for keyboard translation software
sl@0
    28
//
sl@0
    29
////////////////////////////////////////////////////////
sl@0
    30
sl@0
    31
#include <e32svr.h>
sl@0
    32
sl@0
    33
/**
sl@0
    34
@internalComponent
sl@0
    35
@released
sl@0
    36
*/
sl@0
    37
const TUint KConvTableSettableModifiers=EModifierAutorepeatable|
sl@0
    38
                                  EModifierKeypad|
sl@0
    39
                                  EModifierPureKeycode;
sl@0
    40
sl@0
    41
/**
sl@0
    42
@internalComponent
sl@0
    43
@released
sl@0
    44
*/
sl@0
    45
const TUint KPersistentModifiers=EModifierLeftAlt|
sl@0
    46
                           EModifierRightAlt|
sl@0
    47
						   EModifierAlt|
sl@0
    48
                           EModifierLeftCtrl|
sl@0
    49
						   EModifierRightCtrl|
sl@0
    50
                           EModifierCtrl|
sl@0
    51
						   EModifierLeftShift|
sl@0
    52
                           EModifierRightShift|
sl@0
    53
						   EModifierShift|
sl@0
    54
                           EModifierLeftFunc|
sl@0
    55
						   EModifierRightFunc|
sl@0
    56
                           EModifierFunc|
sl@0
    57
						   EModifierCapsLock|
sl@0
    58
                           EModifierNumLock|
sl@0
    59
						   EModifierScrollLock|
sl@0
    60
						   EModifierKeyboardExtend;
sl@0
    61
sl@0
    62
sl@0
    63
/**
sl@0
    64
@internalComponent
sl@0
    65
@released
sl@0
    66
*/
sl@0
    67
const TUint KRotationModifiers=EModifierRotateBy90|
sl@0
    68
						   EModifierRotateBy180|
sl@0
    69
						   EModifierRotateBy270;
sl@0
    70
sl@0
    71
sl@0
    72
/**
sl@0
    73
@publishedPartner
sl@0
    74
@released
sl@0
    75
*/
sl@0
    76
struct SScanCodeBlock
sl@0
    77
	{
sl@0
    78
	TUint16 firstScanCode;
sl@0
    79
	TUint16 lastScanCode;
sl@0
    80
	};
sl@0
    81
sl@0
    82
/**
sl@0
    83
@publishedPartner
sl@0
    84
@released
sl@0
    85
*/
sl@0
    86
struct SScanCodeBlockList
sl@0
    87
	{
sl@0
    88
	TUint numBlocks;
sl@0
    89
	const SScanCodeBlock *pblocks;
sl@0
    90
	};
sl@0
    91
sl@0
    92
/**
sl@0
    93
@publishedPartner
sl@0
    94
@released
sl@0
    95
*/
sl@0
    96
struct SConvSubTable
sl@0
    97
	{
sl@0
    98
	const TUint16 *pkeyCode;
sl@0
    99
	SScanCodeBlockList scanCodes;
sl@0
   100
	};
sl@0
   101
sl@0
   102
/**
sl@0
   103
@publishedPartner
sl@0
   104
@released
sl@0
   105
*/
sl@0
   106
struct SConvTableNode
sl@0
   107
	{
sl@0
   108
   TMaskedModifiers maskedModifiers;
sl@0
   109
	TUint numSubTables;
sl@0
   110
	const SConvSubTable * const *ppsubTables;
sl@0
   111
	};
sl@0
   112
sl@0
   113
/**
sl@0
   114
@publishedPartner
sl@0
   115
@released
sl@0
   116
*/
sl@0
   117
struct SConvTable
sl@0
   118
	{
sl@0
   119
	TUint numNodes;
sl@0
   120
	const SConvTableNode *pnodes;
sl@0
   121
	};
sl@0
   122
sl@0
   123
/**
sl@0
   124
@publishedPartner
sl@0
   125
@released
sl@0
   126
*/
sl@0
   127
struct SKeyCodeList
sl@0
   128
	{
sl@0
   129
	TUint numKeyCodes;
sl@0
   130
	const TUint16 *pkeyCodes;
sl@0
   131
	};
sl@0
   132
sl@0
   133
/**
sl@0
   134
@publishedPartner
sl@0
   135
@released
sl@0
   136
*/
sl@0
   137
struct SFunc
sl@0
   138
	{
sl@0
   139
	TInt32 funcParam;
sl@0
   140
	TUint8 func;
sl@0
   141
	TUint8 filler;
sl@0
   142
	};
sl@0
   143
sl@0
   144
/**
sl@0
   145
@publishedPartner
sl@0
   146
@released
sl@0
   147
*/
sl@0
   148
struct SFuncAndState
sl@0
   149
	{
sl@0
   150
	TUint8 state;
sl@0
   151
	TUint8 func;
sl@0
   152
	TInt32 funcParam;
sl@0
   153
	};
sl@0
   154
sl@0
   155
/**
sl@0
   156
@publishedPartner
sl@0
   157
@released
sl@0
   158
*/
sl@0
   159
struct SFuncTableEntry
sl@0
   160
	{
sl@0
   161
	TMaskedModifiers maskedModifiers;
sl@0
   162
	TKeyCodePattern keyCodePattern;
sl@0
   163
	SFuncAndState funcAndNewState;
sl@0
   164
	};
sl@0
   165
sl@0
   166
/**
sl@0
   167
@publishedPartner
sl@0
   168
@released
sl@0
   169
*/
sl@0
   170
struct SFuncTable
sl@0
   171
	{
sl@0
   172
	TUint numEntries;
sl@0
   173
	const SFuncTableEntry *pentries;
sl@0
   174
	};
sl@0
   175
sl@0
   176
/**
sl@0
   177
@publishedPartner
sl@0
   178
@released
sl@0
   179
*/
sl@0
   180
struct SFuncTables
sl@0
   181
	{
sl@0
   182
	SFuncTable defaultTable;
sl@0
   183
	SFuncTable modifierTable;
sl@0
   184
	TUint numGenFuncTables;
sl@0
   185
	const SFuncTable *pgenFuncTables;
sl@0
   186
	};
sl@0
   187
sl@0
   188
/**
sl@0
   189
@internalComponent
sl@0
   190
@released
sl@0
   191
*/
sl@0
   192
class TCharExtended: public TChar
sl@0
   193
	{
sl@0
   194
public:
sl@0
   195
	inline TCharExtended();
sl@0
   196
	inline TCharExtended(TUint aChar);
sl@0
   197
	TCharExtended &operator=(TUint aChar);
sl@0
   198
	TBool IsDigitGivenRadix(TRadix aRadix) const;
sl@0
   199
	TBool IsModifier() const;
sl@0
   200
	TInt DigitValue() const;
sl@0
   201
	TBool MatchesPattern(const TKeyCodePattern &aKeyCodePattern, TRadix aRadix=EDecimal) const;
sl@0
   202
	};
sl@0
   203
sl@0
   204
/**
sl@0
   205
@internalComponent
sl@0
   206
@released
sl@0
   207
*/
sl@0
   208
class TFuncTable
sl@0
   209
	{
sl@0
   210
public:
sl@0
   211
	TFuncTable();
sl@0
   212
	void Update(RLibrary aLibrary);
sl@0
   213
	SFunc GetModifierFunc(const TCharExtended &aChar, const TInt &aModifiers) const;
sl@0
   214
	SFuncAndState GetGeneralFuncAndState(const TCharExtended &aChar, const TInt &aModifiers,
sl@0
   215
															TUint aCurState, TRadix aRadix) const;
sl@0
   216
private:
sl@0
   217
	SFuncTables iFuncTables;
sl@0
   218
	SFuncTableEntry getDefault(const TCharExtended &aChar, const TInt &aModifiers) const;
sl@0
   219
	};
sl@0
   220
sl@0
   221
/**
sl@0
   222
@internalComponent
sl@0
   223
@released
sl@0
   224
*/
sl@0
   225
struct SConvKeyData
sl@0
   226
	{
sl@0
   227
	TInt modifiers;
sl@0
   228
	TUint16 keyCode;
sl@0
   229
	TUint16 filler;
sl@0
   230
	};
sl@0
   231
sl@0
   232
/**
sl@0
   233
@publishedPartner
sl@0
   234
@released
sl@0
   235
*/
sl@0
   236
enum TCtrlDigitsTermination
sl@0
   237
	{
sl@0
   238
	ETerminationByCount,
sl@0
   239
	ETerminationByCtrlUp
sl@0
   240
	};
sl@0
   241
sl@0
   242
/**
sl@0
   243
@internalComponent
sl@0
   244
@released
sl@0
   245
*/
sl@0
   246
class TConvTable
sl@0
   247
	{
sl@0
   248
public:
sl@0
   249
	TConvTable();
sl@0
   250
	void Update(RLibrary aLibrary);
sl@0
   251
	SConvKeyData Convert(TUint aScanCode, const TInt &aModifiers) const;
sl@0
   252
	SConvKeyData ConvertBaseCase(TUint aScanCode, const TInt &aModifiers) const;
sl@0
   253
	inline TUint FirstScanCode() const;
sl@0
   254
	inline TUint LastScanCode() const;
sl@0
   255
private:
sl@0
   256
	SConvTable iConvTable;
sl@0
   257
	TUint iFirstScanCode;
sl@0
   258
	TUint iLastScanCode;
sl@0
   259
	SScanCodeBlockList iKeypadScanCodes;
sl@0
   260
	SKeyCodeList iNonAutorepKeyCodes;
sl@0
   261
	TBool onKeypad(TUint aScanCode) const;
sl@0
   262
	TBool autorepeatable(TUint aKeyCode) const;
sl@0
   263
	};
sl@0
   264
sl@0
   265
/**
sl@0
   266
@internalComponent
sl@0
   267
@released
sl@0
   268
*/
sl@0
   269
class TCtrlDigits
sl@0
   270
	{
sl@0
   271
public:
sl@0
   272
	TCtrlDigits();
sl@0
   273
	void Update(RLibrary aLibrary);
sl@0
   274
	void Reset();
sl@0
   275
	void AppendDigit(TUint aKeyCode, TUint aModifiers);
sl@0
   276
	inline void SetRadix(TRadix aRadix);
sl@0
   277
	inline void SetMaxCount(TInt aMaxCount);
sl@0
   278
	inline TRadix GetRadix() const;
sl@0
   279
	TBool Terminated(TInt aModifiers) const;
sl@0
   280
	TUint SetStateToCtrlDigits() const;
sl@0
   281
	inline TBool WithinLimits() const;
sl@0
   282
	inline TUint GetDigits() const;
sl@0
   283
	inline TBool Error() const;
sl@0
   284
private:
sl@0
   285
	TInt iCount;
sl@0
   286
	TInt iMaxCount;
sl@0
   287
	TInt iMaximumCtrlDigitsMaxCount;
sl@0
   288
	TUint32 iDigits;
sl@0
   289
	TRadix iRadix;
sl@0
   290
	TBool iErrorFlag;
sl@0
   291
	TCtrlDigitsTermination iTermination;
sl@0
   292
	};
sl@0
   293
sl@0
   294
/**
sl@0
   295
@internalComponent
sl@0
   296
@released
sl@0
   297
*/
sl@0
   298
enum TState
sl@0
   299
	{
sl@0
   300
// values used as an index to a table
sl@0
   301
	EStateNormal						=0x0a,
sl@0
   302
	EStateCtrlDigitsUntilCount			=0x0b,
sl@0
   303
	EStateCtrlDigitsUntilCtrlUp			=0x0c,
sl@0
   304
// values used as "rules" to be processed in a switch statement
sl@0
   305
	EStateUnchanged						=0x40,
sl@0
   306
	EStateDerivedFromDigitEntered,
sl@0
   307
	EStateCtrlDigits
sl@0
   308
	};
sl@0
   309
sl@0
   310
/**
sl@0
   311
@internalComponent
sl@0
   312
@released
sl@0
   313
*/
sl@0
   314
enum TFuncGeneral
sl@0
   315
	{
sl@0
   316
	EDoNothing							=0x00,
sl@0
   317
	EPassKeyThru,
sl@0
   318
	EPassSpecialKeyThru,
sl@0
   319
	EPassCtrlDigitsThru,
sl@0
   320
	EAddOnCtrlDigit,
sl@0
   321
	};
sl@0
   322
sl@0
   323
/**
sl@0
   324
@internalComponent
sl@0
   325
@released
sl@0
   326
*/
sl@0
   327
NONSHARABLE_CLASS(CKeyTranslatorX) : public CKeyTranslator
sl@0
   328
	{
sl@0
   329
    friend class CKeyTranslator;
sl@0
   330
public:
sl@0
   331
	CKeyTranslatorX();
sl@0
   332
    virtual TInt GetModifierState();
sl@0
   333
    virtual void SetModifierState(TEventModifier aModifier,TModifierState aState);
sl@0
   334
	virtual TBool TranslateKey(TUint aScanCode, TBool aKeyUp,
sl@0
   335
								const CCaptureKeys &aCaptureKeys, TKeyData &aKeyData);
sl@0
   336
    virtual void UpdateModifiers(TInt aModifiers);
sl@0
   337
    virtual TInt ChangeKeyData(const TDesC& aLibraryName);
sl@0
   338
    TBool currentlyUpperCase(void);
sl@0
   339
    TUint executeFunctionsAndSetState(TCharExtended aChar);
sl@0
   340
	TInt Initialise();
sl@0
   341
private:
sl@0
   342
    TInt iCurModifiers;
sl@0
   343
	TMaskedModifiers iTogglingModifiers;
sl@0
   344
	TCtrlDigits iCurCtrlDigits;
sl@0
   345
	TConvTable iConvTable;
sl@0
   346
	TFuncTable iFuncTable;
sl@0
   347
	TUint iCurState;
sl@0
   348
	TBool iIsdefaultKeyData;
sl@0
   349
	RLibrary iKeyDataLib;
sl@0
   350
	RLibrary iDefaultKeyDataLib;
sl@0
   351
	};
sl@0
   352
sl@0
   353
/**
sl@0
   354
@internalComponent
sl@0
   355
@released
sl@0
   356
*/
sl@0
   357
enum TCP850Char
sl@0
   358
	{
sl@0
   359
	ECP850LogicNot=0x00aa,
sl@0
   360
	ECP850LcAe=0x0091,
sl@0
   361
	ECP850LcCcedilla=0x0087,
sl@0
   362
	ECP850EsTset=0x00e1,
sl@0
   363
	ECP850LcOslash=0x009b,
sl@0
   364
	ECP850LcThorn=0x00d0,
sl@0
   365
	ECP850LcSoftTh=0x00e7,
sl@0
   366
	ECP850LeftChevron=0x00ae,
sl@0
   367
	ECP850RightChevron=0x00af,
sl@0
   368
	ECP850InvExclam=0x00ad,
sl@0
   369
	ECP850InvQuest=0x00a8,
sl@0
   370
	ECP850LcAo=0x0086,
sl@0
   371
	ECP850Pound=0x009c,
sl@0
   372
	ECP850LcAumlaut=0x0084,
sl@0
   373
	ECP850LcEumlaut=0x0089,
sl@0
   374
	ECP850LcIumlaut=0x008b,
sl@0
   375
	ECP850LcOumlaut=0x0094,
sl@0
   376
	ECP850LcUumlaut=0x009a,
sl@0
   377
	ECP850LcYumlaut=0x0098,
sl@0
   378
	ECP850SpaceUmlaut=0x00f9,
sl@0
   379
	ECP850LcAgrave=0x0085,
sl@0
   380
	ECP850LcEgrave=0x008a,
sl@0
   381
	ECP850LcIgrave=0x008d,
sl@0
   382
	ECP850LcOgrave=0x0095,
sl@0
   383
	ECP850LcUgrave=0x0097,
sl@0
   384
	ECP850SpaceGrave=0x0060,
sl@0
   385
	ECP850LcAacute=0x00a0,
sl@0
   386
	ECP850LcEacute=0x0082,
sl@0
   387
	ECP850LcIacute=0x00a1,
sl@0
   388
	ECP850LcOacute=0x00a2,
sl@0
   389
	ECP850LcUacute=0x00a3,
sl@0
   390
	ECP850LcYacute=0x00ec,
sl@0
   391
	ECP850LcSpaceAcute=0x0027,
sl@0
   392
	ECP850LcAtilde=0x00c6,
sl@0
   393
	ECP850LcNtilde=0x00a4,
sl@0
   394
	ECP850LcOtilde=0x00e4,
sl@0
   395
	ECP850LcSpaceTilde=0x007e,
sl@0
   396
	ECP850LcAcirc=0x0083,
sl@0
   397
	ECP850LcEcirc=0x0088,
sl@0
   398
	ECP850LcIcirc=0x008c,
sl@0
   399
	ECP850LcOcirc=0x0093,
sl@0
   400
	ECP850LcUcirc=0x0096,
sl@0
   401
	ECP850LcSpaceCirc=0x005e
sl@0
   402
	};
sl@0
   403
sl@0
   404
/**
sl@0
   405
@internalComponent
sl@0
   406
@released
sl@0
   407
*/
sl@0
   408
enum TLatin1Char
sl@0
   409
	{
sl@0
   410
	ELatin1LogicNot=0x0090,
sl@0
   411
	ELatin1LcAe=0x00e6,
sl@0
   412
	ELatin1UcAe=0x00c6,
sl@0
   413
	ELatin1LcCcedilla=0x00e7,
sl@0
   414
	ELatin1EsTset=0x00df,
sl@0
   415
	ELatin1LcOslash=0x00f8,
sl@0
   416
	ELatin1UcOslash=0x00d8,
sl@0
   417
	ELatin1LcThorn=0x00fe,
sl@0
   418
	ELatin1LcSoftTh=0x00f0,
sl@0
   419
	ELatin1LeftChevron=0x00ab,
sl@0
   420
	ELatin1RightChevron=0x00bb,
sl@0
   421
	ELatin1InvExclam=0x00a1,
sl@0
   422
	ELatin1InvQuest=0x00bf,
sl@0
   423
	ELatin1LcAo=0x00e5,
sl@0
   424
	ELatin1Pound=0x00a3,
sl@0
   425
	ELatin1LcAumlaut=0x00e4,
sl@0
   426
	ELatin1LcEumlaut=0x00eb,
sl@0
   427
	ELatin1LcIumlaut=0x00ef,
sl@0
   428
	ELatin1LcOumlaut=0x00f6,
sl@0
   429
	ELatin1LcUumlaut=0x00fc,
sl@0
   430
	ELatin1LcYumlaut=0x00ff,
sl@0
   431
	ELatin1SpaceUmlaut=0x00a8,
sl@0
   432
	ELatin1LcAgrave=0x00e0,
sl@0
   433
	ELatin1LcEgrave=0x00e8,
sl@0
   434
	ELatin1LcIgrave=0x00ec,
sl@0
   435
	ELatin1LcOgrave=0x00f2,
sl@0
   436
	ELatin1LcUgrave=0x00f9,
sl@0
   437
	ELatin1SpaceGrave=0x0060,
sl@0
   438
	ELatin1LcAacute=0x00e1,
sl@0
   439
	ELatin1LcEacute=0x00e9,
sl@0
   440
	ELatin1LcIacute=0x00ed,
sl@0
   441
	ELatin1LcOacute=0x00f3,
sl@0
   442
	ELatin1LcUacute=0x00fa,
sl@0
   443
	ELatin1LcYacute=0x00fd,
sl@0
   444
	ELatin1LcSpaceAcute=0x00b4,
sl@0
   445
	ELatin1LcAtilde=0x00e3,
sl@0
   446
	ELatin1LcNtilde=0x00f1,
sl@0
   447
	ELatin1LcOtilde=0x00f5,
sl@0
   448
	ELatin1LcSpaceTilde=0x0098,
sl@0
   449
	ELatin1LcAcirc=0x00e2,
sl@0
   450
	ELatin1LcEcirc=0x00ea,
sl@0
   451
	ELatin1LcIcirc=0x00ee,
sl@0
   452
	ELatin1LcOcirc=0x00f4,
sl@0
   453
	ELatin1LcUcirc=0x00fb,
sl@0
   454
	ELatin1LcSpaceCirc=0x0088,
sl@0
   455
    ELatin1UcEacute=0x00c9,
sl@0
   456
    ELatin1Diaresis=0x00a8,
sl@0
   457
    ELatin1MicroSign=0x00b5,
sl@0
   458
    ELatin1UcAumlaut=0x00c4,
sl@0
   459
    ELatin1UcOumlaut=0x00d6,
sl@0
   460
    ELatin1UcUumlaut=0x00dc,
sl@0
   461
    ELatin1SectionSign=0x00a7,
sl@0
   462
    ELatin1MultiplicationSign=0x00d7,
sl@0
   463
    ELatin1DivisionSign=0x00f7,
sl@0
   464
    ELatin1DegreeSign=0x00b0,
sl@0
   465
    ELatin1UcUgrave=0x00d9,
sl@0
   466
    ELatin1MasculineOrdinalSign=0x00ba
sl@0
   467
	};
sl@0
   468
//
sl@0
   469
#include <k32keys.inl>
sl@0
   470
//
sl@0
   471
#endif
sl@0
   472