2

HDD保護用の3D加速度計を備えた新しいToshiba Satellite Pro S300ラップトップ(Windows XPを実行)を持っています。このセンサーから送信されたデータを活用したいと思います。古い東芝のラップトップ/タブレットには、加速度データを抽出するためにアクセスできる DLL がありました。残念ながら、S300 にはこの DLL がないようです (DLL のハックについては、別の場所 (例:ここ) に記載されています)。

HDD Protection アプリ (ラップトップの位置と動きと同期して回転する回転 HDD のかわいい 3D ビジュアライゼーションを備えています) は、「非標準」/カスタム DLL に依存していないようです (DependencyWalker によると)。サービスまたは .sys デバイス ドライバーを介してデータにアクセスしているようです。関連するファイルを特定できたと思いますが、関連する関数を検索、名前付け、アクセス、ロード (または「逆アセンブル」) する方法がわかりません。

加速度計データを検出して使用するにはどうすればよいですか?

4

3 に答える 3

1

このコードで動作させることができました(Toshiba Satellite Pro S300L-120、Windows 7で):

void ReadAccel(float a[3])
{
    HANDLE h = CreateFile(L"\\\\.\\TVALZ", GENERIC_ALL, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    struct dummy
    {
        unsigned long magic1; /* = 0x0000FE00 */
        unsigned long magic2; /* = 0x000000A6 */
        unsigned short x, y;
        unsigned long unknown, z;
        unsigned long direction;
    } d;
    memset(&d, 0, sizeof(d));
    unsigned long retlen;
    d.magic1 = 0x0000FE00;
    d.magic2 = 0xA6;
    d.direction = 0;

    DeviceIoControl(h, 0x222880, &d, sizeof(d), &d, sizeof(d), &retlen, NULL);
    d.magic1 = 0x0000FE00;
    d.direction = 1;
    Sleep(20); /* Doesn't seem to work without the wait */
    DeviceIoControl(h, 0x222880, &d, sizeof(d), &d, sizeof(d), &retlen, NULL);
    signed short x = (d.x & 0x7FFF) * (d.x & 0x8000?-1:1);
    signed short y = (d.y & 0x7FFF) * (d.y & 0x8000?-1:1);
    signed short z = (d.z & 0x7FFF) * (d.z & 0x8000?-1:1);
    a[2] = -(float)z * 9.8 / 205; /* this is just an estimate to go to SI units */
    a[1] = (float)y * 9.8 / 205;
    a[0] = (float)x * 9.8 / 205;
    CloseHandle(h);
}

まだあまりきれいではないかもしれませんが、プレイを開始できます:)

東芝ハードウェア モニタに付属の TPCHCTL.dll を使用して、これを把握しました。

于 2013-06-15T20:23:14.463 に答える
1

記録のために、Gecko (Firefox などの一連のアプリケーション) の加速度計サポートに密接に関連する問題を報告しました。このサポートは、次のメジャー バージョンで出荷できる可能性があります。:-)

于 2009-10-12T23:32:13.243 に答える