えムナウ Blog

えムナウ の なすがまま

目次

Blog 利用状況

ニュース


follow mnow at http://twitter.com


えムナウのプログラミングのページ

INETAJ

書庫

日記カテゴリ

ギャラリ

.net で Windows7 Sensor Platform API

C# Advent Calendar jp: 2010の記事を書かなきゃいけないということで、12/06分の記事として書いておく。

12/25まで参加者だけに楽しい思いをさせるのはやめていただきたいな、出来れば皆さんも後に続いてくれればと思う。

 

Windows7 になって Sensor Platform API というものがあり、C++ から簡単に呼び出せるようになっているが、最近話題のスレートPC にも3軸加速度センサーと照度センサーが付属しているものがある。

 一部の方にはなんてタイムリーなと思っていただける話題であるが、私としては実にがっかりした結果だった。

 

MSDN には WindowsR API Code Pack for MicrosoftR .NET Framework があり、.Net Framework でも Sensor Platform API が使えるようになっている。

 

たとえば、照度センサーの場合以下のようにする。

 

参照設定に「Microsoft.WindowsAPICodePack」「Microsoft.WindowsAPICodePack.Sensors」「Microsoft.WindowsAPICodePack.Shell」を追加しておく。

 

using Microsoft.WindowsAPICodePack.Sensors;

//
初期時にパーミッションが必要
SensorList<Sensor> sl = SensorManager.GetAllSensors();
SensorManager.RequestPermission( this.Handle, true, sl );

// AmbientLightSensor
の一覧を作る
SensorList<AmbientLightSensor> alsList = SensorManager.GetSensorsByTypeId<AmbientLightSensor>( );
foreach( AmbientLightSensor sensor in alsList )
{
    //
照度データを取得するならこれだけ
    sensor.TryUpdateData( );
    float current = sensor.CurrentLuminousIntensity.Intensity;
    //
適当に表示するとか

    //
イベントが必要ならイベントを登録する
   
sensor.AutoUpdateDataReport = true;
    sensor.DataReportChanged += new DataReportChangedEventHandler( DataReportChanged );
}

//
イベント
void DataReportChanged( Sensor sender, EventArgs e )
{
    AmbientLightSensor als = sender as AmbientLightSensor;
    //
別スレッドからイベントが来るのでInvoke
    BeginInvoke( new MethodInvoker( delegate {
        float current = als.CurrentLuminousIntensity.Intensity;
        } ) );
}

今回は ONKYO さんの TW217A5 を使用した。

照度センサーはデバイスドライバーにも登録されていてコントロールパネルにもセンサーの項目に出ているのできちんと取れる。

 

ただし、3軸加速度センサーのデータはとれない。

 

// Accelerometer3D の一覧を作る
SensorList<Accelerometer3D> acList = SensorManager.GetSensorsByTypeId<Accelerometer3D>( );

このリストの数が0になるのだ。

 

3軸加速度センサーはついていてWindowsの縦横切り替えに利用されているのだが、デバイスドライバーにも登録されていないしコントロールパネルのセンサーの項目に出てこない。

 

大変残念な結果になってしまった。

 

投稿日時 : 2010年12月6日 1:12