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: