diff --git a/rmapplugin/params.h b/rmapplugin/params.h new file mode 100644 --- /dev/null +++ b/rmapplugin/params.h @@ -0,0 +1,44 @@ +#ifndef PARAMS_H +#define PARAMS_H + +#define XMAX 2048 +#define YMAX 10000 +#define FONT_SIZE_WAVEFORM_TITLE 10 +#define DEFAULT_SIZE 2048 +#define BLK_SIZE 12 + +//**************** +// TM packets SIDs +#define SID_NORMAL_SWF_F0 3 +#define SID_NORMAL_SWF_F1 4 +#define SID_NORMAL_SWF_F2 5 +#define SID_NORMAL_CWF_F3 1 +#define SID_NORMAL_ASM_F0 11 +#define SID_NORMAL_ASM_F1 12 +#define SID_NORMAL_ASM_F2 13 +#define SID_NORMAL_BP1_F0 14 +#define SID_NORMAL_BP1_F1 15 +#define SID_NORMAL_BP1_F2 16 +#define SID_NORMAL_BP2_F0 19 +#define SID_NORMAL_BP2_F1 20 +#define SID_NORMAL_BP2_F2 21 +// +#define SID_BURST_CWF_F2 2 +#define SID_BURST_BP1_F0 17 +#define SID_BURST_BP2_F0 22 +#define SID_BURST_BP1_F1 18 +#define SID_BURST_BP2_F1 23 +// +#define SID_SBM1_CWF_F1 24 +#define SID_SBM1_BP1_F0 28 +#define SID_SBM1_BP2_F0 31 +// +#define SID_SBM2_CWF_F2 25 +#define SID_SBM2_BP1_F0 29 +#define SID_SBM2_BP2_F0 32 +#define SID_SBM2_BP1_F1 30 +#define SID_SBM2_BP2_F1 33 + +#define RMAP_DEFAULT_SOURCE_ADDRESS 1 + +#endif // PARAMS_H diff --git a/rmapplugin/spectralmatricesdmasimulator.cpp b/rmapplugin/spectralmatricesdmasimulator.cpp deleted file mode 100755 --- a/rmapplugin/spectralmatricesdmasimulator.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include "spectralmatricesdmasimulator.h" - -SpectralMatricesDMASimulator::SpectralMatricesDMASimulator(QWidget *parent) : - QWidget(parent) -{ - timer = new QTimer; - QString message; - count = SPECTRAL_MATRIX_SIZE; - unsigned int i = 0; - - Value = (unsigned int*) malloc(count*sizeof(int)); - for (i=0; iaddWidget(sendOneSpectralMatrix1Button); - mainLayout->addWidget(sendOneSpectralMatrix2Button); - mainLayout->addWidget(readMatrixAddress1Button); - mainLayout->addWidget(readMatrixAddress2Button); - mainLayout->addWidget(startSendingMatricesButton); - mainLayout->addWidget(stopSendingMatricesButton); - this->setLayout(mainLayout); - - message.append("Address of the Spectral Matrix N°1: " + QString::number(spectralMatrixAddress1)); - emit sendMessage(message); - message.append("Address of the Spectral Matrix N°2: " + QString::number(spectralMatrixAddress2)); - emit sendMessage(message); - - connect(this->sendOneSpectralMatrix1Button, SIGNAL(clicked()), this, SLOT(sendOneSpectralMatrix1SLOT())); - connect(this->sendOneSpectralMatrix2Button, SIGNAL(clicked()), this, SLOT(sendOneSpectralMatrix2SLOT())); - connect(this->readMatrixAddress1Button, SIGNAL(clicked()), this, SLOT(readMatrixAddress1SLOT())); - connect(this->readMatrixAddress2Button, SIGNAL(clicked()), this, SLOT(readMatrixAddress2SLOT())); - connect(this->timer, SIGNAL(timeout()), this, SLOT(sendOneSpectralMatrixSLOT())); - connect(this->startSendingMatricesButton, SIGNAL(clicked()), this, SLOT(startSendingMatricesSLOT())); - connect(this->stopSendingMatricesButton, SIGNAL(clicked()), this, SLOT(stopSendingMatricesSLOT())); -} - -void SpectralMatricesDMASimulator::sendOneSpectralMatrix1SLOT() -{ - emit(rmapplugginRead(&spectralMatrixAddress1, 1, APB_SPECTRAL_MATRICES_DMA1)); - emit(rmapplugginWrite(Value, count, spectralMatrixAddress1)); - emit(rmapplugginRead(&spectralMatrixCTRL, 1, APB_SPECTRAL_MATRICES_CTRL)); - spectralMatrixCTRL = spectralMatrixCTRL | 0x00000001; - emit(rmapplugginWrite(&spectralMatrixCTRL, 1, APB_SPECTRAL_MATRICES_CTRL)); - emit(rmapplugginWrite(&irqctrlForce, 1, APB_ADDRESS_IRQCTRL)); -} - -void SpectralMatricesDMASimulator::sendOneSpectralMatrix2SLOT() -{ - emit(rmapplugginRead(&spectralMatrixAddress2, 1, APB_SPECTRAL_MATRICES_DMA2)); - emit(rmapplugginWrite(Value, count, spectralMatrixAddress2)); - emit(rmapplugginRead(&spectralMatrixCTRL, 1, APB_SPECTRAL_MATRICES_CTRL)); - spectralMatrixCTRL = spectralMatrixCTRL | 0x00000002; - emit(rmapplugginWrite(&spectralMatrixCTRL, 1, APB_SPECTRAL_MATRICES_CTRL)); - emit(rmapplugginWrite(&irqctrlForce, 1, APB_ADDRESS_IRQCTRL)); -} - -void SpectralMatricesDMASimulator::sendOneSpectralMatrixSLOT() -{ - if (flagSendMatrix1 == true) - { - emit(rmapplugginRead(&spectralMatrixCTRL, 1, APB_SPECTRAL_MATRICES_CTRL)); - if ( (spectralMatrixCTRL & 1) == 1) emit(sendMessage("ERROR matrix 1 not processed")); - //emit(rmapplugginWrite(Value, count, spectralMatrixAddress1)); - spectralMatrixCTRL = spectralMatrixCTRL | 0x00000001; // sets the bit 0 of the ctrl register to 1 - emit(rmapplugginWrite(&spectralMatrixCTRL, 1, APB_SPECTRAL_MATRICES_CTRL)); - emit(rmapplugginWrite(&irqctrlForce, 1, APB_ADDRESS_IRQCTRL)); - flagSendMatrix1 = false; - nbMatricesSent++; - if (nbMatricesSent==400) { - emit(sendMessage("400 matrices successfully sent")); - nbMatricesSent = 0; - } - } - else if (flagSendMatrix1 == false) - { - emit(rmapplugginRead(&spectralMatrixCTRL, 1, APB_SPECTRAL_MATRICES_CTRL)); - if ( ( (spectralMatrixCTRL>>1) & 1 ) == 1 ) emit(sendMessage("ERROR matrix 2 not processed")); - //emit(rmapplugginWrite(Value, count, spectralMatrixAddress2)); - spectralMatrixCTRL = spectralMatrixCTRL | 0x00000002; // sets the bit 1 of the ctrl register to 1 - emit(rmapplugginWrite(&spectralMatrixCTRL, 1, APB_SPECTRAL_MATRICES_CTRL)); - emit(rmapplugginWrite(&irqctrlForce, 1, APB_ADDRESS_IRQCTRL)); - flagSendMatrix1 = true; - nbMatricesSent++; - if (nbMatricesSent==400) { - emit(sendMessage("400 matrices successfully sent")); - nbMatricesSent = 0; - } - } -} - -void SpectralMatricesDMASimulator::readMatrixAddress1SLOT() -{ - QString message; - emit(rmapplugginRead(&spectralMatrixAddress1, 1, APB_SPECTRAL_MATRICES_DMA1)); - message.append("Address of the Spectral Matrix (1): " - + QString::number(spectralMatrixAddress1, 16)); - emit sendMessage(message); -} - -void SpectralMatricesDMASimulator::readMatrixAddress2SLOT() -{ - QString message; - emit(rmapplugginRead(&spectralMatrixAddress2, 1, APB_SPECTRAL_MATRICES_DMA2)); - message.append("Address of the Spectral Matrix (2): " - + QString::number(spectralMatrixAddress2, 16)); - emit sendMessage(message); -} - -void SpectralMatricesDMASimulator::startSendingMatricesSLOT() -{ - nbMatricesSent = 0; - readMatrixAddress1SLOT(); - readMatrixAddress2SLOT(); - timer->start(40); -} - -void SpectralMatricesDMASimulator::stopSendingMatricesSLOT() -{ - timer->stop(); -} diff --git a/rmapplugin/spectralmatricesdmasimulator.h b/rmapplugin/spectralmatricesdmasimulator.h deleted file mode 100755 --- a/rmapplugin/spectralmatricesdmasimulator.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef SPECTRALMATRICESDMASIMULATOR_H -#define SPECTRALMATRICESDMASIMULATOR_H - -#define APB_SPECTRAL_MATRICES_CTRL 0x80000700 -#define APB_SPECTRAL_MATRICES_DMA1 0x80000704 -#define APB_SPECTRAL_MATRICES_DMA2 0x80000708 -#define APB_ADDRESS_IRQCTRL 0x80000208 - -#include -#include -#include -#include - -#define SPECTRAL_MATRIX_SIZE 3840 - -class SpectralMatricesDMASimulator : public QWidget -{ - Q_OBJECT -public: - explicit SpectralMatricesDMASimulator(QWidget *parent = 0); - QVBoxLayout *mainLayout; - -signals: - void rmapplugginRead(unsigned int *Value, unsigned int count, unsigned int address); - void rmapplugginWrite(unsigned int *Value, unsigned int count, unsigned int address); - void sendMessage(QString message); - -public slots: - void sendOneSpectralMatrixSLOT(); - void sendOneSpectralMatrix1SLOT(); - void sendOneSpectralMatrix2SLOT(); - void startSendingMatricesSLOT(); - void stopSendingMatricesSLOT(); - void readMatrixAddress1SLOT(); - void readMatrixAddress2SLOT(); - -private: - unsigned int *Value; - unsigned int count; - unsigned int address; - unsigned int spectralMatrixCTRL; - unsigned int spectralMatrixAddress1; - unsigned int spectralMatrixAddress2; - unsigned int irqctrlForce; - unsigned int nbMatricesSent; - - QPushButton *sendOneSpectralMatrix1Button; - QPushButton *sendOneSpectralMatrix2Button; - QPushButton *sendSpectralMatricesPeriodicallyButton; - QPushButton *readMatrixAddress1Button; - QPushButton *readMatrixAddress2Button; - QPushButton *startSendingMatricesButton; - QPushButton *stopSendingMatricesButton; - - bool flagSendMatrix1; - - QTimer *timer; -}; - -#endif // SPECTRALMATRICESDMASIMULATOR_H diff --git a/rmapplugin/tmstatistics.cpp b/rmapplugin/tmstatistics.cpp new file mode 100644 --- /dev/null +++ b/rmapplugin/tmstatistics.cpp @@ -0,0 +1,517 @@ +#include "tmstatistics.h" +#include +#include + +TMStatistics::TMStatistics(QWidget *parent) : + QWidget(parent) +{ + // Create Fonts + QFont font; + font = QFont(this->fontInfo().family(), STATISTICS_FONT_SIZE, QFont::Light); + + label_UNKNOWN = new QLabel("UNKNOWN"); + label_UNKNOWN_nb = new QLabel("-"); + + mainLayout = new QGridLayout(); + layout_stat = new QGridLayout(); // TM stastictics + layout_NORM = new QGridLayout(); // TM_LFR_SCIENCE_NORMAL_ + layout_BURST = new QGridLayout(); // TM_LFR_SCIENCE_BURST_ + layout_SBM1 = new QGridLayout(); // TM_LFR_SCIENCE_SBM1_ + layout_SBM2 = new QGridLayout(); // TM_LFR_SCIENCE_SBM2_ + layout_last = new QGridLayout(); // last TM description + + //*************** + // TM_LFR_TC_EXE_ + label_SUCC = new QLabel("SUCCESS"); + label_INCO = new QLabel("INCONSISTENT"); + label_NOTE = new QLabel("NOT_EXECUTABLE"); + label_NOTI = new QLabel("NOT_IMPLEMENTED"); + label_ERRO = new QLabel("ERROR"); + label_CORR = new QLabel("CORRUPTED"); + label_HK = new QLabel("TM_LFR_HK"); + // + label_SUCC_nb = new QLabel("-"); + label_INCO_nb = new QLabel("-"); + label_NOTE_nb = new QLabel("-"); + label_NOTI_nb = new QLabel("-"); + label_ERRO_nb = new QLabel("-"); + label_CORR_nb = new QLabel("-"); + label_HK_nb = new QLabel("-"); + + //*********************** + // TM_LFR_SCIENCE_NORMAL_ + label_NORM_SWF_F0 = new QLabel("SWF_F0"); + label_NORM_SWF_F1 = new QLabel("SWF_F1"); + label_NORM_SWF_F2 = new QLabel("SWF_F2"); + label_NORM_CWF_F3 = new QLabel("CWF_F3"); + label_NORM_ASM_F0 = new QLabel("ASM_F0"); + label_NORM_ASM_F1 = new QLabel("ASM_F1"); + label_NORM_ASM_F2 = new QLabel("ASM_F2"); + label_NORM_BP1_F0 = new QLabel("BP1_F0"); + label_NORM_BP1_F1 = new QLabel("BP1_F1"); + label_NORM_BP1_F2 = new QLabel("BP1_F2"); + label_NORM_BP2_F0 = new QLabel("BP2_F0"); + label_NORM_BP2_F1 = new QLabel("BP2_F1"); + label_NORM_BP2_F2 = new QLabel("BP2_F2"); + // + label_NORM_SWF_F0_nb = new QLabel("-"); + label_NORM_SWF_F1_nb = new QLabel("-"); + label_NORM_SWF_F2_nb = new QLabel("-"); + label_NORM_CWF_F3_nb = new QLabel("-"); + label_NORM_ASM_F0_nb = new QLabel("-"); + label_NORM_ASM_F1_nb = new QLabel("-"); + label_NORM_ASM_F2_nb = new QLabel("-"); + label_NORM_BP1_F0_nb = new QLabel("-"); + label_NORM_BP1_F1_nb = new QLabel("-"); + label_NORM_BP1_F2_nb = new QLabel("-"); + label_NORM_BP2_F0_nb = new QLabel("-"); + label_NORM_BP2_F1_nb = new QLabel("-"); + label_NORM_BP2_F2_nb = new QLabel("-"); + + //********************** + // TM_LFR_SCIENCE_BURST_ + label_BURST_CWF_F2 = new QLabel("CWF_F3"); + label_BURST_BP1_F0 = new QLabel("BP1_F0"); + label_BURST_BP2_F0 = new QLabel("BP2_F0"); + label_BURST_BP1_F1 = new QLabel("BP1_F1"); + label_BURST_BP2_F1 = new QLabel("BP2_F1"); + // + label_BURST_CWF_F2_nb = new QLabel("-"); + label_BURST_BP1_F0_nb = new QLabel("-"); + label_BURST_BP2_F0_nb = new QLabel("-"); + label_BURST_BP1_F1_nb = new QLabel("-"); + label_BURST_BP2_F1_nb = new QLabel("-"); + + //********************* + // TM_LFR_SCIENCE_SBM1_ + label_SBM1_CWF_F1 = new QLabel("CWF_F1"); + label_SBM1_BP1_F0 = new QLabel("BP1_F0"); + label_SBM1_BP2_F0 = new QLabel("BP2_F0"); + // + label_SBM1_CWF_F1_nb = new QLabel("-"); + label_SBM1_BP1_F0_nb = new QLabel("-"); + label_SBM1_BP2_F0_nb = new QLabel("-"); + + //********************* + // TM_LFR_SCIENCE_SBM2_ + label_SBM2_CWF_F2 = new QLabel("CWF_F2"); + label_SBM2_BP1_F0 = new QLabel("BP1_F0"); + label_SBM2_BP2_F0 = new QLabel("BP2_F0"); + label_SBM2_BP1_F1 = new QLabel("BP1_F1"); + label_SBM2_BP2_F1 = new QLabel("BP2_F1"); + // + label_SBM2_CWF_F2_nb = new QLabel("-"); + label_SBM2_BP1_F0_nb = new QLabel("-"); + label_SBM2_BP2_F0_nb = new QLabel("-"); + label_SBM2_BP1_F1_nb = new QLabel("-"); + label_SBM2_BP2_F1_nb = new QLabel("-"); + + //******** + // LAST TM + label_PID = new QLabel("PID"); + label_CAT = new QLabel("CAT"); + label_TYP = new QLabel("Type"); + label_SUB = new QLabel("Subtype"); + label_SID = new QLabel("SID"); + label_SIZ = new QLabel("Length"); + label_coarse_time = new QLabel("Coarse time: "); + label_fine_time = new QLabel("Fine time: "); + // + label_PID_is = new QLabel("-"); + label_CAT_is = new QLabel("-"); + label_TYP_is = new QLabel("-"); + label_SUB_is = new QLabel("-"); + label_SID_is = new QLabel("-"); + label_SIZ_is = new QLabel("-"); + label_coarse_time_val = new QLabel("-"); + label_fine_time_val = new QLabel("-"); + + // QPushButton + button_reset_stat = new QPushButton("reset stat"); + + //********** + // QGroupBox + this->setStyleSheet("QGroupBox {border: 1px solid black; }"); + + groupbox_stat = new QGroupBox("TM_LFR_TC_EXE_"); + groupbox_NORM = new QGroupBox("TM_LFR_SCIENCE_NORMAL_"); + groupbox_BURST = new QGroupBox("TM_LFR_SCIENCE_BURST_"); + groupbox_SBM1 = new QGroupBox("TM_LFR_SCIENCE_SBM1_"); + groupbox_SBM2 = new QGroupBox("TM_LFR_SCIENCE_SBM2_"); + groupbox_last = new QGroupBox("Last TM received"); + + groupbox_stat->setFont(font); + groupbox_NORM->setFont(font); + groupbox_BURST->setFont(font); + groupbox_SBM1->setFont(font); + groupbox_SBM2->setFont(font); + groupbox_last->setFont(font); + + initConstants(); + + buildMonitor_NORM(); + buildMonitor_BURST(); + buildMonitor_SBM1(); + buildMonitor_SBM2(); + buildMonitor(); + + connect(this->button_reset_stat, SIGNAL(clicked()), this, SLOT(resetStatistics())); + +} + +void TMStatistics::initConstants() +{ + UNKNOWN_nb = 0; + + // TM_LFR_SCIENCE_NORMAL_ + SUCC_nb = 0; + INCO_nb = 0; + NOTE_nb = 0; + NOTI_nb = 0; + ERRO_nb = 0; + CORR_nb = 0; + HK_nb = 0; + + // TM_LFR_SCIENCE_NORMAL_ + NORM_SWF_F0_nb = 0; + NORM_SWF_F1_nb = 0; + NORM_SWF_F2_nb = 0; + NORM_CWF_F3_nb = 0; + NORM_ASM_F0_nb = 0; + NORM_ASM_F1_nb = 0; + NORM_ASM_F2_nb = 0; + NORM_BP1_F0_nb = 0; + NORM_BP1_F1_nb = 0; + NORM_BP1_F2_nb = 0; + NORM_BP2_F0_nb = 0; + NORM_BP2_F1_nb = 0; + NORM_BP2_F2_nb = 0; + + BURST_CWF_F2_nb = 0; + BURST_BP1_F0_nb = 0; + BURST_BP2_F0_nb = 0; + BURST_BP1_F1_nb = 0; + BURST_BP2_F1_nb = 0; + SBM1_CWF_F2_nb = 0; + SBM1_BP1_F0_nb = 0; + SBM1_BP2_F0_nb = 0; + SBM2_CWF_F2_nb = 0; + SBM2_BP1_F0_nb = 0; + SBM2_BP2_F0_nb = 0; + SBM2_BP1_F1_nb = 0; + SBM2_BP2_F1_nb = 0; +} + +void TMStatistics::buildMonitor_NORM() +{ + layout_NORM->addWidget(label_NORM_SWF_F0, 0, 0, 1, 1); + layout_NORM->addWidget(label_NORM_SWF_F1, 1, 0, 1, 1); + layout_NORM->addWidget(label_NORM_SWF_F2, 2, 0, 1, 1); + layout_NORM->addWidget(label_NORM_CWF_F3, 3, 0, 1, 1); + // + layout_NORM->addWidget(label_NORM_SWF_F0_nb, 0, 1, 1, 1); + layout_NORM->addWidget(label_NORM_SWF_F1_nb, 1, 1, 1, 1); + layout_NORM->addWidget(label_NORM_SWF_F2_nb, 2, 1, 1, 1); + layout_NORM->addWidget(label_NORM_CWF_F3_nb, 3, 1, 1, 1); + // + layout_NORM->addWidget(label_NORM_ASM_F0, 4, 0, 1, 1); + layout_NORM->addWidget(label_NORM_ASM_F1, 5, 0, 1, 1); + layout_NORM->addWidget(label_NORM_ASM_F2, 6, 0, 1, 1); + // + layout_NORM->addWidget(label_NORM_ASM_F0_nb, 4, 1, 1, 1); + layout_NORM->addWidget(label_NORM_ASM_F1_nb, 5, 1, 1, 1); + layout_NORM->addWidget(label_NORM_ASM_F2_nb, 6, 1, 1, 1); + // + layout_NORM->addWidget(label_NORM_BP1_F0, 0, 2, 1, 1); + layout_NORM->addWidget(label_NORM_BP1_F1, 1, 2, 1, 1); + layout_NORM->addWidget(label_NORM_BP1_F2, 2, 2, 1, 1); + layout_NORM->addWidget(label_NORM_BP2_F0, 3, 2, 1, 1); + layout_NORM->addWidget(label_NORM_BP2_F1, 4, 2, 1, 1); + layout_NORM->addWidget(label_NORM_BP2_F2, 5, 2, 1, 1); + // + layout_NORM->addWidget(label_NORM_BP1_F0_nb, 0, 3, 1, 1); + layout_NORM->addWidget(label_NORM_BP1_F1_nb, 1, 3, 1, 1); + layout_NORM->addWidget(label_NORM_BP1_F2_nb, 2, 3, 1, 1); + layout_NORM->addWidget(label_NORM_BP2_F0_nb, 3, 3, 1, 1); + layout_NORM->addWidget(label_NORM_BP2_F1_nb, 4, 3, 1, 1); + layout_NORM->addWidget(label_NORM_BP2_F2_nb, 5, 3, 1, 1); +} + +void TMStatistics::buildMonitor_BURST() +{ + layout_BURST->addWidget(label_BURST_CWF_F2, 0, 0, 1, 1); + layout_BURST->addWidget(label_BURST_BP1_F0, 1, 0, 1, 1); + layout_BURST->addWidget(label_BURST_BP2_F0, 2, 0, 1, 1); + layout_BURST->addWidget(label_BURST_BP1_F1, 3, 0, 1, 1); + layout_BURST->addWidget(label_BURST_BP2_F1, 4, 0, 1, 1); + // + layout_BURST->addWidget(label_BURST_CWF_F2_nb, 0, 1, 1, 1); + layout_BURST->addWidget(label_BURST_BP1_F0_nb, 1, 1, 1, 1); + layout_BURST->addWidget(label_BURST_BP2_F0_nb, 2, 1, 1, 1); + layout_BURST->addWidget(label_BURST_BP1_F1_nb, 3, 1, 1, 1); + layout_BURST->addWidget(label_BURST_BP2_F1_nb, 4, 1, 1, 1); + // + layout_BURST->setRowStretch(5, 1); + layout_BURST->setColumnStretch(2,1); +} + +void TMStatistics::buildMonitor_SBM1() +{ + layout_SBM1->addWidget(label_SBM1_CWF_F1, 0, 0, 1, 1); + layout_SBM1->addWidget(label_SBM1_BP1_F0, 1, 0, 1, 1); + layout_SBM1->addWidget(label_SBM1_BP2_F0, 2, 0, 1, 1); + // + layout_SBM1->addWidget(label_SBM1_CWF_F1_nb, 0, 1, 1, 1); + layout_SBM1->addWidget(label_SBM1_BP1_F0_nb, 1, 1, 1, 1); + layout_SBM1->addWidget(label_SBM1_BP2_F0_nb, 2, 1, 1, 1); + // + layout_SBM1->setRowStretch(3, 1); + layout_SBM1->setColumnStretch(2,1); +} + +void TMStatistics::buildMonitor_SBM2() +{ + layout_SBM2->addWidget(label_SBM2_CWF_F2, 0, 0, 1, 1); + layout_SBM2->addWidget(label_SBM2_BP1_F0, 1, 0, 1, 1); + layout_SBM2->addWidget(label_SBM2_BP2_F0, 2, 0, 1, 1); + layout_SBM2->addWidget(label_SBM2_BP1_F1, 3, 0, 1, 1); + layout_SBM2->addWidget(label_SBM2_BP2_F1, 4, 0, 1, 1); + // + layout_SBM2->addWidget(label_SBM2_CWF_F2_nb, 0, 1, 1, 1); + layout_SBM2->addWidget(label_SBM2_BP1_F0_nb, 1, 1, 1, 1); + layout_SBM2->addWidget(label_SBM2_BP2_F0_nb, 2, 1, 1, 1); + layout_SBM2->addWidget(label_SBM2_BP1_F1_nb, 3, 1, 1, 1); + layout_SBM2->addWidget(label_SBM2_BP2_F1_nb, 4, 1, 1, 1); + // + layout_SBM2->setRowStretch(5, 1); + layout_SBM2->setColumnStretch(2,1); +} + +void TMStatistics::buildMonitor() +{ + //*************** + // TM_LFR_TC_EXE_ + layout_stat->addWidget(label_SUCC, 0, 0, 1, 1); + layout_stat->addWidget(label_INCO, 1, 0, 1, 1); + layout_stat->addWidget(label_NOTE, 2, 0, 1, 1); + layout_stat->addWidget(label_NOTI, 3, 0, 1, 1); + layout_stat->addWidget(label_ERRO, 4, 0, 1, 1); + layout_stat->addWidget(label_CORR, 5, 0, 1, 1); + layout_stat->addWidget(label_HK, 6, 0, 1, 1); + // + layout_stat->addWidget(label_SUCC_nb, 0, 1, 1, 1); + layout_stat->addWidget(label_INCO_nb, 1, 1, 1, 1); + layout_stat->addWidget(label_NOTE_nb, 2, 1, 1, 1); + layout_stat->addWidget(label_NOTI_nb, 3, 1, 1, 1); + layout_stat->addWidget(label_ERRO_nb, 4, 1, 1, 1); + layout_stat->addWidget(label_CORR_nb, 5, 1, 1, 1); + layout_stat->addWidget(label_HK_nb, 6, 1, 1, 1); + + //******** + // LAST TM + layout_last->addWidget(label_PID, 0, 0, 1, 1); + layout_last->addWidget(label_CAT, 0, 1, 1, 1); + layout_last->addWidget(label_TYP, 0, 2, 1, 1); + layout_last->addWidget(label_SUB, 0, 3, 1, 1); + layout_last->addWidget(label_SID, 0, 4, 1, 1); + layout_last->addWidget(label_SIZ, 0, 5, 1, 1); + // + layout_last->addWidget(label_PID_is, 1, 0, 1, 1); + layout_last->addWidget(label_CAT_is, 1, 1, 1, 1); + layout_last->addWidget(label_TYP_is, 1, 2, 1, 1); + layout_last->addWidget(label_SUB_is, 1, 3, 1, 1); + layout_last->addWidget(label_SID_is, 1, 4, 1, 1); + layout_last->addWidget(label_SIZ_is, 1, 5, 1, 1); + // + layout_last->addWidget(label_coarse_time, 2, 0, 1, 1); + layout_last->addWidget(label_coarse_time_val, 2, 1, 1, 1); + layout_last->addWidget(label_fine_time, 2, 2, 1, 1); + layout_last->addWidget(label_fine_time_val, 2, 3, 1, 1); + // + layout_last->addWidget(label_UNKNOWN, 3, 0, 1, 1); + layout_last->addWidget(label_UNKNOWN_nb, 3, 1, 1, 1); + + //*********** + // groupboxes + groupbox_stat->setLayout(layout_stat); + groupbox_NORM->setLayout(layout_NORM); + groupbox_BURST->setLayout(layout_BURST); + groupbox_SBM1->setLayout(layout_SBM1); + groupbox_SBM2->setLayout(layout_SBM2); + groupbox_last->setLayout(layout_last); + // + mainLayout->addWidget(groupbox_stat, 0, 0, 1, 1); + mainLayout->addWidget(groupbox_NORM, 1, 0, 1, 1); + mainLayout->addWidget(groupbox_last, 2, 0, 1, 2); + mainLayout->addWidget(groupbox_SBM1, 0, 1, 1, 1); + mainLayout->addWidget(groupbox_SBM2, 0, 2, 1, 1); + mainLayout->addWidget(groupbox_BURST, 1, 1, 1, 1); + mainLayout->addWidget(button_reset_stat, 3, 0, 1, 2); + mainLayout->setColumnStretch(3, 1); + mainLayout->setRowStretch(4, 1); + // + this->setLayout(mainLayout); +} + +void TMStatistics::resetStatistics() +{ + initConstants(); + // + label_UNKNOWN_nb->setText("-"); + label_SUCC_nb->setText("-"); + label_INCO_nb->setText("-"); + label_NOTE_nb->setText("-"); + label_NOTI_nb->setText("-"); + label_ERRO_nb->setText("-"); + label_CORR_nb->setText("-"); + label_HK_nb->setText("-"); + // + label_NORM_SWF_F0_nb->setText("-"); + label_NORM_SWF_F1_nb->setText("-"); + label_NORM_SWF_F2_nb->setText("-"); + label_NORM_CWF_F3_nb->setText("-"); + // + label_PID_is->setText("-"); + label_CAT_is->setText("-"); + label_TYP_is->setText("-"); + label_SUB_is->setText("-"); + label_SID_is->setText("-"); + label_SIZ_is->setText("-"); + // + label_coarse_time_val->setText("-"); + label_fine_time_val->setText("-"); +} + +void TMStatistics::updateStatistics(unsigned char pid, unsigned char cat, + unsigned char typ, unsigned char sub, + unsigned int sid, unsigned int length, + unsigned int coarse_t, unsigned int fine_t) +{ + if (cat == 1) + { + if (typ == 1) + { + if (sub == 7) + { + SUCC_nb = SUCC_nb + 1; + label_SUCC_nb->setText(QString::number(SUCC_nb)); + } + else if (sub == 8) + { + if (sid == 5) + { + INCO_nb = INCO_nb + 1; + label_INCO_nb->setText(QString::number(INCO_nb)); + } + else if (sid == 40000) + { + NOTE_nb = NOTE_nb + 1; + label_NOTE_nb->setText(QString::number(NOTE_nb)); + } + else if (sid == 40002) + { + NOTI_nb = NOTI_nb + 1; + label_NOTI_nb->setText(QString::number(NOTI_nb)); + } + else if (sid == 40003) + { + ERRO_nb = ERRO_nb + 1; + label_ERRO_nb->setText(QString::number(ERRO_nb)); + } + else if (sid == 40005) + { + CORR_nb = CORR_nb + 1; + label_CORR_nb->setText(QString::number(CORR_nb)); + } + else incrementUnknown(); + } + else incrementUnknown(); + } + else + incrementUnknown(); + } + else if (cat == 4) + { + if (typ == 3) + { + if (sub == 25) + if (sid == 1) + { + HK_nb = HK_nb + 1; + label_HK_nb->setText(QString::number(HK_nb)); + } + else + { + incrementUnknown(); + } + else + { + incrementUnknown(); + } + } + else + { + incrementUnknown(); + } + } + else if (cat == 12) + { + if (typ == 21) + { + if (sub == 3) + if (sid == 1) + { + NORM_CWF_F3_nb = NORM_CWF_F3_nb + 1; + label_NORM_CWF_F3_nb->setText(QString::number(NORM_CWF_F3_nb)); + } + else if (sid == 3) + { + NORM_SWF_F0_nb = NORM_SWF_F0_nb + 1; + label_NORM_SWF_F0_nb->setText(QString::number(NORM_SWF_F0_nb)); + } + else if (sid == 4) + { + NORM_SWF_F1_nb = NORM_SWF_F1_nb + 1; + label_NORM_SWF_F1_nb->setText(QString::number(NORM_SWF_F1_nb)); + } + else if (sid == 5) + { + NORM_SWF_F2_nb = NORM_SWF_F2_nb + 1; + label_NORM_SWF_F2_nb->setText(QString::number(NORM_SWF_F2_nb)); + } + else + { + incrementUnknown(); + } + } + else + { + incrementUnknown(); + } + } + else + { + incrementUnknown(); + } + + label_PID_is->setText(QString::number(pid)); + label_CAT_is->setText(QString::number(cat)); + label_TYP_is->setText(QString::number(typ)); + label_SUB_is->setText(QString::number(sub)); + label_SID_is->setText(QString::number(sid)); + label_SIZ_is->setText(QString::number(length)); + label_coarse_time_val->setText(QString::number(coarse_t, 16)); + label_fine_time_val->setText(QString::number(fine_t, 16)); +} + +void TMStatistics::incrementUnknown() +{ + UNKNOWN_nb = UNKNOWN_nb + 1; + label_UNKNOWN_nb->setText(QString::number(UNKNOWN_nb)); +} + + + + + + diff --git a/rmapplugin/tmstatistics.h b/rmapplugin/tmstatistics.h new file mode 100644 --- /dev/null +++ b/rmapplugin/tmstatistics.h @@ -0,0 +1,205 @@ +#ifndef TMSTATISTICS_H +#define TMSTATISTICS_H + +#include +#include +#include +#include +#include +#include + +#define STATISTICS_FONT_SIZE 9 + +class TMStatistics : public QWidget +{ + Q_OBJECT +public: + + explicit TMStatistics(QWidget *parent = 0); + void initConstants(); + void buildMonitor_BURST(); + void buildMonitor_SBM1(); + void buildMonitor_SBM2(); + void buildMonitor_NORM(); + void buildMonitor(); + void incrementUnknown(); + + unsigned int UNKNOWN_nb; + unsigned int SUCC_nb; + unsigned int INCO_nb; + unsigned int NOTE_nb; + unsigned int NOTI_nb; + unsigned int ERRO_nb; + unsigned int CORR_nb; + unsigned int HK_nb; + unsigned int NORM_SWF_F0_nb; + unsigned int NORM_SWF_F1_nb; + unsigned int NORM_SWF_F2_nb; + unsigned int NORM_CWF_F3_nb; + unsigned int NORM_ASM_F0_nb; + unsigned int NORM_ASM_F1_nb; + unsigned int NORM_ASM_F2_nb; + unsigned int NORM_BP1_F0_nb; + unsigned int NORM_BP1_F1_nb; + unsigned int NORM_BP1_F2_nb; + unsigned int NORM_BP2_F0_nb; + unsigned int NORM_BP2_F1_nb; + unsigned int NORM_BP2_F2_nb; + // + unsigned int BURST_CWF_F2_nb; + unsigned int BURST_BP1_F0_nb; + unsigned int BURST_BP2_F0_nb; + unsigned int BURST_BP1_F1_nb; + unsigned int BURST_BP2_F1_nb; + unsigned int SBM1_CWF_F2_nb; + unsigned int SBM1_BP1_F0_nb; + unsigned int SBM1_BP2_F0_nb; + unsigned int SBM2_CWF_F2_nb; + unsigned int SBM2_BP1_F0_nb; + unsigned int SBM2_BP2_F0_nb; + unsigned int SBM2_BP1_F1_nb; + unsigned int SBM2_BP2_F1_nb; + + //******* + // QLabel + QLabel *label_UNKNOWN; + QLabel *label_UNKNOWN_nb; + + //*************** + // TM_LFR_TC_EXE_ + QLabel *label_SUCC; + QLabel *label_INCO; + QLabel *label_NOTE; + QLabel *label_NOTI; + QLabel *label_ERRO; + QLabel *label_CORR; + QLabel *label_HK; + // + QLabel *label_SUCC_nb; + QLabel *label_INCO_nb; + QLabel *label_NOTE_nb; + QLabel *label_NOTI_nb; + QLabel *label_ERRO_nb; + QLabel *label_CORR_nb; + QLabel *label_HK_nb; + + //*********************** + // TM_LFR_SCIENCE_NORMAL_ + QLabel *label_NORM_SWF_F0; + QLabel *label_NORM_SWF_F1; + QLabel *label_NORM_SWF_F2; + QLabel *label_NORM_CWF_F3; + QLabel *label_NORM_ASM_F0; + QLabel *label_NORM_ASM_F1; + QLabel *label_NORM_ASM_F2; + QLabel *label_NORM_BP1_F0; + QLabel *label_NORM_BP1_F1; + QLabel *label_NORM_BP1_F2; + QLabel *label_NORM_BP2_F0; + QLabel *label_NORM_BP2_F1; + QLabel *label_NORM_BP2_F2; + // + QLabel *label_NORM_SWF_F0_nb; + QLabel *label_NORM_SWF_F1_nb; + QLabel *label_NORM_SWF_F2_nb; + QLabel *label_NORM_CWF_F3_nb; + QLabel *label_NORM_ASM_F0_nb; + QLabel *label_NORM_ASM_F1_nb; + QLabel *label_NORM_ASM_F2_nb; + QLabel *label_NORM_BP1_F0_nb; + QLabel *label_NORM_BP1_F1_nb; + QLabel *label_NORM_BP1_F2_nb; + QLabel *label_NORM_BP2_F0_nb; + QLabel *label_NORM_BP2_F1_nb; + QLabel *label_NORM_BP2_F2_nb; + + //********************** + // TM_LFR_SCIENCE_BURST_ + QLabel *label_BURST_CWF_F2; + QLabel *label_BURST_BP1_F0; + QLabel *label_BURST_BP2_F0; + QLabel *label_BURST_BP1_F1; + QLabel *label_BURST_BP2_F1; + // + QLabel *label_BURST_CWF_F2_nb; + QLabel *label_BURST_BP1_F0_nb; + QLabel *label_BURST_BP2_F0_nb; + QLabel *label_BURST_BP1_F1_nb; + QLabel *label_BURST_BP2_F1_nb; + + //********************* + // TM_LFR_SCIENCE_SBM1_ + QLabel *label_SBM1_CWF_F1; + QLabel *label_SBM1_BP1_F0; + QLabel *label_SBM1_BP2_F0; + // + QLabel *label_SBM1_CWF_F1_nb; + QLabel *label_SBM1_BP1_F0_nb; + QLabel *label_SBM1_BP2_F0_nb; + + //********************* + // TM_LFR_SCIENCE_SBM2_ + QLabel *label_SBM2_CWF_F2; + QLabel *label_SBM2_BP1_F0; + QLabel *label_SBM2_BP2_F0; + QLabel *label_SBM2_BP1_F1; + QLabel *label_SBM2_BP2_F1; + // + QLabel *label_SBM2_CWF_F2_nb; + QLabel *label_SBM2_BP1_F0_nb; + QLabel *label_SBM2_BP2_F0_nb; + QLabel *label_SBM2_BP1_F1_nb; + QLabel *label_SBM2_BP2_F1_nb; + + //******** + // LAST TM + QLabel *label_PID; + QLabel *label_CAT; + QLabel *label_TYP; + QLabel *label_SUB; + QLabel *label_SID; + QLabel *label_SIZ; + QLabel *label_coarse_time; + QLabel *label_fine_time; + // + QLabel *label_PID_is; + QLabel *label_CAT_is; + QLabel *label_TYP_is; + QLabel *label_SUB_is; + QLabel *label_SID_is; + QLabel *label_SIZ_is; + QLabel *label_coarse_time_val; + QLabel *label_fine_time_val; + + // Layouts + QGridLayout *mainLayout; + QGridLayout *layout_stat; // TM stastictics + QGridLayout *layout_NORM; // TM_LFR_SCIENCE_NORMAL_ + QGridLayout *layout_BURST; // TM_LFR_SCIENCE_BURST_ + QGridLayout *layout_SBM1; // TM_LFR_SCIENCE_SBM1_ + QGridLayout *layout_SBM2; // TM_LFR_SCIENCE_SBM2_ + QGridLayout *layout_last; // last TM description + + // QPushButton + QPushButton *button_reset_stat; + + // QGroupBox + QGroupBox *groupbox_stat; + QGroupBox *groupbox_NORM; + QGroupBox *groupbox_BURST; + QGroupBox *groupbox_SBM1; + QGroupBox *groupbox_SBM2; + QGroupBox *groupbox_last; + +signals: + +public slots: + void resetStatistics(); + void updateStatistics(unsigned char pid, unsigned char cat, + unsigned char typ, unsigned char sub, + unsigned int sid, unsigned int length, + unsigned int coarse_t, unsigned int fine_t); + +}; + +#endif // TMSTATISTICS_H diff --git a/rmapplugin/wfdisplay.cpp b/rmapplugin/wfdisplay.cpp new file mode 100644 --- /dev/null +++ b/rmapplugin/wfdisplay.cpp @@ -0,0 +1,52 @@ +#include "wfdisplay.h" +#include + +WFDisplay::WFDisplay(QWidget *parent) : + QWidget(parent) +{ + waveforms_LAYOUT = new QVBoxLayout; + + spwTabWidget = new QTabWidget; + + page_f0 = new WFPage; + page_f1 = new WFPage; + page_f2 = new WFPage; + page_f3 = new WFPage; + + spwTabWidget->addTab(page_f0, tr("f0")); + spwTabWidget->addTab(page_f1, tr("f1")); + spwTabWidget->addTab(page_f2, tr("f2")); + spwTabWidget->addTab(page_f3, tr("f3")); + + waveforms_LAYOUT->addWidget(spwTabWidget); + + this->setLayout(waveforms_LAYOUT); + +} + +void WFDisplay::displayOnPlot(short *data, unsigned char num_page, unsigned char num) +{ + QVector x(XMAX), y(XMAX); + + for (int i=0; idisplayOnPlot(data, num); + break; + case 1: + page_f1->displayOnPlot(data, num); + break; + case 2: + page_f2->displayOnPlot(data, num); + break; + case 3: + page_f3->displayOnPlot(data, num); + break; + } + +} + diff --git a/rmapplugin/wfdisplay.h b/rmapplugin/wfdisplay.h new file mode 100644 --- /dev/null +++ b/rmapplugin/wfdisplay.h @@ -0,0 +1,37 @@ +#ifndef WFDISPLAY_H +#define WFDISPLAY_H + +#include +#include +#include +#include +#include +#include +#include +#include + +class WFDisplay : public QWidget +{ + Q_OBJECT +public: + explicit WFDisplay(QWidget *parent = 0); + + WFPage * page_f0; + WFPage * page_f1; + WFPage * page_f2; + WFPage * page_f3; + + QTabWidget *spwTabWidget; + + QVBoxLayout *waveforms_LAYOUT; + + void displayOnPlot(short *data, unsigned char num_page, unsigned char num); + + +signals: + +public slots: + +}; + +#endif // WFDISPLAY_H diff --git a/rmapplugin/wfpacket.cpp b/rmapplugin/wfpacket.cpp new file mode 100644 --- /dev/null +++ b/rmapplugin/wfpacket.cpp @@ -0,0 +1,24 @@ +#include "wfpacket.h" + +WFPacket::WFPacket(QObject *parent) : + QObject(parent) +{ + this->nbSamples = XMAX; + // + wf_v = (short*) malloc(2*XMAX); + wf_e1 = (short*) malloc(2*XMAX); + wf_e2 = (short*) malloc(2*XMAX); + wf_b1 = (short*) malloc(2*XMAX); + wf_b2 = (short*) malloc(2*XMAX); + wf_b3 = (short*) malloc(2*XMAX); +} + +WFPacket::~WFPacket() +{ + free(wf_v); + free(wf_e1); + free(wf_e2); + free(wf_b1); + free(wf_b2); + free(wf_b3); +} diff --git a/rmapplugin/wfpacket.h b/rmapplugin/wfpacket.h new file mode 100644 --- /dev/null +++ b/rmapplugin/wfpacket.h @@ -0,0 +1,27 @@ +#ifndef WFPACKET_H +#define WFPACKET_H + +#include +#include + +class WFPacket : public QObject +{ + Q_OBJECT +public: + explicit WFPacket(QObject *parent = 0); + ~WFPacket(); + unsigned int nbSamples; + short *wf_v; + short *wf_e1; + short *wf_e2; + short *wf_b1; + short *wf_b2; + short *wf_b3; + +signals: + +public slots: + +}; + +#endif // WFPACKET_H diff --git a/rmapplugin/wfpage.cpp b/rmapplugin/wfpage.cpp new file mode 100644 --- /dev/null +++ b/rmapplugin/wfpage.cpp @@ -0,0 +1,53 @@ +#include "wfpage.h" + +WFPage::WFPage(QWidget *parent) : + QWidget(parent) +{ + wfPlot_v = new WFPlot(); + wfPlot_e1 = new WFPlot(); + wfPlot_e2 = new WFPlot(); + wfPlot_b1 = new WFPlot(); + wfPlot_b2 = new WFPlot(); + wfPlot_b3 = new WFPlot(); + // + wfPlot_v->customPlot->setTitle("v"); + wfPlot_e1->customPlot->setTitle("e1"); + wfPlot_e2->customPlot->setTitle("e2"); + wfPlot_b1->customPlot->setTitle("b1"); + wfPlot_b2->customPlot->setTitle("b2"); + wfPlot_b3->customPlot->setTitle("b3"); + // + mainLayout = new QGridLayout; + mainLayout->addWidget(wfPlot_v, 0, 0, 1, 1); + mainLayout->addWidget(wfPlot_e1, 0, 1, 1, 1); + mainLayout->addWidget(wfPlot_e2, 0, 2, 1, 1); + mainLayout->addWidget(wfPlot_b1, 1, 0, 1, 1); + mainLayout->addWidget(wfPlot_b2, 1, 1, 1, 1); + mainLayout->addWidget(wfPlot_b3, 1, 2, 1, 1); + // + this->setLayout(mainLayout); +} + +void WFPage::displayOnPlot(short *data, unsigned char num) +{ + switch(num){ + case 0: + wfPlot_v->displayOnPlot(data, DEFAULT_SIZE); + break; + case 1: + wfPlot_e1->displayOnPlot(data, DEFAULT_SIZE); + break; + case 2: + wfPlot_e2->displayOnPlot(data, DEFAULT_SIZE); + break; + case 3: + wfPlot_b1->displayOnPlot(data, DEFAULT_SIZE); + break; + case 4: + wfPlot_b2->displayOnPlot(data, DEFAULT_SIZE); + break; + case 5: + wfPlot_b3->displayOnPlot(data, DEFAULT_SIZE); + break; + } +} diff --git a/rmapplugin/wfpage.h b/rmapplugin/wfpage.h new file mode 100644 --- /dev/null +++ b/rmapplugin/wfpage.h @@ -0,0 +1,31 @@ +#ifndef WFPAGE_H +#define WFPAGE_H + +#include +#include +#include + +class WFPage : public QWidget +{ + Q_OBJECT +public: + explicit WFPage(QWidget *parent = 0); + + WFPlot *wfPlot_v; + WFPlot *wfPlot_e1; + WFPlot *wfPlot_e2; + WFPlot *wfPlot_b1; + WFPlot *wfPlot_b2; + WFPlot *wfPlot_b3; + + QGridLayout *mainLayout; + + void displayOnPlot(short *data, unsigned char num); + +signals: + +public slots: + +}; + +#endif // WFPAGE_H diff --git a/rmapplugin/wfplot.cpp b/rmapplugin/wfplot.cpp new file mode 100644 --- /dev/null +++ b/rmapplugin/wfplot.cpp @@ -0,0 +1,117 @@ +#include "wfplot.h" +#include + +WFPlot::WFPlot(QWidget *parent) : + QWidget(parent) +{ + // Create Fonts + QFont font; + font = QFont(this->fontInfo().family(), FONT_SIZE_WAVEFORM_TITLE, QFont::Light); + customPlot = new QCustomPlot(); + mainLayout = new QVBoxLayout(); + + customPlot->setInteractions(QCustomPlot::iRangeDrag | QCustomPlot::iRangeZoom | QCustomPlot::iSelectAxes | + QCustomPlot::iSelectLegend | QCustomPlot::iSelectPlottables | QCustomPlot::iSelectTitle); + customPlot->setRangeDrag(Qt::Horizontal|Qt::Vertical); + customPlot->setRangeZoom(Qt::Horizontal|Qt::Vertical); + customPlot->xAxis->setRange(0, XMAX); + customPlot->yAxis->setRange(-YMAX, YMAX); + customPlot->setTitleFont(font); + //customPlot->setupFullAxesBox(); + + customPlot->addGraph(); + + mainLayout->addWidget(customPlot); + + this->setLayout(mainLayout); + + // connect slot that ties some axis selections together (especially opposite axes): + connect(customPlot, SIGNAL(selectionChangedByUser()), this, SLOT(selectionChanged())); + // connect slots that takes care that when an axis is selected, only that direction can be dragged and zoomed: + connect(customPlot, SIGNAL(mousePress(QMouseEvent*)), this, SLOT(mousePress())); + connect(customPlot, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(mouseWheel())); +} + +void WFPlot::selectionChanged() +{ + /* + normally, axis base line, axis tick labels and axis labels are selectable separately, but we want + the user only to be able to select the axis as a whole, so we tie the selected states of the tick labels + and the axis base line together. However, the axis label shall be selectable individually. + + The selection state of the left and right axes shall be synchronized as well as the state of the + bottom and top axes. + + Further, we want to synchronize the selection of the graphs with the selection state of the respective + legend item belonging to that graph. So the user can select a graph by either clicking on the graph itself + or on its legend item. + */ + + // make top and bottom axes be selected synchronously, and handle axis and tick labels as one selectable object: + if (customPlot->xAxis->selected().testFlag(QCPAxis::spAxis) || customPlot->xAxis->selected().testFlag(QCPAxis::spTickLabels) || + customPlot->xAxis2->selected().testFlag(QCPAxis::spAxis) || customPlot->xAxis2->selected().testFlag(QCPAxis::spTickLabels)) + { + customPlot->xAxis2->setSelected(QCPAxis::spAxis|QCPAxis::spTickLabels); + customPlot->xAxis->setSelected(QCPAxis::spAxis|QCPAxis::spTickLabels); + } + // make left and right axes be selected synchronously, and handle axis and tick labels as one selectable object: + if (customPlot->yAxis->selected().testFlag(QCPAxis::spAxis) || customPlot->yAxis->selected().testFlag(QCPAxis::spTickLabels) || + customPlot->yAxis2->selected().testFlag(QCPAxis::spAxis) || customPlot->yAxis2->selected().testFlag(QCPAxis::spTickLabels)) + { + customPlot->yAxis2->setSelected(QCPAxis::spAxis|QCPAxis::spTickLabels); + customPlot->yAxis->setSelected(QCPAxis::spAxis|QCPAxis::spTickLabels); + } + + // synchronize selection of graphs with selection of corresponding legend items: + for (int i=0; igraphCount(); ++i) + { + QCPGraph *graph = customPlot->graph(i); + QCPPlottableLegendItem *item = customPlot->legend->itemWithPlottable(graph); + if (item->selected() || graph->selected()) + { + item->setSelected(true); + graph->setSelected(true); + } + } +} + +void WFPlot::mousePress() +{ + // if an axis is selected, only allow the direction of that axis to be dragged + // if no axis is selected, both directions may be dragged + + if (customPlot->xAxis->selected().testFlag(QCPAxis::spAxis)) + customPlot->setRangeDrag(customPlot->xAxis->orientation()); + else if (customPlot->yAxis->selected().testFlag(QCPAxis::spAxis)) + customPlot->setRangeDrag(customPlot->yAxis->orientation()); + else + customPlot->setRangeDrag(Qt::Horizontal|Qt::Vertical); +} + +void WFPlot::mouseWheel() +{ + // if an axis is selected, only allow the direction of that axis to be zoomed + // if no axis is selected, both directions may be zoomed + + if (customPlot->xAxis->selected().testFlag(QCPAxis::spAxis)) + customPlot->setRangeZoom(customPlot->xAxis->orientation()); + else if (customPlot->yAxis->selected().testFlag(QCPAxis::spAxis)) + customPlot->setRangeZoom(customPlot->yAxis->orientation()); + else + customPlot->setRangeZoom(Qt::Horizontal|Qt::Vertical); +} + +void WFPlot::displayOnPlot(short *data, unsigned int size) +{ + QVector x(size), y(size); + + for (unsigned int i=0; igraph(0)->setData(x, y); + customPlot->replot(); + +} diff --git a/rmapplugin/wfplot.h b/rmapplugin/wfplot.h new file mode 100644 --- /dev/null +++ b/rmapplugin/wfplot.h @@ -0,0 +1,28 @@ +#ifndef WFPLOT_H +#define WFPLOT_H + +#include +#include +#include +#include + +class WFPlot : public QWidget +{ + Q_OBJECT +public: + explicit WFPlot(QWidget *parent = 0); + + QCustomPlot * customPlot; + void displayOnPlot(short *data, unsigned int size); + QVBoxLayout *mainLayout; + +signals: + +public slots: + void selectionChanged(); + void mousePress(); + void mouseWheel(); + +}; + +#endif // WFPLOT_H