From d3e137ff9cbcb7e8e4b55dc165954fcc89851bcc Mon Sep 17 00:00:00 2001 From: Moritz Martinius Date: Thu, 16 Oct 2025 19:36:15 +0000 Subject: [PATCH] Add changelog, uniform naming, prepare v0.2.0 tagging (#18) Reviewed-on: https://git.admiralackbar.de/moritz/ptouch-prnt/pulls/18 --- .gitea/workflows/build.yaml | 12 +++++-- .gitignore | 14 +++++++- CHANGELOG.md | 70 +++++++++++++++++++++++++++++++++++++ README.md | 69 ++++++++++++++++-------------------- generate_coverage.sh | 2 +- hooks/README.md | 2 +- hooks/install_hooks.sh | 2 +- meson.build | 15 ++++---- test_copyright.cpp | 1 - 9 files changed, 134 insertions(+), 53 deletions(-) create mode 100644 CHANGELOG.md delete mode 100644 test_copyright.cpp diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index ef77628..170d138 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -38,17 +38,23 @@ jobs: echo "=== End dependency package version ===" - name: setup builddir run: meson setup builddir -Db_coverage=true - - name: build and test dist package - run: ninja -C builddir dist - name: run unit tests run: ninja -C builddir test - name: calculate coverage run: ninja -C builddir coverage-text - name: Coverage report run: cat ./builddir/meson-logs/coverage.txt + - name: build and test dist package + run: ninja -C builddir dist - name: upload dist package uses: actions/upload-artifact@v3 with: - name: ptprnt-dist + name: ptprnt path: ./builddir/meson-dist/* if-no-files-found: error + - name: upload coverage report + uses: actions/upload-artifact@v3 + with: + name: coverage.txt + path: ./builddir/meson-logs/coverage.txt + if-no-files-found: error diff --git a/.gitignore b/.gitignore index 4ab958c..eb39252 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ # Folder builddir/ -ptouch-print/ subprojects/* .cache/ coverageReport/ @@ -12,3 +11,16 @@ ptprnt.log !.vscode/c_cpp_properties.json !.vscode/settings.json !.vscode/launch.json + +# ignore generated testlabels +fakelabel_*.png + +# ignore package capture files +*.pcapng +*.pcapng.gz +*.pcap +*.pcap.gz + +# ignore coverage temporaries +*.gcov.json +*.gcov.json.gz \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..d4e2040 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,70 @@ +# Changelog + +All notable changes to ptprnt will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [0.2.0] - v0.2.0 + +### Added +- Multi-label support - print multiple labels in sequence +- LabelBuilder API with fluent interface for constructing labels +- FakePrinter driver for testing without hardware (outputs PNG files) +- PrinterService core service for printer operations +- CliParser component with ICliParser interface +- ICairoWrapper interface for testable graphics rendering +- MockCairoWrapper for unit testing +- Pre-commit hook for automatic copyright updates +- USB trace mode for debugging (`-Dusb_trace_only=true`) + +### Changed +- **Major refactoring**: Reorganized codebase into layered architecture + - Application layer: PtouchPrint, CliParser, PrinterService + - Printer drivers: Moved to `src/printers/` with factory pattern + - Graphics system: Added builder pattern and Cairo abstraction + - Core services: Separated into `src/core/` directory +- Label class now uses dependency injection for Cairo/Pango +- CLI parsing separated from main application logic +- Updated dependencies to latest versions +- Improved project documentation (README.md, CLAUDE.md) + +### Fixed +- Label corruption issues resolved +- Printer info retrieval bugs +- USB attachment logic +- Multiple lines handling in labels +- Printer selection logic + +## [0.1.0] - 2024 + +### Added +- Initial release of ptprnt +- Basic label printing functionality for Brother P-touch P700 series +- Pango/Cairo-based text rendering +- USB device communication via libusb-1.0 +- Template-based Bitmap class supporting multiple pixel formats (ALPHA8, RGBX8, RGBA8, ARGB8) +- Monochrome bitmap conversion for printer output +- PrinterDriverFactory for creating printer instances +- USB device abstraction layer (IUsbDevice, UsbDevice, UsbDeviceFactory) +- Command-line interface using CLI11 +- Logging with spdlog and file output +- Unit tests using GoogleTest +- Code coverage reporting with gcovr +- Meson build system with C++20 support +- CI/CD pipeline with automated testing + +### Core Components (v0.1.0) +- PtouchPrint: Main application orchestrator +- P700Printer: Brother P-touch P700 driver implementation +- Bitmap: Template-based image storage +- Label: Text rendering with Pango/Cairo +- Monochrome: Bitmap to monochrome conversion +- UsbDevice: libusb wrapper for device communication + +--- + +## Project Origins + +ptprnt is a modern C++20 rewrite of [ptouch-print](https://git.familie-radermacher.ch/linux/ptouch-print.git). +All credits for reverse engineering the Brother P-touch USB protocol go to Dominic Rademacher. diff --git a/README.md b/README.md index 9af98b5..4b28dbd 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,50 @@ # ptprnt -This is a rewrite of [ptouch-print](https://git.familie-radermacher.ch/linux/ptouch-print.git) as a toy project for my personal amusement. The currently available solutions are good enough for generating labels, but i wanted to explore libusb and maybe improve the functionality of my label printer. All credits for reverse engineering the USB commands to Dominic Rademacher. +A command-line label printer driver for Brother P-touch printers on Linux. Prints text labels directly from your terminal. -## Dependencies -This project requires: -- spdlog -- libusb -- pango -- cairo -- meson -- gtest (optional, for testing, will be installed by meson) -- gcov (optional, for coverage reports) +## Quick Start -Install dependencies on Arch Linux -``` bash -pacman -S libusb spdlog pango cairo meson gcovr -``` - -Install dependencies on Debian/Ubuntu -``` bash -apt-get install libusb-1.0-0-dev libspdlog-dev libfmt-dev libpango1.0-dev libcairo2-dev meson gcovr -``` - -## Build - -Clone the repository and simply let meson do the heavy lifting. +**Install dependencies:** +Arch Linux: ```bash -meson setup builddir -``` -If you want to generate coverage reports, enable them via the command line switch -```bash -meson setup builddir -Db_coverage=true +pacman -S libusb spdlog pango cairo meson ``` -Rebuild by simply invoking ninja +Debian/Ubuntu: ```bash +apt-get install libusb-1.0-0-dev libspdlog-dev libfmt-dev libpango1.0-dev libcairo2-dev meson +``` + +**Build and run:** +Clone this repository first and enter the directory. Then build: +```bash +meson setup builddir ninja -C builddir +builddir/ptprnt --help ``` -## Run -Run the binary from your builddir -```bash -builddir/ptprnt -``` +## Supported Printers +(I need more printers for verification 😉) -## Test -Testing is done via gtest. To run your test simply invoke ninja with the "test" target. +- Brother P-touch P700 series + +## Developer info + +This is a modern C++20 rewrite of [ptouch-print](https://git.familie-radermacher.ch/linux/ptouch-print.git). Credits to Dominic Rademacher for reverse engineering the USB protocol. + +**Running tests:** ```bash -ninja -C builddir test +ninja -C builddir test ``` -Coverage reports can be generated via gcov if you enabled them (see Build section) by building the `coverage-text` target. +**Coverage reports:** +```bash +meson setup builddir -Db_coverage=true +ninja -C builddir +ninja -C builddir test +ninja -C builddir coverage-text +``` ## License diff --git a/generate_coverage.sh b/generate_coverage.sh index 0494499..28a43af 100755 --- a/generate_coverage.sh +++ b/generate_coverage.sh @@ -5,7 +5,7 @@ HTML_COV_PATH="coverageReport/html" XML_COV_PATH="coverageReport/xml" HTML_START_FILE="index.html" -echo "Generating Coverage report for ptouch-prnt" +echo "Generating Coverage report for ptprnt" ninja -C builddir ninja -C builddir test diff --git a/hooks/README.md b/hooks/README.md index e9085f3..ffd0311 100644 --- a/hooks/README.md +++ b/hooks/README.md @@ -1,6 +1,6 @@ # Git Hooks -This directory contains git hooks for the ptouch-prnt repository. +This directory contains git hooks for the ptprnt repository. ## Installation diff --git a/hooks/install_hooks.sh b/hooks/install_hooks.sh index 24e66f0..bc7eade 100755 --- a/hooks/install_hooks.sh +++ b/hooks/install_hooks.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Install git hooks for ptouch-prnt repository +# Install git hooks for ptprnt repository set -e diff --git a/meson.build b/meson.build index 7f1a8b1..15a659b 100644 --- a/meson.build +++ b/meson.build @@ -1,11 +1,11 @@ project( 'ptprnt', 'cpp', - version: 'v0.1.0-' + run_command( + version: 'v0.2.0-' + + run_command( 'git', 'rev-parse', - '--short', - 'HEAD', + '--short', 'HEAD', check: true, ).stdout().strip(), license: 'GPLv3', @@ -24,7 +24,7 @@ log_dep = dependency('spdlog') fmt_dep = dependency('fmt') pangocairo_dep = dependency('pangocairo') -# CLI11 +# CLI11 cli11_proj = subproject('cli11') cli11_dep = cli11_proj.get_variable('CLI11_dep') if not cli11_dep.found() @@ -41,7 +41,9 @@ cpp_args = ['-DPROJ_VERSION="' + meson.project_version() + '"'] # USB trace mode option (for debugging without sending to hardware) if get_option('usb_trace_only') cpp_args += ['-DUSB_TRACE_ONLY'] - message('USB_TRACE_ONLY enabled: USB data will be logged but not sent to device') + message( + 'USB_TRACE_ONLY enabled: USB data will be logged but not sent to device', + ) endif ptprnt_exe = executable( @@ -54,7 +56,6 @@ ptprnt_exe = executable( cpp_args: cpp_args, ) - ### Unit tests # GTest and GMock @@ -65,4 +66,4 @@ if not gtest_dep.found() error('MESON_SKIP_TEST: gtest not installed.') endif -subdir('tests') +subdir('tests') \ No newline at end of file diff --git a/test_copyright.cpp b/test_copyright.cpp deleted file mode 100644 index ed1eb04..0000000 --- a/test_copyright.cpp +++ /dev/null @@ -1 +0,0 @@ -# Test file