From b10f3abd0ee3f446ec3ea12d1545018a047ac743 Mon Sep 17 00:00:00 2001
From: Peter Steenbergen
Date: Thu, 31 Aug 2023 10:53:35 +0200
Subject: [PATCH] Start getting the documentation into shape.
---
documentation/README.md | 9 ++
documentation/architecture.md | 54 +++++++
documentation/boards.md | 54 ++++---
documentation/images/Double_copy_layout.png | Bin 0 -> 34899 bytes
documentation/images/grub2_menu.png | Bin 0 -> 3089 bytes
documentation/kernel.md | 8 +-
documentation/python-packages.md | 127 -----------------
documentation/roadmap.md | 150 --------------------
8 files changed, 102 insertions(+), 300 deletions(-)
create mode 100644 documentation/README.md
create mode 100644 documentation/architecture.md
create mode 100644 documentation/images/Double_copy_layout.png
create mode 100644 documentation/images/grub2_menu.png
delete mode 100644 documentation/python-packages.md
delete mode 100644 documentation/roadmap.md
diff --git a/documentation/README.md b/documentation/README.md
new file mode 100644
index 00000000..e141ca10
--- /dev/null
+++ b/documentation/README.md
@@ -0,0 +1,9 @@
+# Documentation
+
+## Contents
+
+- [Supported Hardware](./boards.md) - Supported hardware/ board specific information.
+- [Kernel](./kernel.md) - Kernel versions used.
+- [System Architecture](./architecture.md) - How the system is build up.
+- [Features](./features.md) - What is included within the system.
+- [Building](./building.md) - How to build an image yourself.
\ No newline at end of file
diff --git a/documentation/architecture.md b/documentation/architecture.md
new file mode 100644
index 00000000..d04e3443
--- /dev/null
+++ b/documentation/architecture.md
@@ -0,0 +1,54 @@
+# Technical system architecture
+
+## Disk image build up
+
+The system uses a so called "Double copy with fall-back" architecture. Also known as "A/B (seamless) system updates". This system guarantess that there is always a working copy even if the softwre update is interrupted or a power off occurs.
+Each of these A/B copies contains a linux kernel within it's root file system, which is read only and compressed by utilizing squashfs. At current time the rootfs disk usage is ~300MB.
+
+![Double_copy_layout](./images/Double_copy_layout.png)
+
+A synergy with the boot loader is necessary, because the boot loader must decide which copy should be started. It must be possible to switch between the two copies. After a reboot, the boot loader decides which copy should run.
+A seperate overlay partition for all changeable files is used to make the userspace system read/write. This seperate partition can be overlayed over either active rootfs partitions, being it slot A or slot B. A factory reset can therefor also being easliy obtained by resetting that overlay partition. It will then again start with the files shipped within the read only squashfs partition.
+All docker containers and OVOS framework associated configuration files are stored with the users HOME directory which again is a seperate partition at the end of the disk which is also auto extended over the full size of the disk at boot. This is done based on the availability of free unused disk space at boot. (Any boot, being it the first or any consecutive boot)
+
+## Boot system
+
+The system uses UEFI boot stubs to launch the GRUB2 boot loader. The GRUB2 bootloader takes care of booting the active system partition or can be used to boot into rescue mode for both these system partitions.
+
+## Partition layout
+
+The partition table is written using GPT where possible. Boards/ systems that do not (yet) support GPT, a hybrid system is used. MBR to be able to boot from the ESP bootable partion and from there on GPT takes over again.
+The disk image partitions/ partition table is build up as followed;
+
+- ESP (EFI System Partition); VFAT formatted, 16 MB in size and containes the UEFI stub and GRUB2 boot loader.
+- ROOTFS-1; Compressed SquashFS filesystem partion, 512 MB in size and containes the linux root system Slot-A including the kernel within the /boot folder.
+- ROOTFS-1; Compressed SquashFS filesystem partion, 512 MB in size and containes the linux root system Slot-B including the kernel within the /boot folder.
+- OVERLAYFS; Ext4 formatted, 256 MB in size used to persistant store files. Mostly /etc, /root and /var/log directories.
+- HOMEFS; Ext4 formatted, 64 MB in size out of the box, however being extended over the unused disk space. A minimum of 8 GB as disk size is recommended.
+
+A visual representation looks like this:
+
+```text
+-------------------------
+| ESP |
+-------------------------
+| ROOTFS-1 |
+| |
+-------------------------
+| ROOTFS-2 |
+| |
+-------------------------
+| OVERLAY-FS |
+-------------------------
+| HOMEFS |
+| |
+| |
+...
+-------------------------
+```
+
+## ESP Boot system
+
+The system uses UEFI boot stubs to launch the GRUB2 boot loader. The GRUB2 boot loader takes care of booting the active system partition or can be used to either switch/ roll back to the other system partition or boot into rescue mode for both these system partitions.
+
+![GRUB2 boot menu](./images/grub2_menu.png)
diff --git a/documentation/boards.md b/documentation/boards.md
index 313d84a9..5a5e6d06 100644
--- a/documentation/boards.md
+++ b/documentation/boards.md
@@ -4,54 +4,64 @@
### Raspberry Pi
+| Device | Status | Board | Supported |
+|--------|-----------|-----------|-----------|
+| Raspberry Pi 3 B/B+ | Works | rpi3_64 | Work In Progress |
+| Raspberry Pi 4 | Works | rpi4_64 | YES |
+| Open Virtual Appliance (QEMU, VirtualBox, VMWare, Proxmox, etc)| Works | ova_64 | YES |
+| Generic x86-64 (Intel NUC's) | Works | x86_64 | Work In Progress |
+
+
+## Unsupported for now, but (perhaps) possible in the future
+
+### Raspberry Pi
+
| Device | Status | Board | Supported |
|--------|-----------|-----------|-----------|
| Raspberry Pi A+/B/B+ | Unknown, most likely under powered | N/A | NO |
| Raspberry Pi Zero | Unknown, most likely under powered | N/A | NO |
| Raspberry Pi Zero W | Unknown, most likely under powered | N/A | NO |
| Raspberry Pi 2 B | Unknown, could possibly work | N/A | YES |
-| Raspberry Pi 3 B/B+ | Works | rpi3 | YES |
-| Raspberry Pi 4 | Works | rpi4 | YES |
-
-
-## Unsupported for now, but perhaps possible in the future
### Hardkernel
| Device | Status | Board |
|--------|-----------|-----------|
-| Odroid-C2 | most likely possible | Not available yet |
+| Odroid-C2 | Possible | Not available yet |
+| Odroid-C4 | Possible | Not available yet |
+| Odroid-M1 | Possible | Not available yet |
+| Odroid-N2 | Possible | Not available yet |
+| Odroid-XU4 | Possible | Not available yet |
+
+### Microsoft Windows
+
+| Device | Status | Board |
+|--------|-----------|-----------|
+| WSL2 | Possible | Not available yet |
+
+### Khadas
+
+| Device | Status | Board |
+|--------|-----------|-----------|
+| VIM3 | Possible | Not available yet |
### Orange Pi
| Device | Status | Board |
|--------|-----------|-----------|
-| Prime | most likely possible | Not available yet |
+| * | most likely possible | Not available yet |
### Friendly ARM
| Device | Status | Board |
|--------|-----------|-----------|
-| NanoPi M4 | most likely possible | Not available yet |
+| * | most likely possible | Not available yet |
### Asus
| Device | Status | Board |
|--------|-----------|-----------|
-| Tinker RK3288 | most likely possible | Not available yet |
-| Tinker S RK3288 | most likely possible | Not available yet |
-
-### Intel NUC
-
-| Device | Status | Board |
-|--------|-----------|-----------|
-| Unknown | most likely possible | Not available yet |
-
-### Seeedstudio
-
-| Device | Status | Board |
-|--------|-----------|-----------|
-| ReSpeaker Core V2 | most likely possible | Not available yet |
+| * | most likely possible | Not available yet |
Further ideas and discussion open at the issue tracker: #4
diff --git a/documentation/images/Double_copy_layout.png b/documentation/images/Double_copy_layout.png
new file mode 100644
index 0000000000000000000000000000000000000000..6eb0d302567480e8cb9c984d7cc14baa03bbd2ca
GIT binary patch
literal 34899
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%0ATBv>PKDXrwcH||9E*^u~E;hc=
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
GL;eq?CZWUt
literal 0
HcmV?d00001
diff --git a/documentation/images/grub2_menu.png b/documentation/images/grub2_menu.png
new file mode 100644
index 0000000000000000000000000000000000000000..69e1457d49b9e8de4abaf373aea435b502929b62
GIT binary patch
literal 3089
zcmeHJYfw{37LMZJtPH5@XnbMD(Xmz$VR$RZU3n}j0wX9Wh>>ytF+$`aL3!L66r%!W
z6fsED6uuAw0Ynot(W^%B5g@COfI&z>ga9D~gpk+0w>Q>qO>Ncw+`sFIZNjd2n5@0TLZ!g1S^z4nAtwl%CaK!>w_#XBRxFGkHBqPK5QYg61RkG
zArKlEHfY>87XIBYJ9Y(Hu&k^M08mCCB>IaYE&MM>x9&|R5bQ)>#*A0gyT1|$Hs`km
zY}u71*OUuVl&=>B7Fw^{>8!NAo8u=UZ?SIq>F+2>RPp4-y9-;aXlb)GVAyW3*>1Ed
zVs}l*n{ZkT%{r>TS9~+%9OJJXD(r
zF{A~r0F;9ymB_B1Q&E*GU*(JHt61@XIGQ^}<}D+ihZj@wr-sNuU~lGceZo+@Z;EZu
zCogCN@8E?@76(4|RI$OBhO@kW2e&}CE-dP~4_4c$fblAi2@~7kd8}#2ppoDq?FKXE_nA_W<#~l>JBJ3*@!t>0AFPB(>(_j*Ih+tCn1V{ta-8
zLg8hsLkCD0neH|)pxY?Pwr@^~Gc2}-2P8$mfgyXkqP=Uuoe!5Fk!m72GN%LRhLar$9yVAAZ0#=a2@~zqKLgWL
zI9iE81+c*fdU6S;N&qBro#uP*H<(RmRF>TSv!@S`8~7VZAd6Y)kB`H~$zr?5Agua8
z(QDG1trN)7_orS;W3L}`FKU1OPy8CnaHbudykTJUre>8i^U4w;eCeB0VO2r_nm%Sw
z{k#EaG}8K}*nK^8P7fCgykINnTVoNVfnlVWeYAr*+C}g4-#_xKU@eXPF1YRVL40_W
zT$bw9U)T?6zi6R53)c||ba>nWm#OEQ6jb6%SPmi#bV-ls#uS{5lgAQ9sWjm@4b}$@
zDe0)K1o6o8R;d(OOqDSMpC)>Nz{__JIBSk;
z0N*br3Q|3ZS+lW27)8Apo$Sg6_i5*i0Y};Q&UNLKxK9g$25K#*n^#48Dz*VstdG
zsa_k`>cnfSK^Yy$BLAtm+Sf6hd8@%5_bUY;OieZ#s6-Jq4-?__{6USg4PeWVbFgsX
zEa25C%W$0lshER_9>|}KIhk?2gRZV0=>`L8a1nzW@c464-8n#DN+W6E!ttI0BsdS>
zjRonPUeSBOg)i6fdMyA%%NCbsm8r?g@#CXspj3;iiM8;{6&ITDQU;WaIhflmXF^FB
zMF<+c%qW<{W>Ag06F-r|bxwYt7{3PKTmSJDzJ}my7X1GY;iAz}9!@U!-@=hVuPb*;
z)3B~B5&MuL>cm~vigxr~hc2{RDGXV$|7K5mg`uuG7G_(QRB>D)mDy$Fu*=aQ%)d>J
z`0T6bN#BBJ4T;SK2yxd4sLLjcjb={2lMz|KR&vx8hy#HP_uh9Lv$<
zq)CSALMrqdBt7sV|YsXo%05oWJ?>Hhp^lG=T&|899Zb2?iT{DS>t
zs!L(Cnbxz~nOqNn|H_27Bl*#oXT4*s(=BPf0wz7aZnydH%y!e_5waK!IM88q<<
zQG>;`b2$(t(7#iP?nsU3g6zgrH78s?QB9~r1
zf8I_1IS*r)CrLtJ9HvT#HLld4ln3%pT4Rxa@H>Pn=WZHkT{kLTBYS%FB&@VEz9N^&ES@;z
z=;^5UJ`mr^)tc5kiLEs4=`AdVM%g&F+TAyW+4>=At#BvqgokvYc{MYF0Dc!nV!(E3
z%|83os?2cIY!7_R@QCk&T=~e5A`#$Gm@;$h{-3v5+}})L)d_*%
z1TFZcrb7|O5$uZHR-0Hiam4Tt(QBiZV%N-&k*4Y=vxguJ@FOpTX`6>jWOo@MYI5uo
zybyk5*WBBN>SZq?8QJ}`oH2VH#X~Eb%9J*b$h~gMyR;fKvg@2%XIONIcyBWI1LaM1vT{>n-$hP5
pAYA`Qmb(1eDu25&RP+#;v23aHGArfGOO|$>uq`k&fa`Z4|6dhPtxx~}
literal 0
HcmV?d00001
diff --git a/documentation/kernel.md b/documentation/kernel.md
index 6b866788..9419d443 100644
--- a/documentation/kernel.md
+++ b/documentation/kernel.md
@@ -1,6 +1,12 @@
# Kernel Version
+
Linux kernel version used for supported boards.
+Default kernel tree: 6.1 LTS
| Board | Version |
|-------|---------|
-| Raspberry Pi (3&4) | 5.15.x |
+| Raspberry Pi 3 | 6.1.47 |
+| Raspberry Pi 4 | 6.1.47 |
+| Open Virtual Appliance | 6.1.47 |
+| Generic x86-64 | 6.1.47 |
+
diff --git a/documentation/python-packages.md b/documentation/python-packages.md
deleted file mode 100644
index 68aa8637..00000000
--- a/documentation/python-packages.md
+++ /dev/null
@@ -1,127 +0,0 @@
-# Python 3.8
-
-## Default installed Python libraries
-
-The following Python libraries are installed when Mycroft has been fully booted and configured;
-
-Package Version
------------------------- ---------
-adapt-parser 0.3.4
-appdirs 1.4.3
-arrow 0.15.2
-asn1crypto 1.2.0
-astral 1.4
-beautifulsoup4 4.8.1
-bs4 0.0.1
-cachetools 2.1.0
-casttube 0.2.0
-certifi 2019.9.11
-cffi 1.13.1
-chardet 3.0.4
-Click 7.0
-colorama 0.4.1
-colorzero 1.1
-configshell-fb 1.1.18
-coverage 4.5.1
-coveralls 1.5.1
-cryptography 2.8
-daemonize 2.5.0
-ddg3 0.6.6
-Deprecated 1.2.3
-docopt 0.6.2
-fann2 1.0.7
-fasteners 0.14.1
-feedparser 5.2.1
-gitdb2 2.0.4
-GitPython 2.1.11
-google-api-python-client 1.6.4
-google-auth 1.5.1
-google-auth-httplib2 0.0.3
-gpiozero 1.4.1
-gTTS 2.0.4
-gTTS-token 1.1.3
-holidays 0.9.10
-httplib2 0.14.0
-humanhash3 0.0.6
-idna 2.7
-ifaddr 0.1.4
-importlib-metadata 1.2.0
-inflect 3.0.2
-inflection 0.3.1
-ipaddress 1.0.23
-jaraco.itertools 4.4.2
-lazy 1.4
-lxml 4.4.1
-monotonic 1.5
-more-itertools 8.0.2
-msk 0.3.14
-msm 0.8.3
-multi-key-dict 2.0.3
-mycroft-core 19.8.4
-netaddr 0.7.19
-num2words 0.5.10
-oauth2client 4.1.3
-oauthlib 3.1.0
-olefile 0.46
-padaos 0.1.9
-padatious 0.4.6
-pako 0.2.3
-pep8 1.7.0
-petact 0.1.2
-Pillow 6.2.1
-pip 19.3.1
-pocketsphinx 0.1.0
-precise-runner 0.2.1
-protobuf 3.9.1
-psutil 5.2.1
-pulsectl 17.7.4
-py-mplayer 0.1
-pyalsaaudio 0.8.2
-pyasn1 0.4.7
-pyasn1-modules 0.2.7
-PyAudio 0.2.11
-PyChromecast 3.2.2
-pyCLI 2.0.3
-pycparser 2.19
-pycrypto 2.6.1
-pyee 5.0.0
-PyGithub 1.43.2
-pyjokes 0.5.0
-PyJWT 1.6.4
-pyOpenSSL 19.1.0
-pyowm 2.6.1
-pyparsing 2.4.2
-pyserial 3.0
-python-dateutil 2.7.5
-python-vlc 1.1.2
-pytz 2017.2
-pyusb 1.0.0
-PyYAML 5.1.2
-requests 2.20.0
-requests-futures 0.9.5
-rsa 4.0
-setuptools 41.4.0
-sgmllib3k 1.0.0
-six 1.13.0
-smmap2 2.0.4
-soupsieve 1.9.4
-source 1.2.0
-SpeechRecognition 3.8.1
-spidev 3.4
-texttable 1.6.2
-tornado 6.0.3
-tzlocal 1.3
-uritemplate 3.0.0
-urllib3 1.24.2
-urwid 2.0.1
-uuid 1.30
-websocket-client 0.54.0
-wikipedia 1.4.0
-wolframalpha 3.0
-wrapt 1.11.2
-xmlrunner 1.7.7
-xmltodict 0.12.0
-xxhash 1.2.0
-zeroconf 0.23.0
-zipp 0.6.0
-
diff --git a/documentation/roadmap.md b/documentation/roadmap.md
deleted file mode 100644
index 95b74b24..00000000
--- a/documentation/roadmap.md
+++ /dev/null
@@ -1,150 +0,0 @@
----------------------------------------
-**MycroftOS - Version 0.1.0 - alpha 8**
-
-ChangeLog:
-
-- ~~Ondemand governor for both RPI3 and 4 (instead of performance)~~ [DONE]
-- ~~Fix: MPV not compiling because of missing LD stuff~~ [DONE]
-- ~~Update to latest LTS kernel and drivers / firmwares~~ [DONE]
-- ~~Update to latest LTS buildroot (20.02.1)~~ [DONE]
-- ~~Update to latest Mycroft version and dependencies~~ [DONE]
-- ~~Addition of additional packages for the near future~~ [DONE]
- * ~~OpenCV~~ [DONE]
- * ~~espeak~~ [DONE]
- * ~~Python-Numpy~~ [DONE]
- * ~~Motion~~ [DONE]
- * ~~Mosquitto~~ [DONE]
- * ~~Squeezelite~~ [DONE]
-- ~~Add the last bits of the LAN-MAC address to the hostname~~ [DONE]
-- ~~Update spotifyd to latest 0.2.24 version~~ [DONE]
-- ~~Update snapcast to latest 0.19.0 version~~ [DONE]
-- ~~Update respeaker driver to latest dev version.~~ [DONE]
-- ~~More microphone support~~ [DONE]
- * ~~PS3 Eye~~ [DONE]
-- ~~Cleanup buildroot:~~ [DONE]
- * ~~rootfs default overlay seperate~~ [DONE]
- * ~~device specific overlays~~ [DONE]
-- ~~Look into animating the boot splash screen, showing progress during boot~~ [DONE]
- * ~~Add and implement psplash~~ [DONE]
- * ~~Update all services to update psplash~~ [DONE]
-- ~~Change the wording on the splash screens;~~ [DONE (Removed)]
- * ~~Safe to reboot -> Safe to reboot / Rebootig now~~ [DONE (Removed)]
- * ~~Safe to poweroff -> Safe to poweroff / Powering off~~ [DONE (Removed)]
-- ~~Make use of systemd preset files (/usr/lib/systemd/system-preset/-.preset)~~ [DONE]
- * ~~wpa_supplicant@wlan0.service~~ [DONE]
- * ~~wpa_supplicant@ap0.service~~ [DONE]
- * ~~Enable any other mycroftos services that needs to be enabled by default~~ [DONE]
- * ~~Remove all systemd (enabled) symlinks in the external packages~~ [DONE]
- * ~~Disable any newly installed service by default. (/usr/lib/systemd/system-preset/99-default.preset)~~ [DONE]
- * ~~wpa_supplicant systemd file can now be placed in rootfs-overlay / patch to be removed~~ [DONE]
-- ~~Fix python-speechrecognition package. Do not copy flac binaries~~ [DONE]
-
-
-TODO:
-
-WiFi:
-- WiFi does not come to life after setup with new 2020.02.1 version (found cause: see systemd preset task above)
-- Add 5G support to the wifi system (Country setting most likely)
-
-Enclosure:
-- Implement initial framebuffer drawing GUI
- * Look into showing the pairing code on the HDMI as well (look at mycroft's system)
- * Look into showing the IP address on the HDMI as well (look at mycroft's system)
- * Look into combining the wifi code, the framebuffer code and the enclosure code into one system.
-- Move over / Integrated the WiFi setup into the Enclosure code.
- * Change WifiSetup splash; MycroftOS-Setup -> MycroftOS-WiFiSetup
- * Have a look at the wifi scan to exclude non real SSID (“ID List”)
- * Figure out how to make the wifi password box to be able to show password (eye icon)
-- Enclosure code for enabling services, halt, reboot, etc
-- Enclosure code for pulseaudio control (volume mostly)
-
-System:
-- Systemd notify and Watchdog support to make starting/stopping/restarting and failures way more robust. [WIP]
-- Enable (hardware) watchdog support.
-- Include changing the hostname from the MycroftOS settings skill without messing up above MAC addition.
-- Look into the msm error/warning "no package manager found" (there is none, but just handle the warning)
-- Included volume skill can't be updated
- * Should be changed to pulseaudio anyway, but...
- * Check if the included volume-skill can be updated, via offical git commits
-- Avahi zero config publish to be set up (pulseaudio, mpd, snapcast, etc.)
-- MycroftOS settings skill to be able to setup smart speaker services / software
-- VLC Framebuffer video playing support (if not accelerated, check omxplayer but needs to be created as audio backend within mycroft)
-- Add and make configurable, where sound output has to go;
- * BT Speaker (A2DP) normal (Use a bluetooth speaker as output)
- * Bluetooth mic/speaker combo support using HSP (use headsets as input/output for Mycroft)
- * Airplay (example: SONOS) using module-raop-discover and module-raop-sink of PulseAudio
- * Autoconnect trusted BT devices as soon as it sees them using: module-switch-on-connect from PulseAudio
-
-Documentation:
-- Change README with all new changes [WIP]
-- Update / Complete "documentation" folder and docs
- * Building.md
- * Boards.md
- * Kernel.md
- * Python-packages.md
-- Instructions / Wiki for most common and different aspects and functions;
- * Installation
- * First run
- * Configuration
- - Smart speaker functions
- - System Services
- * Spotify setup
- * Squeezelite setup
- * Snapcast Client/Server setup
- * Bluetooth speaker output setup
- * Airplay speaker output setup
-
-Cleanup & Maintenance:
-- Fix / Check all Buildroot package dependencies (SELECT and DEPENDS references within Config.in)
-- Cleanup buildroot config file
- * remove / disable any unused packages that might have slipped in while testing / debugging / etc.
-- Make sure all Skills from the market can install (python dependencies either available or pre-installed)
-
-
----------------------------------------
-**MycroftOS - Version 1.0.0**
-
-TODO:
-
-- Add an first initial GUI system just as Mycroft.ai (QT5)
-
-- Cleanup the kernel config
- * Remove unused drivers and stuff (DVB and such)
- * Separate default config into systeemwide .config
- * Board specific configs as overlays
-
-- Implement easy (OTA) update system (RAUC or SWUpdate, not sure yet)
-
-- Support for more devices / boards
- * OVA (Virtual system - Virtualbox)
-
-
----------------------------------------
-**MycroftOS - Version 1.1.0**
-
-- Build precise from source at build time (0.3.0 dev version)
- * create buildroot packages for all dependencies.
- * create buildroot package for precise-engine & runner
- * create buildroot package for wake word modules (including the commodity ones)
- * figure out how to give back to the communicty by allowing recording of wake words easily
-
-- Support for more devices / boards
- * Rockchip boards
- * ReSpeaker Pro V2
- * Odroid
- * X86 / 64
- * etc. / ideas
-
-- Implement first initial WEB frontend/backend system for configuration and all
- * Backend for settings, configuration and update
- * Backend pulseaudio control (Already available project as quick fix, but needs to integrate with MycroftOS system)
- * Frontend for possibly accelerated browser hooking into the Mycroft GUI
-
-- 64bit support for RPI3 ~~and RPI4~~ [WIP]
-
-- More hardware/microphone support
- * Google-AIY
- * Kinect-360
-
-- ReSpeaker Mycroft LED pattern which is blue-isch and looks like the logo of Mycroft
-