Commit 104958b20f7e739f0950ea51f41dcea685428d15
1 parent
299283a1
Added DSO-5200 support and some smaller improvements
Showing
9 changed files
with
944 additions
and
416 deletions
openhantek/ChangeLog
| @@ -61,3 +61,10 @@ | @@ -61,3 +61,10 @@ | ||
| 61 | * Added the samplerate formula to the documentation | 61 | * Added the samplerate formula to the documentation |
| 62 | * Documentation updated with additional information from Oleg | 62 | * Documentation updated with additional information from Oleg |
| 63 | * Removed Oleg from AUTHORS | 63 | * Removed Oleg from AUTHORS |
| 64 | + | ||
| 65 | +2010-08-29 Oliver Haag <oliver.haag@gmail.com> | ||
| 66 | +* DSO details are known after Hantek::Control::connectDevice() is executed | ||
| 67 | +* Removed useless initialization in Hantek::Control | ||
| 68 | +* DSO is started after the settings have been transferred | ||
| 69 | +* Added additional debug messages when building as debug binary | ||
| 70 | +* Added support for DSO-5200 |
openhantek/Doxyfile
| @@ -611,7 +611,7 @@ EXCLUDE_SYMLINKS = NO | @@ -611,7 +611,7 @@ EXCLUDE_SYMLINKS = NO | ||
| 611 | # against the file with absolute path, so to exclude all test directories | 611 | # against the file with absolute path, so to exclude all test directories |
| 612 | # for example use the pattern */test/* | 612 | # for example use the pattern */test/* |
| 613 | 613 | ||
| 614 | -EXCLUDE_PATTERNS = | 614 | +EXCLUDE_PATTERNS = */.svn* |
| 615 | 615 | ||
| 616 | # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names | 616 | # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names |
| 617 | # (namespaces, classes, functions, etc.) that should be excluded from the | 617 | # (namespaces, classes, functions, etc.) that should be excluded from the |
openhantek/OpenHantek.pro
| @@ -92,6 +92,10 @@ else { | @@ -92,6 +92,10 @@ else { | ||
| 92 | } | 92 | } |
| 93 | DEFINES += LIBUSB_VERSION=$${LIBUSB_VERSION} | 93 | DEFINES += LIBUSB_VERSION=$${LIBUSB_VERSION} |
| 94 | 94 | ||
| 95 | +# Debug output | ||
| 96 | +CONFIG(debug, debug|release): | ||
| 97 | + DEFINES += DEBUG | ||
| 98 | + | ||
| 95 | # Settings for different operating systems | 99 | # Settings for different operating systems |
| 96 | unix:!macx { | 100 | unix:!macx { |
| 97 | isEmpty(PREFIX):PREFIX = /usr/local | 101 | isEmpty(PREFIX):PREFIX = /usr/local |
| @@ -131,13 +135,7 @@ DEFINES += VERSION=\\\"$${VERSION}\\\" | @@ -131,13 +135,7 @@ DEFINES += VERSION=\\\"$${VERSION}\\\" | ||
| 131 | 135 | ||
| 132 | # Custom target "doc" for Doxygen | 136 | # Custom target "doc" for Doxygen |
| 133 | doxygen.target = doc | 137 | doxygen.target = doc |
| 134 | -doxygen.commands = rm \ | ||
| 135 | - -r \ | ||
| 136 | - doc/; \ | ||
| 137 | - env \ | ||
| 138 | - DEFINES=\"$${DEFINES}\" \ | ||
| 139 | - doxygen \ | ||
| 140 | - Doxyfile | 138 | +doxygen.commands = "rm -r doc/; env DEFINES=\"$${DEFINES}\" doxygen Doxyfile" |
| 141 | doxygen.depends = $${SOURCES} \ | 139 | doxygen.depends = $${SOURCES} \ |
| 142 | $${HEADERS} \ | 140 | $${HEADERS} \ |
| 143 | $${DOXYFILES} | 141 | $${DOXYFILES} |
openhantek/src/dsocontrol.cpp
| @@ -52,6 +52,7 @@ const QStringList *DsoControl::getSpecialTriggerSources() { | @@ -52,6 +52,7 @@ const QStringList *DsoControl::getSpecialTriggerSources() { | ||
| 52 | 52 | ||
| 53 | /// \brief Try to connect to the oscilloscope. | 53 | /// \brief Try to connect to the oscilloscope. |
| 54 | void DsoControl::connectDevice() { | 54 | void DsoControl::connectDevice() { |
| 55 | + this->sampling = false; | ||
| 55 | this->terminate = false; | 56 | this->terminate = false; |
| 56 | this->start(); | 57 | this->start(); |
| 57 | } | 58 | } |
openhantek/src/hantek/control.cpp
| @@ -58,6 +58,9 @@ namespace Hantek { | @@ -58,6 +58,9 @@ namespace Hantek { | ||
| 58 | this->command[COMMAND_SETGAIN] = new CommandSetGain(); | 58 | this->command[COMMAND_SETGAIN] = new CommandSetGain(); |
| 59 | this->command[COMMAND_SETLOGICALDATA] = new CommandSetLogicalData(); | 59 | this->command[COMMAND_SETLOGICALDATA] = new CommandSetLogicalData(); |
| 60 | this->command[COMMAND_GETLOGICALDATA] = new CommandGetLogicalData(); | 60 | this->command[COMMAND_GETLOGICALDATA] = new CommandGetLogicalData(); |
| 61 | + this->command[COMMAND_SETSAMPLERATE5200] = new CommandSetSamplerate5200(); | ||
| 62 | + this->command[COMMAND_SETBUFFER5200] = new CommandSetBuffer5200(); | ||
| 63 | + this->command[COMMAND_SETTRIGGER5200] = new CommandSetTrigger5200(); | ||
| 61 | 64 | ||
| 62 | // Transmission-ready control commands | 65 | // Transmission-ready control commands |
| 63 | this->control[CONTROLINDEX_SETOFFSET] = new ControlSetOffset(); | 66 | this->control[CONTROLINDEX_SETOFFSET] = new ControlSetOffset(); |
| @@ -73,20 +76,8 @@ namespace Hantek { | @@ -73,20 +76,8 @@ namespace Hantek { | ||
| 73 | } | 76 | } |
| 74 | } | 77 | } |
| 75 | 78 | ||
| 76 | - // Cached variables | ||
| 77 | - for(unsigned int channel = 0; channel < HANTEK_CHANNELS; channel++) { | ||
| 78 | - this->setChannelUsed(channel, channel == 0); | ||
| 79 | - this->setCoupling(channel, Dso::COUPLING_AC); | ||
| 80 | - this->setGain(channel, 8.0); | ||
| 81 | - this->setOffset(channel, 0.5); | ||
| 82 | - this->setTriggerLevel(channel, 0.0); | ||
| 83 | - } | ||
| 84 | - this->setBufferSize(BUFFER_SMALL); | ||
| 85 | - this->setSamplerate(1e6); | ||
| 86 | - this->setTriggerMode(Dso::TRIGGERMODE_NORMAL); | ||
| 87 | - this->setTriggerPosition(5e3 / (this->samplerateMax / this->samplerateDivider)); | ||
| 88 | - this->setTriggerSlope(Dso::SLOPE_POSITIVE); | ||
| 89 | - this->setTriggerSource(false, 0); | 79 | + // USB device |
| 80 | + this->device = new Device(this); | ||
| 90 | 81 | ||
| 91 | // Sample buffers | 82 | // Sample buffers |
| 92 | for(unsigned int channel = 0; channel < HANTEK_CHANNELS; channel++) { | 83 | for(unsigned int channel = 0; channel < HANTEK_CHANNELS; channel++) { |
| @@ -94,9 +85,6 @@ namespace Hantek { | @@ -94,9 +85,6 @@ namespace Hantek { | ||
| 94 | this->samplesSize.append(0); | 85 | this->samplesSize.append(0); |
| 95 | } | 86 | } |
| 96 | 87 | ||
| 97 | - // USB device | ||
| 98 | - this->device = new Device(this); | ||
| 99 | - | ||
| 100 | connect(this->device, SIGNAL(disconnected()), this, SLOT(disconnectDevice())); | 88 | connect(this->device, SIGNAL(disconnected()), this, SLOT(disconnectDevice())); |
| 101 | } | 89 | } |
| 102 | 90 | ||
| @@ -115,57 +103,6 @@ namespace Hantek { | @@ -115,57 +103,6 @@ namespace Hantek { | ||
| 115 | void Control::run() { | 103 | void Control::run() { |
| 116 | int errorCode; | 104 | int errorCode; |
| 117 | 105 | ||
| 118 | - emit statusMessage(this->device->search(), 0); | ||
| 119 | - if(!this->device->isConnected()) | ||
| 120 | - return; | ||
| 121 | - | ||
| 122 | - // Set all configuration commands as pending | ||
| 123 | - this->commandPending[COMMAND_SETFILTER] = true; | ||
| 124 | - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | ||
| 125 | - this->commandPending[COMMAND_FORCETRIGGER] = false; | ||
| 126 | - this->commandPending[COMMAND_STARTSAMPLING] = false; | ||
| 127 | - this->commandPending[COMMAND_ENABLETRIGGER] = false; | ||
| 128 | - this->commandPending[COMMAND_GETDATA] = false; | ||
| 129 | - this->commandPending[COMMAND_GETCAPTURESTATE] = false; | ||
| 130 | - this->commandPending[COMMAND_SETGAIN] = true; | ||
| 131 | - this->commandPending[COMMAND_SETLOGICALDATA] = true; | ||
| 132 | - this->commandPending[COMMAND_GETLOGICALDATA] = false; | ||
| 133 | - for(int control = 0; control < CONTROLINDEX_COUNT; control++) | ||
| 134 | - this->controlPending[control] = true; | ||
| 135 | - | ||
| 136 | - // Maximum possible samplerate for a single channel | ||
| 137 | - switch(this->device->getModel()) { | ||
| 138 | - case MODEL_DSO2090: | ||
| 139 | - case MODEL_DSO2100: | ||
| 140 | - this->samplerateChannelMax = 50e6; | ||
| 141 | - break; | ||
| 142 | - case MODEL_DSO2150: | ||
| 143 | - this->samplerateChannelMax = 75e6; | ||
| 144 | - break; | ||
| 145 | - case MODEL_DSO2250: | ||
| 146 | - case MODEL_DSO5200: | ||
| 147 | - case MODEL_DSO5200A: | ||
| 148 | - this->samplerateChannelMax = 125e6; | ||
| 149 | - break; | ||
| 150 | - default: | ||
| 151 | - this->samplerateChannelMax = 50e6; | ||
| 152 | - break; | ||
| 153 | - } | ||
| 154 | - | ||
| 155 | - // Get channel level data | ||
| 156 | - errorCode = this->device->controlRead(CONTROL_VALUE, (unsigned char*) &(this->channelLevels), sizeof(this->channelLevels), (int) VALUE_CHANNELLEVEL); | ||
| 157 | - if(errorCode < 0) { | ||
| 158 | - this->device->disconnect(); | ||
| 159 | - emit statusMessage(tr("Couldn't get channel level data from oscilloscope"), 0); | ||
| 160 | - return; | ||
| 161 | - } | ||
| 162 | - | ||
| 163 | - // Adapt offsets | ||
| 164 | - for(unsigned int channel = 0; channel < HANTEK_CHANNELS; channel++) | ||
| 165 | - this->setOffset(channel, this->offset[channel]); | ||
| 166 | - this->setSamplerate(this->samplerateMax / this->samplerateDivider); | ||
| 167 | - this->setTriggerPosition(this->triggerPosition); | ||
| 168 | - | ||
| 169 | // The control loop is running until the device is disconnected | 106 | // The control loop is running until the device is disconnected |
| 170 | int captureState = CAPTURE_WAITING; | 107 | int captureState = CAPTURE_WAITING; |
| 171 | bool samplingStarted = false; | 108 | bool samplingStarted = false; |
| @@ -177,6 +114,13 @@ namespace Hantek { | @@ -177,6 +114,13 @@ namespace Hantek { | ||
| 177 | if(!this->commandPending[command]) | 114 | if(!this->commandPending[command]) |
| 178 | continue; | 115 | continue; |
| 179 | 116 | ||
| 117 | +#ifdef DEBUG | ||
| 118 | + QString hexDump, hexByte; | ||
| 119 | + for(unsigned int index = 0; index < this->command[command]->getSize(); index++) | ||
| 120 | + hexDump.append(hexByte.sprintf(" %02x", this->command[command]->data()[index])); | ||
| 121 | + qDebug("Sending bulk command:%s", hexDump.toLocal8Bit().data()); | ||
| 122 | +#endif | ||
| 123 | + | ||
| 180 | errorCode = this->device->bulkCommand(this->command[command]); | 124 | errorCode = this->device->bulkCommand(this->command[command]); |
| 181 | if(errorCode < 0) { | 125 | if(errorCode < 0) { |
| 182 | qDebug("Sending bulk command 0x%02x failed: %s", command, Helper::libUsbErrorString(errorCode).toLocal8Bit().data()); | 126 | qDebug("Sending bulk command 0x%02x failed: %s", command, Helper::libUsbErrorString(errorCode).toLocal8Bit().data()); |
| @@ -197,6 +141,13 @@ namespace Hantek { | @@ -197,6 +141,13 @@ namespace Hantek { | ||
| 197 | if(!this->controlPending[control]) | 141 | if(!this->controlPending[control]) |
| 198 | continue; | 142 | continue; |
| 199 | 143 | ||
| 144 | +#ifdef DEBUG | ||
| 145 | + QString hexDump, hexByte; | ||
| 146 | + for(unsigned int index = 0; index < this->control[control]->getSize(); index++) | ||
| 147 | + hexDump.append(hexByte.sprintf(" %02x", this->control[control]->data()[index])); | ||
| 148 | + qDebug("Sending control command 0x%02x:%s", control, hexDump.toLocal8Bit().data()); | ||
| 149 | +#endif | ||
| 150 | + | ||
| 200 | errorCode = this->device->controlWrite(this->controlCode[control], this->control[control]->data(), this->control[control]->getSize()); | 151 | errorCode = this->device->controlWrite(this->controlCode[control], this->control[control]->data(), this->control[control]->getSize()); |
| 201 | if(errorCode < 0) { | 152 | if(errorCode < 0) { |
| 202 | qDebug("Sending control command 0x%2x failed: %s", control, Helper::libUsbErrorString(errorCode).toLocal8Bit().data()); | 153 | qDebug("Sending control command 0x%2x failed: %s", control, Helper::libUsbErrorString(errorCode).toLocal8Bit().data()); |
| @@ -346,20 +297,34 @@ namespace Hantek { | @@ -346,20 +297,34 @@ namespace Hantek { | ||
| 346 | 297 | ||
| 347 | // Save raw data to temporary buffer | 298 | // Save raw data to temporary buffer |
| 348 | unsigned int dataCount = this->bufferSize * HANTEK_CHANNELS; | 299 | unsigned int dataCount = this->bufferSize * HANTEK_CHANNELS; |
| 349 | - unsigned char data[dataCount]; | ||
| 350 | - errorCode = this->device->bulkReadMulti(data, dataCount); | 300 | + unsigned int dataLength = dataCount; |
| 301 | + bool using9Bits = false; | ||
| 302 | + if(this->device->getModel() == MODEL_DSO5200 || this->device->getModel() == MODEL_DSO5200A) { | ||
| 303 | + using9Bits = true; | ||
| 304 | + dataLength *= 2; | ||
| 305 | + } | ||
| 306 | + | ||
| 307 | + unsigned char data[dataLength]; | ||
| 308 | + errorCode = this->device->bulkReadMulti(data, dataLength); | ||
| 351 | if(errorCode < 0) | 309 | if(errorCode < 0) |
| 352 | return errorCode; | 310 | return errorCode; |
| 353 | 311 | ||
| 354 | // Process the data only if we want it | 312 | // Process the data only if we want it |
| 355 | if(process) { | 313 | if(process) { |
| 314 | + // How much data did we really receive? | ||
| 315 | + dataLength = errorCode; | ||
| 316 | + if(using9Bits) | ||
| 317 | + dataCount = dataLength / 2; | ||
| 318 | + else | ||
| 319 | + dataCount = dataLength; | ||
| 320 | + | ||
| 356 | this->samplesMutex.lock(); | 321 | this->samplesMutex.lock(); |
| 357 | 322 | ||
| 358 | // Convert channel data | 323 | // Convert channel data |
| 359 | if(((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->getFastRate()) { | 324 | if(((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->getFastRate()) { |
| 360 | // Fast rate mode, one channel is using all buffers | 325 | // Fast rate mode, one channel is using all buffers |
| 361 | int channel; | 326 | int channel; |
| 362 | - if(((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->getUsedChannel() == USED_CH1) | 327 | + if(((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->getUsedChannels() == USED_CH1) |
| 363 | channel = 0; | 328 | channel = 0; |
| 364 | else | 329 | else |
| 365 | channel = 1; | 330 | channel = 1; |
| @@ -384,34 +349,57 @@ namespace Hantek { | @@ -384,34 +349,57 @@ namespace Hantek { | ||
| 384 | 349 | ||
| 385 | // Convert data from the oscilloscope and write it into the sample buffer | 350 | // Convert data from the oscilloscope and write it into the sample buffer |
| 386 | unsigned int bufferPosition = this->triggerPoint; | 351 | unsigned int bufferPosition = this->triggerPoint; |
| 387 | - for(unsigned int realPosition = 0; realPosition < dataCount; realPosition++, bufferPosition++) { | ||
| 388 | - if(bufferPosition >= dataCount) | ||
| 389 | - bufferPosition %= dataCount; | ||
| 390 | - | ||
| 391 | - this->samples[channel][realPosition] = ((double) data[bufferPosition] / 0xff - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; | 352 | + if(using9Bits) { |
| 353 | + // Additional MSBs after the normal data | ||
| 354 | + for(unsigned int realPosition = 0; realPosition < dataCount; realPosition++, bufferPosition++) { | ||
| 355 | + if(bufferPosition >= dataCount) | ||
| 356 | + bufferPosition %= dataCount; | ||
| 357 | + | ||
| 358 | + this->samples[channel][realPosition] = ((double) (data[bufferPosition] + (data[dataCount + bufferPosition] << 8)) / 0x1ff - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; | ||
| 359 | + } | ||
| 360 | + } | ||
| 361 | + else { | ||
| 362 | + for(unsigned int realPosition = 0; realPosition < dataCount; realPosition++, bufferPosition++) { | ||
| 363 | + if(bufferPosition >= dataCount) | ||
| 364 | + bufferPosition %= dataCount; | ||
| 365 | + | ||
| 366 | + this->samples[channel][realPosition] = ((double) data[bufferPosition] / 0xff - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; | ||
| 367 | + } | ||
| 392 | } | 368 | } |
| 393 | } | 369 | } |
| 394 | } | 370 | } |
| 395 | else { | 371 | else { |
| 396 | // Normal mode, channel are using their separate buffers | 372 | // Normal mode, channel are using their separate buffers |
| 397 | - unsigned char usedChannels = ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->getUsedChannel(); | 373 | + unsigned int channelDataCount = dataCount / HANTEK_CHANNELS; |
| 374 | + unsigned char usedChannels = ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->getUsedChannels(); | ||
| 398 | for(int channel = 0; channel < HANTEK_CHANNELS; channel++) { | 375 | for(int channel = 0; channel < HANTEK_CHANNELS; channel++) { |
| 399 | if(usedChannels == USED_CH1CH2 || channel == usedChannels) { | 376 | if(usedChannels == USED_CH1CH2 || channel == usedChannels) { |
| 400 | // Reallocate memory for samples if the sample count has changed | 377 | // Reallocate memory for samples if the sample count has changed |
| 401 | - if(!this->samples[channel] || this->samplesSize[channel] != this->bufferSize) { | 378 | + if(!this->samples[channel] || this->samplesSize[channel] != channelDataCount) { |
| 402 | if(this->samples[channel]) | 379 | if(this->samples[channel]) |
| 403 | delete this->samples[channel]; | 380 | delete this->samples[channel]; |
| 404 | - this->samples[channel] = new double[this->bufferSize]; | ||
| 405 | - this->samplesSize[channel] = this->bufferSize; | 381 | + this->samples[channel] = new double[channelDataCount]; |
| 382 | + this->samplesSize[channel] = channelDataCount; | ||
| 406 | } | 383 | } |
| 407 | 384 | ||
| 408 | // Convert data from the oscilloscope and write it into the sample buffer | 385 | // Convert data from the oscilloscope and write it into the sample buffer |
| 409 | unsigned int bufferPosition = this->triggerPoint * 2; | 386 | unsigned int bufferPosition = this->triggerPoint * 2; |
| 410 | - for(unsigned int realPosition = 0; realPosition < this->bufferSize; realPosition++, bufferPosition += 2) { | ||
| 411 | - if(bufferPosition >= dataCount) | ||
| 412 | - bufferPosition %= dataCount; | ||
| 413 | - | ||
| 414 | - this->samples[channel][realPosition] = ((double) data[bufferPosition + HANTEK_CHANNELS - 1 - channel] / 256.0 - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; | 387 | + if(using9Bits) { |
| 388 | + // Additional MSBs after the normal data | ||
| 389 | + for(unsigned int realPosition = 0; realPosition < channelDataCount; realPosition++, bufferPosition += 2) { | ||
| 390 | + if(bufferPosition >= dataCount) | ||
| 391 | + bufferPosition %= dataCount; | ||
| 392 | + | ||
| 393 | + this->samples[channel][realPosition] = ((double) (data[bufferPosition + HANTEK_CHANNELS - 1 - channel] + (data[dataCount + bufferPosition + HANTEK_CHANNELS - 1 - channel] << 8)) / 0x1ff - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; | ||
| 394 | + } | ||
| 395 | + } | ||
| 396 | + else { | ||
| 397 | + for(unsigned int realPosition = 0; realPosition < channelDataCount; realPosition++, bufferPosition += 2) { | ||
| 398 | + if(bufferPosition >= dataCount) | ||
| 399 | + bufferPosition %= dataCount; | ||
| 400 | + | ||
| 401 | + this->samples[channel][realPosition] = ((double) data[bufferPosition + HANTEK_CHANNELS - 1 - channel] / 0xff - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; | ||
| 402 | + } | ||
| 415 | } | 403 | } |
| 416 | } | 404 | } |
| 417 | else if(this->samples[channel]) { | 405 | else if(this->samples[channel]) { |
| @@ -436,15 +424,113 @@ namespace Hantek { | @@ -436,15 +424,113 @@ namespace Hantek { | ||
| 436 | unsigned long int Control::updateBufferSize(unsigned long int size) { | 424 | unsigned long int Control::updateBufferSize(unsigned long int size) { |
| 437 | BufferSizeId sizeId = (size <= BUFFER_SMALL) ? BUFFERID_SMALL : BUFFERID_LARGE; | 425 | BufferSizeId sizeId = (size <= BUFFER_SMALL) ? BUFFERID_SMALL : BUFFERID_LARGE; |
| 438 | 426 | ||
| 439 | - // SetTriggerAndSamplerate bulk command for samplerate | ||
| 440 | - ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setBufferSize(sizeId); | ||
| 441 | - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | ||
| 442 | - | ||
| 443 | - this->bufferSize = (sizeId == BUFFERID_SMALL) ? BUFFER_SMALL : BUFFER_LARGE; | 427 | + switch(this->commandVersion) { |
| 428 | + case 0: | ||
| 429 | + // SetTriggerAndSamplerate bulk command for buffer size | ||
| 430 | + ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setBufferSize(sizeId); | ||
| 431 | + this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | ||
| 432 | + | ||
| 433 | + this->bufferSize = (sizeId == BUFFERID_SMALL) ? BUFFER_SMALL : BUFFER_LARGE; | ||
| 434 | + break; | ||
| 435 | + | ||
| 436 | + case 1: | ||
| 437 | + // SetBuffer5200 bulk command for buffer size | ||
| 438 | + CommandSetBuffer5200 *commandSetBuffer5200 = (CommandSetBuffer5200 *) this->command[COMMAND_SETBUFFER5200]; | ||
| 439 | + commandSetBuffer5200->setUsedPre(DTRIGGERPOSITION_ON); | ||
| 440 | + commandSetBuffer5200->setUsedPost(DTRIGGERPOSITION_ON); | ||
| 441 | + commandSetBuffer5200->setBufferSize(sizeId); | ||
| 442 | + this->commandPending[COMMAND_SETBUFFER5200] = true; | ||
| 443 | + | ||
| 444 | + this->bufferSize = (sizeId == BUFFERID_SMALL) ? BUFFER_SMALL : BUFFER_LARGE5200; | ||
| 445 | + break; | ||
| 446 | + } | ||
| 444 | 447 | ||
| 445 | return this->bufferSize; | 448 | return this->bufferSize; |
| 446 | } | 449 | } |
| 447 | 450 | ||
| 451 | + /// \brief Try to connect to the oscilloscope. | ||
| 452 | + void Control::connectDevice() { | ||
| 453 | + int errorCode; | ||
| 454 | + | ||
| 455 | + emit statusMessage(this->device->search(), 0); | ||
| 456 | + if(!this->device->isConnected()) | ||
| 457 | + return; | ||
| 458 | + | ||
| 459 | + // Set all necessary configuration commands as pending | ||
| 460 | + this->commandPending[COMMAND_SETFILTER] = true; | ||
| 461 | + this->commandPending[COMMAND_FORCETRIGGER] = false; | ||
| 462 | + this->commandPending[COMMAND_STARTSAMPLING] = false; | ||
| 463 | + this->commandPending[COMMAND_ENABLETRIGGER] = false; | ||
| 464 | + this->commandPending[COMMAND_GETDATA] = false; | ||
| 465 | + this->commandPending[COMMAND_GETCAPTURESTATE] = false; | ||
| 466 | + this->commandPending[COMMAND_SETGAIN] = true; | ||
| 467 | + this->commandPending[COMMAND_SETLOGICALDATA] = false; | ||
| 468 | + this->commandPending[COMMAND_GETLOGICALDATA] = false; | ||
| 469 | + | ||
| 470 | + // Determine the command version we need for this model | ||
| 471 | + bool unsupported = false; | ||
| 472 | + switch(this->device->getModel()) { | ||
| 473 | + case MODEL_DSO2100: | ||
| 474 | + case MODEL_DSO2150: | ||
| 475 | + unsupported = true; | ||
| 476 | + case MODEL_DSO2090: | ||
| 477 | + this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | ||
| 478 | + this->commandPending[COMMAND_SETSAMPLERATE5200] = false; | ||
| 479 | + this->commandPending[COMMAND_SETBUFFER5200] = false; | ||
| 480 | + this->commandPending[COMMAND_SETTRIGGER5200] = false; | ||
| 481 | + this->commandVersion = 0; | ||
| 482 | + break; | ||
| 483 | + | ||
| 484 | + case MODEL_DSO2250: | ||
| 485 | + case MODEL_DSO5200A: | ||
| 486 | + unsupported = true; | ||
| 487 | + case MODEL_DSO5200: | ||
| 488 | + this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = false; | ||
| 489 | + this->commandPending[COMMAND_SETSAMPLERATE5200] = true; | ||
| 490 | + this->commandPending[COMMAND_SETBUFFER5200] = true; | ||
| 491 | + this->commandPending[COMMAND_SETTRIGGER5200] = true; | ||
| 492 | + this->commandVersion = 1; | ||
| 493 | + break; | ||
| 494 | + | ||
| 495 | + default: | ||
| 496 | + this->device->disconnect(); | ||
| 497 | + emit statusMessage(tr("Unknown model"), 0); | ||
| 498 | + return; | ||
| 499 | + } | ||
| 500 | + | ||
| 501 | + if(unsupported) | ||
| 502 | + qDebug("Warning: This Hantek DSO model isn't supported officially, so it may not be working as expected. Reports about your experiences are very welcome though (Please open a feature request in the tracker at https://sf.net/projects/openhantek/ or email me directly to oliver.haag@gmail.com). If it's working perfectly I can remove this warning, if not it should be possible to get it working with your help soon."); | ||
| 503 | + | ||
| 504 | + for(int control = 0; control < CONTROLINDEX_COUNT; control++) | ||
| 505 | + this->controlPending[control] = true; | ||
| 506 | + | ||
| 507 | + // Maximum possible samplerate for a single channel | ||
| 508 | + switch(this->device->getModel()) { | ||
| 509 | + case MODEL_DSO2090: | ||
| 510 | + case MODEL_DSO2100: | ||
| 511 | + this->samplerateChannelMax = 50e6; | ||
| 512 | + break; | ||
| 513 | + | ||
| 514 | + case MODEL_DSO2150: | ||
| 515 | + this->samplerateChannelMax = 75e6; | ||
| 516 | + break; | ||
| 517 | + | ||
| 518 | + default: | ||
| 519 | + this->samplerateChannelMax = 125e6; | ||
| 520 | + break; | ||
| 521 | + } | ||
| 522 | + | ||
| 523 | + // Get channel level data | ||
| 524 | + errorCode = this->device->controlRead(CONTROL_VALUE, (unsigned char*) &(this->channelLevels), sizeof(this->channelLevels), (int) VALUE_CHANNELLEVEL); | ||
| 525 | + if(errorCode < 0) { | ||
| 526 | + this->device->disconnect(); | ||
| 527 | + emit statusMessage(tr("Couldn't get channel level data from oscilloscope"), 0); | ||
| 528 | + return; | ||
| 529 | + } | ||
| 530 | + | ||
| 531 | + DsoControl::connectDevice(); | ||
| 532 | + } | ||
| 533 | + | ||
| 448 | /// \brief Sets the size of the oscilloscopes sample buffer. | 534 | /// \brief Sets the size of the oscilloscopes sample buffer. |
| 449 | /// \param size The buffer size that should be met (S). | 535 | /// \param size The buffer size that should be met (S). |
| 450 | /// \return The buffer size that has been set. | 536 | /// \return The buffer size that has been set. |
| @@ -465,19 +551,22 @@ namespace Hantek { | @@ -465,19 +551,22 @@ namespace Hantek { | ||
| 465 | if(samplerate == 0) | 551 | if(samplerate == 0) |
| 466 | return 0; | 552 | return 0; |
| 467 | 553 | ||
| 468 | - // SetTriggerAndSamplerate bulk command for samplerate | 554 | + // Pointers to needed commands |
| 469 | CommandSetTriggerAndSamplerate *commandSetTriggerAndSamplerate = (CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE]; | 555 | CommandSetTriggerAndSamplerate *commandSetTriggerAndSamplerate = (CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE]; |
| 556 | + CommandSetSamplerate5200 *commandSetSamplerate5200 = (CommandSetSamplerate5200 *) this->command[COMMAND_SETSAMPLERATE5200]; | ||
| 557 | + CommandSetBuffer5200 *commandSetBuffer5200 = (CommandSetBuffer5200 *) this->command[COMMAND_SETBUFFER5200]; | ||
| 558 | + CommandSetTrigger5200 *commandSetTrigger5200 = (CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200]; | ||
| 470 | 559 | ||
| 471 | // Calculate with fast rate first if only one channel is used | 560 | // Calculate with fast rate first if only one channel is used |
| 472 | bool fastRate = false; | 561 | bool fastRate = false; |
| 473 | this->samplerateMax = this->samplerateChannelMax; | 562 | this->samplerateMax = this->samplerateChannelMax; |
| 474 | - if(((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->getUsedChannel() != USED_CH1CH2) { | 563 | + if((this->commandVersion == 0) ? (commandSetTriggerAndSamplerate->getUsedChannels() != USED_CH1CH2) : (commandSetTrigger5200->getUsedChannels() != EUSED_CH1CH2)) { |
| 475 | fastRate = true; | 564 | fastRate = true; |
| 476 | this->samplerateMax *= HANTEK_CHANNELS; | 565 | this->samplerateMax *= HANTEK_CHANNELS; |
| 477 | } | 566 | } |
| 478 | 567 | ||
| 479 | // The maximum sample rate depends on the buffer size | 568 | // The maximum sample rate depends on the buffer size |
| 480 | - switch(commandSetTriggerAndSamplerate->getBufferSize()) { | 569 | + switch((this->commandVersion == 0) ? commandSetTriggerAndSamplerate->getBufferSize() : commandSetBuffer5200->getBufferSize()) { |
| 481 | case BUFFERID_ROLL: | 570 | case BUFFERID_ROLL: |
| 482 | this->samplerateMax /= 1000; | 571 | this->samplerateMax /= 1000; |
| 483 | break; | 572 | break; |
| @@ -503,14 +592,32 @@ namespace Hantek { | @@ -503,14 +592,32 @@ namespace Hantek { | ||
| 503 | long int valueSlow = qMax(((long int) this->samplerateDivider - 3) / 2, (long int) 0); | 592 | long int valueSlow = qMax(((long int) this->samplerateDivider - 3) / 2, (long int) 0); |
| 504 | unsigned char valueFast = this->samplerateDivider - valueSlow * 2; | 593 | unsigned char valueFast = this->samplerateDivider - valueSlow * 2; |
| 505 | 594 | ||
| 506 | - // Store samplerate fast value | ||
| 507 | - commandSetTriggerAndSamplerate->setSamplerateFast(valueFast); | ||
| 508 | - // Store samplerate slow value (two's complement) | ||
| 509 | - commandSetTriggerAndSamplerate->setSamplerateSlow(valueSlow == 0 ? 0 : 0xffff - valueSlow); | ||
| 510 | - // Set fast rate when used | ||
| 511 | - commandSetTriggerAndSamplerate->setFastRate(fastRate); | ||
| 512 | - | ||
| 513 | - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | 595 | + switch(this->commandVersion) { |
| 596 | + case 0: | ||
| 597 | + // Store samplerate fast value | ||
| 598 | + commandSetTriggerAndSamplerate->setSamplerateFast(valueFast); | ||
| 599 | + // Store samplerate slow value (two's complement) | ||
| 600 | + commandSetTriggerAndSamplerate->setSamplerateSlow(valueSlow == 0 ? 0 : 0xffff - valueSlow); | ||
| 601 | + // Set fast rate when used | ||
| 602 | + commandSetTriggerAndSamplerate->setFastRate(fastRate); | ||
| 603 | + | ||
| 604 | + this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | ||
| 605 | + | ||
| 606 | + break; | ||
| 607 | + | ||
| 608 | + default: | ||
| 609 | + // Store samplerate fast value | ||
| 610 | + commandSetSamplerate5200->setSamplerateFast(4 - valueFast); | ||
| 611 | + // Store samplerate slow value (two's complement) | ||
| 612 | + commandSetSamplerate5200->setSamplerateSlow(valueSlow == 0 ? 0 : 0xffff - valueSlow); | ||
| 613 | + // Set fast rate when used | ||
| 614 | + commandSetTrigger5200->setFastRate(fastRate); | ||
| 615 | + | ||
| 616 | + this->commandPending[COMMAND_SETSAMPLERATE5200] = true; | ||
| 617 | + this->commandPending[COMMAND_SETTRIGGER5200] = true; | ||
| 618 | + | ||
| 619 | + break; | ||
| 620 | + } | ||
| 514 | 621 | ||
| 515 | this->updateBufferSize(this->bufferSize); | 622 | this->updateBufferSize(this->bufferSize); |
| 516 | this->setTriggerSlope(this->triggerSlope); | 623 | this->setTriggerSlope(this->triggerSlope); |
| @@ -530,16 +637,33 @@ namespace Hantek { | @@ -530,16 +637,33 @@ namespace Hantek { | ||
| 530 | commandSetFilter->setChannel(channel, !used); | 637 | commandSetFilter->setChannel(channel, !used); |
| 531 | this->commandPending[COMMAND_SETFILTER] = true; | 638 | this->commandPending[COMMAND_SETFILTER] = true; |
| 532 | 639 | ||
| 533 | - // SetTriggerAndSamplerate bulk command for trigger source | ||
| 534 | - unsigned char usedChannel = USED_CH1; | ||
| 535 | - if(!commandSetFilter->getChannel(1)) { | ||
| 536 | - if(commandSetFilter->getChannel(0)) | ||
| 537 | - usedChannel = USED_CH2; | ||
| 538 | - else | ||
| 539 | - usedChannel = USED_CH1CH2; | 640 | + switch(this->commandVersion) { |
| 641 | + case 0: { | ||
| 642 | + // SetTriggerAndSamplerate bulk command for trigger source | ||
| 643 | + unsigned char usedChannels = USED_CH1; | ||
| 644 | + if(!commandSetFilter->getChannel(1)) { | ||
| 645 | + if(commandSetFilter->getChannel(0)) | ||
| 646 | + usedChannels = USED_CH2; | ||
| 647 | + else | ||
| 648 | + usedChannels = USED_CH1CH2; | ||
| 649 | + } | ||
| 650 | + ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setUsedChannels(usedChannels); | ||
| 651 | + this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | ||
| 652 | + break; | ||
| 653 | + } | ||
| 654 | + case 1: { | ||
| 655 | + unsigned char usedChannels = EUSED_CH1; | ||
| 656 | + if(!commandSetFilter->getChannel(1)) { | ||
| 657 | + if(commandSetFilter->getChannel(0)) | ||
| 658 | + usedChannels = EUSED_CH2; | ||
| 659 | + else | ||
| 660 | + usedChannels = EUSED_CH1CH2; | ||
| 661 | + } | ||
| 662 | + ((CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200])->setUsedChannels(usedChannels); | ||
| 663 | + this->commandPending[COMMAND_SETTRIGGER5200] = true; | ||
| 664 | + break; | ||
| 665 | + } | ||
| 540 | } | 666 | } |
| 541 | - ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setUsedChannel(usedChannel); | ||
| 542 | - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | ||
| 543 | 667 | ||
| 544 | return 0; | 668 | return 0; |
| 545 | } | 669 | } |
| @@ -641,9 +765,19 @@ namespace Hantek { | @@ -641,9 +765,19 @@ namespace Hantek { | ||
| 641 | else | 765 | else |
| 642 | sourceValue = TRIGGER_CH1 - id; | 766 | sourceValue = TRIGGER_CH1 - id; |
| 643 | 767 | ||
| 644 | - // SetTriggerAndSamplerate bulk command for trigger source | ||
| 645 | - ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setTriggerSource(sourceValue); | ||
| 646 | - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | 768 | + switch(this->commandVersion) { |
| 769 | + case 0: | ||
| 770 | + // SetTriggerAndSamplerate bulk command for trigger source | ||
| 771 | + ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setTriggerSource(sourceValue); | ||
| 772 | + this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | ||
| 773 | + break; | ||
| 774 | + | ||
| 775 | + case 1: | ||
| 776 | + // SetTrigger5200 bulk command for trigger source | ||
| 777 | + ((CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200])->setTriggerSource(sourceValue); | ||
| 778 | + this->commandPending[COMMAND_SETTRIGGER5200] = true; | ||
| 779 | + break; | ||
| 780 | + } | ||
| 647 | 781 | ||
| 648 | // SetRelays control command for external trigger relay | 782 | // SetRelays control command for external trigger relay |
| 649 | ((ControlSetRelays *) this->control[CONTROLINDEX_SETRELAYS])->setTrigger(special); | 783 | ((ControlSetRelays *) this->control[CONTROLINDEX_SETRELAYS])->setTrigger(special); |
| @@ -694,30 +828,61 @@ namespace Hantek { | @@ -694,30 +828,61 @@ namespace Hantek { | ||
| 694 | if(slope != Dso::SLOPE_NEGATIVE && slope != Dso::SLOPE_POSITIVE) | 828 | if(slope != Dso::SLOPE_NEGATIVE && slope != Dso::SLOPE_POSITIVE) |
| 695 | return -1; | 829 | return -1; |
| 696 | 830 | ||
| 697 | - // SetTriggerAndSamplerate bulk command for trigger position | ||
| 698 | - CommandSetTriggerAndSamplerate *commandSetTriggerAndSamplerate = (CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE]; | ||
| 699 | - | ||
| 700 | - commandSetTriggerAndSamplerate->setTriggerSlope((/*this->bufferSize != BUFFER_SMALL ||*/ commandSetTriggerAndSamplerate->getSamplerateFast() % 2 == 0) ? slope : Dso::SLOPE_NEGATIVE - slope); | ||
| 701 | - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | 831 | + switch(this->commandVersion) { |
| 832 | + case 0: { | ||
| 833 | + // SetTriggerAndSamplerate bulk command for trigger slope | ||
| 834 | + CommandSetTriggerAndSamplerate *commandSetTriggerAndSamplerate = (CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE]; | ||
| 835 | + | ||
| 836 | + commandSetTriggerAndSamplerate->setTriggerSlope((/*this->bufferSize != BUFFER_SMALL ||*/ commandSetTriggerAndSamplerate->getSamplerateFast() % 2 == 0) ? slope : Dso::SLOPE_NEGATIVE - slope); | ||
| 837 | + this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | ||
| 838 | + break; | ||
| 839 | + } | ||
| 840 | + case 1: { | ||
| 841 | + // SetTrigger5200 bulk command for trigger slope | ||
| 842 | + ((CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200])->setTriggerSlope(slope); | ||
| 843 | + this->commandPending[COMMAND_SETTRIGGER5200] = true; | ||
| 844 | + break; | ||
| 845 | + } | ||
| 846 | + } | ||
| 702 | 847 | ||
| 703 | this->triggerSlope = slope; | 848 | this->triggerSlope = slope; |
| 704 | return 0; | 849 | return 0; |
| 705 | } | 850 | } |
| 706 | 851 | ||
| 707 | /// \brief Set the trigger position. | 852 | /// \brief Set the trigger position. |
| 708 | - /// \param position The new trigger position (0.0 - 1.0). | 853 | + /// \param position The new trigger position (in s). |
| 709 | /// \return The trigger position that has been set. | 854 | /// \return The trigger position that has been set. |
| 710 | double Control::setTriggerPosition(double position) { | 855 | double Control::setTriggerPosition(double position) { |
| 711 | - // Calculate the position value (Varying start point, measured in samples) | ||
| 712 | - //unsigned long int positionRange = (this->bufferSize == BUFFER_SMALL) ? 10000 : 32768; | ||
| 713 | - unsigned long int positionStart = (this->bufferSize == BUFFER_SMALL) ? 0x77660 : 0x78000; | ||
| 714 | - unsigned long int positionValue = position * this->samplerateMax / this->samplerateDivider + positionStart; | 856 | + // All trigger position are measured in samples |
| 857 | + unsigned long int positionSamples = position * this->samplerateMax / this->samplerateDivider; | ||
| 715 | 858 | ||
| 716 | - // SetTriggerAndSamplerate bulk command for trigger position | ||
| 717 | - ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setTriggerPosition(positionValue); | ||
| 718 | - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | 859 | + switch(this->commandVersion) { |
| 860 | + case 0: { | ||
| 861 | + // Calculate the position value (Start point depending on buffer size) | ||
| 862 | + unsigned long int positionStart = (this->bufferSize == BUFFER_SMALL) ? 0x77660 : 0x78000; | ||
| 863 | + | ||
| 864 | + // SetTriggerAndSamplerate bulk command for trigger position | ||
| 865 | + ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setTriggerPosition(positionStart + positionSamples); | ||
| 866 | + this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; | ||
| 867 | + | ||
| 868 | + break; | ||
| 869 | + } | ||
| 870 | + case 1: { | ||
| 871 | + // Calculate the position values (Inverse, maximum is 0xffff) | ||
| 872 | + unsigned short int positionPre = 0xffff - this->bufferSize + positionSamples; | ||
| 873 | + unsigned short int positionPost = 0xffff - positionSamples; | ||
| 874 | + | ||
| 875 | + // SetBuffer5200 bulk command for trigger position | ||
| 876 | + CommandSetBuffer5200 *commandSetBuffer5200 = (CommandSetBuffer5200 *) this->command[COMMAND_SETBUFFER5200]; | ||
| 877 | + commandSetBuffer5200->setTriggerPositionPre(positionPre); | ||
| 878 | + commandSetBuffer5200->setTriggerPositionPost(positionPost); | ||
| 879 | + this->commandPending[COMMAND_SETBUFFER5200] = true; | ||
| 880 | + | ||
| 881 | + break; | ||
| 882 | + } | ||
| 883 | + } | ||
| 719 | 884 | ||
| 720 | this->triggerPosition = position; | 885 | this->triggerPosition = position; |
| 721 | - return (double) (positionValue - positionStart) / this->samplerateMax * this->samplerateDivider; | 886 | + return (double) positionSamples / this->samplerateMax * this->samplerateDivider; |
| 722 | } | 887 | } |
| 723 | } | 888 | } |
openhantek/src/hantek/control.h
| @@ -80,6 +80,8 @@ namespace Hantek { | @@ -80,6 +80,8 @@ namespace Hantek { | ||
| 80 | unsigned char controlCode[CONTROLINDEX_COUNT]; ///< Request codes for control commands | 80 | unsigned char controlCode[CONTROLINDEX_COUNT]; ///< Request codes for control commands |
| 81 | bool controlPending[CONTROLINDEX_COUNT]; ///< true, when the control command should be executed | 81 | bool controlPending[CONTROLINDEX_COUNT]; ///< true, when the control command should be executed |
| 82 | 82 | ||
| 83 | + short int commandVersion; ///< The used version of the commands | ||
| 84 | + | ||
| 83 | /// Calibration data for the channel offsets | 85 | /// Calibration data for the channel offsets |
| 84 | unsigned short int channelLevels[HANTEK_CHANNELS][GAIN_COUNT][OFFSET_COUNT]; | 86 | unsigned short int channelLevels[HANTEK_CHANNELS][GAIN_COUNT][OFFSET_COUNT]; |
| 85 | 87 | ||
| @@ -107,6 +109,8 @@ namespace Hantek { | @@ -107,6 +109,8 @@ namespace Hantek { | ||
| 107 | QList<double> gainSteps; ///< Voltage steps in V/screenheight | 109 | QList<double> gainSteps; ///< Voltage steps in V/screenheight |
| 108 | 110 | ||
| 109 | public slots: | 111 | public slots: |
| 112 | + virtual void connectDevice(); | ||
| 113 | + | ||
| 110 | unsigned long int setSamplerate(unsigned long int samplerate); | 114 | unsigned long int setSamplerate(unsigned long int samplerate); |
| 111 | unsigned long int setBufferSize(unsigned long int size); | 115 | unsigned long int setBufferSize(unsigned long int size); |
| 112 | 116 |
openhantek/src/hantek/types.cpp
| @@ -31,7 +31,7 @@ | @@ -31,7 +31,7 @@ | ||
| 31 | 31 | ||
| 32 | 32 | ||
| 33 | namespace Hantek { | 33 | namespace Hantek { |
| 34 | - //////////////////////////////////////////////////////////////////////////////// | 34 | + ////////////////////////////////////////////////////////////////////////////// |
| 35 | // class CommandSetFilter | 35 | // class CommandSetFilter |
| 36 | /// \brief Sets the data array to the default values. | 36 | /// \brief Sets the data array to the default values. |
| 37 | CommandSetFilter::CommandSetFilter() : Helper::DataArray<unsigned char>(8) { | 37 | CommandSetFilter::CommandSetFilter() : Helper::DataArray<unsigned char>(8) { |
| @@ -93,7 +93,7 @@ namespace Hantek { | @@ -93,7 +93,7 @@ namespace Hantek { | ||
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | 95 | ||
| 96 | - //////////////////////////////////////////////////////////////////////////////// | 96 | + ////////////////////////////////////////////////////////////////////////////// |
| 97 | // class CommandSetTriggerAndSamplerate | 97 | // class CommandSetTriggerAndSamplerate |
| 98 | /// \brief Sets the data array to the default values. | 98 | /// \brief Sets the data array to the default values. |
| 99 | CommandSetTriggerAndSamplerate::CommandSetTriggerAndSamplerate() : Helper::DataArray<unsigned char>(12) { | 99 | CommandSetTriggerAndSamplerate::CommandSetTriggerAndSamplerate() : Helper::DataArray<unsigned char>(12) { |
| @@ -101,24 +101,24 @@ namespace Hantek { | @@ -101,24 +101,24 @@ namespace Hantek { | ||
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | /// \brief Sets the data bytes to the specified values. | 103 | /// \brief Sets the data bytes to the specified values. |
| 104 | - /// \param samplerate The samplerate value. | 104 | + /// \param samplerateSlow The SamplerateSlow value. |
| 105 | /// \param triggerPosition The trigger position value. | 105 | /// \param triggerPosition The trigger position value. |
| 106 | /// \param triggerSource The trigger source id (Tsr1). | 106 | /// \param triggerSource The trigger source id (Tsr1). |
| 107 | - /// \param sampleSize The buffer size id (Tsr1). | 107 | + /// \param bufferSize The buffer size id (Tsr1). |
| 108 | /// \param samplerateFast The samplerateFast value (Tsr1). | 108 | /// \param samplerateFast The samplerateFast value (Tsr1). |
| 109 | - /// \param usedChannel The enabled channels (Tsr2). | 109 | + /// \param usedChannels The enabled channels (Tsr2). |
| 110 | /// \param fastRate The fastRate state (Tsr2). | 110 | /// \param fastRate The fastRate state (Tsr2). |
| 111 | /// \param triggerSlope The triggerSlope value (Tsr2). | 111 | /// \param triggerSlope The triggerSlope value (Tsr2). |
| 112 | - CommandSetTriggerAndSamplerate::CommandSetTriggerAndSamplerate(unsigned short int samplerate, unsigned long int triggerPosition, unsigned char triggerSource, unsigned char sampleSize, unsigned char samplerateFast, unsigned char usedChannel, bool fastRate, unsigned char triggerSlope) : Helper::DataArray<unsigned char>(12) { | 112 | + CommandSetTriggerAndSamplerate::CommandSetTriggerAndSamplerate(unsigned short int samplerateSlow, unsigned long int triggerPosition, unsigned char triggerSource, unsigned char bufferSize, unsigned char samplerateFast, unsigned char usedChannels, bool fastRate, unsigned char triggerSlope) : Helper::DataArray<unsigned char>(12) { |
| 113 | this->init(); | 113 | this->init(); |
| 114 | 114 | ||
| 115 | this->setTriggerSource(triggerSource); | 115 | this->setTriggerSource(triggerSource); |
| 116 | - this->setBufferSize(sampleSize); | 116 | + this->setBufferSize(bufferSize); |
| 117 | this->setSamplerateFast(samplerateFast); | 117 | this->setSamplerateFast(samplerateFast); |
| 118 | - this->setUsedChannel(usedChannel); | 118 | + this->setUsedChannels(usedChannels); |
| 119 | this->setFastRate(fastRate); | 119 | this->setFastRate(fastRate); |
| 120 | this->setTriggerSlope(triggerSlope); | 120 | this->setTriggerSlope(triggerSlope); |
| 121 | - this->setSamplerateSlow(samplerate); | 121 | + this->setSamplerateSlow(samplerateSlow); |
| 122 | this->setTriggerPosition(triggerPosition); | 122 | this->setTriggerPosition(triggerPosition); |
| 123 | } | 123 | } |
| 124 | 124 | ||
| @@ -134,16 +134,16 @@ namespace Hantek { | @@ -134,16 +134,16 @@ namespace Hantek { | ||
| 134 | ((Tsr1Bits *) &(this->array[2]))->triggerSource = value; | 134 | ((Tsr1Bits *) &(this->array[2]))->triggerSource = value; |
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | - /// \brief Get the sampleSize value in Tsr1Bits. | ||
| 138 | - /// \return The sampleSize value. | 137 | + /// \brief Get the bufferSize value in Tsr1Bits. |
| 138 | + /// \return The #BufferSizeId value. | ||
| 139 | unsigned char CommandSetTriggerAndSamplerate::getBufferSize() { | 139 | unsigned char CommandSetTriggerAndSamplerate::getBufferSize() { |
| 140 | - return ((Tsr1Bits *) &(this->array[2]))->sampleSize; | 140 | + return ((Tsr1Bits *) &(this->array[2]))->bufferSize; |
| 141 | } | 141 | } |
| 142 | 142 | ||
| 143 | - /// \brief Set the sampleSize in Tsr1Bits to the given value. | ||
| 144 | - /// \param value The new sampleSize value. | 143 | + /// \brief Set the bufferSize in Tsr1Bits to the given value. |
| 144 | + /// \param value The new #BufferSizeId value. | ||
| 145 | void CommandSetTriggerAndSamplerate::setBufferSize(unsigned char value) { | 145 | void CommandSetTriggerAndSamplerate::setBufferSize(unsigned char value) { |
| 146 | - ((Tsr1Bits *) &(this->array[2]))->sampleSize = value; | 146 | + ((Tsr1Bits *) &(this->array[2]))->bufferSize = value; |
| 147 | } | 147 | } |
| 148 | 148 | ||
| 149 | /// \brief Get the samplerateFast value in Tsr1Bits. | 149 | /// \brief Get the samplerateFast value in Tsr1Bits. |
| @@ -158,16 +158,16 @@ namespace Hantek { | @@ -158,16 +158,16 @@ namespace Hantek { | ||
| 158 | ((Tsr1Bits *) &(this->array[2]))->samplerateFast = value; | 158 | ((Tsr1Bits *) &(this->array[2]))->samplerateFast = value; |
| 159 | } | 159 | } |
| 160 | 160 | ||
| 161 | - /// \brief Get the usedChannel value in Tsr2Bits. | ||
| 162 | - /// \return The usedChannel value. | ||
| 163 | - unsigned char CommandSetTriggerAndSamplerate::getUsedChannel() { | ||
| 164 | - return ((Tsr2Bits *) &(this->array[3]))->usedChannel; | 161 | + /// \brief Get the usedChannels value in Tsr2Bits. |
| 162 | + /// \return The usedChannels value. | ||
| 163 | + unsigned char CommandSetTriggerAndSamplerate::getUsedChannels() { | ||
| 164 | + return ((Tsr2Bits *) &(this->array[3]))->usedChannels; | ||
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | - /// \brief Set the usedChannel in Tsr2Bits to the given value. | ||
| 168 | - /// \param value The new usedChannel value. | ||
| 169 | - void CommandSetTriggerAndSamplerate::setUsedChannel(unsigned char value) { | ||
| 170 | - ((Tsr2Bits *) &(this->array[3]))->usedChannel = value; | 167 | + /// \brief Set the usedChannels in Tsr2Bits to the given value. |
| 168 | + /// \param value The new usedChannels value. | ||
| 169 | + void CommandSetTriggerAndSamplerate::setUsedChannels(unsigned char value) { | ||
| 170 | + ((Tsr2Bits *) &(this->array[3]))->usedChannels = value; | ||
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | /// \brief Get the fastRate state in Tsr2Bits. | 173 | /// \brief Get the fastRate state in Tsr2Bits. |
| @@ -194,14 +194,14 @@ namespace Hantek { | @@ -194,14 +194,14 @@ namespace Hantek { | ||
| 194 | ((Tsr2Bits *) &(this->array[3]))->triggerSlope = slope; | 194 | ((Tsr2Bits *) &(this->array[3]))->triggerSlope = slope; |
| 195 | } | 195 | } |
| 196 | 196 | ||
| 197 | - /// \brief Get the Samplerate value. | ||
| 198 | - /// \return The samplerate value. | ||
| 199 | - unsigned short int CommandSetTriggerAndSamplerate::getSamplerate() { | 197 | + /// \brief Get the SamplerateSlow value. |
| 198 | + /// \return The SamplerateSlow value. | ||
| 199 | + unsigned short int CommandSetTriggerAndSamplerate::getSamplerateSlow() { | ||
| 200 | return (unsigned short int) this->array[4] | ((unsigned short int) this->array[5] << 8); | 200 | return (unsigned short int) this->array[4] | ((unsigned short int) this->array[5] << 8); |
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | - /// \brief Set the Samplerate to the given value. | ||
| 204 | - /// \param samplerate The new samplerate value. | 203 | + /// \brief Set the SamplerateSlow to the given value. |
| 204 | + /// \param samplerate The new SamplerateSlow value. | ||
| 205 | void CommandSetTriggerAndSamplerate::setSamplerateSlow(unsigned short int samplerate) { | 205 | void CommandSetTriggerAndSamplerate::setSamplerateSlow(unsigned short int samplerate) { |
| 206 | this->array[4] = (unsigned char) samplerate; | 206 | this->array[4] = (unsigned char) samplerate; |
| 207 | this->array[5] = (unsigned char) (samplerate >> 8); | 207 | this->array[5] = (unsigned char) (samplerate >> 8); |
| @@ -227,7 +227,7 @@ namespace Hantek { | @@ -227,7 +227,7 @@ namespace Hantek { | ||
| 227 | } | 227 | } |
| 228 | 228 | ||
| 229 | 229 | ||
| 230 | - //////////////////////////////////////////////////////////////////////////////// | 230 | + ////////////////////////////////////////////////////////////////////////////// |
| 231 | // class CommandForceTrigger | 231 | // class CommandForceTrigger |
| 232 | /// \brief Sets the data array to needed values. | 232 | /// \brief Sets the data array to needed values. |
| 233 | CommandForceTrigger::CommandForceTrigger() : Helper::DataArray<unsigned char>(2) { | 233 | CommandForceTrigger::CommandForceTrigger() : Helper::DataArray<unsigned char>(2) { |
| @@ -235,7 +235,7 @@ namespace Hantek { | @@ -235,7 +235,7 @@ namespace Hantek { | ||
| 235 | } | 235 | } |
| 236 | 236 | ||
| 237 | 237 | ||
| 238 | - //////////////////////////////////////////////////////////////////////////////// | 238 | + ////////////////////////////////////////////////////////////////////////////// |
| 239 | // class CommandCaptureStart | 239 | // class CommandCaptureStart |
| 240 | /// \brief Sets the data array to needed values. | 240 | /// \brief Sets the data array to needed values. |
| 241 | CommandCaptureStart::CommandCaptureStart() : Helper::DataArray<unsigned char>(2) { | 241 | CommandCaptureStart::CommandCaptureStart() : Helper::DataArray<unsigned char>(2) { |
| @@ -243,7 +243,7 @@ namespace Hantek { | @@ -243,7 +243,7 @@ namespace Hantek { | ||
| 243 | } | 243 | } |
| 244 | 244 | ||
| 245 | 245 | ||
| 246 | - //////////////////////////////////////////////////////////////////////////////// | 246 | + ////////////////////////////////////////////////////////////////////////////// |
| 247 | // class CommandTriggerEnabled | 247 | // class CommandTriggerEnabled |
| 248 | /// \brief Sets the data array to needed values. | 248 | /// \brief Sets the data array to needed values. |
| 249 | CommandTriggerEnabled::CommandTriggerEnabled() : Helper::DataArray<unsigned char>(2) { | 249 | CommandTriggerEnabled::CommandTriggerEnabled() : Helper::DataArray<unsigned char>(2) { |
| @@ -251,7 +251,7 @@ namespace Hantek { | @@ -251,7 +251,7 @@ namespace Hantek { | ||
| 251 | } | 251 | } |
| 252 | 252 | ||
| 253 | 253 | ||
| 254 | - //////////////////////////////////////////////////////////////////////////////// | 254 | + ////////////////////////////////////////////////////////////////////////////// |
| 255 | // class CommandGetData | 255 | // class CommandGetData |
| 256 | /// \brief Sets the data array to needed values. | 256 | /// \brief Sets the data array to needed values. |
| 257 | CommandGetData::CommandGetData() : Helper::DataArray<unsigned char>(2) { | 257 | CommandGetData::CommandGetData() : Helper::DataArray<unsigned char>(2) { |
| @@ -259,7 +259,7 @@ namespace Hantek { | @@ -259,7 +259,7 @@ namespace Hantek { | ||
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | 261 | ||
| 262 | - //////////////////////////////////////////////////////////////////////////////// | 262 | + ////////////////////////////////////////////////////////////////////////////// |
| 263 | // class CommandGetCaptureState | 263 | // class CommandGetCaptureState |
| 264 | /// \brief Sets the data array to needed values. | 264 | /// \brief Sets the data array to needed values. |
| 265 | CommandGetCaptureState::CommandGetCaptureState() : Helper::DataArray<unsigned char>(2) { | 265 | CommandGetCaptureState::CommandGetCaptureState() : Helper::DataArray<unsigned char>(2) { |
| @@ -267,7 +267,7 @@ namespace Hantek { | @@ -267,7 +267,7 @@ namespace Hantek { | ||
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | 269 | ||
| 270 | - //////////////////////////////////////////////////////////////////////////////// | 270 | + ////////////////////////////////////////////////////////////////////////////// |
| 271 | // class ResponseGetCaptureState | 271 | // class ResponseGetCaptureState |
| 272 | /// \brief Initializes the array. | 272 | /// \brief Initializes the array. |
| 273 | ResponseGetCaptureState::ResponseGetCaptureState() : Helper::DataArray<unsigned char>(512) { | 273 | ResponseGetCaptureState::ResponseGetCaptureState() : Helper::DataArray<unsigned char>(512) { |
| @@ -286,7 +286,7 @@ namespace Hantek { | @@ -286,7 +286,7 @@ namespace Hantek { | ||
| 286 | } | 286 | } |
| 287 | 287 | ||
| 288 | 288 | ||
| 289 | - //////////////////////////////////////////////////////////////////////////////// | 289 | + ////////////////////////////////////////////////////////////////////////////// |
| 290 | // class CommandSetGain | 290 | // class CommandSetGain |
| 291 | /// \brief Sets the data array to needed values. | 291 | /// \brief Sets the data array to needed values. |
| 292 | CommandSetGain::CommandSetGain() : Helper::DataArray<unsigned char>(8) { | 292 | CommandSetGain::CommandSetGain() : Helper::DataArray<unsigned char>(8) { |
| @@ -333,7 +333,7 @@ namespace Hantek { | @@ -333,7 +333,7 @@ namespace Hantek { | ||
| 333 | } | 333 | } |
| 334 | 334 | ||
| 335 | 335 | ||
| 336 | - //////////////////////////////////////////////////////////////////////////////// | 336 | + ////////////////////////////////////////////////////////////////////////////// |
| 337 | // class CommandSetLogicalData | 337 | // class CommandSetLogicalData |
| 338 | /// \brief Sets the data array to needed values. | 338 | /// \brief Sets the data array to needed values. |
| 339 | CommandSetLogicalData::CommandSetLogicalData() : Helper::DataArray<unsigned char>(8) { | 339 | CommandSetLogicalData::CommandSetLogicalData() : Helper::DataArray<unsigned char>(8) { |
| @@ -367,7 +367,7 @@ namespace Hantek { | @@ -367,7 +367,7 @@ namespace Hantek { | ||
| 367 | } | 367 | } |
| 368 | 368 | ||
| 369 | 369 | ||
| 370 | - //////////////////////////////////////////////////////////////////////////////// | 370 | + ////////////////////////////////////////////////////////////////////////////// |
| 371 | // class CommandGetLogicalData | 371 | // class CommandGetLogicalData |
| 372 | /// \brief Sets the data array to needed values. | 372 | /// \brief Sets the data array to needed values. |
| 373 | CommandGetLogicalData::CommandGetLogicalData() : Helper::DataArray<unsigned char>(2) { | 373 | CommandGetLogicalData::CommandGetLogicalData() : Helper::DataArray<unsigned char>(2) { |
| @@ -375,7 +375,7 @@ namespace Hantek { | @@ -375,7 +375,7 @@ namespace Hantek { | ||
| 375 | } | 375 | } |
| 376 | 376 | ||
| 377 | 377 | ||
| 378 | - //////////////////////////////////////////////////////////////////////////////// | 378 | + ////////////////////////////////////////////////////////////////////////////// |
| 379 | // class ControlGetSpeed | 379 | // class ControlGetSpeed |
| 380 | /// \brief Initializes the array. | 380 | /// \brief Initializes the array. |
| 381 | ControlGetSpeed::ControlGetSpeed() : Helper::DataArray<unsigned char>(10) { | 381 | ControlGetSpeed::ControlGetSpeed() : Helper::DataArray<unsigned char>(10) { |
| @@ -388,7 +388,7 @@ namespace Hantek { | @@ -388,7 +388,7 @@ namespace Hantek { | ||
| 388 | } | 388 | } |
| 389 | 389 | ||
| 390 | 390 | ||
| 391 | - //////////////////////////////////////////////////////////////////////////////// | 391 | + ////////////////////////////////////////////////////////////////////////////// |
| 392 | // class ControlBeginCommand | 392 | // class ControlBeginCommand |
| 393 | /// \brief Sets the command index to the given value. | 393 | /// \brief Sets the command index to the given value. |
| 394 | /// \param index The CommandIndex for the command. | 394 | /// \param index The CommandIndex for the command. |
| @@ -416,7 +416,7 @@ namespace Hantek { | @@ -416,7 +416,7 @@ namespace Hantek { | ||
| 416 | } | 416 | } |
| 417 | 417 | ||
| 418 | 418 | ||
| 419 | - //////////////////////////////////////////////////////////////////////////////// | 419 | + ////////////////////////////////////////////////////////////////////////////// |
| 420 | // class ControlSetOffset | 420 | // class ControlSetOffset |
| 421 | /// \brief Sets the data array to the default values. | 421 | /// \brief Sets the data array to the default values. |
| 422 | ControlSetOffset::ControlSetOffset() : Helper::DataArray<unsigned char>(17) { | 422 | ControlSetOffset::ControlSetOffset() : Helper::DataArray<unsigned char>(17) { |
| @@ -470,7 +470,7 @@ namespace Hantek { | @@ -470,7 +470,7 @@ namespace Hantek { | ||
| 470 | } | 470 | } |
| 471 | 471 | ||
| 472 | 472 | ||
| 473 | - //////////////////////////////////////////////////////////////////////////////// | 473 | + ////////////////////////////////////////////////////////////////////////////// |
| 474 | // class ControlSetRelays | 474 | // class ControlSetRelays |
| 475 | /// \brief Sets all relay states. | 475 | /// \brief Sets all relay states. |
| 476 | /// \param ch1Below1V Sets the state of the Channel 1 below 1 V relay. | 476 | /// \param ch1Below1V Sets the state of the Channel 1 below 1 V relay. |
| @@ -561,4 +561,235 @@ namespace Hantek { | @@ -561,4 +561,235 @@ namespace Hantek { | ||
| 561 | void ControlSetRelays::setTrigger(bool ext) { | 561 | void ControlSetRelays::setTrigger(bool ext) { |
| 562 | this->array[7] = ext ? 0xfe : 0x01; | 562 | this->array[7] = ext ? 0xfe : 0x01; |
| 563 | } | 563 | } |
| 564 | + | ||
| 565 | + | ||
| 566 | + ////////////////////////////////////////////////////////////////////////////// | ||
| 567 | + // class CommandSetSamplerate5200 | ||
| 568 | + /// \brief Sets the data array to the default values. | ||
| 569 | + CommandSetSamplerate5200::CommandSetSamplerate5200() : Helper::DataArray<unsigned char>(6) { | ||
| 570 | + this->init(); | ||
| 571 | + } | ||
| 572 | + | ||
| 573 | + /// \brief Sets the data bytes to the specified values. | ||
| 574 | + /// \param samplerateSlow The SamplerateSlow value. | ||
| 575 | + /// \param samplerateFast The SamplerateFast value. | ||
| 576 | + CommandSetSamplerate5200::CommandSetSamplerate5200(unsigned short int samplerateSlow, unsigned char samplerateFast) : Helper::DataArray<unsigned char>(6) { | ||
| 577 | + this->init(); | ||
| 578 | + | ||
| 579 | + this->setSamplerateFast(samplerateFast); | ||
| 580 | + this->setSamplerateSlow(samplerateSlow); | ||
| 581 | + } | ||
| 582 | + | ||
| 583 | + /// \brief Get the SamplerateFast value. | ||
| 584 | + /// \return The SamplerateFast value. | ||
| 585 | + unsigned char CommandSetSamplerate5200::getSamplerateFast() { | ||
| 586 | + return this->array[4]; | ||
| 587 | + } | ||
| 588 | + | ||
| 589 | + /// \brief Set the SamplerateFast to the given value. | ||
| 590 | + /// \param value The new SamplerateFast value. | ||
| 591 | + void CommandSetSamplerate5200::setSamplerateFast(unsigned char value) { | ||
| 592 | + this->array[4] = value; | ||
| 593 | + } | ||
| 594 | + | ||
| 595 | + /// \brief Get the SamplerateSlow value. | ||
| 596 | + /// \return The SamplerateSlow value. | ||
| 597 | + unsigned short int CommandSetSamplerate5200::getSamplerateSlow() { | ||
| 598 | + return (unsigned short int) this->array[2] | ((unsigned short int) this->array[3] << 8); | ||
| 599 | + } | ||
| 600 | + | ||
| 601 | + /// \brief Set the SamplerateSlow to the given value. | ||
| 602 | + /// \param samplerate The new SamplerateSlow value. | ||
| 603 | + void CommandSetSamplerate5200::setSamplerateSlow(unsigned short int samplerate) { | ||
| 604 | + this->array[2] = (unsigned char) samplerate; | ||
| 605 | + this->array[3] = (unsigned char) (samplerate >> 8); | ||
| 606 | + } | ||
| 607 | + | ||
| 608 | + /// \brief Initialize the array to the needed values. | ||
| 609 | + void CommandSetSamplerate5200::init() { | ||
| 610 | + this->array[0] = COMMAND_SETSAMPLERATE5200; | ||
| 611 | + } | ||
| 612 | + | ||
| 613 | + | ||
| 614 | + ////////////////////////////////////////////////////////////////////////////// | ||
| 615 | + // class CommandSetBuffer5200 | ||
| 616 | + /// \brief Sets the data array to the default values. | ||
| 617 | + CommandSetBuffer5200::CommandSetBuffer5200() : Helper::DataArray<unsigned char>(10) { | ||
| 618 | + this->init(); | ||
| 619 | + } | ||
| 620 | + | ||
| 621 | + /// \brief Sets the data bytes to the specified values. | ||
| 622 | + /// \param triggerPositionPre The TriggerPositionPre value. | ||
| 623 | + /// \param triggerPositionPost The TriggerPositionPost value. | ||
| 624 | + /// \param usedPre The TriggerPositionUsedPre value. | ||
| 625 | + /// \param usedPost The TriggerPositionUsedPost value. | ||
| 626 | + /// \param bufferSize The #BufferSizeId value. | ||
| 627 | + CommandSetBuffer5200::CommandSetBuffer5200(unsigned short int triggerPositionPre, unsigned short int triggerPositionPost, unsigned char usedPre, unsigned char usedPost, unsigned char bufferSize) : Helper::DataArray<unsigned char>(10) { | ||
| 628 | + this->init(); | ||
| 629 | + | ||
| 630 | + this->setTriggerPositionPre(triggerPositionPre); | ||
| 631 | + this->setTriggerPositionPost(triggerPositionPost); | ||
| 632 | + this->setUsedPre(usedPre); | ||
| 633 | + this->setUsedPost(usedPost); | ||
| 634 | + this->setBufferSize(bufferSize); | ||
| 635 | + } | ||
| 636 | + | ||
| 637 | + /// \brief Get the TriggerPositionPre value. | ||
| 638 | + /// \return The TriggerPositionPre value. | ||
| 639 | + unsigned short int CommandSetBuffer5200::getTriggerPositionPre() { | ||
| 640 | + return (unsigned short int) this->array[2] | ((unsigned short int) this->array[3] << 8); | ||
| 641 | + } | ||
| 642 | + | ||
| 643 | + /// \brief Set the TriggerPositionPre to the given value. | ||
| 644 | + /// \param position The new TriggerPositionPre value. | ||
| 645 | + void CommandSetBuffer5200::setTriggerPositionPre(unsigned short int position) { | ||
| 646 | + this->array[2] = (unsigned char) position; | ||
| 647 | + this->array[3] = (unsigned char) (position >> 8); | ||
| 648 | + } | ||
| 649 | + | ||
| 650 | + /// \brief Get the TriggerPositionPost value. | ||
| 651 | + /// \return The TriggerPositionPost value. | ||
| 652 | + unsigned short int CommandSetBuffer5200::getTriggerPositionPost() { | ||
| 653 | + return (unsigned short int) this->array[6] | ((unsigned short int) this->array[7] << 8); | ||
| 654 | + } | ||
| 655 | + | ||
| 656 | + /// \brief Set the TriggerPositionPost to the given value. | ||
| 657 | + /// \param position The new TriggerPositionPost value. | ||
| 658 | + void CommandSetBuffer5200::setTriggerPositionPost(unsigned short int position) { | ||
| 659 | + this->array[6] = (unsigned char) position; | ||
| 660 | + this->array[7] = (unsigned char) (position >> 8); | ||
| 661 | + } | ||
| 662 | + | ||
| 663 | + /// \brief Get the TriggerPositionUsedPre value. | ||
| 664 | + /// \return The #DTriggerPositionUsed value for the pre position. | ||
| 665 | + unsigned char CommandSetBuffer5200::getUsedPre() { | ||
| 666 | + return this->array[4]; | ||
| 667 | + } | ||
| 668 | + | ||
| 669 | + /// \brief Set the TriggerPositionUsedPre to the given value. | ||
| 670 | + /// \param value The new #DTriggerPositionUsed value for the pre position. | ||
| 671 | + void CommandSetBuffer5200::setUsedPre(unsigned char value) { | ||
| 672 | + this->array[4] = value; | ||
| 673 | + } | ||
| 674 | + | ||
| 675 | + /// \brief Get the TriggerPositionUsedPost value. | ||
| 676 | + /// \return The #DTriggerPositionUsed value for the post position. | ||
| 677 | + unsigned char CommandSetBuffer5200::getUsedPost() { | ||
| 678 | + return ((DBufferBits *) &(this->array[8]))->triggerPositionUsed; | ||
| 679 | + } | ||
| 680 | + | ||
| 681 | + /// \brief Set the TriggerPositionUsedPost to the given value. | ||
| 682 | + /// \param value The new #DTriggerPositionUsed value for the post position. | ||
| 683 | + void CommandSetBuffer5200::setUsedPost(unsigned char value) { | ||
| 684 | + ((DBufferBits *) &(this->array[8]))->triggerPositionUsed = value; | ||
| 685 | + } | ||
| 686 | + | ||
| 687 | + /// \brief Get the bufferSize value in DBufferBits. | ||
| 688 | + /// \return The #BufferSizeId value. | ||
| 689 | + unsigned char CommandSetBuffer5200::getBufferSize() { | ||
| 690 | + return ((DBufferBits *) &(this->array[8]))->bufferSize; | ||
| 691 | + } | ||
| 692 | + | ||
| 693 | + /// \brief Set the bufferSize in DBufferBits to the given value. | ||
| 694 | + /// \param value The new #BufferSizeId value. | ||
| 695 | + void CommandSetBuffer5200::setBufferSize(unsigned char value) { | ||
| 696 | + ((DBufferBits *) &(this->array[8]))->bufferSize = value; | ||
| 697 | + } | ||
| 698 | + | ||
| 699 | + /// \brief Initialize the array to the needed values. | ||
| 700 | + void CommandSetBuffer5200::init() { | ||
| 701 | + this->array[0] = COMMAND_SETBUFFER5200; | ||
| 702 | + this->array[5] = 0xff; | ||
| 703 | + this->array[9] = 0xff; | ||
| 704 | + } | ||
| 705 | + | ||
| 706 | + | ||
| 707 | + ////////////////////////////////////////////////////////////////////////////// | ||
| 708 | + // class CommandSetTrigger5200 | ||
| 709 | + /// \brief Sets the data array to the default values. | ||
| 710 | + CommandSetTrigger5200::CommandSetTrigger5200() : Helper::DataArray<unsigned char>(10) { | ||
| 711 | + this->init(); | ||
| 712 | + } | ||
| 713 | + | ||
| 714 | + /// \brief Sets the data bytes to the specified values. | ||
| 715 | + /// \param triggerSource The trigger source id. | ||
| 716 | + /// \param usedChannels The enabled channels. | ||
| 717 | + /// \param fastRate The fastRate state. | ||
| 718 | + /// \param triggerSlope The triggerSlope value. | ||
| 719 | + /// \param triggerPulse The triggerPulse value. | ||
| 720 | + CommandSetTrigger5200::CommandSetTrigger5200(unsigned char triggerSource, unsigned char usedChannels, bool fastRate, unsigned char triggerSlope, unsigned char triggerPulse) : Helper::DataArray<unsigned char>(8) { | ||
| 721 | + this->init(); | ||
| 722 | + | ||
| 723 | + this->setTriggerSource(triggerSource); | ||
| 724 | + this->setUsedChannels(usedChannels); | ||
| 725 | + this->setFastRate(fastRate); | ||
| 726 | + this->setTriggerSlope(triggerSlope); | ||
| 727 | + this->setTriggerPulse(triggerPulse); | ||
| 728 | + } | ||
| 729 | + | ||
| 730 | + /// \brief Get the triggerSource value in ETsrBits. | ||
| 731 | + /// \return The #TriggerSource value. | ||
| 732 | + unsigned char CommandSetTrigger5200::getTriggerSource() { | ||
| 733 | + return ((ETsrBits *) &(this->array[2]))->triggerSource; | ||
| 734 | + } | ||
| 735 | + | ||
| 736 | + /// \brief Set the triggerSource in ETsrBits to the given value. | ||
| 737 | + /// \param value The new #TriggerSource value. | ||
| 738 | + void CommandSetTrigger5200::setTriggerSource(unsigned char value) { | ||
| 739 | + ((ETsrBits *) &(this->array[2]))->triggerSource = value; | ||
| 740 | + } | ||
| 741 | + | ||
| 742 | + /// \brief Get the usedChannels value in ETsrBits. | ||
| 743 | + /// \return The #EUsedChannels value. | ||
| 744 | + unsigned char CommandSetTrigger5200::getUsedChannels() { | ||
| 745 | + return ((ETsrBits *) &(this->array[2]))->usedChannels; | ||
| 746 | + } | ||
| 747 | + | ||
| 748 | + /// \brief Set the usedChannels in ETsrBits to the given value. | ||
| 749 | + /// \param value The new #EUsedChannels value. | ||
| 750 | + void CommandSetTrigger5200::setUsedChannels(unsigned char value) { | ||
| 751 | + ((ETsrBits *) &(this->array[2]))->usedChannels = value; | ||
| 752 | + } | ||
| 753 | + | ||
| 754 | + /// \brief Get the fastRate state in ETsrBits. | ||
| 755 | + /// \return The fastRate state (Already inverted). | ||
| 756 | + bool CommandSetTrigger5200::getFastRate() { | ||
| 757 | + return ((ETsrBits *) &(this->array[2]))->fastRate == 0; | ||
| 758 | + } | ||
| 759 | + | ||
| 760 | + /// \brief Set the fastRate in ETsrBits to the given state. | ||
| 761 | + /// \param fastRate The new fastRate state (Automatically inverted). | ||
| 762 | + void CommandSetTrigger5200::setFastRate(bool fastRate) { | ||
| 763 | + ((ETsrBits *) &(this->array[2]))->fastRate = fastRate ? 0 : 1; | ||
| 764 | + } | ||
| 765 | + | ||
| 766 | + /// \brief Get the triggerSlope value in ETsrBits. | ||
| 767 | + /// \return The triggerSlope value. | ||
| 768 | + unsigned char CommandSetTrigger5200::getTriggerSlope() { | ||
| 769 | + return ((ETsrBits *) &(this->array[2]))->triggerSlope; | ||
| 770 | + } | ||
| 771 | + | ||
| 772 | + /// \brief Set the triggerSlope in ETsrBits to the given value. | ||
| 773 | + /// \param slope The new triggerSlope value. | ||
| 774 | + void CommandSetTrigger5200::setTriggerSlope(unsigned char slope) { | ||
| 775 | + ((ETsrBits *) &(this->array[2]))->triggerSlope = slope; | ||
| 776 | + } | ||
| 777 | + | ||
| 778 | + /// \brief Get the triggerPulse state in ETsrBits. | ||
| 779 | + /// \return The triggerPulse state. | ||
| 780 | + bool CommandSetTrigger5200::getTriggerPulse() { | ||
| 781 | + return ((ETsrBits *) &(this->array[2]))->triggerPulse == 1; | ||
| 782 | + } | ||
| 783 | + | ||
| 784 | + /// \brief Set the triggerPulse in ETsrBits to the given state. | ||
| 785 | + /// \param pulse The new triggerPulse state. | ||
| 786 | + void CommandSetTrigger5200::setTriggerPulse(bool pulse) { | ||
| 787 | + ((ETsrBits *) &(this->array[2]))->triggerPulse = pulse ? 1 : 0; | ||
| 788 | + } | ||
| 789 | + | ||
| 790 | + /// \brief Initialize the array to the needed values. | ||
| 791 | + void CommandSetTrigger5200::init() { | ||
| 792 | + this->array[0] = COMMAND_SETTRIGGER5200; | ||
| 793 | + this->array[4] = 0x02; | ||
| 794 | + } | ||
| 564 | } | 795 | } |
openhantek/src/hantek/types.h
| @@ -51,234 +51,287 @@ namespace Hantek { | @@ -51,234 +51,287 @@ namespace Hantek { | ||
| 51 | /// \brief All supported bulk commands. | 51 | /// \brief All supported bulk commands. |
| 52 | /// Indicies given in square brackets specify byte numbers in little endian format. | 52 | /// Indicies given in square brackets specify byte numbers in little endian format. |
| 53 | enum CommandCode { | 53 | enum CommandCode { |
| 54 | - /// This command sets channel and trigger filter: | ||
| 55 | - /// <table> | ||
| 56 | - /// <tr> | ||
| 57 | - /// <td>0x00</td> | ||
| 58 | - /// <td>0x0f</td> | ||
| 59 | - /// <td>FilterBits</td> | ||
| 60 | - /// <td>0x00</td> | ||
| 61 | - /// <td>0x00</td> | ||
| 62 | - /// <td>0x00</td> | ||
| 63 | - /// <td>0x00</td> | ||
| 64 | - /// <td>0x00</td> | ||
| 65 | - /// </tr> | ||
| 66 | - /// </table> | 54 | + /// <p> |
| 55 | + /// This command sets channel and trigger filter: | ||
| 56 | + /// <table> | ||
| 57 | + /// <tr> | ||
| 58 | + /// <td>0x00</td> | ||
| 59 | + /// <td>0x0f</td> | ||
| 60 | + /// <td>FilterBits</td> | ||
| 61 | + /// <td>0x00</td> | ||
| 62 | + /// <td>0x00</td> | ||
| 63 | + /// <td>0x00</td> | ||
| 64 | + /// <td>0x00</td> | ||
| 65 | + /// <td>0x00</td> | ||
| 66 | + /// </tr> | ||
| 67 | + /// </table> | ||
| 68 | + /// </p> | ||
| 67 | COMMAND_SETFILTER, | 69 | COMMAND_SETFILTER, |
| 68 | 70 | ||
| 69 | - /// This command sets trigger and timebase: | ||
| 70 | - /// <table> | ||
| 71 | - /// <tr> | ||
| 72 | - /// <td>0x01</td> | ||
| 73 | - /// <td>0x00</td> | ||
| 74 | - /// <td>Tsr1Bits</td> | ||
| 75 | - /// <td>Tsr2Bits</td> | ||
| 76 | - /// <td>SamplerateValue[0]</td> | ||
| 77 | - /// <td>SamplerateValue[1]</td> | ||
| 78 | - /// </tr> | ||
| 79 | - /// </table> | ||
| 80 | - /// <table> | ||
| 81 | - /// <tr> | ||
| 82 | - /// <td>TriggerPosition[0]</td> | ||
| 83 | - /// <td>TriggerPosition[1]</td> | ||
| 84 | - /// <td>0x00</td> | ||
| 85 | - /// <td>0x00</td> | ||
| 86 | - /// <td>TriggerPosition[2]</td> | ||
| 87 | - /// <td>0x00</td> | ||
| 88 | - /// </tr> | ||
| 89 | - /// </table> | ||
| 90 | - /// The samplerate is set relative to the maximum sample rate by a divider that is set in Tsr1Bits.samplerateFast and the 16-bit value in the two SamplerateValue bytes.<br /> | ||
| 91 | - /// Without using fast rate mode, the samplerate is:<br /> | ||
| 92 | - /// <i>Samplerate = SamplerateMax / (2comp(SamplerateValue) * 2 + Tsr1Bits.samplerateFast)</i><br /> | ||
| 93 | - /// SamplerateMax is 50 MHz for the DSO-2090.<br /> | ||
| 94 | - /// When using fast rate mode the resulting samplerate is twice as fast, when using the large buffer it is half as fast. When Tsr1Bits.sampleSize is 0 (Roll mode) the sampling rate is divided by 1000. Setting Tsr1Bits.samplerateFast to 0 doesn't work, the result will be the same as Tsr1Bits.samplerateFast = 1. | 71 | + /// <p> |
| 72 | + /// This command sets trigger and timebase: | ||
| 73 | + /// <table> | ||
| 74 | + /// <tr> | ||
| 75 | + /// <td>0x01</td> | ||
| 76 | + /// <td>0x00</td> | ||
| 77 | + /// <td>Tsr1Bits</td> | ||
| 78 | + /// <td>Tsr2Bits</td> | ||
| 79 | + /// <td>SamplerateSlow[0]</td> | ||
| 80 | + /// <td>SamplerateSlow[1]</td> | ||
| 81 | + /// </tr> | ||
| 82 | + /// </table> | ||
| 83 | + /// <table> | ||
| 84 | + /// <tr> | ||
| 85 | + /// <td>TriggerPosition[0]</td> | ||
| 86 | + /// <td>TriggerPosition[1]</td> | ||
| 87 | + /// <td>0x00</td> | ||
| 88 | + /// <td>0x00</td> | ||
| 89 | + /// <td>TriggerPosition[2]</td> | ||
| 90 | + /// <td>0x00</td> | ||
| 91 | + /// </tr> | ||
| 92 | + /// </table> | ||
| 93 | + /// </p> | ||
| 94 | + /// <p> | ||
| 95 | + /// The samplerate is set relative to the maximum sample rate by a divider that is set in Tsr1Bits.samplerateFast and the 16-bit value in the two SamplerateSlow bytes.<br /> | ||
| 96 | + /// Without using fast rate mode, the samplerate is:<br /> | ||
| 97 | + /// <i>Samplerate = SamplerateMax / (1comp(SamplerateSlow) * 2 + Tsr1Bits.samplerateFast)</i><br /> | ||
| 98 | + /// SamplerateMax is 50 MHz for the DSO-2090.<br /> | ||
| 99 | + /// When using fast rate mode the resulting samplerate is twice as fast, when using the large buffer it is half as fast. When Tsr1Bits.bufferSize is 0 (Roll mode) the sampling rate is divided by 1000. Setting Tsr1Bits.samplerateFast to 0 doesn't work, the result will be the same as Tsr1Bits.samplerateFast = 1. | ||
| 100 | + /// </p> | ||
| 101 | + /// <p> | ||
| 102 | + /// The TriggerPosition sets the position of the pretrigger in samples. The left side (0 %) is 0x77660 when using the small buffer and 0x78000 when using the large buffer. | ||
| 103 | + /// </p> | ||
| 95 | COMMAND_SETTRIGGERANDSAMPLERATE, | 104 | COMMAND_SETTRIGGERANDSAMPLERATE, |
| 96 | 105 | ||
| 97 | - /// This command forces triggering: | ||
| 98 | - /// <table> | ||
| 99 | - /// <tr> | ||
| 100 | - /// <td>0x02</td> | ||
| 101 | - /// <td>0x00</td> | ||
| 102 | - /// </tr> | ||
| 103 | - /// </table> | 106 | + /// <p> |
| 107 | + /// This command forces triggering: | ||
| 108 | + /// <table> | ||
| 109 | + /// <tr> | ||
| 110 | + /// <td>0x02</td> | ||
| 111 | + /// <td>0x00</td> | ||
| 112 | + /// </tr> | ||
| 113 | + /// </table> | ||
| 114 | + /// </p> | ||
| 104 | COMMAND_FORCETRIGGER, | 115 | COMMAND_FORCETRIGGER, |
| 105 | 116 | ||
| 106 | - /// This command starts to capture data: | ||
| 107 | - /// <table> | ||
| 108 | - /// <tr> | ||
| 109 | - /// <td>0x03</td> | ||
| 110 | - /// <td>0x00</td> | ||
| 111 | - /// </tr> | ||
| 112 | - /// </table> | 117 | + /// <p> |
| 118 | + /// This command starts to capture data: | ||
| 119 | + /// <table> | ||
| 120 | + /// <tr> | ||
| 121 | + /// <td>0x03</td> | ||
| 122 | + /// <td>0x00</td> | ||
| 123 | + /// </tr> | ||
| 124 | + /// </table> | ||
| 125 | + /// </p> | ||
| 113 | COMMAND_STARTSAMPLING, | 126 | COMMAND_STARTSAMPLING, |
| 114 | 127 | ||
| 115 | - /// This command sets the trigger: | ||
| 116 | - /// <table> | ||
| 117 | - /// <tr> | ||
| 118 | - /// <td>0x04</td> | ||
| 119 | - /// <td>0x00</td> | ||
| 120 | - /// </tr> | ||
| 121 | - /// </table> | 128 | + /// <p> |
| 129 | + /// This command sets the trigger: | ||
| 130 | + /// <table> | ||
| 131 | + /// <tr> | ||
| 132 | + /// <td>0x04</td> | ||
| 133 | + /// <td>0x00</td> | ||
| 134 | + /// </tr> | ||
| 135 | + /// </table> | ||
| 136 | + /// </p> | ||
| 122 | COMMAND_ENABLETRIGGER, | 137 | COMMAND_ENABLETRIGGER, |
| 123 | 138 | ||
| 124 | - /// This command reads data from the hardware: | ||
| 125 | - /// <table> | ||
| 126 | - /// <tr> | ||
| 127 | - /// <td>0x05</td> | ||
| 128 | - /// <td>0x00</td> | ||
| 129 | - /// </tr> | ||
| 130 | - /// </table> | ||
| 131 | - /// The oscilloscope returns the sample data, that will be split if it's larger than the IN endpoint packet length: | ||
| 132 | - /// <table> | ||
| 133 | - /// <tr> | ||
| 134 | - /// <td>Sample[0]</td> | ||
| 135 | - /// <td>...</td> | ||
| 136 | - /// <td>Sample[511]</td> | ||
| 137 | - /// </tr> | ||
| 138 | - /// <tr> | ||
| 139 | - /// <td>Sample[512]</td> | ||
| 140 | - /// <td>...</td> | ||
| 141 | - /// <td>Sample[1023]</td> | ||
| 142 | - /// </tr> | ||
| 143 | - /// <tr> | ||
| 144 | - /// <td>Sample[1024]</td> | ||
| 145 | - /// <td>...</td> | ||
| 146 | - /// <td>...</td> | ||
| 147 | - /// </tr> | ||
| 148 | - /// </table> | ||
| 149 | - /// Because of the 9 bit data model, the DSO-5200 transmits an additional MSB for each sample afterwards. | 139 | + /// <p> |
| 140 | + /// This command reads data from the hardware: | ||
| 141 | + /// <table> | ||
| 142 | + /// <tr> | ||
| 143 | + /// <td>0x05</td> | ||
| 144 | + /// <td>0x00</td> | ||
| 145 | + /// </tr> | ||
| 146 | + /// </table> | ||
| 147 | + /// </p> | ||
| 148 | + /// <p> | ||
| 149 | + /// The oscilloscope returns the sample data, that will be split if it's larger than the IN endpoint packet length: | ||
| 150 | + /// <table> | ||
| 151 | + /// <tr> | ||
| 152 | + /// <td>Sample[0]</td> | ||
| 153 | + /// <td>...</td> | ||
| 154 | + /// <td>Sample[511]</td> | ||
| 155 | + /// </tr> | ||
| 156 | + /// <tr> | ||
| 157 | + /// <td>Sample[512]</td> | ||
| 158 | + /// <td>...</td> | ||
| 159 | + /// <td>Sample[1023]</td> | ||
| 160 | + /// </tr> | ||
| 161 | + /// <tr> | ||
| 162 | + /// <td>Sample[1024]</td> | ||
| 163 | + /// <td>...</td> | ||
| 164 | + /// <td>...</td> | ||
| 165 | + /// </tr> | ||
| 166 | + /// </table> | ||
| 167 | + /// Because of the 9 bit data model, the DSO-5200 transmits an additional MSB for each sample afterwards. | ||
| 168 | + /// </p> | ||
| 150 | COMMAND_GETDATA, | 169 | COMMAND_GETDATA, |
| 151 | 170 | ||
| 152 | - /// This command checks the capture state: | ||
| 153 | - /// <table> | ||
| 154 | - /// <tr> | ||
| 155 | - /// <td>0x06</td> | ||
| 156 | - /// <td>0x00</td> | ||
| 157 | - /// </tr> | ||
| 158 | - /// </table> | ||
| 159 | - /// The oscilloscope returns it's capture state and the trigger point. Not sure about this, looks like 248 16-bit words with nearly constant values. These can be converted to the start address of the data in the buffer (See Hantek::Control::calculateTriggerPoint): | ||
| 160 | - /// <table> | ||
| 161 | - /// <tr> | ||
| 162 | - /// <td>#CaptureState</td> | ||
| 163 | - /// <td>0x00</td> | ||
| 164 | - /// <td>TriggerPoint[0]</td> | ||
| 165 | - /// <td>TriggerPoint[1]</td> | ||
| 166 | - /// <td>...</td> | ||
| 167 | - /// </tr> | ||
| 168 | - /// </table> | 171 | + /// <p> |
| 172 | + /// This command checks the capture state: | ||
| 173 | + /// <table> | ||
| 174 | + /// <tr> | ||
| 175 | + /// <td>0x06</td> | ||
| 176 | + /// <td>0x00</td> | ||
| 177 | + /// </tr> | ||
| 178 | + /// </table> | ||
| 179 | + /// </p> | ||
| 180 | + /// <p> | ||
| 181 | + /// The oscilloscope returns it's capture state and the trigger point. Not sure about this, looks like 248 16-bit words with nearly constant values. These can be converted to the start address of the data in the buffer (See Hantek::Control::calculateTriggerPoint): | ||
| 182 | + /// <table> | ||
| 183 | + /// <tr> | ||
| 184 | + /// <td>#CaptureState</td> | ||
| 185 | + /// <td>0x00</td> | ||
| 186 | + /// <td>TriggerPoint[0]</td> | ||
| 187 | + /// <td>TriggerPoint[1]</td> | ||
| 188 | + /// <td>...</td> | ||
| 189 | + /// </tr> | ||
| 190 | + /// </table> | ||
| 191 | + /// </p> | ||
| 169 | COMMAND_GETCAPTURESTATE, | 192 | COMMAND_GETCAPTURESTATE, |
| 170 | 193 | ||
| 171 | - /// This command sets the gain: | ||
| 172 | - /// <table> | ||
| 173 | - /// <tr> | ||
| 174 | - /// <td>0x07</td> | ||
| 175 | - /// <td>0x0f</td> | ||
| 176 | - /// <td>GainBits</td> | ||
| 177 | - /// <td>0x00</td> | ||
| 178 | - /// <td>0x00</td> | ||
| 179 | - /// <td>0x00</td> | ||
| 180 | - /// <td>0x00</td> | ||
| 181 | - /// <td>0x00</td> | ||
| 182 | - /// </tr> | ||
| 183 | - /// </table> | ||
| 184 | - /// It is usually used in combination with #CONTROL_SETRELAYS. | 194 | + /// <p> |
| 195 | + /// This command sets the gain: | ||
| 196 | + /// <table> | ||
| 197 | + /// <tr> | ||
| 198 | + /// <td>0x07</td> | ||
| 199 | + /// <td>0x0f</td> | ||
| 200 | + /// <td>GainBits</td> | ||
| 201 | + /// <td>0x00</td> | ||
| 202 | + /// <td>0x00</td> | ||
| 203 | + /// <td>0x00</td> | ||
| 204 | + /// <td>0x00</td> | ||
| 205 | + /// <td>0x00</td> | ||
| 206 | + /// </tr> | ||
| 207 | + /// </table> | ||
| 208 | + /// It is usually used in combination with #CONTROL_SETRELAYS. | ||
| 209 | + /// </p> | ||
| 185 | COMMAND_SETGAIN, | 210 | COMMAND_SETGAIN, |
| 186 | 211 | ||
| 187 | - /// This command sets the logical data (And what the hell is this?...): | ||
| 188 | - /// <table> | ||
| 189 | - /// <tr> | ||
| 190 | - /// <td>0x08</td> | ||
| 191 | - /// <td>0x0f</td> | ||
| 192 | - /// <td>Data | 0x01</td> | ||
| 193 | - /// <td>0x00</td> | ||
| 194 | - /// <td>0x00</td> | ||
| 195 | - /// <td>0x00</td> | ||
| 196 | - /// <td>0x00</td> | ||
| 197 | - /// <td>0x00</td> | ||
| 198 | - /// </tr> | ||
| 199 | - /// </table> | 212 | + /// <p> |
| 213 | + /// This command sets the logical data (And what the hell is this?...): | ||
| 214 | + /// <table> | ||
| 215 | + /// <tr> | ||
| 216 | + /// <td>0x08</td> | ||
| 217 | + /// <td>0x0f</td> | ||
| 218 | + /// <td>Data | 0x01</td> | ||
| 219 | + /// <td>0x00</td> | ||
| 220 | + /// <td>0x00</td> | ||
| 221 | + /// <td>0x00</td> | ||
| 222 | + /// <td>0x00</td> | ||
| 223 | + /// <td>0x00</td> | ||
| 224 | + /// </tr> | ||
| 225 | + /// </table> | ||
| 226 | + /// </p> | ||
| 200 | COMMAND_SETLOGICALDATA, | 227 | COMMAND_SETLOGICALDATA, |
| 201 | 228 | ||
| 202 | - /// This command reads the logical data (And what the hell is this?...): | ||
| 203 | - /// <table> | ||
| 204 | - /// <tr> | ||
| 205 | - /// <td>0x09</td> | ||
| 206 | - /// <td>0x00</td> | ||
| 207 | - /// </tr> | ||
| 208 | - /// </table> | ||
| 209 | - /// The oscilloscope returns the logical data, which is 64 or 512 bytes long: | ||
| 210 | - /// <table> | ||
| 211 | - /// <tr> | ||
| 212 | - /// <td>?</td> | ||
| 213 | - /// <td>?</td> | ||
| 214 | - /// <td>?</td> | ||
| 215 | - /// <td>...</td> | ||
| 216 | - /// </tr> | ||
| 217 | - /// </table> | 229 | + /// <p> |
| 230 | + /// This command reads the logical data (And what the hell is this?...): | ||
| 231 | + /// <table> | ||
| 232 | + /// <tr> | ||
| 233 | + /// <td>0x09</td> | ||
| 234 | + /// <td>0x00</td> | ||
| 235 | + /// </tr> | ||
| 236 | + /// </table> | ||
| 237 | + /// </p> | ||
| 238 | + /// <p> | ||
| 239 | + /// The oscilloscope returns the logical data, which is 64 or 512 bytes long: | ||
| 240 | + /// <table> | ||
| 241 | + /// <tr> | ||
| 242 | + /// <td>?</td> | ||
| 243 | + /// <td>?</td> | ||
| 244 | + /// <td>?</td> | ||
| 245 | + /// <td>...</td> | ||
| 246 | + /// </tr> | ||
| 247 | + /// </table> | ||
| 248 | + /// </p> | ||
| 218 | COMMAND_GETLOGICALDATA, | 249 | COMMAND_GETLOGICALDATA, |
| 219 | 250 | ||
| 220 | - /// This command isn't used for the DSO-2090 and DSO-5200: | ||
| 221 | - /// <table> | ||
| 222 | - /// <tr> | ||
| 223 | - /// <td>0x0a</td> | ||
| 224 | - /// <td>...</td> | ||
| 225 | - /// </tr> | ||
| 226 | - /// </table> | 251 | + /// <p> |
| 252 | + /// This command isn't used for the DSO-2090 and DSO-5200: | ||
| 253 | + /// <table> | ||
| 254 | + /// <tr> | ||
| 255 | + /// <td>0x0a</td> | ||
| 256 | + /// <td>...</td> | ||
| 257 | + /// </tr> | ||
| 258 | + /// </table> | ||
| 259 | + /// </p> | ||
| 227 | COMMAND_UNKNOWN_0A, | 260 | COMMAND_UNKNOWN_0A, |
| 228 | 261 | ||
| 229 | - /// This command isn't used for the DSO-2090 and DSO-5200: | ||
| 230 | - /// <table> | ||
| 231 | - /// <tr> | ||
| 232 | - /// <td>0x0b</td> | ||
| 233 | - /// <td>...</td> | ||
| 234 | - /// </tr> | ||
| 235 | - /// </table> | 262 | + /// <p> |
| 263 | + /// This command isn't used for the DSO-2090 and DSO-5200: | ||
| 264 | + /// <table> | ||
| 265 | + /// <tr> | ||
| 266 | + /// <td>0x0b</td> | ||
| 267 | + /// <td>...</td> | ||
| 268 | + /// </tr> | ||
| 269 | + /// </table> | ||
| 270 | + /// </p> | ||
| 236 | COMMAND_UNKNOWN_0B, | 271 | COMMAND_UNKNOWN_0B, |
| 237 | 272 | ||
| 238 | - /// This command seems to set the sampling rate for the DSO-5200: | ||
| 239 | - /// <table> | ||
| 240 | - /// <tr> | ||
| 241 | - /// <td>0x0c</td> | ||
| 242 | - /// <td>0x00</td> | ||
| 243 | - /// <td>Samplerate[0] (?)</td> | ||
| 244 | - /// <td>Samplerate[1] (?)</td> | ||
| 245 | - /// <td>Tsr1.samplerateFast replacement (?)</td> | ||
| 246 | - /// <td>0x00</td> | ||
| 247 | - /// </tr> | ||
| 248 | - /// </table> | 273 | + /// <p> |
| 274 | + /// This command sets the sampling rate for the DSO-5200: | ||
| 275 | + /// <table> | ||
| 276 | + /// <tr> | ||
| 277 | + /// <td>0x0c</td> | ||
| 278 | + /// <td>0x00</td> | ||
| 279 | + /// <td>SamplerateSlow[0]</td> | ||
| 280 | + /// <td>SamplerateSlow[1]</td> | ||
| 281 | + /// <td>SamplerateFast</td> | ||
| 282 | + /// <td>0x00</td> | ||
| 283 | + /// </tr> | ||
| 284 | + /// </table> | ||
| 285 | + /// </p> | ||
| 286 | + /// <p> | ||
| 287 | + /// The values are similar to the ones used on the DSO-2090. The formula is a bit different here:<br /> | ||
| 288 | + /// <i>Samplerate = SamplerateMax / (2comp(SamplerateSlow) * 2 + 4 - SamplerateFast)</i><br /> | ||
| 289 | + /// SamplerateMax is 125 MHz for the DSO-5200 in default configuration though, the modifications regarding fast rate and buffer size are the the same that apply for the DSO-2090. | ||
| 290 | + /// </p> | ||
| 249 | COMMAND_SETSAMPLERATE5200, | 291 | COMMAND_SETSAMPLERATE5200, |
| 250 | 292 | ||
| 251 | - /// This command seems to set trigger settings for the DSO-5200: | ||
| 252 | - /// <table> | ||
| 253 | - /// <tr> | ||
| 254 | - /// <td>0x0d</td> | ||
| 255 | - /// <td>0x00</td> | ||
| 256 | - /// <td>Unknown</td> | ||
| 257 | - /// <td>Unknown</td> | ||
| 258 | - /// <td>TriggerPoint (?)</td> | ||
| 259 | - /// <td>0xff</td> | ||
| 260 | - /// <td>TriggerPoint (?)</td> | ||
| 261 | - /// <td>0xff</td> | ||
| 262 | - /// <td>TriggerPoint (?)</td> | ||
| 263 | - /// <td>0xff</td> | ||
| 264 | - /// </tr> | ||
| 265 | - /// </table> | ||
| 266 | - COMMAND_DSO5200_0D, | 293 | + /// <p> |
| 294 | + /// This command sets the trigger position and buffer size for the DSO-5200: | ||
| 295 | + /// <table> | ||
| 296 | + /// <tr> | ||
| 297 | + /// <td>0x0d</td> | ||
| 298 | + /// <td>0x00</td> | ||
| 299 | + /// <td>TriggerPositionPre[0]</td> | ||
| 300 | + /// <td>TriggerPositionPre[1]</td> | ||
| 301 | + /// <td>#DTriggerPositionUsed</td> | ||
| 302 | + /// </tr> | ||
| 303 | + /// </table> | ||
| 304 | + /// <table> | ||
| 305 | + /// <tr> | ||
| 306 | + /// <td>0xff</td> | ||
| 307 | + /// <td>TriggerPositionPost[0]</td> | ||
| 308 | + /// <td>TriggerPositionPost[1]</td> | ||
| 309 | + /// <td>DBufferBits</td> | ||
| 310 | + /// <td>0xff</td> | ||
| 311 | + /// </tr> | ||
| 312 | + /// </table> | ||
| 313 | + /// </p> | ||
| 314 | + /// <p> | ||
| 315 | + /// The TriggerPositionPre and TriggerPositionPost values set the pretrigger position. Both values have a range from 0xd7ff (0xc7ff for 14 kiS buffer) to 0xfffe. On the left side (0 %) the TriggerPositionPre value is minimal, on the right side (100 %) it is maximal. The TriggerPositionPost value is maximal for 0 % and minimal for 100%. | ||
| 316 | + /// </p> | ||
| 317 | + COMMAND_SETBUFFER5200, | ||
| 267 | 318 | ||
| 268 | - /// This command seems to set some additional settings for the DSO-5200: | ||
| 269 | - /// <table> | ||
| 270 | - /// <tr> | ||
| 271 | - /// <td>0x0e</td> | ||
| 272 | - /// <td>0x00</td> | ||
| 273 | - /// <td>Unknown</td> | ||
| 274 | - /// <td>0x00</td> | ||
| 275 | - /// <td>Unknown</td> | ||
| 276 | - /// <td>0x00</td> | ||
| 277 | - /// <td>0x00</td> | ||
| 278 | - /// <td>0x00</td> | ||
| 279 | - /// </tr> | ||
| 280 | - /// </table> | ||
| 281 | - COMMAND_DSO5200_0E, | 319 | + /// <p> |
| 320 | + /// This command sets the channel and trigger settings for the DSO-5200: | ||
| 321 | + /// <table> | ||
| 322 | + /// <tr> | ||
| 323 | + /// <td>0x0e</td> | ||
| 324 | + /// <td>0x00</td> | ||
| 325 | + /// <td>ETsrBits</td> | ||
| 326 | + /// <td>0x00</td> | ||
| 327 | + /// <td>Unknown (0x02)</td> | ||
| 328 | + /// <td>0x00</td> | ||
| 329 | + /// <td>0x00</td> | ||
| 330 | + /// <td>0x00</td> | ||
| 331 | + /// </tr> | ||
| 332 | + /// </table> | ||
| 333 | + /// </p> | ||
| 334 | + COMMAND_SETTRIGGER5200, | ||
| 282 | 335 | ||
| 283 | COMMAND_COUNT ///< Total number of commands | 336 | COMMAND_COUNT ///< Total number of commands |
| 284 | }; | 337 | }; |
| @@ -466,6 +519,7 @@ namespace Hantek { | @@ -466,6 +519,7 @@ namespace Hantek { | ||
| 466 | /// \brief The size of the sample buffer. | 519 | /// \brief The size of the sample buffer. |
| 467 | enum BufferSize { | 520 | enum BufferSize { |
| 468 | BUFFER_SMALL = 10240, | 521 | BUFFER_SMALL = 10240, |
| 522 | + BUFFER_LARGE5200 = 14336, | ||
| 469 | BUFFER_LARGE = 32768 | 523 | BUFFER_LARGE = 32768 |
| 470 | }; | 524 | }; |
| 471 | 525 | ||
| @@ -473,9 +527,9 @@ namespace Hantek { | @@ -473,9 +527,9 @@ namespace Hantek { | ||
| 473 | /// \enum BufferSizeId hantek/types.h | 527 | /// \enum BufferSizeId hantek/types.h |
| 474 | /// \brief The size id for CommandSetTriggerAndSamplerate. | 528 | /// \brief The size id for CommandSetTriggerAndSamplerate. |
| 475 | enum BufferSizeId { | 529 | enum BufferSizeId { |
| 476 | - BUFFERID_ROLL = 0, | ||
| 477 | - BUFFERID_SMALL, | ||
| 478 | - BUFFERID_LARGE | 530 | + BUFFERID_ROLL = 0, ///< Used for the roll mode |
| 531 | + BUFFERID_SMALL, ///< The standard buffer with 10240 samples | ||
| 532 | + BUFFERID_LARGE ///< The large buffer, 32768 samples (14336 for DSO-5200) | ||
| 479 | }; | 533 | }; |
| 480 | 534 | ||
| 481 | ////////////////////////////////////////////////////////////////////////////// | 535 | ////////////////////////////////////////////////////////////////////////////// |
| @@ -510,6 +564,22 @@ namespace Hantek { | @@ -510,6 +564,22 @@ namespace Hantek { | ||
| 510 | }; | 564 | }; |
| 511 | 565 | ||
| 512 | ////////////////////////////////////////////////////////////////////////////// | 566 | ////////////////////////////////////////////////////////////////////////////// |
| 567 | + /// \enum DTriggerPositionUsed hantek/types.h | ||
| 568 | + /// \brief The trigger position states for the 0x0d command. | ||
| 569 | + enum DTriggerPositionUsed { | ||
| 570 | + DTRIGGERPOSITION_OFF = 0, ///< Used for Roll mode | ||
| 571 | + DTRIGGERPOSITION_ON = 7 ///< Used for normal operation | ||
| 572 | + }; | ||
| 573 | + | ||
| 574 | + ////////////////////////////////////////////////////////////////////////////// | ||
| 575 | + /// \enum EUsedChannels hantek/types.h | ||
| 576 | + /// \brief The enabled channels in command 0x0e. | ||
| 577 | + enum EUsedChannels { | ||
| 578 | + EUSED_CH1 = 2, EUSED_CH2 = 3, | ||
| 579 | + EUSED_CH1CH2 = 0 | ||
| 580 | + }; | ||
| 581 | + | ||
| 582 | + ////////////////////////////////////////////////////////////////////////////// | ||
| 513 | /// \struct FilterBits hantek/types.h | 583 | /// \struct FilterBits hantek/types.h |
| 514 | /// \brief The bits for COMMAND_SETFILTER. | 584 | /// \brief The bits for COMMAND_SETFILTER. |
| 515 | struct FilterBits { | 585 | struct FilterBits { |
| @@ -520,14 +590,6 @@ namespace Hantek { | @@ -520,14 +590,6 @@ namespace Hantek { | ||
| 520 | }; | 590 | }; |
| 521 | 591 | ||
| 522 | ////////////////////////////////////////////////////////////////////////////// | 592 | ////////////////////////////////////////////////////////////////////////////// |
| 523 | - /// \union FilterByte hantek/types.h | ||
| 524 | - /// \brief Allows to read the FilterBits as unsigned char. | ||
| 525 | - union FilterByte { | ||
| 526 | - FilterBits bits; ///< Bitfield representation | ||
| 527 | - unsigned char byte; ///< Full byte as unsigned char | ||
| 528 | - }; | ||
| 529 | - | ||
| 530 | - ////////////////////////////////////////////////////////////////////////////// | ||
| 531 | /// \struct GainBits hantek/types.h | 593 | /// \struct GainBits hantek/types.h |
| 532 | /// \brief The gain bits for COMMAND_SETGAIN. | 594 | /// \brief The gain bits for COMMAND_SETGAIN. |
| 533 | struct GainBits { | 595 | struct GainBits { |
| @@ -537,46 +599,42 @@ namespace Hantek { | @@ -537,46 +599,42 @@ namespace Hantek { | ||
| 537 | }; | 599 | }; |
| 538 | 600 | ||
| 539 | ////////////////////////////////////////////////////////////////////////////// | 601 | ////////////////////////////////////////////////////////////////////////////// |
| 540 | - /// \union GainByte hantek/types.h | ||
| 541 | - /// \brief Allows to read the GainBits as unsigned char. | ||
| 542 | - union GainByte { | ||
| 543 | - GainBits bits; ///< Bitfield representation | ||
| 544 | - unsigned char byte; ///< Full byte as unsigned char | ||
| 545 | - }; | ||
| 546 | - | ||
| 547 | - ////////////////////////////////////////////////////////////////////////////// | ||
| 548 | /// \struct Tsr1Bits hantek/types.h | 602 | /// \struct Tsr1Bits hantek/types.h |
| 549 | /// \brief Trigger and samplerate bits (Byte 1). | 603 | /// \brief Trigger and samplerate bits (Byte 1). |
| 550 | struct Tsr1Bits { | 604 | struct Tsr1Bits { |
| 551 | unsigned char triggerSource:2; ///< The trigger source, see Hantek::TriggerSource | 605 | unsigned char triggerSource:2; ///< The trigger source, see Hantek::TriggerSource |
| 552 | - unsigned char sampleSize:3; ///< Buffer size, 0 = Roll, 1 = 10240 S, 2 = 32768 S | 606 | + unsigned char bufferSize:3; ///< See #BufferSizeId |
| 553 | unsigned char samplerateFast:3; ///< samplerate value for fast sampling rates | 607 | unsigned char samplerateFast:3; ///< samplerate value for fast sampling rates |
| 554 | }; | 608 | }; |
| 555 | 609 | ||
| 556 | ////////////////////////////////////////////////////////////////////////////// | 610 | ////////////////////////////////////////////////////////////////////////////// |
| 557 | - /// \union Tsr1Byte hantek/types.h | ||
| 558 | - /// \brief Allows to read the Tsr1Bits as unsigned char. | ||
| 559 | - union Tsr1Byte { | ||
| 560 | - Tsr1Bits bits; ///< Bitfield representation. | ||
| 561 | - unsigned char byte; ///< Full byte as unsigned char. | ||
| 562 | - }; | ||
| 563 | - | ||
| 564 | - ////////////////////////////////////////////////////////////////////////////// | ||
| 565 | /// \struct Tsr2Bits hantek/types.h | 611 | /// \struct Tsr2Bits hantek/types.h |
| 566 | /// \brief Trigger and samplerate bits (Byte 2). | 612 | /// \brief Trigger and samplerate bits (Byte 2). |
| 567 | struct Tsr2Bits { | 613 | struct Tsr2Bits { |
| 568 | - unsigned char usedChannel:2; ///< Used channels, see Hantek::UsedChannels | 614 | + unsigned char usedChannels:2; ///< Used channels, see Hantek::UsedChannels |
| 569 | unsigned char fastRate:1; ///< true, if one channels uses all buffers | 615 | unsigned char fastRate:1; ///< true, if one channels uses all buffers |
| 570 | unsigned char triggerSlope:1; ///< The trigger slope, see Dso::Slope, inverted when Tsr1Bits.samplerateFast is uneven | 616 | unsigned char triggerSlope:1; ///< The trigger slope, see Dso::Slope, inverted when Tsr1Bits.samplerateFast is uneven |
| 571 | unsigned char reserved:4; ///< Unused bits | 617 | unsigned char reserved:4; ///< Unused bits |
| 572 | }; | 618 | }; |
| 573 | 619 | ||
| 574 | ////////////////////////////////////////////////////////////////////////////// | 620 | ////////////////////////////////////////////////////////////////////////////// |
| 575 | - /// \union Tsr2Byte hantek/types.h | ||
| 576 | - /// \brief Allows to read the Tsr2Bits as unsigned char. | ||
| 577 | - union Tsr2Byte { | ||
| 578 | - Tsr2Bits bits; ///< Bitfield representation | ||
| 579 | - unsigned char byte; ///< Full byte as unsigned char | 621 | + /// \struct DBufferBits hantek/types.h |
| 622 | + /// \brief Buffer mode bits for 0x0d command. | ||
| 623 | + struct DBufferBits { | ||
| 624 | + unsigned char triggerPositionUsed:3; ///< See #DTriggerPositionUsed | ||
| 625 | + unsigned char bufferSize:3; ///< See #BufferSizeId | ||
| 626 | + unsigned char reserved:2; ///< Unused bits | ||
| 627 | + }; | ||
| 628 | + | ||
| 629 | + ////////////////////////////////////////////////////////////////////////////// | ||
| 630 | + /// \struct ETsrBits hantek/types.h | ||
| 631 | + /// \brief Trigger and samplerate bits for 0x0e command. | ||
| 632 | + struct ETsrBits { | ||
| 633 | + unsigned char fastRate:1; ///< false, if one channels uses all buffers | ||
| 634 | + unsigned char usedChannels:2; ///< Used channels, see Hantek::EUsedChannels | ||
| 635 | + unsigned char triggerSource:2; ///< The trigger source, see Hantek::TriggerSource | ||
| 636 | + unsigned char triggerSlope:2; ///< The trigger slope, see Dso::Slope | ||
| 637 | + unsigned char triggerPulse:1; ///< Pulses are causing trigger events | ||
| 580 | }; | 638 | }; |
| 581 | 639 | ||
| 582 | ////////////////////////////////////////////////////////////////////////////// | 640 | ////////////////////////////////////////////////////////////////////////////// |
| @@ -602,7 +660,7 @@ namespace Hantek { | @@ -602,7 +660,7 @@ namespace Hantek { | ||
| 602 | class CommandSetTriggerAndSamplerate : public Helper::DataArray<unsigned char> { | 660 | class CommandSetTriggerAndSamplerate : public Helper::DataArray<unsigned char> { |
| 603 | public: | 661 | public: |
| 604 | CommandSetTriggerAndSamplerate(); | 662 | CommandSetTriggerAndSamplerate(); |
| 605 | - CommandSetTriggerAndSamplerate(unsigned short int samplerate, unsigned long int triggerPosition, unsigned char triggerSource = 0, unsigned char sampleSize = 0, unsigned char timebaseFast = 0, unsigned char usedChannel = 0, bool fastRate = false, unsigned char triggerSlope = 0); | 663 | + CommandSetTriggerAndSamplerate(unsigned short int samplerateSlow, unsigned long int triggerPosition, unsigned char triggerSource = 0, unsigned char bufferSize = 0, unsigned char samplerateFast = 0, unsigned char usedChannels = 0, bool fastRate = false, unsigned char triggerSlope = 0); |
| 606 | 664 | ||
| 607 | unsigned char getTriggerSource(); | 665 | unsigned char getTriggerSource(); |
| 608 | void setTriggerSource(unsigned char value); | 666 | void setTriggerSource(unsigned char value); |
| @@ -610,13 +668,13 @@ namespace Hantek { | @@ -610,13 +668,13 @@ namespace Hantek { | ||
| 610 | void setBufferSize(unsigned char value); | 668 | void setBufferSize(unsigned char value); |
| 611 | unsigned char getSamplerateFast(); | 669 | unsigned char getSamplerateFast(); |
| 612 | void setSamplerateFast(unsigned char value); | 670 | void setSamplerateFast(unsigned char value); |
| 613 | - unsigned char getUsedChannel(); | ||
| 614 | - void setUsedChannel(unsigned char value); | 671 | + unsigned char getUsedChannels(); |
| 672 | + void setUsedChannels(unsigned char value); | ||
| 615 | bool getFastRate(); | 673 | bool getFastRate(); |
| 616 | void setFastRate(bool fastRate); | 674 | void setFastRate(bool fastRate); |
| 617 | unsigned char getTriggerSlope(); | 675 | unsigned char getTriggerSlope(); |
| 618 | void setTriggerSlope(unsigned char slope); | 676 | void setTriggerSlope(unsigned char slope); |
| 619 | - unsigned short int getSamplerate(); | 677 | + unsigned short int getSamplerateSlow(); |
| 620 | void setSamplerateSlow(unsigned short int samplerate); | 678 | void setSamplerateSlow(unsigned short int samplerate); |
| 621 | unsigned long int getTriggerPosition(); | 679 | unsigned long int getTriggerPosition(); |
| 622 | void setTriggerPosition(unsigned long int position); | 680 | void setTriggerPosition(unsigned long int position); |
| @@ -771,6 +829,69 @@ namespace Hantek { | @@ -771,6 +829,69 @@ namespace Hantek { | ||
| 771 | bool getTrigger(); | 829 | bool getTrigger(); |
| 772 | void setTrigger(bool ext); | 830 | void setTrigger(bool ext); |
| 773 | }; | 831 | }; |
| 832 | + | ||
| 833 | + ////////////////////////////////////////////////////////////////////////////// | ||
| 834 | + /// \class CommandSetSamplerate5200 hantek/types.h | ||
| 835 | + /// \brief The COMMAND_SETSAMPLERATE5200 builder. | ||
| 836 | + class CommandSetSamplerate5200 : public Helper::DataArray<unsigned char> { | ||
| 837 | + public: | ||
| 838 | + CommandSetSamplerate5200(); | ||
| 839 | + CommandSetSamplerate5200(unsigned short int samplerateSlow, unsigned char samplerateFast); | ||
| 840 | + | ||
| 841 | + unsigned char getSamplerateFast(); | ||
| 842 | + void setSamplerateFast(unsigned char value); | ||
| 843 | + unsigned short int getSamplerateSlow(); | ||
| 844 | + void setSamplerateSlow(unsigned short int samplerate); | ||
| 845 | + | ||
| 846 | + private: | ||
| 847 | + void init(); | ||
| 848 | + }; | ||
| 849 | + | ||
| 850 | + ////////////////////////////////////////////////////////////////////////////// | ||
| 851 | + /// \class CommandSetBuffer5200 hantek/types.h | ||
| 852 | + /// \brief The COMMAND_SETBUFFER5200 builder. | ||
| 853 | + class CommandSetBuffer5200 : public Helper::DataArray<unsigned char> { | ||
| 854 | + public: | ||
| 855 | + CommandSetBuffer5200(); | ||
| 856 | + CommandSetBuffer5200(unsigned short int triggerPositionPre, unsigned short int triggerPositionPost, unsigned char usedPre = 0, unsigned char usedPost = 0, unsigned char bufferSize = 0); | ||
| 857 | + | ||
| 858 | + unsigned short int getTriggerPositionPre(); | ||
| 859 | + void setTriggerPositionPre(unsigned short int value); | ||
| 860 | + unsigned short int getTriggerPositionPost(); | ||
| 861 | + void setTriggerPositionPost(unsigned short int value); | ||
| 862 | + unsigned char getUsedPre(); | ||
| 863 | + void setUsedPre(unsigned char value); | ||
| 864 | + unsigned char getUsedPost(); | ||
| 865 | + void setUsedPost(unsigned char value); | ||
| 866 | + unsigned char getBufferSize(); | ||
| 867 | + void setBufferSize(unsigned char value); | ||
| 868 | + | ||
| 869 | + private: | ||
| 870 | + void init(); | ||
| 871 | + }; | ||
| 872 | + | ||
| 873 | + ////////////////////////////////////////////////////////////////////////////// | ||
| 874 | + /// \class CommandSetTrigger5200 hantek/types.h | ||
| 875 | + /// \brief The COMMAND_SETTRIGGER5200 builder. | ||
| 876 | + class CommandSetTrigger5200 : public Helper::DataArray<unsigned char> { | ||
| 877 | + public: | ||
| 878 | + CommandSetTrigger5200(); | ||
| 879 | + CommandSetTrigger5200(unsigned char triggerSource, unsigned char usedChannels, bool fastRate = false, unsigned char triggerSlope = 0, unsigned char triggerPulse = 0); | ||
| 880 | + | ||
| 881 | + unsigned char getTriggerSource(); | ||
| 882 | + void setTriggerSource(unsigned char value); | ||
| 883 | + unsigned char getUsedChannels(); | ||
| 884 | + void setUsedChannels(unsigned char value); | ||
| 885 | + bool getFastRate(); | ||
| 886 | + void setFastRate(bool fastRate); | ||
| 887 | + unsigned char getTriggerSlope(); | ||
| 888 | + void setTriggerSlope(unsigned char slope); | ||
| 889 | + bool getTriggerPulse(); | ||
| 890 | + void setTriggerPulse(bool pulse); | ||
| 891 | + | ||
| 892 | + private: | ||
| 893 | + void init(); | ||
| 894 | + }; | ||
| 774 | } | 895 | } |
| 775 | 896 | ||
| 776 | 897 |
openhantek/src/openhantek.cpp
| @@ -129,6 +129,8 @@ OpenHantekMainWindow::OpenHantekMainWindow(QWidget *parent, Qt::WindowFlags flag | @@ -129,6 +129,8 @@ OpenHantekMainWindow::OpenHantekMainWindow(QWidget *parent, Qt::WindowFlags flag | ||
| 129 | connect(this->dsoControl, SIGNAL(samplingStopped()), this, SLOT(stopped())); | 129 | connect(this->dsoControl, SIGNAL(samplingStopped()), this, SLOT(stopped())); |
| 130 | 130 | ||
| 131 | // Set up the oscilloscope | 131 | // Set up the oscilloscope |
| 132 | + this->dsoControl->connectDevice(); | ||
| 133 | + | ||
| 132 | for(unsigned int channel = 0; channel < this->settings->scope.physicalChannels; channel++) { | 134 | for(unsigned int channel = 0; channel < this->settings->scope.physicalChannels; channel++) { |
| 133 | this->dsoControl->setCoupling(channel, (Dso::Coupling) this->settings->scope.voltage[channel].misc); | 135 | this->dsoControl->setCoupling(channel, (Dso::Coupling) this->settings->scope.voltage[channel].misc); |
| 134 | this->updateVoltageGain(channel); | 136 | this->updateVoltageGain(channel); |
| @@ -143,7 +145,6 @@ OpenHantekMainWindow::OpenHantekMainWindow(QWidget *parent, Qt::WindowFlags flag | @@ -143,7 +145,6 @@ OpenHantekMainWindow::OpenHantekMainWindow(QWidget *parent, Qt::WindowFlags flag | ||
| 143 | this->dsoControl->setTriggerSlope(this->settings->scope.trigger.slope); | 145 | this->dsoControl->setTriggerSlope(this->settings->scope.trigger.slope); |
| 144 | this->dsoControl->setTriggerSource(this->settings->scope.trigger.special, this->settings->scope.trigger.source); | 146 | this->dsoControl->setTriggerSource(this->settings->scope.trigger.special, this->settings->scope.trigger.source); |
| 145 | 147 | ||
| 146 | - this->dsoControl->connectDevice(); | ||
| 147 | this->dsoControl->startSampling(); | 148 | this->dsoControl->startSampling(); |
| 148 | } | 149 | } |
| 149 | 150 |