HIDのレポート送受信
さて、それでは実際にYUREXと通信する改造をしていきましょう。元のBadge Boardは3軸加速度や近接容量性タッチセンサーなどを搭載していますが、YUREXのドライバとするには機能が多すぎますので、タッチスイッチ部分のコードだけをYUREXに使わせてもらうことにしましょう。
WpdObjectProperties.cppファイルを開きます。以下のコードの、
HRESULT WpdObjectProperties::ProcessAsynchRead( BYTE* buffer, ULONG length )
if(recv_report->device_id == 1)から始まるブロックでレポート受け取り後の操作をしています。おもに、センサーのデータフィールドに値を格納し、イベントを起こす処理です。この部分をデバイスの仕様に合わせて書き換えることになります。YUREXの場合は、こんなコードに書き換えてみました。
if(recv_report->command_id == 'C') // YUREXからゆすられたことを示すコマンド
{
pSensor = g_pSensorList.GetAt(g_pSensorList.FindIndex(SwitchArrayLeft));
hr = pSensor->SetTimeStamp();
if(SUCCEEDED(hr))
{
PROPVARIANT value;
PropVariantInit( &value );
value.vt = VT_UI4;
value.ulVal = (ULONG) recv_report->datas[0];
hr = pSensor->SetDataField(SENSOR_DATA_TYPE_BOOLEAN_SWITCH_ARRAY_STATE, &value);
PropVariantClear( &value );
}
if( SUCCEEDED(hr))
{
pSensor->RaiseDataEvent();
}
}
とりあえず揺れを検知して数字を取れるようになればOKなので、変更はこれだけです。お疲れさまでした。あとはビルドするだけです。え? 実装少なくて肩透かしを食らった感があるですって?――いやいや、これからわくわくするビルドタイムの始まりですから!