Добрый день, уважаемые.
Имеется контроллер USB от Cypress: CY7C68013A. В примерах нашел реализацию HID клавиатуры на нем:
Код:
|
EZUSB_ReadI2C(BTN_ADDR,0x01,&buttons); // Read button states
buttons &= 0x0F;
if ((oldbuttons - buttons) != 0) //Change in button state
{
if (buttons & 1) //Shift
EP1INBUF[0] = 0;
else
EP1INBUF[0] = 2;
if (buttons & 2) //a
EP1INBUF[2] = 0;
else
EP1INBUF[2] = 4;
if (buttons & 4) //b
EP1INBUF[3] = 0;
else
EP1INBUF[3] = 5;
if (buttons & 8) //c
EP1INBUF[4] = 0;
else
EP1INBUF[4] = 6;
EP1INBUF[1] = 0;
EP1INBC = 5;
}
oldbuttons = buttons;
} |
Код опрашивает кнопки и отправляет сообщение о нажатиях по USB. Все работает, но я никак не понимаю этот протокол общения клавиатуры с ПК.
Здесь он состоит из пяти байт:
1) Модификатор (shift, caps...)
2) Зарезервирован (всегда 0x00)
3) KeyCode 1
4) KeyCode 2
5) KeyCode 3
Тогда, к примеру, я хочу использовать 8 клавиш. Как мне в этом случае отправлять запрос? Как формируется код нажатия и отпускания клавиши?
Код:
|
EP1INBUF[0] = 0x00;
EP1INBUF[1] = 0x00;
if (key) {
EP1INBUF[2] = 0x1D; //'z'
} else {
EP1INBUF[2] = 0x00;
EP1INBUF[3] = 0x00;
}
EP1INBC = 5; |
В этом коде все замечательно работает с одной кнопкой. Причем, для кода отпускания мне приходится посылать нули в два байта (2,3), иначе она не отпускается.
Прошу вашей помощи, запутался. Возможно кто-то реализовывал протокол обмена HID устройства с ПК.