Commit 22ac8cf45151f79edacd4418f3f823b5541c36e3
1 parent
497e11b1
Updated export functionality and bulk command enum
Showing
7 changed files
with
294 additions
and
139 deletions
openhantek/ChangeLog
| ... | ... | @@ -45,3 +45,9 @@ |
| 45 | 45 | * Moved constants.h to dso.h and added functions that return strings for enums |
| 46 | 46 | * Sample buffer size above scope shows real sample count got from oscilloscope |
| 47 | 47 | * Documentation updated |
| 48 | + | |
| 49 | +2010-08-23 Oliver Haag <oliver.haag@gmail.com> | |
| 50 | +* Saving color settings for printing too | |
| 51 | +* Added zoomed scope and markers to exports | |
| 52 | +* Darker default colors for channels in print mode | |
| 53 | +* Added enum values for DSO-5200 bulk commands | ... | ... |
openhantek/mainpage.dox
| ... | ... | @@ -15,7 +15,7 @@ You need the development packages for the following libraries to build OpenHante |
| 15 | 15 | <li><a href="http://www.opengl.org/">OpenGL</a></li> |
| 16 | 16 | </ul> |
| 17 | 17 | |
| 18 | -\subsection ssec_dependencies Building | |
| 18 | +\subsection ssec_building Building | |
| 19 | 19 | After installing these you can build it by running: |
| 20 | 20 | <pre> |
| 21 | 21 | $ qmake |
| ... | ... | @@ -23,7 +23,7 @@ After installing these you can build it by running: |
| 23 | 23 | $ make install |
| 24 | 24 | </pre> |
| 25 | 25 | |
| 26 | -\subsection ssec_dependencies Build options | |
| 26 | +\subsection ssec_options Build options | |
| 27 | 27 | You can set environment variables to set various build options (Done best by prepending env VARIABLE=value to the qmake command). The known environment variables are: |
| 28 | 28 | <ul> |
| 29 | 29 | <li> |
| ... | ... | @@ -44,7 +44,7 @@ You need the tool dsoextractfw from the sourceforge page too extract the firmwar |
| 44 | 44 | <pre> |
| 45 | 45 | $ make |
| 46 | 46 | </pre> |
| 47 | -After building it you have to place the DSO*1.SYS file into the same directory and run the built binary: | |
| 47 | +After building it, you have to place the DSO*1.SYS file into the same directory and run the built binary: | |
| 48 | 48 | <pre> |
| 49 | 49 | $ ./dsoextractfw |
| 50 | 50 | </pre> | ... | ... |
openhantek/src/dsowidget.cpp
| ... | ... | @@ -278,7 +278,7 @@ void DsoWidget::setMeasurementVisible(unsigned int channel, bool visible) { |
| 278 | 278 | /// \brief Update the label about the marker measurements |
| 279 | 279 | void DsoWidget::updateMarkerDetails() { |
| 280 | 280 | double divs = fabs(this->settings->scope.horizontal.marker[1] - this->settings->scope.horizontal.marker[0]); |
| 281 | - double time = divs * this->settings->scope.horizontal.timebase; | |
| 281 | + double time = divs * this->settings->scope.horizontal.timebase; | |
| 282 | 282 | |
| 283 | 283 | if(this->settings->view.zoom) { |
| 284 | 284 | this->markerInfoLabel->setText(tr("Zoom x%L1").arg(DIVS_TIME / divs, -1, 'g', 3)); | ... | ... |
openhantek/src/exporter.cpp
| ... | ... | @@ -22,6 +22,8 @@ |
| 22 | 22 | //////////////////////////////////////////////////////////////////////////////// |
| 23 | 23 | |
| 24 | 24 | |
| 25 | +#include <cmath> | |
| 26 | + | |
| 25 | 27 | #include <QImage> |
| 26 | 28 | #include <QMutex> |
| 27 | 29 | #include <QPainter> |
| ... | ... | @@ -142,7 +144,7 @@ bool Exporter::doExport() { |
| 142 | 144 | // Draw the measurement table |
| 143 | 145 | stretchBase = (double) (paintDevice->width() - lineHeight * 6) / 10; |
| 144 | 146 | int channelCount = 0; |
| 145 | - for(int channel = 0; channel < this->settings->scope.voltage.count(); channel++) { | |
| 147 | + for(int channel = this->settings->scope.voltage.count() - 1; channel >= 0; channel--) { | |
| 146 | 148 | if(this->settings->scope.voltage[channel].used || this->settings->scope.spectrum[channel].used) { |
| 147 | 149 | channelCount++; |
| 148 | 150 | double top = (double) paintDevice->height() - channelCount * lineHeight; |
| ... | ... | @@ -170,130 +172,188 @@ bool Exporter::doExport() { |
| 170 | 172 | } |
| 171 | 173 | } |
| 172 | 174 | |
| 175 | + // Draw the marker table | |
| 176 | + double scopeHeight; | |
| 177 | + stretchBase = (double) (paintDevice->width() - lineHeight * 10) / 4; | |
| 178 | + painter.setPen(colorValues->text); | |
| 179 | + | |
| 180 | + // Calculate variables needed for zoomed scope | |
| 181 | + double divs = fabs(this->settings->scope.horizontal.marker[1] - this->settings->scope.horizontal.marker[0]); | |
| 182 | + double time = divs * this->settings->scope.horizontal.timebase; | |
| 183 | + double zoomFactor = DIVS_TIME / divs; | |
| 184 | + double zoomOffset = (this->settings->scope.horizontal.marker[0] + this->settings->scope.horizontal.marker[1]) / 2; | |
| 185 | + | |
| 186 | + if(this->settings->view.zoom) { | |
| 187 | + scopeHeight = (double) (paintDevice->height() - (channelCount + 5) * lineHeight) / 2; | |
| 188 | + double top = 2.5 * lineHeight + scopeHeight; | |
| 189 | + | |
| 190 | + painter.drawText(QRectF(0, top, stretchBase, lineHeight), tr("Zoom x%L1").arg(DIVS_TIME / divs, -1, 'g', 3)); | |
| 191 | + | |
| 192 | + painter.drawText(QRectF(lineHeight * 10, top, stretchBase, lineHeight), Helper::valueToString(time, Helper::UNIT_SECONDS, 4), QTextOption(Qt::AlignRight)); | |
| 193 | + painter.drawText(QRectF(lineHeight * 10 + stretchBase, top, stretchBase, lineHeight), Helper::valueToString(1.0 / time, Helper::UNIT_HERTZ, 4), QTextOption(Qt::AlignRight)); | |
| 194 | + | |
| 195 | + painter.drawText(QRectF(lineHeight * 10 + stretchBase * 2, top, stretchBase, lineHeight), Helper::valueToString(time / DIVS_TIME, Helper::UNIT_SECONDS, 3) + tr("/div"), QTextOption(Qt::AlignRight)); | |
| 196 | + painter.drawText(QRectF(lineHeight * 10 + stretchBase * 3, top, stretchBase, lineHeight), Helper::valueToString(divs * this->settings->scope.horizontal.frequencybase / DIVS_TIME, Helper::UNIT_HERTZ, 3) + tr("/div"), QTextOption(Qt::AlignRight)); | |
| 197 | + } | |
| 198 | + else { | |
| 199 | + scopeHeight = (double) paintDevice->height() - (channelCount + 4) * lineHeight; | |
| 200 | + double top = 2.5 * lineHeight + scopeHeight; | |
| 201 | + | |
| 202 | + painter.drawText(QRectF(0, top, stretchBase, lineHeight), tr("Marker 1/2")); | |
| 203 | + | |
| 204 | + painter.drawText(QRectF(lineHeight * 10, top, stretchBase * 2, lineHeight), Helper::valueToString(time, Helper::UNIT_SECONDS, 4), QTextOption(Qt::AlignRight)); | |
| 205 | + painter.drawText(QRectF(lineHeight * 10 + stretchBase * 2, top, stretchBase * 2, lineHeight), Helper::valueToString(1.0 / time, Helper::UNIT_HERTZ, 4), QTextOption(Qt::AlignRight)); | |
| 206 | + } | |
| 207 | + | |
| 173 | 208 | // Set DIVS_TIME x DIVS_VOLTAGE matrix for oscillograph |
| 174 | - double screenHeight = (double) paintDevice->height() - (channelCount + 3) * lineHeight; | |
| 175 | - painter.setMatrix(QMatrix((paintDevice->width() - 1) / DIVS_TIME, 0, 0, -(screenHeight - 1) / DIVS_VOLTAGE, (double) (paintDevice->width() - 1) / 2, (screenHeight - 1) / 2 + lineHeight * 2), false); | |
| 209 | + painter.setMatrix(QMatrix((paintDevice->width() - 1) / DIVS_TIME, 0, 0, -(scopeHeight - 1) / DIVS_VOLTAGE, (double) (paintDevice->width() - 1) / 2, (scopeHeight - 1) / 2 + lineHeight * 1.5), false); | |
| 176 | 210 | |
| 177 | 211 | // Draw the graphs |
| 178 | 212 | painter.setRenderHint(QPainter::Antialiasing); |
| 179 | 213 | painter.setBrush(Qt::NoBrush); |
| 180 | 214 | |
| 181 | - switch(this->settings->scope.horizontal.format) { | |
| 182 | - case Dso::GRAPHFORMAT_TY: | |
| 183 | - // Add graphs for channels | |
| 184 | - for(int channel = 0 ; channel < this->settings->scope.voltage.count(); channel++) { | |
| 185 | - if(this->settings->scope.voltage[channel].used) { | |
| 186 | - painter.setPen(colorValues->voltage[channel]); | |
| 187 | - | |
| 188 | - // What's the horizontal distance between sampling points? | |
| 189 | - double horizontalFactor = this->dataAnalyzer->data(channel)->samples.voltage.interval / this->settings->scope.horizontal.timebase; | |
| 190 | - // How many samples are visible? | |
| 191 | - unsigned int lastPosition = DIVS_TIME / horizontalFactor; | |
| 192 | - if(lastPosition >= this->dataAnalyzer->data(channel)->samples.voltage.count) | |
| 193 | - lastPosition = this->dataAnalyzer->data(channel)->samples.voltage.count - 1; | |
| 194 | - | |
| 195 | - // Draw graph | |
| 196 | - QPointF *graph = new QPointF[lastPosition + 1]; | |
| 197 | - for(unsigned int position = 0; position <= lastPosition; position++) | |
| 198 | - graph[position] = QPointF(position * horizontalFactor - DIVS_TIME / 2, this->dataAnalyzer->data(channel)->samples.voltage.sample[position] / this->settings->scope.voltage[channel].gain + this->settings->scope.voltage[channel].offset); | |
| 199 | - painter.drawPolyline(graph, lastPosition + 1); | |
| 215 | + for(int zoomed = 0; zoomed < (this->settings->view.zoom ? 2 : 1); zoomed++) { | |
| 216 | + switch(this->settings->scope.horizontal.format) { | |
| 217 | + case Dso::GRAPHFORMAT_TY: | |
| 218 | + // Add graphs for channels | |
| 219 | + for(int channel = 0 ; channel < this->settings->scope.voltage.count(); channel++) { | |
| 220 | + if(this->settings->scope.voltage[channel].used) { | |
| 221 | + painter.setPen(colorValues->voltage[channel]); | |
| 222 | + | |
| 223 | + // What's the horizontal distance between sampling points? | |
| 224 | + double horizontalFactor = this->dataAnalyzer->data(channel)->samples.voltage.interval / this->settings->scope.horizontal.timebase; | |
| 225 | + // How many samples are visible? | |
| 226 | + double centerPosition, centerOffset; | |
| 227 | + if(zoomed) { | |
| 228 | + centerPosition = (zoomOffset + DIVS_TIME / 2) / horizontalFactor; | |
| 229 | + centerOffset = DIVS_TIME / horizontalFactor / zoomFactor / 2; | |
| 230 | + } | |
| 231 | + else { | |
| 232 | + centerPosition = DIVS_TIME / 2 / horizontalFactor; | |
| 233 | + centerOffset = DIVS_TIME / horizontalFactor / 2; | |
| 234 | + } | |
| 235 | + unsigned int firstPosition = qMax((int) (centerPosition - centerOffset), 0); | |
| 236 | + unsigned int lastPosition = qMin((int) (centerPosition + centerOffset), (int) this->dataAnalyzer->data(channel)->samples.voltage.count - 1); | |
| 237 | + | |
| 238 | + // Draw graph | |
| 239 | + QPointF *graph = new QPointF[lastPosition - firstPosition + 1]; | |
| 240 | + for(unsigned int position = firstPosition; position <= lastPosition; position++) | |
| 241 | + graph[position - firstPosition] = QPointF(position * horizontalFactor - DIVS_TIME / 2, this->dataAnalyzer->data(channel)->samples.voltage.sample[position] / this->settings->scope.voltage[channel].gain + this->settings->scope.voltage[channel].offset); | |
| 242 | + painter.drawPolyline(graph, lastPosition - firstPosition + 1); | |
| 243 | + } | |
| 200 | 244 | } |
| 201 | - } | |
| 202 | - | |
| 203 | - // Add spectrum graphs | |
| 204 | - for (int channel = 0; channel < this->settings->scope.spectrum.count(); channel++) { | |
| 205 | - if(this->settings->scope.spectrum[channel].used) { | |
| 206 | - painter.setPen(colorValues->spectrum[channel]); | |
| 207 | - | |
| 208 | - // What's the horizontal distance between sampling points? | |
| 209 | - double horizontalFactor = this->dataAnalyzer->data(channel)->samples.spectrum.interval / this->settings->scope.horizontal.frequencybase; | |
| 210 | - // How many samples are visible? | |
| 211 | - unsigned int lastPosition = DIVS_TIME / horizontalFactor; | |
| 212 | - if(lastPosition >= this->dataAnalyzer->data(channel)->samples.spectrum.count) | |
| 213 | - lastPosition = this->dataAnalyzer->data(channel)->samples.spectrum.count - 1; | |
| 214 | - | |
| 215 | - // Draw graph | |
| 216 | - QPointF *graph = new QPointF[lastPosition + 1]; | |
| 217 | - for(unsigned int position = 0; position <= lastPosition; position++) | |
| 218 | - graph[position] = QPointF(position * horizontalFactor - DIVS_TIME / 2, this->dataAnalyzer->data(channel)->samples.spectrum.sample[position] / this->settings->scope.spectrum[channel].magnitude + this->settings->scope.spectrum[channel].offset); | |
| 219 | - painter.drawPolyline(graph, lastPosition + 1); | |
| 245 | + | |
| 246 | + // Add spectrum graphs | |
| 247 | + for (int channel = 0; channel < this->settings->scope.spectrum.count(); channel++) { | |
| 248 | + if(this->settings->scope.spectrum[channel].used) { | |
| 249 | + painter.setPen(colorValues->spectrum[channel]); | |
| 250 | + | |
| 251 | + // What's the horizontal distance between sampling points? | |
| 252 | + double horizontalFactor = this->dataAnalyzer->data(channel)->samples.spectrum.interval / this->settings->scope.horizontal.frequencybase; | |
| 253 | + // How many samples are visible? | |
| 254 | + double centerPosition, centerOffset; | |
| 255 | + if(zoomed) { | |
| 256 | + centerPosition = (zoomOffset + DIVS_TIME / 2) / horizontalFactor; | |
| 257 | + centerOffset = DIVS_TIME / horizontalFactor / zoomFactor / 2; | |
| 258 | + } | |
| 259 | + else { | |
| 260 | + centerPosition = DIVS_TIME / 2 / horizontalFactor; | |
| 261 | + centerOffset = DIVS_TIME / horizontalFactor / 2; | |
| 262 | + } | |
| 263 | + unsigned int firstPosition = qMax((int) (centerPosition - centerOffset), 0); | |
| 264 | + unsigned int lastPosition = qMin((int) (centerPosition + centerOffset), (int) this->dataAnalyzer->data(channel)->samples.spectrum.count - 1); | |
| 265 | + | |
| 266 | + // Draw graph | |
| 267 | + QPointF *graph = new QPointF[lastPosition - firstPosition + 1]; | |
| 268 | + for(unsigned int position = firstPosition; position <= lastPosition; position++) | |
| 269 | + graph[position - firstPosition] = QPointF(position * horizontalFactor - DIVS_TIME / 2, this->dataAnalyzer->data(channel)->samples.spectrum.sample[position] / this->settings->scope.spectrum[channel].magnitude + this->settings->scope.spectrum[channel].offset); | |
| 270 | + painter.drawPolyline(graph, lastPosition - firstPosition + 1); | |
| 271 | + } | |
| 220 | 272 | } |
| 221 | - } | |
| 222 | - break; | |
| 273 | + break; | |
| 274 | + | |
| 275 | + case Dso::GRAPHFORMAT_XY: | |
| 276 | + break; | |
| 223 | 277 | |
| 224 | - case Dso::GRAPHFORMAT_XY: | |
| 225 | - break; | |
| 278 | + default: | |
| 279 | + break; | |
| 280 | + } | |
| 226 | 281 | |
| 227 | - default: | |
| 228 | - break; | |
| 282 | + // Set DIVS_TIME / zoomFactor x DIVS_VOLTAGE matrix for zoomed oscillograph | |
| 283 | + painter.setMatrix(QMatrix((paintDevice->width() - 1) / DIVS_TIME * zoomFactor, 0, 0, -(scopeHeight - 1) / DIVS_VOLTAGE, (double) (paintDevice->width() - 1) / 2 - zoomOffset * zoomFactor * (paintDevice->width() - 1) / DIVS_TIME, (scopeHeight - 1) * 1.5 + lineHeight * 4), false); | |
| 229 | 284 | } |
| 230 | 285 | |
| 231 | 286 | this->dataAnalyzer->mutex()->unlock(); |
| 232 | 287 | |
| 233 | - // Draw grid | |
| 288 | + // Draw grids | |
| 234 | 289 | painter.setRenderHint(QPainter::Antialiasing, false); |
| 235 | - // Grid lines | |
| 236 | - painter.setPen(colorValues->grid); | |
| 237 | - | |
| 238 | - if(this->format < EXPORT_FORMAT_IMAGE) { | |
| 239 | - // Draw vertical lines | |
| 240 | - for(int div = 1; div < DIVS_TIME / 2; div++) { | |
| 241 | - for(int dot = 1; dot < DIVS_VOLTAGE / 2 * 5; dot++) { | |
| 242 | - painter.drawLine(QPointF((double) -div - 0.02, (double) -dot / 5), QPointF((double) -div + 0.02, (double) -dot / 5)); | |
| 243 | - painter.drawLine(QPointF((double) -div - 0.02, (double) dot / 5), QPointF((double) -div + 0.02, (double) dot / 5)); | |
| 244 | - painter.drawLine(QPointF((double) div - 0.02, (double) -dot / 5), QPointF((double) div + 0.02, (double) -dot / 5)); | |
| 245 | - painter.drawLine(QPointF((double) div - 0.02, (double) dot / 5), QPointF((double) div + 0.02, (double) dot / 5)); | |
| 290 | + for(int zoomed = 0; zoomed < (this->settings->view.zoom ? 2 : 1); zoomed++) { | |
| 291 | + // Set DIVS_TIME x DIVS_VOLTAGE matrix for oscillograph | |
| 292 | + painter.setMatrix(QMatrix((paintDevice->width() - 1) / DIVS_TIME, 0, 0, -(scopeHeight - 1) / DIVS_VOLTAGE, (double) (paintDevice->width() - 1) / 2, (scopeHeight - 1) * (zoomed + 0.5) + lineHeight * 1.5 + lineHeight * 2.5 * zoomed), false); | |
| 293 | + | |
| 294 | + // Grid lines | |
| 295 | + painter.setPen(colorValues->grid); | |
| 296 | + | |
| 297 | + if(this->format < EXPORT_FORMAT_IMAGE) { | |
| 298 | + // Draw vertical lines | |
| 299 | + for(int div = 1; div < DIVS_TIME / 2; div++) { | |
| 300 | + for(int dot = 1; dot < DIVS_VOLTAGE / 2 * 5; dot++) { | |
| 301 | + painter.drawLine(QPointF((double) -div - 0.02, (double) -dot / 5), QPointF((double) -div + 0.02, (double) -dot / 5)); | |
| 302 | + painter.drawLine(QPointF((double) -div - 0.02, (double) dot / 5), QPointF((double) -div + 0.02, (double) dot / 5)); | |
| 303 | + painter.drawLine(QPointF((double) div - 0.02, (double) -dot / 5), QPointF((double) div + 0.02, (double) -dot / 5)); | |
| 304 | + painter.drawLine(QPointF((double) div - 0.02, (double) dot / 5), QPointF((double) div + 0.02, (double) dot / 5)); | |
| 305 | + } | |
| 246 | 306 | } |
| 247 | - } | |
| 248 | - // Draw horizontal lines | |
| 249 | - for(int div = 1; div < DIVS_VOLTAGE / 2; div++) { | |
| 250 | - for(int dot = 1; dot < DIVS_TIME / 2 * 5; dot++) { | |
| 251 | - painter.drawLine(QPointF((double) -dot / 5, (double) -div - 0.02), QPointF((double) -dot / 5, (double) -div + 0.02)); | |
| 252 | - painter.drawLine(QPointF((double) dot / 5, (double) -div - 0.02), QPointF((double) dot / 5, (double) -div + 0.02)); | |
| 253 | - painter.drawLine(QPointF((double) -dot / 5, (double) div - 0.02), QPointF((double) -dot / 5, (double) div + 0.02)); | |
| 254 | - painter.drawLine(QPointF((double) dot / 5, (double) div - 0.02), QPointF((double) dot / 5, (double) div + 0.02)); | |
| 307 | + // Draw horizontal lines | |
| 308 | + for(int div = 1; div < DIVS_VOLTAGE / 2; div++) { | |
| 309 | + for(int dot = 1; dot < DIVS_TIME / 2 * 5; dot++) { | |
| 310 | + painter.drawLine(QPointF((double) -dot / 5, (double) -div - 0.02), QPointF((double) -dot / 5, (double) -div + 0.02)); | |
| 311 | + painter.drawLine(QPointF((double) dot / 5, (double) -div - 0.02), QPointF((double) dot / 5, (double) -div + 0.02)); | |
| 312 | + painter.drawLine(QPointF((double) -dot / 5, (double) div - 0.02), QPointF((double) -dot / 5, (double) div + 0.02)); | |
| 313 | + painter.drawLine(QPointF((double) dot / 5, (double) div - 0.02), QPointF((double) dot / 5, (double) div + 0.02)); | |
| 314 | + } | |
| 255 | 315 | } |
| 256 | 316 | } |
| 257 | - } | |
| 258 | - else { | |
| 259 | - // Draw vertical lines | |
| 260 | - for(int div = 1; div < DIVS_TIME / 2; div++) { | |
| 261 | - for(int dot = 1; dot < DIVS_VOLTAGE / 2 * 5; dot++) { | |
| 262 | - painter.drawPoint(QPointF(-div, (double) -dot / 5)); | |
| 263 | - painter.drawPoint(QPointF(-div, (double) dot / 5)); | |
| 264 | - painter.drawPoint(QPointF(div, (double) -dot / 5)); | |
| 265 | - painter.drawPoint(QPointF(div, (double) dot / 5)); | |
| 317 | + else { | |
| 318 | + // Draw vertical lines | |
| 319 | + for(int div = 1; div < DIVS_TIME / 2; div++) { | |
| 320 | + for(int dot = 1; dot < DIVS_VOLTAGE / 2 * 5; dot++) { | |
| 321 | + painter.drawPoint(QPointF(-div, (double) -dot / 5)); | |
| 322 | + painter.drawPoint(QPointF(-div, (double) dot / 5)); | |
| 323 | + painter.drawPoint(QPointF(div, (double) -dot / 5)); | |
| 324 | + painter.drawPoint(QPointF(div, (double) dot / 5)); | |
| 325 | + } | |
| 266 | 326 | } |
| 267 | - } | |
| 268 | - // Draw horizontal lines | |
| 269 | - for(int div = 1; div < DIVS_VOLTAGE / 2; div++) { | |
| 270 | - for(int dot = 1; dot < DIVS_TIME / 2 * 5; dot++) { | |
| 271 | - if(dot % 5 == 0) | |
| 272 | - continue; // Already done by vertical lines | |
| 273 | - painter.drawPoint(QPointF((double) -dot / 5, -div)); | |
| 274 | - painter.drawPoint(QPointF((double) dot / 5, -div)); | |
| 275 | - painter.drawPoint(QPointF((double) -dot / 5, div)); | |
| 276 | - painter.drawPoint(QPointF((double) dot / 5, div)); | |
| 327 | + // Draw horizontal lines | |
| 328 | + for(int div = 1; div < DIVS_VOLTAGE / 2; div++) { | |
| 329 | + for(int dot = 1; dot < DIVS_TIME / 2 * 5; dot++) { | |
| 330 | + if(dot % 5 == 0) | |
| 331 | + continue; // Already done by vertical lines | |
| 332 | + painter.drawPoint(QPointF((double) -dot / 5, -div)); | |
| 333 | + painter.drawPoint(QPointF((double) dot / 5, -div)); | |
| 334 | + painter.drawPoint(QPointF((double) -dot / 5, div)); | |
| 335 | + painter.drawPoint(QPointF((double) dot / 5, div)); | |
| 336 | + } | |
| 277 | 337 | } |
| 278 | 338 | } |
| 279 | - } | |
| 339 | + | |
| 340 | + // Axes | |
| 341 | + painter.setPen(colorValues->axes); | |
| 342 | + painter.drawLine(QPointF(-DIVS_TIME / 2, 0), QPointF(DIVS_TIME / 2, 0)); | |
| 343 | + painter.drawLine(QPointF(0, -DIVS_VOLTAGE / 2), QPointF(0, DIVS_VOLTAGE / 2)); | |
| 344 | + for(double div = 0.2; div <= DIVS_TIME / 2; div += 0.2) { | |
| 345 | + painter.drawLine(QPointF(div, -0.05), QPointF(div, 0.05)); | |
| 346 | + painter.drawLine(QPointF(-div, -0.05), QPointF(-div, 0.05)); | |
| 347 | + } | |
| 348 | + for(double div = 0.2; div <= DIVS_VOLTAGE / 2; div += 0.2) { | |
| 349 | + painter.drawLine(QPointF(-0.05, div), QPointF(0.05, div)); | |
| 350 | + painter.drawLine(QPointF(-0.05, -div), QPointF(0.05, -div)); | |
| 351 | + } | |
| 280 | 352 | |
| 281 | - // Axes | |
| 282 | - painter.setPen(colorValues->axes); | |
| 283 | - painter.drawLine(QPointF(-DIVS_TIME / 2, 0), QPointF(DIVS_TIME / 2, 0)); | |
| 284 | - painter.drawLine(QPointF(0, -DIVS_VOLTAGE / 2), QPointF(0, DIVS_VOLTAGE / 2)); | |
| 285 | - for(double div = 0.2; div <= DIVS_TIME / 2; div += 0.2) { | |
| 286 | - painter.drawLine(QPointF(div, -0.05), QPointF(div, 0.05)); | |
| 287 | - painter.drawLine(QPointF(-div, -0.05), QPointF(-div, 0.05)); | |
| 353 | + // Borders | |
| 354 | + painter.setPen(colorValues->border); | |
| 355 | + painter.drawRect(QRectF(-DIVS_TIME / 2, -DIVS_VOLTAGE / 2, DIVS_TIME, DIVS_VOLTAGE)); | |
| 288 | 356 | } |
| 289 | - for(double div = 0.2; div <= DIVS_VOLTAGE / 2; div += 0.2) { | |
| 290 | - painter.drawLine(QPointF(-0.05, div), QPointF(0.05, div)); | |
| 291 | - painter.drawLine(QPointF(-0.05, -div), QPointF(0.05, -div)); | |
| 292 | - } | |
| 293 | - | |
| 294 | - // Borders | |
| 295 | - painter.setPen(colorValues->border); | |
| 296 | - painter.drawRect(QRectF(-DIVS_TIME / 2, -DIVS_VOLTAGE / 2, DIVS_TIME, DIVS_VOLTAGE)); | |
| 297 | 357 | |
| 298 | 358 | painter.end(); |
| 299 | 359 | ... | ... |
openhantek/src/hantek/types.h
| ... | ... | @@ -208,6 +208,69 @@ namespace Hantek { |
| 208 | 208 | /// </table> |
| 209 | 209 | COMMAND_GETLOGICALDATA, |
| 210 | 210 | |
| 211 | + /// This command isn't used for the DSO-2090 and DSO-5200: | |
| 212 | + /// <table> | |
| 213 | + /// <tr> | |
| 214 | + /// <td>0x0a</td> | |
| 215 | + /// <td>...</td> | |
| 216 | + /// </tr> | |
| 217 | + /// </table> | |
| 218 | + COMMAND_UNKNOWN_0A, | |
| 219 | + | |
| 220 | + /// This command isn't used for the DSO-2090 and DSO-5200: | |
| 221 | + /// <table> | |
| 222 | + /// <tr> | |
| 223 | + /// <td>0x0b</td> | |
| 224 | + /// <td>...</td> | |
| 225 | + /// </tr> | |
| 226 | + /// </table> | |
| 227 | + COMMAND_UNKNOWN_0B, | |
| 228 | + | |
| 229 | + /// This command seems to set the sampling rate for the DSO-5200: | |
| 230 | + /// <table> | |
| 231 | + /// <tr> | |
| 232 | + /// <td>0x0c</td> | |
| 233 | + /// <td>0x00</td> | |
| 234 | + /// <td>Samplerate[0] (?)</td> | |
| 235 | + /// <td>Samplerate[1] (?)</td> | |
| 236 | + /// <td>Unknown</td> | |
| 237 | + /// <td>0x00</td> | |
| 238 | + /// </tr> | |
| 239 | + /// </table> | |
| 240 | + COMMAND_DSO5200_0C, | |
| 241 | + | |
| 242 | + /// This command seems to set trigger settings for the DSO-5200: | |
| 243 | + /// <table> | |
| 244 | + /// <tr> | |
| 245 | + /// <td>0x0d</td> | |
| 246 | + /// <td>0x00</td> | |
| 247 | + /// <td>Unknown</td> | |
| 248 | + /// <td>Unknown</td> | |
| 249 | + /// <td>TriggerPoint (?)</td> | |
| 250 | + /// <td>0xff</td> | |
| 251 | + /// <td>TriggerPoint (?)</td> | |
| 252 | + /// <td>0xff</td> | |
| 253 | + /// <td>TriggerPoint (?)</td> | |
| 254 | + /// <td>0xff</td> | |
| 255 | + /// </tr> | |
| 256 | + /// </table> | |
| 257 | + COMMAND_DSO5200_0D, | |
| 258 | + | |
| 259 | + /// This command seems to set some additional settings for the DSO-5200: | |
| 260 | + /// <table> | |
| 261 | + /// <tr> | |
| 262 | + /// <td>0x0e</td> | |
| 263 | + /// <td>0x00</td> | |
| 264 | + /// <td>Unknown</td> | |
| 265 | + /// <td>0x00</td> | |
| 266 | + /// <td>Unknown</td> | |
| 267 | + /// <td>0x00</td> | |
| 268 | + /// <td>0x00</td> | |
| 269 | + /// <td>0x00</td> | |
| 270 | + /// </tr> | |
| 271 | + /// </table> | |
| 272 | + COMMAND_DSO5200_0E, | |
| 273 | + | |
| 211 | 274 | COMMAND_COUNT ///< Total number of commands |
| 212 | 275 | }; |
| 213 | 276 | ... | ... |
openhantek/src/openhantek.cpp
| ... | ... | @@ -405,27 +405,40 @@ void OpenHantekMainWindow::readSettings(const QString &fileName) { |
| 405 | 405 | settingsLoader->beginGroup("view"); |
| 406 | 406 | // Colors |
| 407 | 407 | settingsLoader->beginGroup("color"); |
| 408 | - if(settingsLoader->contains("axes")) | |
| 409 | - this->settings->view.color.screen.axes = settingsLoader->value("axes").value<QColor>(); | |
| 410 | - if(settingsLoader->contains("background")) | |
| 411 | - this->settings->view.color.screen.background = settingsLoader->value("background").value<QColor>(); | |
| 412 | - if(settingsLoader->contains("border")) | |
| 413 | - this->settings->view.color.screen.border = settingsLoader->value("border").value<QColor>(); | |
| 414 | - if(settingsLoader->contains("grid")) | |
| 415 | - this->settings->view.color.screen.grid = settingsLoader->value("grid").value<QColor>(); | |
| 416 | - if(settingsLoader->contains("markers")) | |
| 417 | - this->settings->view.color.screen.markers = settingsLoader->value("markers").value<QColor>(); | |
| 418 | - for(int channel = 0; channel < this->settings->scope.spectrum.count(); channel++) { | |
| 419 | - QString key = QString("spectrum%1").arg(channel); | |
| 420 | - if(settingsLoader->contains(key)) | |
| 421 | - this->settings->view.color.screen.spectrum[channel] = settingsLoader->value(key).value<QColor>(); | |
| 422 | - } | |
| 423 | - if(settingsLoader->contains("text")) | |
| 424 | - this->settings->view.color.screen.text = settingsLoader->value("text").value<QColor>(); | |
| 425 | - for(int channel = 0; channel < this->settings->scope.voltage.count(); channel++) { | |
| 426 | - QString key = QString("voltage%1").arg(channel); | |
| 427 | - if(settingsLoader->contains(key)) | |
| 428 | - this->settings->view.color.screen.voltage[channel] = settingsLoader->value(key).value<QColor>(); | |
| 408 | + DsoSettingsColorValues *colors; | |
| 409 | + for(int mode = 0; mode < 2; mode++) { | |
| 410 | + if(mode == 0) { | |
| 411 | + colors = &this->settings->view.color.screen; | |
| 412 | + settingsLoader->beginGroup("screen"); | |
| 413 | + } | |
| 414 | + else { | |
| 415 | + colors = &this->settings->view.color.print; | |
| 416 | + settingsLoader->beginGroup("print"); | |
| 417 | + } | |
| 418 | + | |
| 419 | + if(settingsLoader->contains("axes")) | |
| 420 | + colors->axes = settingsLoader->value("axes").value<QColor>(); | |
| 421 | + if(settingsLoader->contains("background")) | |
| 422 | + colors->background = settingsLoader->value("background").value<QColor>(); | |
| 423 | + if(settingsLoader->contains("border")) | |
| 424 | + colors->border = settingsLoader->value("border").value<QColor>(); | |
| 425 | + if(settingsLoader->contains("grid")) | |
| 426 | + colors->grid = settingsLoader->value("grid").value<QColor>(); | |
| 427 | + if(settingsLoader->contains("markers")) | |
| 428 | + colors->markers = settingsLoader->value("markers").value<QColor>(); | |
| 429 | + for(int channel = 0; channel < this->settings->scope.spectrum.count(); channel++) { | |
| 430 | + QString key = QString("spectrum%1").arg(channel); | |
| 431 | + if(settingsLoader->contains(key)) | |
| 432 | + colors->spectrum[channel] = settingsLoader->value(key).value<QColor>(); | |
| 433 | + } | |
| 434 | + if(settingsLoader->contains("text")) | |
| 435 | + colors->text = settingsLoader->value("text").value<QColor>(); | |
| 436 | + for(int channel = 0; channel < this->settings->scope.voltage.count(); channel++) { | |
| 437 | + QString key = QString("voltage%1").arg(channel); | |
| 438 | + if(settingsLoader->contains(key)) | |
| 439 | + colors->voltage[channel] = settingsLoader->value(key).value<QColor>(); | |
| 440 | + } | |
| 441 | + settingsLoader->endGroup(); | |
| 429 | 442 | } |
| 430 | 443 | settingsLoader->endGroup(); |
| 431 | 444 | // Other view settings |
| ... | ... | @@ -507,16 +520,29 @@ void OpenHantekMainWindow::writeSettings(const QString &fileName) { |
| 507 | 520 | // Colors |
| 508 | 521 | if(complete) { |
| 509 | 522 | settingsSaver->beginGroup("color"); |
| 510 | - settingsSaver->setValue("axes", this->settings->view.color.screen.axes); | |
| 511 | - settingsSaver->setValue("background", this->settings->view.color.screen.background); | |
| 512 | - settingsSaver->setValue("border", this->settings->view.color.screen.border); | |
| 513 | - settingsSaver->setValue("grid", this->settings->view.color.screen.grid); | |
| 514 | - settingsSaver->setValue("markers", this->settings->view.color.screen.markers); | |
| 515 | - for(int channel = 0; channel < this->settings->scope.spectrum.count(); channel++) | |
| 516 | - settingsSaver->setValue(QString("spectrum%1").arg(channel), this->settings->view.color.screen.spectrum[channel]); | |
| 517 | - settingsSaver->setValue("text", this->settings->view.color.screen.text); | |
| 518 | - for(int channel = 0; channel < this->settings->scope.voltage.count(); channel++) | |
| 519 | - settingsSaver->setValue(QString("voltage%1").arg(channel), this->settings->view.color.screen.voltage[channel]); | |
| 523 | + DsoSettingsColorValues *colors; | |
| 524 | + for(int mode = 0; mode < 2; mode++) { | |
| 525 | + if(mode == 0) { | |
| 526 | + colors = &this->settings->view.color.screen; | |
| 527 | + settingsSaver->beginGroup("screen"); | |
| 528 | + } | |
| 529 | + else { | |
| 530 | + colors = &this->settings->view.color.print; | |
| 531 | + settingsSaver->beginGroup("print"); | |
| 532 | + } | |
| 533 | + | |
| 534 | + settingsSaver->setValue("axes", colors->axes); | |
| 535 | + settingsSaver->setValue("background", colors->background); | |
| 536 | + settingsSaver->setValue("border", colors->border); | |
| 537 | + settingsSaver->setValue("grid", colors->grid); | |
| 538 | + settingsSaver->setValue("markers", colors->markers); | |
| 539 | + for(int channel = 0; channel < this->settings->scope.spectrum.count(); channel++) | |
| 540 | + settingsSaver->setValue(QString("spectrum%1").arg(channel), colors->spectrum[channel]); | |
| 541 | + settingsSaver->setValue("text", colors->text); | |
| 542 | + for(int channel = 0; channel < this->settings->scope.voltage.count(); channel++) | |
| 543 | + settingsSaver->setValue(QString("voltage%1").arg(channel), colors->voltage[channel]); | |
| 544 | + settingsSaver->endGroup(); | |
| 545 | + } | |
| 520 | 546 | settingsSaver->endGroup(); |
| 521 | 547 | } |
| 522 | 548 | // Other view settings | ... | ... |
openhantek/src/settings.cpp
| ... | ... | @@ -135,9 +135,9 @@ void DsoSettings::setChannelCount(unsigned int channels) { |
| 135 | 135 | this->view.color.screen.spectrum.insert(channel, this->view.color.screen.voltage[channel].lighter()); |
| 136 | 136 | |
| 137 | 137 | if(this->view.color.print.voltage.count() <= channel + 1) |
| 138 | - this->view.color.print.voltage.insert(channel, this->view.color.screen.voltage[channel]); | |
| 138 | + this->view.color.print.voltage.insert(channel, this->view.color.screen.voltage[channel].darker(120)); | |
| 139 | 139 | if(this->view.color.print.spectrum.count() <= channel + 1) |
| 140 | - this->view.color.print.spectrum.insert(channel, this->view.color.print.voltage[channel].darker()); | |
| 140 | + this->view.color.print.spectrum.insert(channel, this->view.color.screen.voltage[channel].darker()); | |
| 141 | 141 | } |
| 142 | 142 | |
| 143 | 143 | // Check if the math channel is missing | ... | ... |