| .. _chapter-pw-sys-io: |
| |
| .. default-domain:: cpp |
| |
| .. highlight:: sh |
| |
| --------- |
| pw_sys_io |
| --------- |
| This module defines a simple and unoptimized interface for byte-by-byte |
| input/output. This can be done over a logging system, stdio, UART, via a |
| photodiode and modulated kazoo, or basically any way to get data in and out |
| of an application. |
| |
| This facade doesn't dictate any policies on input and output data encoding, |
| format, or transmission protocol. It only requires that backends return a |
| ``Status::OK`` if the operation succeeds. Backends may provide useful error |
| Status types, but depending on the implementation-specific Status values is |
| NOT recommended. Since this facade provides a very vague I/O interface, it |
| does NOT provide tests. Backends are expected to provide their own testing to |
| validate correctness. |
| |
| The intent of this module for simplifying bringup or otherwise getting data |
| in/out of a CPU in a way that is platform-agnostic. The interface is designed |
| to be easy to understand. There's no initialization as part of this |
| interface, there's no configuration, and the interface is no-frills WYSIWYG |
| byte-by-byte i/o. |
| |
| **It is strongly advised NOT to build projects on top of this interface.** There |
| are many drawbacks to using this interface, so it's not generally suited for use |
| in production. |
| |
| Setup |
| ===== |
| This module requires relatively minimal setup: |
| |
| 1. Chose a ``pw_sys_io`` backend, or write one yourself. |
| 2. If using GN build, Specify the ``dir_pw_sys_io_backend`` GN global |
| variable to point to your ``pw_sys_io`` backend. |
| |
| Module usage |
| ============ |
| See backend docs for how to interact with the underlying system I/O |
| implementation. |
| |
| Dependencies |
| ============ |
| * pw_sys_io_backend |
| * pw_span |
| * pw_status |