/*! @page exa_os Examples for Workstations (Windows/POSIX) @tableofcontents
The examples in the qpc/examples/workstation directory are designed for workstations (running Windows, Linux, or MacOS). Currently, the following examples are provided:
- blinky — Simple "Blinky" active object (command-line) - calc — Calculator example from Chapter 2 of [PSiCC2](https://www.state-machine.com/psicc2) - calc1 — Improved Calculator example from Chapter 2 of [PSiCC2](https://www.state-machine.com/psicc2) - calc1_sub — Calculator example with sub-machines - comp — Orthogonal Component design pattern - defer — Deferred Event design pattern - dpp — DPP application from Chapter 9 of [PSiCC2](https://www.state-machine.com/psicc2) (**Spy**) - dpp_comp — DPP with Orthogonal-Component pattern (**Spy**) - dpp-gui — DPP (with GUI on Windows) (**Spy**) - game-gui — "Fly 'n' Shoot" game from Chapter 1 of [PSiCC2](https://www.state-machine.com/psicc2) (**Spy**) - history_qhsm — Transition-to-History (with ::QHsm class) - history_qmsm — Transition-to-History (with ::QMsm class) - qhsmtst — Test State Machine based on ::QHsm from Chapter 2 of [PSiCC2](https://www.state-machine.com/psicc2) (**Spy**) - qmsmtst — Test State Machine based on ::QMsm (**Spy**) - reminder — Reminder design pattern from Chapter 5 of PSiCC2 - reminder2 — Reminder design pattern different version @remark The examples marked with (**Spy**) provide the @ref exa_os-spy "Spy Configuration". ------------------------------------------------------------------------------ @section exa_win_posix Windows and POSIX Workstations All examples in the qpc/examples/workstation directory work both on Windows as well as on POSIX (Linux, MacOS). On each of these operating systems you use the same cross-platform `Makefile` co-located with each example. The provided cross-platform `Makefiles` assume the **GNU GCC toolchain**. The `Makefile` discovers the host operating system and chooses the appropriate QP port version: - On Windows — @ref win32 "win32" or @ref win32-qv "win32-qv"; and - On POSIX — @ref posix "posix" or @ref posix-qv "posix-qv" (Linux, MacOS, etc.) @note On Windows, the **make** utility and the GNU GCC toolchain (**MinGW**) are provided in the [QTools collection](https://www.state-machine.com/qtools), which is available for a separate download. The code can be also built with other tools as well, such as the Microsoft Visual Studio 2013 and newer. @n ![Blinky example on Windows (QP linked from a library)](blinky_win.png) @n ![Blinky example on Linux (QP built from sources)](blinky_posix.png) ------------------------------------------------------------------------------ @section exa_os-qv Single-Threaded and Multi-Threaded QP/C Ports Each of the examples can be linked to either the single-threaded QP/C ports (@ref win32-qv or @ref posix-qv) or multi-threaded ports (@ref win32 or @ref posix). The choice is made in the `Makefiles`, by editing the line, which defines the `QP_PORT_DIR` symbol. For instance, the following lines select the @ref win32-qv port and leave the @ref win32 port commented-out: @code QP_PORT_DIR := $(QPC)/ports/win32-qv #QP_PORT_DIR := $(QPC)/ports/win32 @endcode To reverse the selection, you need to move the comment `#` character. @remarks The single-threaded QP/C ports (@ref win32-qv "win32-qv" and @ref posix-qv "posix-qv") are recommended for **emulating** software intended for deeply-embedded targets ("dual-targeting" the embedded software development).@n @attention Examples in the workstation directory can also be used on the **embedded versions** of the desktop operating systems, such as **Embedded Linux** and **Windows Embedded**. For the embedded applications, the **multi-threaded** @ref ports_os "QP ports" ( @ref posix "posix" and @ref win32 "win32", respectively) are recommended. ------------------------------------------------------------------------------ @section exa_os_conf Debug, Release, and Spy Build Configurations The `Makefiles` for the examples generally support the following three build configurations. @subsection exa_os-dbg Debug Configuration This is the default build configuration, with full debugging information and minimal optimization. To build this configuration, type: @code make @endcode To clean this build, type @code make clean @endcode The object files and the executable is located in the build sub-directory. @subsection exa_os-rel Release Configuration This configuration is built with no debugging information and high optimization. Single-stepping and debugging might be difficult due to the lack of debugging information and optimized code. To build this configuration, type: @code make CONF=rel @endcode To clean this build, type @code make CONF=rel clean @endcode The object files and the executable is located in the build_rel directory. @subsection exa_os-spy Spy Configuration This configuration is built with the QP's Q-SPY trace functionality. The QP/Spy output is performed by a TCP/IP socket and requires launching the QSPY host application with the -t option. To build this configuration, type: @code make CONF=spy @endcode To clean this build, type @code make CONF=spy clean @endcode The object files and the executable are located in the build_spy sub-directory. @note The Spy build configuration requires launching the [QSPY host utility](https://www.state-machine.com/qtools/qspy.html) with the `-t` command-line option **before** running the example. This is so that the example code can output the QS software tracing to the TCP/IP socket of QSPY. @remark Only specific examples support the Spy build configuration. The examples that don't support it, will report an error or will fail the linking stage. @n ![DPP with QSPY example on Windows (QSPY running in a separate command-prompt)](dpp_win.png) @n ![DPP with QSPY example on Linux (QSPY running in a separate terminal)](dpp_posix.png) @next{exa_mware} */