diff --git a/.gitignore b/.gitignore
index 6c38e62..a697307 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,24 +27,15 @@
*.vcxproj.user
version-*
-.vs/
+priv*/
+bin*/
html/
latex/
-test_priv/
-bin/*.exe
-bin/*.dll
-bin/*.conf
-bin/qspy
-bin/qclean
-bin/qfsgen
gnu_arm-eabi/
libexec/
-dbg/
-rel/
-spy/
-settings/
share/
+.vs/
Debug/
Release/
Spy/
@@ -52,5 +43,3 @@ Spy/
lib/
obj/
output/
-
-qspy/doxygen/html/
diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index 3ea7bf6..0000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-# use a recent CMake version
-cmake_minimum_required(VERSION 3.23 FATAL_ERROR)
-cmake_policy(VERSION 3.23)
-cmake_policy(SET CMP0083 NEW)
-
-# first of all protect against in-source builds
-file(REAL_PATH "${CMAKE_SOURCE_DIR}" _srcdir)
-file(REAL_PATH "${CMAKE_BINARY_DIR}" _bindir)
-
-if(${_srcdir} STREQUAL ${_bindir})
- message(FATAL_ERROR " FATAL: In-source builds are not allowed!
- You should create a separate directory for build files.")
-endif()
-unset(_srcdir)
-unset(_bindir)
-
-# update CMAKE_MODULE_PATH
-list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/source/cmake ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_SOURCE_DIR} ${HOME_PATH}/cmake)
-
-if(NOT SW_VERSION)
- set(SW_VERSION "7.3.3" CACHE STRING "Software Version")
-endif()
-
-message(STATUS "`qtools` - see \"https://www.state-machine.com/qtools/\" for further details.")
-
-# the `qtools` project, consisting of the tools listed below
-# qtools - https://www.state-machine.com/qtools/
-project(
- qtools
- VERSION ${SW_VERSION}
- DESCRIPTION "QTools - https://www.state-machine.com/qtools/"
- HOMEPAGE_URL "https://www.state-machine.com/qtools/"
- LANGUAGES C
-)
-
-# select target platform specific source directory
-if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL Windows)
- set(PLATFORM_DIR win32)
-else()
- set(PLATFORM_DIR posix)
-endif()
-
-# the qclean tool - https://www.state-machine.com/qtools/qclean.html
-add_executable(qclean)
-add_subdirectory(qclean)
-
-# the qfsgen tool - https://www.state-machine.com/qtools/qfsgen.html
-add_executable(qfsgen)
-add_subdirectory(qfsgen)
-
-# the qspy tool - https://www.state-machine.com/qtools/qspy.html
-add_executable(qspy)
-add_subdirectory(qspy)
-
-# the `install` targets
-set(QDATAROOT share/qtools)
-set(QTARGETS qclean qfsgen qspy)
-set(QDIRS qcalc qutest qview qwin)
-set(QBIN cmock generate_test_runner python3 qcalc qspy_exit sha256)
-list(TRANSFORM QBIN APPEND .bat)
-list(APPEND QBIN Termite.ini)
-list(TRANSFORM QBIN PREPEND bin/)
-
-install(TARGETS ${QTARGETS})
-install(PROGRAMS ${BIN_FILES} TYPE BIN)
-install(DIRECTORY doc LICENSES DESTINATION ${QDATAROOT}/doc)
-install(FILES README.md DESTINATION ${QDATAROOT}/doc)
-install(DIRECTORY ${QDIRS} DESTINATION ${QDATAROOT}/data)
diff --git a/CMakePresets.json b/CMakePresets.json
deleted file mode 100644
index c60f449..0000000
--- a/CMakePresets.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "version": 6,
- "cmakeMinimumRequired": {
- "major": 3,
- "minor": 23,
- "patch": 0
- },
-
- "configurePresets": [
- {
- "name": "qtools",
- "displayName": "qtools",
- "description": "Build all qtools",
- "binaryDir": "${sourceDir}/build",
- "generator": "Ninja Multi-Config",
- "cacheVariables": {
- "CMAKE_CONFIGURATION_TYPES": {
- "type": "STRING",
- "value": "Debug;Release"
- },
- "CMAKE_BUILD_TYPE": {
- "type": "STRING",
- "value": "Debug"
- }
- }
- }
- ],
-
- "buildPresets": [
- {
- "name": "qtools",
- "displayName": "qtools",
- "description": "Build all qtools",
- "configurePreset": "qtools",
- "configuration": "Release"
- }
- ]
-}
diff --git a/LICENSES/LICENSE-qspy.txt b/LICENSES/LICENSE-qspy.txt
new file mode 100644
index 0000000..d7e08c6
--- /dev/null
+++ b/LICENSES/LICENSE-qspy.txt
@@ -0,0 +1,85 @@
+QUANTUM LEAPS QSPY SOFTWARE TRACING HOST UTILITY SOFTWARE
+END USER LICENSE AGREEMENT
+
+These license terms are an agreement between Quantum Leaps and you.
+Please read them. They apply to the QSPY tool as well as to any
+accompanying documentation and examples. BY USING THE SOFTWARE, YOU ACCEPT
+THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.
+
+
+1. DEFINITIONS
+1.1. QSPY is a console-based software tracing host utilty for receiving,
+visualizing, and communicating with the remote Target systems running
+QP/Spy tracing software. QSPY provides textual output to the screen and
+various network interfaces to communicate with the external applications
+(e.g., QUTest testing or QView monitoring). QSPY is currently available for
+Windows, Linux and macOS hosts.
+
+1.2. QP/Spy software tracing system is part of the QP Real-Time Embedded
+Frameworks (RTEFs).
+
+1.3. "Licensed Software" means the QSPY executable, documentation, and
+examples. The Licensed Software expressly does NOT include the products of
+software tracing, such as the saved binary files, screen output logs,
+"dictionary" files, or generated sequence diagrams.
+
+
+2. GRANT OF COPYRIGHT LICENSE
+Quantum Leaps grants to you, and you hereby accept, a nonexclusive,
+nontransferable license to do the following:
+
+2.1. to install and use the QSPY software for the purpose of tracing,
+testing, and monitoring your programs.
+
+3. EXCLUSIONS FROM LICENSE GRANT
+The Licensed Software is licensed by this Agreement, not sold or given away.
+This Agreement only grants you some rights to use the software. Quantum Leaps
+reserves all other rights.
+
+3.1. No right is granted to trademarks, copyrights, patents, trade secrets or
+any other Intellectual Property of Quantum Leaps, even if such trademarks are
+included in the Licensed Software.
+
+3.2. Nothing in this Agreement shall be interpreted to prohibit Quantum Leaps
+from licensing under different terms from this Agreement any original work
+that Quantum Leaps otherwise would have a right to license.
+
+
+4. LIMITATIONS ON THE USE OF THE LICENSED SOFTWARE
+You may use the Licensed Software only as expressly permitted in this
+Agreement. In doing so, you must comply with any technical limitations in
+the software that only allow you to use it in certain ways. By accepting
+this Agreement you agree to the following:
+
+4.1. You may not remove or modify any copyright notes, legal notes, license
+information, attribution notes, logos, URLs, or e-mail addresses embedded in
+the source code generated by QM, or in the QM executable and in the QSPY
+documentation;
+
+4.2. You may not sell, rent, lease or lend the Licensed Software; and
+
+4.3. You may not use the Licensed Software to create similar stand-alone
+products based on the QP/Spy software tracing system.
+
+
+5. DISCLAIMER OF WARRANTY
+BECAUSE THE QM SOFTWARE IS LICENSED FREE OF CHARGE, IT IS LICENSED "AS IS"
+WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
+NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
+THE LICENSED SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW SHALL QUANTUM LEAPS BE LIABLE
+TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF OR INABILITY TO USE THE
+LICENSED SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE
+OF THE SOFTWARE TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
+OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. NO LICENSE
+TO THE LICENSED SOFTWARE IS GRANTED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. CONTACT INFORMATION
+Any questions or concerns related to this Agreement should be directed to
+Quantum Leaps at the following e-mail address:
+- mailto:info@state-machine.com
diff --git a/LICENSES/LICENSE.txt b/LICENSES/LICENSE.txt
index bd703d7..1c1225c 100644
--- a/LICENSES/LICENSE.txt
+++ b/LICENSES/LICENSE.txt
@@ -1,33 +1,30 @@
-QTools Collection
-=================
-Most tools included in the QTools collection for Windows are distributed
-under the terms of the GNU General Public License (GPL) as published by
-the Free Software Foundation, either version 2 of the License, or (at
-your option) any later version. The text of GPL version 2 is included
-in the file qtools/LICENSES/GPL-2.0-or-later.txt.
-
-Some of the tools are distributed under the terms of the MIT open source
-license. The complete text of the MIT license is included in the file
-qtools/LICENSES/LICENSE-MIT.txt as well as in the source code comments.
-
-The Python package is distributed under the terms of the PYTHON LICENSE
-AGREEMENT, included in the file PYTHON_LICENSE.txt in the file
-qtools/LICENSES/LICENSE-Python.txt.
-
-The LMFlash utility for Windows is is distributed under the terms
-of the LMFlash license, included in the file:
-qtools/LICENSES/LICENSE-LMFlash.txt
-
-Specifically, the LMFlash utility is distributed according to Section 2a
-"Demonstration License".
-
-The freewaer Termite utility for Windows is is distributed under the terms
-of the zlib/libpng License included in the file:
-qtools/LICENSES/LICENS-Termite.txt
-
-
-Contact Information:
-=============
-- https://www.state-machine.com
-- mailto:info@state-machine.com
-
+The various licenses for QTools components are located in the
+LICENSES/ sub-directory of this QTools distribution.
+
+- The [qspy host utility](https://www.state-machine.com/qtools/qspy.html)
+is distributed under the terms of QSPY LICENSE AGREEMENT, included in the file
+`LICENSE-qspy.txt` in the `LICENSES/` sub-directory.
+
+- The [Termite host utility for Windows](https://www.compuphase.com/software_termite.htm)
+is is distributed under the terms of the Termite license, included in the file
+`LICENSE-Termite.txt` in the `LICENSES/` sub-directory.
+
+- The [LMFlash host utility for Windows](https://www.ti.com/tool/LMFLASHPROGRAMMER)
+is is distributed under the terms of the LMFlash license, included in the file
+`LICENSE-LMFlash.txt` in the `LICENSES/` sub-directory. Specifically, the LMFlash
+utility is distributed according to Section 2a "Demonstration License".
+
+- The [Python package for Windows](https://www.python.org/) is distributed
+under the terms of the PYTHON LICENSE AGREEMENT, included in the file
+`LICENSE-Python.txt` in the `LICENSES/` sub-directory.
+
+Most other tools included in this collection are distributed under the
+terms of the GNU General Public License (GPL) as published by the Free
+Software Foundation, either version 2 of the License, or (at your
+option) any later version. The text of GPL version 2 is included in the
+file GPL-2.0-or-later.txt in the `LICENSES/` sub-directory.
+
+Some other the tools are distributed under the terms of the MIT open
+source license. The complete text of the MIT license is included in the
+comments and also in the file LICENSE-MIT.txt in the `LICENSES/`
+sub-directory.
diff --git a/README.md b/README.md
index 30fa0db..5567c80 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,8 @@
-![QTools Collection](https://www.state-machine.com/img/qtools_banner.jpg)
+
+
+
+
+
# What's New?
[![GitHub release (latest by date)](https://img.shields.io/github/v/release/QuantumLeaps/qtools)](https://github.com/QuantumLeaps/qtools/releases/latest)
@@ -25,63 +29,63 @@ The following open-source tools are currently provided (NOTE: tools
starting with 'q' are contributed by Quantum Leaps)
1. [qspy](https://www.state-machine.com/qtools/qspy.html) -
- host application for receiving and displaying the
- real-time data from embedded targets running the QS
- software tracing.
+ host application for receiving and displaying the real-time data from
+ embedded targets running the QS software tracing.
2. [qutest](https://www.state-machine.com/qtools/qutest.html) -
- Python extension of the QSPY host application for **uint testing**
- specifically designed for embedded systems, but also supports
- unit testing of embedded code on host computers
- ("dual targeting").
+ Python extension of the `qspy` host application for
+ **unit and integration testing** specifically designed for embedded systems,
+ but also supports unit testing of embedded code on host computers
+ ("dual targeting").
3. [qview](https://www.state-machine.com/qtools/qview.html) -
- Python extension of the QSPY host application for
- visualization and monitoring of the QS real-time tracing
- data from embedded targets at real-time. QView enables
- developers to quickly build both GUI-based and "headless"
- scripts for their specific applications.
+ Python extension of the `qspy` host application for visualization and
+ monitoring of the QS real-time tracing data from embedded targets at
+ real-time. QView enables developers to quickly build both GUI-based and
+ "headless" scripts for their specific applications.
4. [qwin](https://www.state-machine.com/qtools/qwin.html) -
- QWIN GUI toolkit for prototyping embedded systems on
- Windows in the C programming language. QWIN allows you
- to build realistic embedded front panels consisting of
- LCD displays (both graphical and segmented), buttons,
- and LEDs. QWIN is based on the Win32 API.
+ QWIN GUI toolkit for prototyping embedded systems on Windows in the
+ C programming language. QWIN enables developers to build realistic embedded
+ front panels consisting of LCD displays (both graphical and segmented),
+ buttons, and LEDs. QWIN is based on the Win32 API.
5. [qcalc](https://www.state-machine.com/qtools/qcalc.html) -
programmer's calculator specifically designed for embedded systems programmers.
6. [qclean](https://www.state-machine.com/qtools/qclean.html) -
- for cleanup of white space (tabs, trailing spaces, end-of-line) in source code files
+ for *fast* cleanup of white space (tabs, trailing spaces, end-of-line)
+ in source code files
7. [qfsgen](https://www.state-machine.com/qtools/qfsgen.html) -
for generating ROM-based file systems to be used in embedded web pages
served by the HTTP server
-8. Unity - traditional unit testing harness (framework) for embedded C
- (version 2.5.2)
+8. Unity - traditional unit testing harness (framework) for embedded C
+ (version 2.5.2)
Additionally, QTools for Windows contains the following open-source,
3rd-party tools:
-9. GNU-make for Windows (32-bit version 4.2.1)
+9. `make` for Windows (GNU-make-32-bit version 4.2.1)
-10. cmake for Windows (version 3.29.0-rc1)
+10. `cmake` for Windows (version 3.29.0-rc1)
-11. ninja for Windows (version 1.11.1)
+11. `ninja` for Windows (version 1.11.1)
-12. LMFlash for Windows (32-bit build 1613)
+12. Termite serial terminal for Windows (version 3.4)
+
+13. LMFlash for Windows (32-bit build 1613)
Additionally, the QTools directory in the QP-bundle contains the
following 3rd-party tools:
-13. GNU C/C++ toolset for Windows (MinGW 32-bit version 9.2.0)
+14. GNU C/C++ toolset for Windows (MinGW 32-bit version 9.2.0)
-14. GNU C/C++ toolset for ARM-EABI (GCC version 10.3-2021.10)
+15. GNU C/C++ toolset for ARM-EABI (GCC version 10.3-2021.10)
-15. Python for Windows (version 3.10 32-bit)
+16. Python for Windows (version 3.10 32-bit)
# Downloading and Installation
@@ -107,14 +111,13 @@ On Windows, installation of QTools consists of unzipping the
although the recommended default is `C:\qp`.
After unzipping the archive, you need to add the following directories
-to the PATH:
-
-- \qtools\bin
-- \qtools\mingw32\bin
+to the PATH (`` stands for the directory, where you installed qp):
+- `\qtools\bin`
+- `\qtools\mingw32\bin`
-Also, to use the [QUTest unit testing][QUTest] you need to
-define the environment variable `QTOOLS` to point to the
-installation directory of QTools.
+> NOTE: To use the [QUTest unit testing][QUTest] you need to define the
+environment variable `QTOOLS` to point to the installation directory
+of QTools.
## QTools on Linux/macOS
@@ -122,88 +125,46 @@ On Linux/MacOS, installation of QTools consists of unzipping the
`qtools-posix_.zip` archive into a directory of your choice,
although the recommended default is `~/qp`.
-> NOTE: To use the QTools, you first need to **build** the tools on
-your machine.
-
-For example, to build the QSPY host application, you need to go to the
-directory qtools/qspy/posix and type make to build the executable.
-The provided Makefile will automatically copy the qspy executable to
-the qtools/bin directory.
-
-Simiarly, you need to build the QCLEAN and QFSGEN utilities.
-
-> NOTE: To use the [QUTest unit testing][QUTest] you need to
-define the environment variable `QTOOLS` to point to the
-installation directory of QTools.
-
-
-## Build using `cmake`
-With the right set of C compilation tools on your Windows or Linux
-computer, you can build the tools by yourself.
-
-On a MS-Windows machine a setup with [MSys/MinGW64](https://www.msys2.org/) is recommended to
-perform the build. With this environment you will still be able to
-generate MS-Windows executable applications.
-Another alternative would be to install [MS Visual Studio](https://visualstudio.microsoft.com/).
-`CMake` is also able to generate build systems for this development environment.
-This however will not be a topic of this discussion. Please see the
-[CMake Documentation](https://cmake.org/cmake/help/latest/) for further
-details. Especially refer to the section on
-[cmake generators](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html).
-
-An appropriate [CMakeLists.txt](./CMakeLists.txt) file together with a [cmake presets
-file](./CMakePresets.json) is provided with this source code package.
-
-From within the `qtools` directory you may use `cmake` to build and
-install the 3 tools. For this you need the following in addition to the tools
-mentioned [above](#about-qtools)
-
-1. [CMake](https://cmake.org/) - build system generator ([cmake features](https://cmake.org/features/))
-
-2. [Ninja](https://ninja-build.org/) - small build system with a focus on speed
-
-To build with `cmake`
-1. From within the `qtools` directory do `cmake --preset qtools`
-2. Then build with
- - `cmake --build --preset qtools` to build all tools at once or
- - `cmake --build --preset qtools --target ` with tool being `qclean`, `qfsgen` or `qspy`
- - to build the `Debug` configuration use `cmake --build --preset qtools --config Debug`
- - `Release` is the default configuration, if you don't specify a desired config
-3. The binaries are created in the `.../qtools/build/` directory
-4. To install
- - Build the `qtools` preset then
- - call `cmake --install build [--config ]`
- - The default installation location would be `/usr/local/bin` on a Linux machine or within
- a MinGW environment on a Windows machine.
- - add `--prefix ` to the installation command line to select a different installation destination.
- E.g. `cmake --install build --prefix /usr` will install the built applications from the `Release`
- configuration into `/usr/bin`. On a Linux machine you might need to use `sudo` to raise your access rights
- in order to install into system directories.
+After unzipping the archive, you need to add the following directories
+to the PATH (`` stands for the directory, where you installed qp):
+- `/qtools/bin`
+
+> NOTE: To use the [QUTest unit testing][QUTest] you need to define the
+environment variable `QTOOLS` to point to the installation directory
+of QTools.
# Licensing
The various Licenses for distributed components are located in the
LICENSES/ sub-directory of this QTools distribution.
-Most tools included in this collection are distributed under the terms
-of the GNU General Public License (GPL) as published by the Free
-Software Foundation, either version 2 of the License, or (at your
-option) any later version. The text of GPL version 2 is included in the
-file GPL-2.0-or-later.txt in the LICENSES/ sub-directory.
+- The [qspy host utility](https://www.state-machine.com/qtools/qspy.html)
+is distributed under the terms of QSPY LICENSE AGREEMENT, included in the file
+`LICENSE-qspy.txt` in the `LICENSES/` sub-directory.
-Some of the tools are distributed under the terms of the MIT open source
-license. The complete text of the MIT license is included in the comments
-and also in the file LICENSE-MIT.txt in the LICENSES/ sub-directory.
+- The [Termite host utility for Windows](https://www.compuphase.com/software_termite.htm)
+is is distributed under the terms of the Termite license, included in the file
+`LICENSE-Termite.txt` in the `LICENSES/` sub-directory.
+- The [LMFlash host utility for Windows](https://www.ti.com/tool/LMFLASHPROGRAMMER)
+is is distributed under the terms of the LMFlash license, included in the file
+`LICENSE-LMFlash.txt` in the `LICENSES/` sub-directory. Specifically, the LMFlash
+utility is distributed according to Section 2a "Demonstration License".
-The Python package is distributed under the terms of the PYTHON LICENSE
-AGREEMENT, included in the file LICENSE-Python.txt in the LICENSES/
-sub-directory.
+- The [Python package for Windows](https://www.python.org/) is distributed
+under the terms of the PYTHON LICENSE AGREEMENT, included in the file
+`LICENSE-Python.txt` in the `LICENSES/` sub-directory.
+
+Most other tools included in this collection are distributed under the
+terms of the GNU General Public License (GPL) as published by the Free
+Software Foundation, either version 2 of the License, or (at your
+option) any later version. The text of GPL version 2 is included in the
+file GPL-2.0-or-later.txt in the `LICENSES/` sub-directory.
-The LMFlash utility for Windows is is distributed under the terms of the
-LMFlash license, included in the file LICENSE-LMFlash.txt in the LICENSES/
-sub-directory. Specifically, the LMFlash utility is distributed according
-to Section 2a "Demonstration License".
+Some other the tools are distributed under the terms of the MIT open
+source license. The complete text of the MIT license is included in the
+comments and also in the file LICENSE-MIT.txt in the `LICENSES/`
+sub-directory.
# Source Code
@@ -222,7 +183,7 @@ the files have been pruned to reduce the size of the distribution.
Please refer to the MinGW project for the source code.
### The GNU-ARM Embedded Toolchain for Windows
-Have been takend from:
+Have been taken from:
- https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
The installer gcc-arm-none-eabi-8-2018-q4-major-win32-sha1.exe has been used.
@@ -241,10 +202,10 @@ Has been taken from the GitHub at:
# How to Help this Project?
-If you like this project, please give it a star (in the upper-right corner of your browser window):
-
-![GitHub star](https://www.state-machine.com/img/github-star.jpg)
+If you like this project, please give it a star (in the upper-right corner
+of your browser window):
+
# Contact information:
- https://www.state-machine.com
diff --git a/bin/Termite.ini b/bin/Termite.ini
deleted file mode 100644
index b37cf63..0000000
--- a/bin/Termite.ini
+++ /dev/null
@@ -1,28 +0,0 @@
-[Settings]
-Port=COM16
-Baud=115200
-DataBits=8
-StopBits=1
-Parity=0
-Handshake=0
-ForwardPort=
-[Options]
-LocalEcho=1
-AppendLine=0
-Window=156 1460 639 504
-FontType=1
-Polling=100
-MaxLines=0
-WordWrap=1
-AutoComplete=1
-KeepHistory=0
-CloseOnCancel=1
-Topmost=0
-AutoClosePort=0
-Language=English (en)
-[History]
-cmd1=x
-cmd2=y
-cmd3=s
-cmd4=a
-cmd5=dfsdfa
diff --git a/bin/cmock.bat b/bin/cmock.bat
deleted file mode 100644
index 8aa5948..0000000
--- a/bin/cmock.bat
+++ /dev/null
@@ -1 +0,0 @@
-ruby %QTOOLS%\unity\extras\cmock\lib\cmock.rb %1 %2 %3 %4 %5 %6 %7 %8 %9
\ No newline at end of file
diff --git a/bin/generate_test_runner.bat b/bin/generate_test_runner.bat
deleted file mode 100644
index b948bc6..0000000
--- a/bin/generate_test_runner.bat
+++ /dev/null
@@ -1 +0,0 @@
-ruby %QTOOLS%\unity\auto\generate_test_runner.rb %1 %2 %3 %4 %5 %6 %7 %8 %9
\ No newline at end of file
diff --git a/bin/python3.bat b/bin/python3.bat
deleted file mode 100644
index 9ea7d12..0000000
--- a/bin/python3.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-@%~dp0..\Python3\python.exe %1 %2 %3 %4 %5 %6 %7 %8
diff --git a/bin/qcalc.bat b/bin/qcalc.bat
deleted file mode 100644
index 52fd70f..0000000
--- a/bin/qcalc.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-@%~dp0..\Python3\python.exe %~dp0..\qcalc\qcalc.py %1 %2 %3 %4 %5 %6 %7 %8
diff --git a/bin/qcalc.lnk b/bin/qcalc.lnk
deleted file mode 100644
index 5a3619b..0000000
Binary files a/bin/qcalc.lnk and /dev/null differ
diff --git a/bin/qspy_exit.bat b/bin/qspy_exit.bat
deleted file mode 100644
index 6b0a02b..0000000
--- a/bin/qspy_exit.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-@%~dp0..\Python3\python.exe %~dp0..\qspy\qspy_exit.py %1 %2 %3 %4
diff --git a/bin/sha256.bat b/bin/sha256.bat
deleted file mode 100644
index 8ea8b73..0000000
--- a/bin/sha256.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-@certutil -hashfile %1 SHA256
diff --git a/qclean/CMakeLists.txt b/qclean/CMakeLists.txt
deleted file mode 100644
index 2e3e420..0000000
--- a/qclean/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-message(STATUS "`qtools/qclean` - see \"https://www.state-machine.com/qtools/qclean.html\" for further details.")
-
-# the main target
-target_sources(qclean PRIVATE
- source/main.c
- source/getopt.c
- ${PLATFORM_DIR}/filesearch.c
-)
-
-# add include dirs to target (-I...)
-target_include_directories(qclean PRIVATE include)
diff --git a/qclean/include/qclean.h b/qclean/include/qclean.h
index 00540cf..4d0a3b8 100644
--- a/qclean/include/qclean.h
+++ b/qclean/include/qclean.h
@@ -1,43 +1,41 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2024-02-19
-* @version Last updated for version: 7.3.3
-*
-* @file
-* @brief QClean internal interface
-*/
+//============================================================================
+// QClean white space cleanup host utility
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
#ifndef QCLEAN_H_
#define QCLEAN_H_
-#define VERSION "7.3.3"
+#define VERSION "8.0.0"
unsigned isMatching (char const *fullPath);
void onMatchFound(char const *fullPath, unsigned flags, int ro_info);
void filesearch (char const *dirname);
-extern char const dir_separator; /* platform-dependent directory separator */
+extern char const dir_separator; // platform-dependent directory separator
-#endif /* QCLEAN_H_ */
+#endif // QCLEAN_H_
diff --git a/qclean/include/safe_std.h b/qclean/include/safe_std.h
index d8da8f0..921ea5d 100644
--- a/qclean/include/safe_std.h
+++ b/qclean/include/safe_std.h
@@ -1,34 +1,32 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2022-07-30
-* @version Last updated for: @ref qpc_7_1_3
-*
-* @file
-* @brief "safe" and facilities
-*/
+//============================================================================
+// QClean white space cleanup host utility
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
#ifndef SAFE_STD_H_
#define SAFE_STD_H_
diff --git a/qclean/posix/Makefile b/qclean/posix/Makefile
deleted file mode 100644
index 5f487f6..0000000
--- a/qclean/posix/Makefile
+++ /dev/null
@@ -1,193 +0,0 @@
-##############################################################################
-# Product: Makefile for QCLEAN console, POSIX(Linux/Mac-OS), GNU compiler
-# Last updated for version 7.2.2
-# Last updated on 2023-01-25
-#
-# Q u a n t u m L e a P s
-# ------------------------
-# Modern Embedded Software
-#
-# Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-#
-# This program is open source software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Alternatively, this program may be distributed and modified under the
-# terms of Quantum Leaps commercial licenses, which expressly supersede
-# the GNU General Public License and are specifically designed for
-# licensees interested in retaining the proprietary status of their code.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-#
-# Contact information:
-#
-#
-##############################################################################
-# examples of invoking this Makefile:
-# building configurations: Debug (default), Release, and Spy
-# make
-# make CONF=dbg
-#
-# cleaning configurations: Debug (default), Release, and Spy
-# make clean
-# make CONF=dbg clean
-
-#-----------------------------------------------------------------------------
-# project name
-#
-PROJECT := qclean
-
-#-----------------------------------------------------------------------------
-# project directories:
-#
-
-# list of all source directories used by this project
-VPATH := . \
- ../source
-
-# list of all include directories needed by this project
-INCLUDES := -I. \
- -I../include
-
-
-#-----------------------------------------------------------------------------
-# project files:
-#
-
-# C source files...
-C_SRCS := \
- main.c \
- getopt.c \
- filesearch.c
-
-# C++ source files...
-CPP_SRCS :=
-
-LIB_DIRS :=
-LIBS :=
-
-#-----------------------------------------------------------------------------
-# GNU toolset:
-#
-CC := gcc
-CPP := g++
-LINK := gcc # for C programs
-#LINK := g++ # for C++ programs
-
-#-----------------------------------------------------------------------------
-# basic utilities:
-#
-MKDIR := mkdir -p
-RM := rm
-
-#-----------------------------------------------------------------------------
-# build configurations...
-#
-
-ifeq (dbg, $(CONF)) # Debug configuration ....................................
-
-BIN_DIR := dbg
-
-CFLAGS = -c -g -ffunction-sections -fdata-sections \
- -O -Wall -Wextra $(INCLUDES) $(DEFINES)
-
-CPPFLAGS = -c -g -ffunction-sections -fdata-sections \
- -O -Wall -Wextra $(INCLUDES) $(DEFINES)
-
-else # default Release configuration ........................................
-
-BIN_DIR := rel
-
-CFLAGS = -c -ffunction-sections -fdata-sections \
- -O3 -Wall -Wextra $(INCLUDES) $(DEFINES) -DNDEBUG
-
-CPPFLAGS = -c -ffunction-sections -fdata-sections \
- -O3 -Wall -Wextra $(INCLUDES) $(DEFINES) -DNDEBUG
-
-endif # .....................................................................
-
-UNAME := $(shell uname)
-ifeq ($(UNAME), Darwin)
- LINKFLAGS :=
-else
-ifndef GCC_OLD
- LINKFLAGS := -no-pie
-endif
-endif
-
-#-----------------------------------------------------------------------------
-C_OBJS := $(patsubst %.c,%.o, $(C_SRCS))
-CPP_OBJS := $(patsubst %.cpp,%.o, $(CPP_SRCS))
-
-TARGET_EXE := $(BIN_DIR)/$(PROJECT)$(TARGET_EXT)
-C_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(C_OBJS))
-C_DEPS_EXT := $(patsubst %.o,%.d, $(C_OBJS_EXT))
-CPP_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(CPP_OBJS))
-CPP_DEPS_EXT := $(patsubst %.o,%.d, $(CPP_OBJS_EXT))
-
-# create $(BIN_DIR) if it does not exist
-ifeq ("$(wildcard $(BIN_DIR))","")
-$(shell $(MKDIR) $(BIN_DIR))
-endif
-
-#-----------------------------------------------------------------------------
-# rules
-#
-
-all: $(TARGET_EXE)
-
-$(TARGET_EXE) : $(C_OBJS_EXT) $(CPP_OBJS_EXT) $(RC_OBJS_EXT)
- $(LINK) $(LINKFLAGS) $(LIB_DIRS) -o $@ $^ $(LIBS)
- cp $@ ../../bin
-
-$(BIN_DIR)/%.d : %.cpp
- $(CPP) -MM -MT $(@:.d=.o) $(CPPFLAGS) $< > $@
-
-$(BIN_DIR)/%.d : %.c
- $(CC) -MM -MT $(@:.d=.o) $(CFLAGS) $< > $@
-
-$(BIN_DIR)/%.o : %.cpp
- $(CPP) $(CPPFLAGS) $< -o $@
-
-$(BIN_DIR)/%.o : %.c
- $(CC) $(CFLAGS) $< -o $@
-
-.PHONY : clean show
-
-# include dependency files only if our goal depends on their existence
-ifneq ($(MAKECMDGOALS),clean)
- ifneq ($(MAKECMDGOALS),show)
--include $(C_DEPS_EXT) $(CPP_DEPS_EXT)
- endif
-endif
-
-.PHONY : clean show
-
-clean:
- -$(RM) $(BIN_DIR)/*.o \
- $(BIN_DIR)/*.d \
- $(TARGET_EXE)
-
-show:
- @echo PROJECT = $(PROJECT)
- @echo TARGET_EXE = $(TARGET_EXE)
- @echo VPATH = $(VPATH)
- @echo C_SRCS = $(C_SRCS)
- @echo CPP_SRCS = $(CPP_SRCS)
- @echo C_DEPS_EXT = $(C_DEPS_EXT)
- @echo C_OBJS_EXT = $(C_OBJS_EXT)
- @echo C_DEPS_EXT = $(C_DEPS_EXT)
- @echo CPP_DEPS_EXT = $(CPP_DEPS_EXT)
- @echo CPP_OBJS_EXT = $(CPP_OBJS_EXT)
- @echo LIB_DIRS = $(LIB_DIRS)
- @echo LIBS = $(LIBS)
- @echo DEFINES = $(DEFINES)
-
diff --git a/qclean/posix/filesearch.c b/qclean/source/filesearch_posix.c
similarity index 53%
rename from qclean/posix/filesearch.c
rename to qclean/source/filesearch_posix.c
index 76d39d4..3ea1556 100644
--- a/qclean/posix/filesearch.c
+++ b/qclean/source/filesearch_posix.c
@@ -1,34 +1,32 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2022-12-03
-* @version Last updated for: @ref qtools_7_1_3
-*
-* @file
-* @brief QClean implementation for POSIX
-*/
+//============================================================================
+// QClean white space cleanup host utility
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
#include
#include
#include
diff --git a/qclean/win32/filesearch.c b/qclean/source/filesearch_win.c
similarity index 66%
rename from qclean/win32/filesearch.c
rename to qclean/source/filesearch_win.c
index f72f227..d0df859 100644
--- a/qclean/win32/filesearch.c
+++ b/qclean/source/filesearch_win.c
@@ -1,34 +1,32 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2022-12-03
-* @version Last updated for: @ref qtools_7_1_3
-*
-* @file
-* @brief file search implementation for Windows
-*/
+//============================================================================
+// QClean white space cleanup host utility
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
#include
#include
#include
@@ -47,11 +45,11 @@ char const dir_separator = '\\'; /* platform-dependent directory separator */
void filesearch(char const *dirname) {
static char buffer[1024];
struct _finddata_t fdata;
- long hnd;
+ intptr_t hnd;
unsigned flags;
_chdir(dirname);
- hnd = _findfirst("*", &fdata); /* set _findfirst to find everthing */
+ hnd = _findfirst("*", &fdata); /* set _findfirst to find everything */
if (hnd == -1) { /* if handle fails, directory is empty... */
return;
}
diff --git a/qclean/source/main.c b/qclean/source/main.c
index 5380b67..9e52683 100644
--- a/qclean/source/main.c
+++ b/qclean/source/main.c
@@ -1,39 +1,32 @@
-/*============================================================================
-* QTools Collection
-*
-* Q u a n t u m L e a P s
-* ------------------------
-* Modern Embedded Software
-*
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2024-02-20
-* @version Last updated for version: 7.3.3
-*
-* @file
-* @brief main for QClean host utility
-*/
+//============================================================================
+// QClean white space cleanup host utility
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
#include
#include
#include
@@ -122,7 +115,7 @@ static FileType const l_fileTypes[] = {
{ ".project", 8, CR_FLG }, /* Eclipse project */
{ ".cproject",9, CR_FLG }, /* Eclipse CDT project */
- { ".md5", 4, CR_FLG | TAB_FLG }, /* MD5 file */
+ { ".sha1", 5, CR_FLG | TAB_FLG }, /* Sha1 file */
{ ".pro", 4, CR_FLG | TAB_FLG }, /* Qt project */
{ ".m", 2, CR_FLG | TAB_FLG | LONG_LINE_FLG }, /* MATLAB */
@@ -141,7 +134,7 @@ static int const l_fileNum = sizeof(l_fileTypes)/sizeof(l_fileTypes[0]);
* the function returns 0.
*/
unsigned isMatching(char const *fname) {
- int const flen = strlen(fname);
+ int const flen = (int)strlen(fname);
FileType const *ft = &l_fileTypes[0];
for (int n = l_fileNum; n > 0; --n, ++ft) { /* go over all file types.. */
@@ -206,7 +199,8 @@ void onMatchFound(char const *fname, unsigned flags, int ro_info) {
char *src = src_buf;
static char dst_buf[10*1024*1024]; /* 10MB buffer */
char *dst = dst_buf;
- int nBytes = FREAD_S(src_buf, sizeof(src_buf), 1U, sizeof(src_buf), f);
+ int nBytes = (int)FREAD_S(src_buf, sizeof(src_buf),
+ 1U, sizeof(src_buf), f);
fclose(f);
if (nBytes == sizeof(src_buf)) { /* full buffer? */
PRINTF_S("\n%s(too big -- skipped)\n", fname);
diff --git a/qclean/win32/Makefile b/qclean/win32/Makefile
deleted file mode 100644
index 22518ae..0000000
--- a/qclean/win32/Makefile
+++ /dev/null
@@ -1,199 +0,0 @@
-#=============================================================================
-# Product: Makefile for qclean console, Win32, MinGW
-# Last updated for version 7.3.0
-# Last updated on 2023-09-26
-#
-# Q u a n t u m L e a P s
-# ------------------------
-# Modern Embedded Software
-#
-# Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-#
-# SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-#
-# This software is dual-licensed under the terms of the open source GNU
-# General Public License version 3 (or any later version), or alternatively,
-# under the terms of one of the closed source Quantum Leaps commercial
-# licenses.
-#
-# The terms of the open source GNU General Public License version 3
-# can be found at:
-#
-# The terms of the closed source Quantum Leaps commercial licenses
-# can be found at:
-#
-# Redistributions in source code must retain this top-level comment block.
-# Plagiarizing this software to sidestep the license obligations is illegal.
-#
-# Contact information:
-#
-#
-#=============================================================================
-# examples of invoking this Makefile:
-# building configurations: Debug (default), Release, and Spy
-# make
-# make CONF=dbg
-#
-# cleaning configurations: Debug (default), Release, and Spy
-# make clean
-# make CONF=dbg clean
-#
-# NOTE:
-# To use this Makefile on Windows, you will need the GNU make utility, which
-# is included in the Qtools collection for Windows, see:
-# https://github.com/QuantumLeaps/qtools/releases
-#
-
-#-----------------------------------------------------------------------------
-# project name:
-#
-PROJECT := qclean
-
-#-----------------------------------------------------------------------------
-# project directories:
-#
-
-# list of all source directories used by this project
-VPATH := . \
- ../source
-
-# list of all include directories needed by this project
-INCLUDES := -I. \
- -I../include
-
-#-----------------------------------------------------------------------------
-# project files:
-#
-
-# C source files...
-C_SRCS := \
- main.c \
- getopt.c \
- filesearch.c
-
-# C++ source files...
-CPP_SRCS :=
-
-DEFINES :=
-LIB_DIRS :=
-LIBS :=
-
-#-----------------------------------------------------------------------------
-# MinGW toolset (NOTE: assumed to be on your PATH)
-#
-# NOTE:
-# MinGW toolset is included in the Qtools collection for Windows, see:
-# https://github.com/QuantumLeaps/qtools/releases
-
-CC := gcc
-CPP := g++
-LINK := gcc
-
-
-##############################################################################
-# Typically, you should not need to change anything below this line
-
-# basic utilities (included in QTools for Windows), see:
-# https://github.com/QuantumLeaps/qtools/releases
-
-MKDIR := mkdir
-RM := rm
-
-#-----------------------------------------------------------------------------
-# build options for various configurations
-#
-
-ifeq (dbg, $(CONF)) # Debug configuration ....................................
-
-BIN_DIR := dbg
-
-CFLAGS = -c -g -std=c11 \
- -O -Wall -Wextra -Wpedantic $(INCLUDES) $(DEFINES)
-
-CPPFLAGS = -c -g -std=c++11 -fno-rtti -fno-exceptions \
- -O -Wall -Wextra -Wpedantic $(INCLUDES) $(DEFINES)
-
-else # default Release configuration ........................................
-
-BIN_DIR := rel
-
-CFLAGS = -c -std=c11 \
- -Ofast -Wall -Wextra -Wpedantic $(INCLUDES) $(DEFINES) -DNDEBUG
-
-CPPFLAGS = -c -std=c++11 -fno-rtti -fno-exceptions \
- -Ofast -Wall -Wextra -Wpedantic $(INCLUDES) $(DEFINES) -DNDEBUG
-
-endif # .....................................................................
-
-LINKFLAGS := -Wl,-Map,$(BIN_DIR)/$(PROJECT).map,--cref,--gc-sections
-
-#-----------------------------------------------------------------------------
-
-C_OBJS := $(patsubst %.c, %.o, $(C_SRCS))
-CPP_OBJS := $(patsubst %.cpp, %.o, $(CPP_SRCS))
-RC_OBJS := $(patsubst %.rc, %.o, $(RC_SRCS))
-
-TARGET_BIN := $(BIN_DIR)/$(PROJECT).bin
-TARGET_EXE := $(BIN_DIR)/$(PROJECT).exe
-C_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(C_OBJS))
-C_DEPS_EXT := $(patsubst %.o, %.d, $(C_OBJS_EXT))
-CPP_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(CPP_OBJS))
-CPP_DEPS_EXT := $(patsubst %.o, %.d, $(CPP_OBJS_EXT))
-RC_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(RC_OBJS))
-
-# create $(BIN_DIR) if it does not exist
-ifeq ("$(wildcard $(BIN_DIR))","")
-$(shell $(MKDIR) $(BIN_DIR))
-endif
-
-#-----------------------------------------------------------------------------
-# rules
-#
-
-all: $(TARGET_EXE)
-
-$(TARGET_EXE) : $(C_OBJS_EXT) $(CPP_OBJS_EXT) $(RC_OBJS_EXT)
- $(LINK) $(LINKFLAGS) $(LIB_DIRS) -o $@ $^ $(LIBS)
-
-$(BIN_DIR)/%.d : %.cpp
- $(CPP) -MM -MT $(@:.d=.o) $(CPPFLAGS) $< > $@
-
-$(BIN_DIR)/%.d : %.c
- $(CC) -MM -MT $(@:.d=.o) $(CFLAGS) $< > $@
-
-$(BIN_DIR)/%.o : %.cpp
- $(CPP) $(CPPFLAGS) $< -o $@
-
-$(BIN_DIR)/%.o : %.c
- $(CC) $(CFLAGS) $< -o $@
-
-# include dependency files only if our goal depends on their existence
-ifneq ($(MAKECMDGOALS),clean)
- ifneq ($(MAKECMDGOALS),show)
--include $(C_DEPS_EXT) $(CPP_DEPS_EXT)
- endif
-endif
-
-.PHONY : clean show
-
-clean:
- -$(RM) $(BIN_DIR)/*.o \
- $(BIN_DIR)/*.d \
- $(BIN_DIR)/*.map \
- $(TARGET_EXE)
-
-show:
- @echo PROJECT = $(PROJECT)
- @echo TARGET_EXE = $(TARGET_EXE)
- @echo VPATH = $(VPATH)
- @echo C_SRCS = $(C_SRCS)
- @echo CPP_SRCS = $(CPP_SRCS)
- @echo C_DEPS_EXT = $(C_DEPS_EXT)
- @echo C_OBJS_EXT = $(C_OBJS_EXT)
- @echo C_DEPS_EXT = $(C_DEPS_EXT)
- @echo CPP_DEPS_EXT = $(CPP_DEPS_EXT)
- @echo CPP_OBJS_EXT = $(CPP_OBJS_EXT)
- @echo LIB_DIRS = $(LIB_DIRS)
- @echo LIBS = $(LIBS)
- @echo DEFINES = $(DEFINES)
-
diff --git a/qclean/win32/make-vs.bat b/qclean/win32/make-vs.bat
deleted file mode 100644
index bca550b..0000000
--- a/qclean/win32/make-vs.bat
+++ /dev/null
@@ -1,24 +0,0 @@
-:: Batch file for building the specified PROJ (solution) prepared for
-:: Microsoft Visual Studio
-::
-:: usage:
-:: make
-::
-@setlocal
-
-:: specifiy project and build configuration (Debug|Release|Spy)
-@set PROJ=qclean
-@set CONF=Release
-
-:: adjust the MSBuild location for your system
-@set MSBuild="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"
-
-:: execute the build...
-%MSBuild% %PROJ%.sln -t:Build -p:Configuration=%CONF% -p:Platform=Win32
-
-:: cleanup after the build...
-rmdir /S /Q %CONF%\%PROJ%.tlog
-del %CONF%\%PROJ%.vcxproj* %CONF%\%PROJ%.log %CONF%\*.obj %CONF%\*.pdb
-
-@endlocal
-
diff --git a/qclean/win32/qclean.sln b/qclean/win32/qclean.sln
deleted file mode 100644
index 80ad8ee..0000000
--- a/qclean/win32/qclean.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.7.34031.279
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qclean", "qclean.vcxproj", "{CBECC159-8744-4517-828D-D3C740E68AA5}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Debug|x64.ActiveCfg = Debug|x64
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Debug|x64.Build.0 = Debug|x64
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Debug|x86.ActiveCfg = Debug|Win32
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Debug|x86.Build.0 = Debug|Win32
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Release|x64.ActiveCfg = Release|x64
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Release|x64.Build.0 = Release|x64
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Release|x86.ActiveCfg = Release|Win32
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Release|x86.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {72F1DD46-1083-46CF-9E35-E3CD17D5165D}
- EndGlobalSection
-EndGlobal
diff --git a/qclean/win32/qclean.vcxproj b/qclean/win32/qclean.vcxproj
deleted file mode 100644
index 1d61409..0000000
--- a/qclean/win32/qclean.vcxproj
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- 17.0
- Win32Proj
- {cbecc159-8744-4517-828d-d3c740e68aa5}
- qclean
- 10.0
-
-
-
- Application
- true
- v143
- NotSet
-
-
- Application
- false
- v143
- true
- NotSet
-
-
- Application
- true
- v143
- NotSet
-
-
- Application
- false
- v143
- true
- NotSet
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Level3
- true
- qclean_APP;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- ../include
-
-
- Console
- true
- ws2_32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- true
- true
- qclean_APP;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- ../include
-
-
- Console
- true
- true
- true
- ws2_32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- qclean_APP;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- stdc11
- ../include
-
-
- Console
- true
- ws2_32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- true
- true
- qclean_APP;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- stdc11
- ../include
-
-
- Console
- true
- true
- true
- ws2_32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/qclean/win32/qclean.vcxproj.filters b/qclean/win32/qclean.vcxproj.filters
deleted file mode 100644
index a6fbe50..0000000
--- a/qclean/win32/qclean.vcxproj.filters
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
-
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
-
\ No newline at end of file
diff --git a/qfsgen/CMakeLists.txt b/qfsgen/CMakeLists.txt
deleted file mode 100644
index 5afc129..0000000
--- a/qfsgen/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-# QTools/qfsgen
-message(STATUS "`qtools/qfsgen` - see \"https://www.state-machine.com/qtools/qfsgen.html\" for further details.")
-
-# the main target
-target_sources(qfsgen PRIVATE
- source/main.c
- ${PLATFORM_DIR}/filesearch.c
-)
-
-# add include dirs to target (-I...)
-target_include_directories(qfsgen PRIVATE include)
diff --git a/qfsgen/include/qfsgen.h b/qfsgen/include/qfsgen.h
index 438d655..0bbe462 100644
--- a/qfsgen/include/qfsgen.h
+++ b/qfsgen/include/qfsgen.h
@@ -1,43 +1,41 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2022-12-03
-* @version Last updated for: @ref qtools_7_1_3
-*
-* @file
-* @brief QFSgen ROM file system generator internal interface
-*/
+//============================================================================
+// QFSGEN ROM file system generation host utility
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
#ifndef QFSGEN_H_
#define QFSGEN_H_
-#define VERSION "6.9.0"
+#define VERSION "8.0.0"
unsigned isMatching (char const *fullPath);
void onMatchFound(char const *fullPath, unsigned flags, int ro_info);
void filesearch (char const *dirname);
-extern char const dir_separator; /* platform-dependent directory separator */
+extern char const dir_separator; // platform-dependent directory separator
-#endif /* QFSGEN_H_ */
+#endif // QFSGEN_H_
diff --git a/qfsgen/include/safe_std.h b/qfsgen/include/safe_std.h
index d8da8f0..921ea5d 100644
--- a/qfsgen/include/safe_std.h
+++ b/qfsgen/include/safe_std.h
@@ -1,34 +1,32 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2022-07-30
-* @version Last updated for: @ref qpc_7_1_3
-*
-* @file
-* @brief "safe" and facilities
-*/
+//============================================================================
+// QClean white space cleanup host utility
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
#ifndef SAFE_STD_H_
#define SAFE_STD_H_
diff --git a/qfsgen/posix/Makefile b/qfsgen/posix/Makefile
deleted file mode 100644
index 3a594eb..0000000
--- a/qfsgen/posix/Makefile
+++ /dev/null
@@ -1,192 +0,0 @@
-##############################################################################
-# Product: Makefile for QFSGEN console, POSIX (Linux/Mac-OS), GNU compiler
-# Last updated for version 7.2.2
-# Last updated on 2023-01-25
-#
-# Q u a n t u m L e a P s
-# ------------------------
-# Modern Embedded Software
-#
-# Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-#
-# This program is open source software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Alternatively, this program may be distributed and modified under the
-# terms of Quantum Leaps commercial licenses, which expressly supersede
-# the GNU General Public License and are specifically designed for
-# licensees interested in retaining the proprietary status of their code.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-#
-# Contact information:
-#
-#
-##############################################################################
-# examples of invoking this Makefile:
-# building configurations: Debug (default), Release, and Spy
-# make
-# make CONF=dbg
-#
-# cleaning configurations: Debug (default), Release, and Spy
-# make clean
-# make CONF=dbg clean
-
-#-----------------------------------------------------------------------------
-# project name
-#
-PROJECT := qfsgen
-
-#-----------------------------------------------------------------------------
-# project directories:
-#
-
-# list of all source directories used by this project
-VPATH := . \
- ../source
-
-# list of all include directories needed by this project
-INCLUDES := -I. \
- -I../include
-
-
-#-----------------------------------------------------------------------------
-# project files:
-#
-
-# C source files...
-C_SRCS := \
- main.c \
- filesearch.c
-
-# C++ source files...
-CPP_SRCS :=
-
-LIB_DIRS :=
-LIBS :=
-
-#-----------------------------------------------------------------------------
-# GNU toolset:
-#
-CC := gcc
-CPP := g++
-LINK := gcc # for C programs
-#LINK := g++ # for C++ programs
-
-#-----------------------------------------------------------------------------
-# basic utilities:
-#
-MKDIR := mkdir -p
-RM := rm
-
-#-----------------------------------------------------------------------------
-# build configurations...
-#
-
-ifeq (dbg, $(CONF)) # Debug configuration ....................................
-
-BIN_DIR := dbg
-
-CFLAGS = -c -g -std=gnu11 -ffunction-sections -fdata-sections \
- -O -Wall -Wextra -Wpedantic $(INCLUDES) $(DEFINES)
-
-CPPFLAGS = -c -g -ffunction-sections -fdata-sections \
- -O -Wall -Wextra $(INCLUDES) $(DEFINES)
-
-else # default Release configuration ........................................
-
-BIN_DIR := rel
-
-CFLAGS = -c -std=gnu11 -ffunction-sections -fdata-sections \
- -O3 -Wall -Wextra -Wpedantic $(INCLUDES) $(DEFINES) -DNDEBUG
-
-CPPFLAGS = -c -ffunction-sections -fdata-sections \
- -O3 -Wall -Wextra $(INCLUDES) $(DEFINES) -DNDEBUG
-
-endif # .....................................................................
-
-UNAME := $(shell uname)
-ifeq ($(UNAME), Darwin)
- LINKFLAGS :=
-else
-ifndef GCC_OLD
- LINKFLAGS := -no-pie
-endif
-endif
-
-#-----------------------------------------------------------------------------
-C_OBJS := $(patsubst %.c,%.o, $(C_SRCS))
-CPP_OBJS := $(patsubst %.cpp,%.o, $(CPP_SRCS))
-
-TARGET_EXE := $(BIN_DIR)/$(PROJECT)$(TARGET_EXT)
-C_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(C_OBJS))
-C_DEPS_EXT := $(patsubst %.o,%.d, $(C_OBJS_EXT))
-CPP_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(CPP_OBJS))
-CPP_DEPS_EXT := $(patsubst %.o,%.d, $(CPP_OBJS_EXT))
-
-# create $(BIN_DIR) if it does not exist
-ifeq ("$(wildcard $(BIN_DIR))","")
-$(shell $(MKDIR) $(BIN_DIR))
-endif
-
-#-----------------------------------------------------------------------------
-# rules
-#
-
-all: $(TARGET_EXE)
-
-$(TARGET_EXE) : $(C_OBJS_EXT) $(CPP_OBJS_EXT) $(RC_OBJS_EXT)
- $(LINK) $(LINKFLAGS) $(LIB_DIRS) -o $@ $^ $(LIBS)
- cp $@ ../../bin
-
-$(BIN_DIR)/%.d : %.cpp
- $(CPP) -MM -MT $(@:.d=.o) $(CPPFLAGS) $< > $@
-
-$(BIN_DIR)/%.d : %.c
- $(CC) -MM -MT $(@:.d=.o) $(CFLAGS) $< > $@
-
-$(BIN_DIR)/%.o : %.cpp
- $(CPP) $(CPPFLAGS) $< -o $@
-
-$(BIN_DIR)/%.o : %.c
- $(CC) $(CFLAGS) $< -o $@
-
-.PHONY : clean show
-
-# include dependency files only if our goal depends on their existence
-ifneq ($(MAKECMDGOALS),clean)
- ifneq ($(MAKECMDGOALS),show)
--include $(C_DEPS_EXT) $(CPP_DEPS_EXT)
- endif
-endif
-
-.PHONY : clean show
-
-clean:
- -$(RM) $(BIN_DIR)/*.o \
- $(BIN_DIR)/*.d \
- $(TARGET_EXE)
-
-show:
- @echo PROJECT = $(PROJECT)
- @echo TARGET_EXE = $(TARGET_EXE)
- @echo VPATH = $(VPATH)
- @echo C_SRCS = $(C_SRCS)
- @echo CPP_SRCS = $(CPP_SRCS)
- @echo C_DEPS_EXT = $(C_DEPS_EXT)
- @echo C_OBJS_EXT = $(C_OBJS_EXT)
- @echo C_DEPS_EXT = $(C_DEPS_EXT)
- @echo CPP_DEPS_EXT = $(CPP_DEPS_EXT)
- @echo CPP_OBJS_EXT = $(CPP_OBJS_EXT)
- @echo LIB_DIRS = $(LIB_DIRS)
- @echo LIBS = $(LIBS)
- @echo DEFINES = $(DEFINES)
-
diff --git a/qfsgen/posix/filesearch.c b/qfsgen/source/filesearch_posix.c
similarity index 58%
rename from qfsgen/posix/filesearch.c
rename to qfsgen/source/filesearch_posix.c
index fcbfee6..33ccd8e 100644
--- a/qfsgen/posix/filesearch.c
+++ b/qfsgen/source/filesearch_posix.c
@@ -1,34 +1,32 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2022-12-03
-* @version Last updated for: @ref qtools_7_1_3
-*
-* @file
-* @brief QFSGen implementation for POSIX
-*/
+//============================================================================
+// QFSGEN ROM file system generation host utility
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
#include
#include
#include
diff --git a/qfsgen/win32/filesearch.c b/qfsgen/source/filesearch_win.c
similarity index 67%
rename from qfsgen/win32/filesearch.c
rename to qfsgen/source/filesearch_win.c
index dd29c25..87f09b3 100644
--- a/qfsgen/win32/filesearch.c
+++ b/qfsgen/source/filesearch_win.c
@@ -1,34 +1,32 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2022-12-03
-* @version Last updated for: @ref qtools_7_1_3
-*
-* @file
-* @brief file search implementation for Windows
-*/
+//============================================================================
+// QFSGEN ROM file system generation host utility
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
#include
#include
#include
diff --git a/qfsgen/source/main.c b/qfsgen/source/main.c
index 1867339..7bd5600 100644
--- a/qfsgen/source/main.c
+++ b/qfsgen/source/main.c
@@ -1,34 +1,32 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2023-10-26
-* @version Last updated for: @ref qtools_7_3_0
-*
-* @file
-* @brief QFSgen ROM file system generator main function
-*/
+//============================================================================
+// QFSGEN ROM file system generation host utility
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
#include
#include "safe_std.h" /* "safe" and facilities */
@@ -113,7 +111,7 @@ void onMatchFound(char const *fullPath, unsigned flags, int ro_info) {
}
++l_nFiles;
- /* copy the file name into the buffer and masage it a bit */
+ /* copy the file name into the buffer and massage it a bit */
s = fname;
d = buf;
while (*s != '\0') {
@@ -130,7 +128,7 @@ void onMatchFound(char const *fullPath, unsigned flags, int ro_info) {
PRINTF_S("\nAdding: %s%s", l_fsDir, buf);
FPRINTF_S(l_file, "/* %s */\x0A", buf);
- /* defive the C-variable name from the file name */
+ /* define the C-variable name from the file name */
s = buf + 1; /* skip the first '/' */
d = fvar;
while (*s != '\0') {
@@ -216,7 +214,7 @@ void onMatchFound(char const *fullPath, unsigned flags, int ro_info) {
i = 0;
while ((nBytes = fread(buf, 1, sizeof(buf), fin)) != 0) {
char const *pc = buf;
- int n = nBytes;
+ size_t n = nBytes;
while (n-- != 0) {
if (i == 0) { /* new line? */
++i;
@@ -258,7 +256,7 @@ void onMatchFound(char const *fullPath, unsigned flags, int ro_info) {
int main(int argc, char *argv[]) {
char const *fileName = "fsdata.h";
- PRINTF_S("QFSGen %s Copyright (c) 2005-2020 Quantum Leaps\n"
+ PRINTF_S("QFSGen %s Copyright (c) 2005 Quantum Leaps\n"
"Documentation: https://state-machine.com/qtools/qfsgen.html\n",
VERSION);
PRINTF_S("Usage: qfsgen fs-dir [output-file] [-h]\n"
diff --git a/qfsgen/win32/Makefile b/qfsgen/win32/Makefile
deleted file mode 100644
index d3ae106..0000000
--- a/qfsgen/win32/Makefile
+++ /dev/null
@@ -1,198 +0,0 @@
-#=============================================================================
-# Product: Makefile for qfsgen console, Win32, MinGW
-# Last updated for version 7.3.0
-# Last updated on 2023-09-26
-#
-# Q u a n t u m L e a P s
-# ------------------------
-# Modern Embedded Software
-#
-# Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-#
-# SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-#
-# This software is dual-licensed under the terms of the open source GNU
-# General Public License version 3 (or any later version), or alternatively,
-# under the terms of one of the closed source Quantum Leaps commercial
-# licenses.
-#
-# The terms of the open source GNU General Public License version 3
-# can be found at:
-#
-# The terms of the closed source Quantum Leaps commercial licenses
-# can be found at:
-#
-# Redistributions in source code must retain this top-level comment block.
-# Plagiarizing this software to sidestep the license obligations is illegal.
-#
-# Contact information:
-#
-#
-#=============================================================================
-# examples of invoking this Makefile:
-# building configurations: Debug (default), Release, and Spy
-# make
-# make CONF=dbg
-#
-# cleaning configurations: Debug (default), Release, and Spy
-# make clean
-# make CONF=dbg clean
-#
-# NOTE:
-# To use this Makefile on Windows, you will need the GNU make utility, which
-# is included in the Qtools collection for Windows, see:
-# https://github.com/QuantumLeaps/qtools/releases
-#
-
-#-----------------------------------------------------------------------------
-# project name:
-#
-PROJECT := qfsgen
-
-#-----------------------------------------------------------------------------
-# project directories:
-#
-
-# list of all source directories used by this project
-VPATH := . \
- ../source
-
-# list of all include directories needed by this project
-INCLUDES := -I. \
- -I../include
-
-#-----------------------------------------------------------------------------
-# project files:
-#
-
-# C source files...
-C_SRCS := \
- main.c \
- filesearch.c
-
-# C++ source files...
-CPP_SRCS :=
-
-DEFINES :=
-LIB_DIRS :=
-LIBS :=
-
-#-----------------------------------------------------------------------------
-# MinGW toolset (NOTE: assumed to be on your PATH)
-#
-# NOTE:
-# MinGW toolset is included in the Qtools collection for Windows, see:
-# https://github.com/QuantumLeaps/qtools/releases
-
-CC := gcc
-CPP := g++
-LINK := gcc
-
-
-##############################################################################
-# Typically, you should not need to change anything below this line
-
-# basic utilities (included in QTools for Windows), see:
-# https://github.com/QuantumLeaps/qtools/releases
-
-MKDIR := mkdir
-RM := rm
-
-#-----------------------------------------------------------------------------
-# build options for various configurations
-#
-
-ifeq (dbg, $(CONF)) # Debug configuration ....................................
-
-BIN_DIR := dbg
-
-CFLAGS = -c -g -std=c11 \
- -O -Wall -Wextra -Wpedantic $(INCLUDES) $(DEFINES)
-
-CPPFLAGS = -c -g -std=c++11 -fno-rtti -fno-exceptions \
- -O -Wall -Wextra -Wpedantic $(INCLUDES) $(DEFINES)
-
-else # default Release configuration ........................................
-
-BIN_DIR := rel
-
-CFLAGS = -c -std=c11 \
- -Ofast -Wall -Wextra -Wpedantic $(INCLUDES) $(DEFINES) -DNDEBUG
-
-CPPFLAGS = -c -std=c++11 -fno-rtti -fno-exceptions \
- -Ofast -Wall -Wextra -Wpedantic $(INCLUDES) $(DEFINES) -DNDEBUG
-
-endif # .....................................................................
-
-LINKFLAGS := -Wl,-Map,$(BIN_DIR)/$(PROJECT).map,--cref,--gc-sections
-
-#-----------------------------------------------------------------------------
-
-C_OBJS := $(patsubst %.c, %.o, $(C_SRCS))
-CPP_OBJS := $(patsubst %.cpp, %.o, $(CPP_SRCS))
-RC_OBJS := $(patsubst %.rc, %.o, $(RC_SRCS))
-
-TARGET_BIN := $(BIN_DIR)/$(PROJECT).bin
-TARGET_EXE := $(BIN_DIR)/$(PROJECT).exe
-C_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(C_OBJS))
-C_DEPS_EXT := $(patsubst %.o, %.d, $(C_OBJS_EXT))
-CPP_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(CPP_OBJS))
-CPP_DEPS_EXT := $(patsubst %.o, %.d, $(CPP_OBJS_EXT))
-RC_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(RC_OBJS))
-
-# create $(BIN_DIR) if it does not exist
-ifeq ("$(wildcard $(BIN_DIR))","")
-$(shell $(MKDIR) $(BIN_DIR))
-endif
-
-#-----------------------------------------------------------------------------
-# rules
-#
-
-all: $(TARGET_EXE)
-
-$(TARGET_EXE) : $(C_OBJS_EXT) $(CPP_OBJS_EXT) $(RC_OBJS_EXT)
- $(LINK) $(LINKFLAGS) $(LIB_DIRS) -o $@ $^ $(LIBS)
-
-$(BIN_DIR)/%.d : %.cpp
- $(CPP) -MM -MT $(@:.d=.o) $(CPPFLAGS) $< > $@
-
-$(BIN_DIR)/%.d : %.c
- $(CC) -MM -MT $(@:.d=.o) $(CFLAGS) $< > $@
-
-$(BIN_DIR)/%.o : %.cpp
- $(CPP) $(CPPFLAGS) $< -o $@
-
-$(BIN_DIR)/%.o : %.c
- $(CC) $(CFLAGS) $< -o $@
-
-# include dependency files only if our goal depends on their existence
-ifneq ($(MAKECMDGOALS),clean)
- ifneq ($(MAKECMDGOALS),show)
--include $(C_DEPS_EXT) $(CPP_DEPS_EXT)
- endif
-endif
-
-.PHONY : clean show
-
-clean:
- -$(RM) $(BIN_DIR)/*.o \
- $(BIN_DIR)/*.d \
- $(BIN_DIR)/*.map \
- $(TARGET_EXE)
-
-show:
- @echo PROJECT = $(PROJECT)
- @echo TARGET_EXE = $(TARGET_EXE)
- @echo VPATH = $(VPATH)
- @echo C_SRCS = $(C_SRCS)
- @echo CPP_SRCS = $(CPP_SRCS)
- @echo C_DEPS_EXT = $(C_DEPS_EXT)
- @echo C_OBJS_EXT = $(C_OBJS_EXT)
- @echo C_DEPS_EXT = $(C_DEPS_EXT)
- @echo CPP_DEPS_EXT = $(CPP_DEPS_EXT)
- @echo CPP_OBJS_EXT = $(CPP_OBJS_EXT)
- @echo LIB_DIRS = $(LIB_DIRS)
- @echo LIBS = $(LIBS)
- @echo DEFINES = $(DEFINES)
-
diff --git a/qfsgen/win32/make-vs.bat b/qfsgen/win32/make-vs.bat
deleted file mode 100644
index ba689b6..0000000
--- a/qfsgen/win32/make-vs.bat
+++ /dev/null
@@ -1,24 +0,0 @@
-:: Batch file for building the specified PROJ (solution) prepared for
-:: Microsoft Visual Studio
-::
-:: usage:
-:: make
-::
-@setlocal
-
-:: specifiy project and build configuration (Debug|Release|Spy)
-@set PROJ=qfsgen
-@set CONF=Release
-
-:: adjust the MSBuild location for your system
-@set MSBuild="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"
-
-:: execute the build...
-%MSBuild% %PROJ%.sln -t:Build -p:Configuration=%CONF% -p:Platform=Win32
-
-:: cleanup after the build...
-rmdir /S /Q %CONF%\%PROJ%.tlog
-del %CONF%\%PROJ%.vcxproj* %CONF%\%PROJ%.log %CONF%\*.obj %CONF%\*.pdb
-
-@endlocal
-
diff --git a/qfsgen/win32/qfsgen.sln b/qfsgen/win32/qfsgen.sln
deleted file mode 100644
index 4100529..0000000
--- a/qfsgen/win32/qfsgen.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.7.34031.279
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qfsgen", "qfsgen.vcxproj", "{CBECC159-8744-4517-828D-D3C740E68AA5}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Debug|x64.ActiveCfg = Debug|x64
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Debug|x64.Build.0 = Debug|x64
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Debug|x86.ActiveCfg = Debug|Win32
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Debug|x86.Build.0 = Debug|Win32
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Release|x64.ActiveCfg = Release|x64
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Release|x64.Build.0 = Release|x64
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Release|x86.ActiveCfg = Release|Win32
- {CBECC159-8744-4517-828D-D3C740E68AA5}.Release|x86.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {72F1DD46-1083-46CF-9E35-E3CD17D5165D}
- EndGlobalSection
-EndGlobal
diff --git a/qfsgen/win32/qfsgen.vcxproj b/qfsgen/win32/qfsgen.vcxproj
deleted file mode 100644
index 40c6e1b..0000000
--- a/qfsgen/win32/qfsgen.vcxproj
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- 17.0
- Win32Proj
- {cbecc159-8744-4517-828d-d3c740e68aa5}
- qfsgen
- 10.0
-
-
-
- Application
- true
- v143
- NotSet
-
-
- Application
- false
- v143
- true
- NotSet
-
-
- Application
- true
- v143
- NotSet
-
-
- Application
- false
- v143
- true
- NotSet
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Level3
- true
- qfsgen_APP;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- ../include
-
-
- Console
- true
- ws2_32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- true
- true
- qfsgen_APP;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- ../include
-
-
- Console
- true
- true
- true
- ws2_32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- qfsgen_APP;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- stdc11
- ../include
-
-
- Console
- true
- ws2_32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- true
- true
- qfsgen_APP;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- stdc11
- ../include
-
-
- Console
- true
- true
- true
- ws2_32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/qfsgen/win32/qfsgen.vcxproj.filters b/qfsgen/win32/qfsgen.vcxproj.filters
deleted file mode 100644
index 42b6602..0000000
--- a/qfsgen/win32/qfsgen.vcxproj.filters
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
-
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
-
-
- Source Files
-
-
- Source Files
-
-
-
\ No newline at end of file
diff --git a/qspy/CMakeLists.txt b/qspy/CMakeLists.txt
deleted file mode 100644
index 87bd68e..0000000
--- a/qspy/CMakeLists.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-# QTools/qspy
-message(STATUS "`qtools/qspy` - see \"https://www.state-machine.com/qtools/qspy.html\" for further details.")
-
-# the main target
-target_sources(qspy PRIVATE
- source/qspy.c
- source/qspy_main.c
- source/qspy_be.c
- source/qspy_dict.c
- source/qspy_seq.c
- source/qspy_tx.c
- source/getopt.c
- ${PLATFORM_DIR}/qspy_pal.c
-)
-
-# add include dirs to target (-I...)
-target_include_directories(qspy PRIVATE
- ${PLATFORM_DIR}
- include
-)
-
-# set defines (-D...)
-target_compile_definitions(qspy PRIVATE QSPY_APP)
-
-# add link libraries (-l...)
-if(CMAKE_SYSTEM_NAME STREQUAL Windows)
- target_link_libraries(qspy PRIVATE ws2_32)
-endif()
diff --git a/qspy/LICENSE-qspy.txt b/qspy/LICENSE-qspy.txt
new file mode 100644
index 0000000..d7e08c6
--- /dev/null
+++ b/qspy/LICENSE-qspy.txt
@@ -0,0 +1,85 @@
+QUANTUM LEAPS QSPY SOFTWARE TRACING HOST UTILITY SOFTWARE
+END USER LICENSE AGREEMENT
+
+These license terms are an agreement between Quantum Leaps and you.
+Please read them. They apply to the QSPY tool as well as to any
+accompanying documentation and examples. BY USING THE SOFTWARE, YOU ACCEPT
+THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.
+
+
+1. DEFINITIONS
+1.1. QSPY is a console-based software tracing host utilty for receiving,
+visualizing, and communicating with the remote Target systems running
+QP/Spy tracing software. QSPY provides textual output to the screen and
+various network interfaces to communicate with the external applications
+(e.g., QUTest testing or QView monitoring). QSPY is currently available for
+Windows, Linux and macOS hosts.
+
+1.2. QP/Spy software tracing system is part of the QP Real-Time Embedded
+Frameworks (RTEFs).
+
+1.3. "Licensed Software" means the QSPY executable, documentation, and
+examples. The Licensed Software expressly does NOT include the products of
+software tracing, such as the saved binary files, screen output logs,
+"dictionary" files, or generated sequence diagrams.
+
+
+2. GRANT OF COPYRIGHT LICENSE
+Quantum Leaps grants to you, and you hereby accept, a nonexclusive,
+nontransferable license to do the following:
+
+2.1. to install and use the QSPY software for the purpose of tracing,
+testing, and monitoring your programs.
+
+3. EXCLUSIONS FROM LICENSE GRANT
+The Licensed Software is licensed by this Agreement, not sold or given away.
+This Agreement only grants you some rights to use the software. Quantum Leaps
+reserves all other rights.
+
+3.1. No right is granted to trademarks, copyrights, patents, trade secrets or
+any other Intellectual Property of Quantum Leaps, even if such trademarks are
+included in the Licensed Software.
+
+3.2. Nothing in this Agreement shall be interpreted to prohibit Quantum Leaps
+from licensing under different terms from this Agreement any original work
+that Quantum Leaps otherwise would have a right to license.
+
+
+4. LIMITATIONS ON THE USE OF THE LICENSED SOFTWARE
+You may use the Licensed Software only as expressly permitted in this
+Agreement. In doing so, you must comply with any technical limitations in
+the software that only allow you to use it in certain ways. By accepting
+this Agreement you agree to the following:
+
+4.1. You may not remove or modify any copyright notes, legal notes, license
+information, attribution notes, logos, URLs, or e-mail addresses embedded in
+the source code generated by QM, or in the QM executable and in the QSPY
+documentation;
+
+4.2. You may not sell, rent, lease or lend the Licensed Software; and
+
+4.3. You may not use the Licensed Software to create similar stand-alone
+products based on the QP/Spy software tracing system.
+
+
+5. DISCLAIMER OF WARRANTY
+BECAUSE THE QM SOFTWARE IS LICENSED FREE OF CHARGE, IT IS LICENSED "AS IS"
+WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
+NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
+THE LICENSED SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW SHALL QUANTUM LEAPS BE LIABLE
+TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF OR INABILITY TO USE THE
+LICENSED SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE
+OF THE SOFTWARE TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
+OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. NO LICENSE
+TO THE LICENSED SOFTWARE IS GRANTED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. CONTACT INFORMATION
+Any questions or concerns related to this Agreement should be directed to
+Quantum Leaps at the following e-mail address:
+- mailto:info@state-machine.com
diff --git a/qspy/dict/dpp-qpc-no-dict.bin b/qspy/dict/dpp-qpc-no-dict.bin
deleted file mode 100644
index 1ab3a6a..0000000
Binary files a/qspy/dict/dpp-qpc-no-dict.bin and /dev/null differ
diff --git a/qspy/dict/dpp-qpc.bin b/qspy/dict/dpp-qpc.bin
deleted file mode 100644
index 597e5a4..0000000
Binary files a/qspy/dict/dpp-qpc.bin and /dev/null differ
diff --git a/qspy/dict/qspy211020_120243.dic b/qspy/dict/qspy211020_120243.dic
deleted file mode 100644
index 0b7c834..0000000
--- a/qspy/dict/qspy211020_120243.dic
+++ /dev/null
@@ -1,63 +0,0 @@
--v694
--T4
--O4
--F4
--S2
--E4
--Q4
--P4
--B4
--C4
--t211020_120243
-
-Obj-Dic:
-4
-0x0040B11B l_clock_tick
-0x004124C0 Philo_inst[0]
-0x004124EC Philo_inst[0].timeEvt
-0x00412500 Philo_inst[1]
-0x0041252C Philo_inst[1].timeEvt
-0x00412540 Philo_inst[2]
-0x0041256C Philo_inst[2].timeEvt
-0x00412580 Philo_inst[3]
-0x004125AC Philo_inst[3].timeEvt
-0x004125C0 Philo_inst[4]
-0x004125EC Philo_inst[4].timeEvt
-0x00412600 Table_inst
-0x00412640 EvtPool1
-0x00412840 QS_RX
-***
-Fun-Dic:
-4
-0x004019DC Philo_initial
-0x00401B72 Philo_eating
-0x00401C6B Philo_hungry
-0x00401D3C Philo_thinking
-0x00401FC6 Table_paused
-0x00402104 Table_active
-0x00402149 Table_serving
-***
-Usr-Dic:
-1
-0x00000064 PHILO_STAT
-0x0000007C QUTEST_ON_POST
-***
-Sig-Dic:
-4
-00000004 0x00000000 EAT_SIG
-00000005 0x00000000 DONE_SIG
-00000006 0x00000000 PAUSE_SIG
-00000007 0x00000000 SERVE_SIG
-00000008 0x00000000 TEST_SIG
-00000010 0x004124C0 HUNGRY_SIG
-00000010 0x004125C0 HUNGRY_SIG
-00000010 0x00412540 HUNGRY_SIG
-00000010 0x00412580 HUNGRY_SIG
-00000010 0x00412500 HUNGRY_SIG
-00000010 0x00412600 HUNGRY_SIG
-00000011 0x004124C0 TIMEOUT_SIG
-00000011 0x00412500 TIMEOUT_SIG
-00000011 0x004125C0 TIMEOUT_SIG
-00000011 0x00412540 TIMEOUT_SIG
-00000011 0x00412580 TIMEOUT_SIG
-***
diff --git a/qspy/dict/test_dpp-qpc.bat b/qspy/dict/test_dpp-qpc.bat
deleted file mode 100644
index 2cb5d54..0000000
--- a/qspy/dict/test_dpp-qpc.bat
+++ /dev/null
@@ -1 +0,0 @@
-qspy -f dpp-qpc-no-dict.bin -d qspy211020_120243.dic
\ No newline at end of file
diff --git a/qspy/include/be.h b/qspy/include/be.h
deleted file mode 100644
index 2547022..0000000
--- a/qspy/include/be.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2021-12-23
-* @version Last updated for version: 7.0.0
-*
-* @file
-* @brief Back-End connection point for the external Front-Ends
-*/
-#ifndef BE_H_
-#define BE_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void BE_parse(unsigned char *buf, uint32_t nBytes);
-void BE_parseRecFromFE (QSpyRecord * const qrec);
-int BE_parseRecFromTarget(QSpyRecord * const qrec); /*see QSPY_CustParseFun*/
-
-void BE_onStartup(void);
-void BE_onCleanup(void);
-void BE_sendLine(void); /* send the QSPY parsed line to the Front-End */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* BE_H_ */
diff --git a/qspy/include/getopt.h b/qspy/include/getopt.h
deleted file mode 100644
index d46fca1..0000000
--- a/qspy/include/getopt.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*****************************************************************************
-* getopt.c - competent and free getopt library.
-*
-* Copyright (c) 2002-2003, Mark K. Kim
-* Copyright (c) 2012-2017, Kim Grasman
-*
-* Modified by Quantum Leaps 2018
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* * Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* * Neither the name of Kim Grasman nor the
-* names of contributors may be used to endorse or promote products
-* derived from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED. IN NO EVENT SHALL KIM GRASMAN BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*****************************************************************************/
-#ifndef GETOPT_H_
-#define GETOPT_H_
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-extern char const *optarg; /* argument of current option */
-extern int optind; /* index of first non-option in argv */
-extern int optopt; /* single option character, as parsed */
-extern int opterr; /* flag to enable built-in diagnostics */
-
-int getopt(int argc, char *argv[], char const *optstr);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif /* GETOPT_H_ */
diff --git a/qspy/include/pal.h b/qspy/include/pal.h
deleted file mode 100644
index f0ea219..0000000
--- a/qspy/include/pal.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2024-06-21
-* @version Last updated for version: 7.4.0
-*
-* @file
-* @brief Platform Abstraction Layer (PAL)
-*/
-#ifndef PAL_H_
-#define PAL_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* events for the QSPY event loop... */
-typedef enum {
- QSPY_NO_EVT,
- QSPY_TARGET_INPUT_EVT,
- QSPY_FE_INPUT_EVT,
- QSPY_KEYBOARD_EVT,
- QSPY_DONE_EVT,
- QSPY_ERROR_EVT
-} QSPYEvtType;
-
-/* The PAL "virtual table" contains operations that are dependent
-* on the choice of target connection. This connection is chosen
-* by command-line options and is established by calling one of the
-* PAL_openTarget???() functions
-*/
-typedef struct {
- QSPYEvtType (*getEvt)(unsigned char *buf, uint32_t *pBytes);
- QSpyStatus (*send2Target)(unsigned char *buf, uint32_t nBytes);
- void (*cleanup)(void);
-} PAL_VtblType;
-
-extern PAL_VtblType PAL_vtbl;
-
-/* typedefs needed for qpc_qs.h */
-typedef int int_t;
-typedef int enum_t;
-typedef float float32_t;
-typedef double float64_t;
-
-QSpyStatus PAL_openBE(int portNum); /* open Back-End socket */
-void PAL_closeBE(void); /* close Back-End socket */
-void PAL_send2FE(unsigned char const *buf, uint32_t nBytes); /* to Front-End */
-void PAL_detachFE(void); /* detach Front-End */
-void PAL_clearScreen(void);
-
-QSpyStatus PAL_openTargetSer(char const *comName, int baudRate);
-QSpyStatus PAL_openTargetTcp(int portNum);
-QSpyStatus PAL_openTargetFile(char const *fName);
-
-QSpyStatus PAL_openKbd(bool kbd_inp, bool color);
-void PAL_closeKbd(void);
-void PAL_exit(void);
-
-QSPYEvtType PAL_receiveBe (unsigned char *buf, uint32_t *pBytes);
-QSPYEvtType PAL_receiveKbd(unsigned char *buf, uint32_t *pBytes);
-void PAL_updateReadySet(int targetConn);
-
-#ifdef __cplusplus
-}
-#endif
-
-/* QSPY assertions... */
-#ifdef Q_NASSERT /* Q_NASSERT defined--assertion checking disabled */
-#define Q_ASSERT(test_) ((void)0)
-#else /* assertion checking enabled */
-#define Q_ASSERT(test_) ((test_) \
- ? (void)0 : Q_onError(__FILE__, __LINE__))
-
-_Noreturn void Q_onError(char const * const module, int const id);
-#endif
-
-#endif /* PAL_H_ */
diff --git a/qspy/include/qpc_qs.h b/qspy/include/qpc_qs.h
deleted file mode 100644
index 0610613..0000000
--- a/qspy/include/qpc_qs.h
+++ /dev/null
@@ -1,1033 +0,0 @@
-//$file${include::qs.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-//
-// Model: qpc.qm
-// File: ${include::qs.h}
-//
-// This code has been generated by QM 6.1.1 .
-// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
-//
-// This code is covered by the following QP license:
-// License # : LicenseRef-QL-dual
-// Issued to : Any user of the QP/C real-time embedded framework
-// Framework(s) : qpc
-// Support ends : 2024-12-31
-// License scope:
-//
-// Copyright (C) 2005 Quantum Leaps, LLC .
-//
-// Q u a n t u m L e a P s
-// ------------------------
-// Modern Embedded Software
-//
-// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-//
-// This software is dual-licensed under the terms of the open source GNU
-// General Public License version 3 (or any later version), or alternatively,
-// under the terms of one of the closed source Quantum Leaps commercial
-// licenses.
-//
-// The terms of the open source GNU General Public License version 3
-// can be found at:
-//
-// The terms of the closed source Quantum Leaps commercial licenses
-// can be found at:
-//
-// Redistributions in source code must retain this top-level comment block.
-// Plagiarizing this software to sidestep the license obligations is illegal.
-//
-// Contact information:
-//
-//
-//
-//$endhead${include::qs.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-#ifndef QS_H_
-#define QS_H_
-
-#ifndef Q_SPY
-#error "Q_SPY must be defined to include qs.h"
-#endif
-
-//============================================================================
-//! @cond INTERNAL
-
-#ifndef QS_CTR_SIZE
-#define QS_CTR_SIZE 2U
-#endif
-
-#ifndef QS_TIME_SIZE
-#define QS_TIME_SIZE 4U
-#endif
-
-//! @endcond
-//============================================================================
-
-//$declare${QS::types} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-
-//${QS::types::QS} ...........................................................
-//! @class QS
-typedef struct QS {
- //! @cond INTERNAL
- uint8_t dummy;
- //! @endcond
-} QS;
-
-//${QS::types::QSpyPre} ......................................................
-//! @static @public @memberof QS
-//! pre-defined QS record IDs
-enum QSpyPre {
- // [0] QS session (not maskable)
- QS_EMPTY, //!< QS record for cleanly starting a session
-
- // [1] SM records
- QS_QEP_STATE_ENTRY, //!< a state was entered
- QS_QEP_STATE_EXIT, //!< a state was exited
- QS_QEP_STATE_INIT, //!< an initial transition was taken in a state
- QS_QEP_INIT_TRAN, //!< the top-most initial transition was taken
- QS_QEP_INTERN_TRAN, //!< an internal transition was taken
- QS_QEP_TRAN, //!< a regular transition was taken
- QS_QEP_IGNORED, //!< an event was ignored (silently discarded)
- QS_QEP_DISPATCH, //!< an event was dispatched (begin of RTC step)
- QS_QEP_UNHANDLED, //!< an event was un-handled due to a guard
-
- // [10] Active Object (AO) records
- QS_QF_ACTIVE_DEFER, //!< AO deferred an event
- QS_QF_ACTIVE_RECALL, //!< AO recalled an event
- QS_QF_ACTIVE_SUBSCRIBE, //!< an AO subscribed to an event
- QS_QF_ACTIVE_UNSUBSCRIBE, //!< an AO unsubscribed to an event
- QS_QF_ACTIVE_POST, //!< an event was posted (FIFO) directly to AO
- QS_QF_ACTIVE_POST_LIFO, //!< an event was posted (LIFO) directly to AO
- QS_QF_ACTIVE_GET, //!< AO got an event and its queue is not empty
- QS_QF_ACTIVE_GET_LAST,//!< AO got an event and its queue is empty
- QS_QF_ACTIVE_RECALL_ATTEMPT, //!< AO attempted to recall an event
-
- // [19] Event Queue (EQ) records
- QS_QF_EQUEUE_POST, //!< an event was posted (FIFO) to a raw queue
- QS_QF_EQUEUE_POST_LIFO, //!< an event was posted (LIFO) to a raw queue
- QS_QF_EQUEUE_GET, //!< get an event and queue still not empty
- QS_QF_EQUEUE_GET_LAST,//!< get the last event from the queue
-
- // [23] Framework (QF) records
- QS_QF_NEW_ATTEMPT, //!< an attempt to allocate an event failed
-
- // [24] Memory Pool (MP) records
- QS_QF_MPOOL_GET, //!< a memory block was removed from memory pool
- QS_QF_MPOOL_PUT, //!< a memory block was returned to memory pool
-
- // [26] Additional Framework (QF) records
- QS_QF_PUBLISH, //!< an event was published to active objects
- QS_QF_NEW_REF, //!< new event reference was created
- QS_QF_NEW, //!< new event was created
- QS_QF_GC_ATTEMPT, //!< garbage collection attempt
- QS_QF_GC, //!< garbage collection
- QS_QF_TICK, //!< QTimeEvt tick was called
-
- // [32] Time Event (TE) records
- QS_QF_TIMEEVT_ARM, //!< a time event was armed
- QS_QF_TIMEEVT_AUTO_DISARM, //!< a time event expired and was disarmed
- QS_QF_TIMEEVT_DISARM_ATTEMPT,//!< attempt to disarm a disarmed QTimeEvt
- QS_QF_TIMEEVT_DISARM, //!< true disarming of an armed time event
- QS_QF_TIMEEVT_REARM, //!< rearming of a time event
- QS_QF_TIMEEVT_POST, //!< a time event posted itself directly to an AO
-
- // [38] Additional Framework (QF) records
- QS_QF_DELETE_REF, //!< an event reference is about to be deleted
- QS_QF_CRIT_ENTRY, //!< critical section was entered
- QS_QF_CRIT_EXIT, //!< critical section was exited
- QS_QF_ISR_ENTRY, //!< an ISR was entered
- QS_QF_ISR_EXIT, //!< an ISR was exited
- QS_QF_INT_DISABLE, //!< interrupts were disabled
- QS_QF_INT_ENABLE, //!< interrupts were enabled
-
- // [45] Additional Active Object (AO) records
- QS_QF_ACTIVE_POST_ATTEMPT,//!< attempt to post an evt to AO failed
-
- // [46] Additional Event Queue (EQ) records
- QS_QF_EQUEUE_POST_ATTEMPT,//!< attempt to post evt to QEQueue failed
-
- // [47] Additional Memory Pool (MP) records
- QS_QF_MPOOL_GET_ATTEMPT, //!< attempt to get a memory block failed
-
- // [48] Scheduler (SC) records
- QS_SCHED_PREEMPT, //!< scheduler asynchronously preempted a task
- QS_SCHED_RESTORE, //!< scheduler restored preempted task
- QS_SCHED_LOCK, //!< scheduler was locked
- QS_SCHED_UNLOCK, //!< scheduler was unlocked
- QS_SCHED_NEXT, //!< scheduler started next task
- QS_SCHED_IDLE, //!< scheduler restored the idle task
-
- // [54] Miscellaneous QS records (not maskable)
- QS_ENUM_DICT, //!< enumeration dictionary entry
-
- // [55] Additional QEP records
- QS_QEP_TRAN_HIST, //!< a tran to history was taken
- QS_QEP_TRAN_EP, //!< a tran to entry point into a submachine
- QS_QEP_TRAN_XP, //!< a tran to exit point out of a submachine
-
- // [58] Miscellaneous QS records (not maskable)
- QS_TEST_PAUSED, //!< test has been paused
- QS_TEST_PROBE_GET, //!< reports that Test-Probe has been used
- QS_SIG_DICT, //!< signal dictionary entry
- QS_OBJ_DICT, //!< object dictionary entry
- QS_FUN_DICT, //!< function dictionary entry
- QS_USR_DICT, //!< user QS record dictionary entry
- QS_TARGET_INFO, //!< reports the Target information
- QS_TARGET_DONE, //!< reports completion of a user callback
- QS_RX_STATUS, //!< reports QS data receive status
- QS_QUERY_DATA, //!< reports the data from "current object" query
- QS_PEEK_DATA, //!< reports the data from the PEEK query
- QS_ASSERT_FAIL, //!< assertion failed in the code
- QS_QF_RUN, //!< QF_run() was entered
-
- // [71] Semaphore (SEM) records
- QS_SEM_TAKE, //!< a semaphore was taken by a thread
- QS_SEM_BLOCK, //!< a semaphore blocked a thread
- QS_SEM_SIGNAL, //!< a semaphore was signaled
- QS_SEM_BLOCK_ATTEMPT, //!< a semaphore blocked was attempted
-
- // [75] Mutex (MTX) records
- QS_MTX_LOCK, //!< a mutex was locked
- QS_MTX_BLOCK, //!< a mutex blocked a thread
- QS_MTX_UNLOCK, //!< a mutex was unlocked
- QS_MTX_LOCK_ATTEMPT, //!< a mutex lock was attempted
- QS_MTX_BLOCK_ATTEMPT, //!< a mutex blocking was attempted
- QS_MTX_UNLOCK_ATTEMPT,//!< a mutex unlock was attempted
-
- // [81]
- QS_PRE_MAX //!< the # predefined signals
-};
-
-//${QS::types::QSpyGroups} ...................................................
-//! @static @public @memberof QS
-//! QS-TX record groups for QS_GLB_FILTER()
-enum QSpyGroups {
- QS_ALL_RECORDS = 0xF0,//!< all maskable QS records
- QS_SM_RECORDS, //!< State Machine QS records
- QS_AO_RECORDS, //!< Active Object QS records
- QS_EQ_RECORDS, //!< Event Queues QS records
- QS_MP_RECORDS, //!< Memory Pools QS records
- QS_TE_RECORDS, //!< Time Events QS records
- QS_QF_RECORDS, //!< QF QS records
- QS_SC_RECORDS, //!< Scheduler QS records
- QS_SEM_RECORDS, //!< Semaphore QS records
- QS_MTX_RECORDS, //!< Mutex QS records
- QS_U0_RECORDS, //!< User Group 100-104 records
- QS_U1_RECORDS, //!< User Group 105-109 records
- QS_U2_RECORDS, //!< User Group 110-114 records
- QS_U3_RECORDS, //!< User Group 115-119 records
- QS_U4_RECORDS, //!< User Group 120-124 records
- QS_UA_RECORDS //!< All User records
-};
-
-//${QS::types::QSpyUserOffsets} ..............................................
-//! @static @public @memberof QS
-//! QS user record group offsets for QS_GLB_FILTER()
-enum QSpyUserOffsets {
- QS_USER = 100, //!< the first record available to QS users
- QS_USER0 = QS_USER, //!< offset for User Group 0
- QS_USER1 = (enum_t)QS_USER0 + 5, //!< offset for User Group 1
- QS_USER2 = (enum_t)QS_USER1 + 5, //!< offset for User Group 2
- QS_USER3 = (enum_t)QS_USER2 + 5, //!< offset for User Group 3
- QS_USER4 = (enum_t)QS_USER3 + 5 //!< offset for User Group 4
-};
-
-//${QS::types::QSpyIdOffsets} ................................................
-//! @static @public @memberof QS
-//! QS ID offsets for QS_LOC_FILTER()
-enum QSpyIdOffsets {
- QS_AO_ID = 0, //!< offset for AO priorities
- QS_EP_ID = 64, //!< offset for event-pool IDs
- QS_EQ_ID = 80, //!< offset for event-queue IDs
- QS_AP_ID = 96 //!< offset for Application-specific IDs
-};
-
-//${QS::types::QSpyIdGroups} .................................................
-//! @static @public @memberof QS
-//! QS ID groups for QS_LOC_FILTER()
-enum QSpyIdGroups {
- QS_ALL_IDS = 0xF0, //!< all QS IDs
- QS_AO_IDS = 0x80 + (enum_t)QS_AO_ID, //!< AO IDs (priorities)
- QS_EP_IDS = 0x80 + (enum_t)QS_EP_ID, //!< event-pool IDs
- QS_EQ_IDS = 0x80 + (enum_t)QS_EQ_ID, //!< event-queue IDs
- QS_AP_IDS = 0x80 + (enum_t)QS_AP_ID //!< Application-specific IDs
-};
-
-//${QS::types::QSpyId} .......................................................
-//! @struct QSpyId
-typedef struct { uint8_t prio; } QSpyId;
-
-//${QS::types::QSObj} ........................................................
-#if (QS_OBJ_PTR_SIZE == 2U)
-typedef uint16_t QSObj;
-#endif // (QS_OBJ_PTR_SIZE == 2U)
-
-//${QS::types::QSObj} ........................................................
-#if (QS_OBJ_PTR_SIZE == 4U)
-typedef uint32_t QSObj;
-#endif // (QS_OBJ_PTR_SIZE == 4U)
-
-//${QS::types::QSObj} ........................................................
-#if (QS_OBJ_PTR_SIZE == 8U)
-typedef uint64_t QSObj;
-#endif // (QS_OBJ_PTR_SIZE == 8U)
-
-//${QS::types::QSFun} ........................................................
-#if (QS_FUN_PTR_SIZE == 2U)
-typedef uint16_t QSFun;
-#endif // (QS_FUN_PTR_SIZE == 2U)
-
-//${QS::types::QSFun} ........................................................
-#if (QS_FUN_PTR_SIZE == 4U)
-typedef uint32_t QSFun;
-#endif // (QS_FUN_PTR_SIZE == 4U)
-
-//${QS::types::QSFun} ........................................................
-#if (QS_FUN_PTR_SIZE == 8U)
-typedef uint64_t QSFun;
-#endif // (QS_FUN_PTR_SIZE == 8U)
-
-//${QS::types::QSpyFunPtr} ...................................................
-//! @static @private @memberof QS
-typedef void (* QSpyFunPtr )(void);
-
-//${QS::types::QSCtr} ........................................................
-#if (QS_CTR_SIZE == 2U)
-typedef uint16_t QSCtr;
-#endif // (QS_CTR_SIZE == 2U)
-
-//${QS::types::QSCtr} ........................................................
-#if (QS_CTR_SIZE == 4U)
-typedef uint32_t QSCtr;
-#endif // (QS_CTR_SIZE == 4U)
-
-//${QS::types::QSTimeCtr} ....................................................
-#if (QS_TIME_SIZE == 2U)
-typedef uint16_t QSTimeCtr;
-#endif // (QS_TIME_SIZE == 2U)
-
-//${QS::types::QSTimeCtr} ....................................................
-#if (QS_TIME_SIZE == 4U)
-typedef uint32_t QSTimeCtr;
-#endif // (QS_TIME_SIZE == 4U)
-//$enddecl${QS::types} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//$declare${QS::filters} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-
-//${QS::filters::Filter} .....................................................
-//! @struct QS_Filter
-typedef struct {
-// public:
- uint8_t glb[16];
- uint8_t loc[16];
-} QS_Filter;
-
-//${QS::filters::filt_} ......................................................
-//! @static @private @memberof QS
-extern QS_Filter QS_filt_;
-//$enddecl${QS::filters} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//$declare${QS-macros} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-
-//${QS-macros::QS_INIT} ......................................................
-#define QS_INIT(arg_) (QS_onStartup(arg_))
-
-//${QS-macros::QS_EXIT} ......................................................
-#define QS_EXIT() (QS_onCleanup())
-
-//${QS-macros::QS_OUTPUT} ....................................................
-#define QS_OUTPUT() (QS_output())
-
-//${QS-macros::QS_RX_INPUT} ..................................................
-#define QS_RX_INPUT() (QS_rx_input())
-
-//${QS-macros::QS_GLB_FILTER} ................................................
-#define QS_GLB_FILTER(rec_) (QS_glbFilter_((int_fast16_t)(rec_)))
-
-//${QS-macros::QS_LOC_FILTER} ................................................
-#define QS_LOC_FILTER(qsId_) (QS_locFilter_((int_fast16_t)(qsId_)))
-
-//${QS-macros::QS_BEGIN_ID} ..................................................
-#define QS_BEGIN_ID(rec_, qsId_) \
-if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qsId_)) { \
- QS_CRIT_STAT \
- QS_CRIT_ENTRY(); \
- QS_MEM_SYS(); \
- QS_beginRec_((uint_fast8_t)(rec_)); \
- QS_TIME_PRE_(); {
-
-//${QS-macros::QS_END} .......................................................
-#define QS_END() } \
- QS_endRec_(); \
- QS_MEM_APP(); \
- QS_CRIT_EXIT(); \
-}
-
-//${QS-macros::QS_FLUSH} .....................................................
-#define QS_FLUSH() (QS_onFlush())
-
-//${QS-macros::QS_BEGIN_INCRIT} ..............................................
-#define QS_BEGIN_INCRIT(rec_, qsId_) \
-if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qsId_)) { \
- QS_beginRec_((uint_fast8_t)(rec_)); \
- QS_TIME_PRE_(); {
-
-//${QS-macros::QS_END_INCRIT} ................................................
-#define QS_END_INCRIT() } \
- QS_endRec_(); \
-}
-
-//${QS-macros::QS_GLB_CHECK_} ................................................
-#define QS_GLB_CHECK_(rec_) \
- (((uint_fast8_t)QS_filt_.glb[(uint_fast8_t)(rec_) >> 3U] \
- & ((uint_fast8_t)1U << ((uint_fast8_t)(rec_) & 7U))) != 0U)
-
-//${QS-macros::QS_LOC_CHECK_} ................................................
-#define QS_LOC_CHECK_(qsId_) \
- (((uint_fast8_t)QS_filt_.loc[(uint_fast8_t)(qsId_) >> 3U] \
- & ((uint_fast8_t)1U << ((uint_fast8_t)(qsId_) & 7U))) != 0U)
-
-//${QS-macros::QS_REC_DONE} ..................................................
-#ifndef QS_REC_DONE
-#define QS_REC_DONE() ((void)0)
-#endif // ndef QS_REC_DONE
-
-//${QS-macros::QS_I8} ........................................................
-#define QS_I8(width_, data_) \
- (QS_u8_fmt_((uint8_t)(((width_) << 4U) & 0x7U) | (uint8_t)QS_I8_ENUM_T, \
- (data_)))
-
-//${QS-macros::QS_U8} ........................................................
-#define QS_U8(width_, data_) \
- (QS_u8_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U8_T, (data_)))
-
-//${QS-macros::QS_I16} .......................................................
-#define QS_I16(width_, data_) \
- (QS_u16_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I16_T, (data_)))
-
-//${QS-macros::QS_U16} .......................................................
-#define QS_U16(width_, data_) \
- (QS_u16_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U16_T, (data_)))
-
-//${QS-macros::QS_I32} .......................................................
-#define QS_I32(width_, data_) \
- (QS_u32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I32_T, (data_)))
-
-//${QS-macros::QS_U32} .......................................................
-#define QS_U32(width_, data_) \
- (QS_u32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U32_T, (data_)))
-
-//${QS-macros::QS_I64} .......................................................
-#define QS_I64(width_, data_) \
- (QS_u64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I64_T, (data_)))
-
-//${QS-macros::QS_U64} .......................................................
-#define QS_U64(width_, data_) \
- (QS_u64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U64_T, (data_)))
-
-//${QS-macros::QS_F32} .......................................................
-#define QS_F32(width_, data_) \
- (QS_f32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_F32_T, (data_)))
-
-//${QS-macros::QS_F64} .......................................................
-#define QS_F64(width_, data_) \
- (QS_f64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_F64_T, (data_)))
-
-//${QS-macros::QS_STR} .......................................................
-#define QS_STR(str_) (QS_str_fmt_((str_)))
-
-//${QS-macros::QS_MEM} .......................................................
-#define QS_MEM(mem_, size_) (QS_mem_fmt_((mem_), (size_)))
-
-//${QS-macros::QS_ENUM} ......................................................
-#define QS_ENUM(group_, value_) \
- (QS_u8_fmt_((uint8_t)(0x80U | ((group_) << 4U)) | (uint8_t)QS_I8_ENUM_T,\
- (uint8_t)(value_)))
-
-//${QS-macros::QS_TIME_PRE_} .................................................
-#if (QS_TIME_SIZE == 2U)
-#define QS_TIME_PRE_() (QS_u16_raw_(QS_onGetTime()))
-#endif // (QS_TIME_SIZE == 2U)
-
-//${QS-macros::QS_TIME_PRE_} .................................................
-#if (QS_TIME_SIZE == 4U)
-#define QS_TIME_PRE_() (QS_u32_raw_(QS_onGetTime()))
-#endif // (QS_TIME_SIZE == 4U)
-
-//${QS-macros::QS_OBJ} .......................................................
-#if (QS_OBJ_PTR_SIZE == 2U)
-#define QS_OBJ(obj_) (QS_u16_fmt_(QS_OBJ_T, (uint16_t)(obj_)))
-#endif // (QS_OBJ_PTR_SIZE == 2U)
-
-//${QS-macros::QS_OBJ} .......................................................
-#if (QS_OBJ_PTR_SIZE == 4U)
-#define QS_OBJ(obj_) (QS_u32_fmt_(QS_OBJ_T, (uint32_t)(obj_)))
-#endif // (QS_OBJ_PTR_SIZE == 4U)
-
-//${QS-macros::QS_OBJ} .......................................................
-#if (QS_OBJ_PTR_SIZE == 8U)
-#define QS_OBJ(obj_) (QS_u64_fmt_(QS_OBJ_T, (uint64_t)(obj_)))
-#endif // (QS_OBJ_PTR_SIZE == 8U)
-
-//${QS-macros::QS_FUN} .......................................................
-#if (QS_FUN_PTR_SIZE == 2U)
-#define QS_FUN(fun_) (QS_u16_fmt_(QS_FUN_T, (uint16_t)(fun_)))
-#endif // (QS_FUN_PTR_SIZE == 2U)
-
-//${QS-macros::QS_FUN} .......................................................
-#if (QS_FUN_PTR_SIZE == 4U)
-#define QS_FUN(fun_) (QS_u32_fmt_(QS_FUN_T, (uint32_t)(fun_)))
-#endif // (QS_FUN_PTR_SIZE == 4U)
-
-//${QS-macros::QS_FUN} .......................................................
-#if (QS_FUN_PTR_SIZE == 8U)
-#define QS_FUN(fun_) (QS_u64_fmt_(QS_FUN_T, (uint64_t)(fun_)))
-#endif // (QS_FUN_PTR_SIZE == 8U)
-
-//${QS-macros::QS_SIG} .......................................................
-#if (Q_SIGNAL_SIZE == 1U)
-#define QS_SIG(sig_, obj_) \
- QS_u8_fmt_(QS_SIG_T, (sig_)); \
- QS_obj_raw_(obj_)
-#endif // (Q_SIGNAL_SIZE == 1U)
-
-//${QS-macros::QS_SIG} .......................................................
-#if (Q_SIGNAL_SIZE == 2U)
-#define QS_SIG(sig_, obj_) \
- QS_u16_fmt_(QS_SIG_T, (sig_)); \
- QS_obj_raw_(obj_)
-#endif // (Q_SIGNAL_SIZE == 2U)
-
-//${QS-macros::QS_SIG} .......................................................
-#if (Q_SIGNAL_SIZE == 4U)
-#define QS_SIG(sig_, obj_) \
- QS_u32_fmt_(QS_SIG_T, (sig_)); \
- QS_obj_raw_(obj_)
-#endif // (Q_SIGNAL_SIZE == 4U)
-
-//${QS-macros::QS_SIG_DICTIONARY} ............................................
-#define QS_SIG_DICTIONARY(sig_, obj_) \
- (QS_sig_dict_pre_((QSignal)(sig_), (obj_), #sig_))
-
-//${QS-macros::QS_OBJ_DICTIONARY} ............................................
-#define QS_OBJ_DICTIONARY(obj_) \
- (QS_obj_dict_pre_((obj_), #obj_))
-
-//${QS-macros::QS_OBJ_ARR_DICTIONARY} ........................................
-#define QS_OBJ_ARR_DICTIONARY(obj_, idx_) \
- (QS_obj_arr_dict_pre_((obj_), (idx_), #obj_))
-
-//${QS-macros::QS_FUN_DICTIONARY} ............................................
-#define QS_FUN_DICTIONARY(fun_) \
- (QS_fun_dict_pre_((void (*)(void))(fun_), #fun_))
-
-//${QS-macros::QS_USR_DICTIONARY} ............................................
-#define QS_USR_DICTIONARY(rec_) \
- (QS_usr_dict_pre_((rec_), #rec_))
-
-//${QS-macros::QS_ENUM_DICTIONARY} ...........................................
-#define QS_ENUM_DICTIONARY(value_, group_) \
- (QS_enum_dict_pre_((value_), (group_), #value_))
-
-//${QS-macros::QS_RX_PUT} ....................................................
-#define QS_RX_PUT(b_) (QS_rxPut((b_)))
-
-//${QS-macros::QS_TR_CRIT_ENTRY} .............................................
-#define QS_TR_CRIT_ENTRY()
-
-//${QS-macros::QS_TR_CRIT_EXIT} ..............................................
-#define QS_TR_CRIT_EXIT()
-
-//${QS-macros::QS_TR_ISR_ENTRY} ..............................................
-#define QS_TR_ISR_ENTRY(isrnest, prio) do { \
- QS_BEGIN_PRE_(QS_QF_ISR_ENTRY, 0U) \
- QS_TIME_PRE_(); \
- QS_2u8_raw_(isrnest, prio); \
- QS_END_PRE_() \
-}
-
-//${QS-macros::QS_TR_ISR_EXIT} ...............................................
-void QS_TR_ISR_EXIT(
- uint_fast8_t isrnest,
- uint_fast8_t prio);
-
-//${QS-macros::QS_ONLY} ......................................................
-#define QS_ONLY(code_) (code_)
-
-//${QS-macros::QS_ASSERTION} .................................................
-#define QS_ASSERTION(module_, id_, delay_) \
- (QS_assertion_pre_((module_), (id_), (delay_)))
-
-//${QS-macros::QS_EOD} .......................................................
-#define QS_EOD ((uint16_t)0xFFFFU)
-
-//${QS-macros::QS_CMD} .......................................................
-#define QS_CMD ((uint8_t)7U)
-
-//${QS-macros::QS_HEX_FMT} ...................................................
-#define QS_HEX_FMT ((uint8_t)0x0FU)
-
-//${QS-macros::QS_CRIT_STAT} .................................................
-#ifndef QS_CRIT_STAT
-#define QS_CRIT_STAT QF_CRIT_STAT
-#endif // ndef QS_CRIT_STAT
-
-//${QS-macros::QS_CRIT_ENTRY} ................................................
-#ifndef QS_CRIT_ENTRY
-#define QS_CRIT_ENTRY() QF_CRIT_ENTRY()
-#endif // ndef QS_CRIT_ENTRY
-
-//${QS-macros::QS_CRIT_EXIT} .................................................
-#ifndef QS_CRIT_EXIT
-#define QS_CRIT_EXIT() QF_CRIT_EXIT()
-#endif // ndef QS_CRIT_EXIT
-
-//${QS-macros::QS_MEM_SYS} ...................................................
-#ifndef QS_MEM_SYS
-#define QS_MEM_SYS() QF_MEM_SYS()
-#endif // ndef QS_MEM_SYS
-
-//${QS-macros::QS_MEM_APP} ...................................................
-#ifndef QS_MEM_APP
-#define QS_MEM_APP() QF_MEM_APP()
-#endif // ndef QS_MEM_APP
-//$enddecl${QS-macros} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-//============================================================================
-//! @cond INTERNAL
-
-typedef struct {
- void const * locFilter_AP; //!< @deprecated
- uint8_t * buf;
- QSCtr end;
- QSCtr volatile head;
- QSCtr volatile tail;
- QSCtr volatile used;
- uint8_t volatile seq;
- uint8_t volatile chksum;
- uint8_t volatile critNest;
- uint8_t flags;
-} QS_Attr;
-
-extern QS_Attr QS_priv_;
-
-void QS_glbFilter_(int_fast16_t const filter);
-void QS_locFilter_(int_fast16_t const filter);
-
-void QS_beginRec_(uint_fast8_t const rec);
-void QS_endRec_(void);
-
-void QS_u8_raw_(uint8_t const d);
-void QS_2u8_raw_(uint8_t const d1, uint8_t const d2);
-void QS_u16_raw_(uint16_t const d);
-void QS_u32_raw_(uint32_t const d);
-void QS_u64_raw_(uint64_t const d);
-void QS_obj_raw_(void const * const obj);
-void QS_str_raw_(char const * const str);
-
-void QS_u8_fmt_(uint8_t const format, uint8_t const d);
-void QS_u16_fmt_(uint8_t const format, uint16_t const d);
-void QS_u32_fmt_(uint8_t const format, uint32_t const d);
-void QS_u64_fmt_(uint8_t const format, uint64_t const d);
-void QS_f32_fmt_(uint8_t const format, float32_t const f);
-void QS_f64_fmt_(uint8_t const format, float64_t const d);
-void QS_str_fmt_(char const * const str);
-void QS_mem_fmt_(uint8_t const * const blk, uint8_t const size);
-
-void QS_sig_dict_pre_(QSignal const sig, void const * const obj,
- char const * const name);
-void QS_obj_dict_pre_(void const * const obj, char const * const name);
-void QS_obj_arr_dict_pre_(void const * const obj, uint_fast16_t const idx,
- char const * const name);
-void QS_fun_dict_pre_(QSpyFunPtr const fun, char const * const name);
-void QS_usr_dict_pre_(enum_t const rec, char const * const name);
-void QS_enum_dict_pre_(enum_t const value, uint8_t const group,
- char const * const name);
-
-void QS_assertion_pre_(char const * const module, int_t const id,
- uint32_t const delay);
-
-void QS_target_info_pre_(uint8_t const isReset);
-
-//! @endcond
-//============================================================================
-
-//$declare${QS::QS-TX} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-
-//${QS::QS-TX::preType} ......................................................
-//! Enumerates data elements for app-specific trace records
-enum QS_preType {
- QS_I8_ENUM_T, //!< signed 8-bit integer or enum format
- QS_U8_T, //!< unsigned 8-bit integer format
- QS_I16_T, //!< signed 16-bit integer format
- QS_U16_T, //!< unsigned 16-bit integer format
- QS_I32_T, //!< signed 32-bit integer format
- QS_U32_T, //!< unsigned 32-bit integer format
- QS_F32_T, //!< 32-bit floating point format
- QS_F64_T, //!< 64-bit floating point format
- QS_STR_T, //!< zero-terminated ASCII string format
- QS_MEM_T, //!< up to 255-bytes memory block format
- QS_SIG_T, //!< event signal format
- QS_OBJ_T, //!< object pointer format
- QS_FUN_T, //!< function pointer format
- QS_I64_T, //!< signed 64-bit integer format
- QS_U64_T //!< unsigned 64-bit integer format
-};
-
-//${QS::QS-TX::initBuf} ......................................................
-//! @static @public @memberof QS
-void QS_initBuf(
- uint8_t * const sto,
- uint_fast32_t const stoSize);
-
-//${QS::QS-TX::getByte} ......................................................
-//! @static @public @memberof QS
-uint16_t QS_getByte(void);
-
-//${QS::QS-TX::getBlock} .....................................................
-//! @static @public @memberof QS
-uint8_t const * QS_getBlock(uint16_t * const pNbytes);
-
-//${QS::QS-TX::doOutput} .....................................................
-//! @static @public @memberof QS
-void QS_doOutput(void);
-
-//${QS::QS-TX::onStartup} ....................................................
-//! @static @public @memberof QS
-uint8_t QS_onStartup(void const * arg);
-
-//${QS::QS-TX::onCleanup} ....................................................
-//! @static @public @memberof QS
-void QS_onCleanup(void);
-
-//${QS::QS-TX::onFlush} ......................................................
-//! @static @public @memberof QS
-void QS_onFlush(void);
-
-//${QS::QS-TX::onGetTime} ....................................................
-//! @static @public @memberof QS
-QSTimeCtr QS_onGetTime(void);
-//$enddecl${QS::QS-TX} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-//============================================================================
-#ifdef Q_UTEST
-
-//$declare${QS::QUTest} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-
-//${QS::QUTest::TProbe} ......................................................
-// @struct TProbe
-struct QS_TProbe {
- QSFun addr;
- uint32_t data;
- uint8_t idx;
-};
-
-//${QS::QUTest::onTestSetup} .................................................
-//! @static @public @memberof QS
-void QS_onTestSetup(void);
-
-//${QS::QUTest::onTestTeardown} ..............................................
-//! @static @public @memberof QS
-void QS_onTestTeardown(void);
-
-//${QS::QUTest::onTestEvt} ...................................................
-//! @static @public @memberof QS
-void QS_onTestEvt(QEvt * e);
-
-//${QS::QUTest::onTestPost} ..................................................
-//! @static @public @memberof QS
-void QS_onTestPost(
- void const * sender,
- QActive * recipient,
- QEvt const * e,
- bool status);
-
-//${QS::QUTest::onTestLoop} ..................................................
-//! @static @public @memberof QS
-void QS_onTestLoop(void);
-//$enddecl${QS::QUTest} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-#define QUTEST_ON_POST 124
-
-//============================================================================
-//! @cond INTERNAL
-
-typedef struct {
- struct QS_TProbe tpBuf[16];
- uint8_t tpNum;
- QSTimeCtr testTime;
- QPSet readySet;
- QPSet readySet_dis;
- uint_fast8_t intLock;
-} QSTestAttr;
-
-extern QSTestAttr QS_tstPriv_;
-
-void QS_test_pause_(void);
-uint32_t QS_getTestProbe_(QSpyFunPtr const api);
-
-//! @endcond
-//============================================================================
-
-// QP-stub for QUTest
-// NOTE: The QP-stub is needed for unit testing QP applications,
-// but might NOT be needed for testing QP itself.
-#if (Q_UTEST != 0)
-
-//$declare${QS::QUTest-stub::QHsmDummy} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-
-//${QS::QUTest-stub::QHsmDummy} ..............................................
-//! @class QHsmDummy
-//! @extends QHsm
-typedef struct {
-// protected:
- QAsm super;
-} QHsmDummy;
-
-// public:
-
-//! @public @memberof QHsmDummy
-void QHsmDummy_ctor(QHsmDummy * const me);
-
-//! @private @memberof QHsmDummy
-void QHsmDummy_init_(
- QAsm * const me,
- void const * const par,
- uint_fast8_t const qsId);
-
-// private:
-
-//! @private @memberof QHsmDummy
-void QHsmDummy_dispatch_(
- QAsm * const me,
- QEvt const * const e,
- uint_fast8_t const qsId);
-//$enddecl${QS::QUTest-stub::QHsmDummy} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//$declare${QS::QUTest-stub::QActiveDummy} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-
-//${QS::QUTest-stub::QActiveDummy} ...........................................
-//! @class QActiveDummy
-//! @extends QActive
-typedef struct {
-// protected:
- QActive super;
-} QActiveDummy;
-
-// public:
-
-//! @public @memberof QActiveDummy
-void QActiveDummy_ctor(QActiveDummy * const me);
-
-// private:
-
-//! @private @memberof QActiveDummy
-void QActiveDummy_init_(
- QAsm * const me,
- void const * const par,
- uint_fast8_t const qsId);
-
-//! @private @memberof QActiveDummy
-void QActiveDummy_dispatch_(
- QAsm * const me,
- QEvt const * const e,
- uint_fast8_t const qsId);
-
-//! @private @memberof QActiveDummy
-bool QActiveDummy_fakePost_(
- QActive * const me,
- QEvt const * const e,
- uint_fast16_t const margin,
- void const * const sender);
-
-//! @private @memberof QActiveDummy
-void QActiveDummy_fakePostLIFO_(
- QActive * const me,
- QEvt const * const e);
-//$enddecl${QS::QUTest-stub::QActiveDummy} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-#endif // Q_UTEST != 0
-
-#define QS_TEST_PROBE_DEF(fun_) \
- uint32_t const qs_tp_ = QS_getTestProbe_((void (*)(void))(fun_));
-
-#define QS_TEST_PROBE(code_) \
- if (qs_tp_ != 0U) { code_ }
-
-#define QS_TEST_PROBE_ID(id_, code_) \
- if (qs_tp_ == (uint32_t)(id_)) { code_ }
-
-#define QS_TEST_PAUSE() (QS_test_pause_())
-
-#else // Q_UTEST not defined
-
-// dummy definitions when not building for QUTEST
-#define QS_TEST_PROBE_DEF(fun_)
-#define QS_TEST_PROBE(code_)
-#define QS_TEST_PROBE_ID(id_, code_)
-#define QS_TEST_PAUSE() ((void)0)
-
-#endif // Q_UTEST
-
-//============================================================================
-//! @cond INTERNAL
-
-typedef struct {
- uint32_t param1;
- uint32_t param2;
- uint32_t param3;
- uint8_t idx;
- uint8_t cmdId;
-} CmdVar;
-
-typedef struct {
- uint_fast8_t rate;
-} TickVar;
-
-typedef struct {
- uint16_t offs;
- uint8_t size;
- uint8_t num;
- uint8_t idx;
-} PeekVar;
-
-typedef struct {
- uint32_t data;
- uint16_t offs;
- uint8_t size;
- uint8_t num;
- uint8_t idx;
- uint8_t fill;
-} PokeVar;
-
-typedef struct {
- uint8_t data[16];
- uint8_t idx;
- int8_t recId; // global/local
-} FltVar;
-
-typedef struct {
- QSObj addr;
- uint8_t idx;
- uint8_t kind; // see qs.h, enum QSpyObjKind
- int8_t recId;
-} ObjVar;
-
-typedef struct {
- QEvt *e;
- uint8_t *p;
- QSignal sig;
- uint16_t len;
- uint8_t prio;
- uint8_t idx;
-} EvtVar;
-
-typedef struct {
- void * currObj[8];
- uint8_t * buf;
- QSCtr end;
- QSCtr volatile head;
- QSCtr volatile tail;
- uint8_t state;
- uint8_t esc;
- uint8_t seq;
- uint8_t chksum;
-#ifdef Q_UTEST
- bool inTestLoop;
-#endif
- union Variant {
- CmdVar cmd;
- TickVar tick;
- PeekVar peek;
- PokeVar poke;
- FltVar flt;
- ObjVar obj;
- EvtVar evt;
-#ifdef Q_UTEST
- struct QS_TProbe tp;
-#endif // Q_UTEST
- } var;
-} QS_RxAttr;
-
-//! @endcond
-
-//! @static @private @memberof QS
-extern QS_RxAttr QS_rxPriv_;
-
-//============================================================================
-
-//$declare${QS::QS-RX} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-
-//${QS::QS-RX::QSpyObjKind} ..................................................
-//! @static @public @memberof QS
-//! Kinds of objects used in QS-RX
-enum QS_QSpyObjKind {
- SM_OBJ, //!< state machine object
- AO_OBJ, //!< active object
- MP_OBJ, //!< event pool object
- EQ_OBJ, //!< raw queue object
- TE_OBJ, //!< time event object
- AP_OBJ, //!< generic Application-specific object
- MAX_OBJ
-};
-
-//${QS::QS-RX::OSpyObjComb} ..................................................
-//! @static @public @memberof QS
-//! Object combinations for QS-RX
-enum QS_OSpyObjComb {
- SM_AO_OBJ = (enum_t)MAX_OBJ //!< combination of SM and AO
-};
-
-//${QS::QS-RX::rxInitBuf} ....................................................
-//! @static @public @memberof QS
-void QS_rxInitBuf(
- uint8_t * const sto,
- uint16_t const stoSize);
-
-//${QS::QS-RX::rxPut} ........................................................
-//! @static @public @memberof QS
-static inline bool QS_rxPut(uint8_t const b) {
- // NOTE: does not need critical section
- // But requires system-level memory access (QF_MEM_SYS()).
-
- QSCtr head = QS_rxPriv_.head + 1U;
- if (head == QS_rxPriv_.end) {
- head = 0U;
- }
- if (head != QS_rxPriv_.tail) { // buffer NOT full?
- QS_rxPriv_.buf[QS_rxPriv_.head] = b;
- QS_rxPriv_.head = head; // update the head to a *valid* index
- return true; // byte placed in the buffer
- }
- else {
- return false; // byte NOT placed in the buffer
- }
-}
-
-//${QS::QS-RX::rxParse} ......................................................
-//! @static @public @memberof QS
-void QS_rxParse(void);
-
-//${QS::QS-RX::setCurrObj} ...................................................
-//! @static @public @memberof QS
-void QS_setCurrObj(
- uint8_t const obj_kind,
- void * const obj_ptr);
-
-//${QS::QS-RX::rxGetNfree} ...................................................
-//! @static @public @memberof QS
-uint16_t QS_rxGetNfree(void);
-
-//${QS::QS-RX::doInput} ......................................................
-//! @static @public @memberof QS
-void QS_doInput(void);
-
-//${QS::QS-RX::onReset} ......................................................
-//! @static @public @memberof QS
-void QS_onReset(void);
-
-//${QS::QS-RX::onCommand} ....................................................
-//! @static @public @memberof QS
-void QS_onCommand(
- uint8_t cmdId,
- uint32_t param1,
- uint32_t param2,
- uint32_t param3);
-//$enddecl${QS::QS-RX} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-#endif // QS_H_
diff --git a/qspy/include/qpc_qs_pkg.h b/qspy/include/qpc_qs_pkg.h
deleted file mode 100644
index 1bfcfa3..0000000
--- a/qspy/include/qpc_qs_pkg.h
+++ /dev/null
@@ -1,176 +0,0 @@
-//$file${include::qs_pkg.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-//
-// Model: qpc.qm
-// File: ${include::qs_pkg.h}
-//
-// This code has been generated by QM 6.1.1 .
-// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
-//
-// This code is covered by the following QP license:
-// License # : LicenseRef-QL-dual
-// Issued to : Any user of the QP/C real-time embedded framework
-// Framework(s) : qpc
-// Support ends : 2024-12-31
-// License scope:
-//
-// Copyright (C) 2005 Quantum Leaps, LLC .
-//
-// Q u a n t u m L e a P s
-// ------------------------
-// Modern Embedded Software
-//
-// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-//
-// This software is dual-licensed under the terms of the open source GNU
-// General Public License version 3 (or any later version), or alternatively,
-// under the terms of one of the closed source Quantum Leaps commercial
-// licenses.
-//
-// The terms of the open source GNU General Public License version 3
-// can be found at:
-//
-// The terms of the closed source Quantum Leaps commercial licenses
-// can be found at:
-//
-// Redistributions in source code must retain this top-level comment block.
-// Plagiarizing this software to sidestep the license obligations is illegal.
-//
-// Contact information:
-//
-//
-//
-//$endhead${include::qs_pkg.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-#ifndef QS_PKG_H_
-#define QS_PKG_H_
-
-//============================================================================
-//! @cond INTERNAL
-
-//! QS received record types (RX channel)
-enum QSpyRxRecords {
- QS_RX_INFO, //!< query Target info (ver, config, tstamp)
- QS_RX_COMMAND, //!< execute a user-defined command in the Target
- QS_RX_RESET, //!< reset the Target
- QS_RX_TICK, //!< call system clock tick in the Target
- QS_RX_PEEK, //!< peek Target memory
- QS_RX_POKE, //!< poke Target memory
- QS_RX_FILL, //!< fill Target memory
- QS_RX_TEST_SETUP, //!< test setup
- QS_RX_TEST_TEARDOWN, //!< test teardown
- QS_RX_TEST_PROBE, //!< set a Test-Probe in the Target
- QS_RX_GLB_FILTER, //!< set global filters in the Target
- QS_RX_LOC_FILTER, //!< set local filters in the Target
- QS_RX_AO_FILTER, //!< set local AO filter in the Target
- QS_RX_CURR_OBJ, //!< set the "current-object" in the Target
- QS_RX_TEST_CONTINUE, //!< continue a test after QS_TEST_PAUSE()
- QS_RX_QUERY_CURR, //!< query the "current object" in the Target
- QS_RX_EVENT //!< inject an event to the Target
-};
-
-//----------------------------------------------------------------------------
-#define QS_FRAME 0x7EU
-#define QS_ESC 0x7DU
-#define QS_ESC_XOR 0x20U
-#define QS_GOOD_CHKSUM 0xFFU
-
-//----------------------------------------------------------------------------
-#define QS_BEGIN_PRE_(rec_, qsId_) \
- if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qsId_)) { \
- QS_beginRec_((uint_fast8_t)(rec_));
-#define QS_END_PRE_() QS_endRec_(); }
-
-#define QS_U8_PRE_(data_) (QS_u8_raw_((uint8_t)(data_)))
-#define QS_2U8_PRE_(data1_, data2_) \
- (QS_2u8_raw_((uint8_t)(data1_), (uint8_t)(data2_)))
-#define QS_U16_PRE_(data_) (QS_u16_raw_((uint16_t)(data_)))
-#define QS_U32_PRE_(data_) (QS_u32_raw_((uint32_t)(data_)))
-#define QS_STR_PRE_(msg_) (QS_str_raw_((msg_)))
-#define QS_OBJ_PRE_(obj_) (QS_obj_raw_(obj_))
-
-#if (!defined Q_SIGNAL_SIZE || (Q_SIGNAL_SIZE == 1U))
- #define QS_SIG_PRE_(sig_) (QS_u8_raw_((uint8_t)sig_))
-#elif (Q_SIGNAL_SIZE == 2U)
- #define QS_SIG_PRE_(sig_) (QS_u16_raw_((uint16_t)sig_))
-#elif (Q_SIGNAL_SIZE == 4U)
- #define QS_SIG_PRE_(sig_) (QS_u32_raw_((uint32_t)sig_))
-#endif
-
-#if (!defined QS_FUN_PTR_SIZE || (QS_FUN_PTR_SIZE == 2U))
- #define QS_FUN_PRE_(fun_) (QS_u16_raw_((uint16_t)(fun_)))
-#elif (QS_FUN_PTR_SIZE == 4U)
- #define QS_FUN_PRE_(fun_) (QS_u32_raw_((uint32_t)(fun_)))
-#elif (QS_FUN_PTR_SIZE == 8U)
- #define QS_FUN_PRE_(fun_) (QS_u64_raw_((uint64_t)(fun_)))
-#else
- #define QS_FUN_PRE_(fun_) (QS_u32_raw_((uint32_t)(fun_)))
-#endif
-
-//----------------------------------------------------------------------------
-#if (!defined QF_EQUEUE_CTR_SIZE || (QF_EQUEUE_CTR_SIZE == 1U))
- #define QS_EQC_PRE_(ctr_) QS_u8_raw_((uint8_t)(ctr_))
-#elif (QF_EQUEUE_CTR_SIZE == 2U)
- #define QS_EQC_PRE_(ctr_) QS_u16_raw_((uint16_t)(ctr_))
-#elif (QF_EQUEUE_CTR_SIZE == 4U)
- #define QS_EQC_PRE_(ctr_) QS_u32_raw_((uint32_t)(ctr_))
-#endif
-
-#if (!defined QF_EVENT_SIZ_SIZE || (QF_EVENT_SIZ_SIZE == 1U))
- #define QS_EVS_PRE_(size_) QS_u8_raw_((uint8_t)(size_))
-#elif (QF_EVENT_SIZ_SIZE == 2U)
- #define QS_EVS_PRE_(size_) QS_u16_raw_((uint16_t)(size_))
-#elif (QF_EVENT_SIZ_SIZE == 4U)
- #define QS_EVS_PRE_(size_) QS_u32_raw_((uint32_t)(size_))
-#endif
-
-#if (!defined QF_MPOOL_SIZ_SIZE || (QF_MPOOL_SIZ_SIZE == 1U))
- #define QS_MPS_PRE_(size_) QS_u8_raw_((uint8_t)(size_))
-#elif (QF_MPOOL_SIZ_SIZE == 2U)
- #define QS_MPS_PRE_(size_) QS_u16_raw_((uint16_t)(size_))
-#elif (QF_MPOOL_SIZ_SIZE == 4U)
- #define QS_MPS_PRE_(size_) QS_u32_raw_((uint32_t)(size_))
-#endif
-
-#if (!defined QF_MPOOL_CTR_SIZE || (QF_MPOOL_CTR_SIZE == 1U))
- #define QS_MPC_PRE_(ctr_) QS_u8_raw_((uint8_t)(ctr_))
-#elif (QF_MPOOL_CTR_SIZE == 2U)
- #define QS_MPC_PRE_(ctr_) QS_u16_raw_((uint16_t)(ctr_))
-#elif (QF_MPOOL_CTR_SIZE == 4U)
- #define QS_MPC_PRE_(ctr_) QS_u32_raw_((uint16_t)(ctr_))
-#endif
-
-#if (!defined QF_TIMEEVT_CTR_SIZE || (QF_TIMEEVT_CTR_SIZE == 1U))
- #define QS_TEC_PRE_(ctr_) QS_u8_raw_((uint8_t)(ctr_))
-#elif (QF_TIMEEVT_CTR_SIZE == 2U)
- #define QS_TEC_PRE_(ctr_) QS_u16_raw_((uint16_t)(ctr_))
-#elif (QF_TIMEEVT_CTR_SIZE == 4U)
- #define QS_TEC_PRE_(ctr_) QS_u32_raw_((uint32_t)(ctr_))
-#endif
-
-//----------------------------------------------------------------------------
-#define QS_INSERT_BYTE_(b_) \
- buf[head] = (b_); \
- ++head; \
- if (head == end) { \
- head = 0U; \
- }
-
-#define QS_INSERT_ESC_BYTE_(b_) \
- chksum = (uint8_t)(chksum + (b_)); \
- if (((b_) != QS_FRAME) && ((b_) != QS_ESC)) { \
- QS_INSERT_BYTE_(b_) \
- } \
- else { \
- QS_INSERT_BYTE_(QS_ESC) \
- QS_INSERT_BYTE_((uint8_t)((b_) ^ QS_ESC_XOR))\
- ++QS_priv_.used; \
- }
-
-//----------------------------------------------------------------------------
-#if (defined Q_UTEST) && (Q_UTEST != 0)
-void QS_processTestEvts_(void);
-#endif // Q_UTEST != 0
-
-//! @endcond
-//============================================================================
-
-#endif // QS_PKG_H_
diff --git a/qspy/include/qspy.h b/qspy/include/qspy.h
deleted file mode 100644
index 24d8532..0000000
--- a/qspy/include/qspy.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/*============================================================================
-* QTools Collection
-*
-* Q u a n t u m L e a P s
-* ------------------------
-* Modern Embedded Software
-*
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2024-06-21
-* @version Last updated for version: 7.4.0
-*
-* @file
-* @brief Host API
-*/
-#ifndef QSPY_H_
-#define QSPY_H_
-
-#define QSPY_VER "7.4.0"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*! low-level facilities for configuring QSpy and parsing QS records ...*/
-typedef enum {
- QSPY_ERROR,
- QSPY_SUCCESS
-} QSpyStatus;
-
-/*! typedef for inclusion of qpc_qs.h */
-typedef uint16_t QSignal;
-
-/*! QSPY record being processed */
-typedef struct {
- uint8_t const *start; /*!< start of the record */
- uint8_t const *pos; /*!< current position in the stream */
- uint32_t tot_len; /*!< total length of the record, including chksum */
- int32_t len; /*!< current length of the stream */
- uint8_t rec; /*!< the record-ID (see enum QSpyRecords in qs.h) */
-} QSpyRecord;
-
-/* limits */
-enum {
- QS_RECORD_SIZE_MAX = 512, /* max QS record size [bytes] */
- QS_LINE_LEN_MAX = 1000, /* max length of a QSPY line [chars] */
- QS_FNAME_LEN_MAX = 256, /* max length of filenames [chars] */
- QS_SEQ_LIST_LEN_MAX = 300, /* max length of the Seq list [chars] */
- QS_DNAME_LEN_MAX = 64, /* max dictionary name length [chars] */
-};
-
-/* pointer to the callback function for customized QS record parsing */
-typedef int (*QSPY_CustParseFun)(QSpyRecord * const me);
-typedef void (*QSPY_resetFun)(void);
-
-void QSpyRecord_init (QSpyRecord * const me,
- uint8_t const *start, uint32_t tot_len);
-QSpyStatus QSpyRecord_OK (QSpyRecord * const me);
-uint32_t QSpyRecord_getUint32(QSpyRecord * const me, uint8_t size);
-int32_t QSpyRecord_getInt32 (QSpyRecord * const me, uint8_t size);
-uint64_t QSpyRecord_getUint64(QSpyRecord * const me, uint8_t size);
-int64_t QSpyRecord_getInt64 (QSpyRecord * const me, uint8_t size);
-char const *QSpyRecord_getStr (QSpyRecord * const me);
-uint8_t const *QSpyRecord_getMem(QSpyRecord * const me,
- uint8_t size,
- uint32_t *pNum);
-
-/* QSPY configuration and high-level interface .............................*/
-/*! QSPY configuration parameters. @sa QSPY_config() */
-typedef struct {
- uint16_t version;
- uint8_t endianness;
- uint8_t objPtrSize;
- uint8_t funPtrSize;
- uint8_t tstampSize;
- uint8_t sigSize;
- uint8_t evtSize;
- uint8_t queueCtrSize;
- uint8_t poolCtrSize;
- uint8_t poolBlkSize;
- uint8_t tevtCtrSize;
- uint8_t tstamp[6];
-} QSpyConfig;
-
-typedef uint64_t KeyType;
-typedef uint32_t SigType;
-typedef uint64_t ObjType;
-
-void QSPY_config(QSpyConfig const *config,
- QSPY_CustParseFun custParseFun);
-void QSPY_configTxReset(QSPY_resetFun txResetFun);
-void QSPY_configMatFile(void *matFile);
-
-void QSPY_reset(void);
-void QSPY_parse(uint8_t const *buf, uint32_t nBytes);
-void QSPY_txReset(void);
-
-/* command options */
-enum {
- CMD_OPT_OFF,
- CMD_OPT_ON,
- CMD_OPT_TOGGLE,
-};
-bool QSPY_command(uint8_t cmdId, uint8_t opt);
-
-void QSPY_sendEvt(QSpyRecord const * const qrec);
-void QSPY_sendObj(QSpyRecord const * const qrec);
-void QSPY_sendCmd(QSpyRecord const * const qrec);
-void QSPY_sendTP (QSpyRecord const * const qrec);
-void QSPY_showNote(QSpyRecord const * const qrec);
-
-uint32_t QSPY_encode(uint8_t *dstBuf, uint32_t dstSize,
- uint8_t const *srcBuf, uint32_t srcBytes);
-uint32_t QSPY_encodeResetCmd(uint8_t *dstBuf, uint32_t dstSize);
-uint32_t QSPY_encodeInfoCmd (uint8_t *dstBuf, uint32_t dstSize);
-uint32_t QSPY_encodeTickCmd (uint8_t *dstBuf, uint32_t dstSize, uint8_t rate);
-
-SigType QSPY_findSig(char const *name, ObjType obj);
-KeyType QSPY_findObj(char const *name);
-KeyType QSPY_findFun(char const *name);
-KeyType QSPY_findUsr(char const *name);
-KeyType QSPY_findEnum(char const *name, uint8_t group);
-
-#define SIG_NOT_FOUND ((SigType)-1)
-#define KEY_NOT_FOUND ((KeyType)-1)
-
-void QSPY_cleanup(void); /* cleanup after the run */
-
-char const* QSPY_tstampStr(void);
-
-void QSPY_onPrintLn(void); /* callback to print the last line of output */
-
-/* prints information message to the QSPY output (without sending it to FE) */
-void QSPY_printInfo(void);
-
-/* prints error message to the QSPY output (sending it to FE) */
-void QSPY_printError(void);
-
-/* last human-readable line of output from QSPY ............................*/
-#define QS_LINE_OFFSET 8
-enum QSPY_LastOutputType {
- /* output forwarded to the back-end... */
- REG_OUT, /* regular output from the Target */
- ERR_OUT, /* error output from QSPY */
- /* ... */
- BE_OUT, /* last message forwarded to the back-end */
-
- /* output NOT forwarded to the back-end... */
- INF_OUT, /* internal info from QSPY */
- USR_OUT, /* generic user message from BE */
- TST_OUT, /* test message from BE */
-};
-typedef struct {
- char buf[QS_LINE_OFFSET + QS_LINE_LEN_MAX];
- int len; /* the length of the composed string */
- int rec; /* the corresponding QS record ID */
- int type; /* the type of the output */
- int rx_status; /* the type of the RX status */
-} QSPY_LastOutput;
-
-typedef enum {
- GRP_ERR,
- GRP_INF,
- GRP_DIC,
- GRP_TST,
- GRP_SM,
- GRP_AO,
- GRP_EQ,
- GRP_MP,
- GRP_TE,
- GRP_QF,
- GRP_SC,
- GRP_SEM,
- GRP_MTX,
- GRP_USR
-} QSRreRecGroup;
-
-/* returns the "group" of a given QS record-ID */
-QSRreRecGroup QSPY_getGroup(int recId);
-
-/* last output generated */
-extern QSPY_LastOutput QSPY_output;
-
-/* beginning of QSPY line to print */
-extern char const * const QSPY_line;
-
-#define SNPRINTF_LINE(format_, ...) do { \
- int n_ = SNPRINTF_S(&QSPY_output.buf[QS_LINE_OFFSET], \
- (QS_LINE_LEN_MAX - QS_LINE_OFFSET), \
- format_, __VA_ARGS__); \
- if ((0 < n_) && (n_ < QS_LINE_LEN_MAX - QS_LINE_OFFSET)) { \
- QSPY_output.len = n_; \
- } \
- else { \
- QSPY_output.len = QS_LINE_LEN_MAX - QS_LINE_OFFSET; \
- } \
-} while (0)
-
-#define SNPRINTF_APPEND(format_, ...) do { \
- int n_ = SNPRINTF_S(&QSPY_output.buf[QS_LINE_OFFSET + QSPY_output.len],\
- (QS_LINE_LEN_MAX - QS_LINE_OFFSET - QSPY_output.len), \
- format_, __VA_ARGS__); \
- if ((0 < n_) \
- && (n_ < QS_LINE_LEN_MAX - QS_LINE_OFFSET - QSPY_output.len)) { \
- QSPY_output.len += n_; \
- } \
- else { \
- QSPY_output.len = QS_LINE_LEN_MAX - QS_LINE_OFFSET; \
- } \
-} while (0)
-
-#define CONFIG_UPDATE(member_, new_, diff_) \
- if (QSPY_conf.member_ != (new_)) { \
- QSPY_conf.member_ = (new_); \
- (diff_) = 1U; \
- } else (void)0
-
-/* Dictionaries ............................................................*/
-typedef struct {
- KeyType key;
- char name[QS_DNAME_LEN_MAX];
-} DictEntry;
-
-typedef struct {
- DictEntry notFound;
- DictEntry* sto;
- int capacity;
- int entries;
- int keySize;
-} Dictionary;
-
-void Dictionary_ctor(Dictionary* const me,
- DictEntry* sto, uint32_t capacity);
-void Dictionary_config(Dictionary* const me, int keySize);
-char const* Dictionary_at(Dictionary* const me, unsigned idx);
-void Dictionary_put(Dictionary* const me, KeyType key, char const* name);
-char const* Dictionary_get(Dictionary* const me, KeyType key, char* buf);
-int Dictionary_find(Dictionary* const me, KeyType key);
-KeyType Dictionary_findKey(Dictionary* const me, char const* name);
-void Dictionary_reset(Dictionary* const me);
-
-typedef struct {
- SigType sig;
- ObjType obj;
- char name[QS_DNAME_LEN_MAX];
-} SigDictEntry;
-
-typedef struct {
- SigDictEntry notFound;
- SigDictEntry* sto;
- int capacity;
- int entries;
- int ptrSize;
-} SigDictionary;
-
-void SigDictionary_ctor(SigDictionary* const me,
- SigDictEntry* sto, uint32_t capacity);
-void SigDictionary_config(SigDictionary* const me, int ptrSize);
-void SigDictionary_put(SigDictionary* const me,
- SigType sig, ObjType obj, char const* name);
-char const* SigDictionary_get(SigDictionary* const me,
- SigType sig, ObjType obj, char* buf);
-int SigDictionary_find(SigDictionary* const me,
- SigType sig, ObjType obj);
-SigType SigDictionary_findSig(SigDictionary* const me,
- char const* name, ObjType obj);
-void SigDictionary_reset(SigDictionary* const me);
-void QSPY_resetAllDictionaries(void);
-
-/*==========================================================================*/
-/* facilities used by the QSPY host app only (but not for QSPY parser) */
-#ifdef QSPY_APP
-
-/*! commands to QSPY; @sa "packet IDs" in qutest.py or qview.py scripts */
-typedef enum {
- QSPY_ATTACH = 128, /*!< attach to the QSPY Back-End */
- QSPY_DETACH, /*!< detach from the QSPY Back-End */
- QSPY_SAVE_DICT, /*!< save dictionaries to a file in QSPY */
- QSPY_TEXT_OUT, /*!< toggle text output to a file in QSPY */
- QSPY_BIN_OUT, /*!< toggle binary output to a file in QSPY */
- QSPY_MATLAB_OUT, /*!< toggle Matlab output to a file in QSPY */
- QSPY_SEQUENCE_OUT, /*!< toggle Sequence output to a file in QSPY */
- QSPY_SEND_EVENT, /*!< send event (QSPY supplying signal) */
- QSPY_SEND_AO_FILTER, /*!< send Local Filter (QSPY supplying addr) */
- QSPY_SEND_CURR_OBJ, /*!< send current Object (QSPY supplying addr) */
- QSPY_SEND_COMMAND, /*!< send command (QSPY supplying cmdId) */
- QSPY_SEND_TEST_PROBE, /*!< send Test-Probe (QSPY supplying apiId) */
- QSPY_CLEAR_SCREEN, /*!< clear the QSPY screen */
- QSPY_SHOW_NOTE, /*!< show a note in QSPY output */
- /* ... */
-} QSpyCommands;
-
-extern QSpyConfig QSPY_conf;
-extern Dictionary QSPY_funDict;
-extern Dictionary QSPY_objDict;
-extern Dictionary QSPY_usrDict;
-extern SigDictionary QSPY_sigDict;
-extern Dictionary QSPY_enumDict[8];
-
-void QSPY_setExternDict(char const* dictName);
-QSpyStatus QSPY_readDict(void);
-QSpyStatus QSPY_writeDict(void);
-
-bool QDIC_isActive(void);
-
-void Dictionary_write(Dictionary const* const me, FILE* stream);
-bool Dictionary_read(Dictionary* const me, FILE* stream);
-
-void SigDictionary_write(SigDictionary const* const me, FILE* stream);
-bool SigDictionary_read(SigDictionary* const me, FILE* stream);
-char const* QSPY_getMatDict(char const* s);
-
-void QSEQ_configFile(void *seqFile);
-bool QSEQ_isActive(void);
-void QSEQ_config(void* seqFile, char const* seqList);
-void QSEQ_updateDictionary(char const* name, KeyType key);
-int QSEQ_find(KeyType key);
-void QSEQ_genHeader(void);
-void QSEQ_genPost(uint32_t tstamp, int src, int dst, char const* sig,
- bool isAttempt);
-void QSEQ_genPostLIFO(uint32_t tstamp, int src, char const* sig);
-void QSEQ_genTran(uint32_t tstamp, int obj, char const* state);
-void QSEQ_genPublish(uint32_t tstamp, int obj, char const* sig);
-void QSEQ_genAnnotation(uint32_t tstamp, int obj, char const* ann);
-void QSEQ_genTick(uint32_t rate, uint32_t nTick);
-void QSEQ_dictionaryReset(void);
-
-#endif /* QSPY_APP */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* QSPY_H_ */
diff --git a/qspy/include/safe_std.h b/qspy/include/safe_std.h
deleted file mode 100644
index 3aba5e5..0000000
--- a/qspy/include/safe_std.h
+++ /dev/null
@@ -1,106 +0,0 @@
-//============================================================================
-// QP/C Real-Time Embedded Framework (RTEF)
-// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-//
-// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-//
-// This software is dual-licensed under the terms of the open source GNU
-// General Public License version 3 (or any later version), or alternatively,
-// under the terms of one of the closed source Quantum Leaps commercial
-// licenses.
-//
-// The terms of the open source GNU General Public License version 3
-// can be found at:
-//
-// The terms of the closed source Quantum Leaps commercial licenses
-// can be found at:
-//
-// Redistributions in source code must retain this top-level comment block.
-// Plagiarizing this software to sidestep the license obligations is illegal.
-//
-// Contact information:
-//
-//
-//============================================================================
-//! @date Last updated on: 2024-06-21
-//! @version Last updated for: @ref qtools_7_4_0
-//!
-//! @file
-//! @brief "safe" and facilities
-#ifndef SAFE_STD_H
-#define SAFE_STD_H
-
-#include
-#include
-
-// portable "safe" facilities from and ................
-#ifdef _WIN32 // Windows OS?
-
-#define MEMMOVE_S(dest_, num_, src_, count_) \
- (void)memmove_s(dest_, num_, src_, count_)
-
-#define STRNCPY_S(dest_, destsiz_, src_) \
- (void)strncpy_s(dest_, destsiz_, src_, _TRUNCATE)
-
-#define STRCAT_S(dest_, destsiz_, src_) \
- (void)strcat_s(dest_, destsiz_, src_)
-
-#define SNPRINTF_S(buf_, bufsiz_, format_, ...) \
- _snprintf_s(buf_, bufsiz_, _TRUNCATE, format_, __VA_ARGS__)
-
-#define PRINTF_S(format_, ...) \
- (void)printf_s(format_, __VA_ARGS__)
-
-#define FPRINTF_S(fp_, format_, ...) \
- (void)fprintf_s(fp_, format_, __VA_ARGS__)
-
-#ifdef _MSC_VER
-#define FREAD_S(buf_, bufsiz_, elsiz_, count_, fp_) \
- fread_s(buf_, bufsiz_, elsiz_, count_, fp_)
-#else
-#define FREAD_S(buf_, bufsiz_, elsiz_, count_, fp_) \
- (void)fread(buf_, elsiz_, count_, fp_)
-#endif // _MSC_VER
-
-#define FOPEN_S(fp_, fName_, mode_) \
-if (fopen_s(&fp_, fName_, mode_) != 0) { \
- fp_ = (FILE *)0; \
-} else (void)0
-
-#define LOCALTIME_S(tm_, time_) \
- localtime_s(tm_, time_)
-
-#else // other OS (Linux, MacOS, etc.) .....................................
-
-#define MEMMOVE_S(dest_, num_, src_, count_) \
- (void)memmove(dest_, src_, count_)
-
-#define STRNCPY_S(dest_, destsiz_, src_) do { \
- (void)strncpy(dest_, src_, destsiz_); \
- dest_[(destsiz_) - 1] = '\0'; \
-} while (false)
-
-#define STRCAT_S(dest_, destsiz_, src_) \
- (void)strcat(dest_, src_)
-
-#define SNPRINTF_S(buf_, bufsiz_, format_, ...) \
- snprintf(buf_, bufsiz_, format_, __VA_ARGS__)
-
-#define PRINTF_S(format_, ...) \
- (void)printf(format_, __VA_ARGS__)
-
-#define FPRINTF_S(fp_, format_, ...) \
- (void)fprintf(fp_, format_, __VA_ARGS__)
-
-#define FREAD_S(buf_, bufsiz_, elsiz_, count_, fp_) \
- fread(buf_, elsiz_, count_, fp_)
-
-#define FOPEN_S(fp_, fName_, mode_) \
- (fp_ = fopen(fName_, mode_))
-
-#define LOCALTIME_S(tm_, time_) \
- memcpy(tm_, localtime(time_), sizeof(struct tm))
-
-#endif // _WIN32
-
-#endif // SAFE_STD_H
diff --git a/qspy/posix/Makefile b/qspy/posix/Makefile
deleted file mode 100644
index 5b1d482..0000000
--- a/qspy/posix/Makefile
+++ /dev/null
@@ -1,199 +0,0 @@
-##############################################################################
-# Product: Makefile for QSPY console, POSIX (Linux/Mac-OS), GNU compiler
-# Last updated for version 7.2.2
-# Last updated on 2023-01-25
-#
-# Q u a n t u m L e a P s
-# ------------------------
-# Modern Embedded Software
-#
-# Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-#
-# This program is open source software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Alternatively, this program may be distributed and modified under the
-# terms of Quantum Leaps commercial licenses, which expressly supersede
-# the GNU General Public License and are specifically designed for
-# licensees interested in retaining the proprietary status of their code.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-#
-# Contact information:
-#
-#
-##############################################################################
-# examples of invoking this Makefile:
-# building configurations: Debug (default), Release, and Spy
-# make
-# make CONF=dbg
-#
-# cleaning configurations: Debug (default), Release, and Spy
-# make clean
-# make CONF=dbg clean
-
-#-----------------------------------------------------------------------------
-# project name
-#
-PROJECT := qspy
-
-#-----------------------------------------------------------------------------
-# project directories:
-#
-
-# list of all source directories used by this project
-VPATH := . \
- ../source
-
-# list of all include directories needed by this project
-INCLUDES := -I. \
- -I../include
-
-
-#-----------------------------------------------------------------------------
-# project files:
-#
-
-# C source files...
-C_SRCS := \
- getopt.c \
- qspy_pal.c \
- qspy_be.c \
- qspy_main.c \
- qspy_dict.c \
- qspy_seq.c \
- qspy_tx.c \
- qspy.c
-
-# C++ source files...
-CPP_SRCS :=
-
-DEFINES := -DQSPY_APP
-LIB_DIRS :=
-LIBS :=
-
-#-----------------------------------------------------------------------------
-# GNU toolset:
-#
-CC := gcc
-CPP := g++
-LINK := gcc # for C programs
-#LINK := g++ # for C++ programs
-
-#-----------------------------------------------------------------------------
-# basic utilities:
-#
-MKDIR := mkdir -p
-RM := rm
-
-#-----------------------------------------------------------------------------
-# build configurations...
-#
-
-ifeq (dbg, $(CONF)) # Debug configuration ....................................
-
-BIN_DIR := dbg
-
-CFLAGS = -c -g -O -ffunction-sections -fdata-sections \
- -pedantic -Wall -Wextra -Wno-strict-overflow $(INCLUDES) $(DEFINES)
-
-CPPFLAGS = -c -g -O -ffunction-sections -fdata-sections \
- -pedantic -Wall -Wextra -Wno-strict-overflow $(INCLUDES) $(DEFINES)
-
-else # default Release configuration ........................................
-
-BIN_DIR := rel
-
-CFLAGS = -c -O3 -ffunction-sections -fdata-sections -DNDEBUG \
- -pedantic -Wall -Wextra -Wno-strict-overflow $(INCLUDES) $(DEFINES)
-
-CPPFLAGS = -c -O3 -ffunction-sections -fdata-sections -DNDEBUG \
- -pedantic-Wall -Wextra -Wno-strict-overflow $(INCLUDES) $(DEFINES)
-
-endif # .....................................................................
-
-UNAME := $(shell uname)
-ifeq ($(UNAME), Darwin)
- LINKFLAGS :=
-else
-ifndef GCC_OLD
- LINKFLAGS := -no-pie
-endif
-endif
-
-#-----------------------------------------------------------------------------
-C_OBJS := $(patsubst %.c,%.o, $(C_SRCS))
-CPP_OBJS := $(patsubst %.cpp,%.o, $(CPP_SRCS))
-
-TARGET_EXE := $(BIN_DIR)/$(PROJECT)$(TARGET_EXT)
-C_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(C_OBJS))
-C_DEPS_EXT := $(patsubst %.o,%.d, $(C_OBJS_EXT))
-CPP_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(CPP_OBJS))
-CPP_DEPS_EXT := $(patsubst %.o,%.d, $(CPP_OBJS_EXT))
-
-# create $(BIN_DIR) if it does not exist
-ifeq ("$(wildcard $(BIN_DIR))","")
-$(shell $(MKDIR) $(BIN_DIR))
-endif
-
-#-----------------------------------------------------------------------------
-# rules
-#
-
-all: $(TARGET_EXE)
-
-$(TARGET_EXE) : $(C_OBJS_EXT) $(CPP_OBJS_EXT) $(RC_OBJS_EXT)
- $(LINK) $(LINKFLAGS) $(LIB_DIRS) -o $@ $^ $(LIBS)
- cp $@ ../../bin
-
-$(BIN_DIR)/%.d : %.cpp
- $(CPP) -MM -MT $(@:.d=.o) $(CPPFLAGS) $< > $@
-
-$(BIN_DIR)/%.d : %.c
- $(CC) -MM -MT $(@:.d=.o) $(CFLAGS) $< > $@
-
-$(BIN_DIR)/%.o : %.cpp
- $(CPP) $(CPPFLAGS) $< -o $@
-
-$(BIN_DIR)/%.o : %.c
- $(CC) $(CFLAGS) $< -o $@
-
-.PHONY : clean show
-
-# include dependency files only if our goal depends on their existence
-ifneq ($(MAKECMDGOALS),clean)
- ifneq ($(MAKECMDGOALS),show)
--include $(C_DEPS_EXT) $(CPP_DEPS_EXT)
- endif
-endif
-
-.PHONY : clean show
-
-clean:
- -$(RM) $(BIN_DIR)/*.o \
- $(BIN_DIR)/*.d \
- $(TARGET_EXE)
-
-show:
- @echo PROJECT = $(PROJECT)
- @echo TARGET_EXE = $(TARGET_EXE)
- @echo VPATH = $(VPATH)
- @echo C_SRCS = $(C_SRCS)
- @echo CPP_SRCS = $(CPP_SRCS)
- @echo C_DEPS_EXT = $(C_DEPS_EXT)
- @echo C_OBJS_EXT = $(C_OBJS_EXT)
- @echo C_DEPS_EXT = $(C_DEPS_EXT)
- @echo CPP_DEPS_EXT = $(CPP_DEPS_EXT)
- @echo CPP_OBJS_EXT = $(CPP_OBJS_EXT)
- @echo LIB_DIRS = $(LIB_DIRS)
- @echo LIBS = $(LIBS)
- @echo DEFINES = $(DEFINES)
-
diff --git a/qspy/posix/qspy_pal.c b/qspy/posix/qspy_pal.c
deleted file mode 100644
index 94d4c02..0000000
--- a/qspy/posix/qspy_pal.c
+++ /dev/null
@@ -1,828 +0,0 @@
-/*============================================================================
-* QP/C Real-Time Embedded Framework (RTEF)
-* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
-*
-* SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
-*
-* This software is dual-licensed under the terms of the open source GNU
-* General Public License version 3 (or any later version), or alternatively,
-* under the terms of one of the closed source Quantum Leaps commercial
-* licenses.
-*
-* The terms of the open source GNU General Public License version 3
-* can be found at:
-*
-* The terms of the closed source Quantum Leaps commercial licenses
-* can be found at:
-*
-* Redistributions in source code must retain this top-level comment block.
-* Plagiarizing this software to sidestep the license obligations is illegal.
-*
-* Contact information:
-*
-*
-============================================================================*/
-/*!
-* @date Last updated on: 2023-03-12
-* @version Last updated for version: 7.2.2
-*
-* @file
-* @brief QSPY PAL implementation for POSIX
-*/
-#include /* for system() */
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "safe_std.h" /* "safe" and facilities */
-#include "qspy.h" /* QSPY data parser */
-#include "be.h" /* Back-End interface */
-#include "pal.h" /* Platform Abstraction Layer */
-
-/*..........................................................................*/
-PAL_VtblType PAL_vtbl; /* global PAL virtual table */
-
-/* specific implementations of the PAL "virutal functions" .................*/
-static QSPYEvtType ser_getEvt(unsigned char *buf, uint32_t *pBytes);
-static QSpyStatus ser_send2Target(unsigned char *buf, uint32_t nBytes);
-static void ser_cleanup(void);
-
-static QSPYEvtType tcp_getEvt(unsigned char *buf, uint32_t *pBytes);
-static QSpyStatus tcp_send2Target(unsigned char *buf, uint32_t nBytes);
-static void tcp_cleanup(void);
-
-static QSPYEvtType file_getEvt(unsigned char *buf, uint32_t *pBytes);
-static QSpyStatus file_send2Target(unsigned char *buf, uint32_t nBytes);
-static void file_cleanup(void);
-
-/*..........................................................................*/
-enum PAL_Constants { /* local constants... */
- INVALID_SOCKET = -1,
- SOCKET_ERROR = -1,
- FE_DETACHED = 0, /* Front-End detached */
- PAL_TOUT_MS = 10, /* determines how long to wait for an event [ms] */
-};
-
-/* fron-end address */
-typedef union {
- uint64_t data[2];
- struct sockaddr addr;
-} fe_addr;
-
-static bool l_kbd_inp = false;
-
-static int l_serFD = 0; /* Serial port file descriptor */
-static int l_serverSock = INVALID_SOCKET;
-static int l_clientSock = INVALID_SOCKET;
-static int l_beSock = INVALID_SOCKET;
-
-static fe_addr l_feAddr;
-static socklen_t l_feAddrSize = FE_DETACHED;
-
-static FILE *l_file = (FILE *)0;
-
-static struct termios l_termios_saved; /* saved terminal attributes */
-static fd_set l_readSet; /* descriptor set for reading all input sources */
-static int l_maxFd; /* maximum file descriptor for select() */
-
-/*==========================================================================*/
-/* Keyboard input */
-static void sigExitHandler(int dummy) {
- (void)dummy; /* unused parameter */
- QSPY_cleanup();
- exit(0);
-}
-
-QSpyStatus PAL_openKbd(bool kbd_inp, bool color) {
- struct sigaction sig_act;
- memset(&sig_act, 0, sizeof(sig_act));
-
- (void)color; /* unused parameter */
-
- /* install the SIGINT (Ctrl-C) signal handler */
- sig_act.sa_handler = &sigExitHandler;
- sigaction(SIGINT, &sig_act, NULL);
-
- /* install the SIGTERM (kill) signal handler */
- sig_act.sa_handler = &sigExitHandler;
- sig_act.sa_flags = SA_SIGINFO;
- sigaction(SIGTERM, &sig_act, NULL);
-
- if (kbd_inp) {
- struct termios t;
-
- /* modify the terminal attributes... */
- /* get the original terminal settings */
- if (tcgetattr(0, &l_termios_saved) == -1) {
- SNPRINTF_LINE(" ERROR %s",
- "getting terminal attributes");
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- t = l_termios_saved;
- t.c_lflag &= ~(ICANON | ECHO); /* disable canonical mode and echo */
- if (tcsetattr(0, TCSANOW, &t) == -1) {
- SNPRINTF_LINE(" ERROR %s",
- "setting terminal attributes");
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- l_kbd_inp = true;
- }
- return QSPY_SUCCESS;
-}
-/*..........................................................................*/
-void PAL_closeKbd(void) {
- if (l_kbd_inp) {
- /* restore the saved terminal settings */
- tcsetattr(0, TCSANOW, &l_termios_saved);
- l_kbd_inp = false;
- }
-}
-/*..........................................................................*/
-void PAL_exit(void) {
- QSPY_cleanup();
- exit(0);
-}
-/*==========================================================================*/
-/* POSIX serial communication with the Target */
-QSpyStatus PAL_openTargetSer(char const *comName, int baudRate) {
- struct termios t;
- speed_t spd;
-
- /* setup the PAL virtual table for the Serial communication... */
- PAL_vtbl.getEvt = &ser_getEvt;
- PAL_vtbl.send2Target = &ser_send2Target;
- PAL_vtbl.cleanup = &ser_cleanup;
-
- l_serFD = open(comName, O_RDWR | O_NOCTTY | O_NONBLOCK);/* R/W,no-block */
- if (l_serFD == -1) {
- SNPRINTF_LINE(" ERROR "
- "Opening serial port Port=%s,Baud=%d",
- comName, baudRate);
- QSPY_printError();
- return QSPY_ERROR; /* open failed */
- }
-
- if (tcgetattr(l_serFD, &t) == -1) {
- SNPRINTF_LINE(" ERROR "
- "cannot get serial attributes errno=%d",
- errno);
- QSPY_printError();
- return QSPY_ERROR; /* getting attributes failed */
- }
- t.c_cc[VMIN] = 0;
- t.c_cc[VTIME] = 1;
-
- t.c_iflag = 0;
- t.c_iflag &= ~(BRKINT | IGNPAR | PARMRK | INPCK |
- ISTRIP | INLCR | IGNCR | ICRNL | IXON | IXOFF);
- t.c_iflag |= IGNBRK;
-
- t.c_oflag = 0;
- t.c_oflag &= ~OPOST;
-
- t.c_lflag = 0;
- t.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL |
- ICANON | ISIG | NOFLSH | TOSTOP);
-
- t.c_cflag = 0;
- t.c_cflag &= ~(CSIZE | HUPCL);
- t.c_cflag |= (CLOCAL | CREAD);
-
- spd = B115200; /* the default speed of the Serial port */
- switch (baudRate) {
- case 200: spd = B200; break;
- case 300: spd = B300; break;
- case 600: spd = B600; break;
- case 1200: spd = B1200; break;
- case 1800: spd = B1800; break;
- case 2400: spd = B2400; break;
- case 4800: spd = B4800; break;
- case 9600: spd = B9600; break;
- case 19200: spd = B19200; break;
- case 38400: spd = B38400; break;
- case 57600: spd = B57600; break;
- case 115200: spd = B115200; break;
-
- /* high baud rates (might not be supported)... */
-#ifdef B230400
- case 230400: spd = B230400; break;
-#endif
-#ifdef B460800
- case 460800: spd = B460800; break;
-#endif
-#ifdef B500000
- case 500000: spd = B500000; break;
-#endif
-#ifdef B576000
- case 576000: spd = B576000; break;
-#endif
-#ifdef B921600
- case 921600: spd = B921600; break;
-#endif
-#ifdef B1000000
- case 1000000: spd = B1000000; break;
-#endif
-#ifdef B1152000
- case 1152000: spd = B1152000; break;
-#endif
-#ifdef B1500000
- case 1500000: spd = B1500000; break;
-#endif
-#ifdef B2000000
- case 2000000: spd = B2000000; break;
-#endif
-#ifdef B2500000
- case 2500000: spd = B2500000; break;
-#endif
-#ifdef B3000000
- case 3000000: spd = B3000000; break;
-#endif
-#ifdef B3500000
- case 3500000: spd = B3500000; break;
-#endif
-#ifdef B4000000
- case 4000000: spd = B4000000; break;
-#endif
-
- default:
- SNPRINTF_LINE(" ERROR Unsupported rate Baud=%d",
- baudRate);
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- t.c_cflag &= ~(PARENB | PARODD); /* no parity */
- t.c_cflag |= (CS8); /* 8 bits in a byte */
- t.c_cflag &= ~(CSTOPB); /* 1 stop bit */
-
- if (cfsetispeed(&t, spd) == -1) {
- SNPRINTF_LINE(" ERROR %s",
- "setting input speed failed");
- QSPY_printError();
- return QSPY_ERROR;
- }
- if (cfsetospeed(&t, spd) == -1) {
- SNPRINTF_LINE(" ERROR %s",
- "setting output speed failed");
- QSPY_printError();
- return QSPY_ERROR;
- }
- if (tcflush(l_serFD, TCIFLUSH) == -1) {
- SNPRINTF_LINE(" ERROR %s",
- "flushing serial port failed");
- QSPY_printError();
- return QSPY_ERROR;
- }
- if (tcsetattr(l_serFD, TCSANOW, &t) == -1) {
- SNPRINTF_LINE(" ERROR %s",
- "seting serial attributes failed");
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- PAL_updateReadySet(l_serFD); /* Serial port to be checked in select() */
-
- return QSPY_SUCCESS;
-}
-/*..........................................................................*/
-static QSPYEvtType ser_getEvt(unsigned char *buf, uint32_t *pBytes) {
- QSPYEvtType evtType;
- fd_set readSet = l_readSet;
-
- /* block indefinitely until any input source has input */
- int nrec = select(l_maxFd, &readSet, 0, 0, NULL);
-
- if (nrec == 0) {
- return QSPY_NO_EVT;
- }
- else if (nrec < 0) {
- SNPRINTF_LINE(" ERROR select() errno=%d", errno);
- QSPY_printError();
- return QSPY_ERROR_EVT;
- }
-
- /* any input available from the keyboard? */
- if (l_kbd_inp && FD_ISSET(0, &readSet)) {
- evtType = PAL_receiveKbd(buf, pBytes);
- if (evtType != QSPY_NO_EVT) {
- return evtType;
- }
- }
-
- /* any input available from the Back-End socket? */
- if ((l_beSock != INVALID_SOCKET) && FD_ISSET(l_beSock, &readSet)) {
- evtType = PAL_receiveBe(buf, pBytes);
- if (evtType != QSPY_NO_EVT) {
- return evtType;
- }
- }
-
- /* any input available from the Serial port? */
- if (FD_ISSET(l_serFD, &readSet)) {
- uint32_t nBytes = read(l_serFD, buf, *pBytes);
- if (nBytes > 0) {
- *pBytes = (uint32_t)nBytes;
- return QSPY_TARGET_INPUT_EVT;
- }
- }
-
- return QSPY_NO_EVT;
-}
-/*..........................................................................*/
-static QSpyStatus ser_send2Target(unsigned char *buf, uint32_t nBytes) {
- uint32_t nBytesWritten = write(l_serFD, buf, nBytes);
- if (nBytesWritten == (uint32_t)nBytes) {
- return QSPY_SUCCESS;
- }
- else {
- SNPRINTF_LINE(" ERROR writing serial port errno=%d",
- errno);
- QSPY_printError();
- return QSPY_ERROR;
- }
-}
-/*..........................................................................*/
-static void ser_cleanup(void) {
- if (l_serFD != 0) {
- close(l_serFD); /* close the serial port */
- l_serFD = 0;
- }
-}
-
-/*==========================================================================*/
-/* POSIX TCP/IP communication with the Target */
-
-struct sockaddr_in l_clientAddr;
-
-/*..........................................................................*/
-QSpyStatus PAL_openTargetTcp(int portNum) {
- struct sockaddr_in local;
-
- /* setup the PAL virtual table for the TCP/IP Target connection... */
- PAL_vtbl.getEvt = &tcp_getEvt;
- PAL_vtbl.send2Target = &tcp_send2Target;
- PAL_vtbl.cleanup = &tcp_cleanup;
-
- /* create TCP socket */
- l_serverSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (l_serverSock == INVALID_SOCKET) {
- SNPRINTF_LINE(" ERROR server socket open errno=%d",
- errno);
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- memset(&local, 0, sizeof(local));
- local.sin_family = AF_INET;
- local.sin_addr.s_addr = INADDR_ANY;
- local.sin_port = htons((unsigned short)portNum);
-
- /* bind() associates a local address and port combination with the
- * socket just created. This is most useful when the application is a
- * server that has a well-known port that clients know about in advance.
- */
- if (bind(l_serverSock, (struct sockaddr *)&local, sizeof(local))
- == SOCKET_ERROR)
- {
- SNPRINTF_LINE(" ERROR socket binding errno=%d", errno);
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- if (listen(l_serverSock, 1) == SOCKET_ERROR) {
- SNPRINTF_LINE(" ERROR socket listen errno=%d", errno);
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- PAL_updateReadySet(l_serverSock); /* to be checked in select() */
-
- return QSPY_SUCCESS;
-}
-/*..........................................................................*/
-static void tcp_cleanup(void) {
- if (l_serverSock != INVALID_SOCKET) {
- close(l_serverSock);
- }
-}
-/*..........................................................................*/
-static QSPYEvtType tcp_getEvt(unsigned char *buf, uint32_t *pBytes) {
- QSPYEvtType evtType;
- fd_set readSet = l_readSet;
-
- /* block indefinitely until any input source has input */
- int nrec = select(l_maxFd, &readSet, 0, 0, NULL);
-
- if (nrec == 0) {
- return QSPY_NO_EVT;
- }
- else if (nrec < 0) {
- SNPRINTF_LINE(" ERROR select() errno=%d", errno);
- QSPY_printError();
- return QSPY_ERROR_EVT;
- }
-
- /* any input available from the keyboard? */
- if (l_kbd_inp && FD_ISSET(0, &readSet)) {
- evtType = PAL_receiveKbd(buf, pBytes);
- if (evtType != QSPY_NO_EVT) {
- return evtType;
- }
- }
-
- /* any input available from the Back-End socket? */
- if ((l_beSock != INVALID_SOCKET) && FD_ISSET(l_beSock, &readSet)) {
- evtType = PAL_receiveBe(buf, pBytes);
- if (evtType != QSPY_NO_EVT) {
- return evtType;
- }
- }
-
- /* still waiting for the client? */
- if (l_clientSock == INVALID_SOCKET) {
- if (FD_ISSET(l_serverSock, &readSet)) {
- socklen_t clientAddrLen = (socklen_t)sizeof(l_clientAddr);
- l_clientSock = accept(l_serverSock,
- (struct sockaddr *)&l_clientAddr,
- &clientAddrLen);
- if (l_clientSock == INVALID_SOCKET) {
- SNPRINTF_LINE(" ERROR socket accept errno=%d",
- errno);
- QSPY_printError();
- return QSPY_ERROR_EVT;
- }
-
- QSPY_reset(); /* reset the QSPY parser to start over cleanly */
- QSPY_txReset(); /* reset the QSPY transmitter */
-
- SNPRINTF_LINE(" TCP-IP Connected to Host=%s,Port=%d",
- inet_ntoa(l_clientAddr.sin_addr),
- (int)ntohs(l_clientAddr.sin_port));
- QSPY_printInfo();
-
- /* re-evaluate the ready set and max FD for select() */
- PAL_updateReadySet(l_clientSock);
- }
- }
- else {
- if (FD_ISSET(l_clientSock, &readSet)) {
- nrec = recv(l_clientSock, (char *)buf, *pBytes, 0);
-
- if (nrec <= 0) { /* the client hang up */
- SNPRINTF_LINE(" TCP-IP Disconn from "
- "Host=%s,Port=%d",
- inet_ntoa(l_clientAddr.sin_addr),
- (int)ntohs(l_clientAddr.sin_port));
- QSPY_printInfo();
-
- /* go back to waiting for a client */
- close(l_clientSock);
- l_clientSock = INVALID_SOCKET;
-
- /* re-evaluate the ready set and max FD for select() */
- PAL_updateReadySet(l_serverSock);
- }
- else {
- *pBytes = (uint32_t)nrec;
- return QSPY_TARGET_INPUT_EVT;
- }
- }
- }
-
- return QSPY_NO_EVT;
-}
-/*..........................................................................*/
-static QSpyStatus tcp_send2Target(unsigned char *buf, uint32_t nBytes) {
- if (l_clientSock == INVALID_SOCKET) {
- return QSPY_ERROR;
- }
- if (send(l_clientSock, buf, nBytes, 0) == SOCKET_ERROR) {
- SNPRINTF_LINE(" ERROR Writing to TCP socket errno=%d",
- errno);
- QSPY_printError();
- return QSPY_ERROR;
- }
- return QSPY_SUCCESS;
-}
-
-/*==========================================================================*/
-/* File communication with the "Target" */
-QSpyStatus PAL_openTargetFile(char const *fName) {
- int fd;
-
- /* setup the PAL virtual table for the File connection... */
- PAL_vtbl.getEvt = &file_getEvt;
- PAL_vtbl.send2Target = &file_send2Target;
- PAL_vtbl.cleanup = &file_cleanup;
-
- FOPEN_S(l_file, fName, "rb"); /* open for reading binary */
- if (l_file == (FILE *)0) {
- SNPRINTF_LINE(" ERROR Cannot find File=%s", fName);
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- QSPY_reset(); /* reset the QSPY parser to start over cleanly */
- QSPY_txReset(); /* reset the QSPY transmitter */
-
- fd = fileno(l_file); /* FILE* to file-descriptor */
- PAL_updateReadySet(fd); /* fd to be checked in select() */
-
- SNPRINTF_LINE(" File Opened File=%s", fName);
- QSPY_printInfo();
-
- return QSPY_SUCCESS;
-}
-/*..........................................................................*/
-static QSPYEvtType file_getEvt(unsigned char *buf, uint32_t *pBytes) {
- QSPYEvtType evtType;
- uint32_t nBytes;
- fd_set readSet = l_readSet;
-
- /* block indefinitely until any input source has input */
- int nrec = select(l_maxFd, &readSet, 0, 0, NULL);
-
- if (nrec == 0) {
- return QSPY_NO_EVT;
- }
- else if (nrec < 0) {
- SNPRINTF_LINE(" ERROR select() errno=%d", errno);
- QSPY_printError();
- return QSPY_ERROR_EVT;
- }
-
- /* any input available from the keyboard? */
- if (l_kbd_inp && FD_ISSET(0, &readSet)) {
- evtType = PAL_receiveKbd(buf, pBytes);
- if (evtType != QSPY_NO_EVT) {
- return evtType;
- }
- }
-
- /* any input available from the Back-End socket? */
- if ((l_beSock != INVALID_SOCKET) && FD_ISSET(l_beSock, &readSet)) {
- evtType = PAL_receiveBe(buf, pBytes);
- if (evtType != QSPY_NO_EVT) {
- return evtType;
- }
- }
-
- /* try to receive data from the File... */
- nBytes = FREAD_S(buf, *pBytes, 1U, *pBytes, l_file);
- if (nBytes > 0) {
- *pBytes = nBytes;
- return QSPY_TARGET_INPUT_EVT;
- }
-
- /* no more input available from the file, QSPY is done */
- return QSPY_DONE_EVT;
-}
-/*..........................................................................*/
-static QSpyStatus file_send2Target(unsigned char *buf, uint32_t nBytes) {
- (void)buf;
- (void)nBytes;
- return QSPY_ERROR;
-}
-/*..........................................................................*/
-static void file_cleanup(void) {
- if (l_file != (FILE *)0) {
- fclose(l_file);
- l_file = (FILE *)0;
- }
-}
-
-
-/*==========================================================================*/
-/* Front-End interface */
-QSpyStatus PAL_openBE(int portNum) {
- struct sockaddr_in local;
- int flags;
-
- l_beSock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); /* UDP socket */
- if (l_beSock == INVALID_SOCKET){
- SNPRINTF_LINE(" ERROR UDP socket create errno=%d",
- errno);
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- /* bind the socket...
- * bind() associates a local address and port combination with the
- * socket just created. This is most useful when the application is a
- * server that has a well-known port that clients know about in advance.
- */
- memset(&local, 0, sizeof(local));
- local.sin_family = AF_INET;
- local.sin_addr.s_addr = INADDR_ANY;
- local.sin_port = htons((unsigned short)portNum);
- if (bind(l_beSock, (struct sockaddr *)&local, sizeof(local))
- == SOCKET_ERROR)
- {
- SNPRINTF_LINE(" ERROR UDP socket binding errno=%d",
- errno);
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- /* put the socket into NON-BLOCKING mode... */
- flags = fcntl(l_beSock, F_GETFL, 0);
- if (flags == SOCKET_ERROR) {
- SNPRINTF_LINE(" ERROR UDP socket fcntl() get errno=%d",
- errno);
- QSPY_printError();
- return QSPY_ERROR;
- }
- flags |= O_NONBLOCK;
- if (fcntl(l_beSock, F_SETFL, flags) != 0) {
- SNPRINTF_LINE(" ERROR "
- "UDP socket fcntl() set errno=%d", errno);
- QSPY_printError();
- return QSPY_ERROR;
- }
-
- BE_onStartup(); /* Back-End startup callback */
-
- /* NOTE:
- * The Back-End socket l_beSock needs to be checked in select() just
- * like all other sources of input. However, the l_beSock socket is
- * added automatically in the PAL_updateReadySet() function *later* in
- * the initialization phase. This assumes that PAL_openBE() is called
- * always *before* opening the specific Target link (see configure() in
- * main.c).
- */
-
- return QSPY_SUCCESS;
-}
-/*..........................................................................*/
-void PAL_closeBE(void) {
- if (l_beSock != INVALID_SOCKET) {
- if (l_feAddrSize != FE_DETACHED) { /* front-end attached? */
- fd_set writeSet;
- struct timeval delay;
-
- /* Back-End cleanup callback (send detach packet)... */
- BE_onCleanup();
-
- /* block until the packet comes out... */
- FD_ZERO(&writeSet);
- FD_SET(l_beSock, &writeSet);
- delay.tv_sec = 2U; /* delay for up to 2 seconds */
- delay.tv_usec = 0U;
- if (select(l_beSock + 1, (fd_set *)0,
- &writeSet, (fd_set *)0, &delay)
- == SOCKET_ERROR)
- {
- SNPRINTF_LINE(" ERROR "
- "UDP socket select errno=%d",
- errno);
- QSPY_printError();
- }
- }
-
- close(l_beSock);
- l_beSock = INVALID_SOCKET;
- }
-}
-/*..........................................................................*/
-void PAL_send2FE(unsigned char const *buf, uint32_t nBytes) {
- if (l_feAddrSize != FE_DETACHED) { /* front-end attached? */
- if (sendto(l_beSock, (char *)buf, (int)nBytes, 0,
- &l_feAddr.addr, l_feAddrSize) == SOCKET_ERROR)
- {
- PAL_detachFE(); /* detach the Front-End */
-
- SNPRINTF_LINE(" ERROR UDP socket failed errno=%d",
- errno);
- QSPY_printError();
- }
- }
-}
-/*..........................................................................*/
-void PAL_detachFE(void) {
- l_feAddrSize = FE_DETACHED;
-}
-
-/*..........................................................................*/
-void PAL_clearScreen(void) {
- int status = system("clear");
- if (status < 0) {
- SNPRINTF_LINE(" ERROR %s",
- "clearing the screen failed");
- QSPY_printError();
- }
-}
-
-/*--------------------------------------------------------------------------*/
-QSPYEvtType PAL_receiveBe(unsigned char *buf, uint32_t *pBytes) {
- fe_addr feAddr;
- socklen_t feAddrSize;
- uint32_t nBytes;
-
- if (l_beSock == INVALID_SOCKET) { /* Back-End socket not initialized? */
- return QSPY_NO_EVT;
- }
-
- /* receive a packet from the Back-End socket */
- feAddrSize = sizeof(feAddr);
- nBytes = recvfrom(l_beSock, buf, *pBytes, 0,
- &feAddr.addr, &feAddrSize);
-
- if (nBytes == 0) { /* socket error */
- PAL_detachFE(); /* detach from the Front-End */
- SNPRINTF_LINE(" ERROR "
- "UDP socket recvfrom() errno=%d", errno);
- QSPY_printError();
- return QSPY_ERROR_EVT;
- }
- else if (l_feAddrSize == 0) { /* not attached yet? */
- if (feAddrSize > sizeof(l_feAddr)) {
- SNPRINTF_LINE(" ERROR UDP address error size=%d",
- feAddrSize);
- QSPY_printError();
- return QSPY_ERROR_EVT;
- }
- memcpy(&l_feAddr, &feAddr, feAddrSize);
- l_feAddrSize = feAddrSize; /* attach connection */
- *pBytes = nBytes;
- return QSPY_FE_INPUT_EVT;
- }
- else { /* already attached */
- /* is this from the attached front-end address? */
- if ((feAddrSize == l_feAddrSize)
- && (feAddr.data[1] == l_feAddr.data[1])
- && (feAddr.data[0] == l_feAddr.data[0]))
- {
- *pBytes = nBytes;
- return QSPY_FE_INPUT_EVT;
- }
- else {
- SNPRINTF_LINE(" WARN %s",
- "UDP socket in use");
- QSPY_printError();
- /* this packet is from a DIFFERENT front-end -- ignore it */
- }
- }
- return QSPY_NO_EVT;
-}
-
-/*..........................................................................*/
-QSPYEvtType PAL_receiveKbd(unsigned char *buf, uint32_t *pBytes) {
- *pBytes = read(0, buf, 1); /* the key pressed */
- if (*pBytes > 0) {
- return QSPY_KEYBOARD_EVT;
- }
- return QSPY_NO_EVT;
-}
-/*..........................................................................*/
-void PAL_updateReadySet(int targetConn) {
- FD_ZERO(&l_readSet);
- FD_SET(0, &l_readSet); /* terminal to be checked in select */
- l_maxFd = 1;
- FD_SET(targetConn, &l_readSet); /* check in select */
- if (l_maxFd < targetConn + 1) {
- l_maxFd = targetConn + 1;
- }
- if (l_beSock != INVALID_SOCKET) {
- FD_SET(l_beSock, &l_readSet); /* check in select */
- if (l_maxFd < l_beSock + 1) {
- l_maxFd = l_beSock + 1;
- }
- }
-}
-
-/*..........................................................................*/
-/* simplified strncpy_s() implementation "good enough" for the intended use */
-int strncpy_s(char* strDest, uint32_t numberOfElements,
- const char* strSource, uint32_t count)
-{
- uint32_t n;
- for (n = (numberOfElements < count) ? numberOfElements : count;
- n > 0;
- --n, ++strSource, ++strDest)
- {
- if (*strSource != '\0') {
- *strDest = *strSource;
- }
- else {
- *strDest = '\0';
- return 0; /* destination fits the source */
- }
- }
- strDest[numberOfElements - 1] = '\0';
- return -1; /* destination holds truncated source */
-}
diff --git a/qspy/seq/dpp-qpc.bin b/qspy/seq/dpp-qpc.bin
deleted file mode 100644
index 597e5a4..0000000
Binary files a/qspy/seq/dpp-qpc.bin and /dev/null differ
diff --git a/qspy/seq/dpp-qpcpp.bin b/qspy/seq/dpp-qpcpp.bin
deleted file mode 100644
index bf98564..0000000
Binary files a/qspy/seq/dpp-qpcpp.bin and /dev/null differ
diff --git a/qspy/seq/qspy221128_101107.seq b/qspy/seq/qspy221128_101107.seq
deleted file mode 100644
index 80a8d6e..0000000
--- a/qspy/seq/qspy221128_101107.seq
+++ /dev/null
@@ -1,164 +0,0 @@
--g l_SysTick_Handler,Table_inst,Philo_inst[0],Philo_inst[1],Philo_inst[2],Philo_inst[3],Philo_inst[4]
-
- +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+
- |l_SysTick_Handl| | Table_inst | | Philo_inst[0] | | Philo_inst[1] | | Philo_inst[2] | | Philo_inst[3] | | Philo_inst[4] |
- +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+
-2950460426 | |<------------------+-------------------+-------------------+-------------------+-------HUNGRY_SIG--*
-2950460524 | | | | | |
-2950464438 . . . . | . . . . . . . . . * .EAT_SIG. . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . .
-2950464451 | *--EAT_SIG----------+-------------------+-------------------+-------------------+------------------>|
-2950464514 | *--EAT_SIG----------+-------------------+-------------------+------------------>| |
-2950464551 | *--EAT_SIG----------+-------------------+------------------>| | |
-2950464589 | *--EAT_SIG----------+------------------>| | | |
-2950464635 | *--EAT_SIG--------->| | | | |
-2950477451 | | | | | |
-2950772367 | |<------------------+-------------------+-------HUNGRY_SIG--* | |
-2950772457 | | | | | |
-2950785279 . . . . | . . . . . . . . . * .EAT_SIG. . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . .
-2950785311 | *--EAT_SIG----------+-------------------+-------------------+-------------------+------------------>|
-2950785419 | *--EAT_SIG----------+-------------------+-------------------+------------------>| |
-2950785460 | *--EAT_SIG----------+-------------------+------------------>| | |
-2950785496 | *--EAT_SIG----------+------------------>| | | |
-2950785534 | *--EAT_SIG--------->| | | | |
-2950843875 | | | | | |
-2952334542 | |<------------------+-------HUNGRY_SIG--* | | |
-2952334648 | | | | | |
-2960692857 | |<------HUNGRY_SIG--* | | | |
-2960693442 | | | | | |
-2965066265 | |<------------------+-------------------+-------------------+-------HUNGRY_SIG--* |
-2965066355 | | | | | |
-2976002932 . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . * .DONE_SIG . . . . | . . . . . . . . . | . . .
-2976002943 | |<------------------+-------------------+---------DONE_SIG--* | |
-2976003120 | | | | | |
-2976006906 . . . . | . . . . . . . . . * .EAT_SIG. . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . .
-2976006921 | *--EAT_SIG----------+-------------------+-------------------+-------------------+------------------>|
-2976006995 | *--EAT_SIG----------+-------------------+-------------------+------------------>| |
-2976007039 | *--EAT_SIG----------+-------------------+------------------>| | |
-2976007077 | *--EAT_SIG----------+------------------>| | | |
-2976007122 | *--EAT_SIG--------->| | | | |
-2976050570 | | | | | |
-2977878544 . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . DONE_SIG. * . . .
-2977878559 | |<------------------+-------------------+-------------------+-------------------+---------DONE_SIG--*
-2977878666 | | | | | |
-2977882747 . . . . | . . . . . . . . . * .EAT_SIG. . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . .
-2977882761 | *--EAT_SIG----------+-------------------+-------------------+-------------------+------------------>|
-2977882827 | *--EAT_SIG----------+-------------------+-------------------+------------------>| |
-2977882865 | *--EAT_SIG----------+-------------------+------------------>| | |
-2977882903 | *--EAT_SIG----------+------------------>| | | |
-2977882941 | *--EAT_SIG--------->| | | | |
-2977939575 | | | | | |
-2987877146 | |<------------------+-------------------+-------HUNGRY_SIG--* | |
-2987877249 | | | | | |
-2999439616 . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . * .DONE_SIG . . . . | . . . . . . . . . | . . . . . . . . . | . . .
-2999439628 | |<------------------+---------DONE_SIG--* | | |
-2999439760 | | | | | |
-2999450115 . . . . | . . . . . . . . . * .EAT_SIG. . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . .
-2999450135 | *--EAT_SIG----------+-------------------+-------------------+-------------------+------------------>|
-2999450219 | *--EAT_SIG----------+-------------------+-------------------+------------------>| |
-2999450281 | *--EAT_SIG----------+-------------------+------------------>| | |
-2999450343 | *--EAT_SIG----------+------------------>| | | |
-2999450405 | *--EAT_SIG--------->| | | | |
-2999474571 | | | | | |
-3000376186 | |<------------------+-------------------+-------------------+-------------------+-------HUNGRY_SIG--*
-3000376294 | | | | | |
-3001940688 . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . * .DONE_SIG . . . . | . . .
-3001940701 | |<------------------+-------------------+-------------------+---------DONE_SIG--* |
-3001940818 | | | | | |
-3001947262 . . . . | . . . . . . . . . * .EAT_SIG. . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . .
-3001947279 | *--EAT_SIG----------+-------------------+-------------------+-------------------+------------------>|
-3001947350 | *--EAT_SIG----------+-------------------+-------------------+------------------>| |
-3001947391 | *--EAT_SIG----------+-------------------+------------------>| | |
-3001947428 | *--EAT_SIG----------+------------------>| | | |
-3001947466 | *--EAT_SIG--------->| | | | |
-3001997648 | | | | | |
-3007664142 | |<------------------+-------HUNGRY_SIG--* | | |
-3007664222 | | | | | |
-3014538302 | |<------------------+-------------------+-------------------+-------HUNGRY_SIG--* |
-3014538385 | | | | | |
-3020475405 . . . . | . . . . . . . . . | . . . . . . . . . * .DONE_SIG . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . .
-3020475417 | |<--------DONE_SIG--* | | | |
-3020475544 | | | | | |
-3020480662 . . . . | . . . . . . . . . * .EAT_SIG. . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . .
-3020480674 | *--EAT_SIG----------+-------------------+-------------------+-------------------+------------------>|
-3020480748 | *--EAT_SIG----------+-------------------+-------------------+------------------>| |
-3020480781 | *--EAT_SIG----------+-------------------+------------------>| | |
-3020480811 | *--EAT_SIG----------+------------------>| | | |
-3020480842 | *--EAT_SIG--------->| | | | |
-3020525503 | | | | | |
-3022663580 . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . * .DONE_SIG . . . . | . . . . . . . . . | . . .
-3022663593 | |<------------------+-------------------+---------DONE_SIG--* | |
-3022663691 | | | | | |
-3022669874 . . . . | . . . . . . . . . * .EAT_SIG. . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . .
-3022669887 | *--EAT_SIG----------+-------------------+-------------------+-------------------+------------------>|
-3022669951 | *--EAT_SIG----------+-------------------+-------------------+------------------>| |
-3022669988 | *--EAT_SIG----------+-------------------+------------------>| | |
-3022670029 | *--EAT_SIG----------+------------------>| | | |
-3022670075 | *--EAT_SIG--------->| | | | |
-3022727265 | | | | | |
-3034224201 | |<------HUNGRY_SIG--* | | | |
-3034224368 | | | | | |
-3036114669 | | | | | |
-3037349111 . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . . . . . . | . . . . DONE_SIG. * . . .
-3037349125 | |<------------------+-------------------+-------------------+-------------------+---------DONE_SIG--*
- +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+
- |l_SysTick_Handl| | Table_inst | | Philo_inst[0] | | Philo_inst[1] | | Philo_inst[2] | | Philo_inst[3] | | Philo_inst[4] |
- +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+
-3037349235 | | | | | |
-3040473731 | |<------------------+-------------------+-------HUNGRY_SIG--* | |
-3040473819 | | | |