[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: RAW mode keyboard



i386 互換の raw keyboard モードを追加しました。vrkiu.c と skbd.c の両方を
修正しましたが、MC/R530 でしかテストしていないので、TX 系のテリオス、
Interlink ではうまく動作するかどうかわかりません。(たぶん大丈夫だと
思いますが...)

以下にテストに使ったプログラムを添付しますので、TX 系のマシンを
お持ちの方は kernel のソースを update して試してみてください。
プログラムを動かして、何かキーを押すと、押すときとはなすときに
画面に 16 進でキーコードが表示されれば OK です。
ESC を押すと終了します。

#vrkiu も skbd を使うべきだと思いましたが、とりあえずいまはこのまま。

Takemura

----- ここから
#define COMPAT_USL

#include <stdio.h>
#include <termios.h>
#include <sys/ioctl.h>
#ifdef COMPAT_USL
#include <dev/wscons/wsdisplay_usl_io.h>
#else
#include <time.h>
#include <dev/wscons/wsconsio.h>
#endif

main()
{
        struct termios kbdtty, tkbdtty;
        int c;
        int fd = 0; /* standard input */
        int kbmode;

#ifdef COMPAT_USL
        if (ioctl(fd, KDSKBMODE, K_RAW) < 0)
#else
        kbmode = WSKBD_RAW;
        if (ioctl(fd, WSKBDIO_SETMODE, &kbmode) < 0)
#endif
        {
                perror("ioctl");
                exit(1);
        }

        tcgetattr(fd, &kbdtty);
        tkbdtty = kbdtty;
        tkbdtty.c_iflag = IGNPAR | IGNBRK;
        tkbdtty.c_oflag = 0;
        tkbdtty.c_cflag = CREAD | CS8;
        tkbdtty.c_lflag = 0;
        tkbdtty.c_cc[VTIME] = 0;
        tkbdtty.c_cc[VMIN] = 1;
        cfsetispeed(&tkbdtty, 9600);
        cfsetospeed(&tkbdtty, 9600);
        tcsetattr(fd, TCSANOW, &tkbdtty);

        while ((c = getc(stdin)) != 0x81 /* release ESC */) {
                printf("%02x\n", c);
        }

        tcsetattr(fd, TCSANOW, &kbdtty);
}
----- ここまで