From 47f193b7dea740d95b0827855d0d4d3faefe3b72 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sat, 14 Jul 2012 21:08:12 -0500 Subject: [PATCH] Fix scope --- clients/tde/src/part/scope/layout.ui | 26 +++++++++ clients/tde/src/part/scope/part.cpp | 32 ++++++++++- clients/tde/src/part/scope/part.h | 2 + clients/tde/src/widgets/tracewidget.cpp | 55 +++++++++++++------ clients/tde/src/widgets/tracewidget.h | 4 +- .../gpib_server_lin/src/scope_functions.cpp | 26 ++++++++- 6 files changed, 123 insertions(+), 22 deletions(-) diff --git a/clients/tde/src/part/scope/layout.ui b/clients/tde/src/part/scope/layout.ui index 9b69b57..6a28939 100644 --- a/clients/tde/src/part/scope/layout.ui +++ b/clients/tde/src/part/scope/layout.ui @@ -159,6 +159,32 @@ + + + groupOscilloscopeAcquisitionControls + + + Acquisition Controls + + + + + acqStart + + + Start Acquisition + + + + + acqStop + + + Stop Acquisition + + + + diff --git a/clients/tde/src/part/scope/part.cpp b/clients/tde/src/part/scope/part.cpp index d12fd32..aefaa20 100644 --- a/clients/tde/src/part/scope/part.cpp +++ b/clients/tde/src/part/scope/part.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include //access() @@ -93,6 +94,9 @@ ScopePart::ScopePart( TQWidget *parentWidget, const char *widgetName, TQObject * m_base->saRefLevel->setFloatMax(128); m_base->saRefLevel->setLineStep(1); + connect(m_base->acqStart, SIGNAL(clicked()), this, SLOT(startDAQ())); + connect(m_base->acqStop, SIGNAL(clicked()), this, SLOT(stopDAQ())); + connect(m_base->saRefLevel, SIGNAL(floatValueChanged(double)), this, SLOT(saRefLevelChanged(double))); TQTimer::singleShot(0, this, TQT_SLOT(postInit())); @@ -711,6 +715,15 @@ void ScopePart::mainEventLoop() { } } } + else if (m_commHandlerCommandState == 3) { + if (stopTraceUpdate == false) { + m_commHandlerCommandState = 0; + EXEC_NEXT_STATE_IMMEDIATELY + } + else { + setTickerMessage(i18n("Data acquisition stopped")); + } + } } } else { @@ -727,8 +740,25 @@ void ScopePart::postProcessTrace() { return; } +void ScopePart::startDAQ() { + // RAJA FIXME + // Also process lockouts... +} + +void ScopePart::stopDAQ() { + // RAJA FIXME + // Also process lockouts... + + if (m_commHandlerMode < 2) { + stopTraceUpdate = true; + m_commHandlerMode = 1; + m_commHandlerCommandState = 3; + mainEventLoop(); + } +} + void ScopePart::updateZoomWidgetLimits(const TQRectF& zoomRect) { - for (int traceno=1; traceno<=m_maxNumberOfTraces; traceno++) { + for (int traceno=0; tracenodisplayLimits(traceno); double widthSpan = fullZoomRect.width()-fullZoomRect.x(); double heightSpan = fullZoomRect.height()-fullZoomRect.y(); diff --git a/clients/tde/src/part/scope/part.h b/clients/tde/src/part/scope/part.h index 55c20c0..7034300 100644 --- a/clients/tde/src/part/scope/part.h +++ b/clients/tde/src/part/scope/part.h @@ -49,6 +49,8 @@ namespace RemoteLab void connectionStatusChangedCallback(); void setTickerMessage(TQString message); void mainEventLoop(); + void startDAQ(); + void stopDAQ(); virtual void postProcessTrace(); void saRefLevelChanged(double); diff --git a/clients/tde/src/widgets/tracewidget.cpp b/clients/tde/src/widgets/tracewidget.cpp index 2d44afc..eda2c53 100644 --- a/clients/tde/src/widgets/tracewidget.cpp +++ b/clients/tde/src/widgets/tracewidget.cpp @@ -115,11 +115,20 @@ TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), p graphStatusLabel->setPaletteBackgroundColor(labelParent->paletteBackgroundColor()); graphStatusLabel->setPaletteForegroundColor(color); graphStatusLabel->setAlignment(TQt::AlignHCenter|TQt::AlignVCenter|TQt::SingleLine); + TQFont font; + font = graphStatusLabel->font(); + font.setPointSize(font.pointSize()-1); + graphStatusLabel->setFont(font); + graphStatusLabel->setText(""); graphStatusLabel->hide(); graphStatusLabelInner = new TQLabel(labelParent); graphStatusLabelInner->setPaletteBackgroundColor(labelParent->paletteBackgroundColor()); graphStatusLabelInner->setPaletteForegroundColor(color); graphStatusLabelInner->setAlignment(TQt::AlignHCenter|TQt::AlignVCenter|TQt::SingleLine); + font = graphStatusLabelInner->font(); + font.setPointSize(font.pointSize()-1); + graphStatusLabelInner->setFont(font); + graphStatusLabelInner->setText(""); graphStatusLabelInner->hide(); singleIncrBtn = new TQToolButton(TQt::UpArrow, labelParent); singleDecrBtn = new TQToolButton(TQt::DownArrow, labelParent); @@ -173,9 +182,17 @@ void TraceData::drawTrace(TQPainter* p, int graticule_width, int graticule_heigh y = ((((sampleArray[n]+offset)-topEdge)/(bottomEdge-topEdge))*(graticule_height)); x2 = (((positionArray[n+1]-leftEdge)/(rightEdge-leftEdge))*(graticule_width)); y2 = ((((sampleArray[n+1]+offset)-topEdge)/(bottomEdge-topEdge))*(graticule_height)); - if ((x > 0) && (x < graticule_width) && (y > 0) && (y < graticule_height) && (x2 > 0) && (x2 < graticule_width) && (y2 > 0) && (y2 < graticule_height)) { - p->drawLine(x, y, x2, y2); - } + + if (x < 0) x = 0; + if (x > graticule_width) x = graticule_width; + if (y < 0) y = 0; + if (y > graticule_width) y = graticule_height; + if (x2 < 0) x2 = 0; + if (x2 > graticule_width) x2 = graticule_width; + if (y2 < 0) y2 = 0; + if (y2 > graticule_width) y2 = graticule_height; + + p->drawLine(x, y, x2, y2); } } } @@ -541,7 +558,7 @@ void GraticuleWidget::mouseMoveEvent(TQMouseEvent *e) { } else { for (uint trace=0;tracem_traceArray.count();trace++) { - m_base->m_traceArray[trace]->graphStatusLabel->setText(""); + m_base->m_traceArray[trace]->graphStatusLabel->setText(""); m_base->m_traceArray[trace]->graphStatusLabelInner->setText(m_base->m_traceArray[trace]->graphStatusLabel->text()); } } @@ -572,7 +589,7 @@ void GraticuleWidget::enterEvent(TQEvent *) { void GraticuleWidget::leaveEvent(TQEvent *) { for (uint trace=0;tracem_traceArray.count();trace++) { - m_base->m_traceArray[trace]->graphStatusLabel->setText(""); + m_base->m_traceArray[trace]->graphStatusLabel->setText(""); m_base->m_traceArray[trace]->graphStatusLabelInner->setText(m_base->m_traceArray[trace]->graphStatusLabel->text()); } } @@ -592,8 +609,8 @@ TraceWidget::TraceWidget(TQWidget* parent, const char* name) : TQWidget(parent, m_traceLabelLayout = new TQGridLayout; m_infoLabelLayout = new TQGridLayout; m_cursorLabelLayout = new TQGridLayout; - m_statusLabelLayout = new TQGridLayout; - m_statusLabelLayoutInner = new TQGridLayout; + m_statusLabelLayout = new TQVBoxLayout; + m_statusLabelLayoutInner = new TQVBoxLayout; m_primaryLayout->addLayout(m_traceLabelLayout, 255, 0); m_primaryLayout->addLayout(m_rightPaneLayout, 0, 255); m_primaryLayout->addLayout(m_statusLabelLayout, 255, 255); @@ -720,16 +737,18 @@ void TraceWidget::updateCursorText() { // If this is a horizontal cursor, list all vertical positions for all channels // If this is a vertical cursor, list the horizontal positions for all channels for (uint trace=0;tracerightEdge-m_traceArray[trace]->leftEdge); - double vertical_range = (m_traceArray[trace]->bottomEdge-m_traceArray[trace]->topEdge); + if (m_traceArray[trace]->enabled) { + double horizontal_range = (m_traceArray[trace]->rightEdge-m_traceArray[trace]->leftEdge); + double vertical_range = (m_traceArray[trace]->bottomEdge-m_traceArray[trace]->topEdge); - if (m_cursorArray[cursor]->orientation == TQt::Horizontal) { - double realCursorPosition = (m_traceArray[trace]->topEdge+((m_cursorArray[cursor]->position/100.0)*vertical_range)); - cursorText.append(TQString("
%1: %2").arg(m_traceArray[trace]->traceName).arg(prettyFormat(realCursorPosition, vertical_range, m_traceArray[trace]->verticalUnits))); - } - else { - double realCursorPosition = (m_traceArray[trace]->leftEdge+((m_cursorArray[cursor]->position/100.0)*horizontal_range)); - cursorText.append(TQString("
%1: %2").arg(m_traceArray[trace]->traceName).arg(prettyFormat(realCursorPosition, horizontal_range, m_traceArray[trace]->horizontalUnits))); + if (m_cursorArray[cursor]->orientation == TQt::Horizontal) { + double realCursorPosition = (m_traceArray[trace]->topEdge+((m_cursorArray[cursor]->position/100.0)*vertical_range)); + cursorText.append(TQString("
%1: %2").arg(m_traceArray[trace]->traceName).arg(prettyFormat(realCursorPosition, vertical_range, m_traceArray[trace]->verticalUnits))); + } + else { + double realCursorPosition = (m_traceArray[trace]->leftEdge+((m_cursorArray[cursor]->position/100.0)*horizontal_range)); + cursorText.append(TQString("
%1: %2").arg(m_traceArray[trace]->traceName).arg(prettyFormat(realCursorPosition, horizontal_range, m_traceArray[trace]->horizontalUnits))); + } } } @@ -1212,8 +1231,8 @@ void TraceWidget::resizeTraceArray(uint newsize) { m_traceLabelLayout->addWidget(m_traceArray[i]->singleIncrBtn, 0, (i*2)+1); m_traceLabelLayout->addWidget(m_traceArray[i]->posResetBtn, 1, (i*2)+1); m_traceLabelLayout->addWidget(m_traceArray[i]->singleDecrBtn, 2, (i*2)+1); - m_statusLabelLayout->addWidget(m_traceArray[i]->graphStatusLabel, i, 0); - m_statusLabelLayoutInner->addWidget(m_traceArray[i]->graphStatusLabelInner, i, 0); + m_statusLabelLayout->insertWidget(i, m_traceArray[i]->graphStatusLabel); + m_statusLabelLayoutInner->insertWidget(i, m_traceArray[i]->graphStatusLabelInner); } } } diff --git a/clients/tde/src/widgets/tracewidget.h b/clients/tde/src/widgets/tracewidget.h index 0536ee9..0dfaead 100644 --- a/clients/tde/src/widgets/tracewidget.h +++ b/clients/tde/src/widgets/tracewidget.h @@ -234,8 +234,8 @@ class TraceWidget : public TQWidget TQGridLayout* m_traceLabelLayout; TQGridLayout* m_infoLabelLayout; TQGridLayout* m_cursorLabelLayout; - TQGridLayout* m_statusLabelLayout; - TQGridLayout* m_statusLabelLayoutInner; + TQVBoxLayout* m_statusLabelLayout; + TQVBoxLayout* m_statusLabelLayoutInner; GraticuleWidget* m_graticuleWidget; friend class GraticuleWidget; diff --git a/servers/gpib_server_lin/src/scope_functions.cpp b/servers/gpib_server_lin/src/scope_functions.cpp index deda671..fb7d9a1 100644 --- a/servers/gpib_server_lin/src/scope_functions.cpp +++ b/servers/gpib_server_lin/src/scope_functions.cpp @@ -632,6 +632,13 @@ clock_gettime(CLOCK_REALTIME, &tp1); #ifdef ENABLE_EXTRA_DEBUGGING printf("[DEBG] Writing: %s\n\r", falpha); #endif + if (gpib_write(gpibDevice, falpha) != 0) { + return -1; + } + sprintf(falpha,"DATA:STOP 65535"); + #ifdef ENABLE_EXTRA_DEBUGGING + printf("[DEBG] Writing: %s\n\r", falpha); + #endif if (gpib_write(gpibDevice, falpha) == 0) { #ifdef ENABLE_PROFILING clock_gettime(CLOCK_REALTIME, &tp2); @@ -662,7 +669,7 @@ printf("[PROFILE] %f s\n\r", ((tp3.tv_nsec+(tp3.tv_sec*1e9))-(tp2.tv_nsec+(tp2.t clock_gettime(CLOCK_REALTIME, &tp4); printf("[PROFILE] %f s\n\r", ((tp4.tv_nsec+(tp4.tv_sec*1e9))-(tp3.tv_nsec+(tp3.tv_sec*1e9)))/1e9); #endif - TQString preamble(segarray); // RAJA UNCOMMENT ME + TQString preamble(segarray); TQStringList resultPairs = TQStringList::split(";", preamble, FALSE); // Find/initialize critical data values double ymult; @@ -858,6 +865,14 @@ int scope_get_channel_seconds_div(double * retval, int desired_channel, const ch return 2; } + sprintf(falpha,"DATA:STOP 65535"); + #ifdef ENABLE_EXTRA_DEBUGGING + printf("[DEBG] Writing: %s\n\r", falpha); + #endif + if (gpib_write(gpibDevice, falpha) != 0) { + return 2; + } + sprintf(falpha,"WFMPRE:CH%d:XINCR?",desired_channel); #ifdef ENABLE_EXTRA_DEBUGGING printf("[DEBG] Writing: %s\n\r", falpha); @@ -910,6 +925,7 @@ int scope_get_channel_seconds_div(double * retval, int desired_channel, const ch else { floatstring[ai]=0; *retval = ((atof(floatstring)*xincr)/scope_get_number_of_vertical_divisions(scopeType, gpibDevice)); +printf("[RAJA DEBUG 650.0] nr_p: %f, xincr: %E, vert_divs: %d, s/div: %f\n\r", atof(floatstring), xincr, scope_get_number_of_vertical_divisions(scopeType, gpibDevice), *retval); fflush(stdout); } #ifdef ENABLE_EXTRA_DEBUGGING @@ -944,6 +960,14 @@ int scope_get_channel_sample_count(unsigned long * retval, int desired_channel, return 2; } + sprintf(falpha,"DATA:STOP 65535"); + #ifdef ENABLE_EXTRA_DEBUGGING + printf("[DEBG] Writing: %s\n\r", falpha); + #endif + if (gpib_write(gpibDevice, falpha) != 0) { + return 2; + } + sprintf(falpha,"WFMPRE:CH%d:NR_P?", desired_channel); #ifdef ENABLE_EXTRA_DEBUGGING printf("[DEBG] Writing: %s\n\r", falpha);