*********
eRPC Host
*********

This host example is only tested on Linux machine with Musca-S1 and AN521 FVP.

Example: UART Transportation on Musca-S1
========================================

Build instructions on the target
--------------------------------

.. code-block:: bash

    # Build TF-M

    cmake -G"Unix Makefiles" -S <path_to_tf-m> -B build_spe -DTFM_PLATFORM=musca_s1 \
    -DTFM_PARTITION_CRYPTO=ON -DTFM_PARTITION_INTERNAL_TRUSTED_STORAGE=ON \
    -DTFM_SPM_LOG_LEVEL=TFM_SPM_LOG_LEVEL_SILENCE -DTFM_PARTITION_LOG_LEVEL=LOG_LEVEL_NONE \
    -DMCUBOOT_LOG_LEVEL=OFF

    cmake --build build_spe -- install -j

    # Build NS eRPC server

    cmake -G"Unix Makefiles" -S <path_to_tf-m-tests>/erpc/server/app -B build_nspe \
    -DCONFIG_SPE_PATH=<absolute_path_to_build_spe>/api_ns

    cmake --build build_nspe -j

    # Create the final image

    srec_cat build_spe/bin/bl2.bin -Binary -offset 0xA000000 build_nspe/tfm_s_ns_signed.bin \
    -Binary -offset 0xA020000 -o build_nspe/tfm.hex -Intel

.. Note::
    All the logs must be disabled to avoid interferences between logs and eRPC transportation as
    they share the same UART device.
    Otherwise, the RPC test framework may not work.
    This might only happen on platforms using the same UART devices.

Build instructions on the host
------------------------------

.. code-block:: bash

    cd <TF-M tests base folder>/erpc/host_example

    cmake -S . -B build -G "Unix Makefiles" \
    -DCONFIG_SPE_PATH=<absolute_path_to_build_spe>/api_ns \
    -DERPC_REPO_PATH=<TFM_build_folder>/lib/ext/erpc-src \
    -DERPC_TRANSPORT=UART -DPORT_NAME="/dev/ttyACM0"

    cmake --build  build/

.. Note::
    The ``ERPC_TRANSPORT`` and ``PORT_NAME`` can be omitted and setting the transportation info
    in command line is also supported. Follow `Run instructions`_ on how to use the command line.

Run instructions
----------------

- Flash the image to the device and boot it up.
- Start the host example

  .. code-block:: bash

      cd <TF-M tests base folder>/erpc/host_example
      ./build/erpc_main

  .. Note::
      If ``ERPC_TRANSPORT`` and ``PORT_NAME`` are not set, then they should be set as arguments of
      ``erpc_main``. Execute the following command to run eRPC program:
      ./build/erpc_main --UART /dev/ttyACM0

Example: TCP Transportation on AN521 FVP
========================================

Build instructions on the target
--------------------------------

.. code-block:: bash

    # Build TF-M

    cmake -G"Unix Makefiles" -S <path_to_tf-m> -B build_spe -DTFM_PLATFORM=an521 \
    -DTFM_PARTITION_CRYPTO=ON -DTFM_PARTITION_INTERNAL_TRUSTED_STORAGE=ON

    cmake --build build_spe -- install -j

    # Build NS eRPC server

    cmake -G"Unix Makefiles" -S <path_to_tf-m-tests>/erpc/server/app -B build_nspe \
    -DCONFIG_SPE_PATH=<absolute_path_to_build_spe>/api_ns

    cmake --build build_nspe -j

Build instructions on the host
------------------------------

.. code-block:: bash

    cd <TF-M tests base folder>/erpc/host_example

    cmake -S . -B build -G "Unix Makefiles" \
    -DCONFIG_SPE_PATH=<absolute_path_to_build_spe>/api_ns \
    -DERPC_REPO_PATH=<absolute_path_to_build_nspe>/lib/ext/erpc-src \
    -DERPC_TRANSPORT=TCP -DERPC_HOST="0.0.0.0" -DERPC_PORT=5001

    cmake --build  build/

.. Note::
    The ``ERPC_TRANSPORT``, ``ERPC_HOST`` and ``ERPC_PORT`` can be omitted and setting the
    transportation info in command line when running the app is also supported.
    Follow `Run instructions`_ on how to use the command line.

Run instructions
----------------

Start the AN521 FVP:

.. code-block:: bash

    <DS_PATH>/sw/models/bin/FVP_MPS2_AEMv8M  \
    --parameter fvp_mps2.platform_type=2 \
    --parameter cpu0.baseline=0 \
    --parameter cpu0.INITVTOR_S=0x10000000 \
    --parameter cpu0.semihosting-enable=0 \
    --parameter fvp_mps2.DISABLE_GATING=0 \
    --parameter fvp_mps2.telnetterminal0.start_telnet=1 \
    --parameter fvp_mps2.telnetterminal1.start_telnet=0 \
    --parameter fvp_mps2.telnetterminal2.start_telnet=0 \
    --parameter fvp_mps2.telnetterminal0.quiet=0 \
    --parameter fvp_mps2.telnetterminal1.quiet=1 \
    --parameter fvp_mps2.telnetterminal2.quiet=1 \
    --parameter fvp_mps2.UART0.out_file=/dev/stdout \
    --parameter fvp_mps2.UART0.unbuffered_output=1 \
    --parameter fvp_mps2.telnetterminal1.mode=raw \
    --parameter fvp_mps2.UART1.unbuffered_output=1 \
    --parameter fvp_mps2.mps2_visualisation.disable-visualisation=1 \
    --application cpu0=<APPLICATION> \
    --data cpu0=<DATA>@0x10080000 \
    -M 1

Start the host example

.. code-block:: bash

    cd <TF-M tests base folder>/erpc/host_example
    ./build/erpc_main

.. Note::
      If ``ERPC_TRANSPORT``, ``ERPC_HOST`` and ``ERPC_PORT`` are not set, then they should be set as
      arguments of ``erpc_main``. Execute the following command to run eRPC program:
      ./build/erpc_main --TCP 0.0.0.0 5001

--------------

*Copyright (c) 2023, Arm Limited. All rights reserved.*
