沼津高専 電子制御工学科
MIRS0001 タッチセンサデバイスドライバ取扱説明書
MIRS0001-SOFT-1002
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2001.6.30 太田 竹村 初版
A02 2001.7.3 太田 竹村 部分訂正
A03 2001.10.3 太田 竹村 組み込み方法と試験部分の追加
A04 2001.10.4 太田 竹村 ヘッダ仕様改良

目次


1 .はじめに

 本ドキュメントは、MIRS0001に搭載するタッチセンサデバイスドライバプログラムの仕様と取扱い方法について説明するものである。

2 .システム内の位置

 図にMIRS0001のソフトウェアシステム内においてのタッチセンサデバイスドライバの位置を示す。

TSドライバの位置
Fig.1 システム内のタッチセンサデバイスドライバの位置

3 .タッチセンサデバイスドライバの機能概要

タッチセンサデバイスドライバは、MIRS0001に搭載されるタッチセンサ、パワーオン信号のON/OFFを調べるためのLINUX用デバイスドライバである。
 readメソッドでは、タッチセンサ・パワーオン信号を1度に全て読み込み、ioctlメソッドでは、メソッド内に用意した複数のコマンドを用いて、タッチセンサ・パワーオン信号をそれぞれ分けて読み込む。

4 .アプリケーションインターフェース

4-1 .デバイスドライバプログラム構成図

 図にタッチセンサデバイスドライバプログラム構成図を示す。


Fig.2 タッチセンサデバイスドライバプログラム構成図

4-2 .上位プログラムで使用する関数

上位プログラムで使用する関数・引数と、その関数が行う動作を以下に示す。

 ●int fc=open("/dev/ts",f_mode)
    第1引数:タッチセンサドライバを指定
    第2引数:ファイルの読み書きの属性(O_RDONLY、O_WRONLY、O_RDWR)
 
●read(fc, char *data,size_t count,loff_t offset)
    第1引数:タッチセンサドライバを指定
	第2引数:各センサデータの格納領域
	第3引数:センサデータのバイト数
	第4引数:オフセット

●ioctl(fc,int cmd_number,char *data)
	第1引数:タッチセンサドライバを指定
	第2引数:コマンド選択値
	第3引数:センサデータの格納領域
●close(fc)
	第1引数:タッチセンサドライバを指定

4-3 .ioctl関数のコマンド

 ioctl関数で引数として用いるコマンド選択値と表示設定値の対応および、それによって行われる動作について以下の表に示す。各センサのセンサ番号は、ボード開発の電子回路基板設計書のソフトウェアビジビリティに対応させている。(ioctl関数の第2引数は以下の表のコマンド(IRS_READ等)を代入する。)

コマンド(cmd)
コマンド値
最大読み込みバイト数
動作内容
TS_READ
1
6バイト
タッチセンサのデータのみユーザ空間に読み込む。先頭アドレスにはタッチセンサ0のデータが格納されている。そして、その次にはタッチセンサ1のデータ、そのまた次はタッチセンサ2のデータ、というようにセンサデータが順に格納される(最大6個)。
PO_READ
2
1バイト
パワーオン信号のみユーザ空間に読み込む。
TS_HARDRESET
3

ドライバ利用度数リセット用コマンド。このコマンドがあることにより、いざというときドライバをアンロードできる。

5 .タッチセンサデバイスドライバプログラムを扱う上での注意

5-1 .ioctlコマンドの定義

 ioctl関数のコマンドを使用するには、タッチセンサデバイスドライバと上位プログラムでコマンド番号を合わせる必要がある。(コマンド番号が一致してなければ、もちろんタッチセンサデバイスドライバのioctlコマンドを使用することはできない。)そのため、ヘッダファイルにコマンド番号を定義したので、このファイルを上位プログラムにincludeする。以下にヘッダファイルの中身(一部分のみ)を示す。


#define TS_IOC_MAGIC 't'
#define TS_READ         _IOR(TS_IOC_MAGIC, 0,setcode)
#define PO_READ         _IOR(TS_IOC_MAGIC, 1,setcode)
#define TS_HARDRESET 	_IO(TS_IOC_MAGIC,  2)

#define LCD_IOC_MAXNR 3
※上記のTS_IOC_MAGICとは、タッチセンサデバイスドライバのマジックナンバーが't'であることを意味する。(マジックナンバーは、ドライバ全体にわたって使われる番号。これは、間違ったデバイスに正しいコマンドを発行するというエラーを防ぐためにあるものである。これによって誤動作してしまうのを防ぐ。)

5-2.割り込み&割り込み信号のマスク・アンマスクについて

 このタッチセンサデバイスドライバには現在、ソフト的な割り込み機能を有していない。よって、タッチセンサ・パワーオン信号の状態を調べたい場合は、上位プログラムの方で見に行く必要がある。上位プログラムの方で定期的にこれらの信号を調べるようにしておかないと、タッチセンサに反応があっても感知できないので、MIRSが次の行動に移れないということになる。
 次に、割り込み信号(IRQ6)のマスク・アンマスクについて述べる。このデバイスドライバでは割り込み機能がないため、割り込み信号のソフト的なマスク・アンマスクの機能は有していない。

6 .組込みの方法

6-1 .ダウンロード
以下のファイルをダウンロードし、解凍する。

この圧縮ファイルの中身は である。

6-2 .コンパイル
ts.cをコンパイルしてts.oを作る。コンパイルには以下の操作を行う。
gcc -Wall -O2 -c ts.c

6-3 .タッチセンサデバイスドライバの組み込み
次に、以下の操作を行って、タッチセンサデバイスドライバをモジュールとして組み込む。(スーパユーザでなければこのコマンドは実行できない。)
insmod irs.o
デバイスドライバのモジュール組み込み完了を確認したい場合は、lsmodというコマンドを使う。また、タッチデバイスドライバモジュールを削除するには、
rmmod ts
というコマンドを用いる。

6-4 .タッチセンサデバイスファイル(デバイスノード)の作成
以下の操作を行って、タッチセンサデバイスファイルを作成する。
mknod -m 444 /dev/ts$i c 61 $i (ただし$iは0〜255の範囲(ほとんどは0のみを使用。))
これで、アクセス権が444、デバイスファイル名が/dev/irs$i、メジャー番号が61、マイナー番号$iとしタッチセンサデバイスノードが作成される。(ちなみにcは、キャラクタ型デバイスでタッチドライバを登録するということ。)
また、デバイスファイルを削除するには、
rm /dev/ts$i
というコマンドを用いる。

7 .単体試験

タッチセンサデバイスドライバの単体試験を行う前に、必要なハードウェアを実装する。実装方法は、ハードウェアの仕様書に提示されているのでそれを見て行うこと。

7-1 .コマンドによる試験
現在の仕様ではコマンドでの試験は行えない。

7-2 .テストプログラムによる試験
作成中。


関連文書