The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Led key"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Led key"  –2 +/
Сообщение от Andrei_redd email on 17-Май-16, 19:04 
Ткните носом где найти адреса регистров светодиодов клавиатуры ?
Ответить | Правка | Cообщить модератору

Оглавление

  • Led key, ACCA, 09:05 , 18-Май-16, (1)  
    • Led key, Andrei_redd, 11:10 , 18-Май-16, (2)  
      • Led key, Andrei_redd, 11:11 , 18-Май-16, (3)  
        • Led key, Andrei_redd, 11:35 , 18-Май-16, (4)  
          • Led key, Andrei_redd, 11:53 , 18-Май-16, (5)  
      • Led key, ACCA, 12:32 , 18-Май-16, (6)  
        • Led key, Andrei_redd, 12:42 , 18-Май-16, (7)  
          • Led key, Andrei_redd, 12:48 , 18-Май-16, (8)  
            • Led key, Andrei_redd, 13:00 , 18-Май-16, (9)  
          • Led key, ACCA, 20:05 , 18-Май-16, (10)  
            • Led key, _, 22:40 , 18-Май-16, (11)  
              • Led key, Andrei_redd, 11:17 , 20-Май-16, (12)  
                • Led key, Andrei_redd, 11:18 , 20-Май-16, (13)  

Сообщения по теме [Сортировка по времени | RSS]


1. "Led key"  +/
Сообщение от ACCA (ok) on 18-Май-16, 09:05 
> Ткните носом где найти адреса регистров светодиодов клавиатуры ?

От контроллера зависит.
Для 83C51KB посмотри здесь http://datasheets.chipdb.org/Intel/MCS51/MANUALS/27280101.PDF

На третьем порту есть четыре бита для светодиодов.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Led key"  +/
Сообщение от Andrei_redd email on 18-Май-16, 11:10 
Ok, понял, т.е. это чтобы для конкретной клавы узнать нужно знать какой контроллер ей управляет ? То есть это не унифицированное общее адресное пространство ?


Ну допустим адрес fffcb34 лед кап лок ????? (для примера)

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Led key"  +/
Сообщение от Andrei_redd email on 18-Май-16, 11:11 
Если по этому адресу 1 то горит, если 0 то не горит .....
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Led key"  +/
Сообщение от Andrei_redd email on 18-Май-16, 11:35 
А в общем нужно через порты 0x60 h

Нашел вот это

солнышко //*********************************************************************
// мигание индикаторов
// команда 0xED выдается не контроллеру, а самой клавиатуре,
// поэтому пишем ее в порт 0х60
// Состояние индикаторов определяется следующим байтом,
// 0-й бит == состояние Scroll Lock
// 1-й бит == Caps Lock
// 2-й бит == Num Lock
// Бит ==1 -> зажечь светодиод, Бит == 0 -> погасить светодиод
// Для комбинирования светодиодов юзаются битовые маски
// (если записать "3", то включатся Scroll и Caps, а Num погаснет)
// 0 == 000 (все погашены)
// 1 == 001 (Scroll)
// 2 == 010 (Caps)
// 3 == 011 (Scroll + Caps)
// 4 == 100 (Num)
// 5 == 101 (Num + Scroll)
// 6 == 110 (Num + Caps)
// 7 == 111 (все включены)
// Старшие биты (начиная с 3-го) игнорируются.
// Если определить 1 == SCROLL_LOCK, 2 == CAPS_LOCK, 4 == NUM_LOCK,
// то значения получаются установкой битов:
// зажечь Num и Scroll: NUM_LOCK | SCROLL_LOCK (5 == 4 + 1)
// сложение чисел заменяется установкой битов побитовым "или"

static short int i=1; // вообще-то должно быть char...
asm{
mov al, 0xED
out 0x60, al
mov ax, i // i занимает 2 байта, поэтому ax
out 0x60, al // ah нас не интересует
nop
nop
nop
}
if(i==1) i=2;
else if(i==2) i=4;
else i=1;
//*********************************************************************
тут, правда, вперемешку с Сишным кодом, но в целом проблем не возникнет :)
по таймеру (или как больше нравится) вызываешь этот код -- и будет тебе счастье.
Переменная i -- статическая, в АСМ сделай ее глобальной.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Led key"  +/
Сообщение от Andrei_redd email on 18-Май-16, 11:53 
Но хотелось бы более простое решение,
1> Caps Lock, или адрес (горит)
0> Caps Lock, или адрес (не горит)
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Led key"  +/
Сообщение от ACCA (ok) on 18-Май-16, 12:32 
> Ok, понял, т.е. это чтобы для конкретной клавы узнать нужно знать какой
> контроллер ей управляет ? То есть это не унифицированное общее адресное

Это я тебя стебал.

Светодиодами управляет контроллер в клаве. Напрямую к нему добраться нельзя, нужно посылать команды либо через порт клавиатурного интерфейса (0x60), либо через USB, смотря в какое место у тебя клава воткнута.

В адресном пространстве твоего компьютера "светодиодных регистров" нет.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

7. "Led key"  +/
Сообщение от Andrei_redd email on 18-Май-16, 12:42 
Ok, тогда такой вопрос, как программно определить какая клава PS/2 или USB ?
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Led key"  +/
Сообщение от Andrei_redd email on 18-Май-16, 12:48 
Ну или вычислить все подключенные клавы, допустим подключена и USB и PS/2
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Led key"  +/
Сообщение от Andrei_redd email on 18-Май-16, 13:00 
Для USB через вот эту функцию наверное нужно


166 static int usb_kbd_event(struct input_dev *dev, unsigned int type,
167                          unsigned int code, int value)
168 {
169         unsigned long flags;
170         struct usb_kbd *kbd = input_get_drvdata(dev);
171
172         if (type != EV_LED)
173                 return -1;
174
175         spin_lock_irqsave(&kbd->leds_lock, flags);
176         kbd->newleds = (!!test_bit(LED_KANA,    dev->led) << 3) | (!!test_bit(LED_COMPOSE, dev->led) << 3) |
177                        (!!test_bit(LED_SCROLLL, dev->led) << 2) | (!!test_bit(LED_CAPSL,   dev->led) << 1) |
178                        (!!test_bit(LED_NUML,    dev->led));
179
180         if (kbd->led_urb_submitted){
181                 spin_unlock_irqrestore(&kbd->leds_lock, flags);
182                 return 0;
183         }
184
185         if (*(kbd->leds) == kbd->newleds){
186                 spin_unlock_irqrestore(&kbd->leds_lock, flags);
187                 return 0;
188         }
189
190         *(kbd->leds) = kbd->newleds;
191        
192         kbd->led->dev = kbd->usbdev;
193         if (usb_submit_urb(kbd->led, GFP_ATOMIC))
194                 pr_err("usb_submit_urb(leds) failed\n");
195         else
196                 kbd->led_urb_submitted = true;
197        
198         spin_unlock_irqrestore(&kbd->leds_lock, flags);
199        
200         return 0;
201 }

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Led key"  +/
Сообщение от ACCA (ok) on 18-Май-16, 20:05 
> Ok, тогда такой вопрос, как программно определить какая клава PS/2 или USB?

Видишь ли, у тебя может быть более, чем одна клава.

Вот тебе задача -  компьютер в Internet-кафе. Один корпус, 2 видеокарты по 4 видеовыхода HDMI. 8 клавиатур и мышей через USB + BMC, который в компьютере изображает из себя PS/2 клаву, мышу и видеокарту а сам подключен через Ethernet.

Я подключён к BMC через Internet, у меня [Bluetooth] клава i-Rocks, на ней два светодиода. Узнай, какие именно и поморгай ими.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

11. "Led key"  +/
Сообщение от _ (??) on 18-Май-16, 22:40 
> Вот тебе задача -  компьютер в Internet-кафе. Один корпус, 2 видеокарты
> по 4 видеовыхода HDMI. 8 клавиатур и мышей через USB + > BMC

Челябинск?!

У нас обычно WiFi дают бесплатный и всио :)

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Led key"  +/
Сообщение от Andrei_redd email on 20-Май-16, 11:17 
Наверно там просто энтузиаст мейнфреймов работает, скоро кластер соберет )

По существу, клаву то по имени искать то чтоли ?

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Led key"  +/
Сообщение от Andrei_redd email on 20-Май-16, 11:18 
Но это поверх драйверов уже, а как напрямую порты опросить на предмет наличия клав ?
Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру