Keyboard PDDs
9/8/2008
O teclado PDD é a plataforma-dependente codificar do driver de teclado. Layout Manager é possível identificador múltiplo, simultâneo teclado PDDs, como um teclado PS/2 e um teclado matriz, sobre o mesmo dispositivo. O teclado PDD contém inicialização e energia funções. Ele pode usar o comum teclado interrupção serviço segmento (ist) ou incluir seu próprio. Quando os elementos gráficos, janela e eventos de subsistema (GWES) inicializa o driver de teclado, ele inicializa cada PDD.
Cada teclado PDD tem uma função entrada que retorna um estrutura de dados contendo uma descrição dos ponteiros de função e PDD. Quando Layout Manager inicializa o PDD, o driver de teclado passa a PDD um identificador exclusivo que a PDD pode usar para se identificar. Isso ajuda quando múltiplo dispositivos usam a mesma PDD. De exemplo, separar dois controladores PS/2.
Cada PDD é a mesma DLL como Layout Manager. Não é possível adicionar um PDD em tempo de execução.
Você deve especificar os PDDs no driver de teclado que exigem inicialização. O NULL finalizada g_rgpfnPddEntries matriz especifica a ponto de entrada de cada PDD o driver de teclado DLL que requer inicialização. Funções de entrada podem ocorrer múltiplo horas na matriz se múltiplo controladores do teclado usam o mesmo PDD. A primeira entrada na matriz é a usar como padrão PDD. MapVirtualKey usa do este PDD usar como padrão dispositivo layout para converter digitalizar códigos para chaves virtuais.
Configuração recomenda Microsoft o usar como padrão PDD para uma entrada PS/2 para teclados HID suporte. Se seu dispositivo não tiver uma porta PS/2, use o stub PS/2 PDD para minimizar o tamanho do seu executar-imagem tempo.
O seguinte exemplo de código mostra uma declaração de uma ponto de entrada PDD de teclado e um inicializada g_rgpfnPddEntries
matriz.
typedef BOOL (*PFN_KEYBD_PDD_ENTRY)(
UINT uiPddId,
PFN_KEYBD_EVENT pfnKeybdEvent,
PKEYBD_PDD *ppKeybdPdd
);
PFN_KEYBD_PDD_ENTRY g_rgpfnPddEntries[] = {
PS2Entry,
MatrixEntry,
NULL
};
Quando executa ist do PDD, o ist envia o atual evento de teclado para o teclado Layout Manager através a função callback PFN_KEYBD_EVENT que identifica a função entrada do PDD o Layout Manager. O seguinte exemplo de código mostra esta interface.
typedef struct tagKEYBD_PDD {
WORD wPddMask; // Matches the keyboard layout with its PDD
LPCTSTR pszName; // Could be used to identify PDD to user
PFN_KEYBD_PDD_POWER_HANDLER pfnPowerHandler;
PFN_KEYBD_PDD_TOGGLE_LIGHTS pfnToggleLights;
} KEYBD_PDD, *PKEYBD_PDD;
typedef void (*PFN_KEYBD_EVENT)(
UINT uiPddId,
UINT32 uiScanCode,
BOOL fKeyDown
);
Configurando o teclado ist é uma das responsabilidades da função entrada de PDD. Com um controlador PS/2, a função entrada PDD também configura o mouse ist. O ist chama a função evento do teclado em Layout Manager. Layout Manager passa essa função para função entrada do PDD para cada evento de teclado. Você pode configurar e usar o genérico teclado ist passando função executar um loop ist do driver de teclado uma estrutura contendo todos exigido informações.
O seguinte aplicável mostra exemplo de código funções e estruturas para o genérico teclado ist.
typedef UINT (*PFN_KEYBD_PDD_GET_KEYBD_EVENT)(
UINT uiPddId,
UINT32 rguiScanCode[16],
BOOL rgfKeyUp[16]
);
typedef struct tagKEYBD_IST {
HANDLE hevInterrupt;
DWORD dwSysIntr_Keybd;
UINT uiPddId;
PFN_KEYBD_PDD_GET_KEYBD_EVENT pfnGetKeybdEvent;
PFN_KEYBD_EVENT pfnKeybdEvent;
} KEYBD_IST, *PKEYBD_IST;
BOOL KeybdIstLoop(
PKEYBD_IST pKeybdIst
);
A seguinte lista mostra processamento ist típico:
- Quando manipulador interrupção do kernel sinais hevInterrupt, o genérico ist chama do o PDD PFN_KEYBD_PDD_GET_KEYBD_EVENT função.
- O ist chama função evento de teclado do Layout Manager para cada evento retornado,
- As chamadas ist InterruptDone Para dwSystIntr_Keybd.**
- Em resposta a chamadas para sua função evento de teclado, todos lógica repetição automática ocorre em Layout Manager.
O ist e teclado PDD não envolvidos com intervalos repetição automática. - Layout Manager chama a função Remapping para atual do teclado que específica layout dispositivo.
Para Windows Embedded CE, para obter mais informações, consulte InterruptDone.
Layout Manager chama função PFN_KEYBD_PDD_TOGGLE_LIGHTS do cada PDD quando um estado fotodiodo deve alteração.
Além disso, Layout Manager envia qualquer teclados HID um código de controle E/S (IOCTL), IOCTL_HID_SET_MODIFIERS, quando ocorre um evento fotodiodo para que luzes do teclado HID coincidir com os outros. Isso ocorre quando GWES chamadas do Layout Manager PFN_KEYBD_DRIVER_VKEY_TO_UNICODE.
Layout Manager chama manipulador de energia do cada PDD, PFN_KEYBD_PDD_POWER_HANDLER, com TRUE se desligando e FALSE se desligando no.