Rato

Pacotes PS/2, deltas de nove bits, comandos e deteção de gestos.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Pacote PS/2 e deltas

IRQ12 permite recolher bytes pelo i8042. Um pacote normal tem três bytes, recebidos separadamente.

Primeiro byteCampo
Bits 7 e 6Overflow Y e X
Bits 5 e 4Sinal Y e X
Bit 3Sempre 1 no cabeçalho
Bits 2, 1 e 0Botões meio, direito e esquerdo

Os bytes 1 e 2 guardam os oito bits inferiores dos deltas. Sem overflow, os deltas têm nove bits em complemento para dois:

Δx=b1−256sx,Δy=b2−256sy.\Delta x=b_1-256s_x,\qquad\Delta y=b_2-256s_y.

b1,b2b_1,b_2 são bytes sem sinal e sx,sys_x,s_y valem 0 ou 1. O intervalo é -256 a 255. Um cast para int8_t perde o nono bit: 08 C8 00 significa +200 em X, não -56.

Y físico positivo aponta para cima. Num ecrã com Y crescente para baixo, usa screen_y -= delta_y. Soma num tipo com sinal, aplica limites e só depois converte.

Converter um pacote para coordenadas de ecrã
#include <stdint.h>
#include <stdio.h>

int main(void) {
  uint8_t bytes[] = {0x28, 0x05, 0xFB};
  int dx = (int)bytes[1] - ((bytes[0] & 0x10u) ? 256 : 0);
  int dy = (int)bytes[2] - ((bytes[0] & 0x20u) ? 256 : 0);
  int x = 100 + dx;
  int y = 100 - dy;
  printf("dx=%d dy=%d x=%d y=%d\n", dx, dy, x, y);
  return 0;
}
Resultado

Executa o código para ver a saída e os gráficos.

A saída é dx=5 dy=-5 x=105 y=105, sem overflow ou clipping.

Montagem e comandos

  • Com índice 0, aceita só um byte com bit 3 ligado. Nos índices 1 e 2, guarda qualquer byte. Depois do terceiro, entrega o pacote e volta a 0.
  • Não reinicies ao encontrar bit 3 nos dados. É uma ajuda de sincronização, não uma garantia absoluta.
  • Erro de comunicação invalida o pacote parcial. Overflow torna a magnitude desse eixo não fiável; define se ignoras o eixo ou todo o movimento.
  • Stream envia pacotes espontâneos com reporting ativo. Remote entrega um pacote após 0xEB. 0xEA seleciona stream, 0xF0 remote, 0xF4 ativa reporting e 0xF5 desativa-o.

Para cada byte de comando ou argumento: espera IBF=0, escreve 0xD4 em 0x64, espera IBF=0 e escreve o byte em 0x60. Lê a resposta com limite de espera.

0xFA é ACK, 0xFE pede reenvio e 0xFC indica erro. O comando de reenvio enviado pelo anfitrião não recebe ACK. 0xD4 também não recebe ACK do rato. Para 0xF3 e argumento, ambos recebem confirmação; se o argumento pedir reenvio, a regra dos slides repete o comando completo. Limita tentativas e separa respostas de pacotes, desativando reporting quando necessário.

Gestos

O parser produz pacotes; outra máquina interpreta o gesto. No arrasto do exemplo, a pressão inicia com acumulados zero e não soma movimento desse pacote. Só movimentos seguintes com botão premido contam.

Aceita uma vez ao atingir x≥100x\geq100 e ∣y∣≤5|y|\leq5. Movimento à esquerda ou desvio acumulado excessivo invalida o candidato até largar. (40,3), (40,3), (30,-2) falha no segundo movimento, pois y=6y=6; o valor final 4 não recupera o gesto.

Máquina e demonstração do gesto.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.