# Architecture

Note

- To continue reading about the APIs or set up sensor information, proceed directly to [Interfaces](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-7/qsh_api_reference.html).
- Source code of the low-power application digital signal processor (aDSP), including the QSH framework, is available only to licensed users with authorized access. To upgrade your access, go to: [www.qualcomm.com/support/working-with-qualcomm](https://www.qualcomm.com/support/working-with-qualcomm).

QSH, which is synonymous with the Qualcomm® Snapdragon™ sensor core
(SSC), offers a unified event-driven framework for drivers and
algorithms. QSH supports the same set of APIs for both the
hardware-based and software-based sensors. Additionally, QSH supports
asynchronous bus transfer and is easily extendable for new or custom
driver features. QSH consists of various components that include the QSH
client APIs, sensor APIs, a core framework, pre-implemented platform
sensors, vendor-implemented sensors, and test modules. It serves
external clients and provides a simple interface to access the sensor
data.

The following table describes the terms used in the QSH framework:

Table : QSH terminology

| **Item** | **Description** |
| --- | --- |
| Sensor | <ul class="simple"><br><li><p>Produces a single type of data; for example, accelerometer, gyroscope, timer, interrupt, and rotation vector</p></li><br><li><p>Handles asynchronous data</p></li><br><li><p>Publishes mandatory and custom attributes, and manages its instances</p></li><br></ul> |
| Sensor instance | <ul class="simple"><br><li><p>Runs at a specific configuration, publishes output data events, and can be created per client request or shared among multiple requests</p></li><br><li><p>Physical sensors usually share a single instance</p></li><br></ul> |
| Sensor unique identifier (SUID) | A unique 128‑bit ID for each sensor |
| Service | A module that provides a synchronous interface for common utilities |
| Data stream | A unique connection between a client and data source |
| Request | A configuration message that a client sends to a sensor (see `sns_request.h` file) |
| Event | Asynchronous output data message that a sensor instance generates (see `sns_sensor_event.h` file) |
| Nanopb | A small code-size protocol buffer implemented in ANSI C |

The following figure shows the components of QSH architecture:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export qsh-architecture3.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="10.215in" height="7.44601in" viewbox="0 0 735.477 536.113" xml:space="preserve" color-interpolation-filters="sRGB" class="st32"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"></v:ud>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: #f7f8fa; stroke: none; stroke-width: 0.25 }
.svg-1 .st2 { fill: #ffffff; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st3 { fill: #ffffff; stroke: #13161e; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st4 { stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st5 { fill: #13161e; font-family: Arial; font-size: 1.07398em; font-weight: bold }
.svg-1 .st6 { fill: #3253dc; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.916033 }
.svg-1 .st7 { fill: #f7f8fa; font-family: Arial; font-size: 0.966591em }
.svg-1 .st8 { fill: #4a5a75; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st9 { fill: #f7f8fa; font-family: Arial; font-size: 1.23507em }
.svg-1 .st10 { fill: #39a3b5; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st11 { fill: #0b2742; font-family: Arial; font-size: 1.23507em; font-weight: bold }
.svg-1 .st12 { font-size: 1em }
.svg-1 .st13 { fill: #13161e; stroke: #13161e; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.0398275 }
.svg-1 .st14 { stroke: #13161e; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st15 { fill: #4a5a75; stroke: #13161e; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.916033 }
.svg-1 .st16 { fill: #f7f8fa; font-family: Arial; font-size: 0.96666em }
.svg-1 .st17 { fill: #3253dc; stroke: #13161e; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.916033 }
.svg-1 .st18 { fill: #feffff; font-family: Arial; font-size: 1.20767em }
.svg-1 .st19 { fill: #f7f8fa; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st20 { fill: #f7f8fa; stroke: #13161e; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st21 { stroke: #13161e; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.79655 }
.svg-1 .st22 { fill: #dee3ec; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st23 { fill: #000000; font-family: Arial; font-size: 0.833336em }
.svg-1 .st24 { fill: #13161e; font-family: Arial; font-size: 0.833336em }
.svg-1 .st25 { fill: #dee3ec; stroke: none; stroke-width: 2 }
.svg-1 .st26 { fill: #4a5a75; stroke: #c7c8c8; stroke-width: 0.25 }
.svg-1 .st27 { fill: #feffff; font-family: Arial; font-size: 1.00001em }
.svg-1 .st28 { fill: #39a3b5; stroke: #c7c8c8; stroke-width: 0.25 }
.svg-1 .st29 { fill: #3253dc; stroke: #c7c8c8; stroke-width: 0.25 }
.svg-1 .st30 { fill: #dee3ec; stroke: #c7c8c8; stroke-width: 0.25 }
.svg-1 .st31 { fill: #000000; font-family: Arial; font-size: 1.00001em }
.svg-1 .st32 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<v:userdefs>		<v:ud v:nameu="msvThemeOrder" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>Page-1</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="0" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<g id="shape120-1" v:mid="120" v:groupcontext="shape" transform="translate(112.5,0)">		<title>Sheet.120</title>		<rect x="0" y="-3.88747" width="616.5" height="540" class="st1"></rect>	</g>	<g id="shape5-3" v:mid="5" v:groupcontext="shape" transform="translate(194.761,-182.921)">		<title>Sheet.5</title>		<path d="M0 389.51 C0 373.32 12.84 360.19 28.67 360.19 L485.49 360.19 C501.36 360.19 514.15 373.32 514.15 389.51 L514.15					 506.79 C514.15 523.02 501.36 536.11 485.49 536.11 L28.67 536.11 C12.84 536.11 0 523.02 0 506.79 L0 389.51					 Z" class="st2"></path>	</g>	<g id="shape6-5" v:mid="6" v:groupcontext="shape" transform="translate(194.761,-182.921)">		<title>Sheet.6</title>		<path d="M0 389.51 C0 373.32 12.84 360.19 28.67 360.19 L485.49 360.19 C501.36 360.19 514.15 373.32 514.15 389.51 L514.15					 506.79 C514.15 523.02 501.36 536.11 485.49 536.11 L28.67 536.11 C12.84 536.11 0 523.02 0 506.79 L0 389.51					 Z" class="st3"></path>	</g>	<g id="shape7-7" v:mid="7" v:groupcontext="shape" transform="translate(210.586,-333.37)">		<title>Sheet.7</title>		<desc>Qualcomm Sensing Hub</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="82.2695" cy="528.378" width="164.54" height="15.4689"></v:textrect>		<path d="M164.54 520.64 L0 520.64 L0 536.11 L164.54 536.11 L164.54 520.64" class="st4"></path>		<text x="7.8" y="532.24" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm Sensing Hub</text>		</g>	<g id="shape8-11" v:mid="8" v:groupcontext="shape" transform="translate(507.916,-296.333)">		<title>Sheet.8</title>		<path d="M0 513.04 C0 510.5 2.05 508.4 4.53 508.4 L158.7 508.4 C161.19 508.4 163.19 510.5 163.19 513.04 L163.19 531.52					 C163.19 534.06 161.19 536.11 158.7 536.11 L4.53 536.11 C2.05 536.11 0 534.06 0 531.52 L0 513.04 Z" class="st2"></path>	</g>	<g id="shape9-13" v:mid="9" v:groupcontext="shape" transform="translate(507.916,-296.333)">		<title>Sheet.9</title>		<path d="M0 513.04 C0 510.5 2.05 508.4 4.53 508.4 L158.7 508.4 C161.19 508.4 163.19 510.5 163.19 513.04 L163.19 531.52					 C163.19 534.06 161.19 536.11 158.7 536.11 L4.53 536.11 C2.05 536.11 0 534.06 0 531.52 L0 513.04 Z" class="st6"></path>	</g>	<g id="shape10-15" v:mid="10" v:groupcontext="shape" transform="translate(551.062,-301.883)">		<title>Sheet.10</title>		<desc>Client Manager</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="46.9981" cy="529.151" width="94" height="13.9225"></v:textrect>		<path d="M94 522.19 L0 522.19 L0 536.11 L94 536.11 L94 522.19" class="st4"></path>		<text x="7.67" y="532.63" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Client Manager</text>		</g>	<g id="shape12-19" v:mid="12" v:groupcontext="shape" transform="translate(194.761,-473.714)">		<title>Sheet.12</title>		<path d="M0 510.9 C-0 508.12 2.24 505.83 4.96 505.83 L509.23 505.83 C511.95 505.83 514.15 508.12 514.15 510.9 L514.15					 531.08 C514.15 533.86 511.95 536.11 509.23 536.11 L4.96 536.11 C2.24 536.11 0 533.86 0 531.08 L0 510.9 Z" class="st8"></path>	</g>	<g id="shape13-21" v:mid="13" v:groupcontext="shape" transform="translate(393.984,-477.489)">		<title>Sheet.13</title>		<desc>Client Application</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="68.2578" cy="527.218" width="136.52" height="17.7886"></v:textrect>		<path d="M136.52 518.32 L0 518.32 L0 536.11 L136.52 536.11 L136.52 518.32" class="st4"></path>		<text x="11" y="531.66" class="st9" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Client Application</text>		</g>	<g id="shape15-25" v:mid="15" v:groupcontext="shape" transform="translate(194.761,-419.863)">		<title>Sheet.15</title>		<path d="M0 510.9 C-0 508.12 2.24 505.83 4.96 505.83 L509.23 505.83 C511.95 505.83 514.15 508.12 514.15 510.9 L514.15					 531.08 C514.15 533.86 511.95 536.11 509.23 536.11 L4.96 536.11 C2.24 536.11 0 533.86 0 531.08 L0 510.9 Z" class="st10"></path>	</g>	<g id="shape16-27" v:mid="16" v:groupcontext="shape" transform="translate(400.285,-423.211)">		<title>Sheet.16</title>		<desc>QSH Client API</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="60.9459" cy="527.218" width="121.9" height="17.7886"></v:textrect>		<path d="M121.89 518.32 L0 518.32 L0 536.11 L121.89 536.11 L121.89 518.32" class="st4"></path>		<text x="9.88" y="531.66" class="st9" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>QSH Client API</text>		</g>	<g id="shape17-31" v:mid="17" v:groupcontext="shape" transform="translate(-352.254,135.613) rotate(-90)">		<title>Sheet.17</title>		<desc>Application processor</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="70.2384" cy="508.016" width="140.48" height="56.1935"></v:textrect>		<path d="M140.48 479.92 L0 479.92 L0 536.11 L140.48 536.11 L140.48 479.92" class="st4"></path>		<text x="29.89" y="503.57" class="st11" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Application <v:newlinechar></v:newlinechar><tspan x="34.41" dy="1.2em" class="st12">processor</tspan></text>		</g>	<g id="shape18-36" v:mid="18" v:groupcontext="shape" transform="translate(-369.824,376.25) rotate(-90)">		<title>Sheet.18</title>		<desc>Low power processor</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="83.1375" cy="527.218" width="166.28" height="17.7886"></v:textrect>		<path d="M166.28 518.32 L0 518.32 L0 536.11 L166.28 536.11 L166.28 518.32" class="st4"></path>		<text x="6.55" y="531.66" class="st11" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Low power processor</text>		</g>	<g id="shape19-40" v:mid="19" v:groupcontext="shape" transform="translate(127.665,-394.671)">		<title>Sheet.19</title>		<path d="M0 534.78 L8.86 534.78 L8.86 536.11 L0 536.11 L0 534.78 L0 534.78 ZM12.18 534.78 L21.05 534.78 L21.05 536.11					 L12.18 536.11 L12.18 534.78 L12.18 534.78 ZM24.37 534.78 L33.2 534.78 L33.2 536.11 L24.37 536.11 L24.37					 534.78 L24.37 534.78 ZM36.52 534.78 L45.38 534.78 L45.38 536.11 L36.52 536.11 L36.52 534.78 L36.52 534.78					 ZM48.7 534.78 L57.57 534.78 L57.57 536.11 L48.7 536.11 L48.7 534.78 L48.7 534.78 ZM60.89 534.78 L69.72 534.78					 L69.72 536.11 L60.89 536.11 L60.89 534.78 L60.89 534.78 ZM73.04 534.78 L81.9 534.78 L81.9 536.11 L73.04					 536.11 L73.04 534.78 L73.04 534.78 ZM85.22 534.78 L94.09 534.78 L94.09 536.11 L85.22 536.11 L85.22 534.78					 L85.22 534.78 ZM97.41 534.78 L106.24 534.78 L106.24 536.11 L97.41 536.11 L97.41 534.78 L97.41 534.78 ZM109.56					 534.78 L118.42 534.78 L118.42 536.11 L109.56 536.11 L109.56 534.78 L109.56 534.78 ZM121.74 534.78 L130.61					 534.78 L130.61 536.11 L121.74 536.11 L121.74 534.78 L121.74 534.78 ZM133.93 534.78 L142.76 534.78 L142.76					 536.11 L133.93 536.11 L133.93 534.78 L133.93 534.78 ZM146.08 534.78 L154.94 534.78 L154.94 536.11 L146.08					 536.11 L146.08 534.78 L146.08 534.78 ZM158.26 534.78 L167.13 534.78 L167.13 536.11 L158.26 536.11 L158.26					 534.78 L158.26 534.78 ZM170.45 534.78 L179.28 534.78 L179.28 536.11 L170.45 536.11 L170.45 534.78 L170.45					 534.78 ZM182.6 534.78 L191.46 534.78 L191.46 536.11 L182.6 536.11 L182.6 534.78 L182.6 534.78 ZM194.78 534.78					 L203.65 534.78 L203.65 536.11 L194.78 536.11 L194.78 534.78 L194.78 534.78 ZM206.97 534.78 L215.8 534.78					 L215.8 536.11 L206.97 536.11 L206.97 534.78 L206.97 534.78 ZM219.12 534.78 L227.98 534.78 L227.98 536.11					 L219.12 536.11 L219.12 534.78 L219.12 534.78 ZM231.3 534.78 L240.17 534.78 L240.17 536.11 L231.3 536.11					 L231.3 534.78 L231.3 534.78 ZM243.49 534.78 L252.32 534.78 L252.32 536.11 L243.49 536.11 L243.49 534.78					 L243.49 534.78 ZM255.64 534.78 L264.5 534.78 L264.5 536.11 L255.64 536.11 L255.64 534.78 L255.64 534.78					 ZM267.82 534.78 L276.69 534.78 L276.69 536.11 L267.82 536.11 L267.82 534.78 L267.82 534.78 ZM280.01 534.78					 L288.84 534.78 L288.84 536.11 L280.01 536.11 L280.01 534.78 L280.01 534.78 ZM292.16 534.78 L301.02 534.78					 L301.02 536.11 L292.16 536.11 L292.16 534.78 L292.16 534.78 ZM304.34 534.78 L313.21 534.78 L313.21 536.11					 L304.34 536.11 L304.34 534.78 L304.34 534.78 ZM316.53 534.78 L325.36 534.78 L325.36 536.11 L316.53 536.11					 L316.53 534.78 L316.53 534.78 ZM328.68 534.78 L337.54 534.78 L337.54 536.11 L328.68 536.11 L328.68 534.78					 L328.68 534.78 ZM340.86 534.78 L349.73 534.78 L349.73 536.11 L340.86 536.11 L340.86 534.78 L340.86 534.78					 ZM353.05 534.78 L361.88 534.78 L361.88 536.11 L353.05 536.11 L353.05 534.78 L353.05 534.78 ZM365.2 534.78					 L374.06 534.78 L374.06 536.11 L365.2 536.11 L365.2 534.78 L365.2 534.78 ZM377.38 534.78 L386.25 534.78 L386.25					 536.11 L377.38 536.11 L377.38 534.78 L377.38 534.78 ZM389.57 534.78 L398.4 534.78 L398.4 536.11 L389.57					 536.11 L389.57 534.78 L389.57 534.78 ZM401.72 534.78 L410.58 534.78 L410.58 536.11 L401.72 536.11 L401.72					 534.78 L401.72 534.78 ZM413.9 534.78 L422.77 534.78 L422.77 536.11 L413.9 536.11 L413.9 534.78 L413.9 534.78					 ZM426.09 534.78 L434.92 534.78 L434.92 536.11 L426.09 536.11 L426.09 534.78 L426.09 534.78 ZM438.24 534.78					 L447.1 534.78 L447.1 536.11 L438.24 536.11 L438.24 534.78 L438.24 534.78 ZM450.42 534.78 L459.29 534.78					 L459.29 536.11 L450.42 536.11 L450.42 534.78 L450.42 534.78 ZM462.61 534.78 L471.44 534.78 L471.44 536.11					 L462.61 536.11 L462.61 534.78 L462.61 534.78 ZM474.76 534.78 L483.62 534.78 L483.62 536.11 L474.76 536.11					 L474.76 534.78 L474.76 534.78 ZM486.94 534.78 L495.8 534.78 L495.8 536.11 L486.94 536.11 L486.94 534.78					 L486.94 534.78 ZM499.12 534.78 L507.96 534.78 L507.96 536.11 L499.12 536.11 L499.12 534.78 L499.12 534.78					 ZM511.28 534.78 L520.14 534.78 L520.14 536.11 L511.28 536.11 L511.28 534.78 L511.28 534.78 ZM523.46 534.78					 L532.32 534.78 L532.32 536.11 L523.46 536.11 L523.46 534.78 L523.46 534.78 ZM535.64 534.78 L544.48 534.78					 L544.48 536.11 L535.64 536.11 L535.64 534.78 L535.64 534.78 ZM547.8 534.78 L556.66 534.78 L556.66 536.11					 L547.8 536.11 L547.8 534.78 L547.8 534.78 ZM559.98 534.78 L568.84 534.78 L568.84 536.11 L559.98 536.11 L559.98					 534.78 L559.98 534.78 ZM572.16 534.78 L581 534.78 L581 536.11 L572.16 536.11 L572.16 534.78 L572.16 534.78					 ZM584.32 534.78 L588.93 534.78 L588.93 536.11 L584.32 536.11 L584.32 534.78 L584.32 534.78 Z" class="st13"></path>	</g>	<g id="shape21-42" v:mid="21" v:groupcontext="shape" transform="translate(581.007,-447.294)">		<title>Sheet.21</title>		<path d="M0 519.04 L8.51 510.34 L17.01 519.04 L12.76 519.04 L12.76 527.41 L17.01 527.41 L8.51 536.11 L0 527.41 L4.25					 527.41 L4.25 519.04 L0 519.04" class="st14"></path>	</g>	<g id="shape22-45" v:mid="22" v:groupcontext="shape" transform="translate(236.977,-213.851)">		<title>Sheet.22</title>		<path d="M0 502.28 C0 498.58 2.99 495.52 6.62 495.52 L86.64 495.52 C90.3 495.52 93.25 498.58 93.25 502.28 L93.25 529.35					 C93.25 533.09 90.3 536.11 86.64 536.11 L6.62 536.11 C2.99 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st2"></path>	</g>	<g id="shape23-47" v:mid="23" v:groupcontext="shape" transform="translate(225.872,-213.851)">		<title>Sheet.23</title>		<path d="M0 502.28 C-0 498.58 3.35 495.52 7.4 495.52 L96.95 495.52 C101.05 495.52 104.36 498.58 104.36 502.28 L104.36					 529.35 C104.36 533.09 101.05 536.11 96.95 536.11 L7.4 536.11 C3.35 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st15"></path>	</g>	<g id="shape24-49" v:mid="24" v:groupcontext="shape" transform="translate(232.566,-208.052)">		<title>Sheet.24</title>		<path d="M0 502.28 C0 498.58 2.99 495.52 6.62 495.52 L86.01 495.52 C89.67 495.52 92.62 498.58 92.62 502.28 L92.62 529.35					 C92.62 533.09 89.67 536.11 86.01 536.11 L6.62 536.11 C2.99 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st2"></path>	</g>	<g id="shape25-51" v:mid="25" v:groupcontext="shape" transform="translate(222.673,-208.052)">		<title>Sheet.25</title>		<path d="M0 502.28 C-0 498.58 3.35 495.52 7.4 495.52 L96.25 495.52 C100.35 495.52 103.65 498.58 103.65 502.28 L103.65					 529.35 C103.65 533.09 100.35 536.11 96.25 536.11 L7.4 536.11 C3.35 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st15"></path>	</g>	<g id="shape26-53" v:mid="26" v:groupcontext="shape" transform="translate(228.156,-200.964)">		<title>Sheet.26</title>		<path d="M0 502.28 C0 498.58 2.99 495.52 6.62 495.52 L86.64 495.52 C90.3 495.52 93.25 498.58 93.25 502.28 L93.25 529.35					 C93.25 533.09 90.3 536.11 86.64 536.11 L6.62 536.11 C2.99 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st2"></path>	</g>	<g id="shape27-55" v:mid="27" v:groupcontext="shape" transform="translate(217.821,-200.964)">		<title>Sheet.27</title>		<path d="M0 502.28 C-0 498.58 3.35 495.52 7.4 495.52 L96.95 495.52 C101.05 495.52 104.36 498.58 104.36 502.28 L104.36					 529.35 C104.36 533.09 101.05 536.11 96.95 536.11 L7.4 536.11 C3.35 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st15"></path>	</g>	<g id="shape28-57" v:mid="28" v:groupcontext="shape" transform="translate(225,-223.053)">		<title>Sheet.28</title>		<desc>Hardware Based</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="44.2828" cy="530.311" width="88.57" height="11.6025"></v:textrect>		<path d="M88.57 524.51 L0 524.51 L0 536.11 L88.57 536.11 L88.57 524.51" class="st4"></path>		<text x="1.08" y="533.79" class="st16" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Hardware Based  </text>		</g>	<g id="shape29-61" v:mid="29" v:groupcontext="shape" transform="translate(228.066,-208.252)">		<title>Sheet.29</title>		<desc>Sensor Drivers</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="41.0083" cy="530.311" width="82.02" height="11.6025"></v:textrect>		<path d="M82.02 524.51 L0 524.51 L0 536.11 L82.02 536.11 L82.02 524.51" class="st4"></path>		<text x="2.65" y="533.79" class="st16" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Sensor Drivers</text>		</g>	<g id="shape30-65" v:mid="30" v:groupcontext="shape" transform="translate(236.977,-284.734)">		<title>Sheet.30</title>		<path d="M0 502.28 C0 498.58 2.99 495.52 6.62 495.52 L86.64 495.52 C90.3 495.52 93.25 498.58 93.25 502.28 L93.25 529.35					 C93.25 533.09 90.3 536.11 86.64 536.11 L6.62 536.11 C2.99 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st2"></path>	</g>	<g id="shape31-67" v:mid="31" v:groupcontext="shape" transform="translate(225.872,-284.734)">		<title>Sheet.31</title>		<path d="M0 502.28 C-0 498.58 3.35 495.52 7.4 495.52 L96.95 495.52 C101.05 495.52 104.36 498.58 104.36 502.28 L104.36					 529.35 C104.36 533.09 101.05 536.11 96.95 536.11 L7.4 536.11 C3.35 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st17"></path>	</g>	<g id="shape32-69" v:mid="32" v:groupcontext="shape" transform="translate(232.566,-278.935)">		<title>Sheet.32</title>		<path d="M0 502.28 C0 498.58 2.99 495.52 6.62 495.52 L86.01 495.52 C89.67 495.52 92.62 498.58 92.62 502.28 L92.62 529.35					 C92.62 533.09 89.67 536.11 86.01 536.11 L6.62 536.11 C2.99 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st2"></path>	</g>	<g id="shape33-71" v:mid="33" v:groupcontext="shape" transform="translate(222.673,-278.935)">		<title>Sheet.33</title>		<path d="M0 502.28 C-0 498.58 3.35 495.52 7.4 495.52 L96.25 495.52 C100.35 495.52 103.65 498.58 103.65 502.28 L103.65					 529.35 C103.65 533.09 100.35 536.11 96.25 536.11 L7.4 536.11 C3.35 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st17"></path>	</g>	<g id="shape34-73" v:mid="34" v:groupcontext="shape" transform="translate(228.156,-272.491)">		<title>Sheet.34</title>		<path d="M0 502.28 C0 498.58 2.99 495.52 6.62 495.52 L86.64 495.52 C90.3 495.52 93.25 498.58 93.25 502.28 L93.25 529.35					 C93.25 533.09 90.3 536.11 86.64 536.11 L6.62 536.11 C2.99 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st2"></path>	</g>	<g id="shape35-75" v:mid="35" v:groupcontext="shape" transform="translate(217.821,-272.491)">		<title>Sheet.35</title>		<path d="M0 502.28 C-0 498.58 3.35 495.52 7.4 495.52 L96.95 495.52 C101.05 495.52 104.36 498.58 104.36 502.28 L104.36					 529.35 C104.36 533.09 101.05 536.11 96.95 536.11 L7.4 536.11 C3.35 536.11 0 533.09 0 529.35 L0 502.28 Z" class="st17"></path>	</g>	<g id="shape36-77" v:mid="36" v:groupcontext="shape" transform="translate(227.877,-292.451)">		<title>Sheet.36</title>		<desc>Software Based</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="42.1225" cy="530.311" width="84.25" height="11.6025"></v:textrect>		<path d="M84.25 524.51 L0 524.51 L0 536.11 L84.25 536.11 L84.25 524.51" class="st4"></path>		<text x="1.18" y="533.79" class="st16" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Software Based  </text>		</g>	<g id="shape37-81" v:mid="37" v:groupcontext="shape" transform="translate(243.63,-280.212)">		<title>Sheet.37</title>		<desc>Sensors</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="21.867" cy="530.311" width="43.74" height="11.6025"></v:textrect>		<path d="M43.73 524.51 L0 524.51 L0 536.11 L43.73 536.11 L43.73 524.51" class="st4"></path>		<text x="0.59" y="533.79" class="st16" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Sensors</text>		</g>	<g id="shape38-85" v:mid="38" v:groupcontext="shape" transform="translate(194.761,-111.393)">		<title>Sheet.38</title>		<path d="M0 487.26 C0 481.86 4.29 477.47 9.57 477.47 L504.62 477.47 C509.9 477.47 514.15 481.86 514.15 487.26 L514.15					 526.37 C514.15 531.76 509.9 536.11 504.62 536.11 L9.57 536.11 C4.29 536.11 0 531.76 0 526.37 L0 487.26 Z" class="st2"></path>	</g>	<g id="shape39-87" v:mid="39" v:groupcontext="shape" transform="translate(194.761,-111.393)">		<title>Sheet.39</title>		<path d="M0 487.26 C0 481.86 4.29 477.47 9.57 477.47 L504.62 477.47 C509.9 477.47 514.15 481.86 514.15 487.26 L514.15					 526.37 C514.15 531.76 509.9 536.11 504.62 536.11 L9.57 536.11 C4.29 536.11 0 531.76 0 526.37 L0 487.26 Z" class="st3"></path>	</g>	<g id="shape40-89" v:mid="40" v:groupcontext="shape" transform="translate(204.99,-150.509)">		<title>Sheet.40</title>		<desc>Serial Buses</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="43.6145" cy="528.378" width="87.23" height="15.4689"></v:textrect>		<path d="M87.23 520.64 L0 520.64 L0 536.11 L87.23 536.11 L87.23 520.64" class="st4"></path>		<text x="4.93" y="532.24" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Serial Buses</text>		</g>	<g id="shape41-93" v:mid="41" v:groupcontext="shape" transform="translate(507.916,-249.937)">		<title>Sheet.41</title>		<path d="M0 510.9 C0 508.12 2.24 505.83 4.96 505.83 L67.54 505.83 C70.26 505.83 72.46 508.12 72.46 510.9 L72.46 531.08					 C72.46 533.86 70.26 536.11 67.54 536.11 L4.96 536.11 C2.24 536.11 0 533.86 0 531.08 L0 510.9 Z" class="st2"></path>	</g>	<g id="shape42-95" v:mid="42" v:groupcontext="shape" transform="translate(507.916,-249.937)">		<title>Sheet.42</title>		<path d="M0 510.9 C0 508.12 2.24 505.83 4.96 505.83 L67.54 505.83 C70.26 505.83 72.46 508.12 72.46 510.9 L72.46 531.08					 C72.46 533.86 70.26 536.11 67.54 536.11 L4.96 536.11 C2.24 536.11 0 533.86 0 531.08 L0 510.9 Z" class="st6"></path>	</g>	<g id="shape43-97" v:mid="43" v:groupcontext="shape" transform="translate(519.146,-263.392)">		<title>Sheet.43</title>		<desc>Platform</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="28.4159" cy="529.151" width="56.84" height="13.9225"></v:textrect>		<path d="M56.83 522.19 L0 522.19 L0 536.11 L56.83 536.11 L56.83 522.19" class="st4"></path>		<text x="6.82" y="532.63" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Platform  </text>		</g>	<g id="shape44-101" v:mid="44" v:groupcontext="shape" transform="translate(523.456,-250.504)">		<title>Sheet.44</title>		<desc>Sensors</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="26.2406" cy="529.151" width="52.49" height="13.9225"></v:textrect>		<path d="M52.48 522.19 L0 522.19 L0 536.11 L52.48 536.11 L52.48 522.19" class="st4"></path>		<text x="4.96" y="532.63" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Sensors</text>		</g>	<g id="shape45-105" v:mid="45" v:groupcontext="shape" transform="translate(553.283,-202.897)">		<title>Sheet.45</title>		<path d="M0 510.9 C0 508.12 2.24 505.83 4.96 505.83 L67.54 505.83 C70.26 505.83 72.46 508.12 72.46 510.9 L72.46 531.08					 C72.46 533.86 70.26 536.11 67.54 536.11 L4.96 536.11 C2.24 536.11 0 533.86 0 531.08 L0 510.9 Z" class="st2"></path>	</g>	<g id="shape46-107" v:mid="46" v:groupcontext="shape" transform="translate(553.283,-201.864)">		<title>Sheet.46</title>		<path d="M0 510.36 C0 507.53 2.24 505.18 4.96 505.18 L67.54 505.18 C70.26 505.18 72.46 507.53 72.46 510.36 L72.46 530.97					 C72.46 533.81 70.26 536.11 67.54 536.11 L4.96 536.11 C2.24 536.11 0 533.81 0 530.97 L0 510.36 Z" class="st6"></path>	</g>	<g id="shape47-109" v:mid="47" v:groupcontext="shape" transform="translate(566.499,-216.466)">		<title>Sheet.47</title>		<desc>Service</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="25.8238" cy="529.151" width="51.65" height="13.9225"></v:textrect>		<path d="M51.65 522.19 L0 522.19 L0 536.11 L51.65 536.11 L51.65 522.19" class="st4"></path>		<text x="6.49" y="532.63" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Service  </text>		</g>	<g id="shape48-113" v:mid="48" v:groupcontext="shape" transform="translate(567.562,-203.579)">		<title>Sheet.48</title>		<desc>Manager</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="28.0968" cy="529.151" width="56.2" height="13.9225"></v:textrect>		<path d="M56.19 522.19 L0 522.19 L0 536.11 L56.19 536.11 L56.19 522.19" class="st4"></path>		<text x="5.21" y="532.63" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Manager</text>		</g>	<g id="shape49-117" v:mid="49" v:groupcontext="shape" transform="translate(204.823,-505.726)">		<title>Sheet.49</title>		<desc>Linux OS</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="37.3026" cy="527.218" width="74.61" height="17.7886"></v:textrect>		<path d="M74.61 518.32 L0 518.32 L0 536.11 L74.61 536.11 L74.61 518.32" class="st4"></path>		<text x="4.78" y="531.66" class="st11" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Linux OS</text>		</g>	<g id="shape50-121" v:mid="50" v:groupcontext="shape" transform="translate(204.823,-364.098)">		<title>Sheet.50</title>		<desc>QuRT</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="25.0146" cy="527.218" width="50.03" height="17.7886"></v:textrect>		<path d="M50.03 518.32 L0 518.32 L0 536.11 L50.03 536.11 L50.03 518.32" class="st4"></path>		<text x="4.85" y="531.66" class="st11" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>QuRT</text>		</g>	<g id="shape51-125" v:mid="51" v:groupcontext="shape" transform="translate(248.3,-364.098)">		<title>Sheet.51</title>		<desc>OS</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="14.591" cy="527.218" width="29.19" height="17.7886"></v:textrect>		<path d="M29.18 518.32 L0 518.32 L0 536.11 L29.18 536.11 L29.18 518.32" class="st4"></path>		<text x="3.88" y="531.66" class="st11" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>OS</text>		</g>	<g id="shape52-129" v:mid="52" v:groupcontext="shape" transform="translate(187.83,-401.423)">		<title>Sheet.52</title>		<path d="M0 406.92 L528.65 406.92 L528.65 536.11 L0 536.11 L0 406.92" class="st14"></path>	</g>	<g id="shape53-132" v:mid="53" v:groupcontext="shape" transform="translate(598.65,-249.937)">		<title>Sheet.53</title>		<path d="M0 510.9 C0 508.12 2.24 505.83 4.96 505.83 L67.54 505.83 C70.26 505.83 72.46 508.12 72.46 510.9 L72.46 531.08					 C72.46 533.86 70.26 536.11 67.54 536.11 L4.96 536.11 C2.24 536.11 0 533.86 0 531.08 L0 510.9 Z" class="st2"></path>	</g>	<g id="shape54-134" v:mid="54" v:groupcontext="shape" transform="translate(598.65,-249.937)">		<title>Sheet.54</title>		<path d="M0 510.9 C0 508.12 2.24 505.83 4.96 505.83 L67.54 505.83 C70.26 505.83 72.46 508.12 72.46 510.9 L72.46 531.08					 C72.46 533.86 70.26 536.11 67.54 536.11 L4.96 536.11 C2.24 536.11 0 533.86 0 531.08 L0 510.9 Z" class="st6"></path>	</g>	<g id="shape55-136" v:mid="55" v:groupcontext="shape" transform="translate(616.712,-256.945)">		<title>Sheet.55</title>		<desc>Utilities</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="23.4237" cy="529.151" width="46.85" height="13.9225"></v:textrect>		<path d="M46.85 522.19 L0 522.19 L0 536.11 L46.85 536.11 L46.85 522.19" class="st4"></path>		<text x="4.73" y="532.63" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Utilities</text>		</g>	<g id="shape56-140" v:mid="56" v:groupcontext="shape" transform="translate(403.951,-193.231)">		<title>Sheet.56</title>		<path d="M3.78 536.11 C1.69 536.11 0 534.38 0 532.25 L0 399.5 C0 397.37 1.69 395.64 3.78 395.64 L18.9 395.64 C20.99 395.64					 22.68 397.37 22.68 399.5 L22.68 532.25 C22.68 534.38 20.99 536.11 18.9 536.11 L3.78 536.11 Z" class="st6"></path>	</g>	<g id="shape57-142" v:mid="57" v:groupcontext="shape" transform="translate(-111.707,334.249) rotate(-90)">		<title>Sheet.57</title>		<desc>QSH Sensor API</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="64.5947" cy="527.415" width="129.19" height="17.3941"></v:textrect>		<path d="M129.19 536.11 L129.19 518.72 L0 518.72 L0 536.11 L129.19 536.11" class="st4"></path>		<text x="10.23" y="531.76" class="st18" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>QSH Sensor API</text>		</g>	<g id="shape58-146" v:mid="58" v:groupcontext="shape" transform="translate(499.725,-193.231)">		<title>Sheet.58</title>		<path d="M0 395.64 L179.58 395.64 L179.58 536.11 L0 536.11 L0 395.64" class="st14"></path>	</g>	<g id="shape59-149" v:mid="59" v:groupcontext="shape" transform="translate(581.007,-322.753)">		<title>Sheet.59</title>		<path d="M0 446.28 L8.51 435.87 L17.01 446.28 L12.76 446.28 L12.76 525.7 L17.01 525.7 L8.51 536.11 L0 525.7 L4.25 525.7					 L4.25 446.28 L0 446.28 Z" class="st19"></path>	</g>	<g id="shape61-151" v:mid="61" v:groupcontext="shape" transform="translate(330.861,-289.889)">		<title>Sheet.61</title>		<path d="M63.64 518.07 L72.46 527.09 L63.64 536.11 L63.64 531.6 L8.82 531.6 L8.82 536.11 L0 527.09 L8.82 518.07 L8.82					 522.58 L63.64 522.58 L63.64 518.07 Z" class="st2"></path>	</g>	<g id="shape62-153" v:mid="62" v:groupcontext="shape" transform="translate(330.861,-289.889)">		<title>Sheet.62</title>		<path d="M63.64 518.07 L72.46 527.09 L63.64 536.11 L63.64 531.6 L8.82 531.6 L8.82 536.11 L0 527.09 L8.82 518.07 L8.82					 522.58 L63.64 522.58 L63.64 518.07" class="st14"></path>	</g>	<g id="shape63-156" v:mid="63" v:groupcontext="shape" transform="translate(427.265,-254.448)">		<title>Sheet.63</title>		<path d="M63.64 518.07 L72.46 527.09 L63.64 536.11 L63.64 531.6 L8.82 531.6 L8.82 536.11 L0 527.09 L8.82 518.07 L8.82					 522.58 L63.64 522.58 L63.64 518.07 Z" class="st2"></path>	</g>	<g id="shape64-158" v:mid="64" v:groupcontext="shape" transform="translate(427.265,-254.448)">		<title>Sheet.64</title>		<path d="M63.64 518.07 L72.46 527.09 L63.64 536.11 L63.64 531.6 L8.82 531.6 L8.82 536.11 L0 527.09 L8.82 518.07 L8.82					 522.58 L63.64 522.58 L63.64 518.07" class="st14"></path>	</g>	<g id="shape65-161" v:mid="65" v:groupcontext="shape" transform="translate(270.372,-170.677)">		<title>Sheet.65</title>		<path d="M0 514.2 L8.82 505.18 L17.64 514.2 L13.23 514.2 L13.23 527.09 L17.64 527.09 L8.82 536.11 L0 527.09 L4.41 527.09					 L4.41 514.2 L0 514.2 Z" class="st20"></path>	</g>	<g id="shape66-163" v:mid="66" v:groupcontext="shape" transform="translate(270.372,-170.677)">		<title>Sheet.66</title>		<path d="M0 514.2 L8.82 505.18 L17.64 514.2 L13.23 514.2 L13.23 527.09 L17.64 527.09 L8.82 536.11 L0 527.09 L4.41 527.09					 L4.41 514.2 L0 514.2" class="st21"></path>	</g>	<g id="shape67-166" v:mid="67" v:groupcontext="shape" transform="translate(330.861,-219.006)">		<title>Sheet.67</title>		<path d="M63.95 518.71 L72.46 527.41 L63.95 536.11 L63.95 531.76 L8.51 531.76 L8.51 536.11 L0 527.41 L8.51 518.71 L8.51					 523.06 L63.95 523.06 L63.95 518.71 Z" class="st2"></path>	</g>	<g id="shape68-168" v:mid="68" v:groupcontext="shape" transform="translate(330.861,-219.006)">		<title>Sheet.68</title>		<path d="M63.95 518.71 L72.46 527.41 L63.95 536.11 L63.95 531.76 L8.51 531.76 L8.51 536.11 L0 527.41 L8.51 518.71 L8.51					 523.06 L63.95 523.06 L63.95 518.71" class="st14"></path>	</g>	<g id="shape69-171" v:mid="69" v:groupcontext="shape" transform="translate(187.83,-36)">		<title>Sheet.69</title>		<path d="M0 472.96 L528.65 472.96 L528.65 536.11 L0 536.11 L0 472.96" class="st14"></path>	</g>	<g id="shape70-174" v:mid="70" v:groupcontext="shape" transform="translate(402.084,-37.2538)">		<title>Sheet.70</title>		<desc>Sensor Hardware</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="59.6005" cy="524.514" width="119.21" height="23.198"></v:textrect>		<path d="M119.2 512.91 L0 512.91 L0 536.11 L119.2 536.11 L119.2 512.91" class="st4"></path>		<text x="6.6" y="528.38" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Sensor Hardware</text>		</g>	<g id="shape125-178" v:mid="125" v:groupcontext="shape" transform="translate(200.432,-61.1312)">		<title>Rounded Rectangle</title>		<desc>Accelerometer</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="45.3666" cy="523.225" width="90.74" height="25.7756"></v:textrect>		<path d="M9.07 536.11 L81.66 536.11 A9.07317 9.07317 -180 0 0 90.73 527.04 L90.73 519.41 A9.07317 9.07317 -180 0 0 81.66					 510.34 L9.07 510.34 A9.07317 9.07317 -180 0 0 0 519.41 L0 527.04 A9.07317 9.07317 -180 0 0 9.07 536.11 Z" class="st22"></path>		<text x="13.13" y="526.22" class="st23" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Accelerometer</text>		</g>	<g id="shape126-181" v:mid="126" v:groupcontext="shape" transform="translate(303.767,-61.1312)">		<title>Rounded Rectangle.126</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>		</v:userdefs>		<path d="M9.07 536.11 L81.66 536.11 A9.07317 9.07317 -180 0 0 90.73 527.04 L90.73 519.41 A9.07317 9.07317 -180 0 0 81.66					 510.34 L9.07 510.34 A9.07317 9.07317 -180 0 0 0 519.41 L0 527.04 A9.07317 9.07317 -180 0 0 9.07 536.11 Z" class="st22"></path>	</g>	<g id="shape76-183" v:mid="76" v:groupcontext="shape" transform="translate(318.952,-66.6604)">		<title>Sheet.76</title>		<desc>Gyroscope</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="34.024" cy="529.151" width="68.05" height="13.9225"></v:textrect>		<path d="M68.05 522.19 L0 522.19 L0 536.11 L68.05 536.11 L68.05 522.19" class="st4"></path>		<text x="9.85" y="532.15" class="st24" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Gyroscope</text>		</g>	<g id="shape128-187" v:mid="128" v:groupcontext="shape" transform="translate(406.472,-61.8561)">		<title>Rounded Rectangle.128</title>		<desc>Magnetometer</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="45.3666" cy="523.587" width="90.74" height="25.0506"></v:textrect>		<path d="M9.07 536.11 L81.66 536.11 A9.07317 9.07317 -180 0 0 90.73 527.04 L90.73 520.14 A9.07317 9.07317 -180 0 0 81.66					 511.06 L9.07 511.06 A9.07317 9.07317 -180 0 0 -0 520.14 L0 527.04 A9.07317 9.07317 -180 0 0 9.07 536.11					 Z" class="st22"></path>		<text x="13.13" y="526.59" class="st23" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Magnetometer</text>		</g>	<g id="shape130-190" v:mid="130" v:groupcontext="shape" transform="translate(612.512,-61.8561)">		<title>Rounded Rectangle.130</title>		<desc>Other Sensors</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="45.3666" cy="523.587" width="90.74" height="25.0506"></v:textrect>		<path d="M9.07 536.11 L81.66 536.11 A9.07317 9.07317 -180 0 0 90.73 527.04 L90.73 520.14 A9.07317 9.07317 -180 0 0 81.66					 511.06 L9.07 511.06 A9.07317 9.07317 -180 0 0 -0 520.14 L0 527.04 A9.07317 9.07317 -180 0 0 9.07 536.11					 Z" class="st22"></path>		<text x="13.13" y="526.59" class="st23" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Other Sensors</text>		</g>	<g id="shape88-193" v:mid="88" v:groupcontext="shape" transform="translate(242.333,-86.6651)">		<title>Sheet.88</title>		<path d="M3.82 511.06 L3.82 530.76 L2.52 530.76 L2.52 511.06 L3.82 511.06 L3.82 511.06 ZM6.3 529.67 L3.15 536.11 L0 529.67					 L6.3 529.67 L6.3 529.67 Z" class="st13"></path>	</g>	<g id="shape89-195" v:mid="89" v:groupcontext="shape" transform="translate(345.668,-86.6651)">		<title>Sheet.89</title>		<path d="M3.82 511.06 L3.82 530.76 L2.52 530.76 L2.52 511.06 L3.82 511.06 L3.82 511.06 ZM6.3 529.67 L3.15 536.11 L0 529.67					 L6.3 529.67 L6.3 529.67 Z" class="st13"></path>	</g>	<g id="shape90-197" v:mid="90" v:groupcontext="shape" transform="translate(448.373,-86.6651)">		<title>Sheet.90</title>		<path d="M3.82 511.06 L3.82 530.76 L2.52 530.76 L2.52 511.06 L3.82 511.06 L3.82 511.06 ZM6.3 529.67 L3.15 536.11 L0 529.67					 L6.3 529.67 L6.3 529.67 Z" class="st13"></path>	</g>	<g id="shape91-199" v:mid="91" v:groupcontext="shape" transform="translate(551.708,-86.6651)">		<title>Sheet.91</title>		<path d="M3.82 511.06 L3.82 530.76 L2.52 530.76 L2.52 511.06 L3.82 511.06 L3.82 511.06 ZM6.3 529.67 L3.15 536.11 L0 529.67					 L6.3 529.67 L6.3 529.67 Z" class="st13"></path>	</g>	<g id="shape92-201" v:mid="92" v:groupcontext="shape" transform="translate(654.413,-86.6651)">		<title>Sheet.92</title>		<path d="M3.82 511.06 L3.82 530.76 L2.52 530.76 L2.52 511.06 L3.82 511.06 L3.82 511.06 ZM6.3 529.67 L3.15 536.11 L0 529.67					 L6.3 529.67 L6.3 529.67 Z" class="st13"></path>	</g>	<g id="shape93-203" v:mid="93" v:groupcontext="shape" transform="translate(187.83,-105.594)">		<title>Sheet.93</title>		<path d="M0 253.23 L528.65 253.23 L528.65 536.11 L0 536.11 L0 253.23" class="st14"></path>	</g>	<g id="shape94-206" v:mid="94" v:groupcontext="shape" transform="translate(327.71,-129.436)">		<title>Sheet.94</title>		<path d="M0 516.78 C-0 514.65 1.69 512.91 3.78 512.91 L47.26 512.91 C49.34 512.91 51.04 514.65 51.04 516.78 L51.04 532.25					 C51.04 534.38 49.34 536.11 47.26 536.11 L3.78 536.11 C1.69 536.11 0 534.38 0 532.25 L0 516.78 Z" class="st2"></path>	</g>	<g id="shape95-208" v:mid="95" v:groupcontext="shape" transform="translate(327.71,-129.436)">		<title>Sheet.95</title>		<path d="M0 516.78 C-0 514.65 1.69 512.91 3.78 512.91 L47.26 512.91 C49.34 512.91 51.04 514.65 51.04 516.78 L51.04 532.25					 C51.04 534.38 49.34 536.11 47.26 536.11 L3.78 536.11 C1.69 536.11 0 534.38 0 532.25 L0 516.78 Z" class="st6"></path>	</g>	<g id="shape96-210" v:mid="96" v:groupcontext="shape" transform="translate(344.472,-132.625)">		<title>Sheet.96</title>		<desc>I3C</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="12.1525" cy="529.151" width="24.31" height="13.9225"></v:textrect>		<path d="M24.3 522.19 L0 522.19 L0 536.11 L24.3 536.11 L24.3 522.19" class="st4"></path>		<text x="3.13" y="532.63" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>I3C</text>		</g>	<g id="shape97-214" v:mid="97" v:groupcontext="shape" transform="translate(393.24,-129.436)">		<title>Sheet.97</title>		<path d="M0 516.78 C-0 514.65 1.69 512.91 3.78 512.91 L47.89 512.91 C49.97 512.91 51.67 514.65 51.67 516.78 L51.67 532.25					 C51.67 534.38 49.97 536.11 47.89 536.11 L3.78 536.11 C1.69 536.11 0 534.38 0 532.25 L0 516.78 Z" class="st2"></path>	</g>	<g id="shape98-216" v:mid="98" v:groupcontext="shape" transform="translate(393.24,-129.436)">		<title>Sheet.98</title>		<path d="M0 516.78 C-0 514.65 1.69 512.91 3.78 512.91 L47.89 512.91 C49.97 512.91 51.67 514.65 51.67 516.78 L51.67 532.25					 C51.67 534.38 49.97 536.11 47.89 536.11 L3.78 536.11 C1.69 536.11 0 534.38 0 532.25 L0 516.78 Z" class="st6"></path>	</g>	<g id="shape99-218" v:mid="99" v:groupcontext="shape" transform="translate(410.354,-132.625)">		<title>Sheet.99</title>		<desc>SPI</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="12.5237" cy="529.151" width="25.05" height="13.9225"></v:textrect>		<path d="M25.05 522.19 L0 522.19 L0 536.11 L25.05 536.11 L25.05 522.19" class="st4"></path>		<text x="3.18" y="532.63" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>SPI</text>		</g>	<g id="shape100-222" v:mid="100" v:groupcontext="shape" transform="translate(459.399,-129.436)">		<title>Sheet.100</title>		<path d="M0 516.78 C0 514.65 1.69 512.91 3.78 512.91 L47.26 512.91 C49.34 512.91 51.04 514.65 51.04 516.78 L51.04 532.25					 C51.04 534.38 49.34 536.11 47.26 536.11 L3.78 536.11 C1.69 536.11 0 534.38 0 532.25 L0 516.78 Z" class="st2"></path>	</g>	<g id="shape101-224" v:mid="101" v:groupcontext="shape" transform="translate(459.399,-129.436)">		<title>Sheet.101</title>		<path d="M0 516.78 C0 514.65 1.69 512.91 3.78 512.91 L47.26 512.91 C49.34 512.91 51.04 514.65 51.04 516.78 L51.04 532.25					 C51.04 534.38 49.34 536.11 47.26 536.11 L3.78 536.11 C1.69 536.11 0 534.38 0 532.25 L0 516.78 Z" class="st6"></path>	</g>	<g id="shape102-226" v:mid="102" v:groupcontext="shape" transform="translate(476.231,-132.625)">		<title>Sheet.102</title>		<desc>I2C</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="12.1525" cy="529.151" width="24.31" height="13.9225"></v:textrect>		<path d="M24.3 522.19 L0 522.19 L0 536.11 L24.3 536.11 L24.3 522.19" class="st4"></path>		<text x="3.13" y="532.63" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>I2C</text>		</g>	<g id="shape103-230" v:mid="103" v:groupcontext="shape" transform="translate(524.929,-129.436)">		<title>Sheet.103</title>		<path d="M0 516.78 C0 514.65 1.69 512.91 3.78 512.91 L47.26 512.91 C49.34 512.91 51.04 514.65 51.04 516.78 L51.04 532.25					 C51.04 534.38 49.34 536.11 47.26 536.11 L3.78 536.11 C1.69 536.11 0 534.38 0 532.25 L0 516.78 Z" class="st2"></path>	</g>	<g id="shape104-232" v:mid="104" v:groupcontext="shape" transform="translate(524.929,-129.436)">		<title>Sheet.104</title>		<path d="M0 516.78 C0 514.65 1.69 512.91 3.78 512.91 L47.26 512.91 C49.34 512.91 51.04 514.65 51.04 516.78 L51.04 532.25					 C51.04 534.38 49.34 536.11 47.26 536.11 L3.78 536.11 C1.69 536.11 0 534.38 0 532.25 L0 516.78 Z" class="st6"></path>	</g>	<g id="shape105-234" v:mid="105" v:groupcontext="shape" transform="translate(535.137,-132.625)">		<title>Sheet.105</title>		<desc>UART</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="19.9292" cy="529.151" width="39.86" height="13.9225"></v:textrect>		<path d="M39.86 522.19 L0 522.19 L0 536.11 L39.86 536.11 L39.86 522.19" class="st4"></path>		<text x="4.14" y="532.63" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>UART</text>		</g>	<g id="shape129-238" v:mid="129" v:groupcontext="shape" transform="translate(508.5,-62.0484)">		<title>Rounded Rectangle.129</title>		<desc>ALS/Prox</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.12601836709166):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="45.3666" cy="523.587" width="90.74" height="25.0506"></v:textrect>		<path d="M9.07 536.11 L81.66 536.11 A9.07317 9.07317 -180 0 0 90.73 527.04 L90.73 520.14 A9.07317 9.07317 -180 0 0 81.66					 511.06 L9.07 511.06 A9.07317 9.07317 -180 0 0 0 520.14 L0 527.04 A9.07317 9.07317 -180 0 0 9.07 536.11 Z" class="st25"></path>		<text x="24.25" y="526.59" class="st23" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ALS/Prox</text>		</g>	<g id="shape112-241" v:mid="112" v:groupcontext="shape" transform="translate(237.375,-6.401)">		<title>Round Corner Rectangle</title>		<desc>Third-party</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48.375" cy="524.514" width="96.76" height="23.198"></v:textrect>		<path d="M9.68 536.11 L87.08 536.11 A9.67484 9.67484 -180 0 0 96.75 526.44 L96.75 522.59 A9.67484 9.67484 -180 0 0 87.08					 512.91 L9.68 512.91 A9.67484 9.67484 -180 0 0 0 522.59 L0 526.44 A9.67484 9.67484 -180 0 0 9.68 536.11 Z" class="st26"></path>		<text x="19.37" y="528.11" class="st27" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Third-party</text>		</g>	<g id="shape114-244" v:mid="114" v:groupcontext="shape" transform="translate(361.125,-6.401)">		<title>Round Corner Rectangle.114</title>		<desc>Upstream</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48.375" cy="524.514" width="96.76" height="23.198"></v:textrect>		<path d="M9.68 536.11 L87.08 536.11 A9.67484 9.67484 -180 0 0 96.75 526.44 L96.75 522.59 A9.67484 9.67484 -180 0 0 87.08					 512.91 L9.68 512.91 A9.67484 9.67484 -180 0 0 -0 522.59 L0 526.44 A9.67484 9.67484 -180 0 0 9.68 536.11					 Z" class="st28"></path>		<text x="22.37" y="528.11" class="st27" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Upstream</text>		</g>	<g id="shape116-247" v:mid="116" v:groupcontext="shape" transform="translate(484.875,-6.401)">		<title>Round Corner Rectangle.116</title>		<desc>Qualcomm</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48.375" cy="524.514" width="96.76" height="23.198"></v:textrect>		<path d="M9.68 536.11 L87.08 536.11 A9.67484 9.67484 -180 0 0 96.75 526.44 L96.75 522.59 A9.67484 9.67484 -180 0 0 87.08					 512.91 L9.68 512.91 A9.67484 9.67484 -180 0 0 -0 522.59 L0 526.44 A9.67484 9.67484 -180 0 0 9.68 536.11					 Z" class="st29"></path>		<text x="19.37" y="528.11" class="st27" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm</text>		</g>	<g id="shape118-250" v:mid="118" v:groupcontext="shape" transform="translate(608.625,-6.401)">		<title>Round Corner Rectangle.118</title>		<desc>Hardware</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.1343750010047):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48.375" cy="524.514" width="96.76" height="23.198"></v:textrect>		<path d="M9.68 536.11 L87.08 536.11 A9.67484 9.67484 -180 0 0 96.75 526.44 L96.75 522.59 A9.67484 9.67484 -180 0 0 87.08					 512.91 L9.68 512.91 A9.67484 9.67484 -180 0 0 -0 522.59 L0 526.44 A9.67484 9.67484 -180 0 0 9.68 536.11					 Z" class="st30"></path>		<text x="22.37" y="528.11" class="st31" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Hardware</text>		</g></g>
</svg>

QSH architecture components

- **Application processor software modules**

    - **Client application**: It contains the *application main()* or
*entry function* that interacts with the QSH client APIs on the
application processor side.
    - **QSH client APIs**: It offers high-level APIs to access services
offered by the QSH. It simplifies application development by
abstracting system complexities and focusing on the application
logic. For more information, see
[Interfaces](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-7/qsh_api_reference.html).
- **Low-power processor software modules**

    - **Client manager**: The client manager is in charge of all
communications of the low-power processor with the application
processor. It is responsible for the following:

Table : Client manager functions

        | Function | Description |
        | --- | --- |
        | Translate incoming requests | The client manager takes incoming requests and translates them into a format that the QSH can understand. |
        | Translate outgoing indications | The client manager receives event messages from the QSH and translates these event messages into outgoing indications in a format that is understandable outside the QSH. |
        | Guarantees batching options | If a client specifies certain batching (store/accumulate locally) options, then the client manager ensures that the batching options are met. This compliance with the criteria means that the client manager checks that the data is grouped and sent in the same way as the client has specified. |
    - **Service manager**: QSH offers synchronous services through its
service manager. The sensor and sensor instance APIs use a
callback to connect to this service manager.

        The `adsp_proc/qsh_platform/inc/sns_service.h` file lists the
services available in the QSH, also referred as QSH services. The
following table describes the key QSH services that are essential
for device drivers.

Table : QSH services

        | QSH service | Description |
        | --- | --- |
        | Stream service | <ul class="simple"><br><li><p>Enables creating and removing a data stream with a sensor.</p></li><br><li><p>See the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/inc/sns_data_stream.h</span></code> file for data stream API to send requests and receive events over the data streams.</p></li><br></ul> |
        | Attribute service | <ul class="simple"><br><li><p>Allows a sensor to publish sensor attributes or capabilities.</p></li><br><li><p>All standard attribute IDs and expected value type are defined in the <code class="docutils literal notranslate"><span class="pre">sns_std_sensor.proto</span></code> file.</p></li><br><li><p>All attribute values must be in the nanopb-encoded format.</p></li><br><li><p>For more information on the API, see the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/inc/services/sns_attribute_service.h</span></code> file.</p></li><br></ul> |
        | Diagnostic service | <ul class="simple"><br><li><p>Provides debug message and data log packet services, and defines standard log packet IDs.</p></li><br><li><p>For more information on the API, see the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/inc/services/sns_diag_service.h</span></code> file.</p></li><br></ul> |
        | Event service | <ul class="simple"><br><li><p>Enables to publish output events from source sensor instances.</p></li><br><li><p>For more information on the API, see the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/inc/services/sns_event_service.h</span></code> file.</p></li><br></ul> |
        | Power rail service | <ul class="simple"><br><li><p>Available to the physical sensors to register and vote for the power rails (ON/OFF).</p></li><br><li><p>For more information on the API, see the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/inc/services/sns_pwr_rail_service.h</span></code> file.</p></li><br></ul> |
        | Synchronous COM port (SCP) service | <ul class="simple"><br><li><p>Available to the physical sensors to register/deregister the COM port and perform synchronous transfers over the COM port.</p></li><br><li><p>For more information on the API, see the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/inc/services/sns_sync_com_port_service.h</span></code> file.</p></li><br></ul> |
        | GPIO service | <ul class="simple"><br><li><p>Available to the physical sensors to read/write the GPIO value.</p></li><br><li><p>Effectively abstracts a low-level CoreBSP layer for controlling the GPIOs.</p></li><br><li><p>For more information on the API, see the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/inc/services/sns_gpio_service.h</span></code> file.</p></li><br></ul> |
        | Island service | <ul class="simple"><br><li><p>Available to the physical sensors to request for island exit.</p></li><br><li><p>When an application must access DDR or nonisland resources, the application code can use the island service.</p></li><br><li><p>For more information on the API, see the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/inc/services/sns_island_service.h</span></code> file.</p></li><br></ul> |
        | File system service | <ul class="simple"><br><li><p>Available to the physical sensors for the file service management.</p></li><br><li><p>The abstract file system is a part of an application processor stack and can be available for local access from a low-power processor.</p></li><br><li><p>For more information on the API, see the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/inc/services/sns_file_service.h</span></code> file.</p></li><br></ul> |
    - **Platform sensor**: QSH provides certain built-in sensors for
platform or hardware-specific abstraction that other sensors and
sensor instances can use. The following table describes the
platform sensors:

Table : Platform sensors

        | Platform sensor | Description |
        | --- | --- |
        | Registry sensor | <ul class="simple"><br><li><p>The registry sensor in the QSH provides an interface for sensors to access registry data from persistent memory. It allows sensors to create a data stream, send requests, receive data events, subscribe to updates, and remove unnecessary data streams.</p></li><br><li><p>For more information on the registry sensor, see <a href="https://docs.qualcomm.com/bundle/resource/topics/80-70017-7A/configuration_customization.html" rel="noopener noreferrer" target="_blank" class="xref cursorpointer" onclick="Window.BookmapComponent.navigateExternalFile('https://docs.qualcomm.com/bundle/resource/topics/80-70017-7A/configuration_customization.html')">Configure</a> in <a href="https://docs.qualcomm.com/bundle/resource/topics/80-70017-7A/overview.html" rel="noopener noreferrer" target="_blank" class="xref cursorpointer" onclick="Window.BookmapComponent.navigateExternalFile('https://docs.qualcomm.com/bundle/resource/topics/80-70017-7A/overview.html')">Qualcomm Linux Sensors Guide - Addendum</a>.</p></li><br></ul><br><br><br>> <br>> <br>> Note<br>> <br>> <br>> [Qualcomm Linux Sensors Guide - Addendum](https://docs.qualcomm.com/bundle/resource/topics/80-70017-7A/overview.html) is available to licensed developers with authorized access.<br><br><ul class="simple"><br><li><p>The registry sensor API is documented in the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_api/pb/sns_registry.proto</span></code> file.</p></li><br></ul> |
        | Timer sensor | <ul class="simple"><br><li><p>The timer sensor in the QSH offers an interface to initiate periodic or one-shot timers. Sensors that require timers must create a data stream, send requests, and read delivered data events.</p></li><br><li><p>The timer sensor API is documented in the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/api/public_sns/sns_timer.proto</span></code> file.</p></li><br></ul> |
        | Interrupt sensor | <ul class="simple"><br><li><p>The interrupt sensor in the QSH offers an interface to register interrupts. Sensors that require interrupts must create a data stream, send requests, and read delivered data events.</p></li><br><li><p>The interrupt sensor API is documented in the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/api/public_sns/sns_interrupt.proto</span></code> file.</p></li><br></ul> |
        | Asynchronous COM port (ASCP) sensor | <ul class="simple"><br><li><p>The ASCP sensor in the QSH offers an interface for asynchronous read and write operations over a communication port.</p></li><br><li><p>Sensors that require this feature must create a data stream, send requests, and read delivered data events.</p></li><br><li><p>The ASCP sensor API is documented in the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/api/public_sns/sns_async_com_port.proto</span></code> file.</p></li><br></ul><br><br><br>> <br>> <br>> Note<br>> <br>> <br>> The ASCP sensor is typically used by the physical sensor drivers to read large FIFO. |
        | SUID lookup sensor | <ul class="simple"><br><li><p>The SUID lookup sensor in the QSH provides an API to obtain the SUID of dependent sensors. Its own SUID is available via the <code class="docutils literal notranslate"><span class="pre">sns_get_suid_lookup()</span></code> function in the <code class="docutils literal notranslate"><span class="pre">sns_sensor_util.h</span></code> file.</p></li><br><li><p>The SUID lookup sensor API is documented in the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_api/pb/sns_suid.proto</span></code> file.</p></li><br></ul> |
        | Test sensor | <ul class="simple"><br><li><p>The test sensor is used to customize and run sensor-specific use cases.</p></li><br><li><p>The test sensor is available in the <code class="docutils literal notranslate"><span class="pre">adsp_proc/qsh_platform/sensors/test</span></code> directory.</p></li><br></ul> |
    - **QSH utilities**: QSH provides several helper utilities for sensors and sensor instances. All the utilities are available in the `adsp_proc/qsh_platform/inc/utils` directory. The following table describes the key utilities:

Table : QSH utilities

        | QSH utility | Description |
        | --- | --- |
        | Nanopb encode/decode | <ul class="simple"><br><li><p>Provides common encode/decode helper functions for all the sensors. For example, encode/decode <code class="docutils literal notranslate"><span class="pre">sns_request</span></code> messages, encode and publish/decode data events.</p></li><br><li><p>Asynchronous COM port nanopb utilities are available for physical sensor drivers.</p></li><br></ul> |
        | Sensor utils | <ul class="simple"><br><li><p>Provides common functionalities, such as finding a sensor instance and getting the SUID of a SUID lookup sensor.</p></li><br></ul> |
        | Attribute utils | <ul class="simple"><br><li><p>Provides helper functions that encodes and publishes a sensor attribute.</p></li><br></ul> |
        | Memory utils | <ul class="simple"><br><li><p>Provides helper functions for efficient memory management and allocation.</p></li><br></ul> |
        | Math utils | <ul class="simple"><br><li><p>Offers a collection of mathematical functions and operations such as matrix, FFT, and IIR filter.</p></li><br></ul> |
        | Printf utils | <ul class="simple"><br><li><p>Includes helper functions to format and print data.</p></li><br></ul> |

## Sensor and sensor instances

The QSH sensor implementation is divided in two logical units: sensor and sensor instance.

- Sensors are producers or consumers, or a combination of producers and consumers of asynchronous data.
- Each sensor can have one or more sensor instances.
- Any request to a sensor for data results in the creation of a sensor instance or sharing of an existing sensor instance.
- Sensor instances are created on-demand, as determined by the sensor.

    - Sensors fully manage the lifecycle and configuration of their
corresponding instances and are responsible for sending
configuration updates and initial state events to their clients.
    - Each sensor instance operates with a specific client configuration.
    - The sensor instance of a physical sensor programs the sensor hardware to operate at required configuration.
    - Vendors must serve all client requests with a minimal number of
sensor instances.
    - A stream of data generated by a sensor instance is sent to all the
active clients.
- Multiple sensors can share and configure a single sensor instance –
this mode of operation is typical to a combo driver for hardware
sensors, such as:

    - Accelerometer and gyroscope
    - Proximity and ambient light

## Communication among sensors

Every algorithm and sensor driver within the QSH framework is referred
to as a sensor with the standard QSH APIs. Information exchange across
these sensors is necessary for any real use case.

All communication to, from, and among the sensors is performed through
the request and event messages over data streams. The message payloads
are defined in the protocol buffer format, using the nanopb generator,
encoder, and decoder. The message payload length, message ID, and
timestamp (for events) are communicated within the metadata managed by the
QSH framework.

The following figure shows the communication between the data client and the data
source, using the data stream:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export sensors_Comunication.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="7.61675in" height="2.57204in" viewbox="0 0 548.406 185.187" xml:space="preserve" color-interpolation-filters="sRGB" class="st13"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>		<v:ud v:nameu="msvWarnOnPersonalInfo" v:val="VT0(0):5"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-2 .st1 { fill: #f7f8fa; stroke: none; stroke-width: 0.25 }
.svg-2 .st2 { fill: #ffffff; stroke: #000000; stroke-width: 2 }
.svg-2 .st3 { fill: #ffffff; stroke: #000000; stroke-width: 1 }
.svg-2 .st4 { fill: #4a5a75; stroke: none; stroke-width: 2 }
.svg-2 .st5 { fill: #f7f8fa; font-family: Arial; font-size: 1.00001em }
.svg-2 .st6 { font-size: 1em }
.svg-2 .st7 { fill: #ffffff; stroke: none; stroke-width: 0.25 }
.svg-2 .st8 { fill: #000000; font-family: Arial; font-size: 1.00001em }
.svg-2 .st9 { marker-end: url("#mrkr5-43"); marker-start: url("#mrkr5-41"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st10 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.28409090909091 }
.svg-2 .st11 { fill: #4a5a75; stroke: #c7c8c8; stroke-width: 0.25 }
.svg-2 .st12 { fill: #feffff; font-family: Calibri; font-size: 1.00001em }
.svg-2 .st13 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend5">		<path d="M 2 1 L 0 0 L 1.98117 -0.993387 C 1.67173 -0.364515 1.67301 0.372641 1.98465 1.00043 " style="stroke:none"></path>	</g>	<marker id="mrkr5-41" class="st10" v:arrowtype="5" v:arrowsize="2" v:setback="5.8" refx="5.8" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(3.52) "></use>	</marker>	<marker id="mrkr5-43" class="st10" v:arrowtype="5" v:arrowsize="2" v:setback="6.16" refx="-6.16" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-3.52,-3.52) "></use>	</marker></defs><g v:mid="4" v:index="1" v:groupcontext="backgroundPage">	<v:userdefs>		<v:ud v:nameu="msvThemeOrder" v:val="VT0(0):26"></v:ud>		<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>VBackground-1</title>	<v:pageproperties width="7.61675" height="2.57204" v:drawingscale="1" v:pagescale="1" v:drawingunits="19" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<g id="shape1-1" v:mid="1" v:groupcontext="shape">		<title>Solid</title>		<v:userdefs>			<v:ud v:nameu="Background" v:val="VT0(0):26"></v:ud>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="msvShapeCategories" v:prompt="" v:val="VT4(DoNotContain)"></v:ud>			<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>		</v:userdefs>		<rect x="0" y="0" width="548.406" height="185.187" class="st1"></rect>	</g></g><g v:mid="0" v:index="2" v:groupcontext="foregroundPage">	<v:userdefs>		<v:ud v:nameu="msvThemeOrder" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>Page-1</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="19" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="shape2-3" v:mid="2" v:groupcontext="shape" transform="translate(19.9997,-41.4912)">		<title>Rounded Rectangle.2</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.27474977989196):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.27474977989196):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.27474977989196):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.27474977989196):1"></v:ud>		</v:userdefs>		<path d="M19.78 185.19 L107.16 185.19 A19.7817 19.7817 -180 0 0 126.94 165.4 L126.94 122.71 A19.7817 19.7817 -180 0 0					 107.16 102.93 L19.78 102.93 A19.7817 19.7817 -180 0 0 0 122.71 L0 165.4 A19.7817 19.7817 -180 0 0 19.78					 185.19 Z" class="st2"></path>	</g>	<g id="shape3-5" v:mid="3" v:groupcontext="shape" transform="translate(385.688,-41.4948)">		<title>Rounded Rectangle.3</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.30889286693996):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.30889286693996):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.30889286693996):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.30889286693996):1"></v:ud>		</v:userdefs>		<path d="M22.24 185.19 L120.48 185.19 A22.2399 22.2399 -180 0 0 142.72 162.95 L142.72 125.17 A22.2399 22.2399 -180 0					 0 120.48 102.93 L22.24 102.93 A22.2399 22.2399 -180 0 0 -0 125.17 L0 162.95 A22.2399 22.2399 -180 0 0 22.24					 185.19 Z" class="st2"></path>	</g>	<g id="shape30-7" v:mid="30" v:groupcontext="shape" transform="translate(146.943,-64.0699)">		<title>Simple Arrow.30</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="ArrowType" v:prompt="" v:val="VT0(2):26"></v:ud>		</v:userdefs>		<path d="M0 185.19 L13.97 165.58 L13.97 175.38 L238.08 175.38 L238.08 185.19 L238.08 194.99 L13.97 194.99 L13.97 204.79					 L0 185.19 Z" class="st3"></path>	</g>	<g id="shape29-9" v:mid="29" v:groupcontext="shape" transform="translate(384.235,269.994) rotate(180)">		<title>Simple Arrow.29</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="ArrowType" v:prompt="" v:val="VT0(2):26"></v:ud>		</v:userdefs>		<path d="M0 185.19 L12 166.66 L12 175.92 L236.82 175.92 L236.82 185.19 L236.82 194.45 L12 194.45 L12 203.71 L0 185.19					 Z" class="st3"></path>	</g>	<g id="shape22-11" v:mid="22" v:groupcontext="shape" transform="translate(84.5333,-52.9428)">		<title>Rounded Rectangle.22</title>		<desc>PB Encode/Decode</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15872530589669):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15872530589669):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15872530589669):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15872530589669):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="28.44" cy="155.505" width="56.89" height="59.364"></v:textrect>		<path d="M11.43 185.19 L45.45 185.19 A11.428 11.428 -180 0 0 56.88 173.76 L56.88 137.25 A11.428 11.428 -180 0 0 45.45					 125.82 L11.43 125.82 A11.428 11.428 -180 0 0 -0 137.25 L0 173.76 A11.428 11.428 -180 0 0 11.43 185.19 Z" class="st4"></path>		<text x="20.44" y="144.7" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PB <tspan x="6.42" dy="1.2em" class="st6">Encode/</tspan><tspan x="7.76" dy="1.2em" class="st6">Decode</tspan></text>		</g>	<g id="shape21-16" v:mid="21" v:groupcontext="shape" transform="translate(391.21,-52.9428)">		<title>Rounded Rectangle.21</title>		<desc>PB Encode/Decode</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.21203560955349):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.21203560955349):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.21203560955349):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.21203560955349):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="32.3856" cy="155.505" width="64.78" height="59.364"></v:textrect>		<path d="M15.27 185.19 L49.5 185.19 A15.2663 15.2663 -180 0 0 64.77 169.92 L64.77 141.09 A15.2663 15.2663 -180 0 0 49.5					 125.82 L15.27 125.82 A15.2663 15.2663 -180 0 0 -0 141.09 L0 169.92 A15.2663 15.2663 -180 0 0 15.27 185.19					 Z" class="st4"></path>		<text x="24.38" y="144.7" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PB <tspan x="10.37" dy="1.2em" class="st6">Encode/</tspan><tspan x="11.7" dy="1.2em" class="st6">Decode</tspan></text>		</g>	<g id="shape23-21" v:mid="23" v:groupcontext="shape" transform="translate(231.406,-97.2696)">		<title>Sheet.23</title>		<desc>Request</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="28.44" cy="181.227" width="56.88" height="7.92"></v:textrect>		<rect x="0" y="177.267" width="56.88" height="7.92" class="st7"></rect>		<text x="6.09" y="184.83" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Request</text>		</g>	<g id="shape24-24" v:mid="24" v:groupcontext="shape" transform="translate(231.406,-60.0156)">		<title>Sheet.24</title>		<desc>Event</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="28.44" cy="179.937" width="56.88" height="10.5"></v:textrect>		<rect x="0" y="174.687" width="56.88" height="10.5" class="st7"></rect>		<text x="13.1" y="183.54" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Event</text>		</g>	<g id="shape25-27" v:mid="25" v:groupcontext="shape" transform="translate(24.1561,-67.7496)">		<title>Sheet.25</title>		<desc>Data Client</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="28.44" cy="168.987" width="56.89" height="32.4"></v:textrect>		<rect x="0" y="152.787" width="56.88" height="32.4" class="st7"></rect>		<text x="15.77" y="165.39" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Data <tspan x="13.1" dy="1.2em" class="st6">Client</tspan></text>		</g>	<g id="shape26-31" v:mid="26" v:groupcontext="shape" transform="translate(465.156,-66.4248)">		<title>Sheet.26</title>		<desc>Data Source</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="28.44" cy="168.987" width="56.89" height="32.4"></v:textrect>		<rect x="0" y="152.787" width="56.88" height="32.4" class="st7"></rect>		<text x="15.77" y="165.39" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Data <tspan x="9.43" dy="1.2em" class="st6">Source</tspan></text>		</g>	<g id="shape27-35" v:mid="27" v:groupcontext="shape" v:layermember="0" transform="translate(83.4713,-114.753)">		<title>Dynamic connector.27</title>		<path d="M0 170.39 L0 170.03 L0 162.69 L373.58 162.69 L373.58 170.02" class="st9"></path>	</g>	<g id="shape31-44" v:mid="31" v:groupcontext="shape" transform="translate(219.839,-149.225)">		<title>Sheet.31</title>		<desc>Data Stream</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.0068" cy="176.331" width="80.02" height="17.712"></v:textrect>		<rect x="0" y="167.475" width="80.0136" height="17.712" class="st7"></rect>		<text x="6.33" y="179.93" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Data Stream</text>		</g>	<g id="shape35-47" v:mid="35" v:groupcontext="shape" transform="translate(371.642,-18.25)">		<title>Round Corner Rectangle</title>		<desc>Third-party</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.11113):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.11113):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.11113):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.11113):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.0068" cy="176.331" width="80.02" height="17.712"></v:textrect>		<path d="M8 185.19 L72.01 185.19 A8.00123 8.00123 -180 0 0 80.01 177.19 L80.01 175.48 A8.00123 8.00123 -180 0 0 72.01					 167.47 L8 167.47 A8.00123 8.00123 -180 0 0 0 175.48 L0 177.19 A8.00123 8.00123 -180 0 0 8 185.19 Z" class="st11"></path>		<text x="12.63" y="179.93" class="st12" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Third-party</text>		</g></g>
</svg>

Sensor communication between client and source

- Request messages are sent to enable, disable, and reconfigure a sensor. Request messages are always addressed to a specific SUID. After the target sensor receives the request message, it sends the request to the sensor instance for proper handling.
- Sensor instances send event messages asynchronously to their registered clients, which might be other sensors or sensor instances.

## Nanopb protocol buffer in QSH

The QSH uses nanopb protocol buffer for:

- All the request and event messages exchanged between the sensors.

    - A sensor or sensor instance must encode the payload (if present)
for all requests it sends to its dependants.
    - A sensor or sensor instance must decode the payload (if present)
for all requests it receives.
    - A sensor or sensor instance must encode the payload (if present)
for all events it publishes.
    - A sensor or sensor instance must decode the payload (if present) for all events it receives from its dependants.

> 
> 
> Note
> 
> 
> Certain requests or events do not have a message body. In this case, decoding or encoding the payload is not expected, and the sensor processes these messages based on their message ID.
- Representing the attribute data

    - All attribute values are in the nanopb-encoded format.
- Diagnostic log packet payload

    - All payloads in the diagnostic log packets are in the
nanopb-encoded format.

Note

For more information on Google protocol buffers and nanopb respectively, see [Protocol-buffers](https://developers.google.com/protocol-buffers/) and [nanopb](https://jpa.kapsi.fi/nanopb/).

## Sensor API messages

The following files refer to the API messages, which contain message
definitions, and are used for communication between sensors:

- The `.proto` files contain protocol buffer message definitions and
documentation to communicate between sensors.
- The following table lists the API standard message defined in the
`<workspace>/build-qcom-wayland/workspace/sources/sensinghub/sensing-hub/apis/proto/sns_std_*.proto`
file:

Table : Standard proto files

    | File | Description |
    | --- | --- |
    | `sns_std.proto` | This file includes standard definitions, such as:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>A message ID</p></li><br>> <li><p>Request message</p></li><br>> <li><p>Batching specification</p></li><br>> <li><p>An attribute request and event</p></li><br>> <li><p>An error event</p></li><br>> </ul> |
    | `sns_std_sensor.proto` | This file includes definitions, such as:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>Message IDs for request and event APIs of standard sensors</p></li><br>> <li><p>Streaming and event messages</p></li><br>> <li><p>Sensor sample status types</p></li><br>> <li><p>Standard attribute IDs</p></li><br>> <li><p>Common attribute types</p></li><br>> <li><p>A physical sensor configuration event message</p></li><br>> </ul> |
    | `sns_std_type.proto` | This file includes common API-type definitions, such as:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>SUID messages</p></li><br>> <li><p>Attribute events and value messages</p></li><br>> <li><p>Common error types</p></li><br>> </ul> |
    | `sns_std_event_gated_sensor.proto` | This file includes the API for event gated sensors, encompassing the configuration message ID and API documentation. |
- Physical sensor-specific API definitions and documentation are
present in the sensor-specific `.proto` files. For example,
`sns_accel.proto`, `sns_proximity.proto` and
`sns_motion_detect.proto`.
- Platform sensor API definitions and documentation are present in the
`adsp_proc/qsh_platform/api/` directory. For example,
`sns_timer.proto`, `sns_interrupt.proto`, and
`sns_async_com_port.proto`.
- Framework-related APIs for SUID, registry, and diagnostics are
defined in the following proto files:

    - `sns_suid.proto`
    - `sns_registry.proto`
    - `sns_diag.proto`

Last Published: Dec 24, 2024

[Previous Topic
Features](https://docs.qualcomm.com/bundle/publicresource/80-70017-7/topics/supported_features.md) [Next Topic
Interfaces](https://docs.qualcomm.com/bundle/publicresource/80-70017-7/topics/qsh_api_reference.md)