連載
ドライバ開発とネットワークプログラミング:T-Engineプログラミング入門(4)(5/6 ページ)
ドライバの作成と複数のモジュールからなるアプリ開発およびネットワークプログラミングについて解説する
リスト2 温度センサドライバ(T-Kernelベース)thermo.c
/*
温度センサドライバ
デバイス名: "thermo"
データ番号 -100: 温度を測定して1バイトで返す(単位:℃) (リードのみ)
*/
#include <tk/tkernel.h>
#include <device/sdrvif.h> /* 単純デバイスドライバインタフェース */
/* リード関数: 読込処理 */
INT read_fn( ID devid, INT start, INT size, VP buf, SDI sdi )
{
if (start == -100 && size == 1) { /* 温度を測定して返す (単位:℃) */
*(B*)buf = in_w( 0x00215000 ) * 300 / 5120 - 300;
return 1;
} else return E_PAR; /* それ以外のデータ番号はパラメータエラー */
}
/* ライト関数: 書込処理 */
INT write_fn( ID devid, INT start, INT size, VP buf, SDI sdi )
{
return E_PAR; /* ライトは不可(パラメータエラー) */
}
/* メイン関数: ドライバ登録処理 */
ER main( INT ac, UB *av[] )
{
static SDI sdi;
static SDefDev ddev = { NULL, "thermo", 0, 0, 0, 1,
NULL, NULL, read_fn, write_fn, NULL };
if ( ac >= 0 ) { /* ロード時 */
out_w( 0x00215010, 0x0200f003 ); /* A/D変換の初期設定 */
out_w( 0x00215014, 0 );
out_w( 0x0021502c, 0x1f );
return SDefDevice( &ddev, NULL, &sdi ); /* デバイス登録 */
} else { /* アンロード時 */
return E_NOSPT; /* サポートしない */
}
}
| リスト2 温度センサドライバ(T-Kernelベース)thermo.c |
Copyright © ITmedia, Inc. All Rights Reserved.