<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pine64.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xalius</id>
	<title>PINE64 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pine64.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xalius"/>
	<link rel="alternate" type="text/html" href="https://wiki.pine64.org/wiki/Special:Contributions/Xalius"/>
	<updated>2026-04-29T17:28:05Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9625</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9625"/>
		<updated>2021-03-28T16:35:35Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Board/SoC Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Under Construction!&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
== Ressources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Boot Order ====&lt;br /&gt;
The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:&lt;br /&gt;
&lt;br /&gt;
* SPI NOR flash&lt;br /&gt;
* SPI NAND flash&lt;br /&gt;
* eMMC&lt;br /&gt;
* SD-Card&lt;br /&gt;
&lt;br /&gt;
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip&lt;br /&gt;
flash/boot tools.&lt;br /&gt;
&lt;br /&gt;
==== BSP Image Layout ====&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9624</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9624"/>
		<updated>2021-03-28T16:22:07Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Under Construction!&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
== Ressources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9623</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9623"/>
		<updated>2021-03-28T16:16:47Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Ressources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Under Construction!&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
== Ressources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9622</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9622"/>
		<updated>2021-03-28T16:16:27Z</updated>

		<summary type="html">&lt;p&gt;Xalius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Under Construction!&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
== Ressources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9621</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9621"/>
		<updated>2021-03-28T16:15:48Z</updated>

		<summary type="html">&lt;p&gt;Xalius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Under Construction!&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
=== Ressources ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Board/SoC Documentation ===&lt;br /&gt;
== Booting ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9620</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9620"/>
		<updated>2021-03-28T16:14:34Z</updated>

		<summary type="html">&lt;p&gt;Xalius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Under Construction!&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
=== Ressources ===&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9619</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=9619"/>
		<updated>2021-03-28T16:11:42Z</updated>

		<summary type="html">&lt;p&gt;Xalius: Create Quartz64 Development page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Under Construction!&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64&amp;diff=9618</id>
		<title>Quartz64</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64&amp;diff=9618"/>
		<updated>2021-03-28T16:10:59Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Development efforts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Quartz64 is the most recent Single Board Computer offering from Pine64, scheduled for release in 2021. It is powered by a Rockchip RK3566 Quad-Core ARM Cortex A55 64-Bit Processor with a MALI G-52 GPU.&lt;br /&gt;
&lt;br /&gt;
Key features include a PCIe x4 open ended slot (model A) or m.2 (model B) using one Gen2 lane electrically, and the use of LPDDR4 RAM.&lt;br /&gt;
&lt;br /&gt;
The Quartz64 is equipped with 2GB, 4GB or 8GB LPDDR4 system memory, and 128Mb SPI boot Flash. There is also an optional eMMC module (up to 128GB) and microSD slot for booting. The board is equipped with 1x USB 3.0 type A Host, 3x USB 2.0 Host, Gigabit Ethernet, SATA (model A), GPIO Bus, MiPi DSI interface, eink interface (model A), eDP interface (model A), touch Panel interface (model A), MiPi CSI interface, as well as many other device interfaces such as UART, SPI, I2C, for makers to integrate with sensors and other peripherals. Many different Operating Systems (OS) are freely available from the open source community, such as Linux (Ubuntu, Debian, Arch), BSD, and Android.&lt;br /&gt;
&lt;br /&gt;
== Software and OS Image Downloads ==&lt;br /&gt;
&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== SoC and Memory Specification ==&lt;br /&gt;
* Based on [https://www.rock-chips.com/a/en/products/RK35_Series/2021/0113/1274.html Rockchip RK3566]&lt;br /&gt;
[[File:RK3566_icon.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== CPU Architecture ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/processors/cortex-a/cortex-a55 Quad-core Cortex-A55@1.8GHz]&lt;br /&gt;
&lt;br /&gt;
* Quad-core ARM Cortex-A55 CPU&lt;br /&gt;
* AArch32 for full backward compatibility with Armv7&lt;br /&gt;
* ARM Neon Advanced SIMD (single instruction, multiple data) support for accelerated media and signal processing computation&lt;br /&gt;
* Include VFP hardware to support single and double-precision operations&lt;br /&gt;
* ARMv8 Cryptography Extensions&lt;br /&gt;
* Integrated 32KB L1 instruction cache, 32KB L1 data cache&lt;br /&gt;
* 512KB unified system L3 cache&lt;br /&gt;
* TrustZone technology support&lt;br /&gt;
&lt;br /&gt;
=== Graphic Process Unit GPU Capability ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/graphics-and-multimedia/mali-gpus/mali-g52-gpu Mali-G52 2EE Bifrost GPU@800MHz]&lt;br /&gt;
* 4x Multi-Sampling Anti-Aliasing (MSAA) with minimal performance drop &lt;br /&gt;
* 128KB L2 Cache configurations&lt;br /&gt;
* Support OpenGL ES 1.1, 2.0, and 3.2&lt;br /&gt;
* Support Vulkan 1.0 and 1.1&lt;br /&gt;
* Support OpenCL 2.0 Full Profile&lt;br /&gt;
* Support 1600Mpix/s fill rate when 800MHz clock frequency&lt;br /&gt;
* Support 38.4GLOPs when 800MHz clock frequency   &lt;br /&gt;
&lt;br /&gt;
=== Neural Process Unit NPU Capability ===&lt;br /&gt;
* Neural network acceleration engine with processing performance up to 0.8 TOPS&lt;br /&gt;
* Support integer 8, integer 16 convolution operation&lt;br /&gt;
* Support deep learning frameworks: TensorFlow, TF-lite, Pytorch, Caffe, ONNX, MXNet, Keras, Darknet&lt;br /&gt;
&lt;br /&gt;
=== System Memory ===&lt;br /&gt;
* RAM Memory Variants: 2GB - 8GB LPDDR4.&lt;br /&gt;
* SPI Flash: 128Mbit / 16MByte&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
* 10/100/1000Mbps Ethernet&lt;br /&gt;
* WiFi 802.11 b/g/n/ac with Bluetooth 5.0 (optional on model A, build in on model B)&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
* microSD - bootable, supports SDHC and SDXC, storage up to 2TB&lt;br /&gt;
* USB -	2 ports on model B, 3 ports on model A USB 2.0 Host port, 1 USB 3.0 Host port&lt;br /&gt;
* one native SATA 3.0 6Gb/s Port (only on model A, shared with USB 3.0 host port)&lt;br /&gt;
* optional eMMC module from 16GB up to 128GB&lt;br /&gt;
&lt;br /&gt;
=== Expansion Ports ===&lt;br /&gt;
* eDP - 4 lanes of 2.7Gbps, up to 2560x1600@60Hz (only on model A)&lt;br /&gt;
* DSI - Display Serial Interface, 4 lanes MiPi, up to 1440P on model A, 2 lanes MiPi, up to 1080p on model B &lt;br /&gt;
* CSI - CMOS Camera Interface, 4 lanes MiPi up to 8 mega pixel on model A, 2 lanes MiPi up to 5 mega pixel on model B &lt;br /&gt;
* TP - Touch Panel Port, SPI with interrupt on model A&lt;br /&gt;
* RTC - Real Time Clock Battery Connector&lt;br /&gt;
* VBAT - Lithium Battery Connector with temperature sensor input on model A&lt;br /&gt;
* Wifi/BT Module Header - SDIO 3.0 and UART on model A, build in Wifi/BT Module on model B&lt;br /&gt;
* 2x20 pins &amp;quot;Pi2&amp;quot; GPIO Header on model B, 2x10 pins GPO header on model A&lt;br /&gt;
* PCIe x4 open ended slot on model A, m.2 slot on model B, one Gen2 lane due to SoC constraints&lt;br /&gt;
&lt;br /&gt;
== Quartz64 board Information, Schematics, and Certifications ==&lt;br /&gt;
* Model &amp;quot;A&amp;quot; Baseboard Dimensions: 133mm x 80mm x 19mm&lt;br /&gt;
* Input Power: DC 12V @ 3A 5.5mmOD/2.1mmID center-positive Barrel DC Jack connector&lt;br /&gt;
&lt;br /&gt;
* Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic and PCB Board Resource:&lt;br /&gt;
** [https://wiki.pine64.org/images/3/31/Quartz64_model-A_schematic_v1.0_20201215.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic ver 1.0 20201215 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-A_schematic_v1.0_20201124.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic ver 1.0 20201124 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-A_V1.0_connector_placement.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC PCB Connector placement PDF file]&lt;br /&gt;
&lt;br /&gt;
* Model &amp;quot;B&amp;quot; Baseboard Dimensions: 85mm x 56mm x 18.8mm&lt;br /&gt;
* Input Power: DC 5V @ 3A 3.5mmOD/1.35mmID Barrel DC Jack connector&lt;br /&gt;
&lt;br /&gt;
* Quartz64 Model &amp;quot;B&amp;quot; SBC Schematic and PCB Board Resource:&lt;br /&gt;
** Quartz64 Model &amp;quot;B&amp;quot; SBC Schematic not yet available&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64%20model-B%20PCB%20placement.pdf Quartz64 Model &amp;quot;B&amp;quot; SBC PCB Connector placement PDF file]&lt;br /&gt;
&lt;br /&gt;
* Certification:&lt;br /&gt;
** Not yet available&lt;br /&gt;
&lt;br /&gt;
== Datasheets for Components and Peripherals ==&lt;br /&gt;
* Rockchip RK3566 SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Rockchip%20RK3566%20Datasheet%20V1.0-20201210.pdf Rockchip RK3566 ver 1.0 datasheet, already got release permission from Rockchip]&lt;br /&gt;
* LPDDR4 (200 Balls) SDRAM:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/SM512M32Z01MD2BNP(200BALL).pdf Micron LPDDR4 Mobile LPDDR4 Datasheet]&lt;br /&gt;
* eMMC information:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PINE64_eMMC_Module_20170719.pdf PINE64 eMMC module schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/usb%20emmc%20module%20adapter%20v2.pdf PINE64 USB adapter for eMMC module V2 schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/USB%20adapter%20for%20eMMC%20module%20PCB.tar PINE64 USB adapter for eMMC module PCB in JPEG]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/E-00517%20FORESEE_eMMC_NCEMAM8B-16G%20SPEC.pdf 16GB Foresee eMMC Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/SDINADF4-16-128GB-H%20data%20sheet%20v1.13.pdf 32GB/64GB/128GB SanDisk eMMC Datasheet]&lt;br /&gt;
* SPI NOR Flash information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/w25q128jv%20spi%20revc%2011162016.pdf WinBond 128Mb SPI Flash Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GD25Q128C-Rev2.5.pdf GigaDevice 128Mb SPI Flash Datasheet]&lt;br /&gt;
* E-ink Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-754-V3_ES103TC1%20Specification%20V3.0(Signed)-20190702.pdf Eink 10.3&amp;quot; 1872x1404 ES103TC1 Flex Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-828-V1_ED103TC2%20Formal%20Spec%20V1.0_20190514.pdf Eink 10.3&amp;quot; 1872x1404 ES103TC1 Glass Panel Specification]&lt;br /&gt;
* LCD Touch Screen Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/FY07024DI26A30-D_feiyang_LCD_panel.pdf 7.0&amp;quot; 1200x600 TFT-LCD Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/HK70DR2459-PG-V01.pdf Touch Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GT911%20Capacitive%20Touch%20Controller%20Datasheet.pdf GOODiX GT911 5-Point Capacitive Touch Controller Datasheet]&lt;br /&gt;
* Ethernet PHY information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/rtl8211e(g)-vb(vl)-cg_datasheet_1.6.pdf Realtek RTL8211 10/100/1000M Ethernet Transceiver]&lt;br /&gt;
* WiFi/BT module info:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/AP6256%20datasheet_V1.3_12202017.pdf AMPAK AP6256 11AC WiFi + Bluetooth5.0 Datasheet]]&lt;br /&gt;
* Enclosure information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/playbox_enclosure_20160426.stp Playbox Enclosure 3D file]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/ABS_enclosure_20160426.stp ABS Enclosure 3D file]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/pine64%20Die%20Cast%20casing-final.jpg Outdoor Aluminum Cast Dust-proof IP67 Enclosure Drawing]&lt;br /&gt;
* Connector information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/ePH.pdf 2.0mm PH Type connector specification use in Lithium Battery (VBAT) port and RTC Battery port]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/0.5FPC%20Front%20Open%20Connector%20H=1.5.pdf 0.5mm Pitch cover type FPC connector specification use in DSI port, TP port and CSI port]&lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
Information and ressources of the ongoing development effort for the Quartz64 can be found on the [[Quartz64 Development]] page.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/CrystalGamma/u-boot/tree/quartz64 CrystalGamma U-Boot GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== Android SDK ==&lt;br /&gt;
&lt;br /&gt;
=== Android 11 SDK  ===&lt;br /&gt;
* [http://files.pine64.org/SDK/Quartz64/QUARTZ64_SDK_android11.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 77c2ff57ea3372fb04da7fb49e17d12b&lt;br /&gt;
** File Size: 79.00GB&lt;br /&gt;
** Just the boot blobs (&amp;lt;1MB): [[File:Rk35-blobs.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]]&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9604</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9604"/>
		<updated>2021-03-26T11:00:07Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Frameworks/APIs/... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The PinePhone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/GLONASS/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurement Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[[File:Pp_sensors_block.png|thumb|500px|none|PinePhone navigation sensors]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400 kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the PinePhone's mainboard in different positions and orientations. For the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone.&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|500px|thumb|none|PinePhone sensor coordinates systems (red) and body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system. &amp;quot;iio-sensor-proxy expects the (sensor) readings to match those defined in the Linux IIO documentation, the Windows Integrating Motion and Orientation Sensors whitepaper, and the Android sensor documentation&amp;quot;[ref]. To transform the sensor coordinate systems into body coordinates, 'mount matrices' have to be defined.&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* EG25G: provides either UART or USB based interfaces for NMEA data&lt;br /&gt;
** /dev/ttyUSB2 : AT command interface&lt;br /&gt;
** /dev/ttyUSB1 : default NMEA data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TODO: ...]&lt;br /&gt;
&lt;br /&gt;
* Modem Manager&lt;br /&gt;
* ofono&lt;br /&gt;
* gpsd&lt;br /&gt;
* iio-sensor-proxy&lt;br /&gt;
* geoclue&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
=== Open issues ===&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
** how to enable/disable the service?&lt;br /&gt;
** update triggers?&lt;br /&gt;
*** network connectivity?&lt;br /&gt;
*** agps data valid?&lt;br /&gt;
&lt;br /&gt;
* Raw magnetometer handling&lt;br /&gt;
** Issue: Support polling/non-compensated magnetometers in iio-sensor-proxy&lt;br /&gt;
*** https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/issues/310&lt;br /&gt;
*** https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/merge_requests/316 (needs more work)&lt;br /&gt;
** Issue: raw magnetometer calibration implementation&lt;br /&gt;
**** https://appelsiini.net/2018/calibrate-magnetometer/&lt;br /&gt;
&lt;br /&gt;
* GPS/Compass App&lt;br /&gt;
** TODO: specification&lt;br /&gt;
&lt;br /&gt;
=== Frameworks/APIs/... ===&lt;br /&gt;
&lt;br /&gt;
* Modem Manager location API&lt;br /&gt;
** https://www.freedesktop.org/software/ModemManager/api/latest/gdbus-org.freedesktop.ModemManager1.Modem.Location.html&lt;br /&gt;
* oFono location API (experimental?)&lt;br /&gt;
** https://git.kernel.org/pub/scm/network/ofono/ofono.git/tree/doc/location-reporting-api.txt&lt;br /&gt;
* geoclue API&lt;br /&gt;
** https://www.freedesktop.org/software/geoclue/docs/gdbus-org.freedesktop.GeoClue2.Location.html&lt;br /&gt;
** https://www.freedesktop.org/software/geoclue/docs/libgeoclue/GClueLocation.html&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9603</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9603"/>
		<updated>2021-03-26T10:58:49Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Development */  document issues&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The PinePhone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/GLONASS/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurement Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[[File:Pp_sensors_block.png|thumb|500px|none|PinePhone navigation sensors]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400 kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the PinePhone's mainboard in different positions and orientations. For the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone.&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|500px|thumb|none|PinePhone sensor coordinates systems (red) and body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system. &amp;quot;iio-sensor-proxy expects the (sensor) readings to match those defined in the Linux IIO documentation, the Windows Integrating Motion and Orientation Sensors whitepaper, and the Android sensor documentation&amp;quot;[ref]. To transform the sensor coordinate systems into body coordinates, 'mount matrices' have to be defined.&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* EG25G: provides either UART or USB based interfaces for NMEA data&lt;br /&gt;
** /dev/ttyUSB2 : AT command interface&lt;br /&gt;
** /dev/ttyUSB1 : default NMEA data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TODO: ...]&lt;br /&gt;
&lt;br /&gt;
* Modem Manager&lt;br /&gt;
* ofono&lt;br /&gt;
* gpsd&lt;br /&gt;
* iio-sensor-proxy&lt;br /&gt;
* geoclue&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
=== Open issues ===&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
** how to enable/disable the service?&lt;br /&gt;
** update triggers?&lt;br /&gt;
*** network connectivity?&lt;br /&gt;
*** agps data valid?&lt;br /&gt;
&lt;br /&gt;
* Raw magnetometer handling&lt;br /&gt;
** Issue: Support polling/non-compensated magnetometers in iio-sensor-proxy&lt;br /&gt;
*** https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/issues/310&lt;br /&gt;
*** https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/merge_requests/316 (needs more work)&lt;br /&gt;
** Issue: raw magnetometer calibration implementation&lt;br /&gt;
**** https://appelsiini.net/2018/calibrate-magnetometer/&lt;br /&gt;
&lt;br /&gt;
* GPS/Compass App&lt;br /&gt;
** TODO: specification&lt;br /&gt;
&lt;br /&gt;
=== Frameworks/APIs/... ===&lt;br /&gt;
&lt;br /&gt;
* Modem Manager location API&lt;br /&gt;
** https://www.freedesktop.org/software/ModemManager/api/latest/gdbus-org.freedesktop.ModemManager1.Modem.Location.html&lt;br /&gt;
* oFono locaiton API (experimental?)&lt;br /&gt;
** https://git.kernel.org/pub/scm/network/ofono/ofono.git/tree/doc/location-reporting-api.txt&lt;br /&gt;
* geoclue API&lt;br /&gt;
** https://www.freedesktop.org/software/geoclue/docs/gdbus-org.freedesktop.GeoClue2.Location.html&lt;br /&gt;
** https://www.freedesktop.org/software/geoclue/docs/libgeoclue/GClueLocation.html&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9602</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9602"/>
		<updated>2021-03-26T10:23:53Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Frameworks/APIs/... */ some more API links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The PinePhone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/GLONASS/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurement Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[[File:Pp_sensors_block.png|thumb|500px|none|PinePhone navigation sensors]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400 kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the PinePhone's mainboard in different positions and orientations. For the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone.&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|500px|thumb|none|PinePhone sensor coordinates systems (red) and body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system. &amp;quot;iio-sensor-proxy expects the (sensor) readings to match those defined in the Linux IIO documentation, the Windows Integrating Motion and Orientation Sensors whitepaper, and the Android sensor documentation&amp;quot;[ref]. To transform the sensor coordinate systems into body coordinates, 'mount matrices' have to be defined.&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* EG25G: provides either UART or USB based interfaces for NMEA data&lt;br /&gt;
** /dev/ttyUSB2 : AT command interface&lt;br /&gt;
** /dev/ttyUSB1 : default NMEA data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TODO: ...]&lt;br /&gt;
&lt;br /&gt;
* Modem Manager&lt;br /&gt;
* ofono&lt;br /&gt;
* gpsd&lt;br /&gt;
* iio-sensor-proxy&lt;br /&gt;
* geoclue&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
=== Frameworks/APIs/... ===&lt;br /&gt;
&lt;br /&gt;
* Modem Manager location API&lt;br /&gt;
** https://www.freedesktop.org/software/ModemManager/api/latest/gdbus-org.freedesktop.ModemManager1.Modem.Location.html&lt;br /&gt;
* oFono locaiton API (experimental?)&lt;br /&gt;
** https://git.kernel.org/pub/scm/network/ofono/ofono.git/tree/doc/location-reporting-api.txt&lt;br /&gt;
* geoclue API&lt;br /&gt;
** https://www.freedesktop.org/software/geoclue/docs/gdbus-org.freedesktop.GeoClue2.Location.html&lt;br /&gt;
** https://www.freedesktop.org/software/geoclue/docs/libgeoclue/GClueLocation.html&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9601</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9601"/>
		<updated>2021-03-26T10:15:26Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Development */  add some links for location APIs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The PinePhone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/GLONASS/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurement Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[[File:Pp_sensors_block.png|thumb|500px|none|PinePhone navigation sensors]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400 kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the PinePhone's mainboard in different positions and orientations. For the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone.&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|500px|thumb|none|PinePhone sensor coordinates systems (red) and body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system. &amp;quot;iio-sensor-proxy expects the (sensor) readings to match those defined in the Linux IIO documentation, the Windows Integrating Motion and Orientation Sensors whitepaper, and the Android sensor documentation&amp;quot;[ref]. To transform the sensor coordinate systems into body coordinates, 'mount matrices' have to be defined.&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* EG25G: provides either UART or USB based interfaces for NMEA data&lt;br /&gt;
** /dev/ttyUSB2 : AT command interface&lt;br /&gt;
** /dev/ttyUSB1 : default NMEA data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TODO: ...]&lt;br /&gt;
&lt;br /&gt;
* Modem Manager&lt;br /&gt;
* ofono&lt;br /&gt;
* gpsd&lt;br /&gt;
* iio-sensor-proxy&lt;br /&gt;
* geoclue&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
=== Frameworks/APIs/... ===&lt;br /&gt;
&lt;br /&gt;
* Modem Manager location API&lt;br /&gt;
** https://www.freedesktop.org/software/ModemManager/api/latest/gdbus-org.freedesktop.ModemManager1.Modem.Location.html&lt;br /&gt;
* oFono locaiton API (experimental?)&lt;br /&gt;
** https://git.kernel.org/pub/scm/network/ofono/ofono.git/tree/doc/location-reporting-api.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64&amp;diff=9600</id>
		<title>Quartz64</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64&amp;diff=9600"/>
		<updated>2021-03-25T23:42:19Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Quartz64 board Information, Schematics, and Certifications */  add Quartz Model A schematic update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Quartz64 is the most recent Single Board Computer offering from Pine64, scheduled for release in 2021. It is powered by a Rockchip RK3566 Quad-Core ARM Cortex A55 64-Bit Processor with a MALI G-52 GPU.&lt;br /&gt;
&lt;br /&gt;
Key features include a PCIe x4 open ended slot (model A) or m.2 (model B) using one Gen2 lane electrically, and the use of LPDDR4 RAM.&lt;br /&gt;
&lt;br /&gt;
The Quartz64 is equipped with 2GB, 4GB or 8GB LPDDR4 system memory, and 128Mb SPI boot Flash. There is also an optional eMMC module (up to 128GB) and microSD slot for booting. The board is equipped with 1x USB 3.0 type A Host, 3x USB 2.0 Host, Gigabit Ethernet, SATA (model A), GPIO Bus, MiPi DSI interface, eink interface (model A), eDP interface (model A), touch Panel interface (model A), MiPi CSI interface, as well as many other device interfaces such as UART, SPI, I2C, for makers to integrate with sensors and other peripherals. Many different Operating Systems (OS) are freely available from the open source community, such as Linux (Ubuntu, Debian, Arch), BSD, and Android.&lt;br /&gt;
&lt;br /&gt;
== Software and OS Image Downloads ==&lt;br /&gt;
&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== SoC and Memory Specification ==&lt;br /&gt;
* Based on [https://www.rock-chips.com/a/en/products/RK35_Series/2021/0113/1274.html Rockchip RK3566]&lt;br /&gt;
[[File:RK3566_icon.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== CPU Architecture ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/processors/cortex-a/cortex-a55 Quad-core Cortex-A55@1.8GHz]&lt;br /&gt;
&lt;br /&gt;
* Quad-core ARM Cortex-A55 CPU&lt;br /&gt;
* AArch32 for full backward compatibility with Armv7&lt;br /&gt;
* ARM Neon Advanced SIMD (single instruction, multiple data) support for accelerated media and signal processing computation&lt;br /&gt;
* Include VFP hardware to support single and double-precision operations&lt;br /&gt;
* ARMv8 Cryptography Extensions&lt;br /&gt;
* Integrated 32KB L1 instruction cache, 32KB L1 data cache&lt;br /&gt;
* 512KB unified system L3 cache&lt;br /&gt;
* TrustZone technology support&lt;br /&gt;
&lt;br /&gt;
=== Graphic Process Unit GPU Capability ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/graphics-and-multimedia/mali-gpus/mali-g52-gpu Mali-G52 2EE Bifrost GPU@800MHz]&lt;br /&gt;
* 4x Multi-Sampling Anti-Aliasing (MSAA) with minimal performance drop &lt;br /&gt;
* 128KB L2 Cache configurations&lt;br /&gt;
* Support OpenGL ES 1.1, 2.0, and 3.2&lt;br /&gt;
* Support Vulkan 1.0 and 1.1&lt;br /&gt;
* Support OpenCL 2.0 Full Profile&lt;br /&gt;
* Support 1600Mpix/s fill rate when 800MHz clock frequency&lt;br /&gt;
* Support 38.4GLOPs when 800MHz clock frequency   &lt;br /&gt;
&lt;br /&gt;
=== Neural Process Unit NPU Capability ===&lt;br /&gt;
* Neural network acceleration engine with processing performance up to 0.8 TOPS&lt;br /&gt;
* Support integer 8, integer 16 convolution operation&lt;br /&gt;
* Support deep learning frameworks: TensorFlow, TF-lite, Pytorch, Caffe, ONNX, MXNet, Keras, Darknet&lt;br /&gt;
&lt;br /&gt;
=== System Memory ===&lt;br /&gt;
* RAM Memory Variants: 2GB - 8GB LPDDR4.&lt;br /&gt;
* SPI Flash: 128Mbit / 16MByte&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
* 10/100/1000Mbps Ethernet&lt;br /&gt;
* WiFi 802.11 b/g/n/ac with Bluetooth 5.0 (optional on model A, build in on model B)&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
* microSD - bootable, supports SDHC and SDXC, storage up to 2TB&lt;br /&gt;
* USB -	2 ports on model B, 3 ports on model A USB 2.0 Host port, 1 USB 3.0 Host port&lt;br /&gt;
* one native SATA 3.0 6Gb/s Port (only on model A, shared with USB 3.0 host port)&lt;br /&gt;
* optional eMMC module from 16GB up to 128GB&lt;br /&gt;
&lt;br /&gt;
=== Expansion Ports ===&lt;br /&gt;
* eDP - 4 lanes of 2.7Gbps, up to 2560x1600@60Hz (only on model A)&lt;br /&gt;
* DSI - Display Serial Interface, 4 lanes MiPi, up to 1440P on model A, 2 lanes MiPi, up to 1080p on model B &lt;br /&gt;
* CSI - CMOS Camera Interface, 4 lanes MiPi up to 8 mega pixel on model A, 2 lanes MiPi up to 5 mega pixel on model B &lt;br /&gt;
* TP - Touch Panel Port, SPI with interrupt on model A&lt;br /&gt;
* RTC - Real Time Clock Battery Connector&lt;br /&gt;
* VBAT - Lithium Battery Connector with temperature sensor input on model A&lt;br /&gt;
* Wifi/BT Module Header - SDIO 3.0 and UART on model A, build in Wifi/BT Module on model B&lt;br /&gt;
* 2x20 pins &amp;quot;Pi2&amp;quot; GPIO Header on model B, 2x10 pins GPO header on model A&lt;br /&gt;
* PCIe x4 open ended slot on model A, m.2 slot on model B, one Gen2 lane due to SoC constraints&lt;br /&gt;
&lt;br /&gt;
== Quartz64 board Information, Schematics, and Certifications ==&lt;br /&gt;
* Model &amp;quot;A&amp;quot; Baseboard Dimensions: 133mm x 80mm x 19mm&lt;br /&gt;
* Input Power: DC 12V @ 3A 5.5mmOD/2.1mmID center-positive Barrel DC Jack connector&lt;br /&gt;
&lt;br /&gt;
* Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic and PCB Board Resource:&lt;br /&gt;
** [https://wiki.pine64.org/images/3/31/Quartz64_model-A_schematic_v1.0_20201215.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic ver 1.0 20201215 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-A_schematic_v1.0_20201124.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic ver 1.0 20201124 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-A_V1.0_connector_placement.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC PCB Connector placement PDF file]&lt;br /&gt;
&lt;br /&gt;
* Model &amp;quot;B&amp;quot; Baseboard Dimensions: 85mm x 56mm x 18.8mm&lt;br /&gt;
* Input Power: DC 5V @ 3A 3.5mmOD/1.35mmID Barrel DC Jack connector&lt;br /&gt;
&lt;br /&gt;
* Quartz64 Model &amp;quot;B&amp;quot; SBC Schematic and PCB Board Resource:&lt;br /&gt;
** Quartz64 Model &amp;quot;B&amp;quot; SBC Schematic not yet available&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64%20model-B%20PCB%20placement.pdf Quartz64 Model &amp;quot;B&amp;quot; SBC PCB Connector placement PDF file]&lt;br /&gt;
&lt;br /&gt;
* Certification:&lt;br /&gt;
** Not yet available&lt;br /&gt;
&lt;br /&gt;
== Datasheets for Components and Peripherals ==&lt;br /&gt;
* Rockchip RK3566 SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Rockchip%20RK3566%20Datasheet%20V1.0-20201210.pdf Rockchip RK3566 ver 1.0 datasheet, already got release permission from Rockchip]&lt;br /&gt;
* LPDDR4 (200 Balls) SDRAM:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/SM512M32Z01MD2BNP(200BALL).pdf Micron LPDDR4 Mobile LPDDR4 Datasheet]&lt;br /&gt;
* eMMC information:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PINE64_eMMC_Module_20170719.pdf PINE64 eMMC module schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/usb%20emmc%20module%20adapter%20v2.pdf PINE64 USB adapter for eMMC module V2 schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/USB%20adapter%20for%20eMMC%20module%20PCB.tar PINE64 USB adapter for eMMC module PCB in JPEG]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/E-00517%20FORESEE_eMMC_NCEMAM8B-16G%20SPEC.pdf 16GB Foresee eMMC Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/SDINADF4-16-128GB-H%20data%20sheet%20v1.13.pdf 32GB/64GB/128GB SanDisk eMMC Datasheet]&lt;br /&gt;
* SPI NOR Flash information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/w25q128jv%20spi%20revc%2011162016.pdf WinBond 128Mb SPI Flash Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GD25Q128C-Rev2.5.pdf GigaDevice 128Mb SPI Flash Datasheet]&lt;br /&gt;
* E-ink Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-754-V3_ES103TC1%20Specification%20V3.0(Signed)-20190702.pdf Eink 10.3&amp;quot; 1872x1404 ES103TC1 Flex Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-828-V1_ED103TC2%20Formal%20Spec%20V1.0_20190514.pdf Eink 10.3&amp;quot; 1872x1404 ES103TC1 Glass Panel Specification]&lt;br /&gt;
* LCD Touch Screen Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/FY07024DI26A30-D_feiyang_LCD_panel.pdf 7.0&amp;quot; 1200x600 TFT-LCD Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/HK70DR2459-PG-V01.pdf Touch Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GT911%20Capacitive%20Touch%20Controller%20Datasheet.pdf GOODiX GT911 5-Point Capacitive Touch Controller Datasheet]&lt;br /&gt;
* Ethernet PHY information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/rtl8211e(g)-vb(vl)-cg_datasheet_1.6.pdf Realtek RTL8211 10/100/1000M Ethernet Transceiver]&lt;br /&gt;
* WiFi/BT module info:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/AP6256%20datasheet_V1.3_12202017.pdf AMPAK AP6256 11AC WiFi + Bluetooth5.0 Datasheet]]&lt;br /&gt;
* Enclosure information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/playbox_enclosure_20160426.stp Playbox Enclosure 3D file]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/ABS_enclosure_20160426.stp ABS Enclosure 3D file]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/pine64%20Die%20Cast%20casing-final.jpg Outdoor Aluminum Cast Dust-proof IP67 Enclosure Drawing]&lt;br /&gt;
* Connector information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/ePH.pdf 2.0mm PH Type connector specification use in Lithium Battery (VBAT) port and RTC Battery port]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/0.5FPC%20Front%20Open%20Connector%20H=1.5.pdf 0.5mm Pitch cover type FPC connector specification use in DSI port, TP port and CSI port]&lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
* [https://github.com/CrystalGamma/u-boot/tree/quartz64 CrystalGamma U-Boot GitHub Page]&lt;br /&gt;
&lt;br /&gt;
== Android SDK ==&lt;br /&gt;
&lt;br /&gt;
=== Android 11 SDK  ===&lt;br /&gt;
* [http://files.pine64.org/SDK/Quartz64/QUARTZ64_SDK_android11.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 77c2ff57ea3372fb04da7fb49e17d12b&lt;br /&gt;
** File Size: 79.00GB&lt;br /&gt;
** Just the boot blobs (&amp;lt;1MB): [[File:Rk35-blobs.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]]&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=File:Quartz64_model-A_schematic_v1.0_20201215.pdf&amp;diff=9599</id>
		<title>File:Quartz64 model-A schematic v1.0 20201215.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=File:Quartz64_model-A_schematic_v1.0_20201215.pdf&amp;diff=9599"/>
		<updated>2021-03-25T23:30:43Z</updated>

		<summary type="html">&lt;p&gt;Xalius: Quartz64 model A V1.0 update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Quartz64 model A V1.0 update&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9541</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9541"/>
		<updated>2021-03-20T20:04:28Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Userspace services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[[File:Pp_sensors_block.png|thumb|500px|none|Pinephone navigation sensors]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|500px|thumb|none|Pinephone sensor coordinates systems (red) and body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system. &amp;quot;iio-sensor-proxy expects the (sensor) readings to match those defined in the Linux IIO documentation, the Windows Integrating Motion and Orientation Sensors whitepaper, and the Android sensor documentation&amp;quot;[ref]. To transform the sensor coordinate systems into body coordinates, 'mount matrices' have to be defined.&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* EG25G: provides either UART or USB based interfaces for NMEA data&lt;br /&gt;
** /dev/ttyUSB2 : AT command interface&lt;br /&gt;
** /dev/ttyUSB1 : default NMEA data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TODO: ...]&lt;br /&gt;
&lt;br /&gt;
* Modem Manager&lt;br /&gt;
* ofono&lt;br /&gt;
* gpsd&lt;br /&gt;
* iio-sensor-proxy&lt;br /&gt;
* geoclue&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9540</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9540"/>
		<updated>2021-03-20T20:02:31Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[[File:Pp_sensors_block.png|thumb|500px|none|Pinephone navigation sensors]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|500px|thumb|none|Pinephone sensor coordinates systems (red) and body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system. &amp;quot;iio-sensor-proxy expects the (sensor) readings to match those defined in the Linux IIO documentation, the Windows Integrating Motion and Orientation Sensors whitepaper, and the Android sensor documentation&amp;quot;[ref]. To transform the sensor coordinate systems into body coordinates, 'mount matrices' have to be defined.&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* EG25G: provides either UART or USB based interfaces for NMEA data&lt;br /&gt;
** /dev/ttyUSB2 : AT command interface&lt;br /&gt;
** /dev/ttyUSB1 : default NMEA data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9539</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9539"/>
		<updated>2021-03-20T19:48:12Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Sensor reference frames */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[[File:Pp_sensors_block.png|thumb|500px|none|Pinephone navigation sensors]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|500px|thumb|none|Pinephone sensor coordinates systems (red) and body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system. &amp;quot;iio-sensor-proxy expects the (sensor) readings to match those defined in the Linux IIO documentation, the Windows Integrating Motion and Orientation Sensors whitepaper, and the Android sensor documentation&amp;quot;[ref]. To transform the sensor coordinate systems into body coordinates, 'mount matrices' have to be defined.&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* EG25G: &lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9538</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9538"/>
		<updated>2021-03-20T19:45:17Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Overview */ Add block diagram mockup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[[File:Pp_sensors_block.png|thumb|500px|none|Pinephone navigation sensors]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|400px|thumb|none|Pinephone sensor coordinates systems (red) and body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system. &amp;quot;iio-sensor-proxy expects the (sensor) readings to match those defined in the Linux IIO documentation, the Windows Integrating Motion and Orientation Sensors whitepaper, and the Android sensor documentation&amp;quot;[ref]. To transform the sensor coordinate systems into body coordinates, 'mount matrices' have to be defined.&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* EG25G: &lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=File:Pp_sensors_block.png&amp;diff=9537</id>
		<title>File:Pp sensors block.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=File:Pp_sensors_block.png&amp;diff=9537"/>
		<updated>2021-03-20T19:40:12Z</updated>

		<summary type="html">&lt;p&gt;Xalius: Pinephone navigation sensors block diagram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Pinephone navigation sensors block diagram&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{PD|PD}}&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9536</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9536"/>
		<updated>2021-03-20T18:11:10Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Sensor reference frames */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|400px|thumb|none|Pinephone sensor coordinates systems (red) and body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system. &amp;quot;iio-sensor-proxy expects the (sensor) readings to match those defined in the Linux IIO documentation, the Windows Integrating Motion and Orientation Sensors whitepaper, and the Android sensor documentation&amp;quot;[ref]. To transform the sensor coordinate systems into body coordinates, 'mount matrices' have to be defined.&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* EG25G: &lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9535</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9535"/>
		<updated>2021-03-20T18:08:01Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Sensor reference frames */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|400px|thumb|none|Pinephone sensor coordinates systems (red) and body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system. &amp;quot;iio-sensor-proxy expects the (sensor) readings to match those defined in the Linux IIO documentation, the Windows Integrating Motion and Orientation Sensors whitepaper, and the Android sensor documentation&amp;quot;[ref]. To transform the sensor coordinates systems into body coordinates, 'mount matrices' have to be defined.&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* EG25G: &lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9534</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9534"/>
		<updated>2021-03-20T17:59:19Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Sensor reference frames */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|400px|thumb|none|Pinephone sensor coordinates systems (red) to body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* EG25G: &lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9533</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9533"/>
		<updated>2021-03-20T17:58:44Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Sensor reference frames */  add sensor coordinate systems picture&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[[File:pp coordinates.png|400px|thumb|left|Pinephone sensor coordinates systems (red) to body coordinate system (cyan)]]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* EG25G: &lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=File:Pp_coordinates.png&amp;diff=9532</id>
		<title>File:Pp coordinates.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=File:Pp_coordinates.png&amp;diff=9532"/>
		<updated>2021-03-20T17:56:46Z</updated>

		<summary type="html">&lt;p&gt;Xalius: Pinephone sensor coordinate systems&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Pinephone sensor coordinate systems&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9531</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9531"/>
		<updated>2021-03-20T17:08:32Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* OS level services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* EG25G: &lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userspace services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9530</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9530"/>
		<updated>2021-03-20T16:44:36Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* EG25G: &lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9529</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9529"/>
		<updated>2021-03-20T16:42:25Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device2: mpu6050 (buffer capable)&lt;br /&gt;
		9 channels found:&lt;br /&gt;
			accel_x:  (input, index: 0, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: -2102&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 912&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_y:  (input, index: 1, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 941&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 516&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			accel_z:  (input, index: 2, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			6 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 1242&lt;br /&gt;
				attr  1: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
				attr  2: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  3: raw value: 15860&lt;br /&gt;
				attr  4: scale value: 0.000598&lt;br /&gt;
				attr  5: scale_available value: 0.000598 0.001196 0.002392 0.004785&lt;br /&gt;
			temp:  (input)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: offset value: 12420&lt;br /&gt;
				attr  1: raw value: -1073&lt;br /&gt;
				attr  2: scale value: 2.941176&lt;br /&gt;
			anglvel_x:  (input, index: 4, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: -32&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_y:  (input, index: 5, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 4&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			anglvel_z:  (input, index: 6, format: be:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			5 channel-specific attributes found:&lt;br /&gt;
				attr  0: calibbias value: 0&lt;br /&gt;
				attr  1: mount_matrix value: 0, 1, 0; -1, 0, 0; 0, 0, -1&lt;br /&gt;
				attr  2: raw value: 0&lt;br /&gt;
				attr  3: scale value: 0.001064724&lt;br /&gt;
				attr  4: scale_available value: 0.000133090 0.000266181 0.000532362 0.001064724&lt;br /&gt;
			timestamp:  (input, index: 7, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
			gyro:  (input, WARN:iio_channel_get_type()=UNKNOWN)&lt;br /&gt;
			1 channel-specific attributes found:&lt;br /&gt;
				attr  0: matrix value: 0, 0, 0; 0, 0, 0; 0, 0, 0&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 50&lt;br /&gt;
				attr  2: sampling_frequency_available value: 10 20 50 100 200 500&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger1(mpu6050-dev2)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9528</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9528"/>
		<updated>2021-03-20T16:39:05Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2C, industrialio&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialio&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9527</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9527"/>
		<updated>2021-03-20T16:38:00Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
* MPU6050:inv_mpu6050, inv_mpu6050_i2C, industrialio&lt;br /&gt;
&lt;br /&gt;
* LIS3MDL: st_sensors, st_sensors_i2c, st_magn, st_magn_i2c, industrialios&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	iio:device1: lis3mdl (buffer capable)&lt;br /&gt;
		4 channels found:&lt;br /&gt;
			magn_x:  (input, index: 0, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 6766&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_y:  (input, index: 1, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: -2046&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			magn_z:  (input, index: 2, format: le:S16/16&amp;gt;&amp;gt;0)&lt;br /&gt;
			3 channel-specific attributes found:&lt;br /&gt;
				attr  0: raw value: 12726&lt;br /&gt;
				attr  1: scale value: 0.000146&lt;br /&gt;
				attr  2: scale_available value: 0.000146 0.000292 0.000438 0.000584&lt;br /&gt;
			timestamp:  (input, index: 3, format: le:S64/64&amp;gt;&amp;gt;0)&lt;br /&gt;
		3 device-specific attributes found:&lt;br /&gt;
				attr  0: current_timestamp_clock value: realtime&lt;br /&gt;
				attr  1: sampling_frequency value: 1&lt;br /&gt;
				attr  2: sampling_frequency_available value: 1 2 3 5 10 20 40 80&lt;br /&gt;
		2 buffer-specific attributes found:&lt;br /&gt;
				attr  0: data_available value: 0&lt;br /&gt;
				attr  1: watermark value: 1&lt;br /&gt;
		Current trigger: trigger0(lis3mdl-trigger)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9526</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9526"/>
		<updated>2021-03-20T16:08:53Z</updated>

		<summary type="html">&lt;p&gt;Xalius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scale range&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== VTC AF8133J Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±12/±22 gauss selectable magnetic full scale range&lt;br /&gt;
* 400Hz max. update rate&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9522</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9522"/>
		<updated>2021-03-20T15:00:22Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;br /&gt;
* Compass App&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9521</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9521"/>
		<updated>2021-03-20T14:57:08Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
[TODO: pure-maps, navit, ...]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9520</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9520"/>
		<updated>2021-03-20T14:56:37Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Tools/Utilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
[TODO: minicom, gpsmon, monitor-sensor, iio-utils...]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9519</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9519"/>
		<updated>2021-03-20T14:53:16Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* ST LIS3MDL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL Magnetometer/Compass ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9518</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9518"/>
		<updated>2021-03-20T14:49:28Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Tools/Utilities ===&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9517</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9517"/>
		<updated>2021-03-20T14:47:49Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
[TODO: Open issues, tasks, projects]&lt;br /&gt;
&lt;br /&gt;
* AGPS integration&lt;br /&gt;
* Raw magnetometer data + calibration in iio-sensor-proxy&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9516</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9516"/>
		<updated>2021-03-20T14:46:22Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* OS level services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: modem manager, ofono, gpsd, iio-sensor-proxy, geoclue]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9515</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9515"/>
		<updated>2021-03-20T14:44:58Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* OS level services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
&lt;br /&gt;
[TOOD: gpsd, geoclue, iio-sensor-proxy, dbus]&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9514</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9514"/>
		<updated>2021-03-20T14:36:02Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
&lt;br /&gt;
[TODO: i2cdev, linux-iio, support matrix]&lt;br /&gt;
&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9513</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9513"/>
		<updated>2021-03-20T14:29:03Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9512</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9512"/>
		<updated>2021-03-20T14:28:31Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Quectel EG25G Modem / GNSS Receiver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid in orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints, antenna location]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9511</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9511"/>
		<updated>2021-03-20T14:27:47Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Sensor reference frames */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid in orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
The sensors are mounted on the Pinephone's main board in different positions and orientations, for the purpose of orientation and navigation it is important to know the relationship between the sensor coordinate frames and the body frame of the phone...&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
As a basis for software development, a common body coordinate system has to be established along with it's relation to a world coordinate system...&lt;br /&gt;
&lt;br /&gt;
[TODO: explain body reference choices, north-east-down world coordinates]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9510</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9510"/>
		<updated>2021-03-20T14:23:09Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* ST LIS3MDL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid in orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* ±4/±8/±12/±16 gauss selectable magnetic full scales&lt;br /&gt;
* 16-bit data output&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9509</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9509"/>
		<updated>2021-03-20T14:16:31Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid in orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add interfaces, constraints]&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
Key features:&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Sensor reference frames ===&lt;br /&gt;
&lt;br /&gt;
[TODO: add sensor mounting positions/orientation in respect to body frame, introduce coordinate systems]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9508</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9508"/>
		<updated>2021-03-20T14:13:23Z</updated>

		<summary type="html">&lt;p&gt;Xalius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRAFT&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid in orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
=== Sensor &lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9507</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9507"/>
		<updated>2021-03-20T14:12:45Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that enable or aid in orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
=== Sensor &lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9506</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9506"/>
		<updated>2021-03-20T14:10:46Z</updated>

		<summary type="html">&lt;p&gt;Xalius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that can facilitate or aid in orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[TODO: add block diagram]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
=== Sensor &lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9505</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9505"/>
		<updated>2021-03-20T14:08:00Z</updated>

		<summary type="html">&lt;p&gt;Xalius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that can facilitate or aid in orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL ===&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Drivers ===&lt;br /&gt;
=== OS level services ===&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9504</id>
		<title>PinePhone Sensors and Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Sensors_and_Navigation&amp;diff=9504"/>
		<updated>2021-03-20T14:03:23Z</updated>

		<summary type="html">&lt;p&gt;Xalius: Draft: Pinephone Sensors and Navigation (WIP)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone contains various components that can facilitate or aid in orientation and navigation tasks.&lt;br /&gt;
&lt;br /&gt;
* Multi-GNSS Receiver as part of the cellular modem (GPS/Galileo/Glonass/BeiDou)&lt;br /&gt;
* IMU (Inertial Measurment Unit), combined Accelerometer and Gyroscope sensor (MPU6050)&lt;br /&gt;
* Magnetometer (LIS3MDL or AF8133J)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Quectel EG25G Modem / GNSS Receiver ===&lt;br /&gt;
&lt;br /&gt;
=== Invensense/TDK MPU6050 IMU ===&lt;br /&gt;
&lt;br /&gt;
* Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with selectable range of ±250, ±500, ±1000, and ±2000°/sec&lt;br /&gt;
* Digital-output triple-axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
* 400kHz Fast Mode I2C for communicating with all registers&lt;br /&gt;
&lt;br /&gt;
=== ST LIS3MDL&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone&amp;diff=9498</id>
		<title>PinePhone</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone&amp;diff=9498"/>
		<updated>2021-03-19T16:52:53Z</updated>

		<summary type="html">&lt;p&gt;Xalius: /* GPS / GNSS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The PinePhone is a smartphone created by Pine64. The PinePhone is capable of running mainline Linux and is supported by many partner projects. The Braveheart Edition of the PinePhone was the first publicly available version of the phone; it shipped without a fully functional OS and was geared specifically toward early adopters. The Braveheart Edition's successor is the Community Edition. The Community Edition became available in June 2020. The Community Edition will be available for at least five years after its initial release.&lt;br /&gt;
&lt;br /&gt;
== First time installation ==&lt;br /&gt;
&lt;br /&gt;
[[File:Pinephone_rendering_blank_new.png|500px|thumb|right|Rendering of the PinePhone.]]&lt;br /&gt;
&lt;br /&gt;
{{Hint|The default PIN for Plasma Mobile on Manjaro is '''123456'''.}}&lt;br /&gt;
&lt;br /&gt;
From the factory the battery has a sticker on it that isolates the battery from the phone. The battery '''will not''' charge until this is removed.&lt;br /&gt;
&lt;br /&gt;
[[File:Pinephone_warning.png|none|left|400px]]&lt;br /&gt;
&lt;br /&gt;
To remove the sticker after unboxing the phone:&lt;br /&gt;
&lt;br /&gt;
# Remove the back panel using the notch in the corner of the back cover&lt;br /&gt;
# Remove the battery &lt;br /&gt;
# Peel off the clear plastic sticker below it, which isolates the charging contacts&lt;br /&gt;
# Reinsert the battery&lt;br /&gt;
&lt;br /&gt;
See [[PinePhone#Battery|Battery]] for more information.&lt;br /&gt;
&lt;br /&gt;
The PinePhone's SIM slot requires a micro SIM, please do not insert a nano SIM without an adapter. An adapter from a nano to a micro SIM might be included under orange tape in the camera notch of the phone's packaging. The SIM card has to be placed in the lower slot, while the microSD has to be placed in the upper slot, as pictured here:&lt;br /&gt;
&lt;br /&gt;
[[File:Pinephone_backside.png|none|left|400px]]&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
&lt;br /&gt;
'''Dimensions:''' 160.5 x 76.6 x 9.2mm &amp;lt;br&amp;gt;&lt;br /&gt;
'''Weight:''' Between 180-200 grams &amp;lt;br&amp;gt;&lt;br /&gt;
'''SIM Card:''' Micro-SIM &amp;lt;br&amp;gt;&lt;br /&gt;
'''Display:'''&lt;br /&gt;
: '''Size:''' 5.95 inches (151mm) diagonal&lt;br /&gt;
: '''Type:''' HD IPS capacitive touchscreen, 16M colors&lt;br /&gt;
: '''Resolution:''' 1440x720, 18:9 ratio &amp;lt;br&amp;gt;&lt;br /&gt;
'''System on Chip:''' [https://linux-sunxi.org/A64 Allwinner A64] &amp;lt;br&amp;gt;&lt;br /&gt;
'''RAM:''' 2GB or 3GB LPDDR3 SDRAM&amp;lt;br&amp;gt;&lt;br /&gt;
'''Internal Storage:''' 16GB or 32GB eMMC, extendable up to 2TB via microSD, supports SDHC and SDXC &amp;lt;br&amp;gt;&lt;br /&gt;
'''Back Camera:''' Single 5MP, 1/4&amp;quot;, LED Flash &amp;lt;br&amp;gt;&lt;br /&gt;
'''Selfie Camera:''' Single 2MP, f/2.8, 1/5&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
'''Sound:''' Loudspeaker, 3.5mm jack &amp;amp; mic (jack doubles as hardware UART if killswitch 6 is deactivated) &amp;lt;br&amp;gt;&lt;br /&gt;
'''Communication: G25-G'''&lt;br /&gt;
: '''LTE:''' B1, B2, B3, B4, B5, B7, B8, B12, B13, B18, B19, B20, B25, B26, B28, B38, B39, B40, B41&lt;br /&gt;
: '''WCDMA:''' B1, B2, B4, B5, B6, B8, B19&lt;br /&gt;
: '''GSM:''' 850, 900, 1800, 1900 (MHz)&lt;br /&gt;
: '''WLAN:''' Wi-Fi 802.11 b/g/n, single-band, hotspot&lt;br /&gt;
: '''Bluetooth:''' 4.0, A2DP&lt;br /&gt;
: '''GNSS:''' GPS/GLONASS/BeiDou/Galileo/QZSS, with A-GPS&lt;br /&gt;
'''Sensors:''' Accelerometer, gyro, proximity, ambient light, compass &amp;lt;br&amp;gt;&lt;br /&gt;
'''Killswitches:''' Modem, WiFi &amp;amp; Bluetooth, Microphone, Cameras &amp;lt;br&amp;gt;&lt;br /&gt;
'''Battery:''' Lithium-ion, rated capacity 2800mAh (10.64Wh), typical capacity 3000mAh (11.40Wh) (nominally replaceable with any Samsung J7 form-factor battery) &amp;lt;br&amp;gt;&lt;br /&gt;
'''I/O:''' USB Type-C, USB Host, DisplayPort Alternate Mode output, 15W 5V 3A Quick Charge, follows USB PD specification&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Component&lt;br /&gt;
! Model&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&lt;br /&gt;
| Goodix GT917S&lt;br /&gt;
|-&lt;br /&gt;
| Rear camera&lt;br /&gt;
| OmniVision OV5640&lt;br /&gt;
|-&lt;br /&gt;
| Camera flash&lt;br /&gt;
| SGMICRO SGM3140&lt;br /&gt;
|-&lt;br /&gt;
| Front camera&lt;br /&gt;
| GalaxyCore GC2145&lt;br /&gt;
|-&lt;br /&gt;
| LCD&lt;br /&gt;
| Xingbangda XBD599&lt;br /&gt;
|-&lt;br /&gt;
| WiFi&lt;br /&gt;
| Realtek RTL8723CS&lt;br /&gt;
|-&lt;br /&gt;
| Bluetooth&lt;br /&gt;
| Realtek RTL8723CS&lt;br /&gt;
|-&lt;br /&gt;
| Modem&lt;br /&gt;
| Quectel EG25-G&lt;br /&gt;
|-&lt;br /&gt;
| GNSS/GPS&lt;br /&gt;
| Quectel EG25-G&lt;br /&gt;
|-&lt;br /&gt;
| Magnetometer&lt;br /&gt;
| ST LIS3MDL&lt;br /&gt;
|-&lt;br /&gt;
| Ambient light / Proximity&lt;br /&gt;
| SensorTek STK3335&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer / Gyroscope&lt;br /&gt;
| InvenSense MPU-6050&lt;br /&gt;
|-&lt;br /&gt;
| Vibration motor&lt;br /&gt;
| Unknown model&lt;br /&gt;
|-&lt;br /&gt;
| Notification LED&lt;br /&gt;
| LED0603RGB&lt;br /&gt;
|-&lt;br /&gt;
| Volume buttons&lt;br /&gt;
| Buttons connected to the KEYADC&lt;br /&gt;
|-&lt;br /&gt;
| Power button&lt;br /&gt;
| X-Powers AXP803&lt;br /&gt;
|-&lt;br /&gt;
| Battery fuel gauge&lt;br /&gt;
| X-Powers AXP803&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See the [[PinePhone_component_list|PinePhone Component List]].&lt;br /&gt;
&lt;br /&gt;
== Hardware revisions ==&lt;br /&gt;
&lt;br /&gt;
# [[Project Anakin]]&lt;br /&gt;
# [[Project Don't be evil|&amp;quot;Project Don't Be Evil&amp;quot; devkit]]&lt;br /&gt;
# [[PinePhone v1.0 - Dev|PinePhone v1.0 - Developer batch]]&lt;br /&gt;
# [[PinePhone v1.1 - Braveheart]]&lt;br /&gt;
# [[PinePhone v1.2‎]] - Ubports Community Edition&lt;br /&gt;
# [[PinePhone v1.2a]] - postmarketOS Community Edition&lt;br /&gt;
# [[PinePhone v1.2b]] - Manjaro Community Edition, KDE Community Edition, Mobian Community Edition&lt;br /&gt;
&lt;br /&gt;
== Hardware accessory ==&lt;br /&gt;
&lt;br /&gt;
=== PinePhone hardware accessory compatibility ===&lt;br /&gt;
See [[PinePhone Hardware Accessory Compatibility]] for a list of devices working with the PinePhone (depending on their OS support).&lt;br /&gt;
&lt;br /&gt;
=== USB-C connector ===&lt;br /&gt;
&lt;br /&gt;
The USB-C can be used to power the device, and offers USB2 host and OTG possibilities, and also can make use of the USB-C capability to integrate HDMI signals. Some USB-C hubs are available that offer power throughput, USB connection, HDMI port and Ethernet connection.&lt;br /&gt;
&lt;br /&gt;
=== Pogo pins ===&lt;br /&gt;
&lt;br /&gt;
[[File:Pinephone pogo.png|400px|thumb|right|The pogo pins, as visible under the back cover.]]&lt;br /&gt;
&lt;br /&gt;
The PinePhone has six pogo pins on the back allowing for custom hardware extensions such as wireless charging, an IR blaster, a keyboard extension or extended battery case. The pogo pins provide access to an interrupt line, power inputs/outputs and an I2C interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Interrupt&lt;br /&gt;
| SDA&lt;br /&gt;
| SCL&lt;br /&gt;
|-&lt;br /&gt;
| DCIN&lt;br /&gt;
| USB-5V&lt;br /&gt;
| GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
DCIN and USB-5V are the names used in the schematics. The actual behavior of these pogo pins is not obvious based on their names. DCIN is connected both to the VBUS line of the USB Type-C connector, and to the ACIN/VBUS inputs on the PMIC. This means that, depending on a number of factors, DCIN may be at 0&amp;amp;nbsp;V or 5&amp;amp;nbsp;V. USB-5V is connected at the output of an LP6226 DC/DC boost converter (5&amp;amp;nbsp;V), which in turn is fed by the PS output of the PMIC. The boost converter is enabled or disabled by a GPIO output from the A64 SoC, controlled by software (e.g., Linux kernel). Depending on inputs and decision made by the PMIC, PS may be at the battery voltage (fed &amp;quot;directly&amp;quot; by the battery through a transistor controlled by the PMIC), or at the &amp;quot;USB&amp;quot; voltage (fed by the PMIC's ACIN/VBUS inputs). This means that depending on a number of factors, USB-5V may be at battery voltage (between 3.0&amp;amp;nbsp;V and 4.3&amp;amp;nbsp;V), or at 5&amp;amp;nbsp;V.&lt;br /&gt;
&lt;br /&gt;
Because the PinePhone may act as a USB host (providing 5&amp;amp;nbsp;V at the USB Type-C connector's VBUS to a connected device) or as a USB device (drawing from a 5&amp;amp;nbsp;V source on the USB Type-C connector's VBUS), DCIN is actually not strictly an input nor an output. Some community analysis of the PinePhone schematic (and some testing) indicates that you can connect a 5&amp;amp;nbsp;V power supply to DCIN in order to power the phone at the PMIC's ACIN/VBUS inputs (and, as a side effect, charge the battery). This may not be safe to do in all conditions, e.g., when the phone is acting as a USB host to a connected USB device. It should also be safe to use DCIN as a power output from the PinePhone, e.g., when a USB Type-C charger is connected, you can draw current directly from the USB Type-C port's VBUS, which is provided by the charger. Please note that, when using DCIN as an output from the PinePhone, DCIN isn't &amp;quot;always on&amp;quot;; it may be 0&amp;amp;nbsp;V. It is currently not documented on how much current can be safely drawn.&lt;br /&gt;
&lt;br /&gt;
USB-5V should be safe to use as an &amp;quot;always on&amp;quot; power output from the PinePhone. Depending on a number of factors, voltage may be from 3&amp;amp;nbsp;V to 5&amp;amp;nbsp;V; thus, if you are using USB-5V to power your pogo-pins expansion board, you will probably need to use DC/DC converters/regulators as appropriate. USB-5V is on even while the A64 SoC is powered down.&lt;br /&gt;
&lt;br /&gt;
The I2C and interrupt lines have pull-ups on the phone side. The I2C lines are pulled up to 3v3 by the phone.&lt;br /&gt;
&lt;br /&gt;
For a breakout board see [https://github.com/SMR404/PinephonePogoBreakout here]. For an example project see Martijn's blog post [https://blog.brixit.nl/making-a-backcover-extension-for-the-pinephone/ &amp;lt;i&amp;gt;&amp;quot;Making a backcover extension for the PinePhone&amp;quot;&amp;lt;/i&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
=== Back cover ===&lt;br /&gt;
A step file for the back cover for creating custom cases is freely available [https://files.pine64.org/doc/PinePhone/PinePhone%20Back%20Cover%20ver%200.5.stp here].&lt;br /&gt;
&lt;br /&gt;
=== Community-built accessories ===&lt;br /&gt;
* [https://www.thingiverse.com/thing:4654013 PinePhone Development Stand at thingverse]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4658870 PinePhone Hard Case at thingverse]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4651177 PinePhone Hard Case at thingverse]&lt;br /&gt;
&lt;br /&gt;
=== Serial console ===&lt;br /&gt;
&lt;br /&gt;
The PinePhone has a serial port in the headphone connector, it's activated by the 6th contact on the dipswitch. If the switch is set to &amp;quot;on&amp;quot;, the headphone connector is in audio mode, if it is set to &amp;quot;off&amp;quot; it's in UART mode. The UART serial connection can also be used for communication with other devices from the PinePhone.&lt;br /&gt;
&lt;br /&gt;
The UART is 115200n8.&lt;br /&gt;
&lt;br /&gt;
The pinout for the serial connector is:&lt;br /&gt;
&lt;br /&gt;
* Tip: RX&lt;br /&gt;
* Ring: TX&lt;br /&gt;
* Sleeve: GND&lt;br /&gt;
&lt;br /&gt;
[[File:PinePhone_Serial_Cable.png|none|400px]]&lt;br /&gt;
&lt;br /&gt;
You can buy a serial debug cable from the [https://pine64.com/product/pinebook-pinephone-pinetab-serial-console/ Pine64 Store]. The store cable uses a 4 ring plug, as seen in the [https://files.pine64.org/doc/pinebook/guide/Pinebook_Earphone_Serial_Console_Developer_Guide.pdf here], but a 3 ring plug works just as well. The cable uses a CH340 chipset based serial to USB converter, but any 3.3v serial connection can be used. Because it is a &amp;quot;host&amp;quot;/DTE it means that you need a ''cross modem cable'' ([https://en.wikipedia.org/wiki/Null_modem Null Modem]) with TX on Tip to be connected to RX. A cable like e.g. [https://www.ftdichip.com/Products/Cables/USBTTLSerial.htm FTDI TTL-232R-3V3-AJ] which has TX on Tip and RX on Ring fits perfectly.&lt;br /&gt;
&lt;br /&gt;
== Killswitch configuration ==&lt;br /&gt;
&lt;br /&gt;
[[File:PinePhone Kill Interruptors de Maquinari del PinePhone 4529.jpg|320px|thumb|right|Detail of DIP switch]]&lt;br /&gt;
&lt;br /&gt;
The PinePhone features six switches that can be used to configure its hardware. They are numbered 1-6, with switch 1 located nearest to the modem. Their &amp;quot;on&amp;quot; position is toward the top of the phone.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Number&lt;br /&gt;
! Name&lt;br /&gt;
! Explanation&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Modem&lt;br /&gt;
| Pulls Q1501 gate up (FET killing modem power)&lt;br /&gt;
| &amp;quot;On&amp;quot; enables 2G/3G/4G communication and GNSS hardware, &amp;quot;off&amp;quot; disables it.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| WiFi / Bluetooth&lt;br /&gt;
| Pulls up CHIP_EN&lt;br /&gt;
| &amp;quot;On&amp;quot; enables WiFi and Bluetooth communication hardware, &amp;quot;off&amp;quot; disables it.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Microphone&lt;br /&gt;
| Breaks microphone bias voltage from the SoC&lt;br /&gt;
| &amp;quot;On&amp;quot; enables audio input from on-board microphones (not 3.5mm jack), &amp;quot;off&amp;quot; disables it.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Rear camera&lt;br /&gt;
| Pulls up PWDN on OV5640 &lt;br /&gt;
| &amp;quot;On&amp;quot; enables the rear camera, &amp;quot;off&amp;quot; disables it.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Front camera&lt;br /&gt;
| Pulls up PWDN on GC2145&lt;br /&gt;
| &amp;quot;On&amp;quot; enables the front camera, &amp;quot;off&amp;quot; disables it.&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Headphone&lt;br /&gt;
| Pulls up IN2 on analog switch BCT4717ETB&lt;br /&gt;
| &amp;quot;On&amp;quot; enables audio input and output via the 3.5mm audio jack, &amp;quot;off&amp;quot; switches the jack to hardware UART mode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Camera ==&lt;br /&gt;
&lt;br /&gt;
The PinePhone has two cameras, OmniVision OV5640 with 5MP (up to 2592 x 1944 pixels) as rear camera and GalaxyCore GC2145 with 2MP (up to 1600 x 1200 pixels) as front camera.&lt;br /&gt;
&lt;br /&gt;
[[File:Rose.jpg|400px|thumb|none|Example picture taken on the PinePhone's rear camera by Martijn Braam using his app ''Megapixels''.]]&lt;br /&gt;
&lt;br /&gt;
Further details regarding the camera and the Megapixels camera app can be found on [https://blog.brixit.nl/tag/phones/ Martijn's blog].&lt;br /&gt;
&lt;br /&gt;
== Battery ==&lt;br /&gt;
&lt;br /&gt;
{{Hint|The EG25 modem and RTL8723CS WiFi and bluetooth do not work without battery power, even if you are supplying enough power to the PinePhone with USB-C.}}&lt;br /&gt;
&lt;br /&gt;
The phone ships with a plastic sticker between the battery and the phone. You need to open the back cover (gently), then remove the battery and finally remove the sticker and check that the pins aren't bent. This is to protect the device from turning on during shipping.&lt;br /&gt;
&lt;br /&gt;
The [https://files.pine64.org/doc/datasheet/pinephone/PinePhone%20QZ01%20Battery%20Specification.pdf supplied battery] is [https://forum.pine64.org/showthread.php?tid=8120&amp;amp;pid=53307#pid53307 meant to be] compatible with Samsung part number EB-BJ700BBC / BBE / CBE from the 2015 J7 phone. &lt;br /&gt;
* The extended life aftermarket BBU does fit, although it is a tight fit.&lt;br /&gt;
* There is [https://forum.pine64.org/showthread.php?tid=8563&amp;amp;pid=55053#pid55053 a report] that the EB-BJ700CBE isn't quite the same size, causing the back not to fit the Braveheart Edition properly.&lt;br /&gt;
&lt;br /&gt;
The battery terminals, in order from nearest the edge to nearest the middle, are:&lt;br /&gt;
&lt;br /&gt;
# +ve&lt;br /&gt;
# thermistor&lt;br /&gt;
# -ve&lt;br /&gt;
# not connected&lt;br /&gt;
&lt;br /&gt;
The battery includes a protection circuit that isolates it in a number of fault conditions, including if it is discharged too far. The fully discharged battery [https://forum.pine64.org/showthread.php?tid=8563&amp;amp;pid=55377#pid55377 can be recharged] by connecting the phone to a charger. Once it has charged sufficiently you will be able to boot the phone.&lt;br /&gt;
&lt;br /&gt;
If your battery is hard to remove from the phone, try loosening the screws in the midframe around it, which is pressing against the battery. Possibly cutting up a piece of plastic and sliding it under the battery as a pull tab can work too.&lt;br /&gt;
&lt;br /&gt;
[[Image:PinePhone battery3.jpeg|400px|thumb|none|Photo of &amp;lt;i&amp;gt;Braveheart Edition&amp;lt;/i&amp;gt; battery sticker from &amp;lt;i&amp;gt;OSAKANA TARO&amp;lt;/i&amp;gt; on Twitter]]&lt;br /&gt;
&lt;br /&gt;
== Modem ==&lt;br /&gt;
The PinePhone uses Quectel EG25-G as modem. AT commands are used to communicate with the modem. The software &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; can be used to send the commands.&lt;br /&gt;
&lt;br /&gt;
To connect with the modem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
minicom -D /dev/ttyUSB2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AT commands ===&lt;br /&gt;
&lt;br /&gt;
A list of documented AT commands can be found in the [https://www.quectel.com/UploadImage/Downlad/Quectel_EC25&amp;amp;EC21_AT_Commands_Manual_V1.3.pdf EC25&amp;amp;EC21 AT Commands Manual] from Quectel. Further undocumented AT commands found by the developer megi, who reverse-engineered parts of the modem and its firmware, can be found on megi's website [http://xnux.eu/devices/feature/modem-pp-reveng.html#toc-un-der-documented-at-commands here].&lt;br /&gt;
&lt;br /&gt;
=== VoLTE ===&lt;br /&gt;
&lt;br /&gt;
The PinePhone's modem supports VoLTE and comes with a few VoLTE profiles preloaded. Most OSes try to set the correct profile automatically.&lt;br /&gt;
&lt;br /&gt;
To list the available VoLTE profiles:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;ROW_Generic_3GPP&amp;quot;,0x0501081F,201901141&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0501033C,201909271&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;hVoLTE-Verizon&amp;quot;,0x05010141,201911251&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;Sprint-VoLTE&amp;quot;,0x05010205,201908141&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;Commercial-TMO_VoLTE&amp;quot;,0x05010505,201811231&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Telus-Commercial_VoLTE&amp;quot;,0x05800C43,201912031&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x05011C18,201904021&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Commercial-DT&amp;quot;,0x05011F1C,201905311&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Reliance_OpnMkt&amp;quot;,0x05011B38,201910161&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;TF_Germany_VoLTE&amp;quot;,0x05010C1B,201909201&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;TF_Spain_VoLTE&amp;quot;,0x05010CFA,201909261&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x05012071,201904281&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;OpenMkt-Commercial-CT&amp;quot;,0x05011322,201911081&lt;br /&gt;
+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;OpenMkt-Commercial-CU&amp;quot;,0x05011505,201807052&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To select a profile manually, select the best fitting one or a generic one if none fits:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW_Generic_3GPP&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then enable Voice over LTE using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+QCFG=&amp;quot;ims&amp;quot;,1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And reboot the modem to apply the settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+CFUN=1,1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To check the status of VoLTE during a call, the AT command &amp;lt;code&amp;gt;CLCC&amp;lt;/code&amp;gt; can be used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+CLCC&lt;br /&gt;
&lt;br /&gt;
+CLCC: 1,1,0,1,0,&amp;quot;&amp;quot;,128&lt;br /&gt;
+CLCC: 2,1,0,1,0,&amp;quot;&amp;quot;,128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== APN settings ===&lt;br /&gt;
&lt;br /&gt;
The APN setting is only required for a public Internet connection (&amp;quot;data&amp;quot;) on the phone. For tested APN settings and how to apply them see [[PinePhone APN Settings]].&lt;br /&gt;
&lt;br /&gt;
=== Carrier support ===&lt;br /&gt;
The page [[PinePhone Carrier Support]] contains information about the frequency support of different carriers and hints on setting up cellular network connectivity.&lt;br /&gt;
&lt;br /&gt;
=== Documents ===&lt;br /&gt;
&lt;br /&gt;
Detailed information about the modem can be found on the [https://xnux.eu/devices/feature/modem-pp.html#toc-modem-on-pinephone page of the developer megi], including reverse-engineered parts of the firmware and its functions. There is also a document about using the modem from January 18th 2020 by megi [https://megous.com/dl/tmp/modem.txt here]. A script at the end of the document showcases a way to poweroff the modem before powering off the phone, which is integrated into most of the available OSes.&lt;br /&gt;
&lt;br /&gt;
=== Firmware update ===&lt;br /&gt;
&lt;br /&gt;
{{Hint|The following instructions are directed towards professional users. It is highly recommend to make sure the update process is not interrupted to prevent the modem from bricking.}}&lt;br /&gt;
&lt;br /&gt;
The modem firmware can be updated to the latest version if it is outdated and ''dmesg'' returns the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;modem-power serial1-0: Your modem has an outdated firmware. Latest know version is EG25GGBR07A08M2G_01.002.07. Consider updating.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Pre-update checklist:'''&lt;br /&gt;
&lt;br /&gt;
Please make sure all requirements of the checklist are fulfilled. If the update process is interrupted it will lead to a corrupted firmware of the modem, causing it to brick. Recovering a bricked modem is exponentially more complicated and requires the user to boot a special mode by physically bridging test points on the modem.&lt;br /&gt;
&lt;br /&gt;
* The battery needs to be charged sufficiently&lt;br /&gt;
* The phone needs to be plugged into a charger&lt;br /&gt;
* Deep sleep is recommended to be disabled as it can interrupt the update process&lt;br /&gt;
* It is recommended to close all other running applications&lt;br /&gt;
* Use common sense while doing the update, don't do the update while being impaired in any way&lt;br /&gt;
&lt;br /&gt;
To get the latest firmware, clone the repository of user Biktorgj on the phone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone https://github.com/Biktorgj/quectel_eg25_recovery&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After cloning the directory, open it with cd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd quectel_eg25_recovery&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run qfirehose, which starts the flashing process:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo ./qfirehose -f ./&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The modem will automatically reboot after the update process is done. The boot process takes around 30 to 60 seconds. After that it is highly recommended to reboot the device.&lt;br /&gt;
&lt;br /&gt;
=== Firmware modifications ===&lt;br /&gt;
&lt;br /&gt;
See [[PineModems]] for more information regarding modem bootloader unlocking, building a custom modem firmware and modem recovery.&lt;br /&gt;
&lt;br /&gt;
=== GPS / GNSS ===&lt;br /&gt;
The GPS engine in the modem supports mutli-GNSS reception from GPS, GLONASS, BeiDou, Galileo and QZSS independent of a cellular connection. The operation of the GNSS subsystem is controlled via a separate set of AT commands. The AGPS data upload uses the file management AT commands, which also have their own manual. These are linked in the [[PinePhone#Datasheets for components and peripherals|documentation section]] below.&lt;br /&gt;
&lt;br /&gt;
As with most smartphones, the PinePhone has a small antenna and has difficulty getting a first fix without assistance data, a cold start can take 15 minutes under good conditions. While the hardware supports AGPS data upload, it isn't yet implemented in current distributions. There is a [https://gist.github.com/alastair-dm/263209b54d01209be28828e555fa6628 proof of concept script] which can be made to work, but support needs to be added to ModemManager, oFono etc. before it will be easy to use.&lt;br /&gt;
&lt;br /&gt;
Basic testing of GNSS reception can be done by using the AT command interface (/dev/ttyUSB2) from a terminal progam like minicom and the data output interface (/dev/ttyUSB1) to feed NMEA data into gpsmon or some other progam that can parse standard NMEA sentences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Gpsmon eg25g.png|400px|thumb|none|gpsmon decoding GPS data from /dev/ttyUSB1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check if GNSS data output is enabled, you can&lt;br /&gt;
&lt;br /&gt;
 cat /dev/ttyUSB1&lt;br /&gt;
&lt;br /&gt;
this should display a stream of NMEA sentences&lt;br /&gt;
&lt;br /&gt;
 $GPVTG,,T,,M,,N,,K,N*2C&lt;br /&gt;
 $GPGSA,A,1,,,,,,,,,,,,,,,,*32&lt;br /&gt;
 $GPGGA,,,,,,0,,,,,,,,*66&lt;br /&gt;
&lt;br /&gt;
=== Voice mail ===&lt;br /&gt;
&lt;br /&gt;
Some phone operating systems may not have support for accessing your voicemail by holding down the 1 key. If you are in Canada and using rogers or a rogers associated carrier (such as ''Chatr''), you can access your voice mail by calling an external number, see: https://www.howardforums.com/showthread.php/913346-Rogers-GSM-Voicemail-Retrieval-Numbers&lt;br /&gt;
&lt;br /&gt;
In America, AT&amp;amp;T also has support for accessing your voicemail via an external phone number: https://www.att.com/support/article/wireless/KM1009101/&lt;br /&gt;
&lt;br /&gt;
In Canada, Rogers voicemail can be called by dialing *98&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
&lt;br /&gt;
The PinePhone will automatically boot from microSD if a bootable card is inserted. Although it is technically possible to use any ARM distribution (because the PinePhone uses the mainline kernel), there are a few that are designed specifically for mobile use on devices like the PinePhone.&lt;br /&gt;
&lt;br /&gt;
=== Software releases ===&lt;br /&gt;
&lt;br /&gt;
The [[PinePhone Software Releases]] page has a complete list of currently supported phone-optimized Operating System images that work with the PinePhone as well as other related software information. As soon as more patches get mainlined and distributions ship with the updated kernel, they will also be able to run unmodified on the device.&lt;br /&gt;
&lt;br /&gt;
=== Installation instructions ===&lt;br /&gt;
&lt;br /&gt;
For instructions on how to install the operating systems to the eMMC or SD card see [[PinePhone Installation Instructions]].&lt;br /&gt;
&lt;br /&gt;
Interesting subsections of the article include:&lt;br /&gt;
&lt;br /&gt;
* [[PinePhone Installation Instructions#Boot_priority|Boot priority]]&lt;br /&gt;
* [[PinePhone Installation Instructions#Installation_to_the_microSD|Installation to the microSD]]&lt;br /&gt;
* [[PinePhone Installation Instructions#Installation_to_the_eMMC|Installation to the eMMC]]&lt;br /&gt;
* [[PinePhone Installation Instructions#Resize_partition_to_fit_disk_space|Resize partition to fit disk space]]&lt;br /&gt;
* [[PinePhone Installation Instructions#Reuse_SD_card_for_data_storage_on_system_booting_from_eMMC|Reuse SD card for data storage on system booting from eMMC]]&lt;br /&gt;
* [[PinePhone Installation Instructions#Web_resources|Web resources]]&lt;br /&gt;
&lt;br /&gt;
=== Flashing eMMC using Jumpdrive ===&lt;br /&gt;
&lt;br /&gt;
[[File:jumpdrive.jpg|400px|thumb|right|Jumpdrive running on the PinePhone]]&lt;br /&gt;
The internal eMMC flash storage can be flashed using the Jumpdrive utility by Danct12 and Martijn from postmarketOS.&lt;br /&gt;
This utility boots from micro SD and exposes the internal eMMC flash storage when the PinePhone is connected to a computer.&lt;br /&gt;
The process of flashing an OS to the exposed and mounted eMMC is identical to that of any other storage medium - e.g. a SD card. You can use the 'DD' command or a utility such as Etcher or Gnome Disks, etc.&lt;br /&gt;
&lt;br /&gt;
Latest Jumpdrive can be found [https://github.com/dreemurrs-embedded/Jumpdrive/releases/ here].&lt;br /&gt;
&lt;br /&gt;
==== Detailed usage instructions ====&lt;br /&gt;
&lt;br /&gt;
# Download the Jumpdrive image&lt;br /&gt;
# Flash the Jumpdrive image to a micro SD card&lt;br /&gt;
# Boot the PinePhone from the Jumpdrive micro SD card&lt;br /&gt;
# Connect the PinePhone to your computer using USB-A -&amp;gt; USB-C cable&lt;br /&gt;
# Flash the exposed PinePhone drive (e.g. /dev/mm..., check for the right device in dmesg, GNOME disks, or similar, and make sure it's unmounted) with your chosen OS image&lt;br /&gt;
# Once the flashing process is complete, disconnect the PinePhone from your PC, power it down and remove the Jumpdrive SD card&lt;br /&gt;
# The process is now finished, and you can boot from eMMC&lt;br /&gt;
&lt;br /&gt;
Jumpdrive also acts as a rescue image in case if you messed up your installation. To do so, you can telnet to '''172.16.42.1''', mount rootfs and fix it!&lt;br /&gt;
&lt;br /&gt;
==== Resize file system (optional) ====&lt;br /&gt;
&lt;br /&gt;
{{Hint|Many OSes already include a script, which is resizing the partition on first boot, where this step is not required.}}&lt;br /&gt;
&lt;br /&gt;
If you flash a 4GB image distribution to your eMMC, your eMMC will only have a 3.7GB partition on it. To use the entire 14.7GB on the eMMC, run the following commands:&lt;br /&gt;
&lt;br /&gt;
# sudo cfdisk /dev/sdX&lt;br /&gt;
# Change to [Resize] in the ncurses program, resize the 3.7GB partition to 14.7GB, and [Write]&lt;br /&gt;
# sudo resize2fs /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
Replace X with your drive's name. Replace Y with the partition you resized in cfdisk.&lt;br /&gt;
&lt;br /&gt;
==== Feedback ====&lt;br /&gt;
&lt;br /&gt;
If you've found an issue or want to improve the tool consider these sites:&lt;br /&gt;
&lt;br /&gt;
* Issues: https://github.com/dreemurrs-embedded/Jumpdrive/issues&lt;br /&gt;
* Pull Requests: https://github.com/dreemurrs-embedded/Jumpdrive/pulls&lt;br /&gt;
&lt;br /&gt;
== Frequently asked questions ==&lt;br /&gt;
&lt;br /&gt;
For a list of frequently asked questions (including information regarding the shipping) see [[PinePhone FAQ]].&lt;br /&gt;
&lt;br /&gt;
== Modifications and repairs == &lt;br /&gt;
&lt;br /&gt;
=== Swapping in a new mainboard revision ===&lt;br /&gt;
&lt;br /&gt;
The mainboard can be replaced, for example for upgrading to a newer hardware revision or if it is faulty. The replacement board does not have an OS preinstalled, to test if everything is working after swapping the mainboard a flashed SD card is required. The mainboard also comes with a non-functional firmware on the ANX chip, a newer firmware version has to be flashed as explained below to get certain USB functionality to work.&lt;br /&gt;
&lt;br /&gt;
==== Replacing the mainboard ====&lt;br /&gt;
&lt;br /&gt;
Prior to replacing your PinePhone’s mainboard please read the steps outlined in bullet points below and watch the attached video.&lt;br /&gt;
&lt;br /&gt;
# You’ll need a small Phillip’s screwdriver and a prying tool to swap out the PinePhone’s mainboard.&lt;br /&gt;
# Remove the PinePhone’s back cover. See your quick start guide for details.&lt;br /&gt;
# Remove the battery as well as any inserted SD and SIM cards.&lt;br /&gt;
# Unscrew all 15 Phillip’s head screws around the midframe of the phone.&lt;br /&gt;
# Gently pry up the midframe using a guitar pick or credit card corner. It is easiest to separate the midframe at one of the bottom edges. Work your way around all the sides of the phone until the midframe separates from the phone’s body.&lt;br /&gt;
# Detach all ribbon cables and “Lego” connectors. List of things to detach: 1) two “Lego” connects at the bottom of the mainboard. 2) u.FL antenna connect and touchscreen digitizer on PCD left side. 3) LCD ribbon cable top of mainboard, next to audio/ UART jack.&lt;br /&gt;
# Pry the mainboard up gently from the left-hand side.&lt;br /&gt;
# Remove front and main cameras and reset them into the new mainboard.&lt;br /&gt;
# Check that the rubber proximity sensor housing is in the chassis, not stuck to the removed mainboard.&lt;br /&gt;
# Place the new mainboard in the chassis, hooking in on the plastic tabs on left side and pressing down firmly on opposite side, and follow the steps (7-2) in reverse. When reattaching the midframe take care that no cables are out of place or trapped, as they may be damaged when tightening screws.&lt;br /&gt;
&lt;br /&gt;
After swapping the mainboard the phone won't boot as there is no OS on the replacement board's eMMC preinstalled. To boot an OS insert a flashed SD card.&lt;br /&gt;
&lt;br /&gt;
A video tutorial can be found here:&lt;br /&gt;
[[File:Pinephone_martijn_pcb_replacement.png|thumb|none|600px|link=https://www.youtube.com/watch?v=5GbMoZ_zuZs|Watch Martijn Braam's video tutorial here: https://www.youtube.com/watch?v=5GbMoZ_zuZs.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; Alternatively, user bridadan uploaded a video tutorial of the swap procedure including camera swap and proximity sensor housing here: https://www.youtube.com/watch?v=J3AJEF7akkw.]]&lt;br /&gt;
&lt;br /&gt;
==== Flashing the ANX firmware ====&lt;br /&gt;
&lt;br /&gt;
===== Method 1 =====&lt;br /&gt;
{{Hint|This method is currently not compatible with the Linux kernel 5.10.}}&lt;br /&gt;
&lt;br /&gt;
After swapping the mainboard the ANX chip has to be flashed for full USB functionality.&lt;br /&gt;
&lt;br /&gt;
Download the latest ANX firmware image on the phone:&lt;br /&gt;
&lt;br /&gt;
 wget https://xff.cz/git/linux-firmware/plain/anx7688-fw.bin&lt;br /&gt;
&lt;br /&gt;
Execute as root (&amp;quot;sudo su&amp;quot;) on the phone:&lt;br /&gt;
&lt;br /&gt;
 cp anx7688-fw.bin /lib/firmware/&lt;br /&gt;
 echo 1 &amp;gt; /sys/class/typec/port0/device/flash_eeprom&lt;br /&gt;
&lt;br /&gt;
===== Method 2 =====&lt;br /&gt;
&lt;br /&gt;
Booting a factory test image will automatically flash the ANX chip. See [[PinePhone Software Releases#Factory-loaded postmarketOS build]] for such an image.&lt;br /&gt;
&lt;br /&gt;
=== Replacing the screen ===&lt;br /&gt;
&lt;br /&gt;
Before attempting to replace the screen be sure to review the section on [[#Swapping in a new mainboard revision|replacing the mainboard]] since that will get you most of the way there. Be aware that the replacement screen is actually the entire front frame of the phone and there are components that will need to be swapped from your old screen.&lt;br /&gt;
&lt;br /&gt;
* Make sure you have a precision screwdriver set that has the correct size Philips tip. The screws are very small and the heads can easily be stripped if the screwdriver is not correct - if you feel your screwdriver slipping, stop what you are doing and try one that is a better fit. A magnetized screwdriver will help in not losing screws, as will a magnetic parts holder to keep them in while working.&lt;br /&gt;
&lt;br /&gt;
* There are a number of components and cables as well as the insulator sheet under the battery that are glued in place. A hair dryer will loosen the glue and make them much easier to remove. You may want to order extra cables along with the screen just in case.&lt;br /&gt;
&lt;br /&gt;
* The vibration motor, which is part of the USB-C board assembly and glued into place, will come apart easily and be damaged if you pry it up in the wrong place. Make sure you pry from underneath the complete part, not midway on its housing. The ribbon cable attaching this to the USB-C board is small, thin, and fragile so be careful with that as well.&lt;br /&gt;
&lt;br /&gt;
* The new screen comes with new side switches and insulator sheet but there are a number of parts that need to be transferred from the old screen, like the thin coax cable running up the side, the phone ear speaker, proximity sensor gasket, and a gold-colored mesh glued in place that needs to be transferred to a flexible circuit included on the new screen. If you don't swap over the proximity sensor rubber gasket the screen will immediately turn off after logging in. Be careful when routing the coax cable that it goes around the screw holes or you may drive a screw right through the cable.&lt;br /&gt;
&lt;br /&gt;
Take your time, use the right tools, be careful and you should be rewarded with success.&lt;br /&gt;
&lt;br /&gt;
=== Spare parts not available in the Pine64 store ===&lt;br /&gt;
&lt;br /&gt;
* Earpiece dimensions: 12x6x2 mm. Compatible with Xiaomi Mi2 / Mi3 / Mi4, Lenovo A536 and others, see [https://forum.pine64.org/showthread.php?tid=12046&amp;amp;pid=85698#pid85698 here]&lt;br /&gt;
* Loudspeaker dimensions: 15x11x3 mm. Compatible with Nokia N91, Lenovo A536 and others, see [https://forum.pine64.org/showthread.php?tid=12046&amp;amp;pid=85698#pid85698 here]&lt;br /&gt;
* Proximity sensor rubber isolator&lt;br /&gt;
&lt;br /&gt;
== Press ==&lt;br /&gt;
&lt;br /&gt;
For an overview about media of the PinePhone you can use for the news, blogs, or similar see [[PinePhone Press]].&lt;br /&gt;
&lt;br /&gt;
== PinePhone board information, schematics and certifications ==&lt;br /&gt;
* PinePhone mainboard schematic:&lt;br /&gt;
** [https://files.pine64.org/doc/PinePhone/PinePhone%20v1.2b%20Released%20Schematic.pdf PinePhone mainboard Released Schematic ver 1.2b]&lt;br /&gt;
** [https://files.pine64.org/doc/PinePhone/PinePhone%20v1.2a%20Released%20Schematic.pdf PinePhone mainboard Released Schematic ver 1.2a]&lt;br /&gt;
** [https://files.pine64.org/doc/PinePhone/PinePhone%20v1.2%20Released%20Schematic.pdf PinePhone mainboard Released Schematic ver 1.2]&lt;br /&gt;
** [[PinePhone_v1.2|PinePhone schematic ver 1.2 change list]]&lt;br /&gt;
** [https://files.pine64.org/doc/PinePhone/PinePhone%20Schematic%20v1.1%2020191031.pdf &amp;quot;Braveheart&amp;quot; PinePhone mainboard Schematic ver 1.1]&lt;br /&gt;
** [https://files.pine64.org/doc/PinePhone/PinePhone%20mainboard%20top%20placement%20v1.1%2020191031.pdf &amp;quot;Braveheart&amp;quot; PinePhone mainboard component top placement drawing ver 1.1]&lt;br /&gt;
** [https://files.pine64.org/doc/PinePhone/PinePhone%20mainboard%20bottom%20placement%20v1.1%2020191031.pdf &amp;quot;Braveheart&amp;quot; PinePhone mainboard component bottom placement drawing ver 1.1]&lt;br /&gt;
** [[PinePhone component list]]&lt;br /&gt;
* PinePhone USB-C small board schematic:&lt;br /&gt;
** [https://files.pine64.org/doc/PinePhone/PinePhone%20USB-C%20small%20board%20schematic%20v1.0%2020190730.pdf PinePhone USB-C small board Schematic ver 1.0]&lt;br /&gt;
** [https://files.pine64.org/doc/PinePhone/PinePhone%20USB-C%20small%20board%20top%20placement%20v1.0%2020190730.pdf PinePhone USB-C small board component top placement drawing ver 1.0]&lt;br /&gt;
** [https://files.pine64.org/doc/PinePhone/PinePhone%20USB-C%20small%20board%20bottom%20placement%20v1.0%2020190730.pdf PinePhone USB-C small board component bottom placement drawing ver 1.0]&lt;br /&gt;
* PinePhone certifications:&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PinePhone%20FCC%20SDOC%20Certificate-S19112602605001.pdf PinePhone FCC Certificate]&lt;br /&gt;
** [https://fcc.report/FCC-ID/2AWAG-PINEPHONE RF Exposure SAR Information from FCC ID site]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PinePhone%20CE%20RED%20Certificate-S19112602602.pdf PinePhone CE RED Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PinePhone%20ROHS%20Report.pdf PinePhone ROHS Report]&lt;br /&gt;
** Note: PinePhone's GSMA TAC (Type Allocation Code) is &amp;lt;i&amp;gt;86769804&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Datasheets for components and peripherals ==&lt;br /&gt;
&lt;br /&gt;
* Allwinner A64 SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/A64%20brief%20v1.0%2020150323.pdf Allwinner A64 SoC brief introduction]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/A64_Datasheet_V1.1.pdf Allwinner A64 SoC Data Sheet V1.1 (Official Released Version)]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/Allwinner_A64_User_Manual_V1.0.pdf Allwinner A64 SoC User Manual V1.0 (Official Release Version)]&lt;br /&gt;
&lt;br /&gt;
* X-Powers AXP803 PMIC (Power Management IC) information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/AXP803_Datasheet_V1.0.pdf AXP803 PMIC datasheet]&lt;br /&gt;
&lt;br /&gt;
* LPDDR3 (178 Balls) SDRAM:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/ATL3A1632H12A_mobile_lpddr3_11x11.5_v1.0_1600.pdf Artmem LPDDR3 datasheet]&lt;br /&gt;
&lt;br /&gt;
* eMMC information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/Kimtigo_fbga153_16_32_64_eMMC_datasheet_v1.3.pdf Kimtigo eMMC datasheet]&lt;br /&gt;
&lt;br /&gt;
* CMOS camera module information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/QZ01-rear-2019-0717(HW)%20Model.pdf PinePhone 5M Pixel Real CMOS Image Sensor Module]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/OV5640_datasheet.pdf OV5640 5MP CMOS Image Sensor SoC for Rear Module datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/QZ01-front-2019-0717(HW)%20Model.pdf PinePhone 2M Pixel Front CMOS Image Sensor Module]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/GC2145%20CSP%20DataSheet%20release%20V1.0_20131201.pdf GC2145 2MP CMOS Image Sensor SoC for Front Module datasheet]&lt;br /&gt;
&lt;br /&gt;
* LCD touch screen panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/PinePhone%20LCD-QZ01.pdf 5.99&amp;quot; 1440x720 LCD IPS Panel specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/ST7703_DS_v01_20160128.pdf ST7703 LCD Controller datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/GT917S-Datasheet.pdf GOODiX GT917S Capacitive Touch Controller datasheet]&lt;br /&gt;
&lt;br /&gt;
* Lithium battery information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/PinePhone%20QZ01%20Battery%20Specification.pdf PinePhone Lithium Battery specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/PinePhone%20QZ01%20Battery%20ZCV%20Curve%20Chart.xlsx PinePhone Lithium Battery ZCV curve chart]&lt;br /&gt;
** [https://cad.onshape.com/documents/5194d6303f021e6f300b70a0/w/7b63ac4c32ed63dfd78c7840/e/5d43c0ce5b665bae10082a08 PinePhone Lithium Battery 3D onshape drawing]&lt;br /&gt;
&lt;br /&gt;
* WiFi/BT module information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/RTL8723BS.pdf RTL8723BS/RTL8723CS specification]&lt;br /&gt;
&lt;br /&gt;
* LTE module information:&lt;br /&gt;
** [https://www.quectel.com/UploadFile/Product/Quectel_EG25-G_LTE_Standard_Specification_V1.2.pdf Quectel EG25-G LTE Module specification v1.2]&lt;br /&gt;
** [[Media:Quectel EC25EC21 AT Commands Manual V1.2.pdf|EC25&amp;amp;EC21 AT Commands Manual]]&lt;br /&gt;
** [https://www.quectel.com/UploadImage/Downlad/Quectel_EC2x&amp;amp;EG25-G&amp;amp;EG9x&amp;amp;EM05_FILE_AT_Commands_Manual_V1.0.pdf Quectel EC2x EG25-G EG9x EM05 FILE AT Commands Manual v1.0]&lt;br /&gt;
** [https://sixfab.com/wp-content/uploads/2018/09/Quectel_EC25EC21_GNSS_AT_Commands_Manual_V1.1.pdf Quectel EC25 EC21 GNSS AT Commands Manual v1.1]&lt;br /&gt;
&lt;br /&gt;
* Sensors:&lt;br /&gt;
** [https://www.st.com/en/mems-and-sensors/lis3mdl.html ST LIS3MDL 3-axis Magnetomater Datasheet]&lt;br /&gt;
** [https://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/ InvenSense MPU-6050 Six-Axis (Gyro + Accelerometer) MEMS datasheet]&lt;br /&gt;
** [https://www.sensortek.com.tw/en/product/Proximity_Sensor_with_ALS.html SensorTek STK3335 Ambient Light Sensor and Proximity Sensor]&lt;br /&gt;
&lt;br /&gt;
* Digital video to USB-C bridge:&lt;br /&gt;
** [https://www.analogix.com/en/system/files/AA-002281-PB-6-ANX7688_Product_Brief.pdf ANX7688 product brief]&lt;br /&gt;
&lt;br /&gt;
* Case information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/PinePhone%20Exploded%20Diagram%20ver%201.0.pdf PinePhone case exploded diagram]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/PinePhone%20Back%20Cover.stp PinePhone back cover 3D file]&lt;br /&gt;
&lt;br /&gt;
* Other components:&lt;br /&gt;
** See links in the [[PinePhone_component_list|Component List]]&lt;br /&gt;
&lt;br /&gt;
== Developer works ==&lt;br /&gt;
=== Megous ===&lt;br /&gt;
&lt;br /&gt;
* [https://xnux.eu/howtos/pine64-pinephone-getting-started.html Getting start with PinePhone Hardware]&lt;br /&gt;
* [https://xnux.eu/devices/pine64-pinephone.html State of development progress]&lt;br /&gt;
* [https://xnux.eu/news.html PinePhone Technical News and Update, also applies to other Allwinner devices including PINE A64 SBC]&lt;br /&gt;
* [https://xnux.eu/contribute.html Contributions to the kernel development]&lt;br /&gt;
&lt;br /&gt;
== External links == &lt;br /&gt;
* [https://pine64.com/product-category/pinephone/ The PinePhone on the official Pine store]&lt;br /&gt;
* [https://pine64.com/product-category/smartphone-spare-parts/ PinePhone spare parts on the official Pine store]&lt;br /&gt;
* [https://pine64.com/product-category/smartphone-accessories/ PinePhone accessories on the official Pine store]&lt;br /&gt;
&lt;br /&gt;
[[Category:PinePhone]] [[Category:Allwinner A64]]&lt;/div&gt;</summary>
		<author><name>Xalius</name></author>
	</entry>
</feed>