100 lines
3.9 KiB
ReStructuredText
100 lines
3.9 KiB
ReStructuredText
.. zephyr:code-sample:: zbus-remote-mock
|
|
:name: Remote mock sample
|
|
:relevant-api: zbus_apis
|
|
|
|
Publish to a zbus instance using UART as a bridge.
|
|
|
|
Overview
|
|
********
|
|
|
|
This application demonstrates how a host script can publish to the zbus in an embedded device using the UART as a bridge.
|
|
The device sends information to the script running on a computer host. Then, the script sends back information when it would simulate a publish to some channel. Finally, the script decodes the data exchanged and prints it to the stdout.
|
|
|
|
With this approach, developers can implement tests using any language on a computer to talk directly via channels with threads running on a device. Furthermore, it gives the tests more controllability and observability since we can control and access what is sent and received by the script.
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
This project outputs to the console. It can be built and executed
|
|
on :ref:`native_sim <native_sim>` as follows:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/subsys/zbus/remote_mock
|
|
:host-os: unix
|
|
:board: native_sim
|
|
:goals: run
|
|
|
|
Sample Output
|
|
=============
|
|
|
|
.. code-block:: console
|
|
|
|
-- west build: running target run
|
|
[0/1] cd /.../zephyr/build/zephyr/zephyr.exe
|
|
uart_1 connected to pseudotty: /dev/pts/2
|
|
uart connected to pseudotty: /dev/pts/3
|
|
*** Booting Zephyr OS build zephyr-v3.1.0 ***
|
|
D: [Mock Proxy] Started.
|
|
D: [Mock Proxy RX] Started.
|
|
D: [Mock Proxy RX] Found sentence
|
|
D: Channel start_measurement claimed
|
|
D: Channel start_measurement finished
|
|
D: Publishing channel start_measurement
|
|
D: START processing channel start_measurement change
|
|
D: Channel start_measurement claimed
|
|
D: discard loopback event (channel start_measurement)
|
|
D: Channel start_measurement finished
|
|
D: FINISH processing channel start_measurement change
|
|
D: START processing channel sensor_data change
|
|
D: Channel sensor_data claimed
|
|
D: sending message to host (channel sensor_data)
|
|
D: Channel sensor_data finished
|
|
D: FINISH processing channel sensor_data change
|
|
D: sending sensor data err = 0
|
|
|
|
<repeats endlessly>
|
|
|
|
Exit execution by pressing :kbd:`CTRL+C`.
|
|
|
|
The :file:`remote_mock.py` script can be executed using the following command:
|
|
|
|
.. code-block:: bash
|
|
|
|
python3.8 samples/subsys/zbus/remote_mock/remote_mock.py /dev/pts/2
|
|
|
|
|
|
Note the run command above prints the value of pts port because it is running in
|
|
:ref:`native_sim <native_sim>`.
|
|
Look at the line indicating ``uart_1 connected to pseudotty: /dev/pts/2``.
|
|
It can be different in your case. If you are using a board, read the documentation to get the
|
|
correct port destination (in Linux is something like ``/dev/tty...`` or in Windows ``COM...``).
|
|
|
|
From the remote mock (Python script), you would see something like this:
|
|
|
|
.. code-block:: shell
|
|
|
|
Proxy PUB [start_measurement] -> start measurement
|
|
Proxy NOTIFY: [sensor_data] -> sensor value 1
|
|
Proxy PUB [start_measurement] -> start measurement
|
|
Proxy NOTIFY: [sensor_data] -> sensor value 2
|
|
Proxy PUB [start_measurement] -> start measurement
|
|
Proxy NOTIFY: [sensor_data] -> sensor value 3
|
|
Proxy PUB [start_measurement] -> start measurement
|
|
Proxy NOTIFY: [sensor_data] -> sensor value 4
|
|
Proxy PUB [start_measurement] -> start measurement
|
|
Proxy NOTIFY: [sensor_data] -> sensor value 5
|
|
Proxy PUB [start_measurement] -> start measurement
|
|
Proxy NOTIFY: [sensor_data] -> sensor value 6
|
|
Proxy PUB [start_measurement] -> start measurement
|
|
Proxy NOTIFY: [sensor_data] -> sensor value 7
|
|
Proxy PUB [start_measurement] -> start measurement
|
|
Proxy NOTIFY: [sensor_data] -> sensor value 8
|
|
Proxy PUB [start_measurement] -> start measurement
|
|
Proxy NOTIFY: [sensor_data] -> sensor value 9
|
|
Proxy PUB [start_measurement] -> start measurement
|
|
Proxy NOTIFY: [sensor_data] -> sensor value 10
|
|
|
|
<continues>
|
|
|
|
Exit the remote mock script by pressing :kbd:`CTRL+C`.
|