[linux-ileri] Re: VGA Controller Olmadan Klavye Kullanimi - Acil :)

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Murat Koç (murat.koc@frontsite.com.tr)
Date: Fri 08 Oct 2004 - 22:54:31 EEST


> Selam,
>

Selam,

>
> Klavyeyi surekli raw modda aciyorum, programdan cikilinca normale
> donuyor, gerci o kadar da onemli degil, programdan cikilinca zaten
> reboot proseduru basliyor. Su an boot surecinin son adiminda acilis
> scripti icinden calistirilan bir programim var ve vga controller
> olmadiginda istenen sekilde calismiyor. VGA detect edilmediginde buyuk
> olasilikla tum virtual terminal ozellikleri de inaktif olmakta. Bu
> durumdayken keyboard input bufferi user space programlar icin
> kullanilmaz hale mi geliyor? Bir virtual terminal uzerinden
> baslatilmamis olan program, keyboard inputunu raw modda da alamiyor mu?
> Epey onemli bir sorun olmaya basladi, fikir yurutmek isteyenlerin de
> onerilerine acigim, belki bir yerden yakalariz, belki de cok basit bir
> noktayi kaciriyorum.
>
> Asagiya klavyeyi raw moda ceken fonksiyonu yaziyorum
>

Aşağıdakilerin hepsi yanlış. Siz burada esasında klavyeyi değil tty i raw moda
sokuyorsunuz.

eğer klavyeyi raw mode a yani scancode moduna sokmak istiyorsanız.

ioctl(0, KDSKBMODE, K_RAW);

ile yapmanız gerekir.

sonra da

ioctl(0, KDSKBMODE, K_XLATE);

keycode translation mode a geri sokmanız gerekmekte.

bu ÅŸekilde ancak herhangi bir tty ile connection kurmadan standart input u
scancode moduna sokarsınız. bundan sonrası ile read kullanarak istediğinizi
yapabilirsiniz. VGA_CONSOLE=n olduğu zaman (ve diğer console opsiyonları
kapalı iken) ise ortada tty olmayacaktır. Dolayısı ile aşağıdaki kod bir işe
yaramayacaktır.

Ortada tty nin bağlanacağı bir konsol yokken aşağıdaki kodun çalışmasını
bekleyemezsiniz deÄŸil mi?

Şimdi bunu aşmak için birkaç tane yönteminiz var. Eğer serial port varsa
aletin üzerinde açılışta console=ttyS0 yapın böylece tty e bağlanabilir.

veya yukardaki gibi kendiniz 0 ile standart input u RAW moda sokun veya
kbd_mode ile deneyin. veya DUMMY_CONSOLE kullanın.

Esasında default olarak console interactive olarak iş yapmak isteyeceği için
active bir tty e ihtiyaç duyacaktır. Bu durumda lp0 olarak dahi tanıtsanız
bir işe yaramayacaktır.

dediğim gibi kodunuzu açılışta

console=ttyS0 veya kaçsa bir tty vererek dener misiniz. Tabii o serial console
bir başka makina bağlayarak çıktıları da görebilirsiniz.

En azından şimdilik önerilerim bunlar olabilir.

Umarım yardımcı olur.

> int set_tty_raw(void)
> {
> int i;
>
> i = tcgetattr (STDIN_FILENO, &termattr);
> if (i < 0)
> {
> printf("tcgetattr() returned %d for fildes=%d\n",i,STDIN_FILENO);
> perror ("");
> return -1;
> }
> save_termattr = termattr;
>
> termattr.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
> termattr.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
> termattr.c_cflag &= ~(CSIZE | PARENB);
> termattr.c_cflag |= CS8;
> termattr.c_oflag &= ~(OPOST);
>
> termattr.c_cc[VMIN] = 1;
> termattr.c_cc[VTIME] = 0;
>
> i = tcsetattr (STDIN_FILENO, TCSANOW, &termattr);
> if (i < 0)
> {
> printf("tcsetattr() returned %d for fildes=%d\n",i,STDIN_FILENO);
> perror("");
> return -1;
> }
>
> ttystate = RAW;
> ttysavefd = STDIN_FILENO;
>
> return 0;
> }

-- 
 __________
|          |
|          |  Murat Koç
|          |  Manager & IT Consultant
|    FRONT |
|==========|  FrontSITE Bilgi Teknolojisi A.Åž.
|_____SITE_|  http://www.frontsite.com.tr/


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.