From f7e9c74dde1677e085510035eea4a50e0e47813c Mon Sep 17 00:00:00 2001 From: Siegfried Siegert Date: Mon, 8 Jun 2026 08:46:02 +0200 Subject: [PATCH 1/5] change printer codec to windows-1250 --- src/ATBAPP/ATBDeviceControllerPlugin.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ATBAPP/ATBDeviceControllerPlugin.cpp b/src/ATBAPP/ATBDeviceControllerPlugin.cpp index 3d5175e..313e749 100644 --- a/src/ATBAPP/ATBDeviceControllerPlugin.cpp +++ b/src/ATBAPP/ATBDeviceControllerPlugin.cpp @@ -43,7 +43,8 @@ PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, con // read variables from setting this->serialPortName = settings.value("ATBDeviceControllerPlugin/serialPort", "ttymxc2").toString(); - QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "ISO 8859-2").toString().toLatin1(); +// QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "ISO 8859-2").toString().toLatin1(); + QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "Windows-1250").toString().toLatin1(); QString printerLocaleString = settings.value("ATBDeviceControllerPlugin/printerLocale", "de_DE").toString().toLatin1(); this->printerLocale = QLocale(printerLocaleString); @@ -132,7 +133,7 @@ PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, con this->codec = QTextCodec::codecForName(printerEncoding); if (this->codec == nullptr) { - printerEncoding = "ISO 8859-1"; + printerEncoding = "Windows-1250"; qCritical() << "ATBDeviceControllerPlugin: ERROR: printer encoding \"" << printerEncoding << "\" is not supported!"; qCritical() << " ... use default encoding: " << printerEncoding; this->codec = QTextCodec::codecForName(printerEncoding); @@ -833,16 +834,25 @@ void ATBDeviceControllerPlugin::requestPrintReceipt(const QHashcodec = QTextCodec::codecForName("Windows-1250"); + + qCritical() << "Printer codec forced:" + << this->codec->name(); + QByteArray ba_receipt = this->codec->fromUnicode(printingString); //QByteArray ba = printingString.toUtf8(); hw->prn_switchPower(true); + hw->prn_sendPrnSetup(100, 25, 'c', 0); hw->prn_setFonts(printerDefaultFont.font, - printerDefaultFont.size, + //printerDefaultFont.size, + 11, printerDefaultFont.width, printerDefaultFont.height); - hw->prn_sendText(&ba_receipt); + qCritical() << "Receipt bytes (hex):"; + qCritical().noquote() << ba_receipt.toHex(' '); + hw->prn_sendText(&ba_receipt); // DEBUG //qCritical() << "---------------------------------------------------------------"; //qCritical() << "ATBDeviceControllerPlugin::requestPrintReceipt()"; From 34023bd82f17392f7a1aa91f5c84bcf58350a91c Mon Sep 17 00:00:00 2001 From: Siegfried Siegert Date: Mon, 8 Jun 2026 08:46:29 +0200 Subject: [PATCH 2/5] update printQR method --- src/ATBAPP/ATBDeviceControllerPlugin.cpp | 29 +++++++++++++++++++++++- src/ATBAPP/ATBDeviceControllerPlugin.h | 2 ++ src/ATBAPP/DeviceControllerInterface.h | 2 ++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/ATBAPP/ATBDeviceControllerPlugin.cpp b/src/ATBAPP/ATBDeviceControllerPlugin.cpp index 313e749..a8c1380 100644 --- a/src/ATBAPP/ATBDeviceControllerPlugin.cpp +++ b/src/ATBAPP/ATBDeviceControllerPlugin.cpp @@ -862,11 +862,38 @@ void ATBDeviceControllerPlugin::requestPrintReceipt(const QString & printingStri this->printResultCheckCounter = 0; - QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingReceipt())); + //QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingReceipt())); //QTimer::singleShot(2000, this, [this](){ hw->prn_cut(3); } ); } +void ATBDeviceControllerPlugin::requestPrintQR(const QString & printingString) +{ + QByteArray ba_qr = this->codec->fromUnicode(printingString); + + //QByteArray ba = printingString.toUtf8(); + hw->prn_switchPower(true); + hw->prn_sendQRdata(&ba_qr); + hw->prn_printQRcode(); + // DEBUG + qCritical() << "---------------------------------------------------------------"; + qCritical() << "ATBDeviceControllerPlugin::requestPrintQR()"; + qCritical() << " QR data:"; + qCritical() << QString(ba_qr); + qCritical() << "---------------------------------------------------------------"; + + + this->printResultCheckCounter = 0; + //QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingReceipt())); + + //QTimer::singleShot(2000, this, [this](){ hw->prn_cut(3); } ); +} + +void ATBDeviceControllerPlugin::requestPrintCut(const qint16 & printTimer) +{ + QTimer::singleShot(printTimer, this, SLOT(onPrinterWaitForPrintingReceipt())); +} + void ATBDeviceControllerPlugin::onPrinterWaitForPrintingReceipt() { quint8 printerResult = this->hw->prn_getPrintResult(); diff --git a/src/ATBAPP/ATBDeviceControllerPlugin.h b/src/ATBAPP/ATBDeviceControllerPlugin.h index 4de81b0..40b16d7 100644 --- a/src/ATBAPP/ATBDeviceControllerPlugin.h +++ b/src/ATBAPP/ATBDeviceControllerPlugin.h @@ -79,6 +79,8 @@ public: void requestPrintTicket(nsDeviceControllerInterface::TICKET_VARIANT ticketVariant, const QHash & printingData); void requestPrintReceipt(const QHash & printingData); void requestPrintReceipt(const QString & printingString); + void requestPrintQR(const QString & printingString); + void requestPrintCut(const qint16 & printTimer); // TASKS: Account ------------------------------------------------------------- void requestAccount(); diff --git a/src/ATBAPP/DeviceControllerInterface.h b/src/ATBAPP/DeviceControllerInterface.h index 8ff33ed..d31d433 100644 --- a/src/ATBAPP/DeviceControllerInterface.h +++ b/src/ATBAPP/DeviceControllerInterface.h @@ -77,6 +77,8 @@ public: virtual void requestPrintTicket(nsDeviceControllerInterface::TICKET_VARIANT ticketVariant, const QHash & printingData) = 0; virtual void requestPrintReceipt(const QHash & printingData) = 0; virtual void requestPrintReceipt(const QString & printingString) = 0; + virtual void requestPrintQR(const QString & printingSTring) = 0; + virtual void requestPrintCut(const qint16 & printTimer) = 0; // read coin/cash processing variants virtual nsDeviceControllerInterface::COIN_PROCESSOR coinProcessor() = 0; From ae59e77dbac6b446853cb0596a2b2346bd7dc480 Mon Sep 17 00:00:00 2001 From: Siegfried Siegert Date: Fri, 12 Jun 2026 08:40:50 +0200 Subject: [PATCH 3/5] add printfiscal functions --- src/ATBAPP/ATBDeviceControllerPlugin.cpp | 89 ++++++++++++++++++++++-- src/ATBAPP/ATBDeviceControllerPlugin.h | 2 + src/ATBAPP/DeviceControllerInterface.h | 5 ++ 3 files changed, 92 insertions(+), 4 deletions(-) diff --git a/src/ATBAPP/ATBDeviceControllerPlugin.cpp b/src/ATBAPP/ATBDeviceControllerPlugin.cpp index a8c1380..2fbe505 100644 --- a/src/ATBAPP/ATBDeviceControllerPlugin.cpp +++ b/src/ATBAPP/ATBDeviceControllerPlugin.cpp @@ -43,8 +43,8 @@ PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, con // read variables from setting this->serialPortName = settings.value("ATBDeviceControllerPlugin/serialPort", "ttymxc2").toString(); -// QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "ISO 8859-2").toString().toLatin1(); - QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "Windows-1250").toString().toLatin1(); + QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "ISO 8859-2").toString().toLatin1(); +// QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "Windows-1250").toString().toLatin1(); QString printerLocaleString = settings.value("ATBDeviceControllerPlugin/printerLocale", "de_DE").toString().toLatin1(); this->printerLocale = QLocale(printerLocaleString); @@ -833,6 +833,35 @@ void ATBDeviceControllerPlugin::requestPrintReceipt(const QHashcodec = QTextCodec::codecForName("ISO 8859-2"); + + QByteArray ba_receipt = this->codec->fromUnicode(printingString); + + //QByteArray ba = printingString.toUtf8(); + hw->prn_switchPower(true); + hw->prn_setFonts(printerDefaultFont.font, + printerDefaultFont.size, + printerDefaultFont.width, + printerDefaultFont.height); + + qCritical().noquote() << ba_receipt.toHex(' '); + hw->prn_sendText(&ba_receipt); + // DEBUG + //qCritical() << "---------------------------------------------------------------"; + //qCritical() << "ATBDeviceControllerPlugin::requestPrintReceipt()"; + //qCritical() << " receipt data:"; + //qCritical() << QString(ba_receipt); + //qCritical() << "---------------------------------------------------------------"; + + + this->printResultCheckCounter = 0; + QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingReceipt())); + + //QTimer::singleShot(2000, this, [this](){ hw->prn_cut(3); } ); +} + +void ATBDeviceControllerPlugin::requestPrintFiscal(const QString & printingString) { this->codec = QTextCodec::codecForName("Windows-1250"); @@ -855,7 +884,7 @@ void ATBDeviceControllerPlugin::requestPrintReceipt(const QString & printingStri hw->prn_sendText(&ba_receipt); // DEBUG //qCritical() << "---------------------------------------------------------------"; - //qCritical() << "ATBDeviceControllerPlugin::requestPrintReceipt()"; + //qCritical() << "ATBDeviceControllerPlugin::requestPrintFiscal()"; //qCritical() << " receipt data:"; //qCritical() << QString(ba_receipt); //qCritical() << "---------------------------------------------------------------"; @@ -871,10 +900,15 @@ void ATBDeviceControllerPlugin::requestPrintQR(const QString & printingString) { QByteArray ba_qr = this->codec->fromUnicode(printingString); + QString nl = "\n"; + QByteArray ba_nl = this->codec->fromUnicode(nl); + //QByteArray ba = printingString.toUtf8(); hw->prn_switchPower(true); + hw->prn_sendText(&ba_nl); hw->prn_sendQRdata(&ba_qr); hw->prn_printQRcode(); + hw->prn_sendText(&ba_nl); // DEBUG qCritical() << "---------------------------------------------------------------"; qCritical() << "ATBDeviceControllerPlugin::requestPrintQR()"; @@ -884,7 +918,7 @@ void ATBDeviceControllerPlugin::requestPrintQR(const QString & printingString) this->printResultCheckCounter = 0; - //QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingReceipt())); + //QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingFiscal())); //QTimer::singleShot(2000, this, [this](){ hw->prn_cut(3); } ); } @@ -940,6 +974,53 @@ void ATBDeviceControllerPlugin::onPrinterWaitForPrintingReceipt() } +void ATBDeviceControllerPlugin::onPrinterWaitForPrintingFiscal() +{ + quint8 printerResult = this->hw->prn_getPrintResult(); + + switch (printerResult) { + case 0: // still printing + qCritical() << "--> printer: WaitForPrintingReceipt"; + QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingReceipt())); + break; + case 1: // printing finished, Ok + qCritical() << "DC Finished printing fiscal"; + emit this->printFiscalFinished(nsDeviceControllerInterface::RESULT_STATE::SUCCESS, + // TODO: TicketNumber + "", + ""); + hw->prn_switchPower(true); + QTimer::singleShot(200, this, [this](){ hw->prn_cut(3); } ); + break; + case 2: // printing finished, Error + qCritical() << "DC Error: wait for printing fiscal"; + this->errorCode = "PRINTER"; // TODO: get more detailed error code from low level API + this->errorDescription = "Printer error"; // TODO: get more detailed error description from low level API + + emit this->printFiscalFinished(nsDeviceControllerInterface::RESULT_STATE::ERROR_BACKEND, + this->errorCode, + this->errorDescription); + hw->prn_switchPower(true); + QTimer::singleShot(200, this, [this](){ hw->prn_cut(3); } ); + break; + default: + qCritical() << "DC Error: wait for printing fiscal: printerResult = " << printerResult; + this->errorCode = "PRINTER"; // TODO: get more detailed error code from low level API + this->errorDescription = "Printer error(" + QString(printerResult) + ")"; + + emit this->printFiscalFinished(nsDeviceControllerInterface::RESULT_STATE::ERROR_BACKEND, + this->errorCode, + this->errorDescription); + // do an emergency cut + hw->prn_switchPower(true); + QTimer::singleShot(200, this, [this](){ hw->prn_cut(3); } ); + + break; + } + +} + + void ATBDeviceControllerPlugin::requestPrintTicket(const QHash & printingData) { diff --git a/src/ATBAPP/ATBDeviceControllerPlugin.h b/src/ATBAPP/ATBDeviceControllerPlugin.h index 40b16d7..1c2d224 100644 --- a/src/ATBAPP/ATBDeviceControllerPlugin.h +++ b/src/ATBAPP/ATBDeviceControllerPlugin.h @@ -79,6 +79,7 @@ public: void requestPrintTicket(nsDeviceControllerInterface::TICKET_VARIANT ticketVariant, const QHash & printingData); void requestPrintReceipt(const QHash & printingData); void requestPrintReceipt(const QString & printingString); + void requestPrintFiscal(const QString & printingString); void requestPrintQR(const QString & printingString); void requestPrintCut(const qint16 & printTimer); @@ -187,6 +188,7 @@ private slots: void onPrinterPrintNextTemplate(); void onPrinterWaitForPrintingTicket(); void onPrinterWaitForPrintingReceipt(); + void onPrinterWaitForPrintingFiscal(); void onPrinterPrepareDynTemplateData(); diff --git a/src/ATBAPP/DeviceControllerInterface.h b/src/ATBAPP/DeviceControllerInterface.h index d31d433..cdec72d 100644 --- a/src/ATBAPP/DeviceControllerInterface.h +++ b/src/ATBAPP/DeviceControllerInterface.h @@ -77,6 +77,7 @@ public: virtual void requestPrintTicket(nsDeviceControllerInterface::TICKET_VARIANT ticketVariant, const QHash & printingData) = 0; virtual void requestPrintReceipt(const QHash & printingData) = 0; virtual void requestPrintReceipt(const QString & printingString) = 0; + virtual void requestPrintFiscal(const QString & printingString) = 0; virtual void requestPrintQR(const QString & printingSTring) = 0; virtual void requestPrintCut(const qint16 & printTimer) = 0; @@ -117,6 +118,10 @@ signals: void printReceiptFinished(nsDeviceControllerInterface::RESULT_STATE resultState, const QString & errorCode, const QString & errorDescription); + void printFiscalFinished(nsDeviceControllerInterface::RESULT_STATE resultState, + const QString & errorCode, + const QString & errorDescription); + void coinAttached(); From 269f9466c589584a514d4ebd1df0119841934482 Mon Sep 17 00:00:00 2001 From: Siegfried Siegert Date: Mon, 17 Aug 2026 08:04:25 +0200 Subject: [PATCH 4/5] release version for 340 Kroatia --- src/ATBAPP/ATBDeviceControllerPlugin.cpp | 16 ++++++++++++---- src/ATBAPP/ATBDeviceControllerPlugin.h | 1 + src/ATBAPP/DeviceControllerInterface.h | 1 + 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ATBAPP/ATBDeviceControllerPlugin.cpp b/src/ATBAPP/ATBDeviceControllerPlugin.cpp index 2fbe505..aa1c100 100644 --- a/src/ATBAPP/ATBDeviceControllerPlugin.cpp +++ b/src/ATBAPP/ATBDeviceControllerPlugin.cpp @@ -923,6 +923,15 @@ void ATBDeviceControllerPlugin::requestPrintQR(const QString & printingString) //QTimer::singleShot(2000, this, [this](){ hw->prn_cut(3); } ); } +void ATBDeviceControllerPlugin::requestPrintCutFiscal(const qint16 & printTimer) +{ + qCritical() << "requestPrintCutFiscal --------------------------------------------"; + hw->prn_switchPower(true); + QTimer::singleShot(200, this, [this](){ hw->prn_cut(3); + QTimer::singleShot(1800, this, SLOT(onPrinterWaitForPrintingFiscal())); + } ); +} + void ATBDeviceControllerPlugin::requestPrintCut(const qint16 & printTimer) { QTimer::singleShot(printTimer, this, SLOT(onPrinterWaitForPrintingReceipt())); @@ -980,8 +989,8 @@ void ATBDeviceControllerPlugin::onPrinterWaitForPrintingFiscal() switch (printerResult) { case 0: // still printing - qCritical() << "--> printer: WaitForPrintingReceipt"; - QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingReceipt())); + qCritical() << "--> printer: WaitForPrintingFiscal"; + QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingFiscal())); // should be changed to fiscal !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! DS break; case 1: // printing finished, Ok qCritical() << "DC Finished printing fiscal"; @@ -989,8 +998,7 @@ void ATBDeviceControllerPlugin::onPrinterWaitForPrintingFiscal() // TODO: TicketNumber "", ""); - hw->prn_switchPower(true); - QTimer::singleShot(200, this, [this](){ hw->prn_cut(3); } ); + break; case 2: // printing finished, Error qCritical() << "DC Error: wait for printing fiscal"; diff --git a/src/ATBAPP/ATBDeviceControllerPlugin.h b/src/ATBAPP/ATBDeviceControllerPlugin.h index 1c2d224..801e84e 100644 --- a/src/ATBAPP/ATBDeviceControllerPlugin.h +++ b/src/ATBAPP/ATBDeviceControllerPlugin.h @@ -82,6 +82,7 @@ public: void requestPrintFiscal(const QString & printingString); void requestPrintQR(const QString & printingString); void requestPrintCut(const qint16 & printTimer); + void requestPrintCutFiscal(const qint16 & printTimer); // TASKS: Account ------------------------------------------------------------- void requestAccount(); diff --git a/src/ATBAPP/DeviceControllerInterface.h b/src/ATBAPP/DeviceControllerInterface.h index cdec72d..380bd02 100644 --- a/src/ATBAPP/DeviceControllerInterface.h +++ b/src/ATBAPP/DeviceControllerInterface.h @@ -80,6 +80,7 @@ public: virtual void requestPrintFiscal(const QString & printingString) = 0; virtual void requestPrintQR(const QString & printingSTring) = 0; virtual void requestPrintCut(const qint16 & printTimer) = 0; + virtual void requestPrintCutFiscal(const qint16 & printTimer) = 0; // read coin/cash processing variants virtual nsDeviceControllerInterface::COIN_PROCESSOR coinProcessor() = 0; From 3ecf6fe6818e0f8f7d521a291463291ed6578692 Mon Sep 17 00:00:00 2001 From: Siegfried Siegert Date: Mon, 5 Oct 2026 14:22:36 +0200 Subject: [PATCH 5/5] shorten time for TicketType --- src/ATBAPP/ATBDeviceControllerPlugin.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/ATBAPP/ATBDeviceControllerPlugin.cpp b/src/ATBAPP/ATBDeviceControllerPlugin.cpp index aa1c100..b51d169 100644 --- a/src/ATBAPP/ATBDeviceControllerPlugin.cpp +++ b/src/ATBAPP/ATBDeviceControllerPlugin.cpp @@ -358,6 +358,7 @@ void ATBDeviceControllerPlugin::requestStopCashInput() void ATBDeviceControllerPlugin::cashCollect() { + qCritical() << "cashCollect() called ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"; hw->vend_success(); // inserted amount @@ -927,9 +928,15 @@ void ATBDeviceControllerPlugin::requestPrintCutFiscal(const qint16 & printTimer) { qCritical() << "requestPrintCutFiscal --------------------------------------------"; hw->prn_switchPower(true); - QTimer::singleShot(200, this, [this](){ hw->prn_cut(3); - QTimer::singleShot(1800, this, SLOT(onPrinterWaitForPrintingFiscal())); - } ); + QTimer::singleShot(200, this, [this]() + { + hw->prn_cut(3); + + QTimer::singleShot(1800, this, [this]() + { + onPrinterWaitForPrintingFiscal(); + }); + }); } void ATBDeviceControllerPlugin::requestPrintCut(const qint16 & printTimer) @@ -1281,17 +1288,17 @@ void ATBDeviceControllerPlugin::onPrinterPrintNextTemplate() if (this->currentTicket->templateList()->isEmpty()) { // all templates are printed this->printResultCheckCounter = 0; - QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingTicket())); + QTimer::singleShot(200, this, SLOT(onPrinterWaitForPrintingTicket())); } else { if (this->currentTicket->hasTemplateDynData()) { // set new dyn data: - QTimer::singleShot(2000, this, SLOT(onPrinterPrepareDynTemplateData())); + QTimer::singleShot(400, this, SLOT(onPrinterPrepareDynTemplateData())); } else { // print next template - QTimer::singleShot(2000, this, SLOT(onPrinterPrintNextTemplate())); + QTimer::singleShot(50, this, SLOT(onPrinterPrintNextTemplate())); } } }