HID клавиатура на attiny85, вопрос по кодам клавиш

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Открыл глаза
Сообщения: 57
Зарегистрирован: Ср сен 04, 2013 15:09:25

Сообщение kirseb »

Добрый день.

в рамках темы http://radiokot.ru/forum/viewtopic.php?f=24&t=102660. возник вопрос, как в hid репорте отдать комбинацию клавиш? сколько гуглил так и не нашел.

в исходном проекте репорт формируется так:

Код: Выделить всё

static void buildReport(void)
{
uchar key = 0; //if not changed by the if-statement below, then send an empty report

    if(reportCount == 0){
        if (buttonState == 1){ // if button is not pressed
		key = 0x30; // key = ]
		} else {
		key = 0x2F;  // key = [
    	}
    }


	reportCount++;
    reportBuffer[0] = 0;    /* no modifiers */
    reportBuffer[1] = key;
}
то что переменной присваивается hid usege id в hex понятно, а как комбинацию клавиш отдать переменной?
Реклама
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

reportBuffer[0] = 0; /* no modifiers */
тут указаны сканкоды кнопок-модификаторов

2 - код левого шифта
там уже не сканкоды, а биты-модификаторы и они не совпадают с пс\2 клавиатурами
чтобы снять бит, надо послать 0 в модификаторе и 0 в сканкоде, иначе будет заглавными печатать
тематические ответы только в форуме, в приват не пишите
Реклама
Открыл глаза
Сообщения: 57
Зарегистрирован: Ср сен 04, 2013 15:09:25

Сообщение kirseb »

Код: Выделить всё

reportBuffer[0] = 2;
reportBuffer[1] = 0х30;
т.е. получаем "left shift+]"?
остальные 6 ячеек только для клавиш?

для того, чтобы передать "left ctrl+left shift+]" нужно так?

Код: Выделить всё

reportBuffer[0] = 3;
reportBuffer[1] = 0х30;
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

точно не скажу, но раз там биты стоят, то сумма бит вполне может прокатить
тематические ответы только в форуме, в приват не пишите
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 57
Зарегистрирован: Ср сен 04, 2013 15:09:25

Сообщение kirseb »

модификаторы работают, также как и их сумма. но стоит только нажать на клавиатуре эти модификаторы, как устройство перестает их отдавать. как будто клавиатура перехватывает их на себя и уже не отдает. если устройство отключить и включить, то все работает нормально пока не нажаты модификаторы на клавиатуре.
Реклама
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

тебе после посылки заглавных букв надо модификатор выставить в 0 и буквы в 0 и все это еще раз послать для сброса
тогда не будет глюка
тематические ответы только в форуме, в приват не пишите
Реклама
Открыл глаза
Сообщения: 57
Зарегистрирован: Ср сен 04, 2013 15:09:25

Сообщение kirseb »

примерно так?

Код: Выделить всё

static void buildReport(void)
{
uchar key = 0; //if not changed by the if-statement below, then send an empty report
uchar mod = 0;

    if(reportCount == 0){
        if (buttonState == 1){ // if button is not pressed
      key = 0x45; // key = F8
      mod = 1;     // mod = left ctrl  
      } else {
      key = 0;      // key = 0
      mod = 0;     // no modifer
       }
    }


    reportCount++;
    reportBuffer[0] = mod;
    reportBuffer[1] = key;
}
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

типа того
тематические ответы только в форуме, в приват не пишите
Открыл глаза
Сообщения: 57
Зарегистрирован: Ср сен 04, 2013 15:09:25

Сообщение kirseb »

спасибо, потестил - все работает.
Открыл глаза
Сообщения: 57
Зарегистрирован: Ср сен 04, 2013 15:09:25

Сообщение kirseb »

возникла еще одна проблема:

при нажатии на кнопку происходят два события, первое - нажатие, второе отпускание. при этом устройство отдает компу каждое из этих двух событий в виде двух одновременных нажатий-отпусканий. в итоге имеем вместо двух событий - четыре. как убрать одновременные события?
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 186
Зарегистрирован: Ср авг 15, 2012 19:52:40
Откуда: 161 RUS

Сообщение boingo-00 »

Сейчас делаю хреновину для регулировки громкости и отображения состояния caps lock. Все есть кроме общения с компом. Как заставить комп понимать все
Здесь может быть ваша реклама.
Контактная информация:
Открыл глаза
Сообщения: 57
Зарегистрирован: Ср сен 04, 2013 15:09:25

Сообщение kirseb »

регулятор громкости на энкодере: http://obruboff.ru/usb-volume-control-ver-2/
как общаться с девайсом: http://we.easyelectronics.ru/electro-an ... v-usb.html
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 186
Зарегистрирован: Ср авг 15, 2012 19:52:40
Откуда: 161 RUS

Сообщение boingo-00 »

Спасибо :)
Здесь может быть ваша реклама.
Контактная информация:
Ответить

Вернуться в «Интеграция с ПК»