沼津高専 電子制御工学科
MIRSATLM 赤外線・タッチセンサデバイスドライバ取扱説明書
MIRSATLM-SOFT-1004
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2001.1.11 田口 大庭 初版
A02 2001.3.13 田口 遠山 最終的な仕様に修正

目次


1 .はじめに

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

2 .システム内の位置

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


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

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

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

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

4-1 .デバイスドライバプログラム構成図
 図に赤外線・タッチセンサデバイスドライバプログラム構成図を示す。


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

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

●int fc=open("/dev/irs_ts",f_mode)
    第1引数:赤外線・タッチセンサドライバを指定
    第2引数:ファイルの読み書きの属性(O_RDONLY、O_WRONLY、O_RDWR)
 ・赤外線・タッチセンサデバイスドライバをopenすると、open時にI/Oポートアドレスのチェックと登録を行う。
  もしI/Oポートが使用中ならerrを返す。
 ・第2引数のファイルの属性だが、このドライバはタッチセンサや赤外線センサの状態を読み込むだけで書き込むことは
  ないので、O_RDONLYにすることが望ましい。


●read(fc, char *data,size_t count,loff_t offset)
    第1引数:赤外線・タッチセンサドライバを指定
	第2引数:各センサデータの格納領域
	第3引数:センサデータのバイト数
	第4引数:オフセット
 ・readメソッドは呼び出されると、タッチセンサ・赤外線センサの現在の状況をI/Oポートからint型で読み込む。read
  メソッドのデータ格納領域はchar型で定義されている(変更不可能)ので、読み込んだint型のデータをchar型データに
  変換する。変換後、このchar型データをユーザ空間に書き込んでいる。
 ・データは1:ONで0:OFFであり、また赤外線センサ・タッチセンサ・パワーオン信号の順に格納されている。(ゆえに
  アドレス+1するごとに赤外線センサ0・1・2…の状態が確認できる。もしくは配列(例えばchar dat[13])を用意してお
  き、この配列の先頭アドレスをポインタ変数に代入しておけば、dat[0]に赤外線センサ0の状態、dat[1]に赤外線セン
  サ1の状態というようにデータを格納することになり、後の処理がしやすくなる。)
 ・センサデータのバイト数は全部読み込んで13バイトである。(最大赤外線6個、タッチセンサ6個、パワーオン信号1個
  なので。)


●ioctl(fc,int cmd_number,char *data)
	第1引数:赤外線・タッチセンサドライバを指定
	第2引数:コマンド選択値
	第3引数:センサデータの格納領域
 ・ioctl関数では第2引数の値によって選択したコマンドに対応して、タッチセンサ・赤外線センサ・パワーオン信号を
  それそれ分けてユーザ空間に書き込む。データは、readメソッドと同じくint型のデータを型変換してchar型データと
  なっている。コマンドは4つ用意している。詳しくは4-3.ioctlメソッドのコマンドで述べる。


●close(fc)
	第1引数:赤外線・タッチセンサドライバを指定
 ・引数に赤外線・タッチセンサドライバファイルを指定すると、releaseメソッドがI/Oポートを開放してcloseする。
4-3 .ioctl関数のコマンド
 ioctl関数で引数として用いるコマンド選択値と表示設定値の対応および、それによって行われる動作について以下の表に示す。各センサのセンサ番号は、ボード開発の電子回路基板設計書のソフトウェアビジビリティに対応させている。
 (ioctl関数の第2引数は以下の表のコマンド(IRS_READ等)を代入する。)

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

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

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

5-1 .ioctlコマンドの定義
 ioctl関数のコマンドを使用するには、赤外線・タッチセンサデバイスドライバと上位プログラムでコマンド番号を合わせる必要がある。(コマンド番号が一致してなければ、もちろん赤外線・タッチセンサデバイスドライバのioctlコマンドを使用することはできない。)そのため、ヘッダファイルにコマンド番号を定義したので、このファイルを上位プログラムにincludeする。以下にヘッダファイルの中身(一部分のみ)を示す。
#define IRS_TS_IOC_MAGIC 'i'
#define IRS_READ         _IOR(IRS_TS_IOC_MAGIC, 0,setcode)
#define TS_READ          _IOR(IRS_TS_IOC_MAGIC, 1,setcode)
#define PO_READ          _IOR(IRS_TS_IOC_MAGIC, 2,setcode)
#define IRS_TS_HARDRESET _IO(IRS_TS_IOC_MAGIC,  3)
#define LCD_IOC_MAXNR 3

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

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

6 .組込みの方法

6-1 .ダウンロード
 以下のファイルをダウンロードし、解凍する。
irs_ts.zip
 この圧縮ファイルの中身は
・irs_ts.c
・irs_ts_test.c
・irs_ts.h
である。

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

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

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

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

7-1 .コマンドによる試験
 以前の仕様ではcatコマンドを用いてREADメソッドの試験ができたが、現在の仕様ではコマンドでの試験は行えない。

7-2 .テストプログラムによる試験
 この試験に必要なファイルとコンパイル方法を提示する。この試験方法では、4つのメソッド全てを試験することができる。(OPENメソッド及びRELEASEメソッドは、テストプログラムがオープン・クローズできた時点で正常に動作しているということになる。)

7-2-1 . コンパイル
 6-1のダウンロードファイルの中のirs_ts_test.cをコンパイルする。
gcc -o test irs_ts_test.c

7-2-2 . 試験方法
 テストプログラムの実行は、以下のコマンドで行う。実行後は、指示に従って番号を選択していけば各メソッドの試験ができる。
 また、I/Oポートに何も接続されてない状態では、データは0XFFFF、すなわち1111111111111が表示される。
./test
  ※注:もし「Cannot Open IRS&TS-Device-Driver.」とパソコンに表示された場合の原因としては、
@irs_ts.cがinsmodされていない
Airs_tsデバイスドライバのnodeが作成されていない
Birs_tsデバイスドライバが使用中でOPENできない
  等の理由があげられる。

8 .使用例

 以下のファイルに赤外線・タッチセンサデバイスドライバの使用例を示した。
example.zip


関連文書