<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.asteroidos.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jmlich</id>
	<title>AsteroidOS - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.asteroidos.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jmlich"/>
	<link rel="alternate" type="text/html" href="https://wiki.asteroidos.org/index.php/Special:Contributions/Jmlich"/>
	<updated>2026-05-30T21:06:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://wiki.asteroidos.org/index.php?title=Synchronization_Clients&amp;diff=547</id>
		<title>Synchronization Clients</title>
		<link rel="alternate" type="text/html" href="https://wiki.asteroidos.org/index.php?title=Synchronization_Clients&amp;diff=547"/>
		<updated>2024-11-28T18:41:58Z</updated>

		<summary type="html">&lt;p&gt;Jmlich: Amazfish on SailfishOS and Amazfish on Desktop with flatpak&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AsteroidOS watches can be synchronized with a variety of devices given that they install a &amp;quot;synchronization client&amp;quot;. This page lists all the known synchronization clients by platform.&lt;br /&gt;
&lt;br /&gt;
= AsteroidOSSync Android application =&lt;br /&gt;
An official synchronization application for Android phones named AsteroidOSSync is available to [https://f-droid.org/packages/org.asteroidos.sync download on F-Droid].&lt;br /&gt;
&lt;br /&gt;
This app currently offers the best experience possible with AsteroidOS.&lt;br /&gt;
&lt;br /&gt;
= Gadgetbridge Android application =&lt;br /&gt;
Gadgetbridge support for AsteroidOS watches has been added, thanks to [https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3013 community contribution] to the [https://codeberg.org/Freeyourgadget/Gadgetbridge/ Gadgetbridge project]. [https://f-droid.org/packages/nodomain.freeyourgadget.gadgetbridge/ Get Gadgetbridge on F-Droid].&lt;br /&gt;
&lt;br /&gt;
The AsteroidOS Gadgetbridge integration is considered to be in initial stage. Nearly all features provided by AsteroidOSSync are supported. Only the remote volume control and screenshot functions are missing.&lt;br /&gt;
&lt;br /&gt;
= iOS application =&lt;br /&gt;
There is currently no application available for iOS phones to synchronize with AsteroidOS watches. As far as we know, there hasn&#039;t been any development done on such an app yet.&lt;br /&gt;
&lt;br /&gt;
However, if the watch is paired with an iOS device, AsteroidOS is capable of displaying notifications from the phone. Pairing can only done using 3rd party BLE scanner/communication apps like [https://apps.apple.com/gb/app/nrf-connect-for-mobile/id1054362403 nRF Connect] as BLE-only devices do not show up in iOS Bluetooth settings. Specific functionality like syncing time or weather forecast are however not supported!&lt;br /&gt;
&lt;br /&gt;
= Ubuntu Touch/UBPorts application =&lt;br /&gt;
To synchronize your AsteroidOS watch to devices running Ubuntu Touch&#039;s current Focal (20.04) version, install the Amazfish app from the Ubports Open Store at https://open-store.io/app/uk.co.piggz.amazfish&lt;br /&gt;
&lt;br /&gt;
The Amazfish app is receiving active development, and issues can be posted at https://github.com/piggz/harbour-amazfish/issues&lt;br /&gt;
&lt;br /&gt;
For devices still running the previous discontinued Xenial (16.04) version of Ubuntu Touch, you can install the Telescope synchronization app from https://open-store.io/app/telescope.asteroidos&lt;br /&gt;
&lt;br /&gt;
It appears that the Telescope app is no longer maintained, but issues can be posted at https://github.com/AsteroidOS/telescope/issues &lt;br /&gt;
&lt;br /&gt;
= SailfishOS application = &lt;br /&gt;
An official synchronization app for SailfishOS named [https://github.com/AsteroidOS/starship Starship] has been written using [[#Library | libasteroid]]. However, it is not in a usable state yet.&lt;br /&gt;
&lt;br /&gt;
[https://sailfishos-chum.github.io/apps/harbour-amazfish/ Amazfish] can be installed from chum repository. &lt;br /&gt;
&lt;br /&gt;
= Desktop apps =&lt;br /&gt;
A community member created a desktop Linux synchronization app named [https://github.com/atx/AsteroidOSLinux AsteroidOSLinux]. It is written in Python and offers some basic scripting capabilities for AsteroidOS synchronization. The code is written in a way that makes it very easily extendable for your own usages.&lt;br /&gt;
&lt;br /&gt;
A demo of the [[#Library | libasteroid]] usage named [https://github.com/AsteroidOS/asteroid-ctrl asteroid-ctrl] is also available as a C++-written CLI application. This app is cross-platform and doesn&#039;t do much on its own but can also be extended for your own usages.&lt;br /&gt;
&lt;br /&gt;
[https://flathub.org/apps/uk.co.piggz.amazfish Amazfish] with kirigami flavor can be installed from flathub and used on Desktop.&lt;br /&gt;
&lt;br /&gt;
= Library =&lt;br /&gt;
A library named [https://github.com/AsteroidOS/libasteroid libasteroid] encapsulates the Bluetooth Low Energy profiles of AsteroidOS in a simple API. It is written in C++ using QtBluetooth and is then [https://doc.qt.io/qt-5.10/qtbluetooth-index.html cross-platform]. Its code can be used as a reference implementation for other clients development or as a 3rd party library.&lt;br /&gt;
&lt;br /&gt;
= New synchronization clients =&lt;br /&gt;
&lt;br /&gt;
We would warmly welcome any community members interested in writing a new synchronization app to read the [[BLE profiles]] documentation and get in touch with us via our [https://matrix.to/#/#Asteroid:matrix.org Matrix channel].&lt;/div&gt;</summary>
		<author><name>Jmlich</name></author>
	</entry>
	<entry>
		<id>https://wiki.asteroidos.org/index.php?title=BLE_profiles&amp;diff=424</id>
		<title>BLE profiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.asteroidos.org/index.php?title=BLE_profiles&amp;diff=424"/>
		<updated>2024-02-12T16:50:23Z</updated>

		<summary type="html">&lt;p&gt;Jmlich: Apple Notification Center Service - h2 -&amp;gt; h1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developers]]&lt;br /&gt;
In order to provide data synchronization capabilities between a watch and another device (typically a phone but that could also be a computer), AsteroidOS defines a variety of Bluetooth Low Energy profiles. This page tries to document those profiles so that developers can implement new synchronization apps.&lt;br /&gt;
&lt;br /&gt;
[https://learn.adafruit.com/introduction-to-bluetooth-low-energy/gatt#services-and-characteristics Basic knowledge of BLE] is useful to understand this page. In this page, the &#039;&#039;server parts&#039;&#039; refer to the side of the protocol implemented by [https://github.com/AsteroidOS/asteroid-btsyncd asteroid-btsyncd] on the watch. The &#039;&#039;client parts&#039;&#039; refer to what&#039;s implemented by external apps such as [https://github.com/AsteroidOS/AsteroidOSSync/ AsteroidOSSync].&lt;br /&gt;
&lt;br /&gt;
=Advertisement=&lt;br /&gt;
&lt;br /&gt;
Clients can distinguish an AsteroidOS watch from another BLE device by diving into advertisement payloads. AsteroidOS advertises the following service UUID: &#039;&#039;&#039;00000000-0000-0000-0000-00a57e401d05&#039;&#039;&#039;. This information can be filtered when scanning surrounding devices.&lt;br /&gt;
&lt;br /&gt;
=Battery Profile=&lt;br /&gt;
&lt;br /&gt;
Clients can read an Asteroid watch&#039;s battery level using the BLE battery profile. This profile is a standard [https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.battery_service.xml defined by the Bluetooth Consortium] very well documented and implemented by many other devices.&lt;br /&gt;
&lt;br /&gt;
==Battery Service (UUID: 0000180F-0000-1000-8000-00805f9b34fb)==&lt;br /&gt;
&#039;&#039;&#039;Battery Level Characteristic (UUID: 00002a19-0000-1000-8000-00805f9b34fb)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be read or used to be notified of a battery level change. The notified and read values consist of one byte between 0 and 100 representing the current battery level.&lt;br /&gt;
&lt;br /&gt;
=Media Profile=&lt;br /&gt;
&lt;br /&gt;
Apps on an asteroid watch can control client&#039;s media playback capabilities (for example with the asteroid-music) using the Media profile. This profile is custom and functions as below:&lt;br /&gt;
&lt;br /&gt;
==Media Service (UUID: 00007071-0000-0000-0000-00A57E401D05)==&lt;br /&gt;
&#039;&#039;&#039;Title Characteristic (UUID: 00007001-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be written by the client to set the name of the media that is currently being played. Set to &amp;quot;&amp;quot; if no media is played. Values should be UTF-8 strings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Album Characteristic (UUID: 00007002-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be written by the client to set the name of the album that is currently being played. Set to &amp;quot;&amp;quot; if no media is played. Values should be UTF-8 strings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Artist Characteristic (UUID: 00007003-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be written by the client to set the name of the artist that is currently being played. Set to &amp;quot;&amp;quot; if no media is played. Values should be UTF-8 strings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Playing Characteristic (UUID: 00007004-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be written by the client to set the state of the media currently being played. Possible values can be: one byte set to 1 if the media is being played or one byte set to 0 if the media is paused.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Command Characteristic (UUID: 00007005-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be used by the client to be notified of a command being sent by the server. Possible events are signaled with one bytes between:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;0x0&#039;&#039;&#039;: &#039;&#039;Previous&#039;&#039; (the client is expected to change media and update the writable characteristics)&lt;br /&gt;
*&#039;&#039;&#039;0x1&#039;&#039;&#039;: &#039;&#039;Next&#039;&#039; (the client is expected to change media and update the writable characteristics)&lt;br /&gt;
*&#039;&#039;&#039;0x2&#039;&#039;&#039;: &#039;&#039;Play&#039;&#039; (the client is expected to play the current media and update the playing characteristics according to the new state)&lt;br /&gt;
*&#039;&#039;&#039;0x3&#039;&#039;&#039;: &#039;&#039;Pause&#039;&#039; (the client is expected to pause the current media and update the playing characteristics according to the new state)&lt;br /&gt;
*&#039;&#039;&#039;0x4&#039;&#039;&#039;: &#039;&#039;Volume&#039;&#039; (the client is expected to change the volume to a supplied target volume and then update the Volume characteristic)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Volume Characteristic (UUID: 00007006-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be written by the client to set the volume of the current media session. Supported value range is 0-100.&lt;br /&gt;
&lt;br /&gt;
=Notification Profile=&lt;br /&gt;
&lt;br /&gt;
Clients can create notifications on the watch side by using the Notification Profile. This profile is typically used to synchronize notifications from a phone to a watch or to send special alerts such as AsteroidOSSync&#039;s &amp;quot;Find my watch&amp;quot; feature.&lt;br /&gt;
&lt;br /&gt;
==Notification Service (UUID: 00009071-0000-0000-0000-00A57E401D05)==&lt;br /&gt;
&#039;&#039;&#039;Notification Update Characteristic (UUID: 00009001-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
This characteristic can be written to send notifications-related commands to the watch. Commands are formated as UTF-8 strings containing an XML tree. The root element can be:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;insert&#039;&#039;&#039;: to be used when the client wants to add or modify a notification on the watch side. In that case, it can contain the following sub-elements:&lt;br /&gt;
**&#039;&#039;pn&#039;&#039;: (Package name) currently ignored, should be used to identify the Android application at the origin of this notification. This field can safely be ignored by other platforms.&lt;br /&gt;
**&#039;&#039;id&#039;&#039;: (Identifier) unsigned integer freely assigned by the client to identify a notification. If the server doesn&#039;t know any notifications with this ID yet, a notification will be created. If the server already knows a notification attached to this ID, this notification will be updated according to the other insert&#039;s sub-elements.&lt;br /&gt;
**&#039;&#039;an&#039;&#039;: (Application Name) used by the watch&#039;s UI to show a human readable name of the application at the origin of this notification.&lt;br /&gt;
**&#039;&#039;ai&#039;&#039;: (Application Icon) used by the watch&#039;s UI to assign an icon to this notification. Icons should be designated by their ion-icons identifier. The complete list of supported icons can be found [https://github.com/AsteroidOS/asteroid-icons-ion here]&lt;br /&gt;
**&#039;&#039;su&#039;&#039;: (Summary) used by the watch&#039;s UI to show a title to this notification. This field is usually kept short and can be anything that should be seen first in a notification.&lt;br /&gt;
**&#039;&#039;bo&#039;&#039;: (Body) used by the watch&#039;s UI to show the content of this notification. This field should be an arbitrarily long text to be read by the user on the watch.&lt;br /&gt;
**&#039;&#039;vb&#039;&#039;: (Vibrate) specifies how the watch should notify the user of this notification. Possible values are&lt;br /&gt;
***&#039;&#039;strong&#039;&#039; Makes the watch use a strong vibration with sound when possible when this notification is received. (This is also the default behavior if no vb element or an incorrect value is received)&lt;br /&gt;
***&#039;&#039;normal&#039;&#039; Play a subtle vibration when the notification is received on the watch.&lt;br /&gt;
***&#039;&#039;ringtone&#039;&#039; Vibrates in a strong pattern until the notification is removed.&lt;br /&gt;
***&#039;&#039;none&#039;&#039; Don&#039;t make the watch vibrate at all when the notification is received.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;removed&#039;&#039;&#039;: to be used when the client wants to close a notification on the watch side. In that case, it can only contain the &#039;&#039;id&#039;&#039; sub-element which contains a notification ID attached to the notification to be closed.&lt;br /&gt;
&lt;br /&gt;
Examples of well-formed values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;insert&amp;gt;&lt;br /&gt;
    &amp;lt;pn&amp;gt;com.android.mms&amp;lt;/pn&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;42&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;an&amp;gt;SMS&amp;lt;/an&amp;gt;&lt;br /&gt;
    &amp;lt;ai&amp;gt;ios-text&amp;lt;/ai&amp;gt;&lt;br /&gt;
    &amp;lt;su&amp;gt;Bob&amp;lt;/su&amp;gt;&lt;br /&gt;
    &amp;lt;bo&amp;gt;Hey, check out this super cool OS! http://asteroidos.org&amp;lt;/bo&amp;gt;&lt;br /&gt;
    &amp;lt;vb&amp;gt;strong&amp;lt;/vb&amp;gt;&lt;br /&gt;
&amp;lt;/insert&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;removed&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;42&amp;lt;/id&amp;gt;&lt;br /&gt;
&amp;lt;/removed&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notification Feedback Characteristic (UUID: 00009002-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eventually, this characteristic should allow the server to send command regarding notifications to the client (e.g: close a notification or call an action) but this feature is not standardized nor documented yet. Don&#039;t hesitate to contribute!&lt;br /&gt;
&lt;br /&gt;
= Apple Notification Center Service (UUID: 7905F431-B5CE-4E99-A40F-4B1E122D00D0) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AsteroidOS implements [https://developer.apple.com/library/archive/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Specification/Specification.html Apple Notification Center Service]. This provides notifications to apple products without need of extra client.&lt;br /&gt;
&lt;br /&gt;
This implementation provides following characteristics:&lt;br /&gt;
&lt;br /&gt;
- Source Characteristic (UUID: 9FBF120D-6301-42D9-8C58-25E699A21DBD)&lt;br /&gt;
&lt;br /&gt;
- Control Point Characteristic (UUID: 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9)&lt;br /&gt;
&lt;br /&gt;
- Data Source Characteristic (UUID 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB)&lt;br /&gt;
&lt;br /&gt;
=Screenshot Profile=&lt;br /&gt;
&lt;br /&gt;
A client can save the content of the server&#039;s screen using the Screenshot profile.&lt;br /&gt;
&lt;br /&gt;
==Screenshot Service (UUID: 00006071-0000-0000-0000-00A57E401D05)==&lt;br /&gt;
&#039;&#039;&#039;Screenshot Request Characteristic (UUID: 00006001-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be written by the client to any value (for example one byte set to 0) to trigger a byte stream on the Screenshot Content Characteristic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Screenshot Content Characteristic (UUID: 00006002-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be used to be notified of a screenshot content. After a write to the Screenshot Request Characteristic, the first value signaled by the Screenshot Content Characteristic should be made of four bytes containing the size of the data to be transmitted and can be used to show a progress bar during the screenshot download time. The rest of the transmission is made of chunks of raw data to be concatenated by the client in a buffer to reconstruct a screenshot of the watch&#039;s screen. The complete buffer should be a valid JPEG file but other formats could also be considered in the future.&lt;br /&gt;
&lt;br /&gt;
=Time Profile=&lt;br /&gt;
&lt;br /&gt;
A client can change the server&#039;s system time using the Time Profile. This should be used periodically to synchronize a watch&#039;s time with the device it is currently connected to.&lt;br /&gt;
&lt;br /&gt;
==Time Service (UUID: 00005071-0000-0000-0000-00A57E401D05)==&lt;br /&gt;
&#039;&#039;&#039;Time Set Characteristic (UUID: 00005001-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
This characteristic can be written. It is made of 6 bytes:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Year&#039;&#039; (byte 0) Year - 1900.&lt;br /&gt;
*&#039;&#039;Month&#039;&#039; (byte 1) A value in the range [0-11] where 0 = January and 11 = December&lt;br /&gt;
*&#039;&#039;Day&#039;&#039; (byte 2) A value in the range [1-31]&lt;br /&gt;
*&#039;&#039;Hour&#039;&#039; (byte 3) A value in the range [0-23]&lt;br /&gt;
*&#039;&#039;Minute&#039;&#039; (byte 4) A value in the range [0-59]&lt;br /&gt;
*&#039;&#039;Second&#039;&#039; (byte 5) A value in the range [0-59]&lt;br /&gt;
&lt;br /&gt;
=Weather Profile=&lt;br /&gt;
&lt;br /&gt;
A client can fill weather information buffers on the watch using the Weather Profile. Those information can typically be used by asteroid-weather or asteroid-launcher&#039;s Today page to show current info.  For each of the characteristics except for the Weather City Characteristic, the data is interpreted as a sequence of five two-byte big-endian values that correspond to &amp;quot;today&amp;quot; through &amp;quot;today + 4 days&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Weather Service (UUID: 00008071-0000-0000-0000-00A57E401D05)==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weather City Characteristic (UUID: 00008001-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be written by the client to set the name of the city whose weather information are attached to. Values should be UTF-8 strings and they do &#039;&#039;&#039;not&#039;&#039;&#039; need to be NUL-terminated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weather IDs Characteristic (UUID: 00008002-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be written by the client with a value of 10 bytes. Each pair of bytes represents an [https://openweathermap.org/weather-conditions OWM weather condition ID] for a specific day of forecast. For instance: Bytes 0 and 1 set to 500 represent light rain today.&lt;br /&gt;
&lt;br /&gt;
For example, here is a valid value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x00 0xc8 0x03 0x21 0x03 0x20 0x01 0xf4 0x02 0x58&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interpretation is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x00c8 = 200 = &amp;quot;Thunderstorm with light rain&amp;quot;&lt;br /&gt;
0x0321 = 801 = &amp;quot;Few clouds: 11-25%&amp;quot;&lt;br /&gt;
0x0320 = 800 = &amp;quot;Clear&amp;quot;&lt;br /&gt;
0x01f4 = 500 = &amp;quot;Light rain&amp;quot;&lt;br /&gt;
0x0258 = 600 = &amp;quot;Light snow&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weather Min Temperatures Characteristic (UUID: 00008003-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be written by the client with a value of 10 bytes. Each pair of bytes represents a minimum temperature for a specific day of forecast. Note that temperatures are given in degrees Kelvin and not Celsius, so a value of 273 (0x0111) would correspond to a temperature of 0°C or 32°F. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x01 0x11 0x02 0x11 0x03 0x11 0xff 0xff 0x00 0x00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interpretation is mathematically sound (but physically unrealistic!):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x0111 = 273K = 0°C&lt;br /&gt;
0x0211 = 529K = 256°C&lt;br /&gt;
0x0311 = 785K = 512°C&lt;br /&gt;
0xffff = 65535K = 65262°C&lt;br /&gt;
0x0000 = 0K = -273°C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weather Max Temperatures Characteristic (UUID: 00008004-0000-0000-0000-00A57E401D05)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This characteristic can be written by the client with a value of 10 bytes. Each pair of bytes represents a maximum temperature for a specific day of forecast. Interpretation is identical to that of the Weather Min Temperatures Characteristic.&lt;/div&gt;</summary>
		<author><name>Jmlich</name></author>
	</entry>
	<entry>
		<id>https://wiki.asteroidos.org/index.php?title=Building_AsteroidOS&amp;diff=423</id>
		<title>Building AsteroidOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.asteroidos.org/index.php?title=Building_AsteroidOS&amp;diff=423"/>
		<updated>2024-02-06T09:07:51Z</updated>

		<summary type="html">&lt;p&gt;Jmlich: link was somehow broken&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developers]]&lt;br /&gt;
If you decide to compile AsteroidOS from source be aware that it’s a simple process but requires a lot of disk space (potentially more than 100GB) and the first build might take you a lot of time (hours). Report any problem to the [https://github.com/AsteroidOS/asteroid/issues issue tracker]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://asteroidos.org/asteroid.mp4 Video showing the build process]&lt;br /&gt;
&lt;br /&gt;
= General information =&lt;br /&gt;
&lt;br /&gt;
You might want to build AsteroidOS in a &#039;&#039;container engine&#039;&#039; such as [https://www.docker.com/ Docker] or [https://podman.io/ podman] because you&#039;ll get a clean build environment that works no matter what kinds of package repositories or package versions you have installed or how outdated your Linux distribution is or which Linux distribution you&#039;re using in the first place.&lt;br /&gt;
&lt;br /&gt;
Another advantage of Docker specifically is that it &#039;&#039;should&#039;&#039; also work on Windows and OS X. (However, this has not been tested yet!)&lt;br /&gt;
&lt;br /&gt;
Using containers also allows you to easily roll back.  Without a container, if you decided to delete the AsteroidOS repository and uninstall the prerequisite software packages from your computer, you will potentially remove packages that you had installed before and might actually still need.  With a container, simply deleting the container image has no other effect on the host computer.&lt;br /&gt;
&lt;br /&gt;
= Clone the repository =&lt;br /&gt;
&lt;br /&gt;
Clone the main repository using the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/AsteroidOS/asteroid.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t set a global git name and email yet, adapt the following &#039;&#039;git config&#039;&#039; commands to your information. (This is only required to clone some git repositories when building.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global user.email &amp;quot;you@example.com&amp;quot;&lt;br /&gt;
git config --global user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before you continue to &#039;&#039;Build without containers&#039;&#039; or &#039;&#039;Build with containers&#039;&#039;, make sure you&#039;re in the asteroid directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd asteroid/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Build without containers =&lt;br /&gt;
&lt;br /&gt;
== Downloading ==&lt;br /&gt;
&lt;br /&gt;
Install the prerequisites:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Distribution prerequisite installation&lt;br /&gt;
|-&lt;br /&gt;
! Distro !! Command&lt;br /&gt;
|-&lt;br /&gt;
| Ubuntu || &amp;lt;code&amp;gt;apt-get install git build-essential chrpath cpio diffstat gawk liblz4-tool python3 shared-mime-info texinfo wget zstd &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Fedora || &amp;lt;code&amp;gt;dnf install chrpath diffstat g++ lz4 perl perl-bignum python3-pip rpcgen socat texinfo&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Arch || &amp;lt;code&amp;gt;pacman -Sy base-devel chrpath cpio diffstat gawk lz4 python3 rpcsvc-proto shared-mime-info texinfo wget zstd&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Alpine || &amp;lt;code&amp;gt;apk add binutils chrpath gcc g++ gawk gcc lz4 make patch perl rpcgen&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;Note: Alpine Linux does not contain diffstat in its repositories, thus you have to [https://github.com/asottile-archive/diffstat build it yourself from source].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This repository basically only contains a shell script that populates &amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt; with OpenEmbedded and the appropriate Asteroid layers. Then, it setups the environment for a bitbake build. The following command will setup a build for &amp;lt;code&amp;gt;dory&amp;lt;/code&amp;gt; (the LG G Watch) but you can also build an image for other watches by using the corresponding codename. (Codenames can be found on the [https://asteroidos.org/watches/ Watches page].)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source ./prepare-build.sh dory # Be careful that this script must be sourced and not only ran&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the environment has been correctly setup, you should now be in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
&lt;br /&gt;
== Building ==&lt;br /&gt;
&lt;br /&gt;
Once the environment is prepared, you can simply trigger a build with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bitbake asteroid-image&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;Notes:&#039;&#039;&lt;br /&gt;
1) The build process requires roughly 2GB memory per thread. It might be necessary to limit the number of threads. This can be done by prepending &amp;lt;code&amp;gt;BB_NUMBER_THREADS=n&amp;lt;/code&amp;gt; to the build command. Or by adding &amp;lt;code&amp;gt;BB_NUMBER_THREADS = &amp;quot;n&amp;quot;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;build/conf/local.conf&amp;lt;/code&amp;gt;. Where &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; is the amount of threads.&lt;br /&gt;
2) Bitbake is a powerful tool that can also build single packages (e.g: &amp;lt;code&amp;gt;bitbake strace&amp;lt;/code&amp;gt;) or  [[Creating an Asteroid app#Building the Cross Compilation Toolchain|Building the SDK]] for example. Refer to its documentation for more details.&lt;br /&gt;
&lt;br /&gt;
If this step was successful, you can proceed to the [[#Installing|Installing]] section below.&lt;br /&gt;
&lt;br /&gt;
== Updating the Sources ==&lt;br /&gt;
&lt;br /&gt;
You can update the AsteroidOS sources with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source ./prepare-build.sh update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Build with containers =&lt;br /&gt;
&lt;br /&gt;
These instructions have been tested on Ubuntu 19.04 (with Docker) and Fedora 34 (with podman), but should also be applicable to Debian Sid (at least at the time of writing). For other distributions the dependencies may have different names and you may have to install additional ones.&lt;br /&gt;
&lt;br /&gt;
From a user&#039;s point of view, Docker and podman are quite similar and accept almost all of the exact same commands, but there are some difference.  The most significant differences for building Asteroid are that podman does not use a daemon and can be run &amp;quot;rootless&amp;quot; (that is, as a non-root user).  This makes some things a bit easier, but either can be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
Remove the Docker container called &amp;lt;code&amp;gt;asteroidos-toolchain&amp;lt;/code&amp;gt; if it already exists:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker rm -f asteroidos-toolchain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
podman rm -f asteroidos-toolchain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build a container image called &amp;lt;code&amp;gt;asteroidos-toolchain&amp;lt;/code&amp;gt; from the given Dockerfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker build --tag asteroidos-toolchain .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
podman build --tag asteroidos-toolchain .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building the software ==&lt;br /&gt;
&lt;br /&gt;
Now that the container with the toolchain software has been created, we can use this to build AsteroidOS.  All of the tools are contained and run within the container, but we use a &#039;&#039;shared volume&#039;&#039;, essentially some drive space that both the host computer and the container can read and write, for actually creating the AsteroidOS image files.&lt;br /&gt;
&lt;br /&gt;
In this example, we will build AsteroidOS for &amp;lt;code&amp;gt;dory&amp;lt;/code&amp;gt;(the LG G Watch).  To build for a different watch than the LG G Watch, use its corresponding codename instead of &amp;lt;code&amp;gt;dory&amp;lt;/code&amp;gt; when executing the &amp;lt;code&amp;gt;docker run ...&amp;lt;/code&amp;gt; command.  You can find the codenames for the supported watches on the [https://asteroidos.org/watches/ Watches page].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Assuming that you have carefully followed the instructions so far and are in the &amp;lt;code&amp;gt;asteroid&amp;lt;/code&amp;gt; directory, you can now build the software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Run this as a non root user&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker run \&lt;br /&gt;
  --rm \&lt;br /&gt;
  -it \&lt;br /&gt;
  -v /etc/passwd:/etc/passwd:ro \&lt;br /&gt;
  -u &amp;quot;$(id -u):$(id -g)&amp;quot; \&lt;br /&gt;
  -v &amp;quot;$HOME/.gitconfig:/$HOME/.gitconfig:ro&amp;quot; \&lt;br /&gt;
  -v &amp;quot;$(pwd):/asteroid&amp;quot; asteroidos-toolchain \&lt;br /&gt;
  bash -c &amp;quot;source ./prepare-build.sh dory &amp;amp;&amp;amp; bitbake asteroid-image&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
podman run \&lt;br /&gt;
  --rm \&lt;br /&gt;
  -it \&lt;br /&gt;
  -v  &amp;quot;$(pwd)&amp;quot;:/asteroid:z \&lt;br /&gt;
  --userns keep-id asteroidos-toolchain \&lt;br /&gt;
  bash -c &amp;quot;source ./prepare-build.sh dory &amp;amp;&amp;amp; bitbake asteroid-image&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files created during the build are placed in the current directory; more specifically, the source files are placed in a &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; subdirectory and build artefacts, including the final binary images are placed in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
&lt;br /&gt;
Here is a detailed explanation of the Docker command above:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;sudo docker run&amp;lt;/code&amp;gt; Runs a container image&lt;br /&gt;
*&amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt; Cleans up after the command is run by removing temporary container storage&lt;br /&gt;
*&amp;lt;code&amp;gt;-it&amp;lt;/code&amp;gt;  Attaches the terminal to the container so that we can see the output. Otherwise it would run blindly in the background.&lt;br /&gt;
*&amp;lt;code&amp;gt;-u &amp;quot;$(id -u):$(id -g)&amp;quot;&amp;lt;/code&amp;gt; Ensures that the current user id and group id from the host is used on files inside the container to avoid permission issues.&lt;br /&gt;
*&amp;lt;code&amp;gt;-v /etc/passwd:/etc/passwd&amp;lt;/code&amp;gt;  Ensures that the user ids and groups from the host are also available in the Docker container. (Otherwise the &amp;lt;code&amp;gt;-u&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;-g&amp;lt;/code&amp;gt; would be useless.)&lt;br /&gt;
*&amp;lt;code&amp;gt;/etc/passwd&amp;lt;/code&amp;gt; Contains the user names and their ids.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;quot;$HOME/.gitconfig:/$HOME/.gitconfig&amp;quot;&amp;lt;/code&amp;gt; Share your user&#039;s git config with the container.&lt;br /&gt;
*&amp;lt;code&amp;gt;-v &amp;quot;$(pwd):/asteroid&amp;quot;&amp;lt;/code&amp;gt; Mount the current directory (which is your asteroid git repo clone) into the container.&lt;br /&gt;
*&amp;lt;code&amp;gt;bash -c &amp;quot;source ./prepare-build.sh dory &amp;amp;&amp;amp; bitbake asteroid-image&amp;quot;&amp;lt;/code&amp;gt;  This is the command to be executed inside of the container with &amp;quot;dory&amp;quot; being the codename of your watch.&lt;br /&gt;
&lt;br /&gt;
Here is a detailed explanation of the podman version of the command above:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;podman run&amp;lt;/code&amp;gt; Runs a container image&lt;br /&gt;
*&amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt; Cleans up after the command is run by removing temporary container storage&lt;br /&gt;
*&amp;lt;code&amp;gt;-it&amp;lt;/code&amp;gt; Attaches the terminal to the container so that we can see the output. Otherwise it would run blindly in the background.&lt;br /&gt;
*&amp;lt;code&amp;gt;-v &amp;quot;$(pwd)&amp;quot;:/asteroid:z&amp;lt;/code&amp;gt; Mount the current directory (which is your asteroid git repo clone) into the container. The &amp;lt;code&amp;gt;:z&amp;lt;/code&amp;gt; tells SELinux, if it&#039;s running, to allow multiple containers to share this mount.&lt;br /&gt;
*&amp;lt;code&amp;gt;--userns keep-id&amp;lt;/code&amp;gt; Run as the current user inside the container&lt;br /&gt;
*&amp;lt;code&amp;gt;bash -c &amp;quot;source ./prepare-build.sh dory &amp;amp;&amp;amp; bitbake asteroid-image&amp;quot;&amp;lt;/code&amp;gt;  This is the command to be executed inside of the container with &amp;lt;code&amp;gt;dory&amp;lt;/code&amp;gt; being the codename of your watch.&lt;br /&gt;
&lt;br /&gt;
If this step was successful, you can proceed to [[#Installing|Installing]] below.&lt;br /&gt;
&lt;br /&gt;
= Installing =&lt;br /&gt;
&lt;br /&gt;
After a while, whether you build with or without containers, the generated image should be available in &amp;lt;code&amp;gt;build/tmp-glibc/deploy/images/dory/&amp;lt;/code&amp;gt; (for &amp;lt;code&amp;gt;dory&amp;lt;/code&amp;gt; -- for other watches, the image files are in the corresponding code word directory.)&lt;br /&gt;
&lt;br /&gt;
Install AsteroidOS using your usual device&#039;s instructions, which you can find linked from the [https://asteroidos.org/watches/ Watches page].&lt;/div&gt;</summary>
		<author><name>Jmlich</name></author>
	</entry>
	<entry>
		<id>https://wiki.asteroidos.org/index.php?title=Building_the_SDK_in_a_container&amp;diff=419</id>
		<title>Building the SDK in a container</title>
		<link rel="alternate" type="text/html" href="https://wiki.asteroidos.org/index.php?title=Building_the_SDK_in_a_container&amp;diff=419"/>
		<updated>2024-01-24T11:01:17Z</updated>

		<summary type="html">&lt;p&gt;Jmlich: Add openembedded to related pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developers]]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
This page describes how to build the Software Development Kit (SDK) for AsteroidOS using &#039;&#039;software containers&#039;&#039;.  If you want to build the SDK without using containers, see [[Building the SDK]] instead.    &lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure which you want, skip to [[With or without software containers?]] &lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure why you would want an SDK, continue reading. &lt;br /&gt;
&lt;br /&gt;
===What is an SDK?===&lt;br /&gt;
&lt;br /&gt;
The Software Development Kit (SDK) for AsteroidOS is a set of tools and libraries for developing software to run on AsteroidOS. Since AsteroidOS is a Linux distribution, you can use just about any programming language to develop software, but most of the core applications use a combination of C++ and Qt, with CMake to build. To get things running quickly, it&#039;s recommended to download and install the prebuilt version as described in [[Installing the SDK]]. This page describes how to build the SDK from source.  Be aware that this can take several hours, even on a fast computer. &lt;br /&gt;
&lt;br /&gt;
====Which SDK?====&lt;br /&gt;
One thing to note is that while this describes &amp;quot;the SDK&amp;quot;, there are actually two versions -- the main one is used to develop software that runs on ARM-based watches running AsteroidOS.  The other one is the SDK for developing applications that run on the emulator, which uses qemux86.  See the [[Emulator]] page for details on the qemux86 version.  This page describes only the main ARM-based SDK but building the emulator version is almost the same.  The only difference is that instead of this: &lt;br /&gt;
 source ./prepare-build.sh dory&lt;br /&gt;
 bitbake meta-toolchain-qt5&lt;br /&gt;
you would do this instead:&lt;br /&gt;
 source ./prepare-build.sh qemux86&lt;br /&gt;
 bitbake meta-toolchain-qt5&lt;br /&gt;
&lt;br /&gt;
You can install both SDKs on the same machine -- they do not interfere.&lt;br /&gt;
&lt;br /&gt;
==With or without software containers?==&lt;br /&gt;
There are two choices to build the SDK: build natively without software containers or build within a software container (such as docker or podman).  &lt;br /&gt;
&lt;br /&gt;
Building natively requires somewhat fewer resources (memory and disk space) than building with containers but requires software, such a compilers and other tools, to be installed on the host system.  Since these software packages are different for each Linux distribution, this method requires more knowledge and patience to install required software that might not already be installed on your host computer.&lt;br /&gt;
&lt;br /&gt;
The alternative, building with software containers, is somewhat more simpler in that the required software is only installed within the container and not on your host computer, but it requires much more time to compile everything.  Still, this may be preferable for people who wish to keep the build environment isolated from the host computer.&lt;br /&gt;
&lt;br /&gt;
The rest of this page describes how to build **with** containers.  If you have decided to build natively instead, go to [[Building the SDK]]  &lt;br /&gt;
&lt;br /&gt;
===Build with containers===&lt;br /&gt;
&lt;br /&gt;
Assuming you already prepared a docker or podman build environment as described in [[Building AsteroidOS]], build the SDK like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker rm -f asteroidos-toolchain&lt;br /&gt;
sudo docker run -it \&lt;br /&gt;
  --name asteroidos-toolchain \&lt;br /&gt;
  -v /etc/passwd:/etc/passwd:ro \&lt;br /&gt;
  -u &amp;quot;$(id -u):$(id -g)&amp;quot; \&lt;br /&gt;
  -v &amp;quot;$HOME/.gitconfig:/$HOME/.gitconfig:ro&amp;quot; \&lt;br /&gt;
  -v &amp;quot;$(pwd):/asteroid&amp;quot; asteroidos-toolchain \&lt;br /&gt;
  bash -c &amp;quot;source ./prepare-build.sh dory &amp;amp;&amp;amp; bitbake meta-toolchain-qt5&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
podman run --rm -it \&lt;br /&gt;
  -v &amp;quot;$(pwd)&amp;quot;:/asteroid:z \&lt;br /&gt;
  --userns keep-id asteroidos-toolchain \&lt;br /&gt;
  bash -c &amp;quot;source ./prepare-build.sh dory &amp;amp;&amp;amp; bitbake meta-toolchain-qt5&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Install the SDK==&lt;br /&gt;
Whether you have built with or without containers, if the process was successful, you should have an SDK installation script &amp;lt;code&amp;gt;tmp-glibc/deploy/sdk/oecore-x86_64-armv7vehf-neon-toolchain-nodistro.0.sh&amp;lt;/code&amp;gt; (relative to the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; directory) -- or a &amp;lt;code&amp;gt;oecore-x86_64-core2-32-toolchain-nodistro.0.sh&amp;lt;/code&amp;gt; script if you are building the version of the SDK for the emulator.  Follow [[installing the SDK#Installing the SDK|these steps]] to install the SDK.&lt;br /&gt;
&lt;br /&gt;
==Related pages==&lt;br /&gt;
&lt;br /&gt;
[[Building the SDK]]&lt;br /&gt;
&lt;br /&gt;
[[installing the SDK]]&lt;br /&gt;
&lt;br /&gt;
[[Building AsteroidOS]]&lt;br /&gt;
&lt;br /&gt;
[[Creating an Asteroid app]]&lt;br /&gt;
&lt;br /&gt;
[[OpenEmbedded]]&lt;/div&gt;</summary>
		<author><name>Jmlich</name></author>
	</entry>
	<entry>
		<id>https://wiki.asteroidos.org/index.php?title=Frequently_Asked_Questions_(FAQ)&amp;diff=417</id>
		<title>Frequently Asked Questions (FAQ)</title>
		<link rel="alternate" type="text/html" href="https://wiki.asteroidos.org/index.php?title=Frequently_Asked_Questions_(FAQ)&amp;diff=417"/>
		<updated>2024-01-19T12:47:06Z</updated>

		<summary type="html">&lt;p&gt;Jmlich: added link to agenda apps page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is AsteroidOS? ==&lt;br /&gt;
AsteroidOS is an open source Linux distribution that runs on many different smartwatches. It uses [http://www.qt.io/ Qt] and QML to provide the graphical interface.&lt;br /&gt;
&lt;br /&gt;
One of the main goals of AsteroidOS is to provide users with greater control over their devices and data privacy. The operating system is fully customizable, and users can modify it to meet their specific needs.&lt;br /&gt;
&lt;br /&gt;
== Which features are provided? ==&lt;br /&gt;
Currently, AsteroidOS has these features available:&lt;br /&gt;
&lt;br /&gt;
- Always-on-Display&lt;br /&gt;
&lt;br /&gt;
- Tilt-to-Wake&lt;br /&gt;
&lt;br /&gt;
- Palm-to-Sleep&lt;br /&gt;
&lt;br /&gt;
- Phone notifications&lt;br /&gt;
&lt;br /&gt;
- Multiple app launcher styles&lt;br /&gt;
&lt;br /&gt;
- Wallpapers&lt;br /&gt;
&lt;br /&gt;
- [https://github.com/AsteroidOS/unofficial-watchfaces Community watchfaces]&lt;br /&gt;
&lt;br /&gt;
- Nightstand mode&lt;br /&gt;
&lt;br /&gt;
== Are any apps preinstalled? ==&lt;br /&gt;
The following apps are delivered with an AsteroidOS installation:&lt;br /&gt;
&lt;br /&gt;
- [[Apps: Agenda|Agenda]], a calendar&lt;br /&gt;
&lt;br /&gt;
- Alarm clock&lt;br /&gt;
&lt;br /&gt;
- Calculator&lt;br /&gt;
&lt;br /&gt;
- Compass&lt;br /&gt;
&lt;br /&gt;
- Diamonds game&lt;br /&gt;
&lt;br /&gt;
- Flashlight&lt;br /&gt;
&lt;br /&gt;
- Heartrate check&lt;br /&gt;
&lt;br /&gt;
- Music, a media remote control&lt;br /&gt;
&lt;br /&gt;
- Settings&lt;br /&gt;
&lt;br /&gt;
- Stopwatch&lt;br /&gt;
&lt;br /&gt;
- Timer&lt;br /&gt;
&lt;br /&gt;
- Weather forecast&lt;br /&gt;
&lt;br /&gt;
== Does an app store exist? ==&lt;br /&gt;
A store to install apps does not yet exist. But this is something that is being considered for future implementation. There are a number of contributed apps that are not installed in the default image. These can be [[Watchface and Package Installation|installed manually]] if desired.&lt;br /&gt;
&lt;br /&gt;
== How can I connect the watch to my phone? ==&lt;br /&gt;
A phone is not &#039;&#039;required&#039;&#039; to use AsteroidOS, but several convenient functions are available when an AsteroidOS watch is paired with one of the [[Synchronization Clients|synchronization clients listed in the documentation]].  A &#039;&#039;synchronization client&#039;&#039; is generically what we call software that runs on a phone or computer that knows how to talk via Bluetooth to an AsteroidOS device.&lt;br /&gt;
&lt;br /&gt;
- Android users can use &amp;quot;AsteroidOSSync&amp;quot; which is available for [https://f-droid.org/packages/org.asteroidos.sync/ download on F-Droid]. Or try [https://f-droid.org/packages/nodomain.freeyourgadget.gadgetbridge/ Gadgetbridge from F-Droid] with initial AsteroidOS support. Mind that on Android 13 and later devices, you will need to manually enable &amp;quot;restricted notification access&amp;quot;. The option is hidden behind the three dot menu in app-info.&lt;br /&gt;
&lt;br /&gt;
- Ubuntu Touch users can download [https://open-store.io/app/telescope.asteroidos Telescope&amp;quot; from OpenStore]&lt;br /&gt;
&lt;br /&gt;
- There is currently no app for iPhone, however notifications can be shared from an iPhone to the watch. See [[Synchronization Clients|this page]] for details.&lt;br /&gt;
&lt;br /&gt;
== What features and apps does AsteroidOS &#039;&#039;&#039;not&#039;&#039;&#039; provide? ==&lt;br /&gt;
There are a great many more &#039;&#039;ideas&#039;&#039; for apps than apps at the moment. Some of the more commonly requested, but not yet available applications and features are:&lt;br /&gt;
&lt;br /&gt;
- Call answering from the watch&lt;br /&gt;
&lt;br /&gt;
- Fitness and health tracking application (step counter, ongoing heartrate monitor, etc.)&lt;br /&gt;
&lt;br /&gt;
- Support for using the watch as a phone (for some watches that incorporate a cellular phone chip)&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;And many more&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Some of these are being worked on, and others are just ideas at this point. If you think you might like to contribute, see our [https://github.com/AsteroidOS/asteroid/issues GitHub repository] and the [https://asteroidos.org/contact/ Contact] page. There are many opportunities for creativity!&lt;br /&gt;
&lt;br /&gt;
== Is AsteroidOS based on Android? ==&lt;br /&gt;
No. AsteroidOS uses [[wikipedia:Hybris_(software)|libhybris]] to simplify porting to most Android and WearOS watches, but it is not Android nor is it WearOS or a derivative of either.&lt;br /&gt;
&lt;br /&gt;
Hardware drivers on modern smartwatches are specifically tailored for Android and WearOS devices. These drivers are closely tied to the hardware and are not compatible with other operating systems, which usually makes porting to alternative platforms a complex and time-consuming process. Libhybris allows AsteroidOS to leverage the proprietary binary drivers and thus greatly helps porting Linux to Android based hardware.&lt;br /&gt;
&lt;br /&gt;
== Can I run WearOS applications? ==&lt;br /&gt;
No. [[wikipedia:Wear_OS|WearOS]] is a version of Android that runs on wearable devices. AsteroidOS is a Linux distribution that does not run Android and therefore cannot run either Android or WearOS applications.&lt;br /&gt;
&lt;br /&gt;
== What is different to WearOS? ==&lt;br /&gt;
One significant difference is that AsteroidOS is open source software, while WearOS is not. That is, if you want to change something and you are a developer, you can [[Building AsteroidOS|build the software]] yourself. Or perhaps you would like to [[Creating a Watchface|create your own watchface]].&lt;br /&gt;
&lt;br /&gt;
Another significant difference is that AsteroidOS, unlike WearOS, tries to make the watch usable without pairing it with a phone. In contrast, WearOS watches only run when they are paired with a phone.&lt;br /&gt;
&lt;br /&gt;
== Does AsteroidOS have any tracking features? ==&lt;br /&gt;
No. AsteroidOS does not collect any tracking data and you don&#039;t need to use or establish any accounts to use it. Nothing on the default installation is able to connect to the internet. While it is possible to [[IP Connection|connect an AsteroidOS watch to the internet]] this must be explicitly done by the user.&lt;br /&gt;
&lt;br /&gt;
== Can my watch run AsteroidOS? ==&lt;br /&gt;
Maybe. Check the [[:Category:Watches|Watches]] page. It lists all devices supported by AsteroidOS. The star rating indicates the current level of support for each device&#039;s hardware features. Watches with at least 3 stars can be considered suitable for everyday use.&lt;br /&gt;
&lt;br /&gt;
== My watch isn&#039;t listed. ==&lt;br /&gt;
Maybe  you can still run Asteroid OS in the future. See the [[Porting Status|porting status]] page for details on what kinds of watches might be supported in the future and what the general requirements are for running AsteroidOS.&lt;br /&gt;
&lt;br /&gt;
If you are interested in porting AsteroidOS to a new watch yourself, please read the [[Porting Guide]] page and contact us via our [https://asteroidos.org/contact/ matrix channel] in case of possible questions.&lt;br /&gt;
&lt;br /&gt;
== Which features of my watch are currently supported? ==&lt;br /&gt;
The available AsteroidOS features depend on the watch you want to use. Review the table on the installation page for your device to get detailed support information.&lt;br /&gt;
&lt;br /&gt;
Or check the [https://asteroidos.org/watches/features/ features table] to see a matrix of all AsteroidOS watches and their feature support.&lt;br /&gt;
&lt;br /&gt;
== Will I be able to revert to the previous operating system? ==&lt;br /&gt;
Yes, very easily if you choose the &amp;quot;temporary install&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
For most watches, you may choose to only temporarily install AsteroidOS alongside the existing OS, called a &amp;quot;dual-boot&amp;quot;. When doing so, the &amp;lt;code&amp;gt;asteroidos.ext4&amp;lt;/code&amp;gt; image is pushed to the userdata partition using ADB. With no alteration to the previous OS. The downside of this method being, AsteroidOS needs to be manually booted using &amp;lt;code&amp;gt;fastboot boot boot-image.fastboot&amp;lt;/code&amp;gt; while connected via USB, after every reboot or shutdown. Else, the previous OS will start up as usual.&lt;br /&gt;
&lt;br /&gt;
In case you decide to replace your previous OS using the full install method, to make the watch boot into AsteroidOS without manual intervention. It is advised that you [[Backup Guide|make a backup of your entire watch]] before flashing AsteroidOS. Only then, you will be able to re-flash those backups to restore the previous OS later.&lt;br /&gt;
&lt;br /&gt;
== When can I expect updates? ==&lt;br /&gt;
The complete rebuild of all packages for all Watch system images and architectures takes almost a week. The build process is started at the beginning of a week. Therefore, it can be expected that new nightlies will be available on the weekend. These will contain all the changes that have been merged up to the start of the build process.&lt;br /&gt;
&lt;br /&gt;
== Can I compile AsteroidOS myself? ==&lt;br /&gt;
If you do not want to flash a prebuilt image onto your watch or wait for the nightlies to be updated, review the [[Building AsteroidOS]] page for detailed instructions on how to compile AsteroidOS yourself.&lt;br /&gt;
&lt;br /&gt;
== My question is not answered. ==&lt;br /&gt;
There are many additional resources. The [[Documentation]] page should be your first stop. It has a lot of useful information about both using and developing for AsteroidOS. If you can&#039;t find your answer on this web site, see [https://asteroidos.org/contact/ Contact].&lt;/div&gt;</summary>
		<author><name>Jmlich</name></author>
	</entry>
</feed>