#include "CArun.h" #include "datei.h" #define UPDATE_PERIOD_MS 100 // period to call chain steps #define VENDINGTIMEOUT_MS 30000 CArun::CArun(QObject *parent) : QObject{parent} { loadPlugIn(1); timerChainCtrl = new QTimer(this); connect(timerChainCtrl, SIGNAL(timeout()), this, SLOT(chainControl())); timerChainCtrl->setSingleShot(0); timerChainCtrl->start(UPDATE_PERIOD_MS); // 1000: call every 1000ms } char CArun::loadPlugIn(char lade1_entlade2) { plugInDir.cd("plugins"); QPluginLoader *pluginLoader = new QPluginLoader(); pluginLoader->setFileName("/usr/lib/libCAmaster.so"); // for ptu5 if (lade1_entlade2==2) { pluginLoader->unload(); return 0; } if (!pluginLoader->load()) { qDebug()<<"cannot load plugin"; } else qDebug() <<"loaded plugin: " << pluginLoader->fileName(); if (!pluginLoader->isLoaded()) { qDebug()<errorString(); return 0; } QObject *plugin = pluginLoader->instance(); if ( plugin == nullptr) { // make instance of the root component (which can hold more then one clases) // also loads the lib if not yet done qDebug()<<"cannot start instance"; return 0; } HWaccess= qobject_cast(plugin); // make instance to class "hwinf" in dll_HWapi.h over "interfaces.h" qDebug()<<"loadPlugIn, HWAccess: " << HWaccess; return 0; } void CArun::chainControl(void) { #define FILENAME_COMPORT "../comport.csv" // TODO: use absolute path // use settings (ini-file) QString bs, cn; int br, ci; // load and use last settings: -------------------- QByteArray myBA; myBA=datei_readFromFile(FILENAME_COMPORT); if (myBA.length()>0) { bs=csv_getEntryAsString(myBA,0); // read the 's' war 2!?? br=csv_getEntryAsInt(myBA,1); // z.B. 5 (5.Eintrag in der Baud-Liste) bs=csv_getEntryAsString(myBA,2); // z.B 115200 cn=csv_getEntryAsString(myBA,3); // z.B. COM9 ci=csv_getEntryAsInt(myBA,4); // Eintragsnummer in COM-Fenster HWaccess->dc_openSerial(br,bs,cn,1); } else { // vermutlich wird dies hier ausgeführt, weil eine csv-Datei wird nicht installiert // open with default settings qDebug()<<"CArunGui: open serial with default values"; bs="115200"; br=5; //cn="COM14"; // Windows cn="ttymxc2"; // PTU5 ci=2; HWaccess->dc_openSerial(br,bs,cn,1); } // TIMER myTO: hat keinen timeout-slot! // wird nur verwendet, um isActive() abzufragen, d.h. ~x zu warten // pruefen, of Port nach x s open: if (HWaccess->dc_isPortOpen()) { } else { // wenn nicht: step 6 } myTO->start(100); } } else if (myStep==2) { if (!myTO->isActive()) { HWaccess->dc_requTestResponse(); myStep++; myTO->start(100); } } else if (myStep==3) { if (!myTO->isActive()) { if (HWaccess->dc_readAnswTestResponse()) myStep++; // response was correct else { myStep=6; // 13.12.23: start Autoconnect cycle qDebug()<<"CArunGui: got no answer from DC, retry.."; } myTO->start(100); } } else if (myStep==4) { HWaccess->dc_autoRequest(1); AutSendButton->setChecked(true); // taste "druecken" myStep++; myTO->start(2000); } else if (myStep==5) { if (!myTO->isActive()) { if (HWaccess->sys_areDCdataValid()) { qDebug()<<"CArunGui: DC is connected"; myStep=7; // OK, connection is up and running } else { qDebug()<<"CArunGui: auto request is not running, retry..."; myStep++; myTO->start(100); } } } else if (myStep==6) { // restart autoconnect cycle myTO->start(100); // restart myStep=0; } else if (myStep==7) { // stay here, DC connection is up and running } else { } if (myNextStep) { *nextScreen=myNextStep; myNextStep=0; } return false; }