void triggerEvent_intern_hash(eventType* key, EtalisEvent* event) { /* find from _event_hash the EventModel to follow */ eventHash tempEventHash; eventHash* foundEventNode = NULL; memset(&tempEventHash,0,sizeof(eventHash)); tempEventHash.ev.arity=key->arity; strcpy(tempEventHash.ev.name,key->name); HASH_FIND(hh,_event_hash,&tempEventHash.ev,sizeof(eventType),foundEventNode); /* if EventModel is in the Hash */ if(foundEventNode != NULL) { event->RootModel=foundEventNode->myNode; newTimeStamp(&event->timestamps[0]); event->timestamps[1] = event->timestamps[0]; debug("--- Triggering event ... %s/%d @ [%ld.%06ld,%ld.%06ld]\n",event->RootModel->event.name,event->RootModel->event.arity,event->timestamps[0].time,event->timestamps[0].parts,event->timestamps[1].time,event->timestamps[1].parts); foundEventNode->myNode->trigger(event); } }
SerialLogging::SerialLogging(MainWindow *mainWindow, QSerialPortInfo serialPortDevice, int baudRate, QSerialPort::DataBits dataBits, QSerialPort::Parity parity, QSerialPort::StopBits stopBits) { serialPort = new QSerialPort(serialPortDevice); // Open int ret = serialPort->open(QIODevice::ReadWrite); if (!ret) { qDebug() << "Serial port failed to open"; delete serialPort; Q_ASSERT(0); } else { // Open file fileName = mainWindow->getFileName(); if (fileName != "") { file.setFileName(fileName); ret = file.open(QIODevice::WriteOnly); if (!ret) { qDebug() << "File failed to open"; delete serialPort; Q_ASSERT(0); } } // Set start time startTime = QDateTime::currentDateTimeUtc(); // Configure serial port serialPort->setBaudRate(baudRate); serialPort->setDataBits(dataBits); serialPort->setParity(parity); serialPort->setStopBits(stopBits); connect(this, SIGNAL(serialPortOpened()), mainWindow, SLOT(serialPortConnected())); connect(this, SIGNAL(newDataReady(QByteArray, quint64)), mainWindow, SLOT(receivedData(QByteArray, quint64))); connect(this, SIGNAL(newTimeStamp(qint64)), mainWindow, SLOT(updateTimer(qint64))); emit serialPortOpened(); } // Connect signals connect(serialPort, SIGNAL(readyRead()), this, SLOT(readData())); connect(mainWindow, SIGNAL(baudRateChanged(int)), this, SLOT(on_baudRateUpdated(int))); connect(mainWindow, SIGNAL(dataBitsChanged(QSerialPort::DataBits)), this, SLOT(on_dataBitsUpdated(QSerialPort::DataBits))); connect(mainWindow, SIGNAL(parityChanged(QSerialPort::Parity)), this, SLOT(on_parityUpdated(QSerialPort::Parity))); connect(mainWindow, SIGNAL(stopBitsChanged(QSerialPort::StopBits)), this, SLOT(on_stopBitsUpdated(QSerialPort::StopBits))); }
/* * Trigger an event without explicitely defining timestamps */ foreign_t triggerEvent_u(term_t args) { atom_t name; int arity=0; PL_get_name_arity(args,&name,&arity); /* find from _event_hash the EventModel to follow */ eventHash tempEventHash; eventHash* foundEventNode = NULL; memset(&tempEventHash,0,sizeof(eventHash)); tempEventHash.ev.arity=arity; strcpy(tempEventHash.ev.name,PL_atom_chars(name)); HASH_FIND(hh,_event_hash,&tempEventHash.ev,sizeof(eventType),foundEventNode); /* if EventModel is in the Hash */ if(foundEventNode != NULL) { EtalisEvent *myEvent=(EtalisEvent*)malloc(sizeof(EtalisEvent)); myEvent->RootModel=foundEventNode->myNode; if (arity != 0) parse_validate_args(args,myEvent); newTimeStamp(&myEvent->timestamps[0]); myEvent->timestamps[1] = myEvent->timestamps[0]; /* debg models */ #ifdef DEBUG EtalisEventNode *myModel = myEvent->RootModel; EtalisExecNode *myExec = myModel->parentNode; #endif /* f dbg */ debug("--- Triggering event ... %s/%d @ [%ld.%06ld,%ld.%06ld]\n",myEvent->RootModel->event.name,myEvent->RootModel->event.arity,myEvent->timestamps[0].time,myEvent->timestamps[0].parts,myEvent->timestamps[1].time,myEvent->timestamps[1].parts); foundEventNode->myNode->trigger(myEvent); } PL_succeed; }
void SerialLogging::readData() { // Get timestamp immediately quint64 timeStamp = startTime.msecsTo(QDateTime::currentDateTimeUtc()); // Read data from serial port QByteArray data = serialPort->readAll(); // Save the data to file saveToDisk(data); // Send the data to any connected listeners emit newDataReady(data, timeStamp); // Send out the elapsed time to any connected listeners emit newTimeStamp(timeStamp); }