| Автор |
Съобщение |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
 четене на клавиатурата на PC
Правя една програмка дето работи в real time приоритет и ми се налага да чета клавиатурата директно. Но не мога да изровя как става това. Не ми се е налагало да правя такова нещо досега,имах го описано в една книжка от досовско време ама не мога да я изровя сега.
Някои може ли да помогне с инфо и акъл?
|
| Пет Май 27, 2005 3:39 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
я по-подробно...
програмата на микроконтролер ли върви или на компютър
ако е на последното с каква ОС
ако на първото... въпросите са повече

|
| Пет Май 27, 2005 3:49 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
На PC. Pod XP но не ми е проблем да пипам по портовете директно. Не мога да използвам прекъсванията.
|
| Пет Май 27, 2005 4:24 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Ама защо ти е необходимо това? Да четеш директно?
|
| Пет Май 27, 2005 4:29 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Програмата постоянно работи с принтерския порт. Прави real time емулация на едно устроиство. Но ми трябва и да приема вход от клавиятурата. Итересува ме програмата да може да проверява клавиатурата за натиснат бутон и да го опознава кои е.
|
| Пет Май 27, 2005 4:51 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Ще ти свърши ли работа следното: със SetWindowsHookEx() се закачваш към драйвера на клавиатурата, пишеш си собствена __export KeyboardProc( int code, WPARAM wParam, LPARAM lParam ) , която ще се вика всеки път когато се натисне който и да е клавиш на клавиатурата, за да не блокираш работата на драйвера на клавиатурата от твоята KeyboardProc викаш CallNextHookEx(). По този начин работи FlexТъп. Ако не бъзикаш кодови таблици като FlexТъп няма да имаш проблеми. В една такава служебна програмка, записвам асинхронно във файл, какво прави потребителя с клавиатурата. Ако ти върши работа, ще ти пратя кода на C-пляс-пляс
|
| Пет Май 27, 2005 4:53 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Проблема е че програмата е с реал тиме приоритет ,нищо освен нея не работи в windows. Няма прекъсвания. Затова трябва да работя директно с хардуера. Все едно под дос но без да ползвам прекъсвания.
|
| Пет Май 27, 2005 4:57 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Разбирам, с една дума, блокираш Windows до една нишка, от която да четеш клавиатурата и да бъзикаш паралелния порт. Не знам обаче как ще правиш времезакъснения, защото по този начин блокираш и системните таймери на Windows. Трябва и там да работиш директно с хардуера. В този случай е най-удачно да използваш поне прекъсване на BIOS за четене на клавиатурата. Иначе портовете бяха 0x64 & 0x60, обаче вече не помня, кое за какво беше. Виж в Linux какво правят: http://www.faqs.org/docs/kernel/x1206.html
|
| Пет Май 27, 2005 5:10 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Времезакъсненията не са особенно капризни в моя случаи. Тъй като процесора е много бърз а логиката на работа е проста игнорирам времето за работа на процесора и броя обръщенията към порта които правя и това ползвам за таймер.
А там в линукс не разбрах точно що правят но си ползват прекъсване.
А някъде си стои тихо и мирно описание как точно работи клавиатурата нещо от времето на доса ама точно сега като ми трябва бързо, няма.
|
| Пет Май 27, 2005 5:18 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Съжалявам, обаче разкарах всичко от фирмения си компютър, иначе имах в електронен вид такава документация. Утре, като изтрезнея от срещата на випуска, ще ти я изпратя 
|
| Пет Май 27, 2005 5:21 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Начи прозорците не са риъл тайм ОС, бъди сигурен.  Тоест, освен твойта програма може да се изпълняват и разни други нещица. Таймерите не ги блокира нищо - със сигурност.
Иначе пробвай GetAsyncKeyState() - би следвало да ти свърши работа.
|
| Пет Май 27, 2005 5:54 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
много на бързо погледнах букмарките:
http://www.ctips.com/ps2.html
http://www.computer-engineering.org/ps2keyboard/
нещо такова ти трябва, порови се малко
утре мога да ти изровя някои сорс, но ниама да е за прозорци 
|
| Пет Май 27, 2005 7:21 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Аз правих експерименти преди време с една клавиатура, но съм загърбил сорса някъде... Иначе в нета поне 1000 резултата ще намериш... Протокола е доста подобен на I2C. Правих си някаква тестова програмка да науча LCD-тата. Добро обяснение можещ да намериш тук:
http://www.electronic-engineering.ch/mi ... _v1xx.html
|
| Съб Май 28, 2005 1:54 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Де да беше за някакъв малък процесор досега да съм го измислил 2 пъти ама е за PC. Там съм му изпуснал началото на нещата и ми е доста по трудно. Пък и чичко windows като е намесен,ми става кошмарно.
|
| Съб Май 28, 2005 2:05 pm |
|
 |
|
Cvetanov
Ранг: Новодошъл
Регистриран на: Пон Фев 21, 2005 2:14 pm Мнения: 191 Местоположение: Varna
|
в "Млад конструктор" Брой 4/ 2000
имаше статия "PC-клавиатурата и течнокристалният дисплей"
там на около страница е описан протокола на клавиатурата. спомням си че имаше клавиши със особена последователност (май беше PrtScr). ако представлява интерес пиши ми на кю-то и утре ще я сканирам и кача или пък ще снимам статията стига да се получи добре.
_________________ Шанс едно на милион, обикновено се случва девет от десет пъти.
|
| Съб Май 28, 2005 3:08 pm |
|
|