Merge commit 'a9e69cd0c4ad3477a99becaf87b84e0d9b23538f'

This commit is contained in:
Gerhard Hoffmann 2023-04-13 16:28:43 +02:00
commit b15ad441f8
5 changed files with 130 additions and 24 deletions

View File

@ -145,9 +145,15 @@ public:
QString comPort) const override; QString comPort) const override;
bool dc_updatePrinterTemplate(enum FileTypeJson type, bool dc_updatePrinterTemplate(enum FileTypeJson type,
int templateNr, QVector<int> templateIdx,
QString const &fname) const override; QVector<QString> fnames,
QString br,
QString serial) const override;
bool dc_printTemplate(enum FileTypeJson type,
QVector<int> templateIdx,
QString br,
QString serial) const override;
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------
// Level 1, control device-controller (functions of µC) // Level 1, control device-controller (functions of µC)
// check serial connection to deviceController // check serial connection to deviceController

View File

@ -307,8 +307,15 @@ public:
// download binary file down into device controller // download binary file down into device controller
virtual bool dc_updatePrinterTemplate(enum FileTypeJson type, virtual bool dc_updatePrinterTemplate(enum FileTypeJson type,
int templateNr, QVector<int> templateIdx,
QString const &fname) const = 0; QVector<QString> fnames,
QString br,
QString serial) const = 0;
virtual bool dc_printTemplate(enum FileTypeJson type,
QVector<int> templateIdx,
QString br,
QString serial) const = 0;
virtual void dc_autoRequest(bool on) const =0; virtual void dc_autoRequest(bool on) const =0;
// on = true: select that all READ-Requests are sent automatically // on = true: select that all READ-Requests are sent automatically

View File

@ -307,8 +307,15 @@ public:
// download binary file down into device controller // download binary file down into device controller
virtual bool dc_updatePrinterTemplate(enum FileTypeJson type, virtual bool dc_updatePrinterTemplate(enum FileTypeJson type,
int templateNr, QVector<int> templateIdx,
QString const &fname) const = 0; QVector<QString> fnames,
QString br,
QString serial) const = 0;
virtual bool dc_printTemplate(enum FileTypeJson type,
QVector<int> templateIdx,
QString br,
QString serial) const = 0;
virtual void dc_autoRequest(bool on) const =0; virtual void dc_autoRequest(bool on) const =0;
// on = true: select that all READ-Requests are sent automatically // on = true: select that all READ-Requests are sent automatically

View File

@ -10,6 +10,7 @@
#include <stdint.h> #include <stdint.h>
#include <unistd.h> #include <unistd.h>
#include <thread> #include <thread>
#include <algorithm>
#include <QFileInfo> #include <QFileInfo>
@ -412,33 +413,116 @@ bool hwapi::dc_updateDC(QString bFile, QString br, QString serial) const {
// //
/******************************************************************************/ /******************************************************************************/
bool hwapi::dc_updatePrinterTemplate(enum FileTypeJson type, bool hwapi::dc_updatePrinterTemplate(enum FileTypeJson type,
int nrOfTemplate, QVector<int> templatesIdx,
QString const &fname) const { QVector<QString> fnames,
if ((type == FileTypeJson::PRINTER) && QString br,
(nrOfTemplate >= 1 && nrOfTemplate <= 32)) { QString serial) const {
// sanity checks
if (!baudrateMap.contains(br)) {
qCritical() << "passed wrong baudrate" << br;
return false;
}
if (templatesIdx.size() != fnames.size()) {
qCritical() << "list sizes must be equal" << br;
return false;
}
if (!std::all_of(templatesIdx.cbegin(), templatesIdx.cend(),
[](int i) { return i >= 1 && i <= 32; })) {
qCritical() << "wrong template indices";
return false;
}
if (type != FileTypeJson::PRINTER) {
qCritical() << "wrong file type" << (uint8_t)type;
return false;
}
qDebug() << "updating: " << fnames << br << serial << "...";
if (!openSerial(baudrateMap.value(br), br, serial)) {
return false;
}
int nTry = 50; int nTry = 50;
while (!sys_ready4sending()) { // wait max. 5 seconds while (!sys_ready4sending()) { // wait max. 5 seconds
std::this_thread::sleep_for(std::chrono::milliseconds(100)); std::this_thread::sleep_for(std::chrono::milliseconds(100));
if (--nTry <= 0) { if (--nTry <= 0) {
qCritical() << "sys not ready for sending";
closeSerial(serial);
return false; return false;
} }
} }
QFile file(fname);
bool ret = true;
for (int i = 0; i < fnames.size(); ++i) {
QFile file(fnames[i]);
if (file.exists() && file.open(QIODevice::ReadOnly)) { if (file.exists() && file.open(QIODevice::ReadOnly)) {
QByteArray ba = file.readAll(); QByteArray ba = file.readAll();
if (ba.size() <= 800) { // max. size is 800 bytes if (ba.size() <= 800) { // max. size is 800 bytes
if (sys_sendJsonFileToDc((uint8_t)(type), if (sys_sendJsonFileToDc((uint8_t)(type),
nrOfTemplate, templatesIdx[i],
(uint8_t *)ba.data())) { (uint8_t *)ba.data())) {
std::this_thread::sleep_for(std::chrono::seconds(1)); std::this_thread::sleep_for(std::chrono::seconds(1));
return true; qInfo() << "sent file" << fnames[i] << "to dc";
} }
} }
} else {
qCritical() << fnames[i] << "!!! does not exist!!!";
ret = false;
continue;
}
}
closeSerial(serial);
return ret;
}
bool hwapi::dc_printTemplate(enum FileTypeJson type,
QVector<int> templateIdx,
QString br,
QString serial) const {
// sanity checks
if (!baudrateMap.contains(br)) {
qCritical() << "passed wrong baudrate" << br;
return false;
}
if (!std::all_of(templateIdx.cbegin(), templateIdx.cend(),
[](int i) { return i >= 1 && i <= 32; })) {
qCritical() << "wrong template indices";
return false;
}
if (type != FileTypeJson::PRINTER) {
qCritical() << "wrong file type" << (uint8_t)type;
return false;
}
qDebug() << "printing: " << templateIdx << br << serial << "...";
if (!openSerial(baudrateMap.value(br), br, serial)) {
return false;
}
int nTry = 50;
while (!sys_ready4sending()) { // wait max. 5 seconds
std::this_thread::sleep_for(std::chrono::milliseconds(100));
if (--nTry <= 0) {
qCritical() << "sys not ready for sending";
closeSerial(serial);
return false;
} }
} }
return false; bool ret = true;
for (int i = 0; i < templateIdx.size(); ++i) {
if (prn_printTemplate(templateIdx[i])) {
qDebug() << "printing template" << templateIdx[i];
std::this_thread::sleep_for(std::chrono::seconds(3));
} else {
ret = false;
continue;
}
}
closeSerial(serial);
return ret;
} }
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------
@ -3284,7 +3368,8 @@ bool hwapi::sys_sendJsonFileToDc(uint8_t kindOfFile, uint8_t nrOfTemplate, uint8
{ {
biox_CopyBlock(inhaltOfJson, uitmp, temp, 0, 64); biox_CopyBlock(inhaltOfJson, uitmp, temp, 0, 64);
longFDcmd_set(31,0, bn++, 64, temp); longFDcmd_set(31,0, bn++, 64, temp);
uitmp<<=6; uitmp += 64;
// uitmp<<=6;
} while(uitmp < dateiLang); } while(uitmp < dateiLang);
longFDcmd_set(32, 0,0, 0,temp); // Abschluss longFDcmd_set(32, 0,0, 0,temp); // Abschluss

View File

@ -602,7 +602,7 @@ bool longFDcmd_set(uint8_t nextWrCmd, uint8_t nextRdCmd, uint8_t blockNum, uint8
uint8_t nn; uint8_t nn;
if (p_longFDcmdsInQueue>=FDLONG_STACKDEPTH) if (p_longFDcmdsInQueue>=FDLONG_STACKDEPTH)
{ {
qDebug() << "cannot save cmd because stack is full"; qCritical() << "cannot save cmd because stack is full";
return false; // not possible return false; // not possible
} }
longFDwrCmd[p_longFDcmdsInQueue]=nextWrCmd; longFDwrCmd[p_longFDcmdsInQueue]=nextWrCmd;
@ -613,6 +613,7 @@ bool longFDcmd_set(uint8_t nextWrCmd, uint8_t nextRdCmd, uint8_t blockNum, uint8
longFDpara[p_longFDcmdsInQueue][nn]=data[nn]; longFDpara[p_longFDcmdsInQueue][nn]=data[nn];
p_longFDcmdsInQueue++; p_longFDcmdsInQueue++;
return true; // ok, will be sent return true; // ok, will be sent
} }