ドライバ開発とネットワークプログラミングT-Engineプログラミング入門(4)(5/6 ページ)

» 2006年09月08日 00時00分 公開
[中村 大真 パーソナルメディア株式会社,@IT MONOist]

リスト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.