klavye test uygulaması

Başlatan unixmania, 25 Mart 2016 - 15:18:43

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

unixmania

Klavyeyi ve tuşları test etmek için bir test uygulaması yazdım. 

Bir tuşun çalışıp-çalışmadığını klavyenin driver'ine bile ihtiyaç duymadan (kerneli bypass ederek) test eder.Sorun sürücüde mi, yazılımda mı

donanımda mı anlamamıza yardım eder.Aynı işi yapan kodu iki farklı programlama diliyle(C ve assembly) paylaşıyorum.Ancak bazı noktaları belirtmem lazım:

1-Kod usb klavyeler de çalışmaz/çalışmayabilir. Modifiyeye ihtiyaç duyabilir.

2-Kendi giriş/çıkış portunuza göre ilgili satırı düzenlemeniz gerekebilir. Giriş-çıkış portundan kastım: kendi /proc/ioports içeriğimi paylaşıyom(kırpılmış):


0000-0cf7 : PCI Bus 0000:00
  0000-001f : dma1
  0020-0021 : pic1
  0040-0043 : timer0
  0050-0053 : timer1
  0060-0060 : keyboard
  0062-0062 : PNP0C09:00
    0062-0062 : EC data
  0064-0064 : keyboard
  0066-0066 : PNP0C09:00


Aha işte orada karşısında "keyboard" yazan değerler klavye ve farenin giriş-çıkış portudur. Bu değerler hex'dir.

Yani onaltılık tabandadır. Benimkiler klavye için 60 (onluk tabanda: 96 oluyor) fare için 64 'tür.(onluk tabanda 100 olur.)

C kodu aşağıda:


#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <sys/io.h>

int main(int argc, char **argv) {
unsigned char car = 0;
struct timespec sleep = {0, 100000000}; //0.1 saniye

ioperm(96, 1, 1); // 96 nolu (onluk taban) porta erişime izin ver.

    while (1) {
if(car != inb(96)){                  // Eğer bir tuşa basıldıysa
car = inb(96);
printf("key: %d\n", car); // basılan tuşun kodunu ekrana bas.
}

if(car==57) break;                // boşluk tuşuna basıldıysa programı sonlandır.
nanosleep(&sleep, 0);            // 0.1 saniye uyu yoksa işlemciyi kasar.
}
    return 0;
}


Oluşan program yürümek için root hakkı ister. Yada kendinizi "input" adlı grupa kaydettirin.("usermod" ile)

Program bir tuşa basıp-bırakınca iki kod basar. İlki "basma" olayının kodu ikincisi "bırakma" olayının kodu.

Ve bırakmanın kodu basmanın kodundan 128 büyüktür(Bende öyle heralde kural böyle)