O teclado não precisa de nenhum sinal do computador, apenas energia, certo? OU precisa receber sinais e enviá-los?
Edit: Eu não esperava que esta pergunta gerasse tanto interesse! Perguntei porque tinha um sonho ocioso de construir uma chave eletrônica que duplica o sinal para que o teclado possa enviar a mesma letra para dois computadores ao mesmo tempo. Como (pelo que posso entender nas respostas) o computador controla ativamente o teclado como qualquer outro dispositivo, isso claramente não é possível. Não é grande coisa, pois praticamente eu não tinha as habilidades necessárias para construí-lo!
Respostas:
Na especificação " Device Class Definition for Human Interface Devices (HID)" versão 11.1 ":
Para alterar os LEDs do teclado, o teclado aceita um comando para fazer isso. Portanto, não é um dispositivo "apenas de entrada" (o que significa que apenas envia dados para o host).
Dito isto, há um processo de negociação e enumeração com todos os dispositivos USB que requerem uma conversa entre o host e o dispositivo. Você não pode ter um dispositivo USB "somente leitura".
Mesmo antes do USB, o controlador do teclado do PC aceitava comandos porque fazia algumas coisas além de ler o teclado ( referência ):
fonte
So it is not an "input-only" device (meaning it only outputs data to the host)
que me confundeQualquer dispositivo USB, independentemente de sua classe, requer comunicação bidirecional para funcionar . Todo dispositivo USB (ou função em termos de especificações USB) é representado como um conjunto de terminais que podem ser considerados buffers que aceitam ou recebem dados. No entanto, mesmo os pontos de extremidade que podem enviar dados apenas aguardam um pacote especial chamado token antes que possam responder:
(imagem daqui , caixas cinza representam host USB, caixas brancas representam função USB)
Mesmo as chamadas transferências de interrupção são feitas dessa maneira, com o host USB pesquisando dispositivos conectados usando pacotes de token. O que difere entre transferências regulares (em massa) e transferências de interrupção é que o tempo de pesquisa é pequeno e garantido no último caso. Ainda assim, todas as transferências são iniciadas pelo host.
fonte
A pergunta reflete um equívoco comum de que os dispositivos USB "enviam" algo para o PC por conta própria, quando uma tecla é pressionada (ou o mouse se move), por isso é tão alta atenção. De fato, os dispositivos USB não enviam nada até receberem o pedido correspondente do host. Uma exceção é um processo de ativação de um dispositivo suspenso.
Enquanto o USB parece simples na superfície, na verdade seu funcionamento é bastante complicado. Qualquer novo dispositivo USB deve ser "enumerado" primeiro antes de começar a funcionar. A sequência é a seguinte:
Depois que um teclado é conectado, a porta do host recebe o sinal "status de conexão" (para sinais LS, D- é puxado ALTO pelo teclado).
Em seguida, o host define a porta no modo "redefinição de porta" e o USB PHY (driver da camada física) envia "USB_RESET" pelas linhas D + / D- (as duas linhas são reduzidas durante um período de tempo prescrito). Algumas informações sobre "redefinição de porta" para dispositivos FS / HS podem ser encontradas aqui .
Em seguida, o host começa a emitir pacotes de limite de quadros no intervalo de 1 ms. Para dispositivos de baixa velocidade (LS) como teclado com fio comum, esses são apenas pulsos "keep alive", enquanto para FS o SOF especial - pacotes de início de quadro são gerados. Esses pacotes mantêm o dispositivo no modo ativo e impedem que ele atinja SUSPEND de baixa potência.
Então a "enumeração" começa. O host envia uma solicitação para obter o descritor do dispositivo. A solicitação é enviada para "canal padrão" com o endereço do dispositivo "0". [No momento, existe apenas um desses dispositivos - o teclado - já que todos os outros dispositivos no barramento já devem ter seus endereços USB atribuídos individualmente]
O teclado retorna as informações solicitadas, para que o host possa determinar que tipo de driver deve ser carregado.
O host envia uma transação exigindo que o dispositivo altere seu endereço padrão para o novo endereço atribuído.
Em seguida, o host inicia uma nova rodada de comunicação com o dispositivo, agora no novo endereço atribuído. Todos os outros dispositivos ignoram essa comunicação porque não é endereçada a eles.
O host pode ler muito mais informações de vários outros descritores e, eventualmente, seleciona "configuração do dispositivo". Isso conclui o processo de enumeração.
Dependendo da classe do dispositivo USB, o host começa a se comunicar com o dispositivo. No caso do teclado, o host envia essencialmente uma solicitação "IN" periodicamente, pesquisando essencialmente o dispositivo (mesmo que esse canal periódico seja chamado de "interrupção"). Se alguma tecla for pressionada / pressionada, o teclado retornará essas informações. Caso contrário, nenhum dado será retornado ao driver do dispositivo.
Resumindo, todo dispositivo USB deve receber um endereço exclusivo do host USB e dois hosts USB terão dificuldade em se comunicar com um dispositivo - colisão de barramento, incompatibilidade de endereço, interceptação aleatória de dados pressionados por tecla etc. O protocolo USB torna impossível o compartilhamento de um dispositivo. dispositivo entre dois hosts USB.
fonte
If keyboard has any key pressed/depressed, the keyboard will return this information
- como as chaves fantasmas ocorreriam então? Eu estava sob a impressão de que os teclados devem enviar chave-up e eventos-chave para baixo, o que explicaria por que se um evento chave-up ficou perdido você teria chaves de fantasmas ...Como outras respostas explicaram, o USB requer comunicação bidirecional como parte do modo como funciona. O PS / 2, embora permita a comunicação bidirecional, não exige isso para enviar chaves ao computador, mas exige que ele defina os LEDs do teclado.
Teoricamente, você pode criar um dispositivo para duplicar o sinal PS / 2 e enviá-lo para um segundo computador e descartar qualquer comando dos computadores, para poder enviar as teclas pressionadas para vários computadores, mas os LEDs do teclado não responda aos estados num lock, caps lock e scroll lock (ou qualquer outra alteração do estado do LED, por exemplo, no Linux, os LEDs do teclado às vezes são usados para fins alternativos).
Não tenho certeza de quão complexo seria esse projeto. Já faz um tempo desde que eu trabalhei com o PS / 2, então não sei se você poderia simplesmente conectar alguns fios / conectores ou se precisaria de um dispositivo ativo (por exemplo, microcontrolador) para passar comandos em uma direção, mas descartá-los no outro. Se você possui um microcontrolador, pode até fazer com que o dispositivo possa interpretar os comandos dos LEDs do teclado e "combiná-los" para exibição (por exemplo, pisque prolongadamente o LED se estiver aceso no computador um, mas desligado no computador dois, flash curto o LED se estiver aceso no computador dois, mas apagado no computador um, LED aceso se estiver aceso nos dois computadores e LED apagado se estiver aceso nos dois computadores). Isso seria mais avançado.
Além disso, se seu objetivo é controlar um computador de outro computador, ou dois computadores da mesma mesa, ou o que for, você pode procurar:
fonte
Antes dos teclados USB, os teclados PS / 2 usavam um protocolo muito mais simples, onde é possível conectar um teclado a 2 dispositivos e fazê-lo funcionar. Uma conexão Y simples é tudo o que é necessário.
Os teclados USB mais antigos ainda têm o modo de emulação PS / 2 embutido; o uso de um desses adaptadores de conector roxo permite conectá-lo a uma porta PS / 2 na parte traseira de um computador. Portanto, usando um cabo USB para PS / 2 em 2 computadores, um adaptador roxo de volta para o teclado USB pode funcionar.
Os teclados USB mais recentes abandonaram o modo PS / 2 herdado, portanto não funcionarão neste caso.
fonte