Explorar el Código

Fix/workaround for Gigabyte keyboard

The gigabyte keyboard has an N key rollover input, that is different than all of our current keyboards.

So this code tells (currently All) keyboards to choose their boot protocol, which gets us back to the standard boot definition.  Which alllows these keyboards to function like others.
main
Kurt Eckhardt hace 6 años
padre
commit
51eea763d7
Se han modificado 1 ficheros con 12 adiciones y 1 borrados
  1. +12
    -1
      keyboard.cpp

+ 12
- 1
keyboard.cpp Ver fichero

@@ -138,13 +138,24 @@ bool KeyboardController::claim(Device_t *dev, int type, const uint8_t *descripto
datapipe = new_Pipe(dev, 3, endpoint, 1, 8, interval);
datapipe->callback_function = callback;
queue_Data_Transfer(datapipe, report, 8, this);
mk_setup(setup, 0x21, 10, 0, 0, 0); // 10=SET_IDLE

mk_setup(setup, 0x21, 11, 0, 0, 0); // 11=SET_PROTOCOL BOOT
queue_Control_Transfer(dev, &setup, NULL, this);
return true;
}

void KeyboardController::control(const Transfer_t *transfer)
{
println("control callback (keyboard)");
print_hexbytes(transfer->buffer, transfer->length);
// To decode hex dump to human readable HID report summary:
// http://eleccelerator.com/usbdescreqparser/
uint32_t mesg = transfer->setup.word1;
println(" mesg = ", mesg, HEX);
if (mesg == 0x001021 && transfer->length == 0) { // SET_PROTOCOL
mk_setup(setup, 0x21, 10, 0, 0, 0); // 10=SET_IDLE
queue_Control_Transfer(device, &setup, NULL, this);
}
}

void KeyboardController::callback(const Transfer_t *transfer)

Cargando…
Cancelar
Guardar