|
9 | 9 | // Windows User-Mode Driver Framework (UMDF) |
10 | 10 |
|
11 | 11 | #include "Clients.h" |
| 12 | +#include "EcCommunication.h" |
12 | 13 |
|
13 | 14 | #include "LinearAccelerometerClient.tmh" |
14 | 15 |
|
@@ -127,11 +128,11 @@ LinearAccelerometerDevice::Initialize( |
127 | 128 | &(m_pEnumerationProperties->List[SENSOR_TYPE_GUID].Value)); |
128 | 129 |
|
129 | 130 | m_pEnumerationProperties->List[SENSOR_MANUFACTURER].Key = DEVPKEY_Sensor_Manufacturer; |
130 | | - InitPropVariantFromString(L"Manufacturer name", |
| 131 | + InitPropVariantFromString(L"Framework Computer", |
131 | 132 | &(m_pEnumerationProperties->List[SENSOR_MANUFACTURER].Value)); |
132 | 133 |
|
133 | 134 | m_pEnumerationProperties->List[SENSOR_MODEL].Key = DEVPKEY_Sensor_Model; |
134 | | - InitPropVariantFromString(L"Linear Accelerometer", |
| 135 | + InitPropVariantFromString(L"Accelerometer", |
135 | 136 | &(m_pEnumerationProperties->List[SENSOR_MODEL].Value)); |
136 | 137 |
|
137 | 138 | m_pEnumerationProperties->List[SENSOR_CONNECTION_TYPE].Key = DEVPKEY_Sensor_ConnectionType; |
@@ -387,17 +388,50 @@ LinearAccelerometerDevice::Initialize( |
387 | 388 | //------------------------------------------------------------------------------ |
388 | 389 | NTSTATUS |
389 | 390 | LinearAccelerometerDevice::GetData( |
390 | | - _In_ HANDLE Device |
| 391 | + _In_ HANDLE Handle |
391 | 392 | ) |
392 | 393 | { |
393 | 394 | BOOLEAN DataReady = FALSE; |
394 | 395 | FILETIME TimeStamp = {0}; |
395 | 396 | NTSTATUS Status = STATUS_SUCCESS; |
396 | 397 |
|
397 | | - UNREFERENCED_PARAMETER(Device); |
398 | | - |
399 | 398 | SENSOR_FunctionEnter(); |
400 | 399 |
|
| 400 | + UINT8 acc_status = 0; |
| 401 | + CrosEcReadMemU8(Handle, EC_MEMMAP_ACC_STATUS, &acc_status); |
| 402 | + TraceInformation("Status: (%02x), Present: %d, Busy: %d\n", |
| 403 | + acc_status, |
| 404 | + (acc_status & EC_MEMMAP_ACC_STATUS_PRESENCE_BIT) > 0, |
| 405 | + (acc_status & EC_MEMMAP_ACC_STATUS_BUSY_BIT) > 0); |
| 406 | + |
| 407 | + UINT8 lid_angle_bytes[2] = {0}; |
| 408 | + CrosEcReadMemU8(Handle, EC_MEMMAP_ACC_DATA + 0, &lid_angle_bytes[0]); |
| 409 | + CrosEcReadMemU8(Handle, EC_MEMMAP_ACC_DATA + 1, &lid_angle_bytes[1]); |
| 410 | + UINT16 lid_angle = lid_angle_bytes[0] + (lid_angle_bytes[1] << 8); |
| 411 | + TraceInformation("Lid Angle Status: %dDeg%s", lid_angle, lid_angle == 500 ? "(Unreliable)" : ""); |
| 412 | + |
| 413 | + UINT16 Sensor1[6] = {0}; |
| 414 | + CrosEcReadMemU8(Handle, EC_MEMMAP_ACC_DATA + 2, (UINT8*)&Sensor1[0]); |
| 415 | + CrosEcReadMemU8(Handle, EC_MEMMAP_ACC_DATA + 3, (UINT8*)&Sensor1[1]); |
| 416 | + CrosEcReadMemU8(Handle, EC_MEMMAP_ACC_DATA + 4, (UINT8*)&Sensor1[2]); |
| 417 | + CrosEcReadMemU8(Handle, EC_MEMMAP_ACC_DATA + 5, (UINT8*)&Sensor1[3]); |
| 418 | + CrosEcReadMemU8(Handle, EC_MEMMAP_ACC_DATA + 6, (UINT8*)&Sensor1[4]); |
| 419 | + CrosEcReadMemU8(Handle, EC_MEMMAP_ACC_DATA + 7, (UINT8*)&Sensor1[5]); |
| 420 | + m_CachedData.Axis.X = (float) (Sensor1[0] + (Sensor1[1] << 8)); |
| 421 | + m_CachedData.Axis.Y = (float) (Sensor1[2] + (Sensor1[3] << 8)); |
| 422 | + m_CachedData.Axis.Z = (float) (Sensor1[4] + (Sensor1[5] << 8)); |
| 423 | + #define quarter (0xFFFF/4) |
| 424 | + m_CachedData.Axis.X = -((float) (INT16) m_CachedData.Axis.X) / quarter; |
| 425 | + m_CachedData.Axis.Y = -((float) (INT16) m_CachedData.Axis.Y) / quarter; |
| 426 | + m_CachedData.Axis.Z = -((float) (INT16) m_CachedData.Axis.Z) / quarter; |
| 427 | + TraceInformation("Read Accel Value %02x %02x %02x %02x %02x %02x - x: %f, y: %f, z: %f\n", |
| 428 | + Sensor1[0], Sensor1[1], |
| 429 | + Sensor1[2], Sensor1[3], |
| 430 | + Sensor1[4], Sensor1[5], |
| 431 | + m_CachedData.Axis.X, |
| 432 | + m_CachedData.Axis.Y, |
| 433 | + m_CachedData.Axis.Z); |
| 434 | + |
401 | 435 | // new sample? |
402 | 436 | if (m_FirstSample != FALSE) |
403 | 437 | { |
|
0 commit comments