Skocz do zawartości

[C++] Obsługa Slidera Klawiatury


Mikołaj

Rekomendowane odpowiedzi

od jakiegoś czasu męczy mnie brak dodatkowych przycisków na skróty dla aplikacji (tak wiem, mogę używać kombinacji klawiszowych, ale nie chcę ;p)

 

mam laptopa lenovo y550, wśród wielu migających diódek ma on na górze slider. Producent dostarcza aplikację do jego obsługi ale tylko pod windowsa.

 

oczywiście manager skrótów w kde nie wykrywa tych klawiszy, xev też nie zgłasza zdarzeń gdy używam slidera. Jednak /dev/input/by-path/platform-i8042-serio-0-event-kbd wyrzuca różne "śmieci". Więc dostęp jest.

Mapowanie tych przycisków przy użyciu różnych "sztuczek" raczej odpada, bo po przejechaniu palcem po pasku uruchomiłoby mi się wszystko co na nim ustawiłem, a chodzi o trafienie i zatwierdzenie (jeszcze nie wiem jak zatwierdzenie ma wyglądać, może odpowiedni czas, jeszcze zobaczę jak to na windzie rozwiązali).

 

Teraz moje pytanie, jak napisać taki slider?

Chodzi mi głownie o to, czy czytać bezpośrednio z /dev/input/by-path/platform-i8042-serio-0-event-kbd (co wymaga praw roota, a tego raczej bym chciał uniknąć) czy jest może jakaś biblioteka do obsługi klawiatury. Chcę to zrobić "ładnie", a nie po partyzancku ;]

 

Jak mi się uda to może jeszcze komuś się przyda ;]

Odnośnik do komentarza
Udostępnij na innych stronach

Trochę Ci zazdroszczę rodziewiczania terenu. :)

Nigdy się jeszcze tym nie bawiłem, ale z ciekawości poszukałem to i owo.

 

* znalazłem (oby aktualne) artykuły o "input subsystem": http://www.linuxjour...com/user/801145

* bardziej "mięsne" będzie na początek trochę partyzantki: http://stackoverflow...4225290#4225290

 

* po drodze zgarnąłem jeszcze jakieś linki, nie wiem czy coś wnoszą do tematu ale zapodam:

http://stackoverflow...d-device-linuxc

http://stackoverflow...keyboard-format

http://www.kernel.or...2005/mochel.pdf

i jeszcze dwa proste keyloggery

http://forum.ubuntu....ad.php?p=772073

http://code.google.com/p/logkeys/

 

Powodzenia :)

Odnośnik do komentarza
Udostępnij na innych stronach

dzięki za informację, jeszcze popatrzę czy może samo QT nie daje bezpośredniego (chodzi tylko o to, bym miał dostęp do zdarzeń slidera, nie ważne skąd i jak, byle kulturalny ;]) dostępu do klawiatury z poziomu zwykłego użyszkodnika, bo jak mi to będzie na roocie tylko działało to wątpię czy ktoś poza mną będzie tego chciał używać, nawet mi się takie rozwiązanie nie podoba ;]

 

póki co muszę trochę czasu na to znaleźć i ogarnąć trochę QT i materiały które mi podałeś, bo na razie je pobieżnie przejrzałem ;]

Odnośnik do komentarza
Udostępnij na innych stronach

problem "root" to nie problem, wystarczy że "serwer" chodzi jako root, a "client" jako user.

Najprostrza komunikacja to man 3 mkfifo albo jakoś tak.

 

Qt Ci nie wiele da. Z tego co pobieżnie przejrzałem to musisz napisać moduł dla kernela (sterownik) do obsługi ów slidera, bo kernel wprawdzie coś odczytuje, ale nie potrafi interpretować. No a potem to już może być Qt.

 

Przydała by się dokumentacja do tego slidera. Nie wiem, pogrzeb w sieci, rozkręć obudowę i wpisz numerki seryjne w google :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

mam pewien problem z kompilacją

NetBeansProjects/slider/main.cpp:24: undefined reference to `GetKeyboardEvents(_EventList*, _DeviceIntRec*, int, int)'
collect2: ld returned 1 exit status

 

jest to funkcja z

#include <xorg/input.h>

 

ale nie wiem w jakiej bibliotece jest ta funkcja .... a na google na razie nic nie znalazłem ...

Odnośnik do komentarza
Udostępnij na innych stronach

Tez mam Lenovo y550 i czekam co wyniknie z Twoich dzialan. Ale szczerze mówiac na windowsie 7 ten slider dziala zalosnie (ciezko wtrafic w dany program który ma sie uruchomic. moze da sie cos ustawic, ale nie bawilem sie tym za dlugo bo jednak siedze na linuksie). Lenovo mialo fajny pomysl, ale cos poszlo nie tak. Jak dla mnie ten slider by sie przydal do sterowania multimediami (przejechanie w lewo przez kilka punktów - poprzednia piosenka, w prawo - nastepna, klikniecie w jeden punkt - pauza/graj).

Odnośnik do komentarza
Udostępnij na innych stronach

mam pewien problem z kompilacja

NetBeansProjects/slider/main.cpp:24: undefined reference to `GetKeyboardEvents(_EventList*, _DeviceIntRec*, int, int)'
collect2: ld returned 1 exit status

 

jest to funkcja z

#include <xorg/input.h>

 

ale nie wiem w jakiej bibliotece jest ta funkcja .... a na google na razie nic nie znalazlem ...

 

Nie masz liba w linkerze dodanego, mimo ze naglówki masz includowane to potrzebujesz jeszcze podlinkowac odpowiednia biblioteke. Zobacz w sklad jakiej biblioteki wchodzi input/h a pózniej dodaj do parametrów kompilera odpowiednia opcje w stylu -lcostam. Pewnie musisz jakies xorg-costam zobaczyc. Lib to chyba cos z xorg-server, zobacz czy masz odpowiedniego devela.

Odnośnik do komentarza
Udostępnij na innych stronach

[mag@mag-lap ~]$ rpm -qa |grep x11-server

xorg-x11-server-devel-1.9.3-3.fc14.i686

xorg-x11-server-utils-7.4-19.fc14.i686

xorg-x11-server-common-1.9.3-3.fc14.i686

xorg-x11-server-source-1.9.3-3.fc14.noarch

xorg-x11-server-Xorg-1.9.3-3.fc14.i686[\code]

 

No tak, tylko właśnie jakiego liba? bo do tego nie umiem dojść od wczoraj ;p

Odnośnik do komentarza
Udostępnij na innych stronach

Wez jako root odpal ldconfig -v i zobacz te liby z x'ami. Pozniej nazwe bez rozszerzenia dodaj do -lnazwa do opcji kompilacji.

Odnośnik do komentarza
Udostępnij na innych stronach

Dokładnie to jest: xorg-x11-server-devel

Ale Ty musisz zlinkować swój projekt z xorg aby on wiedział, że takie funkcje istnieją.

-lX11 powinno zadziałać, choć nie mam pewności, że to o to chodzi [-; (tam jest minus i litera L małe)

Musisz dodać to do paramentrów linkera w Twoim projekcie.

Odnośnik do komentarza
Udostępnij na innych stronach

pojawił się problem który zburzył moje dotychczasowe mniemanie o wszech otaczającym mnie jakże nie do końca zrozumiałym świecie linuksa, który swymi brakami motywuje mnie do zgłębiania tajników mistycznej wiedzy o sposobie jego działania, możliwościach rozbudowy, konfiguracji i poprawienia działania dla dobra całej społeczności zaangażowanej w rozwój tegoż systemu:

 

/* skrajna lewa diodka na sliderze */
Input_event: time(1294441553 868313), type: EV_MSC, code: 3, value: e0
Input_event: time(1294441553 870876), type: EV_MSC, code: 3, value: 3b
Input_event: time(1294441553 870884), type: EV_MSC, code: 4, value: bb
Input_event: time(1294441553 940553), type: EV_MSC, code: 3, value: e0
Input_event: time(1294441553 944955), type: EV_MSC, code: 3, value: bb
Input_event: time(1294441553 944965), type: EV_MSC, code: 4, value: bb

/* skrajna prawa diodka na sliderze */
Input_event: time(1294441561 751317), type: EV_MSC, code: 3, value: e0
Input_event: time(1294441561 753985), type: EV_MSC, code: 3, value: 3b
Input_event: time(1294441561 753992), type: EV_MSC, code: 4, value: bb
Input_event: time(1294441561 809092), type: EV_MSC, code: 3, value: e0
Input_event: time(1294441561 814230), type: EV_MSC, code: 3, value: bb
Input_event: time(1294441561 814239), type: EV_MSC, code: 4, value: bb

(program pozyskuje dane z /dev/input/event4 - moja klawiatura, na razie brzydko ale to najmniejszy problem ....)

 

to są scancody (czy jak to się tam zwie) generowane przez klawiaturę po naciśnięciu danych "klawiszy".

Wydaje mi się, że takie same sekwencje mogą trochę utrudnić rozróżnienie klawiszy ... czy jest na sali jasnowidz??

 

Czytałem trochę:

http://gunnarwrobel.de/wiki/Linux-and-the-keyboard.html

http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html (tutaj zawiodła mnie strona powyżej)

 

powyższe materiały wydają się być ciekawe, tylko wymaga to ode mnie rozgryzienia dodatkowo zasady komunikacji z klawiaturą ... czego póki co nie umiem.

 

po znalezieniu tych materiałów, wpadłem na pomysł czy by nie dało się podejrzeć procesu komunikacji softu od Lenovo z klawiaturą na windowsie. Napisać jakiś program który by sprawdzał co leci z i do klawiatury, bo możliwe że trzeba coć do klawiatury przesłać żeby slider działał poprawnie (takie sytuacje są opisane w drugim linku)

 

Może ktoś jest zainteresowany przyłączeniem się do poszukiwań i "badań" nad komunikacją z klawiaturą?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...