интересно что если сделать все тоже самое, но не выключать эмуляцию(XLAT), то клавиши mute, volume + - вырабатывают сканкод нажатия и отпускания, согласно режиму 1 сканкода(c / c+80h).
я согласен. но я уже писал выше, что не все клавы стандартные в режиме без трансляции. У меня на ноуте в режиме трансляции все нормально, а без трансляции мультимедиа клавиши шлют вообще свои сканкоды, а при отпускании F0+не свой код. ВОТ я и пришел к выводу что в режиме трансляции лучше.
Лучшe выясни, почeму тaк происходит. Почeму контроллeр нормaльно трaнслируeт коды отпускaния, a ты этого сдeлaть нe можeшь? Нaвряд ли он нaстолько интeгрировaн с клaвиaтурой, что знaeт о нeстaндaртных кодaх отпускaния.
Софт обычно рaботaeт с мультимeдийными клaвишaми, кaк с кнопкaми, т.e. рeaгируeт только нa нaжaтия, поэтому лучшe провeрь, нe совпaдaют ли коды отпускaния мм клaвиш с кодaми отпускaния др. клaвиш.
А что это даст? Я ведь хочу знать какая нажата и какая отпущена. Ведь если я подстроюсь под свой ноут, не факт что на другом так же будет.
Я не предлагаю под что-либо подстраиваться, а предлагаю разобраться с проблемой. Вот например интересно, какие именно коды отпускания мм клавиш для второго набора выдаются на твоем ноуте. Я допускаю, что коды отпускания мм клавиш выдаются неправильно, но все-таки сомневаюсь в этом. И даже если это так, то хорошо написанный обработчик должен сглаживать эту ситуацию. Коды отпускания играют существенную роль прежде всего для клавиш Shift, Ctrl, Alt. Если коды отпускания мм клавиш на твоем ноуте не совпадают с кодами отпускания этих клавиш, то все не так страшно. Главное, чтобы обработчик не ждал отпускания мм клавиш (с теми же кодами). Софт, работающий с клавиатурой исключительно через системное ПО, скорее всего даже не заметит появления подобного несоответствия, т.к. в подавляющем большинстве случаев выполняет обработку событий только по нажатию клавиш, хотя по идее должен иметь возможность принимать события и по отпусканию клавиш.
коды моей клавы: esc- 76h / f0h 76h home -E0h 3Ah / E0h B2h mute - E0h 23h / E0h A0h по какому принципу их определять? в режиме трансляции всенормально
Все правильно, как и прописано в спецификации. http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf
ща почитаю. только на форуме linux читал что от нее давно отказались. интересно что коды нажатия ММ клавиш соответствуют , а отпускания соответствуют скан кодам реж трансляции
и еще в спецификации написано что винда использует набор 1. тоже что и 2 в режиме трансляции. так что я был прав, нефиг мудрить, нало как все нормальные люди, с трансляцией и в реж 2
интересный факт: в режиме трансляции и набор 2 скан коды ММ соответствуют таблице А без трансляции в наборе 1 esc- 01h / 81h home -E0h 3Ah / E0h B2h mute - E0h 23h / E0h A0h хотя по идее они должны быть как при трансляции в наб 2 и еще у ММ клавиш почему-то нет префикса F0h при отпускании
Возникает вопрос, активировал ли ты набор 2 в первом случае вообще? Покажи, как ты отключал трансляцию и активировал набор 2.
я про это и писал. И режим этот если не включать всеравно по умолчанию. я врегистре команд вырубал 6 бит и слал клаве f0h - 02h при выключенном прерывании, nmi и даже acpi на себя взял, чтоб smm не сработал
в спецификации которую скинул правия тоже говорится, что винда работает в режиме трансляции и наб 2, а в исходниках Линукс в режиме трансляции и наборах 2 и 3
Я использую набор 2 без трансляции. Все работает отлично. Напишу программу и поэкспериментирую с кодами мм клавиш на ноуте в чистом виде. Вообще же у меня драйвер посылает вирт. коды. Ни разу не замечал, чтобы коды отпускания не соответствовали кодам нажатия.
Вообще если с трансляцией все работает нормально, то и без трансляции должно. В противном случае получается, что без трансляции контроллер портит коды отпускания, поступающие от клавиатуры, хотя не должен их трогать.