访问东芝加速度计的笔记本电脑设备的驾驶员
-
12-09-2019 - |
题
我有一个新的东芝卫星Pro S300笔记本电脑(运行Windows XP)哪些体育3D加速度计的硬盘的保护。我想来点击进入该数据发送过这个传感器。旧的东芝台笔记本电脑/片DLL,可以提取的加速度数据。不幸的是,S300似乎没有这DLL(DLL哈克已经记录在其他地方,例如 在这里,).
在硬盘的保护应用程序(其中有一个可爱的3D可视化的一个硬盘旋转,旋转,同步的笔记本电脑的位置和运动)似乎并不依赖于任何"非标准"的定Dll(根据DependencyWalker).它似乎是访问数据要么通过服务和/或通过一个.系统的设备司机。我认为我成功地确定相关文件,但我们不知道如何找到、名称、访问、负载(或"拆卸")有关的职能。
我怎么可以发现并使用的加速计数据?
解决方案
我已经能够得到它与此代码的工作(在东芝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算出这个,顺便说一句。
不隶属于 StackOverflow