ioctlシステムコールをテストするためのアプリケーションを作成する。
ランダムな場所からランダムな数にデータを入力し、ランダムな場所へ出力する
テストプログラムを考える。
具体的な仕様としては、IN1のデータを入力してOUT32へ出力する。
チェッカー(CHK-2101)の上では、接点番号1の入力スイッチのデータを接点番号64
のLEDへ出力することになる。(以後、接点番号を接点と略す。)
CHK-2101の接点1〜接点32はIN1〜IN32に対応している。
そして接点33〜接点64はOUT1〜OUT32に対応している。
以下のコードを記述し、dio_app.c
というソースファイルにする。
/* Lab16-1 */ #include <stdio.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include "dio_ioctl.h" int main(void) { int fd, i, ret; DIO_POINT point; fd = open("/dev/pci2726c", O_RDWR); if (fd < 0){ printf("[open] no Shippai.\n"); return -errno; } ret = ioctl(fd, IOCTL_DIO_RESET); if (ret < 0) printf("[ioctl reset] no Shippai = %d\n", ret); point.start_point = 1; point.data_count = 1; ret = ioctl(fd, IOCTL_DIO_INPUT, &point); if (ret < 0) printf("[ioctl input] no Shippai = %d\n", ret); point.start_point = 32; point.data_count = 1; ret = ioctl(fd, IOCTL_DIO_OUTPUT, &point); if (ret < 0) printf("[ioctl output] no Shippai = %d\n", ret); close(fd); return 0; }
最初にアプリケーションプログラムdio_app.c
を次のようにコンパイルする。
# make dio_app
コンパイルでエラーが出なければ、実行可能イメージとしてのdio_app
ア
プリケーションが生成されているので、念のためls
コマンドで確かめる
こと。
チェッカー(CHK-2101)の接点スイッチを全てOFFにする。
接点1のスイッチだけをONにする。
次のように
# ./dio_app
を実行して、接点64のLEDだけがが点灯すれば成功であるが、念ため 接点1のスイッチをOFFにする。
そして、再びdio_app
を実行して、接点64のLEDが消えれば完全に成功である。