Commit 6774e7c0a09edb798efaacf83017a921e869c8e0

Authored by oliverhaag
1 parent ed72f34b

Redesign of Hantek::Control

openhantek/ChangeLog
@@ -126,3 +126,7 @@ @@ -126,3 +126,7 @@
126 * Version 0.2.0: 126 * Version 0.2.0:
127 * Updated version information 127 * Updated version information
128 * Updated Doxygen mainpage and roadmap 128 * Updated Doxygen mainpage and roadmap
  129 +
  130 +2011-11-16 Oliver Haag <oliver.haag@gmail.com>
  131 +* Redesign of Hantek::Control to make it easier to add support for new models
  132 +* Removed buggy destructor from GlGenerator, proper cleanup still missing
openhantek/OpenHantek.pro
@@ -96,6 +96,7 @@ DEFINES += LIBUSB_VERSION=$${LIBUSB_VERSION} @@ -96,6 +96,7 @@ DEFINES += LIBUSB_VERSION=$${LIBUSB_VERSION}
96 96
97 # Debug output 97 # Debug output
98 CONFIG(debug, debug|release): DEFINES += DEBUG 98 CONFIG(debug, debug|release): DEFINES += DEBUG
  99 +else: DEFINES += QT_NO_DEBUG_OUTPUT
99 100
100 # Settings for different operating systems 101 # Settings for different operating systems
101 unix:!macx { 102 unix:!macx {
openhantek/src/dockwindows.cpp
@@ -50,13 +50,13 @@ HorizontalDock::HorizontalDock(DsoSettings *settings, QWidget *parent, Qt::Windo @@ -50,13 +50,13 @@ HorizontalDock::HorizontalDock(DsoSettings *settings, QWidget *parent, Qt::Windo
50 << 1e-3 << 2e-3 << 4e-3 << 1e-2 << 2e-2 << 4e-2 << 1e-1 << 2e-1 << 4e-1 50 << 1e-3 << 2e-3 << 4e-3 << 1e-2 << 2e-2 << 4e-2 << 1e-1 << 2e-1 << 4e-1
51 << 1e0 << 2e0 << 4e0 << 1e1 << 2e1 << 4e1 << 6e1 << 12e1 << 24e1 51 << 1e0 << 2e0 << 4e0 << 1e1 << 2e1 << 4e1 << 6e1 << 12e1 << 24e1
52 << 6e2 << 12e2 << 24e2 << 36e2; ///< Timebase steps in seconds/div 52 << 6e2 << 12e2 << 24e2 << 36e2; ///< Timebase steps in seconds/div
53 - for(QList<double>::iterator timebase = this->timebaseSteps.begin(); timebase != this->timebaseSteps.end(); ++timebase) 53 + for(QList<double>::iterator timebase = this->timebaseSteps.begin(); timebase != this->timebaseSteps.end(); timebase++)
54 this->timebaseStrings << Helper::valueToString(*timebase, Helper::UNIT_SECONDS, 0); 54 this->timebaseStrings << Helper::valueToString(*timebase, Helper::UNIT_SECONDS, 0);
55 this->frequencybaseSteps 55 this->frequencybaseSteps
56 << 1.0 << 2.0 << 5.0 << 1e1 << 2e1 << 5e1 << 1e2 << 2e2 << 5e2 56 << 1.0 << 2.0 << 5.0 << 1e1 << 2e1 << 5e1 << 1e2 << 2e2 << 5e2
57 << 1e3 << 2e3 << 5e3 << 1e4 << 2e4 << 4e4 << 1e5 << 2e5 << 5e5 57 << 1e3 << 2e3 << 5e3 << 1e4 << 2e4 << 4e4 << 1e5 << 2e5 << 5e5
58 << 1e6 << 2e6 << 5e6 << 1e7; ///< Frequencybase steps in Hz/div 58 << 1e6 << 2e6 << 5e6 << 1e7; ///< Frequencybase steps in Hz/div
59 - for(QList<double>::iterator frequencybase = this->frequencybaseSteps.begin(); frequencybase != this->frequencybaseSteps.end(); ++frequencybase) 59 + for(QList<double>::iterator frequencybase = this->frequencybaseSteps.begin(); frequencybase != this->frequencybaseSteps.end(); frequencybase++)
60 this->frequencybaseStrings << Helper::valueToString(*frequencybase, Helper::UNIT_HERTZ, 0); 60 this->frequencybaseStrings << Helper::valueToString(*frequencybase, Helper::UNIT_HERTZ, 0);
61 61
62 // Initialize elements 62 // Initialize elements
@@ -323,7 +323,7 @@ SpectrumDock::SpectrumDock(DsoSettings *settings, QWidget *parent, Qt::WindowFla @@ -323,7 +323,7 @@ SpectrumDock::SpectrumDock(DsoSettings *settings, QWidget *parent, Qt::WindowFla
323 // Initialize lists for comboboxes 323 // Initialize lists for comboboxes
324 this->magnitudeSteps << 1e0 << 2e0 << 3e0 << 6e0 324 this->magnitudeSteps << 1e0 << 2e0 << 3e0 << 6e0
325 << 1e1 << 2e1 << 3e1 << 6e1 << 1e2 << 2e2 << 3e2 << 6e2; ///< Magnitude steps in dB/div 325 << 1e1 << 2e1 << 3e1 << 6e1 << 1e2 << 2e2 << 3e2 << 6e2; ///< Magnitude steps in dB/div
326 - for(QList<double>::iterator magnitude = this->magnitudeSteps.begin(); magnitude != this->magnitudeSteps.end(); ++magnitude) 326 + for(QList<double>::iterator magnitude = this->magnitudeSteps.begin(); magnitude != this->magnitudeSteps.end(); magnitude++)
327 this->magnitudeStrings << Helper::valueToString(*magnitude, Helper::UNIT_DECIBEL, 0); 327 this->magnitudeStrings << Helper::valueToString(*magnitude, Helper::UNIT_DECIBEL, 0);
328 328
329 // Initialize elements 329 // Initialize elements
openhantek/src/glgenerator.cpp
@@ -86,7 +86,7 @@ GlGenerator::GlGenerator(DsoSettings *settings, QObject *parent) : QObject(paren @@ -86,7 +86,7 @@ GlGenerator::GlGenerator(DsoSettings *settings, QObject *parent) : QObject(paren
86 86
87 /// \brief Deletes OpenGL objects. 87 /// \brief Deletes OpenGL objects.
88 GlGenerator::~GlGenerator() { 88 GlGenerator::~GlGenerator() {
89 - delete[] this->vaChannel; 89 + // todo: Clean up vaChannel
90 } 90 }
91 91
92 /// \brief Set the data analyzer whose data will be drawn. 92 /// \brief Set the data analyzer whose data will be drawn.
openhantek/src/hantek/control.cpp
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 // 5 //
6 // Copyright (C) 2008, 2009 Oleg Khudyakov 6 // Copyright (C) 2008, 2009 Oleg Khudyakov
7 // prcoder@potrebitel.ru 7 // prcoder@potrebitel.ru
8 -// Copyright (C) 2010 Oliver Haag 8 +// Copyright (C) 2010, 2011 Oliver Haag
9 // oliver.haag@gmail.com 9 // oliver.haag@gmail.com
10 // 10 //
11 // This program is free software: you can redistribute it and/or modify it 11 // This program is free software: you can redistribute it and/or modify it
@@ -24,6 +24,8 @@ @@ -24,6 +24,8 @@
24 //////////////////////////////////////////////////////////////////////////////// 24 ////////////////////////////////////////////////////////////////////////////////
25 25
26 26
  27 +#include <limits>
  28 +
27 #include <QList> 29 #include <QList>
28 #include <QMutex> 30 #include <QMutex>
29 31
@@ -39,38 +41,60 @@ namespace Hantek { @@ -39,38 +41,60 @@ namespace Hantek {
39 /// \brief Initializes the command buffers and lists. 41 /// \brief Initializes the command buffers and lists.
40 /// \param parent The parent widget. 42 /// \param parent The parent widget.
41 Control::Control(QObject *parent) : DsoControl(parent) { 43 Control::Control(QObject *parent) : DsoControl(parent) {
42 - // Values for the Gain and Timebase enums  
43 - this->gainSteps << 0.08 << 0.16 << 0.40 << 0.80 << 1.60 << 4.00  
44 - << 8.0 << 16.0 << 40.0;  
45 - this->samplerateChannelMax = 50e6;  
46 - this->samplerateFastMax = 100e6;  
47 - this->samplerateMax = this->samplerateChannelMax;  
48 - this->samplerateDivider = 1;  
49 - this->triggerPosition = 0;  
50 - this->triggerSlope = Dso::SLOPE_POSITIVE;  
51 - this->triggerSpecial = false;  
52 - this->triggerSource = 0;  
53 - this->commandVersion = 0; 44 + // Use DSO-2090 specification as default
  45 + this->specification.command.bulk.setBuffer = BULK_SETTRIGGERANDSAMPLERATE;
  46 + this->specification.command.bulk.setFilter = BULK_SETFILTER;
  47 + this->specification.command.bulk.setGain = BULK_SETGAIN;
  48 + this->specification.command.bulk.setSamplerate = BULK_SETTRIGGERANDSAMPLERATE;
  49 + this->specification.command.bulk.setTrigger = BULK_SETTRIGGERANDSAMPLERATE;
  50 + this->specification.command.control.setOffset = CONTROL_SETOFFSET;
  51 + this->specification.command.control.setRelays = CONTROL_SETRELAYS;
  52 + this->specification.command.values.offsetLimits = VALUE_OFFSETLIMITS;
  53 + this->specification.command.values.voltageLimits = (ControlValue) -1;
  54 +
  55 + this->specification.gainSteps << 0.08 << 0.16 << 0.40 << 0.80 << 1.60
  56 + << 4.00 << 8.0 << 16.0 << 40.0;
  57 +
  58 + this->specification.samplerate.single.base = 50e6;
  59 + this->specification.samplerate.single.max = 50e6;
  60 + this->specification.samplerate.multi.base = 100e6;
  61 + this->specification.samplerate.multi.max = 100e6;
  62 +
  63 + for(unsigned int channel = 0; channel < HANTEK_CHANNELS; channel++) {
  64 + for(unsigned int gainId = 0; gainId < GAIN_COUNT; gainId++) {
  65 + this->specification.offsetLimit[channel][gainId][OFFSET_START] = 0x0000;
  66 + this->specification.offsetLimit[channel][gainId][OFFSET_END] = 0xffff;
  67 + }
  68 + }
  69 +
  70 + // Set settings to default values
  71 + this->settings.bufferSizeId = 0;
  72 + this->settings.samplerate.limits = &(this->specification.samplerate.single);
  73 + this->settings.samplerate.downsampling = 1;
  74 + this->settings.trigger.position = 0;
  75 + this->settings.trigger.slope = Dso::SLOPE_POSITIVE;
  76 + this->settings.trigger.special = false;
  77 + this->settings.trigger.source = 0;
54 78
55 // Special trigger sources 79 // Special trigger sources
56 this->specialTriggerSources << tr("EXT") << tr("EXT/10"); 80 this->specialTriggerSources << tr("EXT") << tr("EXT/10");
57 81
58 // Transmission-ready bulk commands 82 // Transmission-ready bulk commands
59 - this->command[COMMAND_SETFILTER] = new CommandSetFilter();  
60 - this->command[COMMAND_SETTRIGGERANDSAMPLERATE] = new CommandSetTriggerAndSamplerate();  
61 - this->command[COMMAND_FORCETRIGGER] = new CommandForceTrigger();  
62 - this->command[COMMAND_STARTSAMPLING] = new CommandCaptureStart();  
63 - this->command[COMMAND_ENABLETRIGGER] = new CommandTriggerEnabled();  
64 - this->command[COMMAND_GETDATA] = new CommandGetData();  
65 - this->command[COMMAND_GETCAPTURESTATE] = new CommandGetCaptureState();  
66 - this->command[COMMAND_SETGAIN] = new CommandSetGain();  
67 - this->command[COMMAND_SETLOGICALDATA] = new CommandSetLogicalData();  
68 - this->command[COMMAND_GETLOGICALDATA] = new CommandGetLogicalData();  
69 - this->command[COMMAND_SETSAMPLERATE5200] = new CommandSetSamplerate5200();  
70 - this->command[COMMAND_SETBUFFER5200] = new CommandSetBuffer5200();  
71 - this->command[COMMAND_SETTRIGGER5200] = new CommandSetTrigger5200();  
72 -  
73 - for(int command = 0; command < COMMAND_COUNT; command++) 83 + this->command[BULK_SETFILTER] = new BulkSetFilter();
  84 + this->command[BULK_SETTRIGGERANDSAMPLERATE] = new BulkSetTriggerAndSamplerate();
  85 + this->command[BULK_FORCETRIGGER] = new BulkForceTrigger();
  86 + this->command[BULK_STARTSAMPLING] = new BulkCaptureStart();
  87 + this->command[BULK_ENABLETRIGGER] = new BulkTriggerEnabled();
  88 + this->command[BULK_GETDATA] = new BulkGetData();
  89 + this->command[BULK_GETCAPTURESTATE] = new BulkGetCaptureState();
  90 + this->command[BULK_SETGAIN] = new BulkSetGain();
  91 + this->command[BULK_SETLOGICALDATA] = new BulkSetLogicalData();
  92 + this->command[BULK_GETLOGICALDATA] = new BulkGetLogicalData();
  93 + this->command[BULK_SETSAMPLERATE5200] = new BulkSetSamplerate5200();
  94 + this->command[BULK_SETBUFFER5200] = new BulkSetBuffer5200();
  95 + this->command[BULK_SETTRIGGER5200] = new BulkSetTrigger5200();
  96 +
  97 + for(int command = 0; command < BULK_COUNT; command++)
74 this->commandPending[command] = false; 98 this->commandPending[command] = false;
75 99
76 // Transmission-ready control commands 100 // Transmission-ready control commands
@@ -82,14 +106,6 @@ namespace Hantek { @@ -82,14 +106,6 @@ namespace Hantek {
82 for(int control = 0; control < CONTROLINDEX_COUNT; control++) 106 for(int control = 0; control < CONTROLINDEX_COUNT; control++)
83 this->controlPending[control] = false; 107 this->controlPending[control] = false;
84 108
85 - // Channel level data  
86 - for(unsigned int channel = 0; channel < HANTEK_CHANNELS; channel++) {  
87 - for(unsigned int gainId = 0; gainId < GAIN_COUNT; gainId++) {  
88 - this->channelLevels[channel][gainId][OFFSET_START] = 0x0000;  
89 - this->channelLevels[channel][gainId][OFFSET_END] = 0xffff;  
90 - }  
91 - }  
92 -  
93 // USB device 109 // USB device
94 this->device = new Device(this); 110 this->device = new Device(this);
95 111
@@ -124,7 +140,7 @@ namespace Hantek { @@ -124,7 +140,7 @@ namespace Hantek {
124 140
125 while(captureState != LIBUSB_ERROR_NO_DEVICE && !this->terminate) { 141 while(captureState != LIBUSB_ERROR_NO_DEVICE && !this->terminate) {
126 // Send all pending bulk commands 142 // Send all pending bulk commands
127 - for(int command = 0; command < COMMAND_COUNT; command++) { 143 + for(int command = 0; command < BULK_COUNT; command++) {
128 if(!this->commandPending[command]) 144 if(!this->commandPending[command])
129 continue; 145 continue;
130 146
@@ -134,7 +150,7 @@ namespace Hantek { @@ -134,7 +150,7 @@ namespace Hantek {
134 150
135 errorCode = this->device->bulkCommand(this->command[command]); 151 errorCode = this->device->bulkCommand(this->command[command]);
136 if(errorCode < 0) { 152 if(errorCode < 0) {
137 - qDebug("Sending bulk command 0x%02x failed: %s", command, Helper::libUsbErrorString(errorCode).toLocal8Bit().data()); 153 + qWarning("Sending bulk command 0x%02x failed: %s", command, Helper::libUsbErrorString(errorCode).toLocal8Bit().data());
138 154
139 if(errorCode == LIBUSB_ERROR_NO_DEVICE) { 155 if(errorCode == LIBUSB_ERROR_NO_DEVICE) {
140 captureState = LIBUSB_ERROR_NO_DEVICE; 156 captureState = LIBUSB_ERROR_NO_DEVICE;
@@ -158,7 +174,7 @@ namespace Hantek { @@ -158,7 +174,7 @@ namespace Hantek {
158 174
159 errorCode = this->device->controlWrite(this->controlCode[control], this->control[control]->data(), this->control[control]->getSize()); 175 errorCode = this->device->controlWrite(this->controlCode[control], this->control[control]->data(), this->control[control]->getSize());
160 if(errorCode < 0) { 176 if(errorCode < 0) {
161 - qDebug("Sending control command 0x%2x failed: %s", control, Helper::libUsbErrorString(errorCode).toLocal8Bit().data()); 177 + qWarning("Sending control command 0x%2x failed: %s", control, Helper::libUsbErrorString(errorCode).toLocal8Bit().data());
162 178
163 if(errorCode == LIBUSB_ERROR_NO_DEVICE) { 179 if(errorCode == LIBUSB_ERROR_NO_DEVICE) {
164 captureState = LIBUSB_ERROR_NO_DEVICE; 180 captureState = LIBUSB_ERROR_NO_DEVICE;
@@ -171,9 +187,9 @@ namespace Hantek { @@ -171,9 +187,9 @@ namespace Hantek {
171 if(captureState == LIBUSB_ERROR_NO_DEVICE) 187 if(captureState == LIBUSB_ERROR_NO_DEVICE)
172 break; 188 break;
173 189
174 - // Check the current oscilloscope state everytime 25% of the buffer should be refilled 190 + // Check the current oscilloscope state everytime 25% of the time the buffer should be refilled
175 // Not more often than every 10 ms though 191 // Not more often than every 10 ms though
176 - int cycleTime = qMax(this->samplerateDivider * this->bufferSize * 250 / this->samplerateMax, (long unsigned int) 10); 192 + int cycleTime = qMax((unsigned long int) (this->specification.bufferSizes[this->settings.bufferSizeId] / this->settings.samplerate.current * 250), (long unsigned int) 10);
177 this->msleep(cycleTime); 193 this->msleep(cycleTime);
178 194
179 if(!this->sampling) { 195 if(!this->sampling) {
@@ -195,10 +211,10 @@ namespace Hantek { @@ -195,10 +211,10 @@ namespace Hantek {
195 // Get data and process it, if we're still sampling 211 // Get data and process it, if we're still sampling
196 errorCode = this->getSamples(samplingStarted); 212 errorCode = this->getSamples(samplingStarted);
197 if(errorCode < 0) 213 if(errorCode < 0)
198 - qDebug("Getting sample data failed: %s", Helper::libUsbErrorString(errorCode).toLocal8Bit().data()); 214 + qWarning("Getting sample data failed: %s", Helper::libUsbErrorString(errorCode).toLocal8Bit().data());
199 215
200 // Check if we're in single trigger mode 216 // Check if we're in single trigger mode
201 - if(this->triggerMode == Dso::TRIGGERMODE_SINGLE && samplingStarted) 217 + if(this->settings.trigger.mode == Dso::TRIGGERMODE_SINGLE && samplingStarted)
202 this->stopSampling(); 218 this->stopSampling();
203 219
204 // Sampling completed, restart it when necessary 220 // Sampling completed, restart it when necessary
@@ -209,29 +225,29 @@ namespace Hantek { @@ -209,29 +225,29 @@ namespace Hantek {
209 break; 225 break;
210 226
211 case CAPTURE_WAITING: 227 case CAPTURE_WAITING:
212 - if(samplingStarted && lastTriggerMode == this->triggerMode) { 228 + if(samplingStarted && lastTriggerMode == this->settings.trigger.mode) {
213 cycleCounter++; 229 cycleCounter++;
214 230
215 if(cycleCounter == startCycle) { 231 if(cycleCounter == startCycle) {
216 // Buffer refilled completely since start of sampling, enable the trigger now 232 // Buffer refilled completely since start of sampling, enable the trigger now
217 - errorCode = this->device->bulkCommand(this->command[COMMAND_ENABLETRIGGER]); 233 + errorCode = this->device->bulkCommand(this->command[BULK_ENABLETRIGGER]);
218 if(errorCode < 0) { 234 if(errorCode < 0) {
219 if(errorCode == LIBUSB_ERROR_NO_DEVICE) 235 if(errorCode == LIBUSB_ERROR_NO_DEVICE)
220 captureState = LIBUSB_ERROR_NO_DEVICE; 236 captureState = LIBUSB_ERROR_NO_DEVICE;
221 break; 237 break;
222 } 238 }
223 - #ifdef DEBUG 239 +#ifdef DEBUG
224 qDebug("Enabling trigger"); 240 qDebug("Enabling trigger");
225 - #endif 241 +#endif
226 } 242 }
227 - else if(cycleCounter >= 8 + startCycle && this->triggerMode == Dso::TRIGGERMODE_AUTO) { 243 + else if(cycleCounter >= 8 + startCycle && this->settings.trigger.mode == Dso::TRIGGERMODE_AUTO) {
228 // Force triggering 244 // Force triggering
229 - errorCode = this->device->bulkCommand(this->command[COMMAND_FORCETRIGGER]); 245 + errorCode = this->device->bulkCommand(this->command[BULK_FORCETRIGGER]);
230 if(errorCode == LIBUSB_ERROR_NO_DEVICE) 246 if(errorCode == LIBUSB_ERROR_NO_DEVICE)
231 captureState = LIBUSB_ERROR_NO_DEVICE; 247 captureState = LIBUSB_ERROR_NO_DEVICE;
232 - #ifdef DEBUG 248 +#ifdef DEBUG
233 qDebug("Forcing trigger"); 249 qDebug("Forcing trigger");
234 - #endif 250 +#endif
235 } 251 }
236 252
237 if(cycleCounter < 50 || cycleCounter < 4000 / cycleTime) 253 if(cycleCounter < 50 || cycleCounter < 4000 / cycleTime)
@@ -239,7 +255,7 @@ namespace Hantek { @@ -239,7 +255,7 @@ namespace Hantek {
239 } 255 }
240 256
241 // Start capturing 257 // Start capturing
242 - errorCode = this->device->bulkCommand(this->command[COMMAND_STARTSAMPLING]); 258 + errorCode = this->device->bulkCommand(this->command[BULK_STARTSAMPLING]);
243 if(errorCode < 0) { 259 if(errorCode < 0) {
244 if(errorCode == LIBUSB_ERROR_NO_DEVICE) 260 if(errorCode == LIBUSB_ERROR_NO_DEVICE)
245 captureState = LIBUSB_ERROR_NO_DEVICE; 261 captureState = LIBUSB_ERROR_NO_DEVICE;
@@ -251,15 +267,15 @@ namespace Hantek { @@ -251,15 +267,15 @@ namespace Hantek {
251 267
252 samplingStarted = true; 268 samplingStarted = true;
253 cycleCounter = 0; 269 cycleCounter = 0;
254 - startCycle = this->triggerPosition * 1000 / cycleTime + 1;  
255 - lastTriggerMode = this->triggerMode; 270 + startCycle = this->settings.trigger.position * 1000 / cycleTime + 1;
  271 + lastTriggerMode = this->settings.trigger.mode;
256 break; 272 break;
257 273
258 case CAPTURE_SAMPLING: 274 case CAPTURE_SAMPLING:
259 break; 275 break;
260 default: 276 default:
261 if(captureState < 0) 277 if(captureState < 0)
262 - qDebug("Getting capture state failed: %s", Helper::libUsbErrorString(captureState).toLocal8Bit().data()); 278 + qWarning("Getting capture state failed: %s", Helper::libUsbErrorString(captureState).toLocal8Bit().data());
263 break; 279 break;
264 } 280 }
265 } 281 }
@@ -287,16 +303,16 @@ namespace Hantek { @@ -287,16 +303,16 @@ namespace Hantek {
287 int Control::getCaptureState() { 303 int Control::getCaptureState() {
288 int errorCode; 304 int errorCode;
289 305
290 - errorCode = this->device->bulkCommand(this->command[COMMAND_GETCAPTURESTATE], 1); 306 + errorCode = this->device->bulkCommand(this->command[BULK_GETCAPTURESTATE], 1);
291 if(errorCode < 0) 307 if(errorCode < 0)
292 return errorCode; 308 return errorCode;
293 309
294 - ResponseGetCaptureState response; 310 + BulkResponseGetCaptureState response;
295 errorCode = this->device->bulkRead(response.data(), response.getSize()); 311 errorCode = this->device->bulkRead(response.data(), response.getSize());
296 if(errorCode < 0) 312 if(errorCode < 0)
297 return errorCode; 313 return errorCode;
298 314
299 - this->triggerPoint = this->calculateTriggerPoint(response.getTriggerPoint()); 315 + this->settings.trigger.point = this->calculateTriggerPoint(response.getTriggerPoint());
300 316
301 return (int) response.getCaptureState(); 317 return (int) response.getCaptureState();
302 } 318 }
@@ -307,12 +323,12 @@ namespace Hantek { @@ -307,12 +323,12 @@ namespace Hantek {
307 int errorCode; 323 int errorCode;
308 324
309 // Request data 325 // Request data
310 - errorCode = this->device->bulkCommand(this->command[COMMAND_GETDATA], 1); 326 + errorCode = this->device->bulkCommand(this->command[BULK_GETDATA], 1);
311 if(errorCode < 0) 327 if(errorCode < 0)
312 return errorCode; 328 return errorCode;
313 329
314 // Save raw data to temporary buffer 330 // Save raw data to temporary buffer
315 - unsigned int dataCount = this->bufferSize * HANTEK_CHANNELS; 331 + unsigned int dataCount = this->specification.bufferSizes[this->settings.bufferSizeId] * HANTEK_CHANNELS;
316 unsigned int dataLength = dataCount; 332 unsigned int dataLength = dataCount;
317 bool using10Bits = false; 333 bool using10Bits = false;
318 if(this->device->getModel() == MODEL_DSO5200 || this->device->getModel() == MODEL_DSO5200A) { 334 if(this->device->getModel() == MODEL_DSO5200 || this->device->getModel() == MODEL_DSO5200A) {
@@ -339,13 +355,13 @@ namespace Hantek { @@ -339,13 +355,13 @@ namespace Hantek {
339 // Get oscilloscope settings 355 // Get oscilloscope settings
340 bool fastRate; 356 bool fastRate;
341 UsedChannels usedChannels; 357 UsedChannels usedChannels;
342 - if(this->commandVersion == 0) {  
343 - fastRate = ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->getFastRate();  
344 - usedChannels = (UsedChannels) ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->getUsedChannels(); 358 + if(this->specification.command.bulk.setTrigger == BULK_SETTRIGGERANDSAMPLERATE) {
  359 + fastRate = ((BulkSetTriggerAndSamplerate *) this->command[BULK_SETTRIGGERANDSAMPLERATE])->getFastRate();
  360 + usedChannels = (UsedChannels) ((BulkSetTriggerAndSamplerate *) this->command[BULK_SETTRIGGERANDSAMPLERATE])->getUsedChannels();
345 } 361 }
346 else { 362 else {
347 - fastRate = ((CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200])->getFastRate();  
348 - usedChannels = (UsedChannels) ((CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200])->getUsedChannels(); 363 + fastRate = ((BulkSetTrigger5200 *) this->command[BULK_SETTRIGGER5200])->getFastRate();
  364 + usedChannels = (UsedChannels) ((BulkSetTrigger5200 *) this->command[BULK_SETTRIGGER5200])->getUsedChannels();
349 } 365 }
350 // Convert channel data 366 // Convert channel data
351 if(fastRate) { 367 if(fastRate) {
@@ -374,7 +390,7 @@ namespace Hantek { @@ -374,7 +390,7 @@ namespace Hantek {
374 } 390 }
375 391
376 // Convert data from the oscilloscope and write it into the sample buffer 392 // Convert data from the oscilloscope and write it into the sample buffer
377 - unsigned int bufferPosition = (this->triggerPoint + 1) * 2; 393 + unsigned int bufferPosition = (this->settings.trigger.point + 1) * 2;
378 if(using10Bits) { 394 if(using10Bits) {
379 // Additional 2 most significant bits after the normal data 395 // Additional 2 most significant bits after the normal data
380 unsigned int extraBitsPosition; // Track the position of the extra bits in the additional byte 396 unsigned int extraBitsPosition; // Track the position of the extra bits in the additional byte
@@ -385,7 +401,7 @@ namespace Hantek { @@ -385,7 +401,7 @@ namespace Hantek {
385 401
386 extraBitsPosition = bufferPosition % HANTEK_CHANNELS; 402 extraBitsPosition = bufferPosition % HANTEK_CHANNELS;
387 403
388 - this->samples[channel][realPosition] = ((double) ((unsigned short int) data[bufferPosition] + (((unsigned short int) data[dataCount + bufferPosition - extraBitsPosition] << (8 - (HANTEK_CHANNELS - 1 - extraBitsPosition) * 2)) & 0x0200)) / this->sampleRange[HANTEK_CHANNELS - 1 - extraBitsPosition] - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; 404 + this->samples[channel][realPosition] = ((double) ((unsigned short int) data[bufferPosition] + (((unsigned short int) data[dataCount + bufferPosition - extraBitsPosition] << (8 - (HANTEK_CHANNELS - 1 - extraBitsPosition) * 2)) & 0x0200)) / this->specification.voltageLimit[HANTEK_CHANNELS - 1 - extraBitsPosition][this->settings.voltage[channel].gain] - this->settings.voltage[channel].offsetReal) * this->specification.gainSteps[this->settings.voltage[channel].gain];
389 } 405 }
390 } 406 }
391 else { 407 else {
@@ -393,7 +409,7 @@ namespace Hantek { @@ -393,7 +409,7 @@ namespace Hantek {
393 if(bufferPosition >= dataCount) 409 if(bufferPosition >= dataCount)
394 bufferPosition %= dataCount; 410 bufferPosition %= dataCount;
395 411
396 - this->samples[channel][realPosition] = ((double) data[bufferPosition] / this->sampleRange[channel] - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; 412 + this->samples[channel][realPosition] = ((double) data[bufferPosition] / this->specification.voltageLimit[channel][this->settings.voltage[channel].gain] - this->settings.voltage[channel].offsetReal) * this->specification.gainSteps[this->settings.voltage[channel].gain];
397 } 413 }
398 } 414 }
399 } 415 }
@@ -413,14 +429,14 @@ namespace Hantek { @@ -413,14 +429,14 @@ namespace Hantek {
413 } 429 }
414 430
415 // Convert data from the oscilloscope and write it into the sample buffer 431 // Convert data from the oscilloscope and write it into the sample buffer
416 - unsigned int bufferPosition = (this->triggerPoint + 1) * 2; 432 + unsigned int bufferPosition = (this->settings.trigger.point + 1) * 2;
417 if(using10Bits) { 433 if(using10Bits) {
418 // Additional 2 most significant bits after the normal data 434 // Additional 2 most significant bits after the normal data
419 for(unsigned int realPosition = 0; realPosition < channelDataCount; realPosition++, bufferPosition += 2) { 435 for(unsigned int realPosition = 0; realPosition < channelDataCount; realPosition++, bufferPosition += 2) {
420 if(bufferPosition >= dataCount) 436 if(bufferPosition >= dataCount)
421 bufferPosition %= dataCount; 437 bufferPosition %= dataCount;
422 438
423 - this->samples[channel][realPosition] = ((double) ((unsigned short int) data[bufferPosition + HANTEK_CHANNELS - 1 - channel] + (((unsigned short int) data[dataCount + bufferPosition] << (8 - channel * 2)) & 0x0200)) / this->sampleRange[channel] - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; 439 + this->samples[channel][realPosition] = ((double) ((unsigned short int) data[bufferPosition + HANTEK_CHANNELS - 1 - channel] + (((unsigned short int) data[dataCount + bufferPosition] << (8 - channel * 2)) & 0x0200)) / this->specification.voltageLimit[channel][this->settings.voltage[channel].gain] - this->settings.voltage[channel].offsetReal) * this->specification.gainSteps[this->settings.voltage[channel].gain];
424 } 440 }
425 } 441 }
426 else { 442 else {
@@ -428,7 +444,7 @@ namespace Hantek { @@ -428,7 +444,7 @@ namespace Hantek {
428 if(bufferPosition >= dataCount) 444 if(bufferPosition >= dataCount)
429 bufferPosition %= dataCount; 445 bufferPosition %= dataCount;
430 446
431 - this->samples[channel][realPosition] = ((double) data[bufferPosition + HANTEK_CHANNELS - 1 - channel] / this->sampleRange[channel] - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; 447 + this->samples[channel][realPosition] = ((double) data[bufferPosition + HANTEK_CHANNELS - 1 - channel] / this->specification.voltageLimit[channel][this->settings.voltage[channel].gain] - this->settings.voltage[channel].offsetReal) * this->specification.gainSteps[this->settings.voltage[channel].gain];
432 } 448 }
433 } 449 }
434 } 450 }
@@ -442,7 +458,7 @@ namespace Hantek { @@ -442,7 +458,7 @@ namespace Hantek {
442 } 458 }
443 459
444 this->samplesMutex.unlock(); 460 this->samplesMutex.unlock();
445 - emit samplesAvailable(&(this->samples), &(this->samplesSize), (double) this->samplerateMax / this->samplerateDivider, &(this->samplesMutex)); 461 + emit samplesAvailable(&(this->samples), &(this->samplesSize), this->settings.samplerate.current, &(this->samplesMutex));
446 } 462 }
447 463
448 return 0; 464 return 0;
@@ -450,32 +466,49 @@ namespace Hantek { @@ -450,32 +466,49 @@ namespace Hantek {
450 466
451 /// \brief Sets the size of the sample buffer without updating dependencies. 467 /// \brief Sets the size of the sample buffer without updating dependencies.
452 /// \param size The buffer size that should be met (S). 468 /// \param size The buffer size that should be met (S).
453 - /// \return The buffer size that has been set. 469 + /// \return The buffer size that has been set, 0 on error.
454 unsigned long int Control::updateBufferSize(unsigned long int size) { 470 unsigned long int Control::updateBufferSize(unsigned long int size) {
455 - BufferSizeId sizeId = (size <= BUFFER_SMALL) ? BUFFERID_SMALL : BUFFERID_LARGE; 471 + // Get the buffer size supporting the highest samplerate while meeting the requirement
  472 + int bestSizeId = -1;
  473 + for(int sizeId = 0; sizeId < this->specification.bufferSizes.count(); sizeId++) {
  474 + if(this->specification.bufferSizes[sizeId] >= size) {
  475 + // We meet the size-requirement, check if we provide the highest possible samplerate
  476 + if(bestSizeId == -1 || this->specification.bufferSizes[bestSizeId] < size || this->specification.bufferDividers[sizeId] < this->specification.bufferDividers[bestSizeId])
  477 + bestSizeId = sizeId;
  478 + }
  479 + else {
  480 + // We don't meet the size-requirement, but maybe we're still the one coming closest
  481 + if(bestSizeId == -1 || this->specification.bufferSizes[sizeId] > this->specification.bufferSizes[bestSizeId])
  482 + bestSizeId = sizeId;
  483 + }
  484 + }
456 485
457 - switch(this->commandVersion) {  
458 - case 0: 486 + switch(this->specification.command.bulk.setBuffer) {
  487 + case BULK_SETTRIGGERANDSAMPLERATE:
459 // SetTriggerAndSamplerate bulk command for buffer size 488 // SetTriggerAndSamplerate bulk command for buffer size
460 - ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setBufferSize(sizeId);  
461 - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; 489 + ((BulkSetTriggerAndSamplerate *) this->command[BULK_SETTRIGGERANDSAMPLERATE])->setBufferSize(bestSizeId);
  490 + this->commandPending[BULK_SETTRIGGERANDSAMPLERATE] = true;
462 491
463 - this->bufferSize = (sizeId == BUFFERID_SMALL) ? BUFFER_SMALL : BUFFER_LARGE;  
464 break; 492 break;
465 493
466 - case 1: 494 + case BULK_SETBUFFER5200: {
467 // SetBuffer5200 bulk command for buffer size 495 // SetBuffer5200 bulk command for buffer size
468 - CommandSetBuffer5200 *commandSetBuffer5200 = (CommandSetBuffer5200 *) this->command[COMMAND_SETBUFFER5200]; 496 + BulkSetBuffer5200 *commandSetBuffer5200 = (BulkSetBuffer5200 *) this->command[BULK_SETBUFFER5200];
469 commandSetBuffer5200->setUsedPre(DTRIGGERPOSITION_ON); 497 commandSetBuffer5200->setUsedPre(DTRIGGERPOSITION_ON);
470 commandSetBuffer5200->setUsedPost(DTRIGGERPOSITION_ON); 498 commandSetBuffer5200->setUsedPost(DTRIGGERPOSITION_ON);
471 - commandSetBuffer5200->setBufferSize(sizeId);  
472 - this->commandPending[COMMAND_SETBUFFER5200] = true; 499 + commandSetBuffer5200->setBufferSize(bestSizeId);
  500 + this->commandPending[BULK_SETBUFFER5200] = true;
473 501
474 - this->bufferSize = (sizeId == BUFFERID_SMALL) ? BUFFER_SMALL : BUFFER_LARGE5200;  
475 break; 502 break;
  503 + }
  504 +
  505 + default:
  506 + return 0;
476 } 507 }
477 508
478 - return this->bufferSize; 509 + this->settings.bufferSizeId = bestSizeId;
  510 +
  511 + return this->specification.bufferSizes[this->settings.bufferSizeId];
479 } 512 }
480 513
481 /// \brief Try to connect to the oscilloscope. 514 /// \brief Try to connect to the oscilloscope.
@@ -486,16 +519,32 @@ namespace Hantek { @@ -486,16 +519,32 @@ namespace Hantek {
486 if(!this->device->isConnected()) 519 if(!this->device->isConnected())
487 return; 520 return;
488 521
489 - // Set all necessary configuration commands as pending  
490 - this->commandPending[COMMAND_SETFILTER] = true;  
491 - this->commandPending[COMMAND_FORCETRIGGER] = false;  
492 - this->commandPending[COMMAND_STARTSAMPLING] = false;  
493 - this->commandPending[COMMAND_ENABLETRIGGER] = false;  
494 - this->commandPending[COMMAND_GETDATA] = false;  
495 - this->commandPending[COMMAND_GETCAPTURESTATE] = false;  
496 - this->commandPending[COMMAND_SETGAIN] = true;  
497 - this->commandPending[COMMAND_SETLOGICALDATA] = false;  
498 - this->commandPending[COMMAND_GETLOGICALDATA] = false; 522 + // Initialize the commands used on the DSO-2090 as pending
  523 + this->commandPending[BULK_SETFILTER] = true;
  524 + this->commandPending[BULK_SETTRIGGERANDSAMPLERATE] = true;
  525 + this->commandPending[BULK_FORCETRIGGER] = false;
  526 + this->commandPending[BULK_STARTSAMPLING] = false;
  527 + this->commandPending[BULK_ENABLETRIGGER] = false;
  528 + this->commandPending[BULK_GETDATA] = false;
  529 + this->commandPending[BULK_GETCAPTURESTATE] = false;
  530 + this->commandPending[BULK_SETGAIN] = true;
  531 + this->commandPending[BULK_SETLOGICALDATA] = false;
  532 + this->commandPending[BULK_GETLOGICALDATA] = false;
  533 + this->commandPending[BULK_UNKNOWN_0A] = false;
  534 + this->commandPending[BULK_UNKNOWN_0B] = false;
  535 + this->commandPending[BULK_SETSAMPLERATE5200] = false;
  536 + this->commandPending[BULK_SETBUFFER5200] = false;
  537 + this->commandPending[BULK_SETTRIGGER5200] = false;
  538 + // Initialize the command versions to the ones used on the DSO-2090
  539 + this->specification.command.bulk.setBuffer = BULK_SETTRIGGERANDSAMPLERATE;
  540 + this->specification.command.bulk.setFilter = BULK_SETFILTER;
  541 + this->specification.command.bulk.setGain = BULK_SETGAIN;
  542 + this->specification.command.bulk.setSamplerate = BULK_SETTRIGGERANDSAMPLERATE;
  543 + this->specification.command.bulk.setTrigger = BULK_SETTRIGGERANDSAMPLERATE;
  544 + this->specification.command.control.setOffset = CONTROL_SETOFFSET;
  545 + this->specification.command.control.setRelays = CONTROL_SETRELAYS;
  546 + this->specification.command.values.offsetLimits = VALUE_OFFSETLIMITS;
  547 + this->specification.command.values.voltageLimits = (ControlValue) -1;
499 548
500 // Determine the command version we need for this model 549 // Determine the command version we need for this model
501 bool unsupported = false; 550 bool unsupported = false;
@@ -503,23 +552,26 @@ namespace Hantek { @@ -503,23 +552,26 @@ namespace Hantek {
503 case MODEL_DSO2100: 552 case MODEL_DSO2100:
504 case MODEL_DSO2150: 553 case MODEL_DSO2150:
505 unsupported = true; 554 unsupported = true;
  555 +
506 case MODEL_DSO2090: 556 case MODEL_DSO2090:
507 - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true;  
508 - this->commandPending[COMMAND_SETSAMPLERATE5200] = false;  
509 - this->commandPending[COMMAND_SETBUFFER5200] = false;  
510 - this->commandPending[COMMAND_SETTRIGGER5200] = false;  
511 - this->commandVersion = 0; 557 + // Keep the defaults we've set before
512 break; 558 break;
513 559
514 case MODEL_DSO2250: 560 case MODEL_DSO2250:
515 case MODEL_DSO5200A: 561 case MODEL_DSO5200A:
516 unsupported = true; 562 unsupported = true;
  563 +
517 case MODEL_DSO5200: 564 case MODEL_DSO5200:
518 - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = false;  
519 - this->commandPending[COMMAND_SETSAMPLERATE5200] = true;  
520 - this->commandPending[COMMAND_SETBUFFER5200] = true;  
521 - this->commandPending[COMMAND_SETTRIGGER5200] = true;  
522 - this->commandVersion = 1; 565 + this->specification.command.bulk.setBuffer = BULK_SETBUFFER5200;
  566 + this->specification.command.bulk.setSamplerate = BULK_SETSAMPLERATE5200;
  567 + this->specification.command.bulk.setTrigger = BULK_SETTRIGGER5200;
  568 + this->specification.command.values.voltageLimits = VALUE_VOLTAGELIMITS;
  569 +
  570 + this->commandPending[BULK_SETTRIGGERANDSAMPLERATE] = false;
  571 + this->commandPending[BULK_SETSAMPLERATE5200] = true;
  572 + this->commandPending[BULK_SETBUFFER5200] = true;
  573 + this->commandPending[BULK_SETTRIGGER5200] = true;
  574 +
523 break; 575 break;
524 576
525 default: 577 default:
@@ -529,34 +581,50 @@ namespace Hantek { @@ -529,34 +581,50 @@ namespace Hantek {
529 } 581 }
530 582
531 if(unsupported) 583 if(unsupported)
532 - 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."); 584 + qWarning("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.");
533 585
534 for(int control = 0; control < CONTROLINDEX_COUNT; control++) 586 for(int control = 0; control < CONTROLINDEX_COUNT; control++)
535 this->controlPending[control] = true; 587 this->controlPending[control] = true;
536 588
537 - // Maximum possible samplerate for a single channel 589 + // Maximum possible samplerate for a single channel and dividers for buffer sizes
  590 + this->specification.bufferDividers.clear();
  591 + this->specification.bufferSizes.clear();
  592 +
538 switch(this->device->getModel()) { 593 switch(this->device->getModel()) {
539 - case MODEL_DSO2090:  
540 - case MODEL_DSO2100:  
541 - this->samplerateChannelMax = 50e6;  
542 - this->samplerateFastMax = 100e6; 594 + case MODEL_DSO2250:
  595 + case MODEL_DSO5200:
  596 + case MODEL_DSO5200A:
  597 + this->specification.samplerate.single.base = 100e6;
  598 + this->specification.samplerate.single.max = 125e6;
  599 + this->specification.samplerate.multi.base = 200e6;
  600 + this->specification.samplerate.multi.max = 250e6;
  601 + this->specification.bufferDividers << 1000 << 1 << 2;
  602 + this->specification.bufferSizes << ULONG_MAX << 10240 << 14336;
543 break; 603 break;
544 604
545 case MODEL_DSO2150: 605 case MODEL_DSO2150:
546 - this->samplerateChannelMax = 50e6;  
547 - this->samplerateFastMax = 150e6; 606 + this->specification.samplerate.single.base = 50e6;
  607 + this->specification.samplerate.single.max = 75e6;
  608 + this->specification.samplerate.multi.base = 100e6;
  609 + this->specification.samplerate.multi.max = 150e6;
  610 + this->specification.bufferDividers << 1000 << 1 << 2;
  611 + this->specification.bufferSizes << ULONG_MAX << 10240 << 32768;
548 break; 612 break;
549 613
550 default: 614 default:
551 - this->samplerateChannelMax = 100e6;  
552 - this->samplerateFastMax = 250e6; 615 + this->specification.samplerate.single.base = 50e6;
  616 + this->specification.samplerate.single.max = 50e6;
  617 + this->specification.samplerate.multi.base = 100e6;
  618 + this->specification.samplerate.multi.max = 100e6;
  619 + this->specification.bufferDividers << 1000 << 1 << 2;
  620 + this->specification.bufferSizes << ULONG_MAX << 10240 << 32768;
553 break; 621 break;
554 } 622 }
555 - this->samplerateMax = this->samplerateChannelMax;  
556 - this->samplerateDivider = 1; 623 + this->settings.samplerate.limits = &(this->specification.samplerate.single);
  624 + this->settings.samplerate.downsampling = 1;
557 625
558 // Get channel level data 626 // Get channel level data
559 - errorCode = this->device->controlRead(CONTROL_VALUE, (unsigned char*) &(this->channelLevels), sizeof(this->channelLevels), (int) VALUE_CHANNELLEVEL); 627 + errorCode = this->device->controlRead(CONTROL_VALUE, (unsigned char *) &(this->specification.offsetLimit), sizeof(this->specification.offsetLimit), (int) VALUE_OFFSETLIMITS);
560 if(errorCode < 0) { 628 if(errorCode < 0) {
561 this->device->disconnect(); 629 this->device->disconnect();
562 emit statusMessage(tr("Couldn't get channel level data from oscilloscope"), 0); 630 emit statusMessage(tr("Couldn't get channel level data from oscilloscope"), 0);
@@ -575,70 +643,66 @@ namespace Hantek { @@ -575,70 +643,66 @@ namespace Hantek {
575 643
576 this->updateBufferSize(size); 644 this->updateBufferSize(size);
577 645
578 - this->setTriggerPosition(this->triggerPosition);  
579 - this->setSamplerate(this->samplerateMax / this->samplerateDivider);  
580 - this->setTriggerSlope(this->triggerSlope); 646 + this->setTriggerPosition(this->settings.trigger.position);
  647 + this->setSamplerate();
581 648
582 - return this->bufferSize; 649 + return this->specification.bufferSizes[this->settings.bufferSizeId];
583 } 650 }
584 651
585 /// \brief Sets the samplerate of the oscilloscope. 652 /// \brief Sets the samplerate of the oscilloscope.
586 /// \param samplerate The samplerate that should be met (S/s). 653 /// \param samplerate The samplerate that should be met (S/s).
587 /// \return The samplerate that has been set. 654 /// \return The samplerate that has been set.
588 unsigned long int Control::setSamplerate(unsigned long int samplerate) { 655 unsigned long int Control::setSamplerate(unsigned long int samplerate) {
589 - if(!this->device->isConnected() || samplerate == 0) 656 + if(!this->device->isConnected())
590 return 0; 657 return 0;
591 658
592 - // Pointers to needed commands  
593 - CommandSetTriggerAndSamplerate *commandSetTriggerAndSamplerate = (CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE];  
594 - CommandSetSamplerate5200 *commandSetSamplerate5200 = (CommandSetSamplerate5200 *) this->command[COMMAND_SETSAMPLERATE5200];  
595 - CommandSetBuffer5200 *commandSetBuffer5200 = (CommandSetBuffer5200 *) this->command[COMMAND_SETBUFFER5200];  
596 - CommandSetTrigger5200 *commandSetTrigger5200 = (CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200]; 659 + // Keep samplerate if no parameter was given
  660 + if(!samplerate)
  661 + samplerate = this->settings.samplerate.current;
  662 + // Abort samplerate calculation if we didn't get a valid value yet
  663 + if(!samplerate)
  664 + return samplerate;
597 665
598 // Calculate with fast rate first if only one channel is used 666 // Calculate with fast rate first if only one channel is used
599 bool fastRate = false; 667 bool fastRate = false;
600 - this->samplerateMax = this->samplerateChannelMax;  
601 - if(((this->commandVersion == 0) ? commandSetTriggerAndSamplerate->getUsedChannels() : commandSetTrigger5200->getUsedChannels()) != USED_CH1CH2) { 668 + this->settings.samplerate.limits = &(this->specification.samplerate.single);
  669 + if(this->settings.usedChannels <= 1) {
602 fastRate = true; 670 fastRate = true;
603 - this->samplerateMax = this->samplerateFastMax;  
604 - }  
605 -  
606 - // The maximum sample rate depends on the buffer size  
607 - unsigned int bufferDivider = 1;  
608 - switch((this->commandVersion == 0) ? commandSetTriggerAndSamplerate->getBufferSize() : commandSetBuffer5200->getBufferSize()) {  
609 - case BUFFERID_ROLL:  
610 - bufferDivider = 1000;  
611 - break;  
612 - case BUFFERID_LARGE:  
613 - bufferDivider = 2;  
614 - break;  
615 - default:  
616 - break; 671 + this->settings.samplerate.limits = &(this->specification.samplerate.multi);
617 } 672 }
618 673
619 - // Get divider that would provide the requested rate, can't be zero  
620 - this->samplerateMax /= bufferDivider;  
621 - this->samplerateDivider = qMax(this->samplerateMax / samplerate, (long unsigned int) 1); 674 + // Get downsampling factor that would provide the requested rate
  675 + this->settings.samplerate.downsampling = this->settings.samplerate.limits->base / this->specification.bufferDividers[this->settings.bufferSizeId] / samplerate;
  676 + // A downsampling factor of zero will result in the maximum rate
  677 + if(this->settings.samplerate.downsampling)
  678 + this->settings.samplerate.current = this->settings.samplerate.limits->base / this->specification.bufferDividers[this->settings.bufferSizeId] / this->settings.samplerate.downsampling;
  679 + else
  680 + this->settings.samplerate.current = this->settings.samplerate.limits->max / this->specification.bufferDividers[this->settings.bufferSizeId];
622 681
623 - // Use normal mode if we need valueSlow or it would meet the rate at least as exactly as fast rate mode 682 + // Maybe normal mode would be sufficient or even better than fast rate mode
624 if(fastRate) { 683 if(fastRate) {
625 - unsigned long int slowSamplerate = this->samplerateChannelMax / bufferDivider;  
626 - unsigned long int slowDivider = qMax(slowSamplerate / samplerate, (long unsigned int) 1); 684 + // Don't set the downsampling factor to zero (maximum rate) if we could use fast rate mode anyway
  685 + unsigned long int slowDownsampling = qMax(this->specification.samplerate.single.base / this->specification.bufferDividers[this->settings.bufferSizeId] / samplerate, (long unsigned int) 1);
627 686
628 - if(this->samplerateDivider > 4 || (qAbs((double) slowSamplerate / slowDivider - samplerate) <= qAbs(((double) this->samplerateMax / this->samplerateDivider) - samplerate))) { 687 + // Use normal mode if we need valueSlow or it would meet the rate at least as exactly as fast rate mode
  688 + if(this->settings.samplerate.downsampling > 4 || (qAbs((double) this->specification.samplerate.single.base / this->specification.bufferDividers[this->settings.bufferSizeId] / slowDownsampling - samplerate) <= qAbs(this->settings.samplerate.current - samplerate))) {
629 fastRate = false; 689 fastRate = false;
630 - this->samplerateMax = slowSamplerate;  
631 - this->samplerateDivider = slowDivider; 690 + this->settings.samplerate.limits = &(this->specification.samplerate.single);
  691 + this->settings.samplerate.downsampling = slowDownsampling;
  692 + this->settings.samplerate.current = this->specification.samplerate.single.base / this->specification.bufferDividers[this->settings.bufferSizeId] / this->settings.samplerate.downsampling;
632 } 693 }
633 } 694 }
634 695
635 // Split the resulting divider into the values understood by the device 696 // Split the resulting divider into the values understood by the device
636 // The fast value is kept at 4 (or 3) for slow sample rates 697 // The fast value is kept at 4 (or 3) for slow sample rates
637 - long int valueSlow = qMax(((long int) this->samplerateDivider - 3) / 2, (long int) 0);  
638 - unsigned char valueFast = this->samplerateDivider - valueSlow * 2; 698 + long int valueSlow = qMax(((long int) this->settings.samplerate.downsampling - 3) / 2, (long int) 0);
  699 + unsigned char valueFast = this->settings.samplerate.downsampling - valueSlow * 2;
639 700
640 - switch(this->commandVersion) {  
641 - case 0: 701 + switch(this->specification.command.bulk.setSamplerate) {
  702 + case BULK_SETTRIGGERANDSAMPLERATE: {
  703 + // Pointers to needed commands
  704 + BulkSetTriggerAndSamplerate *commandSetTriggerAndSamplerate = (BulkSetTriggerAndSamplerate *) this->command[BULK_SETTRIGGERANDSAMPLERATE];
  705 +
642 // Store samplerate fast value 706 // Store samplerate fast value
643 commandSetTriggerAndSamplerate->setSamplerateFast(valueFast); 707 commandSetTriggerAndSamplerate->setSamplerateFast(valueFast);
644 // Store samplerate slow value (two's complement) 708 // Store samplerate slow value (two's complement)
@@ -646,11 +710,14 @@ namespace Hantek { @@ -646,11 +710,14 @@ namespace Hantek {
646 // Set fast rate when used 710 // Set fast rate when used
647 commandSetTriggerAndSamplerate->setFastRate(fastRate); 711 commandSetTriggerAndSamplerate->setFastRate(fastRate);
648 712
649 - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; 713 + this->commandPending[BULK_SETTRIGGERANDSAMPLERATE] = true;
650 714
651 break; 715 break;
652 -  
653 - default: 716 + }
  717 + case BULK_SETSAMPLERATE5200: {
  718 + // Pointers to needed commands
  719 + BulkSetSamplerate5200 *commandSetSamplerate5200 = (BulkSetSamplerate5200 *) this->command[BULK_SETSAMPLERATE5200];
  720 + BulkSetTrigger5200 *commandSetTrigger5200 = (BulkSetTrigger5200 *) this->command[BULK_SETTRIGGER5200];
654 // Store samplerate fast value 721 // Store samplerate fast value
655 commandSetSamplerate5200->setSamplerateFast(4 - valueFast); 722 commandSetSamplerate5200->setSamplerateFast(4 - valueFast);
656 // Store samplerate slow value (two's complement) 723 // Store samplerate slow value (two's complement)
@@ -658,15 +725,18 @@ namespace Hantek { @@ -658,15 +725,18 @@ namespace Hantek {
658 // Set fast rate when used 725 // Set fast rate when used
659 commandSetTrigger5200->setFastRate(fastRate); 726 commandSetTrigger5200->setFastRate(fastRate);
660 727
661 - this->commandPending[COMMAND_SETSAMPLERATE5200] = true;  
662 - this->commandPending[COMMAND_SETTRIGGER5200] = true; 728 + this->commandPending[BULK_SETSAMPLERATE5200] = true;
  729 + this->commandPending[BULK_SETTRIGGER5200] = true;
663 730
664 break; 731 break;
  732 + }
  733 + default:
  734 + return 0;
665 } 735 }
666 736
667 - this->updateBufferSize(this->bufferSize);  
668 - this->setTriggerPosition(this->triggerPosition);  
669 - return this->samplerateMax / this->samplerateDivider; 737 + this->updateBufferSize(this->specification.bufferSizes[this->settings.bufferSizeId]);
  738 + this->setTriggerPosition(this->settings.trigger.position);
  739 + return this->settings.samplerate.current;
670 } 740 }
671 741
672 /// \brief Enables/disables filtering of the given channel. 742 /// \brief Enables/disables filtering of the given channel.
@@ -681,9 +751,9 @@ namespace Hantek { @@ -681,9 +751,9 @@ namespace Hantek {
681 return -1; 751 return -1;
682 752
683 // SetFilter bulk command for channel filter (used has to be inverted!) 753 // SetFilter bulk command for channel filter (used has to be inverted!)
684 - CommandSetFilter *commandSetFilter = (CommandSetFilter *) this->command[COMMAND_SETFILTER]; 754 + BulkSetFilter *commandSetFilter = (BulkSetFilter *) this->command[BULK_SETFILTER];
685 commandSetFilter->setChannel(channel, !used); 755 commandSetFilter->setChannel(channel, !used);
686 - this->commandPending[COMMAND_SETFILTER] = true; 756 + this->commandPending[BULK_SETFILTER] = true;
687 757
688 unsigned char usedChannels = USED_CH1; 758 unsigned char usedChannels = USED_CH1;
689 if(!commandSetFilter->getChannel(1)) { 759 if(!commandSetFilter->getChannel(1)) {
@@ -693,17 +763,17 @@ namespace Hantek { @@ -693,17 +763,17 @@ namespace Hantek {
693 usedChannels = USED_CH1CH2; 763 usedChannels = USED_CH1CH2;
694 } 764 }
695 765
696 - switch(this->commandVersion) {  
697 - case 0: {  
698 - // SetTriggerAndSamplerate bulk command for trigger source  
699 - ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setUsedChannels(usedChannels);  
700 - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; 766 + switch(this->specification.command.bulk.setTrigger) {
  767 + case BULK_SETTRIGGER5200: {
  768 + // SetTrigger5200s bulk command for trigger source
  769 + ((BulkSetTrigger5200 *) this->command[BULK_SETTRIGGER5200])->setUsedChannels(usedChannels);
  770 + this->commandPending[BULK_SETTRIGGER5200] = true;
701 break; 771 break;
702 } 772 }
703 - case 1: {  
704 - // SetTrigger5200s bulk command for trigger source  
705 - ((CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200])->setUsedChannels(usedChannels);  
706 - this->commandPending[COMMAND_SETTRIGGER5200] = true; 773 + default: {
  774 + // SetTriggerAndSamplerate bulk command for trigger source
  775 + ((BulkSetTriggerAndSamplerate *) this->command[BULK_SETTRIGGERANDSAMPLERATE])->setUsedChannels(usedChannels);
  776 + this->commandPending[BULK_SETTRIGGERANDSAMPLERATE] = true;
707 break; 777 break;
708 } 778 }
709 } 779 }
@@ -743,64 +813,67 @@ namespace Hantek { @@ -743,64 +813,67 @@ namespace Hantek {
743 // Find lowest gain voltage thats at least as high as the requested 813 // Find lowest gain voltage thats at least as high as the requested
744 int gainId; 814 int gainId;
745 for(gainId = 0; gainId < GAIN_COUNT - 1; gainId++) 815 for(gainId = 0; gainId < GAIN_COUNT - 1; gainId++)
746 - if(this->gainSteps[gainId] >= gain) 816 + if(this->specification.gainSteps[gainId] >= gain)
747 break; 817 break;
748 818
749 // Get the voltage scaler id and it's sample range for this gain 819 // Get the voltage scaler id and it's sample range for this gain
750 int scalerId; 820 int scalerId;
751 - switch(this->commandVersion) {  
752 - case 0:  
753 - scalerId = gainId % 3;  
754 - this->sampleRange[channel] = 0xff;  
755 - break;  
756 - default:  
757 - /// \todo Use calibration data to get the DSO-5200 sample ranges 821 + switch(this->device->getModel()) {
  822 + case MODEL_DSO5200:
  823 + case MODEL_DSO5200A:
  824 + /// \todo Use calibration data to get the DSO-5200(A) sample ranges
758 if(gainId == GAIN_10MV) { 825 if(gainId == GAIN_10MV) {
759 scalerId = 1; 826 scalerId = 1;
760 - this->sampleRange[channel] = 184; 827 + this->specification.voltageLimit[channel][gainId] = 184;
761 } 828 }
762 else { 829 else {
763 switch(gainId % 3) { 830 switch(gainId % 3) {
764 case 1: 831 case 1:
765 scalerId = 1; 832 scalerId = 1;
766 - this->sampleRange[channel] = 368; 833 + this->specification.voltageLimit[channel][gainId] = 368;
767 break; 834 break;
768 case 2: 835 case 2:
769 scalerId = 0; 836 scalerId = 0;
770 - this->sampleRange[channel] = 454; 837 + this->specification.voltageLimit[channel][gainId] = 454;
771 break; 838 break;
772 default: 839 default:
773 scalerId = 0; 840 scalerId = 0;
774 - this->sampleRange[channel] = 908; 841 + this->specification.voltageLimit[channel][gainId] = 908;
775 break; 842 break;
776 } 843 }
777 } 844 }
778 break; 845 break;
  846 +
  847 + default:
  848 + scalerId = gainId % 3;
  849 + this->specification.voltageLimit[channel][gainId] = 0xff;
  850 + break;
779 } 851 }
780 852
781 // SetGain bulk command for gain 853 // SetGain bulk command for gain
782 - ((CommandSetGain *) this->command[COMMAND_SETGAIN])->setGain(channel, scalerId);  
783 - this->commandPending[COMMAND_SETGAIN] = true; 854 + ((BulkSetGain *) this->command[BULK_SETGAIN])->setGain(channel, scalerId);
  855 + this->commandPending[BULK_SETGAIN] = true;
784 856
785 // SetRelays control command for gain relays 857 // SetRelays control command for gain relays
786 ControlSetRelays *controlSetRelays = (ControlSetRelays *) this->control[CONTROLINDEX_SETRELAYS]; 858 ControlSetRelays *controlSetRelays = (ControlSetRelays *) this->control[CONTROLINDEX_SETRELAYS];
787 - switch(this->commandVersion) {  
788 - case 0:  
789 - controlSetRelays->setBelow1V(channel, gainId < GAIN_1V);  
790 - controlSetRelays->setBelow100mV(channel, gainId < GAIN_100MV);  
791 - break;  
792 - case 1: 859 + switch(this->device->getModel()) {
  860 + case MODEL_DSO5200:
  861 + case MODEL_DSO5200A:
793 controlSetRelays->setBelow1V(channel, gainId <= GAIN_1V); 862 controlSetRelays->setBelow1V(channel, gainId <= GAIN_1V);
794 controlSetRelays->setBelow100mV(channel, gainId <= GAIN_100MV); 863 controlSetRelays->setBelow100mV(channel, gainId <= GAIN_100MV);
795 break; 864 break;
  865 + default:
  866 + controlSetRelays->setBelow1V(channel, gainId < GAIN_1V);
  867 + controlSetRelays->setBelow100mV(channel, gainId < GAIN_100MV);
  868 + break;
796 } 869 }
797 this->controlPending[CONTROLINDEX_SETRELAYS] = true; 870 this->controlPending[CONTROLINDEX_SETRELAYS] = true;
798 871
799 - this->gain[channel] = (Gain) gainId; 872 + this->settings.voltage[channel].gain = (Gain) gainId;
800 873
801 - this->setOffset(channel, this->offset[channel]); 874 + this->setOffset(channel, this->settings.voltage[channel].offset);
802 875
803 - return this->gainSteps[gainId]; 876 + return this->specification.gainSteps[gainId];
804 } 877 }
805 878
806 /// \brief Set the offset for the given channel. 879 /// \brief Set the offset for the given channel.
@@ -816,8 +889,8 @@ namespace Hantek { @@ -816,8 +889,8 @@ namespace Hantek {
816 889
817 // Calculate the offset value 890 // Calculate the offset value
818 // The range is given by the calibration data (convert from big endian) 891 // The range is given by the calibration data (convert from big endian)
819 - unsigned short int minimum = ((unsigned short int) *((unsigned char *) &(this->channelLevels[channel][this->gain[channel]][OFFSET_START])) << 8) + *((unsigned char *) &(this->channelLevels[channel][this->gain[channel]][OFFSET_START]) + 1);  
820 - unsigned short int maximum = ((unsigned short int) *((unsigned char *) &(this->channelLevels[channel][this->gain[channel]][OFFSET_START])) << 8) + *((unsigned char *) &(this->channelLevels[channel][this->gain[channel]][OFFSET_END]) + 1); 892 + unsigned short int minimum = ((unsigned short int) *((unsigned char *) &(this->specification.offsetLimit[channel][this->settings.voltage[channel].gain][OFFSET_START])) << 8) + *((unsigned char *) &(this->specification.offsetLimit[channel][this->settings.voltage[channel].gain][OFFSET_START]) + 1);
  893 + unsigned short int maximum = ((unsigned short int) *((unsigned char *) &(this->specification.offsetLimit[channel][this->settings.voltage[channel].gain][OFFSET_START])) << 8) + *((unsigned char *) &(this->specification.offsetLimit[channel][this->settings.voltage[channel].gain][OFFSET_END]) + 1);
821 unsigned short int offsetValue = offset * (maximum - minimum) + minimum + 0.5; 894 unsigned short int offsetValue = offset * (maximum - minimum) + minimum + 0.5;
822 double offsetReal = (double) (offsetValue - minimum) / (maximum - minimum); 895 double offsetReal = (double) (offsetValue - minimum) / (maximum - minimum);
823 896
@@ -825,10 +898,10 @@ namespace Hantek { @@ -825,10 +898,10 @@ namespace Hantek {
825 ((ControlSetOffset *) this->control[CONTROLINDEX_SETOFFSET])->setChannel(channel, offsetValue); 898 ((ControlSetOffset *) this->control[CONTROLINDEX_SETOFFSET])->setChannel(channel, offsetValue);
826 this->controlPending[CONTROLINDEX_SETOFFSET] = true; 899 this->controlPending[CONTROLINDEX_SETOFFSET] = true;
827 900
828 - this->offset[channel] = offset;  
829 - this->offsetReal[channel] = offsetReal; 901 + this->settings.voltage[channel].offset = offset;
  902 + this->settings.voltage[channel].offsetReal = offsetReal;
830 903
831 - this->setTriggerLevel(channel, this->triggerLevel[channel]); 904 + this->setTriggerLevel(channel, this->settings.trigger.level[channel]);
832 905
833 return offsetReal; 906 return offsetReal;
834 } 907 }
@@ -842,7 +915,7 @@ namespace Hantek { @@ -842,7 +915,7 @@ namespace Hantek {
842 if(mode < Dso::TRIGGERMODE_AUTO || mode > Dso::TRIGGERMODE_SINGLE) 915 if(mode < Dso::TRIGGERMODE_AUTO || mode > Dso::TRIGGERMODE_SINGLE)
843 return -1; 916 return -1;
844 917
845 - this->triggerMode = mode; 918 + this->settings.trigger.mode = mode;
846 return 0; 919 return 0;
847 } 920 }
848 921
@@ -864,17 +937,17 @@ namespace Hantek { @@ -864,17 +937,17 @@ namespace Hantek {
864 else 937 else
865 sourceValue = TRIGGER_CH1 - id; 938 sourceValue = TRIGGER_CH1 - id;
866 939
867 - switch(this->commandVersion) {  
868 - case 0:  
869 - // SetTriggerAndSamplerate bulk command for trigger source  
870 - ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setTriggerSource(sourceValue);  
871 - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true; 940 + switch(this->specification.command.bulk.setTrigger) {
  941 + case BULK_SETTRIGGER5200:
  942 + // SetTrigger5200 bulk command for trigger source
  943 + ((BulkSetTrigger5200 *) this->command[BULK_SETTRIGGER5200])->setTriggerSource(sourceValue);
  944 + this->commandPending[BULK_SETTRIGGER5200] = true;
872 break; 945 break;
873 946
874 - case 1:  
875 - // SetTrigger5200 bulk command for trigger source  
876 - ((CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200])->setTriggerSource(sourceValue);  
877 - this->commandPending[COMMAND_SETTRIGGER5200] = true; 947 + default:
  948 + // SetTriggerAndSamplerate bulk command for trigger source
  949 + ((BulkSetTriggerAndSamplerate *) this->command[BULK_SETTRIGGERANDSAMPLERATE])->setTriggerSource(sourceValue);
  950 + this->commandPending[BULK_SETTRIGGERANDSAMPLERATE] = true;
878 break; 951 break;
879 } 952 }
880 953
@@ -882,8 +955,8 @@ namespace Hantek { @@ -882,8 +955,8 @@ namespace Hantek {
882 ((ControlSetRelays *) this->control[CONTROLINDEX_SETRELAYS])->setTrigger(special); 955 ((ControlSetRelays *) this->control[CONTROLINDEX_SETRELAYS])->setTrigger(special);
883 this->controlPending[CONTROLINDEX_SETRELAYS] = true; 956 this->controlPending[CONTROLINDEX_SETRELAYS] = true;
884 957
885 - this->triggerSpecial = special;  
886 - this->triggerSource = id; 958 + this->settings.trigger.special = special;
  959 + this->settings.trigger.source = id;
887 960
888 // Apply trigger level of the new source 961 // Apply trigger level of the new source
889 if(special) { 962 if(special) {
@@ -892,7 +965,7 @@ namespace Hantek { @@ -892,7 +965,7 @@ namespace Hantek {
892 this->controlPending[CONTROLINDEX_SETOFFSET] = true; 965 this->controlPending[CONTROLINDEX_SETOFFSET] = true;
893 } 966 }
894 else 967 else
895 - this->setTriggerLevel(id, this->triggerLevel[id]); 968 + this->setTriggerLevel(id, this->settings.trigger.level[id]);
896 969
897 return 0; 970 return 0;
898 } 971 }
@@ -910,25 +983,26 @@ namespace Hantek { @@ -910,25 +983,26 @@ namespace Hantek {
910 983
911 // Calculate the trigger level value 984 // Calculate the trigger level value
912 unsigned short int minimum, maximum; 985 unsigned short int minimum, maximum;
913 - switch(this->commandVersion) {  
914 - case 0:  
915 - // It's from 0x00 to 0xfd for the 8 bit models  
916 - minimum = 0x00;  
917 - maximum = 0xfd; 986 + switch(this->device->getModel()) {
  987 + case MODEL_DSO5200:
  988 + case MODEL_DSO5200A:
  989 + // The range is the same as used for the offsets for 10 bit models
  990 + minimum = ((unsigned short int) *((unsigned char *) &(this->specification.offsetLimit[channel][this->settings.voltage[channel].gain][OFFSET_START])) << 8) + *((unsigned char *) &(this->specification.offsetLimit[channel][this->settings.voltage[channel].gain][OFFSET_START]) + 1);
  991 + maximum = ((unsigned short int) *((unsigned char *) &(this->specification.offsetLimit[channel][this->settings.voltage[channel].gain][OFFSET_START])) << 8) + *((unsigned char *) &(this->specification.offsetLimit[channel][this->settings.voltage[channel].gain][OFFSET_END]) + 1);
918 break; 992 break;
919 993
920 default: 994 default:
921 - // The range is the same as used for the offsets for 10 bit models  
922 - minimum = ((unsigned short int) *((unsigned char *) &(this->channelLevels[channel][this->gain[channel]][OFFSET_START])) << 8) + *((unsigned char *) &(this->channelLevels[channel][this->gain[channel]][OFFSET_START]) + 1);  
923 - maximum = ((unsigned short int) *((unsigned char *) &(this->channelLevels[channel][this->gain[channel]][OFFSET_START])) << 8) + *((unsigned char *) &(this->channelLevels[channel][this->gain[channel]][OFFSET_END]) + 1); 995 + // It's from 0x00 to 0xfd for the 8 bit models
  996 + minimum = 0x00;
  997 + maximum = 0xfd;
924 break; 998 break;
925 } 999 }
926 1000
927 // Never get out of the limits 1001 // Never get out of the limits
928 - unsigned short int levelValue = qBound((long int) minimum, (long int) ((this->offsetReal[channel] + level / this->gainSteps[this->gain[channel]]) * (maximum - minimum) + 0.5) + minimum, (long int) maximum); 1002 + unsigned short int levelValue = qBound((long int) minimum, (long int) ((this->settings.voltage[channel].offsetReal + level / this->specification.gainSteps[this->settings.voltage[channel].gain]) * (maximum - minimum) + 0.5) + minimum, (long int) maximum);
929 1003
930 // Check if the set channel is the trigger source 1004 // Check if the set channel is the trigger source
931 - if(!this->triggerSpecial && channel == this->triggerSource) { 1005 + if(!this->settings.trigger.special && channel == this->settings.trigger.source) {
932 // SetOffset control command for trigger level 1006 // SetOffset control command for trigger level
933 ((ControlSetOffset *) this->control[CONTROLINDEX_SETOFFSET])->setTrigger(levelValue); 1007 ((ControlSetOffset *) this->control[CONTROLINDEX_SETOFFSET])->setTrigger(levelValue);
934 this->controlPending[CONTROLINDEX_SETOFFSET] = true; 1008 this->controlPending[CONTROLINDEX_SETOFFSET] = true;
@@ -936,8 +1010,8 @@ namespace Hantek { @@ -936,8 +1010,8 @@ namespace Hantek {
936 1010
937 /// \todo Get alternating trigger in here 1011 /// \todo Get alternating trigger in here
938 1012
939 - this->triggerLevel[channel] = level;  
940 - return (double) ((levelValue - minimum) / (maximum - minimum) - this->offsetReal[channel]) * this->gainSteps[this->gain[channel]]; 1013 + this->settings.trigger.level[channel] = level;
  1014 + return (double) ((levelValue - minimum) / (maximum - minimum) - this->settings.voltage[channel].offsetReal) * this->specification.gainSteps[this->settings.voltage[channel].gain];
941 } 1015 }
942 1016
943 /// \brief Set the trigger slope. 1017 /// \brief Set the trigger slope.
@@ -950,24 +1024,24 @@ namespace Hantek { @@ -950,24 +1024,24 @@ namespace Hantek {
950 if(slope != Dso::SLOPE_NEGATIVE && slope != Dso::SLOPE_POSITIVE) 1024 if(slope != Dso::SLOPE_NEGATIVE && slope != Dso::SLOPE_POSITIVE)
951 return -1; 1025 return -1;
952 1026
953 - switch(this->commandVersion) {  
954 - case 0: { 1027 + switch(this->specification.command.bulk.setTrigger) {
  1028 + case BULK_SETTRIGGER5200: {
  1029 + // SetTrigger5200 bulk command for trigger slope
  1030 + ((BulkSetTrigger5200 *) this->command[BULK_SETTRIGGER5200])->setTriggerSlope(slope);
  1031 + this->commandPending[BULK_SETTRIGGER5200] = true;
  1032 + break;
  1033 + }
  1034 + default: {
955 // SetTriggerAndSamplerate bulk command for trigger slope 1035 // SetTriggerAndSamplerate bulk command for trigger slope
956 - CommandSetTriggerAndSamplerate *commandSetTriggerAndSamplerate = (CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE]; 1036 + BulkSetTriggerAndSamplerate *commandSetTriggerAndSamplerate = (BulkSetTriggerAndSamplerate *) this->command[BULK_SETTRIGGERANDSAMPLERATE];
957 1037
958 commandSetTriggerAndSamplerate->setTriggerSlope(slope); 1038 commandSetTriggerAndSamplerate->setTriggerSlope(slope);
959 - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true;  
960 - break;  
961 - }  
962 - case 1: {  
963 - // SetTrigger5200 bulk command for trigger slope  
964 - ((CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200])->setTriggerSlope(slope);  
965 - this->commandPending[COMMAND_SETTRIGGER5200] = true; 1039 + this->commandPending[BULK_SETTRIGGERANDSAMPLERATE] = true;
966 break; 1040 break;
967 } 1041 }
968 } 1042 }
969 1043
970 - this->triggerSlope = slope; 1044 + this->settings.trigger.slope = slope;
971 return 0; 1045 return 0;
972 } 1046 }
973 1047
@@ -979,44 +1053,44 @@ namespace Hantek { @@ -979,44 +1053,44 @@ namespace Hantek {
979 return -2; 1053 return -2;
980 1054
981 // All trigger positions are measured in samples 1055 // All trigger positions are measured in samples
982 - unsigned long int positionSamples = position * this->samplerateMax / this->samplerateDivider; 1056 + unsigned long int positionSamples = position * this->settings.samplerate.current;
983 1057
984 - switch(this->commandVersion) {  
985 - case 0: { 1058 + switch(this->specification.command.bulk.setTrigger) {
  1059 + case BULK_SETTRIGGER5200: {
986 // Fast rate mode uses both channels 1060 // Fast rate mode uses both channels
987 - if(((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->getFastRate()) 1061 + if(((BulkSetTrigger5200 *) this->command[BULK_SETTRIGGER5200])->getFastRate())
988 positionSamples /= HANTEK_CHANNELS; 1062 positionSamples /= HANTEK_CHANNELS;
989 1063
990 - // Calculate the position value (Start point depending on buffer size)  
991 - unsigned long int position = 0x7ffff - this->bufferSize + positionSamples;  
992 -  
993 - // SetTriggerAndSamplerate bulk command for trigger position  
994 - ((CommandSetTriggerAndSamplerate *) this->command[COMMAND_SETTRIGGERANDSAMPLERATE])->setTriggerPosition(position);  
995 - this->commandPending[COMMAND_SETTRIGGERANDSAMPLERATE] = true;  
996 -  
997 - break;  
998 - }  
999 - case 1: {  
1000 - // Fast rate mode uses both channels  
1001 - if(((CommandSetTrigger5200 *) this->command[COMMAND_SETTRIGGER5200])->getFastRate())  
1002 - positionSamples /= HANTEK_CHANNELS;  
1003 -  
1004 - // Calculate the position values (Inverse, maximum is 0xffff)  
1005 - unsigned short int positionPre = 0xffff - this->bufferSize + positionSamples; 1064 + // Calculate the position values (Inverse, maximum is 0xffff)
  1065 + unsigned short int positionPre = 0xffff - this->specification.bufferSizes[this->settings.bufferSizeId] + positionSamples;
1006 unsigned short int positionPost = 0xffff - positionSamples; 1066 unsigned short int positionPost = 0xffff - positionSamples;
1007 1067
1008 // SetBuffer5200 bulk command for trigger position 1068 // SetBuffer5200 bulk command for trigger position
1009 - CommandSetBuffer5200 *commandSetBuffer5200 = (CommandSetBuffer5200 *) this->command[COMMAND_SETBUFFER5200]; 1069 + BulkSetBuffer5200 *commandSetBuffer5200 = (BulkSetBuffer5200 *) this->command[BULK_SETBUFFER5200];
1010 commandSetBuffer5200->setTriggerPositionPre(positionPre); 1070 commandSetBuffer5200->setTriggerPositionPre(positionPre);
1011 commandSetBuffer5200->setTriggerPositionPost(positionPost); 1071 commandSetBuffer5200->setTriggerPositionPost(positionPost);
1012 - this->commandPending[COMMAND_SETBUFFER5200] = true; 1072 + this->commandPending[BULK_SETBUFFER5200] = true;
  1073 +
  1074 + break;
  1075 + }
  1076 + default: {
  1077 + // Fast rate mode uses both channels
  1078 + if(((BulkSetTriggerAndSamplerate *) this->command[BULK_SETTRIGGERANDSAMPLERATE])->getFastRate())
  1079 + positionSamples /= HANTEK_CHANNELS;
  1080 +
  1081 + // Calculate the position value (Start point depending on buffer size)
  1082 + unsigned long int position = 0x7ffff - this->specification.bufferSizes[this->settings.bufferSizeId] + positionSamples;
  1083 +
  1084 + // SetTriggerAndSamplerate bulk command for trigger position
  1085 + ((BulkSetTriggerAndSamplerate *) this->command[BULK_SETTRIGGERANDSAMPLERATE])->setTriggerPosition(position);
  1086 + this->commandPending[BULK_SETTRIGGERANDSAMPLERATE] = true;
1013 1087
1014 break; 1088 break;
1015 } 1089 }
1016 } 1090 }
1017 1091
1018 - this->triggerPosition = position;  
1019 - return (double) positionSamples / this->samplerateMax * this->samplerateDivider; 1092 + this->settings.trigger.position = position;
  1093 + return (double) positionSamples / this->settings.samplerate.current;
1020 } 1094 }
1021 1095
1022 #ifdef DEBUG 1096 #ifdef DEBUG
@@ -1038,7 +1112,7 @@ namespace Hantek { @@ -1038,7 +1112,7 @@ namespace Hantek {
1038 1112
1039 // Read command code (First byte) 1113 // Read command code (First byte)
1040 Helper::hexParse(data, &commandCode, 1); 1114 Helper::hexParse(data, &commandCode, 1);
1041 - if(commandCode > COMMAND_COUNT) 1115 + if(commandCode > BULK_COUNT)
1042 return -2; 1116 return -2;
1043 1117
1044 // Update bulk command and mark as pending 1118 // Update bulk command and mark as pending
openhantek/src/hantek/control.h
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 // 6 //
7 // Copyright (C) 2008, 2009 Oleg Khudyakov 7 // Copyright (C) 2008, 2009 Oleg Khudyakov
8 // prcoder@potrebitel.ru 8 // prcoder@potrebitel.ru
9 -// Copyright (C) 2010 Oliver Haag 9 +// Copyright (C) 2010, 2011 Oliver Haag
10 // oliver.haag@gmail.com 10 // oliver.haag@gmail.com
11 // 11 //
12 // This program is free software: you can redistribute it and/or modify it 12 // This program is free software: you can redistribute it and/or modify it
@@ -53,6 +53,122 @@ namespace Hantek { @@ -53,6 +53,122 @@ namespace Hantek {
53 }; 53 };
54 54
55 ////////////////////////////////////////////////////////////////////////////// 55 //////////////////////////////////////////////////////////////////////////////
  56 + /// \struct ControlSpecificationCommandsBulk hantek/control.h
  57 + /// \brief Stores the bulk command codes used for this device.
  58 + struct ControlSpecificationCommandsBulk {
  59 + BulkCode setFilter; ///< Command for setting used channels
  60 + BulkCode setSamplerate; ///< Command for samplerate settings
  61 + BulkCode setGain; ///< Command for gain settings (Usually in combination with CONTROL_SETRELAYS)
  62 + BulkCode setBuffer; ///< Command for buffer settings
  63 + BulkCode setTrigger; ///< Command for trigger settings
  64 + };
  65 +
  66 + //////////////////////////////////////////////////////////////////////////////
  67 + /// \struct ControlSpecificationCommandsControl hantek/control.h
  68 + /// \brief Stores the control command codes used for this device.
  69 + struct ControlSpecificationCommandsControl {
  70 + ControlCode setOffset; ///< Command for setting offset calibration data
  71 + ControlCode setRelays; ///< Command for setting gain relays (Usually in combination with BULK_SETGAIN)
  72 + };
  73 +
  74 + //////////////////////////////////////////////////////////////////////////////
  75 + /// \struct ControlSpecificationCommandsControlValues hantek/control.h
  76 + /// \brief Stores the control value codes used for this device.
  77 + struct ControlSpecificationCommandsValues {
  78 + ControlValue offsetLimits; ///< Code for channel offset limits
  79 + ControlValue voltageLimits; ///< Code for voltage limits
  80 + };
  81 +
  82 + //////////////////////////////////////////////////////////////////////////////
  83 + /// \struct ControlSpecificationCommands hantek/control.h
  84 + /// \brief Stores the command codes used for this device.
  85 + struct ControlSpecificationCommands {
  86 + ControlSpecificationCommandsBulk bulk; ///< The used bulk commands
  87 + ControlSpecificationCommandsControl control; ///< The used control commands
  88 + ControlSpecificationCommandsValues values; ///< The used control values
  89 + };
  90 +
  91 + //////////////////////////////////////////////////////////////////////////////
  92 + /// \struct ControlSamplerateLimits hantek/control.h
  93 + /// \brief Stores the samplerate limits for calculations.
  94 + struct ControlSamplerateLimits {
  95 + unsigned long int base; ///< The base for sample rate calculations
  96 + unsigned long int max; ///< The maximum sample rate
  97 + };
  98 +
  99 + //////////////////////////////////////////////////////////////////////////////
  100 + /// \struct ControlSpecificationSamplerate hantek/control.h
  101 + /// \brief Stores the samplerate limits.
  102 + struct ControlSpecificationSamplerate {
  103 + ControlSamplerateLimits single; ///< The limits for single channel mode
  104 + ControlSamplerateLimits multi; ///< The limits for multi channel mode
  105 + };
  106 +
  107 + //////////////////////////////////////////////////////////////////////////////
  108 + /// \struct ControlSpecification hantek/control.h
  109 + /// \brief Stores the specifications of the currently connected device.
  110 + struct ControlSpecification {
  111 + // Interface
  112 + ControlSpecificationCommands command; ///< The commands for this device
  113 +
  114 + // Limits
  115 + ControlSpecificationSamplerate samplerate; ///< The samplerate specifications
  116 + QList<unsigned long int> bufferSizes; ///< Available buffer sizes, ULONG_MAX means rolling
  117 + QList<unsigned long int> bufferDividers; ///< Samplerate dividers for buffer sizes
  118 + QList<double> gainSteps; ///< Available voltage steps in V/screenheight
  119 +
  120 + // Calibration
  121 + /// The sample values at the top of the screen
  122 + unsigned short int voltageLimit[HANTEK_CHANNELS][GAIN_COUNT];
  123 + /// Calibration data for the channel offsets
  124 + unsigned short int offsetLimit[HANTEK_CHANNELS][GAIN_COUNT][OFFSET_COUNT];
  125 + };
  126 +
  127 + //////////////////////////////////////////////////////////////////////////////
  128 + /// \struct ControlSettingsSamplerate hantek/control.h
  129 + /// \brief Stores the current samplerate settings of the device.
  130 + struct ControlSettingsSamplerate {
  131 + ControlSamplerateLimits *limits; ///< The samplerate limits
  132 + //unsigned long int divider; ///< The fixed samplerate divider
  133 + unsigned long int downsampling; ///< The variable downsampling factor
  134 + double current; ///< The current samplerate
  135 + };
  136 +
  137 + //////////////////////////////////////////////////////////////////////////////
  138 + /// \struct ControlSettingsSamplerate hantek/control.h
  139 + /// \brief Stores the current trigger settings of the device.
  140 + struct ControlSettingsTrigger {
  141 + double level[HANTEK_CHANNELS]; ///< The trigger level for each channel in V
  142 + double position; ///< The current pretrigger position
  143 + unsigned int point; ///< The trigger point value
  144 + Dso::TriggerMode mode; ///< The trigger mode
  145 + Dso::Slope slope; ///< The trigger slope
  146 + bool special; ///< true, if the trigger source is special
  147 + unsigned int source; ///< The trigger source
  148 + };
  149 +
  150 + //////////////////////////////////////////////////////////////////////////////
  151 + /// \struct ControlSettingsSamplerate hantek/control.h
  152 + /// \brief Stores the current amplification settings of the device.
  153 + struct ControlSettingsVoltage {
  154 + Gain gain; ///< The gain id
  155 + double offset; ///< The screen offset for each channel
  156 + double offsetReal; ///< The real offset for each channel (Due to quantization)
  157 + bool used; ///< true, if the channel is used
  158 + };
  159 +
  160 + //////////////////////////////////////////////////////////////////////////////
  161 + /// \struct ControlSettings hantek/control.h
  162 + /// \brief Stores the current settings of the device.
  163 + struct ControlSettings {
  164 + ControlSettingsSamplerate samplerate; ///< The samplerate settings
  165 + ControlSettingsVoltage voltage[HANTEK_CHANNELS]; ///< The amplification settings
  166 + ControlSettingsTrigger trigger; ///< The trigger settings
  167 + unsigned int bufferSizeId; ///< The id in the buffer size array
  168 + unsigned short int usedChannels; ///< Number of activated channels
  169 + };
  170 +
  171 + //////////////////////////////////////////////////////////////////////////////
56 /// \class Control hantek/control.h 172 /// \class Control hantek/control.h
57 /// \brief The DsoControl abstraction layer for %Hantek USB DSOs. 173 /// \brief The DsoControl abstraction layer for %Hantek USB DSOs.
58 class Control : public DsoControl { 174 class Control : public DsoControl {
@@ -72,48 +188,28 @@ namespace Hantek { @@ -72,48 +188,28 @@ namespace Hantek {
72 int getSamples(bool process); 188 int getSamples(bool process);
73 unsigned long int updateBufferSize(unsigned long int size); 189 unsigned long int updateBufferSize(unsigned long int size);
74 190
  191 + // Communication with device
75 Device *device; ///< The USB device for the oscilloscope 192 Device *device; ///< The USB device for the oscilloscope
76 193
77 - Helper::DataArray<unsigned char> *command[COMMAND_COUNT]; ///< Pointers to commands, ready to be transmitted  
78 - bool commandPending[COMMAND_COUNT]; ///< true, when the command should be executed 194 + Helper::DataArray<unsigned char> *command[BULK_COUNT]; ///< Pointers to bulk commands, ready to be transmitted
  195 + bool commandPending[BULK_COUNT]; ///< true, when the command should be executed
79 Helper::DataArray<unsigned char> *control[CONTROLINDEX_COUNT]; ///< Pointers to control commands 196 Helper::DataArray<unsigned char> *control[CONTROLINDEX_COUNT]; ///< Pointers to control commands
80 unsigned char controlCode[CONTROLINDEX_COUNT]; ///< Request codes for control commands 197 unsigned char controlCode[CONTROLINDEX_COUNT]; ///< Request codes for control commands
81 bool controlPending[CONTROLINDEX_COUNT]; ///< true, when the control command should be executed 198 bool controlPending[CONTROLINDEX_COUNT]; ///< true, when the control command should be executed
82 199
83 - short int commandVersion; ///< The used version of the commands  
84 -  
85 - /// Calibration data for the channel offsets  
86 - unsigned short int channelLevels[HANTEK_CHANNELS][GAIN_COUNT][OFFSET_COUNT];  
87 -  
88 - // Various cached settings  
89 - unsigned long int samplerateDivider; ///< The samplerate divider  
90 - unsigned long int samplerateMax; ///< The maximum sample rate for the current setup  
91 - unsigned long int samplerateChannelMax; ///< The maximum sample rate for a single channel  
92 - unsigned long int samplerateFastMax; ///< The maximum sample rate for fast rate mode  
93 - Gain gain[HANTEK_CHANNELS]; ///< The gain id  
94 - unsigned short int sampleRange[HANTEK_CHANNELS]; ///< The sample values at the top of the screen  
95 - double offset[HANTEK_CHANNELS]; ///< The current screen offset for each channel  
96 - double offsetReal[HANTEK_CHANNELS]; ///< The real offset for each channel (Due to quantization)  
97 - double triggerLevel[HANTEK_CHANNELS]; ///< The trigger level for each channel in V  
98 - double triggerPosition; ///< The current pretrigger position  
99 - unsigned int bufferSize; ///< The buffer size in samples  
100 - unsigned int triggerPoint; ///< The trigger point value  
101 - Dso::TriggerMode triggerMode; ///< The trigger mode  
102 - Dso::Slope triggerSlope; ///< The trigger slope  
103 - bool triggerSpecial; ///< true, if the trigger source is special  
104 - unsigned int triggerSource; ///< The trigger source 200 + // Device setup
  201 + ControlSpecification specification; ///< The specifications of the device
  202 + ControlSettings settings; ///< The current settings of the device
105 203
  204 + // Results
106 QList<double *> samples; ///< Sample data arrays 205 QList<double *> samples; ///< Sample data arrays
107 QList<unsigned int> samplesSize; ///< Number of samples data array 206 QList<unsigned int> samplesSize; ///< Number of samples data array
108 QMutex samplesMutex; ///< Mutex for the sample data 207 QMutex samplesMutex; ///< Mutex for the sample data
109 -  
110 - // Lists for enums  
111 - QList<double> gainSteps; ///< Voltage steps in V/screenheight  
112 208
113 public slots: 209 public slots:
114 virtual void connectDevice(); 210 virtual void connectDevice();
115 211
116 - unsigned long int setSamplerate(unsigned long int samplerate); 212 + unsigned long int setSamplerate(unsigned long int samplerate = 0);
117 unsigned long int setBufferSize(unsigned long int size); 213 unsigned long int setBufferSize(unsigned long int size);
118 214
119 int setChannelUsed(unsigned int channel, bool used); 215 int setChannelUsed(unsigned int channel, bool used);
openhantek/src/hantek/device.cpp
@@ -99,13 +99,6 @@ namespace Hantek { @@ -99,13 +99,6 @@ namespace Hantek {
99 } 99 }
100 } 100 }
101 101
102 - /// \todo Use 9 bit data model of DSO-5200(A)  
103 - /* if ((deviceModel == DSO_5200) || (deviceModel == DSO_5200A))  
104 - {  
105 - extraBitsData = true;  
106 - qDebug("Using a 9-bita data model");  
107 - }*/  
108 -  
109 if(this->model >= 0) { 102 if(this->model >= 0) {
110 // Open device 103 // Open device
111 deviceAddress = QString("%1:%2").arg(device->bus->location, 3, 10, QLatin1Char('0')).arg(device->devnum, 3, 10, QLatin1Char('0')); 104 deviceAddress = QString("%1:%2").arg(device->bus->location, 3, 10, QLatin1Char('0')).arg(device->devnum, 3, 10, QLatin1Char('0'));
openhantek/src/hantek/types.cpp
@@ -32,9 +32,9 @@ @@ -32,9 +32,9 @@
32 32
33 namespace Hantek { 33 namespace Hantek {
34 ////////////////////////////////////////////////////////////////////////////// 34 //////////////////////////////////////////////////////////////////////////////
35 - // class CommandSetFilter 35 + // class BulkSetFilter
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 + BulkSetFilter::BulkSetFilter() : Helper::DataArray<unsigned char>(8) {
38 this->init(); 38 this->init();
39 } 39 }
40 40
@@ -42,7 +42,7 @@ namespace Hantek { @@ -42,7 +42,7 @@ namespace Hantek {
42 /// \param channel1 true if channel 1 is filtered. 42 /// \param channel1 true if channel 1 is filtered.
43 /// \param channel2 true if channel 2 is filtered. 43 /// \param channel2 true if channel 2 is filtered.
44 /// \param trigger true if trigger is filtered. 44 /// \param trigger true if trigger is filtered.
45 - CommandSetFilter::CommandSetFilter(bool channel1, bool channel2, bool trigger) : Helper::DataArray<unsigned char>(8) { 45 + BulkSetFilter::BulkSetFilter(bool channel1, bool channel2, bool trigger) : Helper::DataArray<unsigned char>(8) {
46 this->init(); 46 this->init();
47 47
48 this->setChannel(0, channel1); 48 this->setChannel(0, channel1);
@@ -53,7 +53,7 @@ namespace Hantek { @@ -53,7 +53,7 @@ namespace Hantek {
53 /// \brief Gets the filtering state of one channel. 53 /// \brief Gets the filtering state of one channel.
54 /// \param channel The channel whose filtering state should be returned. 54 /// \param channel The channel whose filtering state should be returned.
55 /// \return The filtering state of the channel. 55 /// \return The filtering state of the channel.
56 - bool CommandSetFilter::getChannel(unsigned int channel) { 56 + bool BulkSetFilter::getChannel(unsigned int channel) {
57 FilterBits *filterBits = (FilterBits *) &(this->array[2]); 57 FilterBits *filterBits = (FilterBits *) &(this->array[2]);
58 if(channel == 0) 58 if(channel == 0)
59 return filterBits->channel1 == 1; 59 return filterBits->channel1 == 1;
@@ -64,7 +64,7 @@ namespace Hantek { @@ -64,7 +64,7 @@ namespace Hantek {
64 /// \brief Enables/disables filtering of one channel. 64 /// \brief Enables/disables filtering of one channel.
65 /// \param channel The channel that should be set. 65 /// \param channel The channel that should be set.
66 /// \param filtered true if the channel should be filtered. 66 /// \param filtered true if the channel should be filtered.
67 - void CommandSetFilter::setChannel(unsigned int channel, bool filtered) { 67 + void BulkSetFilter::setChannel(unsigned int channel, bool filtered) {
68 FilterBits *filterBits = (FilterBits *) &(this->array[2]); 68 FilterBits *filterBits = (FilterBits *) &(this->array[2]);
69 if(channel == 0) 69 if(channel == 0)
70 filterBits->channel1 = filtered ? 1 : 0; 70 filterBits->channel1 = filtered ? 1 : 0;
@@ -74,29 +74,29 @@ namespace Hantek { @@ -74,29 +74,29 @@ namespace Hantek {
74 74
75 /// \brief Gets the filtering state for the trigger. 75 /// \brief Gets the filtering state for the trigger.
76 /// \return The filtering state of the trigger. 76 /// \return The filtering state of the trigger.
77 - bool CommandSetFilter::getTrigger() { 77 + bool BulkSetFilter::getTrigger() {
78 return ((FilterBits *) &(this->array[2]))->trigger == 1; 78 return ((FilterBits *) &(this->array[2]))->trigger == 1;
79 } 79 }
80 80
81 /// \brief Enables/disables filtering for the trigger. 81 /// \brief Enables/disables filtering for the trigger.
82 /// \param filtered true if the trigger should be filtered. 82 /// \param filtered true if the trigger should be filtered.
83 - void CommandSetFilter::setTrigger(bool filtered) { 83 + void BulkSetFilter::setTrigger(bool filtered) {
84 FilterBits *filterBits = (FilterBits *) &(this->array[2]); 84 FilterBits *filterBits = (FilterBits *) &(this->array[2]);
85 85
86 filterBits->trigger = filtered ? 1 : 0; 86 filterBits->trigger = filtered ? 1 : 0;
87 } 87 }
88 88
89 /// \brief Initialize the array to the needed values. 89 /// \brief Initialize the array to the needed values.
90 - void CommandSetFilter::init() {  
91 - this->array[0] = COMMAND_SETFILTER; 90 + void BulkSetFilter::init() {
  91 + this->array[0] = BULK_SETFILTER;
92 this->array[1] = 0x0f; 92 this->array[1] = 0x0f;
93 } 93 }
94 94
95 95
96 ////////////////////////////////////////////////////////////////////////////// 96 //////////////////////////////////////////////////////////////////////////////
97 - // class CommandSetTriggerAndSamplerate 97 + // class BulkSetTriggerAndSamplerate
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 + BulkSetTriggerAndSamplerate::BulkSetTriggerAndSamplerate() : Helper::DataArray<unsigned char>(12) {
100 this->init(); 100 this->init();
101 } 101 }
102 102
@@ -109,7 +109,7 @@ namespace Hantek { @@ -109,7 +109,7 @@ namespace Hantek {
109 /// \param usedChannels 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 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) { 112 + BulkSetTriggerAndSamplerate::BulkSetTriggerAndSamplerate(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);
@@ -124,179 +124,179 @@ namespace Hantek { @@ -124,179 +124,179 @@ namespace Hantek {
124 124
125 /// \brief Get the triggerSource value in Tsr1Bits. 125 /// \brief Get the triggerSource value in Tsr1Bits.
126 /// \return The triggerSource value. 126 /// \return The triggerSource value.
127 - unsigned char CommandSetTriggerAndSamplerate::getTriggerSource() { 127 + unsigned char BulkSetTriggerAndSamplerate::getTriggerSource() {
128 return ((Tsr1Bits *) &(this->array[2]))->triggerSource; 128 return ((Tsr1Bits *) &(this->array[2]))->triggerSource;
129 } 129 }
130 130
131 /// \brief Set the triggerSource in Tsr1Bits to the given value. 131 /// \brief Set the triggerSource in Tsr1Bits to the given value.
132 /// \param value The new triggerSource value. 132 /// \param value The new triggerSource value.
133 - void CommandSetTriggerAndSamplerate::setTriggerSource(unsigned char value) { 133 + void BulkSetTriggerAndSamplerate::setTriggerSource(unsigned char value) {
134 ((Tsr1Bits *) &(this->array[2]))->triggerSource = value; 134 ((Tsr1Bits *) &(this->array[2]))->triggerSource = value;
135 } 135 }
136 136
137 /// \brief Get the bufferSize value in Tsr1Bits. 137 /// \brief Get the bufferSize value in Tsr1Bits.
138 /// \return The #BufferSizeId value. 138 /// \return The #BufferSizeId value.
139 - unsigned char CommandSetTriggerAndSamplerate::getBufferSize() { 139 + unsigned char BulkSetTriggerAndSamplerate::getBufferSize() {
140 return ((Tsr1Bits *) &(this->array[2]))->bufferSize; 140 return ((Tsr1Bits *) &(this->array[2]))->bufferSize;
141 } 141 }
142 142
143 /// \brief Set the bufferSize in Tsr1Bits to the given value. 143 /// \brief Set the bufferSize in Tsr1Bits to the given value.
144 /// \param value The new #BufferSizeId value. 144 /// \param value The new #BufferSizeId value.
145 - void CommandSetTriggerAndSamplerate::setBufferSize(unsigned char value) { 145 + void BulkSetTriggerAndSamplerate::setBufferSize(unsigned char value) {
146 ((Tsr1Bits *) &(this->array[2]))->bufferSize = 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.
150 /// \return The samplerateFast value. 150 /// \return The samplerateFast value.
151 - unsigned char CommandSetTriggerAndSamplerate::getSamplerateFast() { 151 + unsigned char BulkSetTriggerAndSamplerate::getSamplerateFast() {
152 return ((Tsr1Bits *) &(this->array[2]))->samplerateFast; 152 return ((Tsr1Bits *) &(this->array[2]))->samplerateFast;
153 } 153 }
154 154
155 /// \brief Set the samplerateFast in Tsr1Bits to the given value. 155 /// \brief Set the samplerateFast in Tsr1Bits to the given value.
156 /// \param value The new samplerateFast value. 156 /// \param value The new samplerateFast value.
157 - void CommandSetTriggerAndSamplerate::setSamplerateFast(unsigned char value) { 157 + void BulkSetTriggerAndSamplerate::setSamplerateFast(unsigned char value) {
158 ((Tsr1Bits *) &(this->array[2]))->samplerateFast = value; 158 ((Tsr1Bits *) &(this->array[2]))->samplerateFast = value;
159 } 159 }
160 160
161 /// \brief Get the usedChannels value in Tsr2Bits. 161 /// \brief Get the usedChannels value in Tsr2Bits.
162 /// \return The usedChannels value. 162 /// \return The usedChannels value.
163 - unsigned char CommandSetTriggerAndSamplerate::getUsedChannels() { 163 + unsigned char BulkSetTriggerAndSamplerate::getUsedChannels() {
164 return ((Tsr2Bits *) &(this->array[3]))->usedChannels; 164 return ((Tsr2Bits *) &(this->array[3]))->usedChannels;
165 } 165 }
166 166
167 /// \brief Set the usedChannels in Tsr2Bits to the given value. 167 /// \brief Set the usedChannels in Tsr2Bits to the given value.
168 /// \param value The new usedChannels value. 168 /// \param value The new usedChannels value.
169 - void CommandSetTriggerAndSamplerate::setUsedChannels(unsigned char value) { 169 + void BulkSetTriggerAndSamplerate::setUsedChannels(unsigned char value) {
170 ((Tsr2Bits *) &(this->array[3]))->usedChannels = 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.
174 /// \return The fastRate state. 174 /// \return The fastRate state.
175 - bool CommandSetTriggerAndSamplerate::getFastRate() { 175 + bool BulkSetTriggerAndSamplerate::getFastRate() {
176 return ((Tsr2Bits *) &(this->array[3]))->fastRate == 1; 176 return ((Tsr2Bits *) &(this->array[3]))->fastRate == 1;
177 } 177 }
178 178
179 /// \brief Set the fastRate in Tsr2Bits to the given state. 179 /// \brief Set the fastRate in Tsr2Bits to the given state.
180 /// \param fastRate The new fastRate state. 180 /// \param fastRate The new fastRate state.
181 - void CommandSetTriggerAndSamplerate::setFastRate(bool fastRate) { 181 + void BulkSetTriggerAndSamplerate::setFastRate(bool fastRate) {
182 ((Tsr2Bits *) &(this->array[3]))->fastRate = fastRate ? 1 : 0; 182 ((Tsr2Bits *) &(this->array[3]))->fastRate = fastRate ? 1 : 0;
183 } 183 }
184 184
185 /// \brief Get the triggerSlope value in Tsr2Bits. 185 /// \brief Get the triggerSlope value in Tsr2Bits.
186 /// \return The triggerSlope value. 186 /// \return The triggerSlope value.
187 - unsigned char CommandSetTriggerAndSamplerate::getTriggerSlope() { 187 + unsigned char BulkSetTriggerAndSamplerate::getTriggerSlope() {
188 return ((Tsr2Bits *) &(this->array[3]))->triggerSlope; 188 return ((Tsr2Bits *) &(this->array[3]))->triggerSlope;
189 } 189 }
190 190
191 /// \brief Set the triggerSlope in Tsr2Bits to the given value. 191 /// \brief Set the triggerSlope in Tsr2Bits to the given value.
192 /// \param slope The new triggerSlope value. 192 /// \param slope The new triggerSlope value.
193 - void CommandSetTriggerAndSamplerate::setTriggerSlope(unsigned char slope) { 193 + void BulkSetTriggerAndSamplerate::setTriggerSlope(unsigned char slope) {
194 ((Tsr2Bits *) &(this->array[3]))->triggerSlope = slope; 194 ((Tsr2Bits *) &(this->array[3]))->triggerSlope = slope;
195 } 195 }
196 196
197 /// \brief Get the SamplerateSlow value. 197 /// \brief Get the SamplerateSlow value.
198 /// \return The SamplerateSlow value. 198 /// \return The SamplerateSlow value.
199 - unsigned short int CommandSetTriggerAndSamplerate::getSamplerateSlow() { 199 + unsigned short int BulkSetTriggerAndSamplerate::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 SamplerateSlow to the given value. 203 /// \brief Set the SamplerateSlow to the given value.
204 /// \param samplerate The new SamplerateSlow value. 204 /// \param samplerate The new SamplerateSlow value.
205 - void CommandSetTriggerAndSamplerate::setSamplerateSlow(unsigned short int samplerate) { 205 + void BulkSetTriggerAndSamplerate::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);
208 } 208 }
209 209
210 /// \brief Get the TriggerPosition value. 210 /// \brief Get the TriggerPosition value.
211 /// \return The horizontal trigger position. 211 /// \return The horizontal trigger position.
212 - unsigned long int CommandSetTriggerAndSamplerate::getTriggerPosition() { 212 + unsigned long int BulkSetTriggerAndSamplerate::getTriggerPosition() {
213 return (unsigned long int) this->array[6] | ((unsigned long int) this->array[7] << 8) | ((unsigned long int) this->array[10] << 16); 213 return (unsigned long int) this->array[6] | ((unsigned long int) this->array[7] << 8) | ((unsigned long int) this->array[10] << 16);
214 } 214 }
215 215
216 /// \brief Set the TriggerPosition to the given value. 216 /// \brief Set the TriggerPosition to the given value.
217 /// \param position The new horizontal trigger position. 217 /// \param position The new horizontal trigger position.
218 - void CommandSetTriggerAndSamplerate::setTriggerPosition(unsigned long int position) { 218 + void BulkSetTriggerAndSamplerate::setTriggerPosition(unsigned long int position) {
219 this->array[6] = (unsigned char) position; 219 this->array[6] = (unsigned char) position;
220 this->array[7] = (unsigned char) (position >> 8); 220 this->array[7] = (unsigned char) (position >> 8);
221 this->array[10] = (unsigned char) (position >> 16); 221 this->array[10] = (unsigned char) (position >> 16);
222 } 222 }
223 223
224 /// \brief Initialize the array to the needed values. 224 /// \brief Initialize the array to the needed values.
225 - void CommandSetTriggerAndSamplerate::init() {  
226 - this->array[0] = COMMAND_SETTRIGGERANDSAMPLERATE; 225 + void BulkSetTriggerAndSamplerate::init() {
  226 + this->array[0] = BULK_SETTRIGGERANDSAMPLERATE;
227 } 227 }
228 228
229 229
230 ////////////////////////////////////////////////////////////////////////////// 230 //////////////////////////////////////////////////////////////////////////////
231 - // class CommandForceTrigger 231 + // class BulkForceTrigger
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) {  
234 - this->array[0] = COMMAND_FORCETRIGGER; 233 + BulkForceTrigger::BulkForceTrigger() : Helper::DataArray<unsigned char>(2) {
  234 + this->array[0] = BULK_FORCETRIGGER;
235 } 235 }
236 236
237 237
238 ////////////////////////////////////////////////////////////////////////////// 238 //////////////////////////////////////////////////////////////////////////////
239 - // class CommandCaptureStart 239 + // class BulkCaptureStart
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) {  
242 - this->array[0] = COMMAND_STARTSAMPLING; 241 + BulkCaptureStart::BulkCaptureStart() : Helper::DataArray<unsigned char>(2) {
  242 + this->array[0] = BULK_STARTSAMPLING;
243 } 243 }
244 244
245 245
246 ////////////////////////////////////////////////////////////////////////////// 246 //////////////////////////////////////////////////////////////////////////////
247 - // class CommandTriggerEnabled 247 + // class BulkTriggerEnabled
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) {  
250 - this->array[0] = COMMAND_ENABLETRIGGER; 249 + BulkTriggerEnabled::BulkTriggerEnabled() : Helper::DataArray<unsigned char>(2) {
  250 + this->array[0] = BULK_ENABLETRIGGER;
251 } 251 }
252 252
253 253
254 ////////////////////////////////////////////////////////////////////////////// 254 //////////////////////////////////////////////////////////////////////////////
255 - // class CommandGetData 255 + // class BulkGetData
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) {  
258 - this->array[0] = COMMAND_GETDATA; 257 + BulkGetData::BulkGetData() : Helper::DataArray<unsigned char>(2) {
  258 + this->array[0] = BULK_GETDATA;
259 } 259 }
260 260
261 261
262 ////////////////////////////////////////////////////////////////////////////// 262 //////////////////////////////////////////////////////////////////////////////
263 - // class CommandGetCaptureState 263 + // class BulkGetCaptureState
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) {  
266 - this->array[0] = COMMAND_GETCAPTURESTATE; 265 + BulkGetCaptureState::BulkGetCaptureState() : Helper::DataArray<unsigned char>(2) {
  266 + this->array[0] = BULK_GETCAPTURESTATE;
267 } 267 }
268 268
269 269
270 ////////////////////////////////////////////////////////////////////////////// 270 //////////////////////////////////////////////////////////////////////////////
271 - // class ResponseGetCaptureState 271 + // class BulkResponseGetCaptureState
272 /// \brief Initializes the array. 272 /// \brief Initializes the array.
273 - ResponseGetCaptureState::ResponseGetCaptureState() : Helper::DataArray<unsigned char>(512) { 273 + BulkResponseGetCaptureState::BulkResponseGetCaptureState() : Helper::DataArray<unsigned char>(512) {
274 } 274 }
275 275
276 /// \brief Gets the capture state. 276 /// \brief Gets the capture state.
277 /// \return The CaptureState of the oscilloscope. 277 /// \return The CaptureState of the oscilloscope.
278 - CaptureState ResponseGetCaptureState::getCaptureState() { 278 + CaptureState BulkResponseGetCaptureState::getCaptureState() {
279 return (CaptureState) this->array[0]; 279 return (CaptureState) this->array[0];
280 } 280 }
281 281
282 /// \brief Gets the trigger point. 282 /// \brief Gets the trigger point.
283 /// \return The trigger point for the captured samples. 283 /// \return The trigger point for the captured samples.
284 - unsigned int ResponseGetCaptureState::getTriggerPoint() { 284 + unsigned int BulkResponseGetCaptureState::getTriggerPoint() {
285 return this->array[2] | (this->array[3] << 8); 285 return this->array[2] | (this->array[3] << 8);
286 } 286 }
287 287
288 288
289 ////////////////////////////////////////////////////////////////////////////// 289 //////////////////////////////////////////////////////////////////////////////
290 - // class CommandSetGain 290 + // class BulkSetGain
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 + BulkSetGain::BulkSetGain() : Helper::DataArray<unsigned char>(8) {
293 this->init(); 293 this->init();
294 } 294 }
295 295
296 /// \brief Sets the gain to the given values. 296 /// \brief Sets the gain to the given values.
297 /// \param channel1 The gain value for channel 1. 297 /// \param channel1 The gain value for channel 1.
298 /// \param channel2 The gain value for channel 2. 298 /// \param channel2 The gain value for channel 2.
299 - CommandSetGain::CommandSetGain(unsigned char channel1, unsigned char channel2) : Helper::DataArray<unsigned char>(8) { 299 + BulkSetGain::BulkSetGain(unsigned char channel1, unsigned char channel2) : Helper::DataArray<unsigned char>(8) {
300 this->init(); 300 this->init();
301 301
302 this->setGain(0, channel1); 302 this->setGain(0, channel1);
@@ -306,7 +306,7 @@ namespace Hantek { @@ -306,7 +306,7 @@ namespace Hantek {
306 /// \brief Get the gain for the given channel. 306 /// \brief Get the gain for the given channel.
307 /// \param channel The channel whose gain should be returned. 307 /// \param channel The channel whose gain should be returned.
308 /// \returns The gain value. 308 /// \returns The gain value.
309 - unsigned char CommandSetGain::getGain(unsigned int channel) { 309 + unsigned char BulkSetGain::getGain(unsigned int channel) {
310 GainBits *gainBits = (GainBits *) &(this->array[2]); 310 GainBits *gainBits = (GainBits *) &(this->array[2]);
311 if(channel == 0) 311 if(channel == 0)
312 return gainBits->channel1; 312 return gainBits->channel1;
@@ -317,7 +317,7 @@ namespace Hantek { @@ -317,7 +317,7 @@ namespace Hantek {
317 /// \brief Set the gain for the given channel. 317 /// \brief Set the gain for the given channel.
318 /// \param channel The channel that should be set. 318 /// \param channel The channel that should be set.
319 /// \param value The new gain value for the channel. 319 /// \param value The new gain value for the channel.
320 - void CommandSetGain::setGain(unsigned int channel, unsigned char value) { 320 + void BulkSetGain::setGain(unsigned int channel, unsigned char value) {
321 GainBits *gainBits = (GainBits *) &(this->array[2]); 321 GainBits *gainBits = (GainBits *) &(this->array[2]);
322 if(channel == 0) 322 if(channel == 0)
323 gainBits->channel1 = value; 323 gainBits->channel1 = value;
@@ -326,23 +326,23 @@ namespace Hantek { @@ -326,23 +326,23 @@ namespace Hantek {
326 } 326 }
327 327
328 /// \brief Initialize the array to the needed values. 328 /// \brief Initialize the array to the needed values.
329 - void CommandSetGain::init() {  
330 - this->array[0] = COMMAND_SETGAIN; 329 + void BulkSetGain::init() {
  330 + this->array[0] = BULK_SETGAIN;
331 this->array[1] = 0x0f; 331 this->array[1] = 0x0f;
332 ((GainBits *) &(this->array[2]))->reserved = 3; 332 ((GainBits *) &(this->array[2]))->reserved = 3;
333 } 333 }
334 334
335 335
336 ////////////////////////////////////////////////////////////////////////////// 336 //////////////////////////////////////////////////////////////////////////////
337 - // class CommandSetLogicalData 337 + // class BulkSetLogicalData
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 + BulkSetLogicalData::BulkSetLogicalData() : Helper::DataArray<unsigned char>(8) {
340 this->init(); 340 this->init();
341 } 341 }
342 342
343 /// \brief Sets the data to the given value. 343 /// \brief Sets the data to the given value.
344 /// \param data The data byte. 344 /// \param data The data byte.
345 - CommandSetLogicalData::CommandSetLogicalData(unsigned char data) : Helper::DataArray<unsigned char>(8) { 345 + BulkSetLogicalData::BulkSetLogicalData(unsigned char data) : Helper::DataArray<unsigned char>(8) {
346 this->init(); 346 this->init();
347 347
348 this->setData(data); 348 this->setData(data);
@@ -350,33 +350,33 @@ namespace Hantek { @@ -350,33 +350,33 @@ namespace Hantek {
350 350
351 /// \brief Gets the data. 351 /// \brief Gets the data.
352 /// \returns The data byte. 352 /// \returns The data byte.
353 - unsigned char CommandSetLogicalData::getData() { 353 + unsigned char BulkSetLogicalData::getData() {
354 return this->array[2]; 354 return this->array[2];
355 } 355 }
356 356
357 /// \brief Sets the data to the given value. 357 /// \brief Sets the data to the given value.
358 /// \param data The new data byte. 358 /// \param data The new data byte.
359 - void CommandSetLogicalData::setData(unsigned char data) { 359 + void BulkSetLogicalData::setData(unsigned char data) {
360 this->array[2] = data; 360 this->array[2] = data;
361 } 361 }
362 362
363 /// \brief Initialize the array to the needed values. 363 /// \brief Initialize the array to the needed values.
364 - void CommandSetLogicalData::init() {  
365 - this->array[0] = COMMAND_SETLOGICALDATA; 364 + void BulkSetLogicalData::init() {
  365 + this->array[0] = BULK_SETLOGICALDATA;
366 this->array[1] = 0x0f; 366 this->array[1] = 0x0f;
367 } 367 }
368 368
369 369
370 ////////////////////////////////////////////////////////////////////////////// 370 //////////////////////////////////////////////////////////////////////////////
371 - // class CommandGetLogicalData 371 + // class BulkGetLogicalData
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) {  
374 - this->array[0] = COMMAND_GETLOGICALDATA; 373 + BulkGetLogicalData::BulkGetLogicalData() : Helper::DataArray<unsigned char>(2) {
  374 + this->array[0] = BULK_GETLOGICALDATA;
375 } 375 }
376 376
377 377
378 ////////////////////////////////////////////////////////////////////////////// 378 //////////////////////////////////////////////////////////////////////////////
379 - // class ControlGetSpeed 379 + // class BulkGetSpeed
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) {
382 } 382 }
@@ -389,10 +389,10 @@ namespace Hantek { @@ -389,10 +389,10 @@ namespace Hantek {
389 389
390 390
391 ////////////////////////////////////////////////////////////////////////////// 391 //////////////////////////////////////////////////////////////////////////////
392 - // class ControlBeginCommand 392 + // class BulkBeginCommand
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.
395 - ControlBeginCommand::ControlBeginCommand(CommandIndex index) : Helper::DataArray<unsigned char>(10) { 395 + ControlBeginCommand::ControlBeginCommand(BulkIndex index) : Helper::DataArray<unsigned char>(10) {
396 this->init(); 396 this->init();
397 397
398 this->setIndex(index); 398 this->setIndex(index);
@@ -400,13 +400,13 @@ namespace Hantek { @@ -400,13 +400,13 @@ namespace Hantek {
400 400
401 /// \brief Gets the command index. 401 /// \brief Gets the command index.
402 /// \return The CommandIndex for the command. 402 /// \return The CommandIndex for the command.
403 - CommandIndex ControlBeginCommand::getIndex() {  
404 - return (CommandIndex) this->array[1]; 403 + BulkIndex ControlBeginCommand::getIndex() {
  404 + return (BulkIndex) this->array[1];
405 } 405 }
406 406
407 /// \brief Sets the command index to the given value. 407 /// \brief Sets the command index to the given value.
408 /// \param index The new CommandIndex for the command. 408 /// \param index The new CommandIndex for the command.
409 - void ControlBeginCommand::setIndex(CommandIndex index) { 409 + void ControlBeginCommand::setIndex(BulkIndex index) {
410 memset(&(this->array[1]), (unsigned char) index, 3); 410 memset(&(this->array[1]), (unsigned char) index, 3);
411 } 411 }
412 412
@@ -417,7 +417,7 @@ namespace Hantek { @@ -417,7 +417,7 @@ namespace Hantek {
417 417
418 418
419 ////////////////////////////////////////////////////////////////////////////// 419 //////////////////////////////////////////////////////////////////////////////
420 - // class ControlSetOffset 420 + // class BulkSetOffset
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) {
423 } 423 }
@@ -471,7 +471,7 @@ namespace Hantek { @@ -471,7 +471,7 @@ namespace Hantek {
471 471
472 472
473 ////////////////////////////////////////////////////////////////////////////// 473 //////////////////////////////////////////////////////////////////////////////
474 - // class ControlSetRelays 474 + // class BulkSetRelays
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.
477 /// \param ch1Below100mV Sets the state of the Channel 1 below 100 mV relay. 477 /// \param ch1Below100mV Sets the state of the Channel 1 below 100 mV relay.
@@ -564,16 +564,16 @@ namespace Hantek { @@ -564,16 +564,16 @@ namespace Hantek {
564 564
565 565
566 ////////////////////////////////////////////////////////////////////////////// 566 //////////////////////////////////////////////////////////////////////////////
567 - // class CommandSetSamplerate5200 567 + // class BulkSetSamplerate5200
568 /// \brief Sets the data array to the default values. 568 /// \brief Sets the data array to the default values.
569 - CommandSetSamplerate5200::CommandSetSamplerate5200() : Helper::DataArray<unsigned char>(6) { 569 + BulkSetSamplerate5200::BulkSetSamplerate5200() : Helper::DataArray<unsigned char>(6) {
570 this->init(); 570 this->init();
571 } 571 }
572 572
573 /// \brief Sets the data bytes to the specified values. 573 /// \brief Sets the data bytes to the specified values.
574 /// \param samplerateSlow The SamplerateSlow value. 574 /// \param samplerateSlow The SamplerateSlow value.
575 /// \param samplerateFast The SamplerateFast value. 575 /// \param samplerateFast The SamplerateFast value.
576 - CommandSetSamplerate5200::CommandSetSamplerate5200(unsigned short int samplerateSlow, unsigned char samplerateFast) : Helper::DataArray<unsigned char>(6) { 576 + BulkSetSamplerate5200::BulkSetSamplerate5200(unsigned short int samplerateSlow, unsigned char samplerateFast) : Helper::DataArray<unsigned char>(6) {
577 this->init(); 577 this->init();
578 578
579 this->setSamplerateFast(samplerateFast); 579 this->setSamplerateFast(samplerateFast);
@@ -582,39 +582,39 @@ namespace Hantek { @@ -582,39 +582,39 @@ namespace Hantek {
582 582
583 /// \brief Get the SamplerateFast value. 583 /// \brief Get the SamplerateFast value.
584 /// \return The SamplerateFast value. 584 /// \return The SamplerateFast value.
585 - unsigned char CommandSetSamplerate5200::getSamplerateFast() { 585 + unsigned char BulkSetSamplerate5200::getSamplerateFast() {
586 return this->array[4]; 586 return this->array[4];
587 } 587 }
588 588
589 /// \brief Set the SamplerateFast to the given value. 589 /// \brief Set the SamplerateFast to the given value.
590 /// \param value The new SamplerateFast value. 590 /// \param value The new SamplerateFast value.
591 - void CommandSetSamplerate5200::setSamplerateFast(unsigned char value) { 591 + void BulkSetSamplerate5200::setSamplerateFast(unsigned char value) {
592 this->array[4] = value; 592 this->array[4] = value;
593 } 593 }
594 594
595 /// \brief Get the SamplerateSlow value. 595 /// \brief Get the SamplerateSlow value.
596 /// \return The SamplerateSlow value. 596 /// \return The SamplerateSlow value.
597 - unsigned short int CommandSetSamplerate5200::getSamplerateSlow() { 597 + unsigned short int BulkSetSamplerate5200::getSamplerateSlow() {
598 return (unsigned short int) this->array[2] | ((unsigned short int) this->array[3] << 8); 598 return (unsigned short int) this->array[2] | ((unsigned short int) this->array[3] << 8);
599 } 599 }
600 600
601 /// \brief Set the SamplerateSlow to the given value. 601 /// \brief Set the SamplerateSlow to the given value.
602 /// \param samplerate The new SamplerateSlow value. 602 /// \param samplerate The new SamplerateSlow value.
603 - void CommandSetSamplerate5200::setSamplerateSlow(unsigned short int samplerate) { 603 + void BulkSetSamplerate5200::setSamplerateSlow(unsigned short int samplerate) {
604 this->array[2] = (unsigned char) samplerate; 604 this->array[2] = (unsigned char) samplerate;
605 this->array[3] = (unsigned char) (samplerate >> 8); 605 this->array[3] = (unsigned char) (samplerate >> 8);
606 } 606 }
607 607
608 /// \brief Initialize the array to the needed values. 608 /// \brief Initialize the array to the needed values.
609 - void CommandSetSamplerate5200::init() {  
610 - this->array[0] = COMMAND_SETSAMPLERATE5200; 609 + void BulkSetSamplerate5200::init() {
  610 + this->array[0] = BULK_SETSAMPLERATE5200;
611 } 611 }
612 612
613 613
614 ////////////////////////////////////////////////////////////////////////////// 614 //////////////////////////////////////////////////////////////////////////////
615 - // class CommandSetBuffer5200 615 + // class BulkSetBuffer5200
616 /// \brief Sets the data array to the default values. 616 /// \brief Sets the data array to the default values.
617 - CommandSetBuffer5200::CommandSetBuffer5200() : Helper::DataArray<unsigned char>(10) { 617 + BulkSetBuffer5200::BulkSetBuffer5200() : Helper::DataArray<unsigned char>(10) {
618 this->init(); 618 this->init();
619 } 619 }
620 620
@@ -624,7 +624,7 @@ namespace Hantek { @@ -624,7 +624,7 @@ namespace Hantek {
624 /// \param usedPre The TriggerPositionUsedPre value. 624 /// \param usedPre The TriggerPositionUsedPre value.
625 /// \param usedPost The TriggerPositionUsedPost value. 625 /// \param usedPost The TriggerPositionUsedPost value.
626 /// \param bufferSize The #BufferSizeId 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) { 627 + BulkSetBuffer5200::BulkSetBuffer5200(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(); 628 this->init();
629 629
630 this->setTriggerPositionPre(triggerPositionPre); 630 this->setTriggerPositionPre(triggerPositionPre);
@@ -636,78 +636,78 @@ namespace Hantek { @@ -636,78 +636,78 @@ namespace Hantek {
636 636
637 /// \brief Get the TriggerPositionPre value. 637 /// \brief Get the TriggerPositionPre value.
638 /// \return The TriggerPositionPre value. 638 /// \return The TriggerPositionPre value.
639 - unsigned short int CommandSetBuffer5200::getTriggerPositionPre() { 639 + unsigned short int BulkSetBuffer5200::getTriggerPositionPre() {
640 return (unsigned short int) this->array[2] | ((unsigned short int) this->array[3] << 8); 640 return (unsigned short int) this->array[2] | ((unsigned short int) this->array[3] << 8);
641 } 641 }
642 642
643 /// \brief Set the TriggerPositionPre to the given value. 643 /// \brief Set the TriggerPositionPre to the given value.
644 /// \param position The new TriggerPositionPre value. 644 /// \param position The new TriggerPositionPre value.
645 - void CommandSetBuffer5200::setTriggerPositionPre(unsigned short int position) { 645 + void BulkSetBuffer5200::setTriggerPositionPre(unsigned short int position) {
646 this->array[2] = (unsigned char) position; 646 this->array[2] = (unsigned char) position;
647 this->array[3] = (unsigned char) (position >> 8); 647 this->array[3] = (unsigned char) (position >> 8);
648 } 648 }
649 649
650 /// \brief Get the TriggerPositionPost value. 650 /// \brief Get the TriggerPositionPost value.
651 /// \return The TriggerPositionPost value. 651 /// \return The TriggerPositionPost value.
652 - unsigned short int CommandSetBuffer5200::getTriggerPositionPost() { 652 + unsigned short int BulkSetBuffer5200::getTriggerPositionPost() {
653 return (unsigned short int) this->array[6] | ((unsigned short int) this->array[7] << 8); 653 return (unsigned short int) this->array[6] | ((unsigned short int) this->array[7] << 8);
654 } 654 }
655 655
656 /// \brief Set the TriggerPositionPost to the given value. 656 /// \brief Set the TriggerPositionPost to the given value.
657 /// \param position The new TriggerPositionPost value. 657 /// \param position The new TriggerPositionPost value.
658 - void CommandSetBuffer5200::setTriggerPositionPost(unsigned short int position) { 658 + void BulkSetBuffer5200::setTriggerPositionPost(unsigned short int position) {
659 this->array[6] = (unsigned char) position; 659 this->array[6] = (unsigned char) position;
660 this->array[7] = (unsigned char) (position >> 8); 660 this->array[7] = (unsigned char) (position >> 8);
661 } 661 }
662 662
663 /// \brief Get the TriggerPositionUsedPre value. 663 /// \brief Get the TriggerPositionUsedPre value.
664 /// \return The #DTriggerPositionUsed value for the pre position. 664 /// \return The #DTriggerPositionUsed value for the pre position.
665 - unsigned char CommandSetBuffer5200::getUsedPre() { 665 + unsigned char BulkSetBuffer5200::getUsedPre() {
666 return this->array[4]; 666 return this->array[4];
667 } 667 }
668 668
669 /// \brief Set the TriggerPositionUsedPre to the given value. 669 /// \brief Set the TriggerPositionUsedPre to the given value.
670 /// \param value The new #DTriggerPositionUsed value for the pre position. 670 /// \param value The new #DTriggerPositionUsed value for the pre position.
671 - void CommandSetBuffer5200::setUsedPre(unsigned char value) { 671 + void BulkSetBuffer5200::setUsedPre(unsigned char value) {
672 this->array[4] = value; 672 this->array[4] = value;
673 } 673 }
674 674
675 /// \brief Get the TriggerPositionUsedPost value. 675 /// \brief Get the TriggerPositionUsedPost value.
676 /// \return The #DTriggerPositionUsed value for the post position. 676 /// \return The #DTriggerPositionUsed value for the post position.
677 - unsigned char CommandSetBuffer5200::getUsedPost() { 677 + unsigned char BulkSetBuffer5200::getUsedPost() {
678 return ((DBufferBits *) &(this->array[8]))->triggerPositionUsed; 678 return ((DBufferBits *) &(this->array[8]))->triggerPositionUsed;
679 } 679 }
680 680
681 /// \brief Set the TriggerPositionUsedPost to the given value. 681 /// \brief Set the TriggerPositionUsedPost to the given value.
682 /// \param value The new #DTriggerPositionUsed value for the post position. 682 /// \param value The new #DTriggerPositionUsed value for the post position.
683 - void CommandSetBuffer5200::setUsedPost(unsigned char value) { 683 + void BulkSetBuffer5200::setUsedPost(unsigned char value) {
684 ((DBufferBits *) &(this->array[8]))->triggerPositionUsed = value; 684 ((DBufferBits *) &(this->array[8]))->triggerPositionUsed = value;
685 } 685 }
686 686
687 /// \brief Get the bufferSize value in DBufferBits. 687 /// \brief Get the bufferSize value in DBufferBits.
688 /// \return The #BufferSizeId value. 688 /// \return The #BufferSizeId value.
689 - unsigned char CommandSetBuffer5200::getBufferSize() { 689 + unsigned char BulkSetBuffer5200::getBufferSize() {
690 return ((DBufferBits *) &(this->array[8]))->bufferSize; 690 return ((DBufferBits *) &(this->array[8]))->bufferSize;
691 } 691 }
692 692
693 /// \brief Set the bufferSize in DBufferBits to the given value. 693 /// \brief Set the bufferSize in DBufferBits to the given value.
694 /// \param value The new #BufferSizeId value. 694 /// \param value The new #BufferSizeId value.
695 - void CommandSetBuffer5200::setBufferSize(unsigned char value) { 695 + void BulkSetBuffer5200::setBufferSize(unsigned char value) {
696 ((DBufferBits *) &(this->array[8]))->bufferSize = value; 696 ((DBufferBits *) &(this->array[8]))->bufferSize = value;
697 } 697 }
698 698
699 /// \brief Initialize the array to the needed values. 699 /// \brief Initialize the array to the needed values.
700 - void CommandSetBuffer5200::init() {  
701 - this->array[0] = COMMAND_SETBUFFER5200; 700 + void BulkSetBuffer5200::init() {
  701 + this->array[0] = BULK_SETBUFFER5200;
702 this->array[5] = 0xff; 702 this->array[5] = 0xff;
703 this->array[9] = 0xff; 703 this->array[9] = 0xff;
704 } 704 }
705 705
706 706
707 ////////////////////////////////////////////////////////////////////////////// 707 //////////////////////////////////////////////////////////////////////////////
708 - // class CommandSetTrigger5200 708 + // class BulkSetTrigger5200
709 /// \brief Sets the data array to the default values. 709 /// \brief Sets the data array to the default values.
710 - CommandSetTrigger5200::CommandSetTrigger5200() : Helper::DataArray<unsigned char>(8) { 710 + BulkSetTrigger5200::BulkSetTrigger5200() : Helper::DataArray<unsigned char>(8) {
711 this->init(); 711 this->init();
712 } 712 }
713 713
@@ -717,7 +717,7 @@ namespace Hantek { @@ -717,7 +717,7 @@ namespace Hantek {
717 /// \param fastRate The fastRate state. 717 /// \param fastRate The fastRate state.
718 /// \param triggerSlope The triggerSlope value. 718 /// \param triggerSlope The triggerSlope value.
719 /// \param triggerPulse The triggerPulse 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) { 720 + BulkSetTrigger5200::BulkSetTrigger5200(unsigned char triggerSource, unsigned char usedChannels, bool fastRate, unsigned char triggerSlope, unsigned char triggerPulse) : Helper::DataArray<unsigned char>(8) {
721 this->init(); 721 this->init();
722 722
723 this->setTriggerSource(triggerSource); 723 this->setTriggerSource(triggerSource);
@@ -729,67 +729,67 @@ namespace Hantek { @@ -729,67 +729,67 @@ namespace Hantek {
729 729
730 /// \brief Get the triggerSource value in ETsrBits. 730 /// \brief Get the triggerSource value in ETsrBits.
731 /// \return The #TriggerSource value. 731 /// \return The #TriggerSource value.
732 - unsigned char CommandSetTrigger5200::getTriggerSource() { 732 + unsigned char BulkSetTrigger5200::getTriggerSource() {
733 return ((ETsrBits *) &(this->array[2]))->triggerSource; 733 return ((ETsrBits *) &(this->array[2]))->triggerSource;
734 } 734 }
735 735
736 /// \brief Set the triggerSource in ETsrBits to the given value. 736 /// \brief Set the triggerSource in ETsrBits to the given value.
737 /// \param value The new #TriggerSource value. 737 /// \param value The new #TriggerSource value.
738 - void CommandSetTrigger5200::setTriggerSource(unsigned char value) { 738 + void BulkSetTrigger5200::setTriggerSource(unsigned char value) {
739 ((ETsrBits *) &(this->array[2]))->triggerSource = value; 739 ((ETsrBits *) &(this->array[2]))->triggerSource = value;
740 } 740 }
741 741
742 /// \brief Get the usedChannels value in ETsrBits. 742 /// \brief Get the usedChannels value in ETsrBits.
743 /// \return The #UsedChannels value. 743 /// \return The #UsedChannels value.
744 - unsigned char CommandSetTrigger5200::getUsedChannels() { 744 + unsigned char BulkSetTrigger5200::getUsedChannels() {
745 return ((ETsrBits *) &(this->array[2]))->usedChannels; 745 return ((ETsrBits *) &(this->array[2]))->usedChannels;
746 } 746 }
747 747
748 /// \brief Set the usedChannels in ETsrBits to the given value. 748 /// \brief Set the usedChannels in ETsrBits to the given value.
749 /// \param value The new #UsedChannels value. 749 /// \param value The new #UsedChannels value.
750 - void CommandSetTrigger5200::setUsedChannels(unsigned char value) { 750 + void BulkSetTrigger5200::setUsedChannels(unsigned char value) {
751 ((ETsrBits *) &(this->array[2]))->usedChannels = value; 751 ((ETsrBits *) &(this->array[2]))->usedChannels = value;
752 } 752 }
753 753
754 /// \brief Get the fastRate state in ETsrBits. 754 /// \brief Get the fastRate state in ETsrBits.
755 /// \return The fastRate state (Already inverted). 755 /// \return The fastRate state (Already inverted).
756 - bool CommandSetTrigger5200::getFastRate() { 756 + bool BulkSetTrigger5200::getFastRate() {
757 return ((ETsrBits *) &(this->array[2]))->fastRate == 0; 757 return ((ETsrBits *) &(this->array[2]))->fastRate == 0;
758 } 758 }
759 759
760 /// \brief Set the fastRate in ETsrBits to the given state. 760 /// \brief Set the fastRate in ETsrBits to the given state.
761 /// \param fastRate The new fastRate state (Automatically inverted). 761 /// \param fastRate The new fastRate state (Automatically inverted).
762 - void CommandSetTrigger5200::setFastRate(bool fastRate) { 762 + void BulkSetTrigger5200::setFastRate(bool fastRate) {
763 ((ETsrBits *) &(this->array[2]))->fastRate = fastRate ? 0 : 1; 763 ((ETsrBits *) &(this->array[2]))->fastRate = fastRate ? 0 : 1;
764 } 764 }
765 765
766 /// \brief Get the triggerSlope value in ETsrBits. 766 /// \brief Get the triggerSlope value in ETsrBits.
767 /// \return The triggerSlope value. 767 /// \return The triggerSlope value.
768 - unsigned char CommandSetTrigger5200::getTriggerSlope() { 768 + unsigned char BulkSetTrigger5200::getTriggerSlope() {
769 return ((ETsrBits *) &(this->array[2]))->triggerSlope; 769 return ((ETsrBits *) &(this->array[2]))->triggerSlope;
770 } 770 }
771 771
772 /// \brief Set the triggerSlope in ETsrBits to the given value. 772 /// \brief Set the triggerSlope in ETsrBits to the given value.
773 /// \param slope The new triggerSlope value. 773 /// \param slope The new triggerSlope value.
774 - void CommandSetTrigger5200::setTriggerSlope(unsigned char slope) { 774 + void BulkSetTrigger5200::setTriggerSlope(unsigned char slope) {
775 ((ETsrBits *) &(this->array[2]))->triggerSlope = slope; 775 ((ETsrBits *) &(this->array[2]))->triggerSlope = slope;
776 } 776 }
777 777
778 /// \brief Get the triggerPulse state in ETsrBits. 778 /// \brief Get the triggerPulse state in ETsrBits.
779 /// \return The triggerPulse state. 779 /// \return The triggerPulse state.
780 - bool CommandSetTrigger5200::getTriggerPulse() { 780 + bool BulkSetTrigger5200::getTriggerPulse() {
781 return ((ETsrBits *) &(this->array[2]))->triggerPulse == 1; 781 return ((ETsrBits *) &(this->array[2]))->triggerPulse == 1;
782 } 782 }
783 783
784 /// \brief Set the triggerPulse in ETsrBits to the given state. 784 /// \brief Set the triggerPulse in ETsrBits to the given state.
785 /// \param pulse The new triggerPulse state. 785 /// \param pulse The new triggerPulse state.
786 - void CommandSetTrigger5200::setTriggerPulse(bool pulse) { 786 + void BulkSetTrigger5200::setTriggerPulse(bool pulse) {
787 ((ETsrBits *) &(this->array[2]))->triggerPulse = pulse ? 1 : 0; 787 ((ETsrBits *) &(this->array[2]))->triggerPulse = pulse ? 1 : 0;
788 } 788 }
789 789
790 /// \brief Initialize the array to the needed values. 790 /// \brief Initialize the array to the needed values.
791 - void CommandSetTrigger5200::init() {  
792 - this->array[0] = COMMAND_SETTRIGGER5200; 791 + void BulkSetTrigger5200::init() {
  792 + this->array[0] = BULK_SETTRIGGER5200;
793 this->array[4] = 0x02; 793 this->array[4] = 0x02;
794 } 794 }
795 } 795 }
openhantek/src/hantek/types.h
@@ -47,10 +47,10 @@ @@ -47,10 +47,10 @@
47 /// \brief All %Hantek DSO device specific things. 47 /// \brief All %Hantek DSO device specific things.
48 namespace Hantek { 48 namespace Hantek {
49 ////////////////////////////////////////////////////////////////////////////// 49 //////////////////////////////////////////////////////////////////////////////
50 - /// \enum CommandCode hantek/types.h 50 + /// \enum BulkCode hantek/types.h
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 BulkCode {
54 /// <p> 54 /// <p>
55 /// This command sets channel and trigger filter: 55 /// This command sets channel and trigger filter:
56 /// <table> 56 /// <table>
@@ -66,7 +66,7 @@ namespace Hantek { @@ -66,7 +66,7 @@ namespace Hantek {
66 /// </tr> 66 /// </tr>
67 /// </table> 67 /// </table>
68 /// </p> 68 /// </p>
69 - COMMAND_SETFILTER, 69 + BULK_SETFILTER,
70 70
71 /// <p> 71 /// <p>
72 /// This command sets trigger and timebase: 72 /// This command sets trigger and timebase:
@@ -101,7 +101,7 @@ namespace Hantek { @@ -101,7 +101,7 @@ namespace Hantek {
101 /// <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. 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> 103 /// </p>
104 - COMMAND_SETTRIGGERANDSAMPLERATE, 104 + BULK_SETTRIGGERANDSAMPLERATE,
105 105
106 /// <p> 106 /// <p>
107 /// This command forces triggering: 107 /// This command forces triggering:
@@ -112,7 +112,7 @@ namespace Hantek { @@ -112,7 +112,7 @@ namespace Hantek {
112 /// </tr> 112 /// </tr>
113 /// </table> 113 /// </table>
114 /// </p> 114 /// </p>
115 - COMMAND_FORCETRIGGER, 115 + BULK_FORCETRIGGER,
116 116
117 /// <p> 117 /// <p>
118 /// This command starts to capture data: 118 /// This command starts to capture data:
@@ -123,7 +123,7 @@ namespace Hantek { @@ -123,7 +123,7 @@ namespace Hantek {
123 /// </tr> 123 /// </tr>
124 /// </table> 124 /// </table>
125 /// </p> 125 /// </p>
126 - COMMAND_STARTSAMPLING, 126 + BULK_STARTSAMPLING,
127 127
128 /// <p> 128 /// <p>
129 /// This command sets the trigger: 129 /// This command sets the trigger:
@@ -134,7 +134,7 @@ namespace Hantek { @@ -134,7 +134,7 @@ namespace Hantek {
134 /// </tr> 134 /// </tr>
135 /// </table> 135 /// </table>
136 /// </p> 136 /// </p>
137 - COMMAND_ENABLETRIGGER, 137 + BULK_ENABLETRIGGER,
138 138
139 /// <p> 139 /// <p>
140 /// This command reads data from the hardware: 140 /// This command reads data from the hardware:
@@ -160,13 +160,27 @@ namespace Hantek { @@ -160,13 +160,27 @@ namespace Hantek {
160 /// </tr> 160 /// </tr>
161 /// <tr> 161 /// <tr>
162 /// <td>Sample[1024]</td> 162 /// <td>Sample[1024]</td>
  163 + /// <td colspan="2">...</td>
  164 + /// </tr>
  165 + /// </table>
  166 + /// Because of the 10 bit data model, the DSO-5200 transmits the two extra bits for each sample afterwards:
  167 + /// <table>
  168 + /// <tr>
  169 + /// <td>Extra[0] << 2 | Extra[1]</td>
  170 + /// <td>0</td>
  171 + /// <td>Extra[2] << 2 | Extra[3]</td>
  172 + /// <td>0</td>
163 /// <td>...</td> 173 /// <td>...</td>
164 - /// <td>...</td> 174 + /// <td>Extra[510] << 2 | Extra[511]</td>
  175 + /// <td>0</td>
  176 + /// </tr>
  177 + /// <tr>
  178 + /// <td>Extra[512] << 2 | Extra[513]</td>
  179 + /// <td colspan="6">...</td>
165 /// </tr> 180 /// </tr>
166 /// </table> 181 /// </table>
167 - /// Because of the 9 bit data model, the DSO-5200 transmits an additional MSB for each sample afterwards.  
168 /// </p> 182 /// </p>
169 - COMMAND_GETDATA, 183 + BULK_GETDATA,
170 184
171 /// <p> 185 /// <p>
172 /// This command checks the capture state: 186 /// This command checks the capture state:
@@ -189,7 +203,7 @@ namespace Hantek { @@ -189,7 +203,7 @@ namespace Hantek {
189 /// </tr> 203 /// </tr>
190 /// </table> 204 /// </table>
191 /// </p> 205 /// </p>
192 - COMMAND_GETCAPTURESTATE, 206 + BULK_GETCAPTURESTATE,
193 207
194 /// <p> 208 /// <p>
195 /// This command sets the gain: 209 /// This command sets the gain:
@@ -207,10 +221,10 @@ namespace Hantek { @@ -207,10 +221,10 @@ namespace Hantek {
207 /// </table> 221 /// </table>
208 /// It is usually used in combination with #CONTROL_SETRELAYS. 222 /// It is usually used in combination with #CONTROL_SETRELAYS.
209 /// </p> 223 /// </p>
210 - COMMAND_SETGAIN, 224 + BULK_SETGAIN,
211 225
212 /// <p> 226 /// <p>
213 - /// This command sets the logical data (And what the hell is this?...): 227 + /// This command sets the logical data (Not used in official Hantek software):
214 /// <table> 228 /// <table>
215 /// <tr> 229 /// <tr>
216 /// <td>0x08</td> 230 /// <td>0x08</td>
@@ -224,10 +238,10 @@ namespace Hantek { @@ -224,10 +238,10 @@ namespace Hantek {
224 /// </tr> 238 /// </tr>
225 /// </table> 239 /// </table>
226 /// </p> 240 /// </p>
227 - COMMAND_SETLOGICALDATA, 241 + BULK_SETLOGICALDATA,
228 242
229 /// <p> 243 /// <p>
230 - /// This command reads the logical data (And what the hell is this?...): 244 + /// This command reads the logical data (Not used in official Hantek software):
231 /// <table> 245 /// <table>
232 /// <tr> 246 /// <tr>
233 /// <td>0x09</td> 247 /// <td>0x09</td>
@@ -236,17 +250,15 @@ namespace Hantek { @@ -236,17 +250,15 @@ namespace Hantek {
236 /// </table> 250 /// </table>
237 /// </p> 251 /// </p>
238 /// <p> 252 /// <p>
239 - /// The oscilloscope returns the logical data, which is 64 or 512 bytes long: 253 + /// The oscilloscope returns the logical data, which contains valid data in the first byte although it is 64 or 512 bytes long:
240 /// <table> 254 /// <table>
241 /// <tr> 255 /// <tr>
242 - /// <td>?</td>  
243 - /// <td>?</td>  
244 - /// <td>?</td> 256 + /// <td>Data</td>
245 /// <td>...</td> 257 /// <td>...</td>
246 /// </tr> 258 /// </tr>
247 /// </table> 259 /// </table>
248 /// </p> 260 /// </p>
249 - COMMAND_GETLOGICALDATA, 261 + BULK_GETLOGICALDATA,
250 262
251 /// <p> 263 /// <p>
252 /// This command isn't used for the DSO-2090 and DSO-5200: 264 /// This command isn't used for the DSO-2090 and DSO-5200:
@@ -257,7 +269,7 @@ namespace Hantek { @@ -257,7 +269,7 @@ namespace Hantek {
257 /// </tr> 269 /// </tr>
258 /// </table> 270 /// </table>
259 /// </p> 271 /// </p>
260 - COMMAND_UNKNOWN_0A, 272 + BULK_UNKNOWN_0A,
261 273
262 /// <p> 274 /// <p>
263 /// This command isn't used for the DSO-2090 and DSO-5200: 275 /// This command isn't used for the DSO-2090 and DSO-5200:
@@ -268,7 +280,7 @@ namespace Hantek { @@ -268,7 +280,7 @@ namespace Hantek {
268 /// </tr> 280 /// </tr>
269 /// </table> 281 /// </table>
270 /// </p> 282 /// </p>
271 - COMMAND_UNKNOWN_0B, 283 + BULK_UNKNOWN_0B,
272 284
273 /// <p> 285 /// <p>
274 /// This command sets the sampling rate for the DSO-5200: 286 /// This command sets the sampling rate for the DSO-5200:
@@ -288,7 +300,7 @@ namespace Hantek { @@ -288,7 +300,7 @@ namespace Hantek {
288 /// <i>Samplerate = SamplerateMax / (2comp(SamplerateSlow) * 2 + 4 - SamplerateFast)</i><br /> 300 /// <i>Samplerate = SamplerateMax / (2comp(SamplerateSlow) * 2 + 4 - SamplerateFast)</i><br />
289 /// SamplerateMax is 100 MS/s for the DSO-5200 in default configuration and 250 MS/s in fast rate mode though, the modifications regarding buffer size are the the same that apply for the DSO-2090. 301 /// SamplerateMax is 100 MS/s for the DSO-5200 in default configuration and 250 MS/s in fast rate mode though, the modifications regarding buffer size are the the same that apply for the DSO-2090.
290 /// </p> 302 /// </p>
291 - COMMAND_SETSAMPLERATE5200, 303 + BULK_SETSAMPLERATE5200,
292 304
293 /// <p> 305 /// <p>
294 /// This command sets the trigger position and buffer size for the DSO-5200: 306 /// This command sets the trigger position and buffer size for the DSO-5200:
@@ -314,7 +326,7 @@ namespace Hantek { @@ -314,7 +326,7 @@ namespace Hantek {
314 /// <p> 326 /// <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%. 327 /// 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> 328 /// </p>
317 - COMMAND_SETBUFFER5200, 329 + BULK_SETBUFFER5200,
318 330
319 /// <p> 331 /// <p>
320 /// This command sets the channel and trigger settings for the DSO-5200: 332 /// This command sets the channel and trigger settings for the DSO-5200:
@@ -331,9 +343,9 @@ namespace Hantek { @@ -331,9 +343,9 @@ namespace Hantek {
331 /// </tr> 343 /// </tr>
332 /// </table> 344 /// </table>
333 /// </p> 345 /// </p>
334 - COMMAND_SETTRIGGER5200, 346 + BULK_SETTRIGGER5200,
335 347
336 - COMMAND_COUNT ///< Total number of commands 348 + BULK_COUNT ///< Total number of commands
337 }; 349 };
338 350
339 ////////////////////////////////////////////////////////////////////////////// 351 //////////////////////////////////////////////////////////////////////////////
@@ -457,16 +469,16 @@ namespace Hantek { @@ -457,16 +469,16 @@ namespace Hantek {
457 enum ControlValue { 469 enum ControlValue {
458 /// Value 0x08 is the calibration data for the channels offsets. It holds the offset value for the top and bottom of the scope screen for every gain step on every channel. The data is stored as a three-dimensional array:<br /> 470 /// Value 0x08 is the calibration data for the channels offsets. It holds the offset value for the top and bottom of the scope screen for every gain step on every channel. The data is stored as a three-dimensional array:<br />
459 /// <i>channelLevels[channel][#Gain][#LevelOffset]</i> 471 /// <i>channelLevels[channel][#Gain][#LevelOffset]</i>
460 - VALUE_CHANNELLEVEL = 0x08, 472 + VALUE_OFFSETLIMITS = 0x08,
461 473
462 /// Value 0x0a is the address of the device. It has a length of one byte. 474 /// Value 0x0a is the address of the device. It has a length of one byte.
463 VALUE_DEVICEADDRESS = 0x0a, 475 VALUE_DEVICEADDRESS = 0x0a,
464 476
465 - /// Value 0x60 seems to be some calibration data with a length of four bytes. What it is good for is unknown so far. 477 + /// Value 0x60 is the calibration data for the fast rate mode on the DSO-5200. It's used to correct the level differences between the two merged channels to avoid .
466 VALUE_CALIBRATIONDATA = 0x60, 478 VALUE_CALIBRATIONDATA = 0x60,
467 479
468 - /// Value 0x70 is an additional data that is used on the DSO-5200, it's six bytes long.  
469 - VALUE_UNKNOWN_70 = 0x70 480 + /// Value 0x70 contains correction values for the ETS functionality of the DSO-5200.
  481 + VALUE_VOLTAGELIMITS = 0x70
470 }; 482 };
471 483
472 ////////////////////////////////////////////////////////////////////////////// 484 //////////////////////////////////////////////////////////////////////////////
@@ -556,13 +568,13 @@ namespace Hantek { @@ -556,13 +568,13 @@ namespace Hantek {
556 }; 568 };
557 569
558 ////////////////////////////////////////////////////////////////////////////// 570 //////////////////////////////////////////////////////////////////////////////
559 - /// \enum CommandIndex hantek/types.h 571 + /// \enum BulkIndex hantek/types.h
560 /// \brief Can be set by CONTROL_BEGINCOMMAND, maybe it allows multiple commands at the same time? 572 /// \brief Can be set by CONTROL_BEGINCOMMAND, maybe it allows multiple commands at the same time?
561 - enum CommandIndex { 573 + enum BulkIndex {
562 COMMANDINDEX_0 = 0x03, ///< Used most of the time 574 COMMANDINDEX_0 = 0x03, ///< Used most of the time
563 COMMANDINDEX_1 = 0x0a, 575 COMMANDINDEX_1 = 0x0a,
564 COMMANDINDEX_2 = 0x09, 576 COMMANDINDEX_2 = 0x09,
565 - COMMANDINDEX_3 = 0x01, ///< Used for #COMMAND_SETTRIGGERANDSAMPLERATE sometimes 577 + COMMANDINDEX_3 = 0x01, ///< Used for #BULK_SETTRIGGERANDSAMPLERATE sometimes
566 COMMANDINDEX_4 = 0x02, 578 COMMANDINDEX_4 = 0x02,
567 COMMANDINDEX_5 = 0x08 579 COMMANDINDEX_5 = 0x08
568 }; 580 };
@@ -586,7 +598,7 @@ namespace Hantek { @@ -586,7 +598,7 @@ namespace Hantek {
586 598
587 ////////////////////////////////////////////////////////////////////////////// 599 //////////////////////////////////////////////////////////////////////////////
588 /// \struct FilterBits hantek/types.h 600 /// \struct FilterBits hantek/types.h
589 - /// \brief The bits for COMMAND_SETFILTER. 601 + /// \brief The bits for BULK_SETFILTER.
590 struct FilterBits { 602 struct FilterBits {
591 unsigned char channel1:1; ///< Set to true when channel 1 isn't used 603 unsigned char channel1:1; ///< Set to true when channel 1 isn't used
592 unsigned char channel2:1; ///< Set to true when channel 2 isn't used 604 unsigned char channel2:1; ///< Set to true when channel 2 isn't used
@@ -596,7 +608,7 @@ namespace Hantek { @@ -596,7 +608,7 @@ namespace Hantek {
596 608
597 ////////////////////////////////////////////////////////////////////////////// 609 //////////////////////////////////////////////////////////////////////////////
598 /// \struct GainBits hantek/types.h 610 /// \struct GainBits hantek/types.h
599 - /// \brief The gain bits for COMMAND_SETGAIN. 611 + /// \brief The gain bits for BULK_SETGAIN.
600 struct GainBits { 612 struct GainBits {
601 unsigned char channel1:2; ///< Gain for CH1, 0 = 1e* V, 1 = 2e*, 2 = 5e* 613 unsigned char channel1:2; ///< Gain for CH1, 0 = 1e* V, 1 = 2e*, 2 = 5e*
602 unsigned char channel2:2; ///< Gain for CH1, 0 = 1e* V, 1 = 2e*, 2 = 5e* 614 unsigned char channel2:2; ///< Gain for CH1, 0 = 1e* V, 1 = 2e*, 2 = 5e*
@@ -643,12 +655,12 @@ namespace Hantek { @@ -643,12 +655,12 @@ namespace Hantek {
643 }; 655 };
644 656
645 ////////////////////////////////////////////////////////////////////////////// 657 //////////////////////////////////////////////////////////////////////////////
646 - /// \class CommandSetFilter hantek/types.h  
647 - /// \brief The COMMAND_SETFILTER builder.  
648 - class CommandSetFilter : public Helper::DataArray<unsigned char> { 658 + /// \class BulkSetFilter hantek/types.h
  659 + /// \brief The BULK_SETFILTER builder.
  660 + class BulkSetFilter : public Helper::DataArray<unsigned char> {
649 public: 661 public:
650 - CommandSetFilter();  
651 - CommandSetFilter(bool channel1, bool channel2, bool trigger); 662 + BulkSetFilter();
  663 + BulkSetFilter(bool channel1, bool channel2, bool trigger);
652 664
653 bool getChannel(unsigned int channel); 665 bool getChannel(unsigned int channel);
654 void setChannel(unsigned int channel, bool filtered); 666 void setChannel(unsigned int channel, bool filtered);
@@ -660,12 +672,12 @@ namespace Hantek { @@ -660,12 +672,12 @@ namespace Hantek {
660 }; 672 };
661 673
662 ////////////////////////////////////////////////////////////////////////////// 674 //////////////////////////////////////////////////////////////////////////////
663 - /// \class CommandSetTriggerAndSamplerate hantek/types.h  
664 - /// \brief The COMMAND_SETTRIGGERANDSAMPLERATE builder.  
665 - class CommandSetTriggerAndSamplerate : public Helper::DataArray<unsigned char> { 675 + /// \class BulkSetTriggerAndSamplerate hantek/types.h
  676 + /// \brief The BULK_SETTRIGGERANDSAMPLERATE builder.
  677 + class BulkSetTriggerAndSamplerate : public Helper::DataArray<unsigned char> {
666 public: 678 public:
667 - CommandSetTriggerAndSamplerate();  
668 - 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); 679 + BulkSetTriggerAndSamplerate();
  680 + BulkSetTriggerAndSamplerate(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);
669 681
670 unsigned char getTriggerSource(); 682 unsigned char getTriggerSource();
671 void setTriggerSource(unsigned char value); 683 void setTriggerSource(unsigned char value);
@@ -689,63 +701,63 @@ namespace Hantek { @@ -689,63 +701,63 @@ namespace Hantek {
689 }; 701 };
690 702
691 ////////////////////////////////////////////////////////////////////////////// 703 //////////////////////////////////////////////////////////////////////////////
692 - /// \class CommandForceTrigger hantek/types.h  
693 - /// \brief The COMMAND_FORCETRIGGER builder.  
694 - class CommandForceTrigger : public Helper::DataArray<unsigned char> { 704 + /// \class BulkForceTrigger hantek/types.h
  705 + /// \brief The BULK_FORCETRIGGER builder.
  706 + class BulkForceTrigger : public Helper::DataArray<unsigned char> {
695 public: 707 public:
696 - CommandForceTrigger(); 708 + BulkForceTrigger();
697 }; 709 };
698 710
699 ////////////////////////////////////////////////////////////////////////////// 711 //////////////////////////////////////////////////////////////////////////////
700 - /// \class CommandCaptureStart hantek/types.h  
701 - /// \brief The COMMAND_CAPTURESTART builder.  
702 - class CommandCaptureStart : public Helper::DataArray<unsigned char> { 712 + /// \class BulkCaptureStart hantek/types.h
  713 + /// \brief The BULK_CAPTURESTART builder.
  714 + class BulkCaptureStart : public Helper::DataArray<unsigned char> {
703 public: 715 public:
704 - CommandCaptureStart(); 716 + BulkCaptureStart();
705 }; 717 };
706 718
707 ////////////////////////////////////////////////////////////////////////////// 719 //////////////////////////////////////////////////////////////////////////////
708 - /// \class CommandTriggerEnabled hantek/types.h  
709 - /// \brief The COMMAND_TRIGGERENABLED builder.  
710 - class CommandTriggerEnabled : public Helper::DataArray<unsigned char> { 720 + /// \class BulkTriggerEnabled hantek/types.h
  721 + /// \brief The BULK_TRIGGERENABLED builder.
  722 + class BulkTriggerEnabled : public Helper::DataArray<unsigned char> {
711 public: 723 public:
712 - CommandTriggerEnabled(); 724 + BulkTriggerEnabled();
713 }; 725 };
714 726
715 ////////////////////////////////////////////////////////////////////////////// 727 //////////////////////////////////////////////////////////////////////////////
716 - /// \class CommandGetData hantek/types.h  
717 - /// \brief The COMMAND_GETDATA builder.  
718 - class CommandGetData : public Helper::DataArray<unsigned char> { 728 + /// \class BulkGetData hantek/types.h
  729 + /// \brief The BULK_GETDATA builder.
  730 + class BulkGetData : public Helper::DataArray<unsigned char> {
719 public: 731 public:
720 - CommandGetData(); 732 + BulkGetData();
721 }; 733 };
722 734
723 ////////////////////////////////////////////////////////////////////////////// 735 //////////////////////////////////////////////////////////////////////////////
724 - /// \class CommandGetCaptureState hantek/types.h  
725 - /// \brief The COMMAND_GETCAPTURESTATE builder.  
726 - class CommandGetCaptureState : public Helper::DataArray<unsigned char> { 736 + /// \class BulkGetCaptureState hantek/types.h
  737 + /// \brief The BULK_GETCAPTURESTATE builder.
  738 + class BulkGetCaptureState : public Helper::DataArray<unsigned char> {
727 public: 739 public:
728 - CommandGetCaptureState(); 740 + BulkGetCaptureState();
729 }; 741 };
730 742
731 ////////////////////////////////////////////////////////////////////////////// 743 //////////////////////////////////////////////////////////////////////////////
732 - /// \class ResponseGetCaptureState hantek/types.h  
733 - /// \brief The parser for the COMMAND_GETCAPTURESTATE response.  
734 - class ResponseGetCaptureState : public Helper::DataArray<unsigned char> { 744 + /// \class BulkResponseGetCaptureState hantek/types.h
  745 + /// \brief The parser for the BULK_GETCAPTURESTATE response.
  746 + class BulkResponseGetCaptureState : public Helper::DataArray<unsigned char> {
735 public: 747 public:
736 - ResponseGetCaptureState(); 748 + BulkResponseGetCaptureState();
737 749
738 CaptureState getCaptureState(); 750 CaptureState getCaptureState();
739 unsigned int getTriggerPoint(); 751 unsigned int getTriggerPoint();
740 }; 752 };
741 753
742 ////////////////////////////////////////////////////////////////////////////// 754 //////////////////////////////////////////////////////////////////////////////
743 - /// \class CommandSetGain hantek/types.h  
744 - /// \brief The COMMAND_SETGAIN builder.  
745 - class CommandSetGain : public Helper::DataArray<unsigned char> { 755 + /// \class BulkSetGain hantek/types.h
  756 + /// \brief The BULK_SETGAIN builder.
  757 + class BulkSetGain : public Helper::DataArray<unsigned char> {
746 public: 758 public:
747 - CommandSetGain();  
748 - CommandSetGain(unsigned char channel1, unsigned char channel2); 759 + BulkSetGain();
  760 + BulkSetGain(unsigned char channel1, unsigned char channel2);
749 761
750 unsigned char getGain(unsigned int channel); 762 unsigned char getGain(unsigned int channel);
751 void setGain(unsigned int channel, unsigned char value); 763 void setGain(unsigned int channel, unsigned char value);
@@ -755,12 +767,12 @@ namespace Hantek { @@ -755,12 +767,12 @@ namespace Hantek {
755 }; 767 };
756 768
757 ////////////////////////////////////////////////////////////////////////////// 769 //////////////////////////////////////////////////////////////////////////////
758 - /// \class CommandSetLogicalData hantek/types.h  
759 - /// \brief The COMMAND_SETLOGICALDATA builder.  
760 - class CommandSetLogicalData : public Helper::DataArray<unsigned char> { 770 + /// \class BulkSetLogicalData hantek/types.h
  771 + /// \brief The BULK_SETLOGICALDATA builder.
  772 + class BulkSetLogicalData : public Helper::DataArray<unsigned char> {
761 public: 773 public:
762 - CommandSetLogicalData();  
763 - CommandSetLogicalData(unsigned char data); 774 + BulkSetLogicalData();
  775 + BulkSetLogicalData(unsigned char data);
764 776
765 unsigned char getData(); 777 unsigned char getData();
766 void setData(unsigned char data); 778 void setData(unsigned char data);
@@ -770,11 +782,74 @@ namespace Hantek { @@ -770,11 +782,74 @@ namespace Hantek {
770 }; 782 };
771 783
772 ////////////////////////////////////////////////////////////////////////////// 784 //////////////////////////////////////////////////////////////////////////////
773 - /// \class CommandGetLogicalData hantek/types.h  
774 - /// \brief The COMMAND_GETLOGICALDATA builder.  
775 - class CommandGetLogicalData : public Helper::DataArray<unsigned char> { 785 + /// \class BulkGetLogicalData hantek/types.h
  786 + /// \brief The BULK_GETLOGICALDATA builder.
  787 + class BulkGetLogicalData : public Helper::DataArray<unsigned char> {
  788 + public:
  789 + BulkGetLogicalData();
  790 + };
  791 +
  792 + //////////////////////////////////////////////////////////////////////////////
  793 + /// \class BulkSetSamplerate5200 hantek/types.h
  794 + /// \brief The BULK_SETSAMPLERATE5200 builder.
  795 + class BulkSetSamplerate5200 : public Helper::DataArray<unsigned char> {
  796 + public:
  797 + BulkSetSamplerate5200();
  798 + BulkSetSamplerate5200(unsigned short int samplerateSlow, unsigned char samplerateFast);
  799 +
  800 + unsigned char getSamplerateFast();
  801 + void setSamplerateFast(unsigned char value);
  802 + unsigned short int getSamplerateSlow();
  803 + void setSamplerateSlow(unsigned short int samplerate);
  804 +
  805 + private:
  806 + void init();
  807 + };
  808 +
  809 + //////////////////////////////////////////////////////////////////////////////
  810 + /// \class BulkSetBuffer5200 hantek/types.h
  811 + /// \brief The BULK_SETBUFFER5200 builder.
  812 + class BulkSetBuffer5200 : public Helper::DataArray<unsigned char> {
776 public: 813 public:
777 - CommandGetLogicalData(); 814 + BulkSetBuffer5200();
  815 + BulkSetBuffer5200(unsigned short int triggerPositionPre, unsigned short int triggerPositionPost, unsigned char usedPre = 0, unsigned char usedPost = 0, unsigned char bufferSize = 0);
  816 +
  817 + unsigned short int getTriggerPositionPre();
  818 + void setTriggerPositionPre(unsigned short int value);
  819 + unsigned short int getTriggerPositionPost();
  820 + void setTriggerPositionPost(unsigned short int value);
  821 + unsigned char getUsedPre();
  822 + void setUsedPre(unsigned char value);
  823 + unsigned char getUsedPost();
  824 + void setUsedPost(unsigned char value);
  825 + unsigned char getBufferSize();
  826 + void setBufferSize(unsigned char value);
  827 +
  828 + private:
  829 + void init();
  830 + };
  831 +
  832 + //////////////////////////////////////////////////////////////////////////////
  833 + /// \class BulkSetTrigger5200 hantek/types.h
  834 + /// \brief The BULK_SETTRIGGER5200 builder.
  835 + class BulkSetTrigger5200 : public Helper::DataArray<unsigned char> {
  836 + public:
  837 + BulkSetTrigger5200();
  838 + BulkSetTrigger5200(unsigned char triggerSource, unsigned char usedChannels, bool fastRate = false, unsigned char triggerSlope = 0, unsigned char triggerPulse = 0);
  839 +
  840 + unsigned char getTriggerSource();
  841 + void setTriggerSource(unsigned char value);
  842 + unsigned char getUsedChannels();
  843 + void setUsedChannels(unsigned char value);
  844 + bool getFastRate();
  845 + void setFastRate(bool fastRate);
  846 + unsigned char getTriggerSlope();
  847 + void setTriggerSlope(unsigned char slope);
  848 + bool getTriggerPulse();
  849 + void setTriggerPulse(bool pulse);
  850 +
  851 + private:
  852 + void init();
778 }; 853 };
779 854
780 ////////////////////////////////////////////////////////////////////////////// 855 //////////////////////////////////////////////////////////////////////////////
@@ -792,10 +867,10 @@ namespace Hantek { @@ -792,10 +867,10 @@ namespace Hantek {
792 /// \brief The CONTROL_BEGINCOMMAND builder. 867 /// \brief The CONTROL_BEGINCOMMAND builder.
793 class ControlBeginCommand : public Helper::DataArray<unsigned char> { 868 class ControlBeginCommand : public Helper::DataArray<unsigned char> {
794 public: 869 public:
795 - ControlBeginCommand(CommandIndex index = COMMANDINDEX_0); 870 + ControlBeginCommand(BulkIndex index = COMMANDINDEX_0);
796 871
797 - CommandIndex getIndex();  
798 - void setIndex(CommandIndex index); 872 + BulkIndex getIndex();
  873 + void setIndex(BulkIndex index);
799 874
800 private: 875 private:
801 void init(); 876 void init();
@@ -834,69 +909,6 @@ namespace Hantek { @@ -834,69 +909,6 @@ namespace Hantek {
834 bool getTrigger(); 909 bool getTrigger();
835 void setTrigger(bool ext); 910 void setTrigger(bool ext);
836 }; 911 };
837 -  
838 - //////////////////////////////////////////////////////////////////////////////  
839 - /// \class CommandSetSamplerate5200 hantek/types.h  
840 - /// \brief The COMMAND_SETSAMPLERATE5200 builder.  
841 - class CommandSetSamplerate5200 : public Helper::DataArray<unsigned char> {  
842 - public:  
843 - CommandSetSamplerate5200();  
844 - CommandSetSamplerate5200(unsigned short int samplerateSlow, unsigned char samplerateFast);  
845 -  
846 - unsigned char getSamplerateFast();  
847 - void setSamplerateFast(unsigned char value);  
848 - unsigned short int getSamplerateSlow();  
849 - void setSamplerateSlow(unsigned short int samplerate);  
850 -  
851 - private:  
852 - void init();  
853 - };  
854 -  
855 - //////////////////////////////////////////////////////////////////////////////  
856 - /// \class CommandSetBuffer5200 hantek/types.h  
857 - /// \brief The COMMAND_SETBUFFER5200 builder.  
858 - class CommandSetBuffer5200 : public Helper::DataArray<unsigned char> {  
859 - public:  
860 - CommandSetBuffer5200();  
861 - CommandSetBuffer5200(unsigned short int triggerPositionPre, unsigned short int triggerPositionPost, unsigned char usedPre = 0, unsigned char usedPost = 0, unsigned char bufferSize = 0);  
862 -  
863 - unsigned short int getTriggerPositionPre();  
864 - void setTriggerPositionPre(unsigned short int value);  
865 - unsigned short int getTriggerPositionPost();  
866 - void setTriggerPositionPost(unsigned short int value);  
867 - unsigned char getUsedPre();  
868 - void setUsedPre(unsigned char value);  
869 - unsigned char getUsedPost();  
870 - void setUsedPost(unsigned char value);  
871 - unsigned char getBufferSize();  
872 - void setBufferSize(unsigned char value);  
873 -  
874 - private:  
875 - void init();  
876 - };  
877 -  
878 - //////////////////////////////////////////////////////////////////////////////  
879 - /// \class CommandSetTrigger5200 hantek/types.h  
880 - /// \brief The COMMAND_SETTRIGGER5200 builder.  
881 - class CommandSetTrigger5200 : public Helper::DataArray<unsigned char> {  
882 - public:  
883 - CommandSetTrigger5200();  
884 - CommandSetTrigger5200(unsigned char triggerSource, unsigned char usedChannels, bool fastRate = false, unsigned char triggerSlope = 0, unsigned char triggerPulse = 0);  
885 -  
886 - unsigned char getTriggerSource();  
887 - void setTriggerSource(unsigned char value);  
888 - unsigned char getUsedChannels();  
889 - void setUsedChannels(unsigned char value);  
890 - bool getFastRate();  
891 - void setFastRate(bool fastRate);  
892 - unsigned char getTriggerSlope();  
893 - void setTriggerSlope(unsigned char slope);  
894 - bool getTriggerPulse();  
895 - void setTriggerPulse(bool pulse);  
896 -  
897 - private:  
898 - void init();  
899 - };  
900 } 912 }
901 913
902 914