void FlowViewWindow::updatedFrames(int numFrames) { CANFrame thisFrame; if (numFrames == -1) //all frames deleted. Kill the display { ui->listFrameID->clear(); foundID.clear(); currentPosition = 0; refreshIDList(); updateFrameLabel(); removeAllGraphs(); memset(refBytes, 0, 8); memset(currBytes, 0, 8); updateDataView(); } else if (numFrames == -2) //all new set of frames. Reset { ui->listFrameID->clear(); foundID.clear(); currentPosition = 0; refreshIDList(); if (ui->listFrameID->count() > 0) { changeID(ui->listFrameID->item(0)->text()); ui->listFrameID->setCurrentRow(0); } updateFrameLabel(); } else //just got some new frames. See if they are relevant. { int refID = frameCache[0].ID; bool needRefresh = false; for (int i = modelFrames->count() - numFrames; i < modelFrames->count(); i++) { thisFrame = modelFrames->at(i); if (thisFrame.ID == refID) { frameCache.append(thisFrame); if (ui->cbLiveMode->checkState() == Qt::Checked) { currentPosition = frameCache.count() - 1; needRefresh = true; } } } if (needRefresh) { updateDataView(); if (ui->cbSync->checkState() == Qt::Checked) emit sendCenterTimeID(frameCache[currentPosition].ID, frameCache[currentPosition].timestamp / 1000000.0); } } }
void FramePlaybackWindow::btnReverseClick() { forward = false; isPlaying = true; playbackObject.startPlaybackBackward(); updateFrameLabel(); }
void FramePlaybackWindow::btnLoadLive() { SequenceItem item; item.filename = "<CAPTURED DATA>"; item.currentLoopCount = 0; item.maxLoops = 1; item.data = QVector<CANFrame>(*modelFrames); //create a copy of the current frames from the main view qSort(item.data); //be sure it's all in time based order fillIDHash(item); if (ui->tblSequence->currentRow() == -1) { ui->tblSequence->setCurrentCell(0,0); } seqItems.append(item); int row = ui->tblSequence->rowCount(); ui->tblSequence->insertRow(row); ui->tblSequence->setItem(row, 0, new QTableWidgetItem(item.filename)); ui->tblSequence->setItem(row, 1, new QTableWidgetItem(QString::number(item.maxLoops))); if (currentSeqNum == -1) { currentSeqNum = 0; currentSeqItem = &seqItems[0]; playbackObject.setSequenceObject(currentSeqItem); } refreshIDList(); updateFrameLabel(); btnStopClick(); }
void FramePlaybackWindow::btnLoadFile() { QString filename; SequenceItem item; if (FrameFileIO::loadFrameFile(filename, &item.data)) { qSort(item.data); //sort by timestamp to be sure it's in order QStringList fileList = filename.split('/'); item.filename = fileList[fileList.length() - 1]; item.currentLoopCount = 0; item.maxLoops = 1; fillIDHash(item); if (ui->tblSequence->currentRow() == -1) { ui->tblSequence->setCurrentCell(0,0); } seqItems.append(item); int row = ui->tblSequence->rowCount(); ui->tblSequence->insertRow(row); ui->tblSequence->setItem(row, 0, new QTableWidgetItem(item.filename)); ui->tblSequence->setItem(row, 1, new QTableWidgetItem(QString::number(item.maxLoops))); qDebug() << currentSeqNum; if (currentSeqNum == -1) { currentSeqNum = 0; currentSeqItem = &seqItems[0]; playbackObject.setSequenceObject(currentSeqItem); } refreshIDList(); updateFrameLabel(); } }
void FlowViewWindow::btnStopClick() { playbackTimer->stop(); //pushing this button halts automatic playback playbackActive = false; currentPosition = 0; memcpy(currBytes, frameCache.at(currentPosition).data, 8); memcpy(refBytes, currBytes, 8); updateFrameLabel(); updateDataView(); }
void FlowViewWindow::showEvent(QShowEvent* event) { QDialog::showEvent(event); installEventFilter(this); readSettings(); refreshIDList(); if (ui->listFrameID->count() > 0) { changeID(ui->listFrameID->item(0)->text()); ui->listFrameID->setCurrentRow(0); } updateFrameLabel(); qDebug() << "FlowView show event was processed"; }
void FramePlaybackWindow::btnDeleteCurrSeq() { if (currentSeqNum == -1) return; playbackObject.stopPlayback(); seqItems.removeAt(currentSeqNum); ui->tblSequence->removeRow(currentSeqNum); if (seqItems.count() > 0) { currentSeqNum = 0; currentSeqItem = &seqItems[currentSeqNum]; } else { currentSeqNum = -1; currentSeqItem = NULL; } updateFrameLabel(); }
void FlowViewWindow::updateDataView() { ui->txtCurr1->setText(Utility::formatNumber(currBytes[0])); ui->txtCurr2->setText(Utility::formatNumber(currBytes[1])); ui->txtCurr3->setText(Utility::formatNumber(currBytes[2])); ui->txtCurr4->setText(Utility::formatNumber(currBytes[3])); ui->txtCurr5->setText(Utility::formatNumber(currBytes[4])); ui->txtCurr6->setText(Utility::formatNumber(currBytes[5])); ui->txtCurr7->setText(Utility::formatNumber(currBytes[6])); ui->txtCurr8->setText(Utility::formatNumber(currBytes[7])); ui->txtRef1->setText(Utility::formatNumber(refBytes[0])); ui->txtRef2->setText(Utility::formatNumber(refBytes[1])); ui->txtRef3->setText(Utility::formatNumber(refBytes[2])); ui->txtRef4->setText(Utility::formatNumber(refBytes[3])); ui->txtRef5->setText(Utility::formatNumber(refBytes[4])); ui->txtRef6->setText(Utility::formatNumber(refBytes[5])); ui->txtRef7->setText(Utility::formatNumber(refBytes[6])); ui->txtRef8->setText(Utility::formatNumber(refBytes[7])); ui->flowView->setReference(refBytes, false); ui->flowView->updateData(currBytes, true); for (int i = 0; i < 8; i++) { if (currBytes[i] == triggerValues[i]) { playbackActive = false; playbackTimer->stop(); break; //once any trigger is hit we can stop looking } } updateGraphLocation(); updateFrameLabel(); }
void FramePlaybackWindow::getStatusUpdate(int frameNum) { currentPosition = frameNum; updateFrameLabel(); }
FramePlaybackWindow::FramePlaybackWindow(const QVector<CANFrame> *frames, QWidget *parent) : QDialog(parent), ui(new Ui::FramePlaybackWindow) { ui->setupUi(this); setWindowFlags(Qt::Window); int numBuses = CANConManager::getInstance()->getNumBuses(); for (int n = 0; n < numBuses; n++) ui->comboCANBus->addItem(QString::number(n)); ui->comboCANBus->addItem(tr("All")); ui->comboCANBus->addItem(tr("From File")); ui->comboCANBus->setCurrentIndex(0); playbackObject.initialize(); playbackObject.setNumBuses(numBuses); readSettings(); modelFrames = frames; currentSeqItem = NULL; currentSeqNum = -1; currentPosition = 0; forward = true; isPlaying = false; updateFrameLabel(); connect(ui->btnStepBack, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnBackOneClick); connect(ui->btnPause, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnPauseClick); connect(ui->btnPlayReverse, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnReverseClick); connect(ui->btnStop, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnStopClick); connect(ui->btnPlay, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnPlayClick); connect(ui->btnStepForward, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnFwdOneClick); connect(ui->btnSelectAll, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnSelectAllClick); connect(ui->btnSelectNone, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnSelectNoneClick); connect(ui->btnDelete, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnDeleteCurrSeq); connect(ui->spinPlaySpeed, SIGNAL(valueChanged(int)), this, SLOT(changePlaybackSpeed(int))); connect(ui->spinBurstSpeed, SIGNAL(valueChanged(int)), this, SLOT(changeBurstRate(int))); //connect(ui->cbLoop, SIGNAL(clicked(bool)), this, SLOT(changeLooping(bool))); connect(ui->comboCANBus, SIGNAL(currentIndexChanged(int)), this, SLOT(changeSendingBus(int))); connect(ui->listID, &QListWidget::itemChanged, this, &FramePlaybackWindow::changeIDFiltering); connect(ui->btnLoadFile, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnLoadFile); connect(ui->btnLoadLive, &QAbstractButton::clicked, this, &FramePlaybackWindow::btnLoadLive); connect(ui->tblSequence, &QTableWidget::cellPressed, this, &FramePlaybackWindow::seqTableCellClicked); connect(ui->tblSequence, &QTableWidget::cellChanged, this, &FramePlaybackWindow::seqTableCellChanged); connect(ui->btnLoadFilters, &QAbstractButton::clicked, this, &FramePlaybackWindow::loadFilters); connect(ui->btnSaveFilters, &QAbstractButton::clicked, this, &FramePlaybackWindow::saveFilters); connect(ui->cbOriginalTiming, &QCheckBox::toggled, this, &FramePlaybackWindow::useOrigTimingClicked); connect(&playbackObject, &FramePlaybackObject::EndOfFrameCache, this, &FramePlaybackWindow::EndOfFrameCache); connect(&playbackObject, &FramePlaybackObject::statusUpdate, this, &FramePlaybackWindow::getStatusUpdate); ui->listID->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->listID, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuFilters(QPoint))); playbackObject.setPlaybackInterval(ui->spinPlaySpeed->value()); QStringList headers; headers << "Source" << "Loops"; ui->tblSequence->setColumnCount(2); ui->tblSequence->setColumnWidth(0, 260); ui->tblSequence->setColumnWidth(1, 80); ui->tblSequence->setHorizontalHeaderLabels(headers); }