| 1 | {{{#!html |
| 2 | <div id="wikipage" class="trac-content"><p> |
| 3 | </p><div class="wiki-toc"> |
| 4 | <ol> |
| 5 | <li> |
| 6 | <a href="#AccelerometerandMagnetometer">Accelerometer and Magnetometer</a> |
| 7 | <ol> |
| 8 | <li> |
| 9 | <a href="#OSSupport">OS Support</a> |
| 10 | </li> |
| 11 | <li> |
| 12 | <a href="#AndroiduseviatheAndroidsensorHAL"><strong>Android</strong> use via the Android sensor HAL</a> |
| 13 | </li> |
| 14 | <li> |
| 15 | <a href="#Linuxinputdeviceaccess">Linux <strong>input</strong> device access</a> |
| 16 | </li> |
| 17 | <li> |
| 18 | <a href="#directi2caccess">direct <strong>i2c</strong> access</a> |
| 19 | </li> |
| 20 | </ol> |
| 21 | </li> |
| 22 | </ol> |
| 23 | </div><p> |
| 24 | </p> |
| 25 | <h1 id="AccelerometerandMagnetometer">Accelerometer and Magnetometer</h1> |
| 26 | <p> |
| 27 | Many Ventana models come standard with an Accelerometer and Magnetometer on a single <a class="ext-link" href="http://cache.freescale.com/files/sensors/doc/data_sheet/FXOS8700CQ.pdf?pspll=1"><span class="icon"></span>FXOS8700CQR1</a> IC. |
| 28 | </p> |
| 29 | <p> |
| 30 | Note that this device has a low power standby mode which it is in by default, so be sure to enable it if you want to read values from it (see examples below). Register 0x2a and 0x5b relate to this. |
| 31 | </p> |
| 32 | <p> |
| 33 | References: |
| 34 | </p> |
| 35 | <ul><li><a class="ext-link" href="http://cache.freescale.com/files/sensors/doc/data_sheet/FXOS8700CQ.pdf?pspll=1"><span class="icon"></span>FXOS8700CQR1 Datasheet</a> |
| 36 | </li></ul><h2 id="OSSupport">OS Support</h2> |
| 37 | <p> |
| 38 | The FXOS8700 used on many Ventana boards is supported in the following ways: |
| 39 | </p> |
| 40 | <table class="wiki"> |
| 41 | <tr><td> <strong><a class="wiki" href="/wiki/OpenWrt">OpenWrt</a></strong> </td><td> <strong>Yocto/OE</strong> </td><td> <strong>Android</strong> |
| 42 | </td></tr><tr><td> i2c/input (<a class="changeset" href="/changeset/671" title="ventana: add Freescale MMA8451 driver (FXOS8700) |
| 43 | |
| 44 | This driver has the ...">r671</a>) </td><td> i2c/input </td><td> i2c/input/sensor HAL |
| 45 | </td></tr></table> |
| 46 | <h2 id="AndroiduseviatheAndroidsensorHAL"><strong>Android</strong> use via the Android sensor HAL</h2> |
| 47 | <p> |
| 48 | The Android BSP will register an accelerometer and a magnetometer sensor with the OS and therefore can be used with apps conforming the the Android sensor API. |
| 49 | </p> |
| 50 | <p> |
| 51 | References: |
| 52 | </p> |
| 53 | <ul><li><a class="ext-link" href="http://www.tutorialspoint.com/android/android_sensors.htm"><span class="icon"></span>http://www.tutorialspoint.com/android/android_sensors.htm</a> |
| 54 | </li></ul><h2 id="Linuxinputdeviceaccess">Linux <strong>input</strong> device access</h2> |
| 55 | <p> |
| 56 | The <a class="ext-link" href="https://www.kernel.org/doc/Documentation/input/input.txt"><span class="icon"></span>Linux input device API</a> provides access to devices through a <tt>/dev/input/event<n></tt> interface. The FXOS8700 is supported via a linux input driver on all of the Gateworks BSP's. |
| 57 | </p> |
| 58 | <p> |
| 59 | The <tt>/sys/class/input/input<n>/name</tt> directories will show the device name responsible for the events within that directory which correspond to matching <tt>/dev/input/event<n></tt> entries. |
| 60 | </p> |
| 61 | <p> |
| 62 | Additionally there will be an api for the input device in <tt>/sys/devices/virtual/input/input<n>/</tt> that provides you access to various controllable aspects of the input device such as the polling frequency, the min/max values, the scaling mode used and the position (orientation) of the sensor on the board. The scaling mode and position will cause the values reported to the linux input subsystem to be transformed (for normalization). |
| 63 | </p> |
| 64 | <p> |
| 65 | You can use the popular evtest application to show details and events from a linux input device, or write an application that accesses the device yourself. |
| 66 | </p> |
| 67 | <p> |
| 68 | Example usage: |
| 69 | </p> |
| 70 | <div class="code"><pre>> cat /sys/devices/virtual/input/input2/name <span class="c"># show the name of the sensor |
| 71 | </span>fxos8700_m |
| 72 | > cat /sys/devices/virtual/input/input2/position <span class="c"># show the orientation of the sensor |
| 73 | </span>3 |
| 74 | > <span class="nb">echo </span>1 > /sys/devices/virtual/input/input2/enable <span class="c"># enable the sensor (take it out of standby mode) |
| 75 | </span>> evtest /dev/input/event2 <span class="c"># show info and values |
| 76 | </span>> evtest /dev/input/event2 |
| 77 | Input driver version is 1.0.1 |
| 78 | Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0 |
| 79 | Input device name: <span class="s2">"fxos8700_m"</span> |
| 80 | Supported events: |
| 81 | Event <span class="nb">type </span>0 <span class="o">(</span>Sync<span class="o">)</span> |
| 82 | Event <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span> |
| 83 | Event code 0 <span class="o">(</span>X<span class="o">)</span> |
| 84 | Value 69 |
| 85 | Min -8192 |
| 86 | Max 8191 |
| 87 | Fuzz 32 |
| 88 | Flat 32 |
| 89 | Event code 1 <span class="o">(</span>Y<span class="o">)</span> |
| 90 | Value -31 |
| 91 | Min -8192 |
| 92 | Max 8191 |
| 93 | Fuzz 32 |
| 94 | Flat 32 |
| 95 | Event code 2 <span class="o">(</span>Z<span class="o">)</span> |
| 96 | Value 698 |
| 97 | Min -8192 |
| 98 | Max 8191 |
| 99 | Fuzz 32 |
| 100 | Flat 32 |
| 101 | Testing ... <span class="o">(</span>interrupt to <span class="nb">exit</span><span class="o">)</span> |
| 102 | Event: <span class="nb">time </span>1418930877.756913, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 0 <span class="o">(</span>X<span class="o">)</span>, value 69 |
| 103 | Event: <span class="nb">time </span>1418930877.756913, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 1 <span class="o">(</span>Y<span class="o">)</span>, value -62 |
| 104 | Event: <span class="nb">time </span>1418930877.756913, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 2 <span class="o">(</span>Z<span class="o">)</span>, value 698 |
| 105 | Event: <span class="nb">time </span>1418930877.756913, -------------- Report Sync ------------ |
| 106 | Event: <span class="nb">time </span>1418930877.996939, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 1 <span class="o">(</span>Y<span class="o">)</span>, value -59 |
| 107 | Event: <span class="nb">time </span>1418930877.996939, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 2 <span class="o">(</span>Z<span class="o">)</span>, value 670 |
| 108 | Event: <span class="nb">time </span>1418930877.996939, -------------- Report Sync ------------ |
| 109 | Event: <span class="nb">time </span>1418930878.116877, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 1 <span class="o">(</span>Y<span class="o">)</span>, value -58 |
| 110 | Event: <span class="nb">time </span>1418930878.116877, -------------- Report Sync ------------ |
| 111 | Event: <span class="nb">time </span>1418930878.236933, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 1 <span class="o">(</span>Y<span class="o">)</span>, value -64 |
| 112 | Event: <span class="nb">time </span>1418930878.236933, -------------- Report Sync ------------ |
| 113 | Event: <span class="nb">time </span>1418930878.356942, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 1 <span class="o">(</span>Y<span class="o">)</span>, value -66 |
| 114 | Event: <span class="nb">time </span>1418930878.356942, -------------- Report Sync ------------ |
| 115 | Event: <span class="nb">time </span>1418930878.476883, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 2 <span class="o">(</span>Z<span class="o">)</span>, value 659 |
| 116 | Event: <span class="nb">time </span>1418930878.476883, -------------- Report Sync ------------ |
| 117 | Event: <span class="nb">time </span>1418930878.716929, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 0 <span class="o">(</span>X<span class="o">)</span>, value 91 |
| 118 | Event: <span class="nb">time </span>1418930878.716929, -------------- Report Sync ------------ |
| 119 | Event: <span class="nb">time </span>1418930879.076878, <span class="nb">type </span>3 <span class="o">(</span>Absolute<span class="o">)</span>, code 2 <span class="o">(</span>Z<span class="o">)</span>, value 652 |
| 120 | Event: <span class="nb">time </span>1418930879.076878, -------------- Report Sync ------------ |
| 121 | ^C |
| 122 | </pre></div><p> |
| 123 | References: |
| 124 | </p> |
| 125 | <ul><li><a class="ext-link" href="https://www.kernel.org/doc/Documentation/input/input.txt"><span class="icon"></span>https://www.kernel.org/doc/Documentation/input/input.txt</a> - Linux Input API |
| 126 | </li><li><a class="ext-link" href="http://wiki.openmoko.org/wiki/Accelerometer_data_retrieval"><span class="icon"></span>http://wiki.openmoko.org/wiki/Accelerometer_data_retrieval</a> - Example applications in several languages include a simple C application |
| 127 | </li></ul><h2 id="directi2caccess">direct <strong>i2c</strong> access</h2> |
| 128 | <p> |
| 129 | The FXOS8700 device is on the third (0 based) i2c bus at a slave address of 0x1e. Therefore you can access it directly without the need of a driver if necessary by knowing the register set from the datasheet. |
| 130 | </p> |
| 131 | <p> |
| 132 | Example script: |
| 133 | </p> |
| 134 | <div class="code"><pre><span class="c">#!/bin/sh |
| 135 | </span> |
| 136 | <span class="c"># set to active mode |
| 137 | </span>i2cset -f -y 2 0x1e 0x2a 1 |
| 138 | <span class="c"># enable both accelerometer and magnetometer |
| 139 | </span>i2cset -f -y 2 0x1e 0x5b 3 |
| 140 | |
| 141 | <span class="k">while</span> <span class="o">[</span> 1 <span class="o">]</span>; <span class="k">do</span> |
| 142 | <span class="c"># accelerometer vector |
| 143 | </span> <span class="nv">a_x</span><span class="o">=</span><span class="k">$((</span> <span class="k">$(</span> i2cget -f -y 2 0x1e 0x01 <span class="k">)</span> <span class="s"><< 8 | $( i2cget -f -y 2 0x1e 0x02 ) )) |
| 144 | a_y=$(( $( i2cget -f -y 2 0x1e 0x03 ) << 8</span> <span class="o">|</span> <span class="k">$(</span> i2cget -f -y 2 0x1e 0x04 <span class="k">)</span> <span class="k">))</span> |
| 145 | <span class="nv">a_z</span><span class="o">=</span><span class="k">$((</span> <span class="k">$(</span> i2cget -f -y 2 0x1e 0x05 <span class="k">)</span> <span class="s"><< 8 | $( i2cget -f -y 2 0x1e 0x06 ) )) |
| 146 | |
| 147 | # magnetometer vector |
| 148 | m_x=$(( $( i2cget -f -y 2 0x1e 0x33 ) << 8</span> <span class="o">|</span> <span class="k">$(</span> i2cget -f -y 2 0x1e 0x34 <span class="k">)</span> <span class="k">))</span> |
| 149 | <span class="nv">m_y</span><span class="o">=</span><span class="k">$((</span> <span class="k">$(</span> i2cget -f -y 2 0x1e 0x35 <span class="k">)</span> <span class="s"><< 8 | $( i2cget -f -y 2 0x1e 0x36 ) )) |
| 150 | m_z=$(( $( i2cget -f -y 2 0x1e 0x37 ) << 8</span> <span class="o">|</span> <span class="k">$(</span> i2cget -f -y 2 0x1e 0x38 <span class="k">)</span> <span class="k">))</span> |
| 151 | |
| 152 | <span class="nb">echo</span> <span class="s2">"$a_x/$a_y/$a_z $m_x/$m_y/$m_z"</span> |
| 153 | <span class="k">done</span> |
| 154 | </pre></div><p> |
| 155 | Running: |
| 156 | </p> |
| 157 | <div class="code"><pre>> ./test |
| 158 | 16312/768/1824 65476/65467/690 |
| 159 | 16240/704/2000 65469/65480/687 |
| 160 | 16280/688/1912 65498/65467/683 |
| 161 | 16304/688/1976 65482/65468/697 |
| 162 | 16288/720/1944 65463/65475/704 |
| 163 | 16312/656/1944 65477/65461/684 |
| 164 | 16312/688/2000 65477/65455/680 |
| 165 | 16240/592/1840 65486/65479/667 |
| 166 | 16336/672/1944 65483/65467/693 |
| 167 | 16336/672/1856 65469/65462/668 |
| 168 | 16352/736/1944 65491/65469/716 |
| 169 | 16272/672/1944 65489/65472/687^C |
| 170 | </pre></div |
| 171 | }}} |