31.08.2013 Views

HID Sensor Usage Tables - USB.org

HID Sensor Usage Tables - USB.org

HID Sensor Usage Tables - USB.org

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

100 <strong>HID</strong> <strong>Sensor</strong> <strong>Usage</strong>s<br />

Here is an example for SENSOR_DATA_TYPE_ORIENTATION_ROTATION_MATRIX:<br />

struct _rotation_matrix {<br />

float fM11; // matrix[1][1]<br />

float fM12; // matrix[1][2]<br />

float fM13; // matrix[1][3]<br />

float fM21; // matrix[2][1]<br />

float fM22; // matrix[2][2]<br />

float fM23; // matrix[2][3]<br />

float fM31; // matrix[3][1]<br />

float fM32; // matrix[3][2]<br />

float fM33; // matrix[3][3]<br />

} RotationMatrix;<br />

FLAT_VARIANT_UNION fvu;<br />

fvu.vecVal.caubElems = (unsigned long)sizeof(RotationMatrix);<br />

struct _rotation_matrix *pRM = (struct _rotation_matrix *)fvu.vecVal.paubElems;<br />

pRM->fM11 = 1.0;<br />

pRM->fM12 = 0.0;<br />

pRM->fM13 = 0.0;<br />

.<br />

.<br />

.<br />

Here is an example for SENSOR_DATA_TYPE_ORIENTATION_QUATERNION:<br />

struct _quaternion {<br />

float fW; // real axis component<br />

float fX; // imaginary “i” axis component<br />

float fY; // imaginary “j” axis component<br />

float fZ; // imaginary “k” axis component<br />

} Quaternion;<br />

FLAT_VARIANT_UNION fvu;<br />

fvu.vecVal.caubElems = (unsigned long)sizeof(Quaternion);<br />

struct _quaternion *pQ = (struct _quaternion *)fvu.vecVal.paubElems;<br />

pQ->fW = 1.0;<br />

pQ->fX = 0.0;<br />

pQ->fY = 0.0;<br />

pQ->fZ = 0.0;<br />

.<br />

.<br />

.<br />

There are two ways to identify a Property or Data Field:<br />

1. Using simply the PROPERTYKEY field;<br />

2. Using a more expressive GUID_OR_PROPERTYKEY field.<br />

For convenience, the PROPERTYKEY and the VARIANT value can be combined together as follows:<br />

typedef struct _<strong>HID</strong>_SENSOR_PROPERTYKEY_VALUE_PAIR {<br />

PROPERTYKEY key;<br />

FLAT_VARIANT_UNION fvu;<br />

} <strong>HID</strong>_SENSOR_PROPERTYKEY_VALUE_PAIR;<br />

Or the GUID_OR_PROPERTYKEY and the VARIANT value can be combined together as follows:<br />

typedef struct _<strong>HID</strong>_SENSOR_GorPK_VALUE_PAIR {<br />

GUID_OR_PROPERTYKEY GorPK;<br />

FLAT_VARIANT_UNION fvu;<br />

} <strong>HID</strong>_SENSOR_GorPK_VALUE_PAIR;<br />

In order to disambiguate which of the data types in the FLAT_VARIANT_UNION are actually being used:<br />

The platform driver must be able to deduce the correct type “expected” for the specified<br />

PROPERTYKEY;<br />

The GUID_OR_PROPERTYKEY field has included type information that the platform driver can<br />

use to extract the data and map it to the “expected” data type for the specified PROPERTYKEY.<br />

The GUID_OR_PROPERTYKEY field is defined as follows:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!