Interface: InterManager Arquivos: intermanager.h Última atualização: 02/07/2003 Autor: Luiz Henrique Shigunov |
Descrição Estruturas |
Funções para o sistema | |
0x08 - GetInputInfo - Obtém informações sobre um dispositivo de entrada 0x09 - GetOutputInfo - Obtém informações sobre um dispositivo de saída 0x00 - RegisterInput - Registra um dispositivo de entrada |
0x01 - RegisterOutput - Registra um dispositivo de saída 0x02 - SendEvent - Envia um evento para uma tarefa |
Funções para o usuário | |
0x03 - UFlushEventQueue - Remove eventos da fila de eventos 0x04 - UGetInputInfo - Obtém informações sobre um dispositivo de entrada 0x05 - UGetOutputInfo - Obtém informações sobre um dispositivo de saída |
0x06 - USetFocus - Define que tarefa tem o foco dos dispositivos de entrada 0x07 - UWaitEvent - Espera por um evento |
Esta página descreve a interface InterManager que trata da interface do sistema (receber eventos dos dispositivos de entrada e repassá-los para as tarefas, fornecer informações sobre os dispositivos de e/s, etc).
O modelo usado para entrada de dados do usuário é o modelo de eventos, ou seja, cada tecla pressionada, cada movimento do mouse, é um evento que será repassado para a tarefa.
Cada dispositivo de entrada tem uma tarefa com o foco e todos os eventos são repassados para a tarefa que tem o foco.
As tarefas podem escrever nos dispositivos de saída em qualquer ordem, não existindo foco.
Toda tarefa criada herda os dispositivos de entrada e saída da tarefa que a criou.
Todo dispositivo de entrada deve implementar a interface InputDev e todo dispositivo de saída deve implementar a interface OutputDev.
typedef struct { unsigned int type; unsigned int data[7]; } InterManager_Event;
data são dados específicos do evento.
Os seguinte valores de type já estão em uso:
Valor | Descrição |
---|---|
0x0000-0x000f | Em uso pela interface Keyboard |
0x0010-0x001f | Em uso pela interface UserModManager |
typedef struct { unsigned short interSize; unsigned short impSize; char names[1]; } InterManager_InputInfo;
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.
typedef struct { unsigned short interSize; unsigned short impSize; char names[1]; } InterManager_OutputInfo;
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.
Estas funções são de uso exclusivo dos módulos do sistema.
int InterManager_GetInputInfo(unsigned int index, InterManager_InputInfo *info, unsigned int size);
Esta função obtém informações sobre o dispositivo de entrada index usado pela tarefa chamadora.
index começa em 0 e deve ser incrementado a cada chamada da função.
size é o tamanho total de info.
Se ocorrer sucesso, info será preenchido com as informações do dispositivo de entrada.
int InterManager_GetOutputInfo(InterManager_OutputInfo *info, unsigned int size);
Esta função obtém informações sobre o dispositivo de saída usado pela tarefa chamadora.
size é o tamanho total de info.
Se ocorrer sucesso, info será preenchido com as informações do dispositivo de saída.
int InterManager_RegisterInput(TaskManager_Task *task, const char *imp);
Esta função registra o dispositivo imp, que deve implementar a interface InputDev, para a tarefa task.
Se task for NULL, será registrado para a tarefa que chama esta função.
A tarefa terá o foco do dispositivo se este ainda não tiver sido registrado para uma tarefa.
int InterManager_RegisterOutput(TaskManager_Task *task, const char *imp);
Esta função registra o dispositivo imp, que deve implementar a interface OutputDev, para a tarefa task.
Se task for NULL, será registrado para a tarefa que chama esta função.
Apenas um dispositivo de saída pode ser registrado por tarefa.
int InterManager_SendEvent(TaskManager_Task *task, const InterManager_Event *event);
Esta função envia o evento event para a tarefa task.
Se task for NULL, será enviado para a tarefa que chama esta função.
Esta função não libera event.
Estas funções foram projetadas para os módulos do usuário.
void InterManager_UFlushEventQueue(int mask);
Do usuário.
Esta função remove todos os eventos da fila de espera onde mask & tipo do evento seja igual a zero.
Por exemplo: para remover todos os eventos do teclado mask deve ser 0xfffffff0.
int InterManager_UGetInputInfo(unsigned int index, InterManager_InputInfo *info, unsigned int size);
Do usuário.
A mesma da função GetInputInfo.
Os mesmos da função GetInputInfo.
int InterManager_UGetOutputInfo(InterManager_OutputInfo *info, unsigned int size);
Do usuário.
A mesma da função GetOutputInfo.
Os mesmos da função GetOutputInfo.
int InterManager_USetFocus(int task);
Do usuário.
Esta função passa o foco dos dispositivos de entrada da tarefa que chama esta função para task.
task deve ter os mesmos dispositivos de entrada da tarefa que chama esta função.
int InterManager_UWaitEvent(InterManager_Event *event, int prop);
Do usuário.
Esta função espera um evento. prop indica o que deve ser feito se não existirem eventos pendentes.
prop deve ser 0 ou:
Em caso de sucesso, event será preenchido com o evento.