| .. _target-host-device-simulator: |
| |
| ===================== |
| Host Device Simulator |
| ===================== |
| This Pigweed target simulates the behavior of an embedded device, spawning |
| threads for facilities like RPC and logging. Executables built by this target |
| will perpetually run until they crash or are explicitly terminated. All |
| communications with the process are over the RPC server hosted on a local |
| socket rather than by directly interacting with the terminal via standard I/O. |
| |
| ----- |
| Setup |
| ----- |
| To use this target, Pigweed must be set up to use nanopb. The required source |
| repository can be downloaded via ``pw package``, and then the build must be |
| manually configured to point to the location the repository was downloaded to. |
| |
| .. code:: sh |
| |
| pw package install nanopb |
| |
| gn args out |
| # Add this line. |
| dir_pw_third_party_nanopb = pw_env_setup_PACKAGE_ROOT + "/nanopb" |
| |
| ----------------------------- |
| Building and running the demo |
| ----------------------------- |
| This target has an associated demo application that can be built and then |
| run with the following commands: |
| |
| .. code:: sh |
| |
| ninja -C out pw_system_demo |
| |
| ./out/host_device_simulator.speed_optimized/obj/pw_system/bin/system_example |
| |
| To communicate with the launched process, use |
| ``pw-system-console -s localhost:33000 --proto-globs pw_rpc/echo.proto``. |
| |
| In the bottom-most pane labeled ``Python Repl``, you'll now be able to send RPC |
| commands to the simulated device process. For example, you can send an RPC |
| message that will be echoed back: |
| |
| .. code:: sh |
| |
| >>> device.rpcs.pw.rpc.EchoService.Echo(msg='Hello, world!') |
| (Status.OK, pw.rpc.EchoMessage(msg='Hello, world!')) |
| |
| Or run unit tests included on the simulated device: |
| |
| .. code:: sh |
| |
| >>> device.run_tests() |
| True |