沼津高専 電子制御工学科 | ||||||
|
||||||
改訂記録 | ||||||
---|---|---|---|---|---|---|
版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
A01 | 2001.6.30 | 太田 | 竹村 | 初版 | ||
A02 | 2001.7.3 | 太田 | 竹村 | 部分訂正 | ||
A03 | 2001.10.3 | 太田 | 竹村 | 組み込み方法と試験部分の追加 | ||
A04 | 2001.10.4 | 太田 | 竹村 | ヘッダ仕様改良 |
図にMIRS0001のソフトウェアシステム内においてのタッチセンサデバイスドライバの位置を示す。
タッチセンサデバイスドライバは、MIRS0001に搭載されるタッチセンサ、パワーオン信号のON/OFFを調べるためのLINUX用デバイスドライバである。
readメソッドでは、タッチセンサ・パワーオン信号を1度に全て読み込み、ioctlメソッドでは、メソッド内に用意した複数のコマンドを用いて、タッチセンサ・パワーオン信号をそれぞれ分けて読み込む。
図にタッチセンサデバイスドライバプログラム構成図を示す。
上位プログラムで使用する関数・引数と、その関数が行う動作を以下に示す。
●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引数:タッチセンサドライバを指定
ioctl関数で引数として用いるコマンド選択値と表示設定値の対応および、それによって行われる動作について以下の表に示す。各センサのセンサ番号は、ボード開発の電子回路基板設計書のソフトウェアビジビリティに対応させている。(ioctl関数の第2引数は以下の表のコマンド(IRS_READ等)を代入する。)
コマンド(cmd) |
コマンド値 |
最大読み込みバイト数 |
動作内容 |
TS_READ |
1 |
6バイト |
タッチセンサのデータのみユーザ空間に読み込む。先頭アドレスにはタッチセンサ0のデータが格納されている。そして、その次にはタッチセンサ1のデータ、そのまた次はタッチセンサ2のデータ、というようにセンサデータが順に格納される(最大6個)。 |
PO_READ |
2 |
1バイト |
パワーオン信号のみユーザ空間に読み込む。 |
TS_HARDRESET |
3 |
― |
ドライバ利用度数リセット用コマンド。このコマンドがあることにより、いざというときドライバをアンロードできる。 |
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'であることを意味する。(マジックナンバーは、ドライバ全体にわたって使われる番号。これは、間違ったデバイスに正しいコマンドを発行するというエラーを防ぐためにあるものである。これによって誤動作してしまうのを防ぐ。)
このタッチセンサデバイスドライバには現在、ソフト的な割り込み機能を有していない。よって、タッチセンサ・パワーオン信号の状態を調べたい場合は、上位プログラムの方で見に行く必要がある。上位プログラムの方で定期的にこれらの信号を調べるようにしておかないと、タッチセンサに反応があっても感知できないので、MIRSが次の行動に移れないということになる。
次に、割り込み信号(IRQ6)のマスク・アンマスクについて述べる。このデバイスドライバでは割り込み機能がないため、割り込み信号のソフト的なマスク・アンマスクの機能は有していない。
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-1 .コマンドによる試験
現在の仕様ではコマンドでの試験は行えない。
7-2 .テストプログラムによる試験
作成中。
関連文書 |
---|