Esempio n. 1
0
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);
        }
    }
}
Esempio n. 2
0
void FramePlaybackWindow::btnReverseClick()
{
    forward = false;
    isPlaying = true;
    playbackObject.startPlaybackBackward();
    updateFrameLabel();
}
Esempio n. 3
0
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();
}
Esempio n. 4
0
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();
    }
}
Esempio n. 5
0
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();
}
Esempio n. 6
0
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";
}
Esempio n. 7
0
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();
}
Esempio n. 8
0
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();

}
Esempio n. 9
0
void FramePlaybackWindow::getStatusUpdate(int frameNum)
{
    currentPosition = frameNum;
    updateFrameLabel();
}
Esempio n. 10
0
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);
}