Dados gerais

Interface: Keyboard
Arquivos: keyboard.h
Última atualização: 24/11/2002
Autor: Luiz Henrique Shigunov
Informações

Descrição
Estruturas
Configuração
Funções para o sistema

0x00 - GetLayout - Obtém o layout corrente

0x01 - SetLayout - Define o layout corrente
Funções para o usuário

0x02 - UGetLayout - Obtém o layout corrente

0x03 - USetLayout - Define o layout corrente

Descrição

Esta página descreve a interface Keyboard que trata do acesso ao teclado.

O módulo que implementar esta interface deve converter os toques de teclas (scancode) em virtual key e esses virtual key em caracteres propriamente dito.

Para fazer isso o módulo vai utilizar as tabelas de um módulo que implemente a interface KbdLayout.

Além disso o módulo deve controlar os leds do teclado (CapsLock, NumLock, ScrollLock).

Estruturas

typedef struct {
    unsigned int type;
    unsigned short charCode;
    unsigned char vKey;
    unsigned char reserved;
    unsigned int flags;
    unsigned int reserved2[5];
} Keyboard_Event;

Os valores de type entre 0x00-0x0f são reservados para o teclado.

Atualmente estão definidos os seguinte tipos:

ValorDescrição
0x00Tecla pressionada
0x01Tecla liberada

scancode é o valor lido do teclado para a tecla, charCode é o código do caracter em Unicode, zero se não existir e flags tem o estado dos vários shifts (ctrl, shift, alt, etc) e será o somatório de:

vKey é a virtual key, que pode ser:

ValorCódigoDescrição
0x00 Não utilizado
0x01Keyboard_VK_0Número 0
0x02Keyboard_VK_1Número 1
0x03Keyboard_VK_2Número 2
0x04Keyboard_VK_3Número 3
0x05Keyboard_VK_4Número 4
0x06Keyboard_VK_5Número 5
0x07Keyboard_VK_6Número 6
0x08Keyboard_VK_7Número 7
0x09Keyboard_VK_8Número 8
0x0aKeyboard_VK_9Número 9
0x0bKeyboard_VK_ALetra A
0x0cKeyboard_VK_BLetra B
0x0dKeyboard_VK_CLetra C
0x0eKeyboard_VK_DLetra D
0x0fKeyboard_VK_ELetra E
0x10Keyboard_VK_FLetra F
0x11Keyboard_VK_GLetra G
0x12Keyboard_VK_HLetra H
0x13Keyboard_VK_ILetra I
0x14Keyboard_VK_JLetra J
0x15Keyboard_VK_KLetra K
0x16Keyboard_VK_LLetra L
0x17Keyboard_VK_MLetra M
0x18Keyboard_VK_NLetra N
0x19Keyboard_VK_OLetra O
0x1aKeyboard_VK_PLetra P
0x1bKeyboard_VK_QLetra Q
0x1cKeyboard_VK_RLetra R
0x1dKeyboard_VK_SLetra S
0x1eKeyboard_VK_TLetra T
0x1fKeyboard_VK_ULetra U
0x20Keyboard_VK_VLetra V
0x21Keyboard_VK_WLetra W
0x22Keyboard_VK_XLetra X
0x23Keyboard_VK_YLetra Y
0x24Keyboard_VK_ZLetra Z
0x25Keyboard_VK_SPACEEspaço
0x26Keyboard_VK_KEYPAD0Número 0 do keypad
0x27Keyboard_VK_KEYPAD1Número 1 do keypad
0x28Keyboard_VK_KEYPAD2Número 2 do keypad
0x29Keyboard_VK_KEYPAD3Número 3 do keypad
0x2aKeyboard_VK_KEYPAD4Número 4 do keypad
0x2bKeyboard_VK_KEYPAD5Número 5 do keypad
0x2cKeyboard_VK_KEYPAD6Número 6 do keypad
0x2dKeyboard_VK_KEYPAD7Número 7 do keypad
0x2eKeyboard_VK_KEYPAD8Número 8 do keypad
0x2fKeyboard_VK_KEYPAD9Número 9 do keypad
0x30Keyboard_VK_KEYPAD_DIV/ do keypad
0x31Keyboard_VK_KEYPAD_MUL* do keypad
0x32Keyboard_VK_KEYPAD_MINUS- do keypad
0x33Keyboard_VK_KEYPAD_PLUS+ do keypad
0x34Keyboard_VK_KEYPAD_DOT. do keypad
0x35Keyboard_VK_KEYPAD_COMMA, do keypad
0x36Keyboard_VK_PUNCT0Pontuação
0x37Keyboard_VK_PUNCT1Pontuação
0x38Keyboard_VK_PUNCT2Pontuação
0x39Keyboard_VK_PUNCT3Pontuação
0x3aKeyboard_VK_PUNCT4Pontuação
0x3bKeyboard_VK_PUNCT5Pontuação
0x3cKeyboard_VK_PUNCT6Pontuação
0x3dKeyboard_VK_PUNCT7Pontuação
0x3eKeyboard_VK_PUNCT8Pontuação
0x3fKeyboard_VK_PUNCT9Pontuação
0x40Keyboard_VK_PUNCT10Pontuação
0x41Keyboard_VK_PUNCT11Pontuação
0x42Keyboard_VK_PUNCT12Pontuação
0x43Keyboard_VK_PUNCT13Pontuação
0x44Keyboard_VK_PUNCT14Pontuação
0x45Keyboard_VK_PUNCT15Pontuação
0x46Keyboard_VK_PUNCT16Pontuação
0x47Keyboard_VK_PUNCT17Pontuação
0x48Keyboard_VK_PUNCT18Pontuação
0x49Keyboard_VK_PUNCT19Pontuação
0x4aKeyboard_VK_PUNCT20Pontuação
0x4bKeyboard_VK_ESCEscape
0x4cKeyboard_VK_BACKBackspace
0x4dKeyboard_VK_TABTabulação
0x4eKeyboard_VK_RETURNEnter
0x4fKeyboard_VK_KEYBAD_RETURNEnter do keypad
0x50Keyboard_VK_LSHIFTShift esquerdo
0x51Keyboard_VK_RSHIFTShift direito
0x52Keyboard_VK_LCTRLCtrl esquerdo
0x53Keyboard_VK_RCTRLCtrl direito
0x54Keyboard_VK_LALTAlt esquerdo
0x55Keyboard_VK_RALTAlt direito
0x56Keyboard_VK_PAGEUPPage up
0x57Keyboard_VK_PAGEDOWNPage down
0x58Keyboard_VK_HOMEHome
0x59Keyboard_VK_ENDEnd
0x5aKeyboard_VK_INSERTInsert
0x5bKeyboard_VK_DELETEDelete
0x5cKeyboard_VK_UPCima
0x5dKeyboard_VK_DOWNBaixo
0x5eKeyboard_VK_LEFTEsquerda
0x5fKeyboard_VK_RIGHTDireita
0x60Keyboard_VK_NUMLOCKNumlock
0x61Keyboard_VK_CAPSLOCKCapslock
0x62Keyboard_VK_SCROLLLOCKScrolllock
0x63Keyboard_VK_SYSRQSysRq
0x64Keyboard_VK_PAUSEPause
0x65Keyboard_VK_F1F1
0x66Keyboard_VK_F2F2
0x67Keyboard_VK_F3F3
0x68Keyboard_VK_F4F4
0x69Keyboard_VK_F5F5
0x6aKeyboard_VK_F6F6
0x6bKeyboard_VK_F7F7
0x6cKeyboard_VK_F8F8
0x6dKeyboard_VK_F9F9
0x6eKeyboard_VK_F10F10
0x6fKeyboard_VK_F11F11
0x70Keyboard_VK_F12F12
0x71Keyboard_VK_F13F13
0x72Keyboard_VK_F14F14
0x73Keyboard_VK_F15F15
0x74Keyboard_VK_F16F16
0x75Keyboard_VK_F17F17
0x76Keyboard_VK_F18F18
0x77Keyboard_VK_F19F19
0x78Keyboard_VK_F20F20
0x79Keyboard_VK_F21F21
0x7aKeyboard_VK_F22F22
0x7bKeyboard_VK_F23F23
0x7cKeyboard_VK_F24F24
0x7dKeyboard_VK_LWINWindow esquerdo
0x7eKeyboard_VK_RWINWindow direito
0x7fKeyboard_VK_MENUMenu
0x80Keyboard_VK_MACROMacro
0x81-0xff Não utilizado

Várias virtual keys têm um significado dependendo do tipo de teclado.

typedef struct {
    unsigned short interSize;
    unsigned short impSize;
    char names[1];
} Keyboard_LayoutInfo;

Onde interSize é o tamanho do nome da interface incluindo o zero final, impSize o tamanho do nome da implementação incluindo o zero final e names é a área onde os nomes estão, primeiro o nome da interface seguido pelo nome da implementação.

Configuração

Esta interface define os seguintes grupos e chaves disponíveis através da interface CfgManager:

/system/Keyboard

As seguintes chaves estão definidas:

  • layout - nome da implementação da interface KbdLayout que deve ser usada como layout

Alguns exemplos:

  • layout=us
  • layout=usintl

Funções para o sistema

Estas funções são de uso exclusivo dos módulos do sistema.

0x00 - GetLayout

Sintaxe

const char *Keyboard_GetLayout(void);

Propriedades

Descrição

Esta função obtém o nome da implementação da interface KbdLayout que está sendo usada pelo teclado.

Valor de retorno

O nome da implementação ou NULL em caso de erro.

0x01 - SetLayout

Sintaxe

int Keyboard_SetLayout(const char *imp);

Propriedades

Descrição

Esta função define o layout do teclado para imp, que é o nome de uma implementação da interface KbdLayout.

Valor de retorno

Funções para o usuário

Estas funções foram projetadas para os módulos do usuário.

0x02 - UGetLayout

Sintaxe

int Keyboard_UGetLayout(Keyboard_LayoutInfo *info, unsigned int size);

Propriedades

Do usuário.

Descrição

Esta função obtém informações sobre a implementação da interface KbdLayout que está sendo usada pelo teclado.

size é o tamanho total de info.

Se ocorrer sucesso, info será preenchido com as informações.

Valor de retorno

0x03 - USetLayout

Sintaxe

int Keyboard_USetLayout(const char *imp);

Propriedades

Do usuário.

Descrição

Esta função define o layout do teclado para imp, que é o nome de uma implementação da interface KbdLayout.

Valor de retorno