Ir al contenido

Joy-Con 1 / Switch Pro

Status: hardware-validated (Joy-Con L/R y Pro Controller).

Los Joy-Con de primera generación y el Switch Pro Controller comparten un mismo protocolo HID. Se conectan por USB o Bluetooth Classic y exponen un IMU de 6 ejes sin magnetómetro.

Componente Parte Rango / escala
IMU (genuino) STMicroelectronics LSM6DS3-TR-C accel ±8 g (4096 LSB/g), gyro ±2000 dps (16.4 LSB/dps)
IMU (clones) InvenSense ICM-20600 o similar detección automática vía SPI ID; warm-up de bias más lento

El núcleo MEMS se sondea internamente a unos 740 Hz y se decima a tres muestras frescas por input report (nunca duplicadas). Los clones aparecen con frecuencia en el mercado gris; sus lecturas de calibración por SPI pueden devolver ceros, en cuyo caso la fusión absorbe el bias a lo largo de un warm-up un poco más largo.

VID:PID Dispositivo
057E:2006 Joy-Con L
057E:2007 Joy-Con R
057E:2009 Switch Pro Controller
057E:200E Charging Grip (actúa de proxy para los Joy-Con acoplados; conéctalos por Bluetooth en su lugar)
  • USB: HID directo. El Pro Controller requiere un handshake 0x80 0x02 antes del tráfico HID; el driver lo realiza en la inicialización.
  • Bluetooth Classic: HID sobre Bluetooth, emparejado a través del sistema operativo (Windows Configuración → Dispositivos, o bluetoothctl en Linux).

El input report 0x30 transporta 3 muestras de IMU por paquete. Las tres se decodifican - leer solo la primera reduciría a la mitad la tasa efectiva. El periodo del paquete lo fija el link interval de Bluetooth negociado, no un ODR de IMU fijo, así que la tasa entregada ronda los 200 Hz y varía con la radio del host. El timestep de fusión se mide en vivo a partir del periodo real por muestra en lugar de asumirse.

Se lee por SPI con el subcomando 0x10:

Fuente Región Notas
Accel de fábrica 0x6020 offsets + escalas
Gyro de fábrica 0x603D offsets + escalas
Override de usuario 0x8010 / 0x8028 protegido por magic bytes

El bias en reposo también se estima en el dispositivo tras ~30 s de quietud.

ID Propósito
0x40 Habilitar IMU
0x30 LEDs de jugador (bits 3:0 fijos, 7:4 parpadeando)
0x38 Home LED (Joy-Con R + Pro; hasta 15 mini-ciclos)
0x48 Habilitar HD rumble
0x10 Lectura SPI

La vibración debe habilitarse primero (0x48 0x01) o el rumble se ignora en silencio. Cada lado toma un frame empaquetado de 4 bytes (bits de alta frecuencia, amplitud alta, baja frecuencia, amplitud baja); el frame neutro de silencio es 00 01 40 40. Ambos lados deben enviarse incluso cuando se acciona solo uno. El rango de frecuencia útil es 40-1252 Hz.

El body frame es (x, z, -y) de la salida cruda del IMU - la gravedad se lee como +Z cuando el control descansa boca arriba.

Gesto Acción
Botón Capture Reset Yaw
Home (pulsación corta) Reset Yaw
Home (mantener ≥1 s) Reset Full
  • Tras el bonding, el control puede dormirse; el primer input report puede tardar ~1.5 s. El driver reemite el enable de IMU en el primer timeout.
  • Sin magnetómetro, el yaw deriva al rotar el cuerpo - vuelve a hacer re-yaw mirando al frente o usa Reset Mounting.
  • NFC, la cámara IR y el Ring-Con se dejan intencionalmente sin usar: consumen ancho de banda que dejaría sin recursos a la tasa del IMU.