Skip to content
Snippets Groups Projects
Unverified Commit cf06ccf2 authored by Andrei Gherzan's avatar Andrei Gherzan :penguin:
Browse files

docs: Remove blueprints documentation


Signed-off-by: Andrei Gherzan's avatarAndrei Gherzan <andrei.gherzan@huawei.com>
parent 29f7c8e1
No related branches found
No related tags found
No related merge requests found
.. SPDX-FileCopyrightText: Huawei Inc.
..
.. SPDX-License-Identifier: CC-BY-4.0
Vending Machine Blueprint Applications Interface and Protocol
#############################################################
.. contents::
:depth: 4
Communication Protocol
**********************
The "Vending Machine" blueprint will take advantage of two applications: a UI
and an "IO Controller". These applications will exchange messages over a
defined interface using a specific protocol. For the scope of this
specification, the communication will happen over plain WebSockets/TCP.
Specification
-------------
In terms of roles, we have a client and a server. The "IO Controller" acts as a
server while the "UI" process, as a client.
As a minimum client/server specification, the applications will exchange
messages as per the following diagram:
.. code-block::
┌────────────────┐ selection ┌─────────────────────┐
│ ├───────────────────>┤ │
│ │ │ │
│ │ deliver │ IO │
│ UI Application ├───────────────────>┤ Control Application │
│ (client) │ │ (server) │
│ │ delivered │ │
│ │◄───────────────────┤ │
└────────────────┘ └─────────────────────┘
Static information can be set in configuration files shared between both
applications (e.g. for items name, a timeout for simulated actions, number of
item slots, etc.).
Server application is made on generic concepts inspired by WoT/WebThings:
- properties: set a *selection* of products
- selection is a fixed size array and items are identified from indices in
this array while the values represent the associated item quantity
- actions: request a *deliver* order
- order also contain the current selection as a parameter
- events: *delivered* event will notify that the *deliver* action was finished
- event is delivered based on the *addEventSubscription* subscription message
Thoses objects will be used through websockets's messages on default endpoint
(ie: `<ws://localhost:8888/>`).
Client request's payloads are formatted using JSON structures. Below there is
an example for each of the types defined:
Properties
==========
.. code-block:: json
{
"messageType": "setProperty",
"data": {
"selection": [0, 0, 0, 1]
}
}
Actions
=======
.. code-block:: json
{
"messageType": "requestAction",
"data": {
"deliver": {
"input": {
"selection": [0, 1, 0, 0]
}
}
}
}
Events
======
The client needs to send a subscription message once and listen from server's
event messages:
.. code-block:: json
{
"messageType": "addEventSubscription",
"data": {
"delivered": {}
}
}
.. code-block:: json
{
"messageType": "event",
"data": {
"delivered": {}
}
}
Inter-application message flow
------------------------------
The UI and Control applications will adhere to the message schema defined
above. The message flow is described as it follows:
.. code-block::
┌────┐ ┌────┐
│ │ │ │
│ │ │ │
│ │ selection │ │
│ ├─────────────────────►│ │
│ │ │ │
│ │ selection │ │
│ ├─────────────────────►│ │
│ │ │ │
│ │ selection │ │
│ ├─────────────────────►│ │
│ │ │ │
│ │ │ │
│ │ [...] │ │
│ │ │ │
│ UI │ [...] │ IO │
│ │ │ │
│ │ │ │
│ ├─────────────────────►│ │
│ │ │ │
│ │ │ │
│ │ deliver │ │
│ ├─────────────────────►│ │
│ │ │ │
│ │ delivered │ │
│ │◄─────────────────────┤ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
└────┘ └────┘
Detailed example flow:
Firstly, client is intializing by subscribing for server's future **"delivered" events**:
.. code-block:: json
{
"messageType": "addEventSubscription",
"data": {
"delivered": {}
}
}
Client's application is setting an empty selection on server and then UI will
wait for user inputs:
.. code-block:: json
{
"messageType": "setProperty",
"data": {
"selection": [0, 0, 0, 0]
}
}
User selects one product (one of type "1"):
- UI will be updated accordigly
- The client process makes a request to the server to set **selection
"property"**
.. code-block:: json
{
"messageType": "setProperty",
"data": {
"selection": [0, 1, 0, 0]
}
}
The IO Controller will turn on the associated LEDs to show another visual
indication.
Then the user decides to add 1 more product of type "3":
.. code-block:: json
{
"messageType": "setProperty",
"data": {
"selection": [0, 1, 0, 1]
}
}
The user confirms the order by pressing the relevant UI element, then a
**"deliver" action"** is sent from client to the server:
.. code-block:: json
{
"messageType": "requestAction",
"data": {
"deliver": {
"input": {
"selection": [0, 1, 0, 1]
}
}
}
}
The UI application will be blocked until ready or timeout is reached:
- watchdog/timeout timer starts on UI/client
- UI waits for the **delivered** event
Processing is done server-side and **delivered event** is triggered:
.. code-block:: json
{
"messageType": "event",
"data": {
"delivered": {}
}
}
The UI is unblocked and ready for new selection (it should reinitialized to
empty).
If no "delivered" event after a defined timeout, the UI will display an "out of
order" message and show a "reset" button to refresh for the next order.
Software Dependencies Versions
------------------------------
Oniro Project supports the following libraries for message encoding/decoding/parsing and
the communication protocol:
* `libwebsockets <https://libwebsockets.org/>`_ 4.0.1
* `cjson <https://github.com/DaveGamble/cJSON/>`_ 1.7.13 (to be upgraded to
1.7.14 for OpenHarmony convergence)
* `json-c <https://github.com/json-c/json-c>`_ 0.13.1
Extra software could be integrated if needed:
* `libmicrohttpd <https://git.gnunet.org/libmicrohttpd.git/tree/src/include/microhttpd.h>`_
For prototyping purposes server can be easily implemented using
`webthings framework <https://webthings.io/>`_.
Message schema
--------------
Selection Message Schema
========================
The schema for the "selection" messages is:
.. code-block:: json
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "http://example.com/example.json",
"type": "object",
"title": "The root schema",
"description": "The root schema comprises the entire JSON document.",
"default": {},
"examples": [
{
"messageType": "setProperty",
"data": {
"selection": [
0,
1,
0,
0
]
}
}
],
"required": [
"messageType",
"data"
],
"properties": {
"messageType": {
"$id": "#/properties/messageType",
"type": "string",
"title": "The messageType schema",
"default": "",
"examples": [
"setProperty"
]
},
"data": {
"$id": "#/properties/data",
"type": "object",
"title": "The data schema",
"default": {},
"examples": [
{
"selection": [
0,
1,
0,
0
]
}
],
"required": [
"selection"
],
"properties": {
"selection": {
"$id": "#/properties/data/properties/selection",
"type": "array",
"title": "The selection schema",
"default": [],
"examples": [
[
0,
1
]
],
"additionalItems": true,
"items": {
"$id": "#/properties/data/properties/selection/items",
"anyOf": [
{
"$id": "#/properties/data/properties/selection/items/anyOf/0",
"type": "integer",
"title": "The first anyOf schema",
"default": 0,
"examples": [
0,
1
]
}
]
}
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Deliver Message Schema
======================
The schema for the "deliver" messages is:
.. code-block:: json
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "http://example.com/example.json",
"type": "object",
"title": "The root schema",
"description": "The root schema comprises the entire JSON document.",
"default": {},
"examples": [
{
"messageType": "requestAction",
"data": {
"deliver": {
"input": {
"selection": [
0,
1,
0,
0
]
}
}
}
}
],
"required": [
"messageType",
"data"
],
"properties": {
"messageType": {
"$id": "#/properties/messageType",
"type": "string",
"title": "The messageType schema",
"default": "",
"examples": [
"requestAction"
]
},
"data": {
"$id": "#/properties/data",
"type": "object",
"title": "The data schema",
"default": {},
"examples": [
{
"deliver": {
"input": {
"selection": [
0,
1,
0,
0
]
}
}
}
],
"required": [
"deliver"
],
"properties": {
"deliver": {
"$id": "#/properties/data/properties/deliver",
"type": "object",
"title": "The deliver schema",
"default": {},
"examples": [
{
"input": {
"selection": [
0,
1,
0,
0
]
}
}
],
"required": [
"input"
],
"properties": {
"input": {
"$id": "#/properties/data/properties/deliver/properties/input",
"type": "object",
"title": "The input schema",
"default": {},
"examples": [
{
"selection": [
0,
1,
0,
0
]
}
],
"required": [
"selection"
],
"properties": {
"selection": {
"$id": "#/properties/data/properties/deliver/properties/input/properties/selection",
"type": "array",
"title": "The selection schema",
"default": [],
"examples": [
[
0,
1
]
],
"additionalItems": true,
"items": {
"$id": "#/properties/data/properties/deliver/properties/input/properties/selection/items",
"anyOf": [
{
"$id": "#/properties/data/properties/deliver/properties/input/properties/selection/items/anyOf/0",
"type": "integer",
"title": "The first anyOf schema",
"default": 0,
"examples": [
0,
1
]
}
]
}
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Delivered Message Schema
========================
The schema for the "delivered" messages is:
.. code-block:: json
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"title": "The root schema",
"description": "The root schema comprises the entire JSON document.",
"default": {},
"examples": [
{
"messageType": "event",
"data": {
"delivered": {}
}
}
],
"required": [
"messageType",
"data"
],
"properties": {
"messageType": {
"$id": "#/properties/messageType",
"type": "string",
"title": "The messageType schema",
"description": "An explanation about the purpose of this instance.",
"default": "",
"examples": [
"event"
]
},
"data": {
"$id": "#/properties/data",
"type": "object",
"title": "The data schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"examples": [
{
"delivered": {}
}
],
"required": [
"delivered"
],
"properties": {
"delivered": {
"$id": "#/properties/data/properties/delivered",
"type": "object",
"title": "The delivered schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"examples": [
{}
],
"required": [],
"additionalProperties": true
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Previous event will be notified if the client sends a subscription message:
.. code-block:: json
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "http://example.com/example.json",
"type": "object",
"title": "The root schema",
"description": "The root schema comprises the entire JSON document.",
"default": {},
"examples": [
{
"messageType": "addEventSubscription",
"data": {
"delivered": {}
}
}
],
"required": [
"messageType",
"data"
],
"properties": {
"messageType": {
"$id": "#/properties/messageType",
"type": "string",
"title": "The messageType schema",
"description": "An explanation about the purpose of this instance.",
"default": "",
"examples": [
"addEventSubscription"
]
},
"data": {
"$id": "#/properties/data",
"type": "object",
"title": "The data schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"examples": [
{
"delivered": {}
}
],
"required": [
"delivered"
],
"properties": {
"delivered": {
"$id": "#/properties/data/properties/delivered",
"type": "object",
"title": "The delivered schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"examples": [
{}
],
"required": [],
"additionalProperties": true
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Current assumptions
-------------------
* Both of the applications (server/client, "UI"/"IO Controller" are running on
the same, Linux-based target.
* The quantity of a selection is maximum "1". This means that the selection
array can contain values of 0 or 1.
* The availability from the perspective of the "IO Controller" is infinite.
.. SPDX-FileCopyrightText: Huawei Inc.
..
.. SPDX-License-Identifier: CC-BY-4.0
.. include:: ../definitions.rst
Vending Machine Blueprint
#########################
.. image:: assets/vending-machine-logo.jpg
:alt: Vending Machine Blueprint
:height: 100px
.. contents::
:depth: 4
Overview
********
The Vending Machine Blueprint provides support for building a PoC smart vending
machine with components showing the capabilities of the |main_project_name|
build infrastructure to easily build an end-to-end solution using multiple
operating systems cooperating inside a product.
Hardware Setup - Bill of Materials
**********************************
The Vending Machine blueprint provides full support for two complete setups.
One based on Raspberry Pi 4B, an ARMv8 target, and one based on SECO B68, an X86
board. Regardless of the target board chosen, you will need additional
components, connectors, and power supply. Besides the target board, the other
main differences in terms of hardware are the power supply and the HDMI
adapter. The latter is needed because the boards have different video input
connectors (miniDP vs micro-HDMI) while the display comes with a standard HDMI
input connector and cable. Please find below the full bill of materials for the
two supported setups:
Raspberry Pi 4B-based setup BoM
-------------------------------
- 1 x `Pimoroni 5x5 RGB Matrix Breakout
<https://shop.pimoroni.com/products/5x5-rgb-matrix-breakout>`_
- 1 x `7inch HDMI LCD Display, Waveshare, Rev3.1 or Rev2.1
<https://www.waveshare.com/wiki/7inch_HDMI_LCD_(C)>`_ (comes with USB and
HDMI cable)
- multi-coloured DuPont wires
- 1 x microSD card (>=8GB size)
- 1 x `Raspberry Pi 4B board
<https://www.raspberrypi.com/products/raspberry-pi-4-model-b/>`_ (>=2GB RAM)
- 1 x HDMI to micro-HDMI adapter
- 1 x `Raspberry Pi USB-C Power supply
<https://www.raspberrypi.com/products/type-c-power-supply/>`_
.. image:: assets/vending-machine-rpi-bom.jpg
:alt: Vending Machine - Raspberry Pi 4B BoM
SECO B68-based setup BoM
------------------------
- 1 x `Pimoroni 5x5 RGB Matrix Breakout
<https://shop.pimoroni.com/products/5x5-rgb-matrix-breakout>`_
- 1 x `7inch HDMI LCD Display, Waveshare, Rev3.1 or Rev2.1
<https://www.waveshare.com/wiki/7inch_HDMI_LCD_(C)>`_ (comes with USB and
HDMI cable)
- multi-coloured DuPont wires
- 1 x microSD card (>=8GB size)
- 1 x `SECO B68 board <https://edge.seco.com/en/sbc-b68-enuc.html>`_
- 1 x HDMI to miniDP adapter
- 1 x 19V power supply - depending on the board variant, you might need a
barrel or an industrial screw connector
.. image:: assets/vending-machine-b68-bom.jpg
:alt: Vending Machine - SECO B68 BoM
Building the Blueprint Hardware Setup
*************************************
Once we have all the required parts for this blueprint, we can proceed to build
it. Due to differences in connectors and power, there will be a set of
differences between the two setups but in general, the steps are:
- connect the display's HDMI input to the board through the appropriate HDMI
adapter
- connect the display's USB cable to the USB connector on the board
- connect the RGB Matrix to the right I2C pins on the board using dupont wires
.. note::
Note that the RGB Matrix does not come with a soldered pin header so some
soldering work will be required.
.. image:: assets/vending-machine-matrix.jpg
:alt: Vending Machine - RGB Matrix soldered and connected
Raspberry Pi 4B-based Hardware Setup
------------------------------------
.. image:: assets/vending-machine-rpi-hw-setup.jpg
:alt: Vending Machine - Raspberry Pi 4B hardware setup
When building a Raspberry Pi 4B-based hardware setup you will need to:
- connect the display's HDMI input through a micro-HDMI adapter to the
connector labeled `HDMI0` on the Raspberry Pi 4B board (see the image above)
- connect the RGB LED Matrix to the Raspberry Pi 4B I2C interface:
.. image:: assets/vending-machine-rpi-i2c.png
:alt: Vending Machine - Raspberry Pi 4B I2C connection
SECO B68-based Hardware Setup
-----------------------------------
.. image:: assets/vending-machine-b68-hw-setup.jpg
:alt: Vending Machine - SECO B68 hardware setup
When building a SECO B68-based hardware setup you will need to:
- connect the display's HDMI input through a miniDP adapter to the connector
labeled `CN20` on the SECO B68 board (see the image above)
- connect the RGB LED Matrix to the SECO B68 I2C 4 port on the `CN19`
connector:
.. image:: assets/vending-machine-b68-i2c.png
:alt: Vending Machine - SECO B68 I2C connection
The `CN20` connector on the board can be seen here:
.. image:: assets/vending-machine-b68-i2c-board.jpg
:alt: Vending Machine - SECO B68 I2C connection
Fetch Blueprint Sources and Build
*********************************
Fetch the Build Metadata
------------------------
The final piece remaining after building the hardware setup is fetching the
software sources and building the OS.
For fetching the build metadata, follow the :ref:`documentation
<RepoWorkspace>`. This will bring everything you need on your host to start
building an image for this blueprint.
Build the Oniro Image for the Vending Machine Blueprint
-------------------------------------------------------
Once you have a workspace initialised as per the instructions above, you are
ready to build the OS. Firstly, you will be initialising a build:
.. code-block:: bash
$ TEMPLATECONF=../oniro/flavours/linux . ./oe-core/oe-init-build-env build-oniro-vending-machine
This will setup a new build environment in the `build-oniro-vending-machine`
directory (or reuse it if it already exists).
Once the build environment is set we can start building the image. The building
command will be slightly different depending on the target board.
For the Raspberry Pi 4B-based setup:
.. code-block:: bash
$ DISTRO=oniro-linux-blueprint-vending-machine MACHINE=raspberrypi4-64 bitbake blueprint-vending-machine-image
For the SECO b68-based setup:
.. code-block:: bash
$ DISTRO=oniro-linux-blueprint-vending-machine MACHINE=seco-intel-b68 bitbake blueprint-vending-machine-image
Once the build is finished, the images are available for being written on a
microSD card.
Flashing the Blueprint Image
----------------------------
First of all, make sure you have plugged in an microSD card via an microSD card
reader attached to your host. Once that is done, note its associated device
node. You can find that using `udev`, `dmesg` or various other tools. Once the
device not associated to the microSD card is known, proceed to flash the built
image.
.. warning::
The commands below assume that the device node associated with the
microSD card is provided via the `DEVICE` environment variable. Make sure
you have the correct one set before running the commands below to avoid
risking data loss.
For the Raspberry Pi 4B-based setup:
.. code-block:: bash
$ sudo bmaptool copy ./tmp/deploy/images/seco-intel-b68/blueprint-vending-machine-image-seco-intel-b68.wic "$DEVICE"
For the SECO b68-based setup:
.. code-block:: bash
$ sudo bmaptool copy ./tmp/deploy/images/raspberrypi4-64/blueprint-vending-machine-image-raspberrypi4-64.wic.bz2 "$DEVICE"
Running the Vending Machine Blueprint Image
*******************************************
At this point, we have all the pieces we need to run the entire blueprint.
Plug in the microSD card on which you flashed the OS into the board's microSD
card slot. That brings us to the last step: booting the board by the attaching
power source. On a Raspberry Pi 4B, that would be a USB-C power supply while on
SECO B68, it would be a 19V power supply connected to the power barrel or the
industrial screw connector (depending on the board's variant).
Once the boot process completes, the vending machine UI application will take
over the screen and be ready to interact with the RGB LED matrix for item
selection and delivery simulation.
.. image:: assets/vending-machine-b68-boot.jpg
:alt: Vending Machine - SECO B68 up and running
Architecture and Interfaces
***************************
.. toctree::
:maxdepth: 3
vending-machine-dev.rst
Resources
*********
.. _ResourcesVM:
- See `Vending machine's requirement <https://git.ostc-eu.org/OSTC/requirements/-/issues/80>`_
...@@ -161,23 +161,3 @@ This job extends `.build-freertos` job from the manifest repository and builds ...@@ -161,23 +161,3 @@ This job extends `.build-freertos` job from the manifest repository and builds
32bit ARMv5 micro-controller virtual machine. 32bit ARMv5 micro-controller virtual machine.
The cache for this job is publicly available. The cache for this job is publicly available.
blueprint-smartpanel-zephyr
...........................
This job extends `.build-zephyr` job from the manifest repository and builds
the Smart Panel Blueprint - the Zephyr side of it.
.. note::
The cache for this job is not public, pending legal review of any firmware
that may be included.
blueprint-smartpanel-linux
..........................
This job extends `.build-linux` job from the manifest repository and builds
the Smart Panel Blueprint - the Linux side of it.
.. note::
The cache for this job is not public, pending legal review of any firmware
that may be included.
.. SPDX-FileCopyrightText: Huawei Inc.
..
.. SPDX-License-Identifier: CC-BY-4.0
.. include:: ../../definitions.rst
Peripherals used in implementing blueprints
###########################################
This section lists some of the peripherals proposed to be used (and supported) as part of |main_project_name| Blueprints.
Peripheral Categories
*********************
.. toctree::
:maxdepth: 2
io-devices/index
lock-devices/index
.. SPDX-FileCopyrightText: Huawei Inc.
..
.. SPDX-License-Identifier: CC-BY-4.0
.. include:: ../../../definitions.rst
Input/Output Peripherals used in blueprints
###########################################
This section lists some of the peripherals used for input and output used as part of |main_project_name| Blueprints.
.. toctree::
:maxdepth: 3
Touch-based input
*****************
Smart devices accept a variety of input, typically through different types of touch interfaces. Here are a few that are used to produce |main_project_name| Blueprints.
Capacitive Touch Sensor
-----------------------
A capacitive touch sensor is used in various use cases with many different touch finishes, including glass, acrylic, polyester films, etc. It supports multi-touch use cases but needs direct skin contact to work.
Raw Capacitive Touch Sensor
^^^^^^^^^^^^^^^^^^^^^^^^^^^
- `Raw touch sensor<https://www.adafruit.com/product/4830>`
Glass Smart Switches
^^^^^^^^^^^^^^^^^^^^
For switches connected to a wifi network.
- `Sonoff <https://www.sonoff.in/product/sonoff-t3eu-tx-smart-wifi-black-wall-touch-switch-with-smart-home-edge-3-gang-433-rf-remote-control-works-with-alexa-ifttt/>`
Resistive Touch Sensor
----------------------
If a pressure-based touch experience is required (to prevent stray touches), or if it is a low-cost, single-touch application, a resistive touch sensor may be used. These sensors also work with gloves and styluses and are generally more rugged and more resistant to water, dust, and debris.
Matrix Keypad
-------------
Usecases such as PIN entry for payment or alarm system require a numeric keypad. Matrix 3x4 or 4x4 keypads are useful in such cases, with a generic gpio keypad driver able to read the input.
- `Adafruit <https://www.adafruit.com/product/419>`
- `Wider selection at Adafruit <https://learn.adafruit.com/matrix-keypad/featured_products>`
Finger-print sensor
-------------------
For authentication use cases, a fingerprint module might be required.
- `Adafruit fingerprint sensor <https://www.adafruit.com/product/751>`
Combined display and Touch panel
--------------------------------
For applications needing a custom UI, a touch panel might be used. These can be categorized into two:
Touch Panel (Lite)
^^^^^^^^^^^^^^^^^^
.. note::
Needs experimental verification with our boards
- `Adafruit 2.8" PiTFT for Arduino <https://www.adafruit.com/product/1947>`
- `Generic SPI display <https://www.buydisplay.com/2-8-inch-tft-touch-shield-for-arduino-w-capacitive-touch-screen-module>`
- `Monochrome 2.4" OLED Display with touch <https://www.winstar.com.tw/products/oled-module/oled-touch-display/weo012864j-ctp.html>`
Touch Panel (Rich)
^^^^^^^^^^^^^^^^^^
.. note::
Needs experimental verification with our boards
- `Adafruit 2.8" PiTFT for RPi <https://www.adafruit.com/product/1983>`
- `Generic SPI display <https://www.buydisplay.com/2-8-inch-tft-touch-shield-for-arduino-w-capacitive-touch-screen-module>`
- `Adafruit 7" touchscreen display for RPi with DSI interface <https://www.adafruit.com/product/2718>`
Display output
**************
Several devices have a display component to reflect the device's status, provide feedback to user input or show other useful information. Depending on the application, you might choose just a display or a display with a touch panel that allows input.
Display-only
------------
A simple SPI display might be used for applications only needing a display with no touch input.
.. note::
Needs experimental verification with our boards
- `Adafruit 2.0" 320x240 Color IPS TFT Display <https://www.adafruit.com/product/4311>`
Combined display and Touch panel
--------------------------------
See `Combined display and Touch panel above`
.. SPDX-FileCopyrightText: Huawei Inc.
..
.. SPDX-License-Identifier: CC-BY-4.0
.. include:: ../../../definitions.rst
Lock Peripherals used in blueprints
###################################
Smart devices might need keyless locking functionality, e.g., a vending machine, a post box, or a smart door lock. Here are a few that are used in |main_project_name| Blueprints.
.. toctree::
:maxdepth: 3
Solenoids
*********
Solenoids are electromagnets. When the coil is energized, it pulls the lock cylinder to unlock. In the non-energized (unpowered) state, the lock is engaged.
- `Adafruit Lock-style Solenoid - 12VDC <https://www.adafruit.com/product/1512>`
Solenoids with key and button backup
************************************
For applications where you want to be able to disengage the lock in the absense of electricity.
- `Sonoff <https://www.sonoff.in/product/electric-control-rim-lock/>`
...@@ -18,5 +18,4 @@ This section details the hardware (including virtualized) supported as part of ...@@ -18,5 +18,4 @@ This section details the hardware (including virtualized) supported as part of
boards/index boards/index
virtual-boards/index virtual-boards/index
adding-hardware-support adding-hardware-support
blueprint-peripherals/index
peripherals/index peripherals/index
...@@ -15,7 +15,6 @@ Build System Guide ...@@ -15,7 +15,6 @@ Build System Guide
oniro-build/index oniro-build/index
os/index os/index
ci/index ci/index
blueprints/index
supported-images supported-images
hardware-support/index hardware-support/index
fallback-devices-support fallback-devices-support
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment