From 98ba6db5a39a950c0d22cea42c84958486f460a9 Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Wed, 15 Aug 2018 08:02:28 +0200 Subject: [PATCH 1/4] support specifying pos printer --- src/printer/posprinter.cpp | 21 ++++++++++++++++++--- src/printer/posprinter.h | 7 +++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/printer/posprinter.cpp b/src/printer/posprinter.cpp index 38333ed..f81ade3 100644 --- a/src/printer/posprinter.cpp +++ b/src/printer/posprinter.cpp @@ -35,14 +35,24 @@ PosPrinter::PosPrinter() libusb_exit(contextPtr_); throw std::runtime_error("Could not receive device list"); } + int numDevice = -1; + for (int i = 0; i < devCount; ++i) { libusb_device_descriptor desc; libusb_get_device_descriptor(devList[i], &desc); - for (const auto& supported : supportedPrinters_.models) { - if (desc.idVendor == supported.first && desc.idProduct == supported.second) { + + if (printerDevice_.idVendor == 0) { + for (const auto& supported : supportedPrinters_.models) { + if (desc.idVendor == supported.first && desc.idProduct == supported.second) { + numDevice = i; + break; + } + } + } else { + if (desc.idVendor == printerDevice_.idVendor && + desc.idProduct == printerDevice_.idProduct) { numDevice = i; - break; } } } @@ -75,6 +85,11 @@ PosPrinter::PosPrinter() libusb_free_device_list(devList, 1); } +PosPrinter::PosPrinter(const PrinterDevice& printerDevice) : printerDevice_{printerDevice} +{ + PosPrinter(); +} + PosPrinter::~PosPrinter() { if (devicePtr_) { diff --git a/src/printer/posprinter.h b/src/printer/posprinter.h index 140b6cc..f3b9f65 100644 --- a/src/printer/posprinter.h +++ b/src/printer/posprinter.h @@ -16,10 +16,16 @@ struct SupportedPrinters { }; }; +struct PrinterDevice { + int idVendor{}; + int idProduct{}; +}; + class PosPrinter { public: PosPrinter(); + PosPrinter(const PrinterDevice& printerDevice); ~PosPrinter(); void write(const std::string& text); void printHeader(); @@ -43,6 +49,7 @@ class PosPrinter libusb_context* contextPtr_{}; libusb_device_handle* devicePtr_{}; SupportedPrinters supportedPrinters_; + PrinterDevice printerDevice_; }; #endif \ No newline at end of file From bfe1379e057d9260c0f0c393427203a49b64d74e Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Wed, 15 Aug 2018 08:03:44 +0200 Subject: [PATCH 2/4] allow configuring pos printer --- src/gui/settingsdialog.cpp | 20 ++++++++++++-------- src/gui/settingsdialog.ui | 6 +++--- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index b14622a..ab19d54 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -16,7 +16,7 @@ SettingsDialog::SettingsDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(par QSettings settings{}; int cashPointNo = settings.value("global/cashPointNo").toInt(); - // QString posPrinterDevice = settings.value("global/posPrinterDevice").toString(); + QString posPrinterDevice = settings.value("global/posPrinterDevice").toString(); int feeInPercent = settings.value("global/feeInPercent").toInt(); int maxFeeInEuro = settings.value("global/maxFeeInEuro").toInt(); @@ -24,26 +24,30 @@ SettingsDialog::SettingsDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(par market_ = dynamic_cast(parent)->getMarketplace(); ui_.cashPointNoSpinBox->setValue(cashPointNo); - // ui_.posPrinterDeviceEdit->setText(posPrinterDevice); + ui_.posPrinterDeviceEdit->setText(posPrinterDevice); ui_.feePercentSpinBox->setValue(feeInPercent); ui_.maxFeeSpinBox->setValue(maxFeeInEuro); connect(ui_.testPosPrinterButton, &QPushButton::clicked, this, [=]() { using namespace std::string_literals; try { - PosPrinter printer; - printer.printTest(); - if (printer.isValid()) + if (ui_.posPrinterDeviceEdit->text().isEmpty()) { + PosPrinter printer; + printer.printTest(); + } else { + + } + /* if (printer.isValid()) this->ui_.posPrinterDeviceEdit->setText(""); else - this->ui_.posPrinterDeviceEdit->setText(""); + this->ui_.posPrinterDeviceEdit->setText(""); */ } catch (std::runtime_error& err) { QMessageBox(QMessageBox::Icon::Warning, "Bondrucker Fehler", QString("Test schlug fehl: ") + err.what(), QMessageBox::StandardButton::Ok, this) .exec(); - this->ui_.posPrinterDeviceEdit->setText(""); + // this->ui_.posPrinterDeviceEdit->setText(""); return; } }); @@ -56,7 +60,7 @@ void SettingsDialog::accept() int oldCashPointNo = settings.value("global/cashPointNo").toInt(); int newCashPointNo = ui_.cashPointNoSpinBox->value(); - // settings.setValue("global/posPrinterDevice", ui_.posPrinterDeviceEdit->text()); + settings.setValue("global/posPrinterDevice", ui_.posPrinterDeviceEdit->text()); settings.setValue("global/feeInPercent", ui_.feePercentSpinBox->value()); settings.setValue("global/maxFeeInEuro", ui_.maxFeeSpinBox->value()); diff --git a/src/gui/settingsdialog.ui b/src/gui/settingsdialog.ui index 8aefef0..d965f7f 100644 --- a/src/gui/settingsdialog.ui +++ b/src/gui/settingsdialog.ui @@ -7,7 +7,7 @@ 0 0 400 - 180 + 203 @@ -33,8 +33,8 @@ - - false + + <idVendor>:<idProduct> From dccf260431f24fe03c2e2746fa80b76939ce4c9a Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Wed, 15 Aug 2018 08:50:46 +0200 Subject: [PATCH 3/4] configuring pos printer now works --- src/gui/settingsdialog.cpp | 29 ++++++++++++++++++++++------- src/printer/posprinter.cpp | 14 ++++++++------ src/printer/posprinter.h | 2 +- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index ab19d54..a7533fb 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include @@ -35,19 +36,33 @@ SettingsDialog::SettingsDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(par PosPrinter printer; printer.printTest(); } else { - - } - /* if (printer.isValid()) - this->ui_.posPrinterDeviceEdit->setText(""); - else - this->ui_.posPrinterDeviceEdit->setText(""); */ + std::string posPrinterDeviceString = ui_.posPrinterDeviceEdit->text().toStdString(); + std::string delimiter = ":"; + PrinterDevice printerDevice; + try { + printerDevice.idVendor = std::stoi( + posPrinterDeviceString.substr(0, posPrinterDeviceString.find(delimiter)), 0, + 16); + printerDevice.idProduct = std::stoi( + posPrinterDeviceString.substr(posPrinterDeviceString.find(delimiter) + 1), + 0, 16); + } catch (std::exception&) { + QMessageBox(QMessageBox::Icon::Warning, "Falsche Eingabe", + QString("Eingabeformat für den Bondrucker (hexadezimale IDs): " + ":\nBeispiel: 0416:5011"), + QMessageBox::StandardButton::Ok, this) + .exec(); + return; + } + PosPrinter printer(printerDevice); + printer.printTest(); + } } catch (std::runtime_error& err) { QMessageBox(QMessageBox::Icon::Warning, "Bondrucker Fehler", QString("Test schlug fehl: ") + err.what(), QMessageBox::StandardButton::Ok, this) .exec(); - // this->ui_.posPrinterDeviceEdit->setText(""); return; } }); diff --git a/src/printer/posprinter.cpp b/src/printer/posprinter.cpp index f81ade3..0fc1961 100644 --- a/src/printer/posprinter.cpp +++ b/src/printer/posprinter.cpp @@ -20,7 +20,13 @@ const std::string PosPrinter::Command::FONT_SIZE_BIG = {'\x1b', '\x21', '\x10'}; const std::string PosPrinter::Command::FONT_SIZE_NORMAL = {'\x1b', '\x21', '\x00'}; const std::string PosPrinter::Command::FEED = {0x1b, 0x64, 0x03}; -PosPrinter::PosPrinter() +PosPrinter::PosPrinter() : PosPrinter(PrinterDevice()) +{ + +} + +PosPrinter::PosPrinter(const PrinterDevice& printerDevice) + : printerDevice_(printerDevice) { int retValue; @@ -53,6 +59,7 @@ PosPrinter::PosPrinter() if (desc.idVendor == printerDevice_.idVendor && desc.idProduct == printerDevice_.idProduct) { numDevice = i; + break; } } } @@ -85,11 +92,6 @@ PosPrinter::PosPrinter() libusb_free_device_list(devList, 1); } -PosPrinter::PosPrinter(const PrinterDevice& printerDevice) : printerDevice_{printerDevice} -{ - PosPrinter(); -} - PosPrinter::~PosPrinter() { if (devicePtr_) { diff --git a/src/printer/posprinter.h b/src/printer/posprinter.h index f3b9f65..04db2f1 100644 --- a/src/printer/posprinter.h +++ b/src/printer/posprinter.h @@ -49,7 +49,7 @@ class PosPrinter libusb_context* contextPtr_{}; libusb_device_handle* devicePtr_{}; SupportedPrinters supportedPrinters_; - PrinterDevice printerDevice_; + PrinterDevice printerDevice_{}; }; #endif \ No newline at end of file From edbeadc389aed5e86798686da3258605bb51e119 Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Wed, 15 Aug 2018 08:51:39 +0200 Subject: [PATCH 4/4] code cleanup --- src/printer/posprinter.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/printer/posprinter.cpp b/src/printer/posprinter.cpp index 0fc1961..de000aa 100644 --- a/src/printer/posprinter.cpp +++ b/src/printer/posprinter.cpp @@ -20,13 +20,9 @@ const std::string PosPrinter::Command::FONT_SIZE_BIG = {'\x1b', '\x21', '\x10'}; const std::string PosPrinter::Command::FONT_SIZE_NORMAL = {'\x1b', '\x21', '\x00'}; const std::string PosPrinter::Command::FEED = {0x1b, 0x64, 0x03}; -PosPrinter::PosPrinter() : PosPrinter(PrinterDevice()) -{ - -} +PosPrinter::PosPrinter() : PosPrinter(PrinterDevice()) {} -PosPrinter::PosPrinter(const PrinterDevice& printerDevice) - : printerDevice_(printerDevice) +PosPrinter::PosPrinter(const PrinterDevice& printerDevice) : printerDevice_(printerDevice) { int retValue;